new file: Files/flashplayer_32_sa.exe new file: favicon.ico new file: globe.gif new file: imgs/download.png new file: imgs/zuck.jpg new file: index.html new file: other.ico new file: script.js new file: site.webmanifest new file: sitemap.html new file: styles/backround.css new file: styles/border.css new file: styles/fonts/Titillium_Web/OFL.txt new file: styles/fonts/Titillium_Web/TitilliumWeb-Black.ttf new file: styles/fonts/Titillium_Web/TitilliumWeb-Bold.ttf new file: styles/fonts/Titillium_Web/TitilliumWeb-BoldItalic.ttf new file: styles/fonts/Titillium_Web/TitilliumWeb-ExtraLight.ttf new file: styles/fonts/Titillium_Web/TitilliumWeb-ExtraLightItalic.ttf new file: styles/fonts/Titillium_Web/TitilliumWeb-Italic.ttf new file: styles/fonts/Titillium_Web/TitilliumWeb-Light.ttf new file: styles/fonts/Titillium_Web/TitilliumWeb-LightItalic.ttf new file: styles/fonts/Titillium_Web/TitilliumWeb-Regular.ttf new file: styles/fonts/Titillium_Web/TitilliumWeb-SemiBold.ttf new file: styles/fonts/Titillium_Web/TitilliumWeb-SemiBoldItalic.ttf new file: styles/fonts/webfontkit-20221027-163353/generator_config.txt new file: styles/fonts/webfontkit-20221027-163353/specimen_files/grid_12-825-55-15.css new file: styles/fonts/webfontkit-20221027-163353/specimen_files/specimen_stylesheet.css new file: styles/fonts/webfontkit-20221027-163353/stylesheet.css new file: styles/fonts/webfontkit-20221027-163353/titilliumweb-extralight-demo.html new file: styles/fonts/webfontkit-20221027-163353/titilliumweb-extralight-webfont.woff new file: styles/fonts/webfontkit-20221027-163353/titilliumweb-extralight-webfont.woff2 new file: styles/fonts/webfontkit-20221027-165950/generator_config.txt new file: styles/fonts/webfontkit-20221027-165950/specimen_files/grid_12-825-55-15.css new file: styles/fonts/webfontkit-20221027-165950/specimen_files/specimen_stylesheet.css new file: styles/fonts/webfontkit-20221027-165950/stylesheet.css new file: styles/fonts/webfontkit-20221027-165950/titilliumweb-bold-demo.html new file: styles/fonts/webfontkit-20221027-165950/titilliumweb-bold-webfont.woff new file: styles/fonts/webfontkit-20221027-165950/titilliumweb-bold-webfont.woff2 new file: styles/style.css new file: tools/2048/.gitignore new file: tools/2048/.jshintrc new file: tools/2048/CONTRIBUTING.md new file: tools/2048/LICENSE.txt new file: tools/2048/README.md new file: tools/2048/Rakefile new file: tools/2048/favicon.ico new file: tools/2048/index.html new file: tools/2048/js/animframe_polyfill.js new file: tools/2048/js/application.js new file: tools/2048/js/bind_polyfill.js new file: tools/2048/js/classlist_polyfill.js new file: tools/2048/js/game_manager.js new file: tools/2048/js/grid.js new file: tools/2048/js/html_actuator.js new file: tools/2048/js/keyboard_input_manager.js new file: tools/2048/js/local_storage_manager.js new file: tools/2048/js/tile.js new file: tools/2048/meta/apple-touch-icon.png new file: tools/webretro/cores/neocd_libretro.js new file: tools/webretro/cores/neocd_libretro.wasm new file: tools/webretro/cores/nestopia_libretro.js new file: tools/webretro/cores/nestopia_libretro.wasm new file: tools/webretro/cores/o2em_libretro.js new file: tools/webretro/cores/o2em_libretro.wasm new file: tools/webretro/cores/opera_libretro.js new file: tools/webretro/cores/opera_libretro.wasm
2109 lines
2.5 MiB
2109 lines
2.5 MiB
/******/ (function(modules) { // webpackBootstrap
|
|
/******/ // The module cache
|
|
/******/ var installedModules = {};
|
|
/******/
|
|
/******/ // The require function
|
|
/******/ function __webpack_require__(moduleId) {
|
|
/******/
|
|
/******/ // Check if module is in cache
|
|
/******/ if(installedModules[moduleId]) {
|
|
/******/ return installedModules[moduleId].exports;
|
|
/******/ }
|
|
/******/ // Create a new module (and put it into the cache)
|
|
/******/ var module = installedModules[moduleId] = {
|
|
/******/ i: moduleId,
|
|
/******/ l: false,
|
|
/******/ exports: {}
|
|
/******/ };
|
|
/******/
|
|
/******/ // Execute the module function
|
|
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
|
/******/
|
|
/******/ // Flag the module as loaded
|
|
/******/ module.l = true;
|
|
/******/
|
|
/******/ // Return the exports of the module
|
|
/******/ return module.exports;
|
|
/******/ }
|
|
/******/
|
|
/******/
|
|
/******/ // expose the modules object (__webpack_modules__)
|
|
/******/ __webpack_require__.m = modules;
|
|
/******/
|
|
/******/ // expose the module cache
|
|
/******/ __webpack_require__.c = installedModules;
|
|
/******/
|
|
/******/ // define getter function for harmony exports
|
|
/******/ __webpack_require__.d = function(exports, name, getter) {
|
|
/******/ if(!__webpack_require__.o(exports, name)) {
|
|
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
|
/******/ }
|
|
/******/ };
|
|
/******/
|
|
/******/ // define __esModule on exports
|
|
/******/ __webpack_require__.r = function(exports) {
|
|
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
/******/ }
|
|
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
/******/ };
|
|
/******/
|
|
/******/ // create a fake namespace object
|
|
/******/ // mode & 1: value is a module id, require it
|
|
/******/ // mode & 2: merge all properties of value into the ns
|
|
/******/ // mode & 4: return value when already ns object
|
|
/******/ // mode & 8|1: behave like require
|
|
/******/ __webpack_require__.t = function(value, mode) {
|
|
/******/ if(mode & 1) value = __webpack_require__(value);
|
|
/******/ if(mode & 8) return value;
|
|
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
|
/******/ var ns = Object.create(null);
|
|
/******/ __webpack_require__.r(ns);
|
|
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
|
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
|
/******/ return ns;
|
|
/******/ };
|
|
/******/
|
|
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
/******/ __webpack_require__.n = function(module) {
|
|
/******/ var getter = module && module.__esModule ?
|
|
/******/ function getDefault() { return module['default']; } :
|
|
/******/ function getModuleExports() { return module; };
|
|
/******/ __webpack_require__.d(getter, 'a', getter);
|
|
/******/ return getter;
|
|
/******/ };
|
|
/******/
|
|
/******/ // Object.prototype.hasOwnProperty.call
|
|
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
|
/******/
|
|
/******/ // __webpack_public_path__
|
|
/******/ __webpack_require__.p = "";
|
|
/******/
|
|
/******/
|
|
/******/ // Load entry module and return exports
|
|
/******/ return __webpack_require__(__webpack_require__.s = 0);
|
|
/******/ })
|
|
/************************************************************************/
|
|
/******/ ({
|
|
|
|
/***/ "./assets/dialog/bird.dialog.json":
|
|
/*!****************************************!*\
|
|
!*** ./assets/dialog/bird.dialog.json ***!
|
|
\****************************************/
|
|
/*! exports provided: entry, chirp, who, what, quest, multijump, bye, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"♪ Chirp!\\\",\\\"►Who are you? @who\\\",\\\"►What are you up to? @what\\\",\\\"►[relevant]Can you help me in my quest? @quest\\\",\\\"►[not chirp]Did you just say “Chirp”? @chirp\\\",\\\"►You have strange flying technique. @multijump\\\",\\\"►Bye, bird. @bye\\\"],\\\"chirp\\\":[\\\"Yes, I did. ♪ Chirp. That's what birds say! !set chirp true @entry\\\"],\\\"who\\\":[\\\"I'm the bird around these parts. @entry\\\"],\\\"what\\\":[\\\"I do bird stuff, mostly.\\\",\\\"I fly from my nest to some bushes to find food.\\\",\\\"♪ Chirp.\\\",\\\"There isn't any, though. !set relevant true\\\",\\\"My adopted child might go hungry again.\\\",\\\"►You adopted a bird baby?\\\",\\\"No. ♪ Chirp!\\\",\\\"It's something else. But it's still my son.\\\",\\\"You can visit our nest on the tree in the west...\\\",\\\"if you can fly, that is.\\\",\\\"♪ Chirp! @entry\\\"],\\\"quest\\\":[\\\"What quest? I'm a bird!\\\",\\\"Whatever you're up to is not my concern, really.\\\",\\\"♪ Chirp. I'm just doing my daily bird things. @entry\\\"],\\\"multijump\\\":[\\\"I'm not actually flying, though.\\\",\\\"It's the multi-jump power-up that I got a while ago.\\\",\\\"♪ Chirp.\\\",\\\"They said it was a flying ability, but it's not really.\\\",\\\"But I don't care much. At least I don't have to flap my wings anymore. @entry\\\"],\\\"bye\\\":[\\\"Bye, human.\\\",\\\"♪ Chirp! @entry !end\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL2JpcmQuZGlhbG9nLmpzb24uanMiLCJzb3VyY2VzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./assets/dialog/bird.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/caveman1.dialog.json":
|
|
/*!********************************************!*\
|
|
!*** ./assets/dialog/caveman1.dialog.json ***!
|
|
\********************************************/
|
|
/*! exports provided: entry, stuck, doublejump, end, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"Holy macaroni, another human!\\\",\\\"[$ismale] I thought I'd never see another dude anytime soon.\\\",\\\"[not $ismale] I thought I'd never see a woman ever again.\\\",\\\"Did you stone-skip-jump your way across the river as well?\\\",\\\"►Yes! @stuck\\\"],\\\"stuck\\\":[\\\"Well, then make yourself comfortable.\\\",\\\"At least I'm not stuck here alone anymore.\\\",\\\"►What? Can't we just exit the cave?\\\",\\\"The platforms on the way up are too high…\\\",\\\"►[$hasDoubleJump]But I can double jump! @doublejump\\\",\\\"►[not $hasDoubleJump]F…\\\",\\\"Game over, man!\\\",\\\"GAME OVER! !endgameC !end\\\"],\\\"doublejump\\\":[\\\"What?\\\",\\\"How?\\\",\\\"Why?\\\",\\\"►That's a long story.\\\",\\\"I'm at a loss of words… can you help me get out?\\\",\\\"►I wouldn't know how.\\\",\\\"Damn… !end @end\\\"],\\\"end\\\":[\\\"Please let me be… I really hoped you could help me. !end @end\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL2NhdmVtYW4xLmRpYWxvZy5qc29uLmpzIiwic291cmNlcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./assets/dialog/caveman1.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/caveman2.dialog.json":
|
|
/*!********************************************!*\
|
|
!*** ./assets/dialog/caveman2.dialog.json ***!
|
|
\********************************************/
|
|
/*! exports provided: entry, stuck, visitedEntry, regulary, skipjump, bug, powerup, strange, questions, fire, cave, memories, shadows, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"Holy macaroni, another human! !set $metcaveman\\\",\\\"[$ismale] I thought I'd never see another dude anytime soon.\\\",\\\"[not $ismale] I thought I'd never see a woman ever again.\\\",\\\"Did you stone-skip-jump your way across the river as well?\\\",\\\"►[$hasDoubleJump]No, I come here regulary. @regulary\\\",\\\"►[$hasDoubleJump]What's a stone-skip-jump? @skipjump\\\",\\\"►[not $hasDoubleJump]Yes! @stuck\\\"],\\\"stuck\\\":[\\\"Well, then make yourself comfortable.\\\",\\\"At least I'm not stuck here alone anymore.\\\",\\\"►What? Can't we just exit the cave?\\\",\\\"The platforms on the way up are too high…\\\",\\\"►F…\\\",\\\"Game over, man!\\\",\\\"GAME OVER! !endgameC !end\\\"],\\\"visitedEntry\\\":[\\\"[$ismale]Hey pal!\\\",\\\"[not $ismale]Greetings my lady.\\\",\\\"►Can I ask you some questions? @questions\\\",\\\"►I'm on my way. @visitedEntry !end\\\"],\\\"regulary\\\":[\\\"So there is a regular way to cross the river? !set visited\\\",\\\"►Yeah, it's a long story.\\\",\\\"I couldn't cross the broken bridge after falling down from the sky.\\\",\\\"I tried many times but I couldn't jump far enough.\\\",\\\"Since there wasn't anything better to do, I found out about the skip-jump by accident and ended up on this side of the river. @skipjump\\\"],\\\"skipjump\\\":[\\\"It's a secret jumping technique I mastered. !set visited\\\",\\\"Just at the moment of impact, I was able to jump on the water and cross the river this way!\\\",\\\"Just like a stone skips on water when you throw it at the right angle. Hence the name.\\\",\\\"Patent pending.\\\",\\\"And now I'm stuck here… @bug\\\"],\\\"bug\\\":[\\\"The fire up top wasn't very helpful.\\\",\\\"And after I entered the cave, I couldn't get back out.\\\",\\\"The platforms are to high for me to jump up.\\\",\\\"►The power-up fire? He gave me the ability to fly. @powerup\\\",\\\"►Keep going. @strange\\\"],\\\"powerup\\\":[\\\"Oh really? You can actually fly now?\\\",\\\"He was just repeating lines and blabbing about broken sequences.\\\",\\\"Maybe you can go talk to him?\\\",\\\"►If I have the time. Continue.\\\",\\\"Where was I? Ah! @strange\\\"],\\\"strange\\\":[\\\"But that's not all.\\\",\\\"There is something very strange going on here.\\\",\\\"►What do you mean?\\\",\\\"Don't you see it? The strange shrine in the clouds and the very supspicious fire people?\\\",\\\"How did we get here in the first place?\\\",\\\"It's like a feverish nightmare from which you can't wake up.\\\",\\\"I conducted some experiments down here and the results are alarming. @questions\\\"],\\\"questions\\\":[\\\"What do you want to know about?\\\",\\\"►How did you get here? @memories\\\",\\\"►Anything interesting about this cave? @cave\\\",\\\"►Why the open fire in the cave? @fire\\\",\\\"►Nevermind. @visitedEntry !end\\\"],\\\"fire\\\":[\\\"Good question! First of all, carbon monoxide poisoning is not something that happens here.\\\",\\\"Death in general seems to be impossible. Trust me, I tried.\\\",\\\"But the fire itself is very interesting.\\\",\\\"I made a lot of camp fires since I came here and they all look alike.\\\",\\\"I mean, practically identical. And not only that, they even resemble the fire in the entrance.\\\",\\\"Isn't that strange? It's like someone got really lazy and just made everything from the same template.\\\",\\\"►You're right, but the fire in the beginning looked different.\\\",\\\"Yeah, I remember. It looked fake.\\\",\\\"►I have other questions. @questions\\\"],\\\"cave\\\":[\\\"Yes! This cave is strange as well.\\\",\\\"It's the only cave I've seen so far that has nothing of interest in it.\\\",\\\"Very suspicious if you ask me.\\\",\\\"►Well, you are here.\\\",\\\"I don't like the tone of that…\\\",\\\"I'm a living person and not some kind of pawn that only exists to chat with anyone who enters this cave.\\\",\\\"As soon as I have the means to leave, I will.\\\",\\\"►We will see. I have other questions. @questions\\\"],\\\"memories\\\":[\\\"My memories are very hazy, I can't remember anything from before my arrival here.\\\",\\\"What about you?\\\",\\\"►No, it's all blank.\\\",\\\"Thought so… There's something sinister going on here behind the curtains.\\\",\\\"There's always a lingering feeling of being watched from the shadows.\\\",\\\"►Yeah, I met that guy under the bridge. @shadows\\\",\\\"►Creepy. I got other questions. @questions\\\"],\\\"shadows\\\":[\\\"What guy?\\\",\\\"►The shadow person. He taught me how to run.\\\",\\\"You seem to have had a very different experience than I did…\\\",\\\"►Apparently. I got other questions. @questions\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL2NhdmVtYW4yLmRpYWxvZy5qc29uLmpzIiwic291cmNlcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./assets/dialog/caveman2.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/chicken.dialog.json":
|
|
/*!*******************************************!*\
|
|
!*** ./assets/dialog/chicken.dialog.json ***!
|
|
\*******************************************/
|
|
/*! exports provided: entry, social, touch, living, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"What?\\\",\\\"[not met]Never seen a glowing chicken before? !set met true\\\",\\\"►[not livingDialog]Are you living here? @living\\\",\\\"►[not touchDialog]What happens when I touch you? @touch\\\",\\\"►So you're not the social type… @social\\\"],\\\"social\\\":[\\\"Exactly. !end @entry\\\"],\\\"touch\\\":[\\\"Firstly, I'll fill up you health bar by five points. !set touchDialog true\\\",\\\"Secondly, I'm gonna reward you with salmonella.\\\",\\\"So, go right ahead.\\\",\\\"►I'm good, thanks.\\\",\\\"[$ismale] Good boy. @entry !end\\\",\\\"[not $ismale] Clever girl. @entry !end\\\"],\\\"living\\\":[\\\"Apparently. Living the life to it's fullest. !set livingDialog true\\\",\\\"I spent enough time just slaving my life away, being burried inside walls…\\\",\\\"…waiting for someone to accidentally free me from my prison.\\\",\\\"Just to be consumed for a cheap health buff.\\\",\\\"Used and forgotten.\\\",\\\"►Woah, that's kinda dark.\\\",\\\"It is. But we power-ups can live in peace here…\\\",\\\"The people tend to lack health bars, so I'm off the wanted list.\\\",\\\"But apparently I seem to be on the “being asked stupid questions” list.\\\",\\\"►I get the hint.\\\",\\\"Good. @entry !end\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL2NoaWNrZW4uZGlhbG9nLmpzb24uanMiLCJzb3VyY2VzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./assets/dialog/chicken.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/fire0.dialog.json":
|
|
/*!*****************************************!*\
|
|
!*** ./assets/dialog/fire0.dialog.json ***!
|
|
\*****************************************/
|
|
/*! exports provided: entry, variableExample, help, impressed, how, why, existence, bye, details, reminder, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"Hey, person! !talkedtofire\\\",\\\"►[$devmode]Hey!\\\",\\\"►[$devmode]I'm a dev, show me variables example! @variableExample\\\",\\\"I am starving, I fear to die very soon and my light will go out forever. @help !sad\\\"],\\\"variableExample\\\":[\\\"This example demonstrates variables. !set exampleSeen\\\",\\\"[exampleSeen]It's pretty cool!\\\",\\\"It is not perfect yet and a little buggy, some things don't work yet… sorry\\\",\\\"[exampleSeen]This line is conditional, and you should see it. !set fail\\\",\\\"[not fail]This line unfortunately is visible due to a bug, where conditions are evaluated one line too early.\\\",\\\"Variables sometimes only take effect after another sentence has been spoken. A little weird. Hopefully fixed in future.\\\",\\\"Variables also work with player options.\\\",\\\"►Say “hello” !set hello 1\\\",\\\"►Say “howdy” !set hello 0\\\",\\\"…\\\",\\\"[hello=1]Hello!\\\",\\\"[hello!=1]Howdy!\\\",\\\"What was the other word again?\\\",\\\"►[hello=1]Howdy!\\\",\\\"►[not hello=1]Hello!\\\",\\\"►I don't know… !set idk\\\",\\\"…\\\",\\\"[idk]You're a little forgetful…\\\",\\\"[not idk]Ah, right!\\\",\\\"Also, now setting a global variable which could be accessed from other dialogs. !set $test 42\\\",\\\"Which can be accessed using a dollar sign.\\\",\\\"[$test]Isn't that cool?\\\",\\\"►Yes!\\\",\\\"Bye! @entry !end\\\"],\\\"help\\\":[\\\"Would you help me out, kind stranger?\\\",\\\"►Oh my God, a talking fire?! @impressed\\\",\\\"►Why should I help you? @why\\\",\\\"►How can I help you? @how\\\",\\\"►I don't care! !angry\\\",\\\"Oh you son of a…! No, sorry, I get it. Well, maybe another time. !neutral\\\",\\\"Just be aware this whole game is pretty pointless if you don't help me out… @help !end\\\"],\\\"impressed\\\":[\\\"Well yes, I'm impressed too. Took me some time to get used to it. @help !amused\\\"],\\\"how\\\":[\\\"[not $ismale]I really need some wood. Surely a strong and marvelous woman like you can help an old fire out.\\\",\\\"[$ismale]I really need some wood. Surely a strong and marvelous man like you can help an old fire out.\\\",\\\"►Sounds boring. Maybe later… @bye\\\",\\\"►I'm in. @details\\\",\\\"►What do we say to the god of fire?\\\",\\\"I don't know, what?\\\",\\\"►Not today!\\\",\\\"But if you don't help me out, there may not be a tomorrow. @why\\\"],\\\"why\\\":[\\\"Because I am the essence of life. If I die, everything dies. Do you want everything to die?\\\",\\\"►Oh, I wouldn't want to be responsible for that! @details\\\",\\\"►I don't know, do I?\\\",\\\"►Yes!\\\",\\\"No!\\\",\\\"►OK\\\",\\\"So you'll help me then?\\\",\\\"►Definitely! @details\\\",\\\"►Do I even have a choice?\\\",\\\"Technically yes. Practically deciding against it would be a little stupid though.\\\",\\\"►Well OK then, you convinced me. @details\\\",\\\"►Why? @existence\\\"],\\\"existence\\\":[\\\"Because your sole existence in this world hinges on helping to keep me alive.\\\",\\\"That's why you're here. There's nothing else for you to do anyway.\\\",\\\"►Cool! I'll help you. @details\\\",\\\"►I'd rather think about this in private. @bye\\\"],\\\"bye\\\":[\\\"Sure, take your time. You'll come back eventually! @help !end\\\"],\\\"details\\\":[\\\"Great! I knew I could rely on you. I know a good person when I see one!\\\",\\\"►So what exactly should I do?\\\",\\\"It's easy! I just need a little firewood so I can keep burning a little longer.\\\",\\\"►I can get you some wood!\\\",\\\"Yes, yes! But it needs to be a special kind of wood.\\\",\\\"There's a good tree in the east. His wood is good. !treezoom\\\",\\\"Go get it! !gotFireQuest\\\",\\\"►Sure thing! @reminder !end\\\"],\\\"reminder\\\":[\\\"Hello again!\\\",\\\"►What do I need to do?\\\",\\\"►Bye! @reminder !end\\\",\\\"Go east. Ask tree for wood. Bring me wood. Soon!\\\",\\\"►On my way! @reminder !end\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL2ZpcmUwLmRpYWxvZy5qc29uLmpzIiwic291cmNlcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./assets/dialog/fire0.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/fire1.dialog.json":
|
|
/*!*****************************************!*\
|
|
!*** ./assets/dialog/fire1.dialog.json ***!
|
|
\*****************************************/
|
|
/*! exports provided: entry, holdup, secondthoughts, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"Oh, you did it! That's the real deal. !amused !talkedToFireWithWood\\\",\\\"Good job on scalping that piece of junk.\\\",\\\"Just take the wood and throw it into my fire, just as we agreed.\\\",\\\"►Got it.\\\",\\\"►I have second thoughts… @secondthoughts\\\",\\\"Just do it! @holdup !end\\\"],\\\"holdup\\\":[\\\"What's the holdup? !angry\\\",\\\"Just take the wood and throw it into me! Seriously…\\\",\\\"►Got it. @holdup !end\\\"],\\\"secondthoughts\\\":[\\\"You can't be serious. Are you numb? !angry\\\",\\\"Take the WOOD and THROW it into ME, you understand? !angry\\\",\\\"Don't make me wait!\\\",\\\"►Wow, calm down.\\\",\\\"You calm down! Just give me the wood already! !angry @holdup !end\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL2ZpcmUxLmRpYWxvZy5qc29uLmpzIiwic291cmNlcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./assets/dialog/fire1.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/fire2.dialog.json":
|
|
/*!*****************************************!*\
|
|
!*** ./assets/dialog/fire2.dialog.json ***!
|
|
\*****************************************/
|
|
/*! exports provided: entry, noFriendship, friendship, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"Omnmnommnomm, that was good!\\\",\\\"Hahahahaha!\\\",\\\"I am finally complete.\\\",\\\"►What are you doing?\\\",\\\"►Whyyy?\\\",\\\"I'm unstoppable!\\\",\\\"This was the last time I have to ask a filthy mortal for help!\\\",\\\"And now I'm going to devour the world.\\\",\\\"And I'll start with you!\\\",\\\"►It is how it is…\\\",\\\"►I thought we were friends!\\\",\\\"►Not so fast!\\\",\\\"►Stop right there!\\\",\\\"What do you want to do, stop me? You got nothing on me! You're a human! I'm literally fire!\\\",\\\"[not $hasFriendship]As a cherry on top of the fiery cake, I'm also gonna consume all of your power-ups. @noFriendship\\\",\\\"As a cherry on top of the fiery cake, I'm also gonna consume all of your power-ups. @friendship\\\"],\\\"noFriendship\\\":[\\\"All of the useful ones, that is. You can keep that annoying dancing Dave as eternal punishment!\\\",\\\"HAHAHAHAHA! !crazyzoom !end\\\"],\\\"friendship\\\":[\\\"Wait…\\\",\\\"Didn't you have a flying power-up before? Where did that go?\\\",\\\"I was really looking forward to consume it. It tastes like chicken…\\\",\\\"Oh well, doesn't matter.\\\",\\\"HAHAHAHAHA! !friendshipEnding !end\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL2ZpcmUyLmRpYWxvZy5qc29uLmpzIiwic291cmNlcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./assets/dialog/fire2.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/fire3.dialog.json":
|
|
/*!*****************************************!*\
|
|
!*** ./assets/dialog/fire3.dialog.json ***!
|
|
\*****************************************/
|
|
/*! exports provided: entry, nothing, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"Whoops… !amused\\\",\\\"Well this is awkward.\\\",\\\"Seriously though… now I'm in serious risk of dying. !sad\\\",\\\"Are you happy now? Is this what you wanted?\\\",\\\"You sacrificed our deep friendship for the brief satisfaction of putting out a fire. !bored\\\",\\\"I'm disappointed.\\\",\\\"But let's not dwell in the past. Will you help me out of this?\\\",\\\"►Yes. @nothing\\\",\\\"►No.\\\",\\\"I see you've learned a lesson here.\\\",\\\"“Keep it alive”, they said, “it will be fun”. And you almost paid the price.\\\",\\\"Good for you the weather shifted. !bored\\\",\\\"Goodbye. Maybe see you in a sequel. !endgameA !end\\\"],\\\"nothing\\\":[\\\"Then you have learned nothing!!! !angry\\\",\\\"Thank you nonetheless, very kind of you.\\\",\\\"We're still coming to an end now. This game can't go on forever.\\\",\\\"You've made it. Good for you.\\\",\\\"Goodbye. !endgameA !end\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL2ZpcmUzLmRpYWxvZy5qc29uLmpzIiwic291cmNlcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./assets/dialog/fire3.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/fire4.dialog.json":
|
|
/*!*****************************************!*\
|
|
!*** ./assets/dialog/fire4.dialog.json ***!
|
|
\*****************************************/
|
|
/*! exports provided: entry, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"I give up… !bored\\\",\\\"That was too much. Keep that dog away from me. !bored\\\",\\\"I'm no match for this kind of special companionship.\\\",\\\"And now I'm in serious risk of dying… !sad\\\",\\\"But I have learned my lesson.\\\",\\\"I won't try to destroy the world anymore. This goal really isn't worth being put out like that. !bored\\\",\\\"It will take a while getting the stench off of me… !bored\\\",\\\"Goodbye. Maybe see you in a sequel. !endgameB !end\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL2ZpcmU0LmRpYWxvZy5qc29uLmpzIiwic291cmNlcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./assets/dialog/fire4.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/flameboy1.dialog.json":
|
|
/*!*********************************************!*\
|
|
!*** ./assets/dialog/flameboy1.dialog.json ***!
|
|
\*********************************************/
|
|
/*! exports provided: entry, visited, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"Hello humble adventurer, welcome to my…\\\",\\\"Wait, how did you get past the river? That's not how this works! !angry\\\",\\\"►Whoops, I'll be on my way.\\\",\\\"Yeah, do that please. @visited !end\\\"],\\\"visited\\\":[\\\"No no no no! Don't go breaking all the precious sequences! !angry\\\",\\\"Get back to the other side and do things in the correct order.\\\",\\\"►You might be right\\\",\\\"Hush hush! @visited !end\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL2ZsYW1lYm95MS5kaWFsb2cuanNvbi5qcyIsInNvdXJjZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./assets/dialog/flameboy1.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/flameboy2.dialog.json":
|
|
/*!*********************************************!*\
|
|
!*** ./assets/dialog/flameboy2.dialog.json ***!
|
|
\*********************************************/
|
|
/*! exports provided: entry, answers, attitude, otherfire, powerup, visited, more, finished, caveman, nodialog, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"Hello humble adventurer, welcome to my sacred hut, yadda yadda. What do you need?\\\",\\\"►What's with that attitude? @attitude\\\",\\\"►I'm just here for some answers. @answers\\\"],\\\"answers\\\":[\\\"Answers? What? Do I look like some kind of prophet to you?\\\",\\\"►The stone from the mountain told me I should come here for answers.\\\",\\\"Ohhh, that guy. I bet he told you to throw him into the river.\\\",\\\"The fact that he floats should tell you everything about him. He's a real airhead.\\\",\\\"►So, no answers? I need to get a seed to grow.\\\",\\\"Not my problem. I'm only here to give away power-ups.\\\",\\\"►Power-ups? I'm interested @powerup\\\"],\\\"attitude\\\":[\\\"I've just had the worst day. Lost my job to some fancy pants high framerate fire jerk and was put here to give away free power-ups.\\\",\\\"►The other fire across the river? @otherfire\\\",\\\"►I don't care. I need answers! @answers\\\",\\\"►You said something about power-ups? @powerup\\\"],\\\"otherfire\\\":[\\\"Yeah, that jiggly eyed bastard!\\\",\\\"►He seemed pretty helpless to me.\\\",\\\"►I still don't care. I need answers! @answers\\\",\\\"►You said something about power-ups? @powerup\\\",\\\"Hah! That's just fantastic! Do whatever you like, just leave me out of it. And don't come back complaining after you get scorched.\\\",\\\"►Whatever. I need answers! @answers\\\",\\\"►OK… You said something about power-ups? @powerup\\\"],\\\"powerup\\\":[\\\"Yeah, I'm assigned to distribute the flying ability. It's popular amongst school children… and birds.\\\",\\\"►Nice, flying!\\\",\\\"Don't expect too much. It's more of a multi-jump if you ask me. But you know… marketing.\\\",\\\"►I'll take one.\\\",\\\"Sure, here you go. !multijump\\\",\\\"No refunds!\\\",\\\"Also, I'm obligated to tell you, that you should visit the cloud world.\\\",\\\"I personally wouldn't go there. The people there are really annoying.\\\",\\\"But that's just my opinion… @visited !end\\\"],\\\"visited\\\":[\\\"Sorry, we have a strict no return policy!\\\",\\\"►[$metcaveman]Did you know there's someone living in the caves? @caveman\\\",\\\"►I just wanted to talk some more. @more\\\",\\\"►Damn…\\\",\\\"Come on man! You didn't even pay anything. @finished !end\\\"],\\\"more\\\":[\\\"I already have a headache, thanks. Can't you just do like a bird… and multi-jump out of here? @finished !end\\\"],\\\"finished\\\":[\\\"Just let me do my job in peace. Go irritate the cloud people. They love that.\\\",\\\"►[$metcaveman] Did you know there's someone living in the caves? @caveman\\\",\\\"►Fine. @finished !end\\\"],\\\"caveman\\\":[\\\"Yeah, the best kind of neighbor: Quiet and seclusive.\\\",\\\"►Can't you just give him a free flying power-up?\\\",\\\"No, that's not how this works. He broke the sequence and messed up some triggers.\\\",\\\"That's irreversible, but not my problem.\\\",\\\"►Sequence? Triggers? What does all that mean?\\\",\\\"Whoops, don't mind me. Just giving away power-ups here.\\\",\\\"►But…\\\",\\\"Bye! @nodialog !end\\\"],\\\"nodialog\\\":[\\\"I really don't want to talk to you anymore. !end\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL2ZsYW1lYm95Mi5kaWFsb2cuanNvbi5qcyIsInNvdXJjZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./assets/dialog/flameboy2.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/flameboy3.dialog.json":
|
|
/*!*********************************************!*\
|
|
!*** ./assets/dialog/flameboy3.dialog.json ***!
|
|
\*********************************************/
|
|
/*! exports provided: entry, tryOut, trust, back, first, meaning, next, idle, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"Thanks for the wood…\\\",\\\"But weren't you supposed to bring it somewhere else?\\\",\\\"►I just wanted to try this out first. @tryOut\\\",\\\"►I don't trust the other fire. @trust\\\",\\\"►Whoops, you're right. Can I have the wood back? @back\\\"],\\\"tryOut\\\":[\\\"Interesting. So no moral motivation? You're just driven by curiosity?\\\",\\\"Well, I take what I can get. At least you didn't just blindly follow the order of a psychotic flame.\\\",\\\"The others weren't so smart. @first\\\"],\\\"trust\\\":[\\\"Good call. I did tell you that this thing was nothing but trouble.\\\",\\\"Nice to see that you aren't as dense as the others. @first\\\"],\\\"back\\\":[\\\"No no! Don't you understand?\\\",\\\"You did good. Even if it was just by chance.\\\",\\\"I'll take what I can get. @first\\\"],\\\"first\\\":[\\\"You're actually the first one in a couple hundered years to break the cycle. !amused\\\",\\\"I'm proud of you. You can pat yourself on the back. !amused\\\",\\\"I would do so myself, but I don't have any arms in this form.\\\",\\\"►I don't understand anything… @meaning\\\",\\\"►What does this all mean? @meaning\\\"],\\\"meaning\\\":[\\\"That's nothing that you should think too much about.\\\",\\\"Even a glimpse of the truth would instantaniously turn your sanity inside out.\\\",\\\"Let's just say this was all a dream, how about that?\\\",\\\"If you're lucky, you'll even forget that this happened at all.\\\",\\\"►What happens now? @next\\\"],\\\"next\\\":[\\\"Like I said, you can leave. I'll activate the portal here.\\\",\\\"Just go through and you're out of here.\\\",\\\"Don't dilly-dally for too long. I have a lot of paper work waiting for me.\\\",\\\"►Thanks… I guess.\\\",\\\"Yes yes. I have to thank you as well. You spared me a lot of work here. !amused\\\",\\\"The damage the fire would've done to this place, would you have fed the wood to it, is a pain to fix.\\\",\\\"I might even get some long overdue vacation time out of this. !amused\\\",\\\"So, see you around… or not. !activatefireportal !end @idle\\\"],\\\"idle\\\":[\\\"Still around?\\\",\\\"There isn't really much you can do here now.\\\",\\\"Just hop in the portal and off you go!\\\",\\\"►O-Okay… !end @idle\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL2ZsYW1lYm95My5kaWFsb2cuanNvbi5qcyIsInNvdXJjZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./assets/dialog/flameboy3.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/flameboy4.dialog.json":
|
|
/*!*********************************************!*\
|
|
!*** ./assets/dialog/flameboy4.dialog.json ***!
|
|
\*********************************************/
|
|
/*! exports provided: entry, visited, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"Oh come on… \\\",\\\"I can't believe this… !angry\\\",\\\"Don't bring that stupid grey guy to this side of river. !angry\\\",\\\"How did you even get over here?\\\",\\\"I can't help you like this. Go back und do it properly!\\\",\\\"Does nobody here care for a proper order of events?\\\",\\\"►Whoops, I'll be on my way.\\\",\\\"Yes! @visited !end\\\"],\\\"visited\\\":[\\\"No! Don't talk to me while carrying that stupid stone!\\\",\\\"►On my way!. @visited !end\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL2ZsYW1lYm95NC5kaWFsb2cuanNvbi5qcyIsInNvdXJjZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./assets/dialog/flameboy4.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/mimic.dialog.json":
|
|
/*!*****************************************!*\
|
|
!*** ./assets/dialog/mimic.dialog.json ***!
|
|
\*****************************************/
|
|
/*! exports provided: entry, wakeup, who, main, questions, what, items, sleeping, sleeping_questions, eat, lucky, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"…\\\",\\\"…zZzZZ…\\\",\\\"(Someone seems to be asleep in there.)\\\",\\\"►I better force the chest open. @wakeup !wakeupchest !end\\\",\\\"►I better leave the chest alone. @entry !end\\\"],\\\"wakeup\\\":[\\\"Oh my, was I asleep?\\\",\\\"What time is it?\\\",\\\"►I have not the slightest idea…\\\",\\\"Well, no worries. @who\\\"],\\\"who\\\":[\\\"I haven't seen you before. Are you an item?\\\",\\\"►No, just a regular human.\\\",\\\"Ahh, one of those. @questions\\\"],\\\"main\\\":[\\\"Hello friend! @questions\\\"],\\\"questions\\\":[\\\"►What are you? @what\\\",\\\"►[not asked_about_items]Do you have any items? @items\\\",\\\"►[not asked_aboud_sleeping]I thought someone was sleeping in there. @sleeping\\\",\\\"►I'm off.\\\",\\\"Bye! @main !end\\\"],\\\"what\\\":[\\\"A mimic chest.\\\",\\\"But a basic one, I can't even move properly.\\\",\\\"It looks really silly when I jump to move forward, so I don't do it when people are around.\\\",\\\"►How did you get here then?\\\",\\\"Delivery services! @questions\\\"],\\\"items\\\":[\\\"No, we mimics usually don't carry items. !set asked_about_items true\\\",\\\"Some do, but that only incentivizes unnecessary violence.\\\",\\\"There's no need to attack a mimic who doesn't hold items, no?\\\",\\\"►True\\\",\\\"Yes, yes. @questions\\\"],\\\"sleeping\\\":[\\\"Oh, a common mistake! !set asked_aboud_sleeping true\\\",\\\"The people I eat usually don't have the capacity to make sleep noises anymore.\\\",\\\"But that was a long time ago. I'm living the vegan lifestyle now.\\\",\\\"I moved here when I heard how peaceful it was. @sleeping_questions\\\"],\\\"sleeping_questions\\\":[\\\"►What do you eat then? @eat\\\",\\\"►Lucky me… @lucky\\\"],\\\"eat\\\":[\\\"Vegetables, rice, and tofu.\\\",\\\"Or whatever is prepared when I'm around. I can't really cook for myself. @sleeping_questions\\\"],\\\"lucky\\\":[\\\"Indeed!\\\",\\\"If you had met me when I was still working as a trap for adventurers, you would be crushed and dismembered by now. @questions\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL21pbWljLmRpYWxvZy5qc29uLmpzIiwic291cmNlcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./assets/dialog/mimic.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/powershiba1.dialog.json":
|
|
/*!***********************************************!*\
|
|
!*** ./assets/dialog/powershiba1.dialog.json ***!
|
|
\***********************************************/
|
|
/*! exports provided: entry, met, powerup, past, brother, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"…\\\",\\\"Oh, hello mortal. !set $metPowerShiba\\\",\\\"►Hello. Who are you?\\\",\\\"I'm a power-up.\\\",\\\"But I wasn't always one.\\\",\\\"►Were you a dog before by any chance?\\\",\\\"I do not remember my past life and it doesn't really matter either.\\\",\\\"►How does one become a power-up?\\\",\\\"I was taught by my mentor and father figure, the almighty flying power-up.\\\",\\\"After years of meditation, I was able to transcend and leave my mortal shell behind.\\\",\\\"I lost my memories and the ability to move, but it was worth the sacrifice.\\\",\\\"►If you say so… @met\\\"],\\\"met\\\":[\\\"What is it you desire?\\\",\\\"►What kind of power do you inherit? @powerup\\\",\\\"►Aren't you interested in your past? @past\\\",\\\"►[$metShiba]Did you know, you have a brother? @brother\\\",\\\"►I'll leave you to yourself.\\\",\\\"Please do. @met !end\\\"],\\\"powerup\\\":[\\\"That I do not know.\\\",\\\"Usually, the designated power is bestowed upon birth.\\\",\\\"Since I transcended being a mortal like you, my power is unknown.\\\",\\\"But it doesn't matter either way.\\\",\\\"I have no intention to be consumed.\\\",\\\"►Not even… by me?\\\",\\\"Yes, not even by a person I met a minute ago.\\\",\\\"I shall contemplate about cloud related topics here for the rest of time.\\\",\\\"►Too bad… @met\\\"],\\\"past\\\":[\\\"No, the memories of my mortal past are but an ember of the flame I am now.\\\",\\\"This is how I must be. This is everything.\\\",\\\"►If you say so… @met\\\"],\\\"brother\\\":[\\\"I do not remember my past life.\\\",\\\"I also have no desire to involve myself with mortals.\\\",\\\"►That's harsh man… I gotta tell the other dog. @met\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL3Bvd2Vyc2hpYmExLmRpYWxvZy5qc29uLmpzIiwic291cmNlcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./assets/dialog/powershiba1.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/powershiba2.dialog.json":
|
|
/*!***********************************************!*\
|
|
!*** ./assets/dialog/powershiba2.dialog.json ***!
|
|
\***********************************************/
|
|
/*! exports provided: entry, sacriface, sacrificeOptions, yourself, carry, yes, notyet, go, end, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"I… remember…\\\",\\\"A memento from the past.\\\",\\\"Thank you for bringing this to me.\\\",\\\"How is my brother? Tell me about him.\\\",\\\"►He is a good boy.\\\",\\\"Good to hear that.\\\",\\\"I can't believe I forgot about him…\\\",\\\"This is unacceptable.\\\",\\\"►Maybe you can make it up to him.\\\",\\\"Yes… I must do that.\\\",\\\"I must meet him. @sacriface\\\"],\\\"sacriface\\\":[\\\"I know that it's a lot to ask from you after you already did so much…\\\",\\\"…but would you be so kind and give away your power of multi-jumping to my brother?\\\",\\\"This is the only way for him to actually come to me. @sacrificeOptions\\\"],\\\"sacrificeOptions\\\":[\\\"►Can't you just leave the clouds yourself? @yourself\\\",\\\"►Can't I carry you down? @carry\\\",\\\"►Of course I will! @yes\\\",\\\"►Eh, no thanks. @sacriface !end\\\"],\\\"yourself\\\":[\\\"As a power-up, I lost all means to move by myself.\\\",\\\"I'm a slave to my own ambitions. @sacrificeOptions\\\"],\\\"carry\\\":[\\\"Touching me will most likely lead to a consumption of my unknown power.\\\",\\\"I might keep my consciousness, but that's not a risk I can take.\\\",\\\"Who knows how my power might manifest.\\\",\\\"I must meet him like I am now. @sacrificeOptions\\\"],\\\"yes\\\":[\\\"You… will?\\\",\\\"[not $seedgrown] Wait… @notyet\\\",\\\"This sacrifice will not be forgotten.\\\",\\\"Please go to my brother and grant him your power-up.\\\",\\\"►Of course I will! @go\\\"],\\\"notyet\\\":[\\\"Make sure you have done everything you need to do here up in the clouds.\\\",\\\"If you give away your multi-jump prematurely it could lead to a disaster.\\\",\\\"I can tell that you still have business here.\\\",\\\"►Thanks for heads up! !end @sacriface\\\"],\\\"go\\\":[\\\"Thank you human! !set $gotPowerShibaQuest true !end @end\\\"],\\\"end\\\":[\\\"Please grant your multi-jump to my mortal brother.\\\",\\\"Your sacrifice will not be forgotten.\\\",\\\"►Of course I will! @end !end\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL3Bvd2Vyc2hpYmEyLmRpYWxvZy5qc29uLmpzIiwic291cmNlcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./assets/dialog/powershiba2.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/powershiba3.dialog.json":
|
|
/*!***********************************************!*\
|
|
!*** ./assets/dialog/powershiba3.dialog.json ***!
|
|
\***********************************************/
|
|
/*! exports provided: entry, accept, idea, fate, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"Human! Thank you for coming.\\\",\\\"Your selflessness brought an estranged family back together.\\\",\\\"This is something no amount of meditating could achieve.\\\",\\\"►Don't mention it!\\\",\\\"Please don't play this down.\\\",\\\"My brother and I came to the agreement that you should collect me.\\\",\\\"My unknown power might help you on your quest.\\\",\\\"►I don't know if I can accept that… @accept\\\",\\\"►Great idea! @idea\\\"],\\\"accept\\\":[\\\"We don't accept a “no” for an answer. @fate\\\"],\\\"idea\\\":[\\\"Good to see that you agree. @fate\\\"],\\\"fate\\\":[\\\"This is the inevitable fate of my existence.\\\",\\\"And I couldn't be happier to be at your side.\\\",\\\"►It's a deal then!\\\",\\\"I hope my power is useful to you.\\\",\\\"You should continue your quest now!\\\",\\\"Farewell! !friendship !end @entry\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL3Bvd2Vyc2hpYmEzLmRpYWxvZy5qc29uLmpzIiwic291cmNlcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./assets/dialog/powershiba3.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/seed1.dialog.json":
|
|
/*!*****************************************!*\
|
|
!*** ./assets/dialog/seed1.dialog.json ***!
|
|
\*****************************************/
|
|
/*! exports provided: entry, visit, final, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"I have been born. I am alive!\\\",\\\"I thank you for bestowing the miracle of life onto me.\\\",\\\"My father will hear of this. Please speak to him to receive a proper reward.\\\",\\\"►I will, but please stop the creepy talk.\\\",\\\"I will not comply to this demand. Farewell! @visit !end\\\"],\\\"visit\\\":[\\\"I will drown in a very short amount of time. Can you stop the unending rush of fluids?\\\",\\\"►I guess there is no dry-dance, sorry.\\\",\\\"Oh father, why have you forsaken me?\\\",\\\"►Gotta go, fast! @final !end\\\"],\\\"final\\\":[\\\"My life was in vain… Avenge me! !end\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL3NlZWQxLmRpYWxvZy5qc29uLmpzIiwic291cmNlcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./assets/dialog/seed1.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/shadowpresence1.dialog.json":
|
|
/*!***************************************************!*\
|
|
!*** ./assets/dialog/shadowpresence1.dialog.json ***!
|
|
\***************************************************/
|
|
/*! exports provided: entry, what, visited, bridge, running, pokemon, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"Greetings, human!\\\",\\\"[not $gotFireQuest]You might wanna talk to the flame first.\\\",\\\"[not $gotFireQuest]My hands are tied until then.\\\",\\\"►[$gotFireQuest]Oh my god, what are you? @what\\\",\\\"►I can't handle this darkness.\\\",\\\"[not $gotFireQuest]Sure, no hard feelings. @entry !end\\\",\\\"[$gotFireQuest]Sure, come around again if you're ready. @entry !end\\\"],\\\"what\\\":[\\\"[$ismale]No need to soil your pants.\\\",\\\"[not $ismale]No need to soil your skirt.\\\",\\\"Ever had the feeling someone was watching you from a dark corner at home?\\\",\\\"Or you're being followed at night but no one is there when you turn around?\\\",\\\"That's probably me, or one of my coworkers.\\\",\\\"But I'm on my break right now. It's nice to have a chat every once in a while. @visited\\\"],\\\"visited\\\":[\\\"[visited]Welcome back, friend!\\\",\\\"►[not taught]Any idea how to get over that bridge? @bridge\\\",\\\"►[not pokemon]What are you doing here exactly? @pokemon\\\",\\\"►[taught]How does the running work again? @running\\\",\\\"►I'll get going. !set visited\\\",\\\"Sure, keep up the good work. @visited !end\\\"],\\\"bridge\\\":[\\\"That bridge is pretty busted, isn't it? !set visited\\\",\\\"You can an easily vault over the gap if you gain enough speed.\\\",\\\"►I can only walk. I'm too slow.\\\",\\\"That's not a problem. I can teach you how to run.\\\",\\\"It's a pleasure seeing people run anyway.\\\",\\\"►How does it work?\\\",\\\"Close your eyes and envision that unique feeling.\\\",\\\"The creeping anxiety you feel on an empty walkway at night.\\\",\\\"Someone is behind you. Cold sweat oozes from your skin.\\\",\\\"You can almost feel the dark presence crawling up your spine.\\\",\\\"Your irrational fear swells up and blossoms to a beautiful raging panic!\\\",\\\"…or in other words: Just hold your run button. Fairly easy. !enableRunning !set taught\\\",\\\"►Awesome!\\\",\\\"Have fun with your new ability. @visited !end\\\"],\\\"running\\\":[\\\"Just remember that one feeling, that creeping anxiety at night.\\\",\\\"Someone is behind you. You can almost feel the cold presence on your skin.\\\",\\\"The fear swells up and bursts out as raging panic. Beautiful!\\\",\\\"…or in other words: just hold the run button. Fairly easy.\\\",\\\"►Thanks!\\\",\\\"See you around. @visited !end\\\"],\\\"pokemon\\\":[\\\"I'm hooked on Pokémon GO since last year.\\\",\\\"This bridge used to be a popular poke-stop, but the folks around here stopped playing.\\\",\\\"I might be the last one playing. Finishing raids like this is nearly impossible.\\\",\\\"►Can't you just stop playing as well?\\\",\\\"I already invested so much time and effort. How could I stop now?\\\",\\\"►Suit yourself. !set pokemon @visited\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL3NoYWRvd3ByZXNlbmNlMS5kaWFsb2cuanNvbi5qcyIsInNvdXJjZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./assets/dialog/shadowpresence1.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/shiba1.dialog.json":
|
|
/*!******************************************!*\
|
|
!*** ./assets/dialog/shiba1.dialog.json ***!
|
|
\******************************************/
|
|
/*! exports provided: entry, met, met2, tree, reminder, search, found, boneReminder, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"Hello! Friend!\\\",\\\"You smell nice.\\\",\\\"Are you here to play???\\\",\\\"►A talking dog, I'm not surprised.\\\",\\\"Yes. Talking!\\\",\\\"Mother taught me to speak.\\\",\\\"♪ Bark!\\\",\\\"I mean… ♪ Chirp. @met\\\"],\\\"met\\\":[\\\"Play???\\\",\\\"►[not inTree]Why are you in a tree? @tree\\\",\\\"►[inTree]Can you tell me about your brother again? @reminder\\\",\\\"►We'll play another time.\\\",\\\"►(Pet the dog already!) !petDoggo !end @met\\\",\\\"♪ OK friend. !end @met\\\"],\\\"met2\\\":[\\\"Did you find my brother?\\\",\\\"Also… Play???\\\",\\\"►[$metPowerShiba]I found your brother… @found\\\",\\\"►[inTree]Can you tell me about your brother again? @reminder\\\",\\\"►We'll play another time.\\\",\\\"►(Pet the dog already!) !petDoggo !end @met2\\\",\\\"♪ OK friend. !end @met2\\\"],\\\"tree\\\":[\\\"I fell from the sky. !set inTree\\\",\\\"Bird mother brought me here, gave me food.\\\",\\\"Brother is still missing… We separated.\\\",\\\"►There is another dog?\\\",\\\"Yes, in the clouds. I fell.\\\",\\\"Can you find brother? You can fly! !set $metShiba\\\",\\\"►[not $metPowerShiba]Sure, I can take a look. @search\\\",\\\"►[$metPowerShiba]I already found him. @found\\\"],\\\"reminder\\\":[\\\"Yes! Brother!\\\",\\\"I fell from the sky, my brother stayed.\\\",\\\"I howl every night, but no response.\\\",\\\"Please find brother!\\\",\\\"►I'll see what I can find in the clouds. @met2\\\"],\\\"search\\\":[\\\"Wow! Thanks!\\\",\\\"I want to smell brother!\\\",\\\"►I'll see what I can find in the clouds. @met2 !end\\\"],\\\"found\\\":[\\\"Wow! Really? !set $gotBoneQuest\\\",\\\"How does he smell?\\\",\\\"►Really nice… That's not the issue though.\\\",\\\"Did you bring him? Where is he?\\\",\\\"►He doesn't remember you…\\\",\\\"What??? Oh no… why?\\\",\\\"►It's complicated. Any ideas how to make him remember?\\\",\\\"Mmmh…\\\",\\\"Yes… the bone! ♪\\\",\\\"We had a bone… when we were with human.\\\",\\\"In a cave, when we came to the clouds.\\\",\\\"It's the favorite bone. He must remember the bone!\\\",\\\"Can you bring favorite bone?\\\",\\\"►The bone in the portal room… I remember that.\\\",\\\"Can you bring???\\\",\\\"►This might be tricky. The throw power-up seemed to know a lot about items.\\\",\\\"Please bring… @boneReminder !end\\\"],\\\"boneReminder\\\":[\\\"Hello friend!\\\",\\\"Can you bring favorite bone?\\\",\\\"it's in the cloud cave. You can fly!\\\",\\\"►Can't get items through doors… Gotta talk to the throw power-up @boneReminder !end\\\",\\\"►(Pet the dog already!) !petDoggo !end @boneReminder\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL3NoaWJhMS5kaWFsb2cuanNvbi5qcyIsInNvdXJjZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./assets/dialog/shiba1.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/shiba2.dialog.json":
|
|
/*!******************************************!*\
|
|
!*** ./assets/dialog/shiba2.dialog.json ***!
|
|
\******************************************/
|
|
/*! exports provided: entry, entry2, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"You found bone!\\\",\\\"Wow!!!\\\",\\\"Bring to brother please.\\\",\\\"►Sure, I'm on the way! !end @entry2\\\"],\\\"entry2\\\":[\\\"Friend!\\\",\\\"Go to brother.\\\",\\\"Bring bone. He will remember!\\\",\\\"►Sure, I'm on the way! !end @entry2\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL3NoaWJhMi5kaWFsb2cuanNvbi5qcyIsInNvdXJjZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./assets/dialog/shiba2.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/shiba3.dialog.json":
|
|
/*!******************************************!*\
|
|
!*** ./assets/dialog/shiba3.dialog.json ***!
|
|
\******************************************/
|
|
/*! exports provided: entry, main, meet, go, nevermind, giveaway, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"How was it? Did you give bone?\\\",\\\"►Yeah, your brother remembered you after all!\\\",\\\"Wow! I'm happy. Best day. @main\\\"],\\\"main\\\":[\\\"You are the best!\\\",\\\"►[$gotPowerShibaQuest]Do you want to meet your brother? @meet @entry\\\",\\\"►Have a nice day! !end @main\\\"],\\\"meet\\\":[\\\"Yes!!!\\\",\\\"Can he come?\\\",\\\"►No, that won't be possible…\\\",\\\"Awww…\\\",\\\"►But you can go to him. @go\\\",\\\"►There's nothing I can do. @main !end\\\"],\\\"go\\\":[\\\"How???\\\",\\\"►In theory, I could give you the power to go to him.\\\",\\\"I can fly?\\\",\\\"►Yes… you can now! @giveaway\\\",\\\"►On second thought… nevermind @nevermind\\\"],\\\"nevermind\\\":[\\\"What??? Nooo… !end @main\\\"],\\\"giveaway\\\":[\\\"I can feel it. Thank you!\\\",\\\"No time wasting!\\\",\\\"I will go get brother.\\\",\\\"Find us on the mountain. I will wait at bird feeding spot.\\\",\\\"►At the bird feeding spot… check!\\\",\\\"You are best friend!\\\",\\\"See you there. !shibaNextState !end\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL3NoaWJhMy5kaWFsb2cuanNvbi5qcyIsInNvdXJjZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./assets/dialog/shiba3.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/shiba4.dialog.json":
|
|
/*!******************************************!*\
|
|
!*** ./assets/dialog/shiba4.dialog.json ***!
|
|
\******************************************/
|
|
/*! exports provided: entry, entry2, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"Hello best friend!\\\",\\\"Thank you for visiting.\\\",\\\"We have the best day.\\\",\\\"Brother is glowing!\\\",\\\"►He sure is. @entry2 !end\\\"],\\\"entry2\\\":[\\\"♪ Happy bark!\\\",\\\"Play???\\\",\\\"►Later. I have to deal with the fire first. @entry2 !end\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL3NoaWJhNC5kaWFsb2cuanNvbi5qcyIsInNvdXJjZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./assets/dialog/shiba4.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/shiba5.dialog.json":
|
|
/*!******************************************!*\
|
|
!*** ./assets/dialog/shiba5.dialog.json ***!
|
|
\******************************************/
|
|
/*! exports provided: entry, play, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"I helped!\\\",\\\"►You sure did, buddy.\\\",\\\"At last, time to play!!!\\\",\\\"►Just a minute! @play !end\\\"],\\\"play\\\":[\\\"Play with friend???\\\",\\\"►Just a minute! @play !end\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL3NoaWJhNS5kaWFsb2cuanNvbi5qcyIsInNvdXJjZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./assets/dialog/shiba5.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/spider1.dialog.json":
|
|
/*!*******************************************!*\
|
|
!*** ./assets/dialog/spider1.dialog.json ***!
|
|
\*******************************************/
|
|
/*! exports provided: entry, nerve, rejected, nicetomeet, chosenone, whatsgoingon, spider, fairyschool, racist, magic, moregenders, swapgender, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"[not visited]Greetings, adventurer. Welcome to this ancient and mysterious land. !set $talkedToSpider true\\\",\\\"[not visited]I am your designated magical gender fairy and will guide you on your quest. I bet you have a lot of questions. !set visited\\\",\\\"[visited]How can I help?\\\",\\\"►[not option_nicetomeet]It's nice to meet you. @nicetomeet\\\",\\\"►What's going on here? @whatsgoingon\\\",\\\"►[not toggledgender]What is a gender fairy? @magic\\\",\\\"►[toggledgender]Can you “accidentally” change my gender again? @swapgender\\\",\\\"►Seriously? Magical FAIRY? @spider\\\",\\\"►[not visited]I got no time for this… @nerve\\\",\\\"►[visited]Gonna go…\\\",\\\"Byeeee! @entry !end\\\"],\\\"nerve\\\":[\\\"The nerve! @rejected !end\\\"],\\\"rejected\\\":[\\\"Look who comes crawling back…\\\",\\\"►Sorry, I actually do need some guidance. @entry\\\",\\\"►I just pressed the wrong button!\\\",\\\"Jerk! @rejected !end\\\"],\\\"nicetomeet\\\":[\\\"[not $ismale]Ho ho ho, what a sweet gal you are. The last one wasn't of the talkative kind. !set option_nicetomeet\\\",\\\"[$ismale]Ho ho ho, what a friendly fella you are. The last one wasn't of the talkative kind. !set option_nicetomeet\\\",\\\"He had the WORST time!\\\",\\\"But you and I will get along just fine.\\\",\\\"►What happened to the last one? @chosenone\\\",\\\"►Yeah sure, back to topic.\\\",\\\"Suuuure… @entry\\\"],\\\"chosenone\\\":[\\\"It wasn't a pretty sight. Lots of misunderstandings, some disrespectful verbal exchanges.\\\",\\\"Long story short, you won't see him anytime soon. Trust me.\\\",\\\"Some would say, he “burned” to “death”.\\\",\\\"…\\\",\\\"Subtlety is not my strong suit.\\\",\\\"►I can see that. Back to topic!\\\",\\\"Aye! @entry\\\"],\\\"whatsgoingon\\\":[\\\"[not talkedAboutQuest]Nothing really. Just make yourself at home. You're part of our world now.\\\",\\\"►[not talkedAboutQuest]Really? There's nothing to do?\\\",\\\"[not talkedAboutQuest]You can always approach the other habitants and have interesting chats with them.\\\",\\\"[not talkedAboutQuest]The one downstairs might even need some help.\\\",\\\"[talkedAboutQuest]Like I said, we just live our lives in peace here. There isn't really much to do.\\\",\\\"[talkedAboutQuest]You can go and meet the other habitants. You can start downstairs.\\\",\\\"►Sure, I'll give it a try.\\\",\\\"Great! !set talkedAboutQuest true @entry.\\\"],\\\"spider\\\":[\\\"[not isracist]What, don't you see the fairy wings on my back? My golden hair and cute make up?\\\",\\\"[not isracist]I worked really hard to earn all of these traits.\\\",\\\"[isracist]…\\\",\\\"►Can anyone become a fairy? @fairyschool\\\",\\\"►[not isracist]Since when are spiders allowed to be fairies? @racist\\\",\\\"►Nevermind. @entry\\\"],\\\"fairyschool\\\":[\\\"Are you kidding me?\\\",\\\"Of course not. Only the best of the best can become fairies.\\\",\\\"I went through six years of fairy university and another two years of unpaid internships as fairy assistant.\\\",\\\"Can't wait until I get my new pink fairy dress. The one I got at graduation didn't fit.\\\",\\\"►I cannot guess why… Back to topic. @entry\\\"],\\\"racist\\\":[\\\"I will ignore your racist remark in good faith… you racist! !set isracist !set askedaboutspider\\\",\\\"►Sorry… @spider\\\"],\\\"magic\\\":[\\\"[not askedformoregenders]Great that you ask!\\\",\\\"[not askedformoregenders]I'm not just a normal fairy, but one with an academic background.\\\",\\\"[not askedformoregenders]With my bachelor degree in gender studies, I know everything about genders.\\\",\\\"[not askedformoregenders]I can instantly tell that you've been born to be at least one of two genders!\\\",\\\"[askedformoregenders] Like I said, you have a gender!\\\",\\\"►[not askedformoregenders]Aren't there more? @moregenders\\\",\\\"►Is that all…?\\\",\\\"Ha! Not in the least. I have the power to accidentally change the gender of humans against their will.\\\",\\\"Abracadabra and it is done!\\\",\\\"►What… WAIT !set toggledgender !togglegender\\\",\\\"You are very welcome, gender swapped human!\\\",\\\"►It's not that bad, actually. @entry\\\",\\\"►You even changed the clothes, nice. @entry\\\"],\\\"moregenders\\\":[\\\"There's only so much you can do with this kind of pixel resolution…\\\",\\\"Also, don't question my bachelor knowledge!\\\",\\\"►Two genders is fine. !set askedformoregenders @magic\\\"],\\\"swapgender\\\":[\\\"Why? Don't you like your current gender?\\\",\\\"Whoops, there we go again. !togglegender\\\",\\\"►I feel sick. @entry\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL3NwaWRlcjEuZGlhbG9nLmpzb24uanMiLCJzb3VyY2VzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./assets/dialog/spider1.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/stone1.dialog.json":
|
|
/*!******************************************!*\
|
|
!*** ./assets/dialog/stone1.dialog.json ***!
|
|
\******************************************/
|
|
/*! exports provided: entry, tips, visitedentry, introduction, noteacher, ionlymaster, getthisdone, woman, man, beard, genderswap, touche, human, onmyown, yesmaster, soo, drink, rain, nottouchyou, lift, remember, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"[not met]I am the wise stone. Hard, but fair. !talkedToStone\\\",\\\"[not met]I oversee the sacred garden up that hill. What wisdom do you seek? !set met\\\",\\\"[met]Welcome back young human. What wisdom do you seek?\\\",\\\"►[not $seedplanted]I need to plant a seed. Any tips? @tips\\\",\\\"►[$seedplanted]I planted the seed but nothing happened… @introduction\\\",\\\"►Nevermind. @entry !end\\\"],\\\"tips\\\":[\\\"You can use the sacred garden of course. Just throw the seed directly onto the soil.\\\",\\\"The item will be absorbed by the blessed and fertile ground to help create new life.\\\",\\\"What a miracle!\\\",\\\"►It's just a gardening…\\\",\\\"►Will do.\\\",\\\"Good luck! @entry !end\\\"],\\\"visitedentry\\\":[\\\"I see that you still struggle with your task.\\\",\\\"►Yeah, kind of. @introduction\\\"],\\\"introduction\\\":[\\\"Well, if you are willing to listen, I would be willing to teach you the ways of the sacred soil.\\\",\\\"►I do not need a teacher. @noteacher\\\",\\\"►Sure, whatever will help me finally get this done. @getthisdone\\\",\\\"►Seriously, can everything talk here? @getthisdone\\\",\\\"►I can do this on my own, thanks. @onmyown\\\"],\\\"noteacher\\\":[\\\"Without my teachings your little tree will remain but a sad seed in the sand.\\\",\\\"Return to me when you've grown some wisdom! @visitedentry !end\\\"],\\\"ionlymaster\\\":[\\\"Fool! Out of my sight! @visitedentry !end\\\"],\\\"getthisdone\\\":[\\\"[$ismale]A bit more respect, young boy. Start by calling me master!\\\",\\\"[not $ismale]A bit more respect, young girl. Start by calling me master!\\\",\\\"►I am the only master I acknowledge! @ionlymaster\\\",\\\"►Fine, what can you teach me… master? @yesmaster\\\",\\\"►Forgive me, master. I am willing to learn. @yesmaster\\\",\\\"►[$ismale]When do you beings stop calling me “boy” for once?!\\\",\\\"►[not $ismale]When do you beings stop calling me “girl” for once?!\\\",\\\"[$ismale]What are you saying, boy?\\\",\\\"[not $ismale]What are you saying, girl?\\\",\\\"►[$ismale]I'm a girl! @genderswap\\\",\\\"►[not $ismale]I'm a woman! @woman\\\",\\\"►[$ismale]I'm a man! @man\\\",\\\"►[not $ismale]I'm a man! @genderswap\\\",\\\"►I'm a human, leave me alone with your gender talk! @human\\\"],\\\"woman\\\":[\\\"Great for you. @getthisdone\\\"],\\\"man\\\":[\\\"Ohohoh. Have you looked in a mirror? You have less facial hair than a stone.\\\",\\\"►You're right, master. @yesmaster\\\",\\\"►Touché! @touche\\\",\\\"►A man is defined by his actions, not by his beard.\\\",\\\"And for now you have neither. But I reckon this may change today.\\\",\\\"►You're right, master. @yesmaster\\\",\\\"►But I have accomplished so much!\\\",\\\"►Are you saying I'll grow a beard today? @beard\\\",\\\"So what, you talked to a fire, bounced off a mushroom and stuck a pine cone into the mud.\\\",\\\"Mediocre!\\\",\\\"But I'll lead you to greatness once you've accepted your current lack thereof.\\\",\\\"►Please do, master. @yesmaster\\\",\\\"►Just get to the point already.\\\",\\\"So impatient. I'll bless you with my teachings once you've demonstrated your willingness to accept them!\\\",\\\"►OK, master, you win. @yesmaster\\\",\\\"►Just tell me!\\\",\\\"Well, let me help you help yourself then…\\\",\\\"►Master master master master!\\\",\\\"See, easy! @yesmaster\\\"],\\\"beard\\\":[\\\"Well that's a miracle for another game. Your fate in this world is a different one, one of carrying and dancing, I presume.\\\",\\\"►OK, master. @yesmaster\\\",\\\"►But I want a beard!\\\",\\\"Are you sure this is what you desire?\\\",\\\"►No, master. But I'm ready for your teachings. @yesmaster\\\",\\\"►Sure!\\\",\\\"Aren't there more important things right now?\\\",\\\"►Yes, master. Let's discuss those instead. @yesmaster\\\",\\\"►No, I really want a beard!\\\",\\\"Well… I guess I could lend you a piece of mine. But please call me master first.\\\",\\\"►Master master master!\\\",\\\"Here you go. !givebeard\\\",\\\"But don't complain! I can only do white ones. This is your life now.\\\",\\\"►Thank you, master. Now back to your teachings. @yesmaster\\\",\\\"►Mphffpfhffhfpf.\\\",\\\"Takes some getting used to. But, where were we… right. @yesmaster\\\"],\\\"genderswap\\\":[\\\"Well I guess even my immense wisdom has its limits.\\\",\\\"Maybe you should switch up your appearance next time…\\\",\\\"►All righty. Maybe I'll do that.\\\",\\\"Where were we? Ah yes! @getthisdone\\\"],\\\"touche\\\":[\\\"…\\\",\\\"►…touché, master. @yesmaster\\\"],\\\"human\\\":[\\\"This… exceeds my expertise. Umm. Where were we. Ah, yes. @yesmaster\\\"],\\\"onmyown\\\":[\\\"Good luck, fool. @visitedentry !end\\\"],\\\"yesmaster\\\":[\\\"So, let an old and wise stone tell you: Basic gardening requires water. So…\\\",\\\"►Sooo…? @soo\\\",\\\"►I think I need a drink… a hard one. @drink\\\",\\\"►Wait… I want to talk about something else first. @introduction\\\"],\\\"soo\\\":[\\\"This is harder than I thought. @rain\\\"],\\\"drink\\\":[\\\"Me too, although I am hard enough already, hahahahaha. @rain\\\"],\\\"rain\\\":[\\\"[$ismale]You need some rain of course, you foolish man. Magical rain from the clouds above!\\\",\\\"[not $ismale]You need some rain of course, you foolish woman. Magical rain from the clouds above!\\\",\\\"You need to grow as person to get access to the cloud world. Not literally, but metaphorically.\\\",\\\"Though… literally might also work, but I digress.\\\",\\\"As a part of this trial, you have to bring me down to the river and toss me in. !riverzoom\\\",\\\"I will grant you incredible strength so you are able to carry me down the mountain.\\\",\\\"Beyond the river, you will find the answer to your quest in a sacred cave.\\\",\\\"►I am not sure if I really want to touch you… @nottouchyou\\\",\\\"►[$ismale]By the power of Grayskull! @lift\\\",\\\"►[not $ismale]For the honor of Greyskull! @lift\\\",\\\"►Yes, master. @lift\\\",\\\"►On second thought, I don't like this… at all.\\\",\\\"What a hard disappointment… @visitedentry !end\\\"],\\\"nottouchyou\\\":[\\\"This is the beauty about power, and now lift me up!\\\",\\\"►I… need… to… lift… my… master… @lift\\\"],\\\"lift\\\":[\\\"You are wooooorthy! @remember !pickupstone !end\\\"],\\\"remember\\\":[\\\"There you are again, my padawan. @remember !end\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL3N0b25lMS5kaWFsb2cuanNvbi5qcyIsInNvdXJjZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./assets/dialog/stone1.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/stone2.dialog.json":
|
|
/*!******************************************!*\
|
|
!*** ./assets/dialog/stone2.dialog.json ***!
|
|
\******************************************/
|
|
/*! exports provided: entry, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"At last, I can take a bath. @entry!end\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL3N0b25lMi5kaWFsb2cuanNvbi5qcyIsInNvdXJjZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./assets/dialog/stone2.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/stonedisciple1.dialog.json":
|
|
/*!**************************************************!*\
|
|
!*** ./assets/dialog/stonedisciple1.dialog.json ***!
|
|
\**************************************************/
|
|
/*! exports provided: entry, no, yes, suspicious, onmyway, visited, introduction, onmyown, explaination, solution, end, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"Hello! !set $talkedToStoneDisciple true\\\",\\\"I'm a stone monk and student of the wise stone atop the mountain peak.\\\",\\\"Are you here to climb the mountain?\\\",\\\"►Yes. @yes\\\",\\\"►Is there any other way to get up there? @no\\\"],\\\"no\\\":[\\\"No.\\\",\\\"[$ismale]Maybe flying, but you don't look like a bird man or man bird.\\\",\\\"[not $ismale]Maybe flying, but you don't look like a bird woman or woman bird.\\\",\\\"►Damn… then yes. @yes\\\"],\\\"yes\\\":[\\\"Good.\\\",\\\"In order to get up, just jump up the platforms here…\\\",\\\"It's easy. Just jump and that's it.\\\",\\\"…pfftttt. !amused\\\",\\\"Nothing special to consider.\\\",\\\"…hehe! !amused\\\",\\\"►Why the suspicious act? @suspicious\\\",\\\"►I'm on my way then. @onmyway\\\"],\\\"suspicious\\\":[\\\"That's part of the fun!\\\",\\\"►OK… I'm on my way then. @onmyway\\\"],\\\"onmyway\\\":[\\\"Pffttttt… !amused\\\",\\\"Good luck!@visited !end\\\"],\\\"visited\\\":[\\\"[not $gotTeleported]Go on, I'll wait here. !end\\\",\\\"[$gotTeleported]Welcome back… @introduction !set $talkedToStoneDiscipleAgain true\\\"],\\\"introduction\\\":[\\\"How far did you get? Pftttt… hihi! !amused\\\",\\\"►Not so far according to your reaction.\\\",\\\"Yes, very true.\\\",\\\"Just say a word if you need help.\\\",\\\"►I'm in a hurry, give me something to work with. @explaination\\\",\\\"►Riddles are my strong suit. I'll do it myself!\\\",\\\"Respectable. Good luck then! @onmyown !end\\\"],\\\"onmyown\\\":[\\\"How goes the riddling?\\\",\\\"►Progress is imminent! I can do this. @onmyown !end\\\",\\\"►I could use some help after all.\\\",\\\"I thought so! @explaination\\\"],\\\"explaination\\\":[\\\"This is a magical climbing chamber with unlimited height. !set $mountainRiddleExplained true\\\",\\\"We adopted the concept from a fire spitting turtle.\\\",\\\"He used it to keep some plumbers out. You can't make this stuff up.\\\",\\\"►I really don't care, how can I overcome the trial? @solution\\\"],\\\"solution\\\":[\\\"You might already have guessed that the distinct gates are the key.\\\",\\\"Just go through them in the right order and that's it.\\\",\\\"►And you're gonna tell me the order?\\\",\\\"No.\\\",\\\"Wouldn't be much of a trial I spoiled the solution here and now.\\\",\\\"►…\\\",\\\"Don't worry. I have a cryptic tip for you!\\\",\\\"Listen closely:\\\",\\\"The solution is represented outside on the wall to the right…\\\",\\\"►That is very specific and not cryptic at all.\\\",\\\"…whoops.\\\",\\\"I got the wrong tip sheet here.\\\",\\\"Well, good luck nontheless.\\\",\\\"►I'll try my best. @end !end\\\"],\\\"end\\\":[\\\"Still not finished?\\\",\\\"Remember the tip: The solution is represented outside on the wall to the right.\\\",\\\"►Yeah, thanks. @end !end\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL3N0b25lZGlzY2lwbGUxLmRpYWxvZy5qc29uLmpzIiwic291cmNlcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./assets/dialog/stonedisciple1.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/stonedisciple2.dialog.json":
|
|
/*!**************************************************!*\
|
|
!*** ./assets/dialog/stonedisciple2.dialog.json ***!
|
|
\**************************************************/
|
|
/*! exports provided: entry, teaching, easy, struggled, end, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"You did it!\\\",\\\"[not $mountainRiddleExplained]And you even did it without my help.\\\",\\\"[not $mountainRiddleExplained]You rock!\\\",\\\"[not $mountainRiddleExplained]I have nothing left to teach to.\\\",\\\"[$mountainRiddleExplained]It was fairly easy with my help, wasn't it?\\\",\\\"►[not $mountainRiddleExplained]You didn't really teach me anything. @teaching\\\",\\\"►[$mountainRiddleExplained]Yeah. @easy\\\",\\\"►[$mountainRiddleExplained]I still struggled. @struggled\\\"],\\\"teaching\\\":[\\\"Don't be like that…\\\",\\\"Bye! @end !end\\\"],\\\"easy\\\":[\\\"I really should keep track of my tip sheets.\\\",\\\"I feel kinda bad for spoiling your fun…\\\",\\\"Well, bye! @end !end\\\"],\\\"struggled\\\":[\\\"What, really?\\\",\\\"Maybe I have to revisit the tip sheet for brain dead humans…\\\",\\\"Well, bye! @end !end\\\"],\\\"end\\\":[\\\"Hey again!\\\",\\\"You can still use this mountain trial in your free time, if you want. @end !end\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL3N0b25lZGlzY2lwbGUyLmRpYWxvZy5qc29uLmpzIiwic291cmNlcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./assets/dialog/stonedisciple2.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/superthrow.dialog.json":
|
|
/*!**********************************************!*\
|
|
!*** ./assets/dialog/superthrow.dialog.json ***!
|
|
\**********************************************/
|
|
/*! exports provided: entry, sorry, collectible, hey, greetings, bone, throw, who, clouds, down, what, seed, seed2, bye, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"Hey! No touching!\\\",\\\"►Woah, sorry. @sorry\\\",\\\"►But aren't you collectible? @collectible\\\"],\\\"sorry\\\":[\\\"No hard feelings.\\\",\\\"Just keep your hands where I can see them. @greetings\\\",\\\"►Sure don't worry… @greetings\\\"],\\\"collectible\\\":[\\\"I am, that's why you shouldn't just go around touching me!\\\",\\\"You really don't want to own a power-up that hates you!\\\",\\\"►I guess… @greetings\\\"],\\\"hey\\\":[\\\"Hey there! @greetings\\\"],\\\"greetings\\\":[\\\"Need anything?\\\",\\\"►Who are you? @who\\\",\\\"►What are you up to? @what\\\",\\\"►[not talkedAboutSeed]I have this seed problem… @seed\\\",\\\"►[talkedAboutSeed]I still have this seed problem… @seed2\\\",\\\"►[$gotBoneQuest]I have this bone problem… @bone\\\",\\\"►I'm off… @bye\\\"],\\\"bone\\\":[\\\"A bone problem…?\\\",\\\"►[not gotBoneInfo]Yeah, I need to get a bone through a door\\\",\\\"►[gotBoneInfo]How did the trick work again? @throw\\\",\\\"Oh… that might be tricky.\\\",\\\"As you know, items won't go through doors.\\\",\\\"►Is there really nothing I can do?\\\",\\\"Well… I'll let you in on a little secret.\\\",\\\"Listen closely!\\\",\\\"It's not that items can't go through doors.\\\",\\\"They just don't want to.\\\",\\\"But you can trick them with a precise throw.\\\",\\\"►How would that help? @throw\\\"],\\\"throw\\\":[\\\"It's really easy.\\\",\\\"You pretend to go through the door without the item.\\\",\\\"Just throw it and enter the door as usual.\\\",\\\"The trick is, that you time the throw in a way, that you can still catch it.\\\",\\\"Going through a door takes some time after all!\\\",\\\"I hope that helps with your bone problem.\\\",\\\"►Awesome, I'll try that. !set gotBoneInfo @greetings\\\"],\\\"who\\\":[\\\"I'm the almighty super throw!\\\",\\\"Not that useful, but at least I'm not a dancing power-up.\\\",\\\"I live in the clouds with the rest of the family.\\\",\\\"►Like, literally in the clouds? @clouds\\\",\\\"►Why are you down here? @down\\\",\\\"►Back to topic. @greetings\\\"],\\\"clouds\\\":[\\\"Can you live there any other way?\\\",\\\"►Nevermind… @greetings\\\"],\\\"down\\\":[\\\"I'm excercising my throwing arm…\\\",\\\"Also, Dad has company over. I don't like the smell.\\\",\\\"►I really don't want any details… @greetings\\\"],\\\"what\\\":[\\\"I'm throwing stuff up the mountain to excercise.\\\",\\\"This is practically the best spot to do so in the entire world.\\\",\\\"►Any success?\\\",\\\"No, I ran out of stuff pretty quickly.\\\",\\\"►Too bad… @greetings\\\"],\\\"seed\\\":[\\\"What kind of problem?\\\",\\\"►I must get the seed up the mountain.\\\",\\\"I see. Items really hate going through doors.\\\",\\\"You're a human right? Humans can throw by default.\\\",\\\"Maybe try throwing the seed up the mountain?\\\",\\\"You won't find a better spot than this.\\\",\\\"►Good call, I'll try that. @greetings !set talkedAboutSeed true\\\"],\\\"seed2\\\":[\\\"Really? Still?\\\",\\\"Like I said, throw the seed up the mountain whenever possible.\\\",\\\"This spot here is a perfect start.\\\",\\\"This trick might come in handy later on as well.\\\",\\\"►Got it. @greetings\\\"],\\\"bye\\\":[\\\"See ya! @hey !end\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL3N1cGVydGhyb3cuZGlhbG9nLmpzb24uanMiLCJzb3VyY2VzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./assets/dialog/superthrow.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/tree0.dialog.json":
|
|
/*!*****************************************!*\
|
|
!*** ./assets/dialog/tree0.dialog.json ***!
|
|
\*****************************************/
|
|
/*! exports provided: entry, visited, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"You are the dancing tree,\\\\nOld and rough. !amused\\\",\\\"One hundred and seventeen,\\\\ndancing tree. !amused\\\",\\\"►Hello?\\\",\\\"Feel the beat from the tree topsee, oh yeah! !amused\\\",\\\"►He seems preoccupied with singing. @visited !end\\\"],\\\"visited\\\":[\\\"La la la…\\\",\\\"►Maybe I should talk to the fire first… @visited !end\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL3RyZWUwLmRpYWxvZy5qc29uLmpzIiwic291cmNlcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./assets/dialog/tree0.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/tree1.dialog.json":
|
|
/*!*****************************************!*\
|
|
!*** ./assets/dialog/tree1.dialog.json ***!
|
|
\*****************************************/
|
|
/*! exports provided: entry, danced, dare, nothelpful, smile, request, prank, wood, sure, pinecones, lovethat, weird, notime, nevermind, definitely, missinggear, cool, reminder, reward, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"You are the dancing tree,\\\\nOld and rough. !amused !talkedtotree\\\",\\\"One hundred and seventeen,\\\\ndancing tree. !amused\\\",\\\"Feel the beat from the tree topsee, oh yeah! !amused\\\",\\\"►Hello?\\\",\\\"►Wait… what?\\\",\\\"You can dance\\\\nYou can grow. !amused\\\",\\\"Having the root of your life. !amused\\\",\\\"►Can you hear me?\\\",\\\"►What is this?\\\",\\\"►I know that song!\\\",\\\"Ooh, see that birch\\\\nWatch that tribe. !amused\\\",\\\"Digging the dancing tree. !amused\\\",\\\"►Are you done yet?\\\",\\\"Rude! !angry\\\",\\\"I'll talk to you after you prove you're worthy.\\\",\\\"[$ismale]Show me your moves, boy!\\\",\\\"[not $ismale]Show me your moves, girl!\\\",\\\"Follow the beat! Get ready! @danced !end !dance 1\\\"],\\\"danced\\\":[\\\"Your little dance amuses me. You're keeping the beat alive! !amused\\\",\\\"►Thanks for the compliment! @smile\\\",\\\"►There is nothing like putting a smile on a tree's face. How are you? @smile \\\",\\\"►How dare you?! @dare\\\"],\\\"dare\\\":[\\\"Oh you pesky human! Can't even take a compliment! @request !end\\\"],\\\"nothelpful\\\":[\\\"Oh you gnarly individual. I should have never trusted you in the first place… @request !end\\\"],\\\"smile\\\":[\\\"You seem like a decent lad! Maybe you can help me out with something.\\\",\\\"►Actually, I was about to ask you for something.\\\",\\\"Huh? You came here just for me? How nice! @request\\\"],\\\"request\\\":[\\\"What is it that made you come all this way?\\\",\\\"►I'd like to humbly ask you for a piece of your wood. @wood\\\",\\\"►I'm gonna cut you down.\\\",\\\"You… and what army?! !angry\\\",\\\"►Haha, it's just a prank bro! @prank\\\",\\\"►You're right, stupid idea. @request\\\",\\\"►Maybe we can help each other out.\\\",\\\"How? Why are you here?\\\",\\\"►I need a piece of you. @wood\\\"],\\\"prank\\\":[\\\"Go prank somebody else. I'm too old for this. @sure !end\\\"],\\\"wood\\\":[\\\"Sure sure. I can spare some. If you help me, you shall have your wood.\\\",\\\"►Awesome! @sure\\\",\\\"►What can I do for you? @sure\\\"],\\\"sure\\\":[\\\"I'm an old tree. I don't have any children.\\\",\\\"My pine cones never amount to anything…\\\",\\\"I could really need your help. With procreation.\\\",\\\"►I'd love that! @lovethat\\\",\\\"►Isn't that a little… weird? @weird\\\",\\\"►Oh no! What happens to your pine cones? @pinecones\\\",\\\"►Nah I'm not really the helpful kind. @nothelpful\\\"],\\\"pinecones\\\":[\\\"Well that's a super long story.\\\",\\\"But I'll gladly tell you, little one.\\\",\\\"►Um, nevermind. @nevermind\\\",\\\"►Cool! @cool\\\"],\\\"lovethat\\\":[\\\"I figured it all out.\\\",\\\"The only way I can get a son is if you plant one of my pine cones on the mountain in the west. !mountainzoom\\\",\\\"Would you do that for me?\\\",\\\"►Definitely! @definitely\\\",\\\"►Ain't nobody got time for that! @notime\\\"],\\\"weird\\\":[\\\"Oh you judgemental humanoid! Show some empathy! @request !end\\\"],\\\"notime\\\":[\\\"Oh you are not a very helpful life-form! @request !end\\\"],\\\"nevermind\\\":[\\\"Oh you rude leafless imposter! Won't even listen to my sad, sad story. @request !end\\\"],\\\"definitely\\\":[\\\"Awesome. @missinggear\\\"],\\\"missinggear\\\":[\\\"Oh, and I almost forgot!\\\",\\\"You will need some special gear to be able to climb that mountain. I hereby grant my personal pair of double jump boots!\\\",\\\"►Awesome, thanks! !doublejump\\\",\\\"I'll drop the seed for you now. Good luck on your journey! !spawnseed @reminder !end\\\"],\\\"cool\\\":[\\\"So the thing with pine cones, you see, is they need very special fertile ground to grow.\\\",\\\"Have you looked down? The soil here is rubbish. Nothing can grow here. No nutrients!\\\",\\\"Which, ironically, is why I'm too weak to throw my pine cones far enough onto better grounds.\\\",\\\"A vicious circle of non-procreation!\\\",\\\"So I need somebody to carry my pine cone to the best possible place in the area.\\\",\\\"I just want my child to have it easier than me, you know?\\\",\\\"►Definitely! @lovethat\\\",\\\"►Ain't nobody got time for that! @notime\\\"],\\\"reminder\\\":[\\\"You know, you wanted to help me procreate. Bring my cone to the highest place in this area.\\\",\\\"►Got it! @reminder !end\\\",\\\"►[not $seedplanted]Sorry, I lost your cone!\\\",\\\"►[$seedplanted]I planted the seed. How about the reward? @reward\\\",\\\"You did… what? Thank god I have an unlimited supply of them. @reminder !spawnseed !end\\\"],\\\"reward\\\":[\\\"You will get a reward when my offspring sprouts. That was the deal.\\\",\\\"►But... that might take forever!\\\",\\\"Ho ho, maybe you can go the extra mile and make the little cone grow faster?\\\",\\\"►I'll try... There might be some trick to it. !end @reminder\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL3RyZWUxLmRpYWxvZy5qc29uLmpzIiwic291cmNlcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./assets/dialog/tree1.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/tree2.dialog.json":
|
|
/*!*****************************************!*\
|
|
!*** ./assets/dialog/tree2.dialog.json ***!
|
|
\*****************************************/
|
|
/*! exports provided: entry, alive, barelyalive, spoiled, returning, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"How did you fare?\\\",\\\"►There was a suspiciously convenient patch of soil at the top of the mountain.\\\",\\\"The sacred garden, yes. How about my seed?\\\",\\\"►He is alive and well. @alive\\\",\\\"►He is alive… for now. @barelyalive\\\",\\\"►He is alive but you might want to check if your seeds are not spoiled. @spoiled\\\"],\\\"alive\\\":[\\\"This is good news. This deed will not be forgotten.\\\",\\\"As promised, you may have a piece of my crusty bark.\\\",\\\"►Thanks! @returning !spawnwood !end\\\"],\\\"barelyalive\\\":[\\\"Trees are sturdy creatures. He will make me proud, I'm sure of it!\\\",\\\"►If you say so…\\\",\\\"Yes, yes… where were we? Ah yes, as promised, you may have a piece of my crusty bark.\\\",\\\"►Thanks! @returning !spawnwood !end\\\"],\\\"spoiled\\\":[\\\"Oh dear… what did he say? Was he making strange frog related puns?\\\",\\\"►That's a very specific… but no.\\\",\\\"Well, don't mind him then. It's just a phase, he will grow out of it.\\\",\\\"As promised, you may have a piece of my crusty bark.\\\",\\\"►Thanks! @returning !spawnwood !end\\\"],\\\"returning\\\":[\\\"Greetings, friend!\\\",\\\"►See you around! @returning !end\\\",\\\"►Sorry, I lost the wood you gave me earlier!\\\",\\\"You do this on purpose, right? Wood is not growing on trees! @returning !spawnwood !end\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL3RyZWUyLmRpYWxvZy5qc29uLmpzIiwic291cmNlcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./assets/dialog/tree2.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/window.dialog.json":
|
|
/*!******************************************!*\
|
|
!*** ./assets/dialog/window.dialog.json ***!
|
|
\******************************************/
|
|
/*! exports provided: entry, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"(The blinds on this window are only half closed.)\\\",\\\"(It is possible to take a look through the window.)\\\",\\\"►Take a look !end @entry !lookThroughWindow\\\",\\\"►Step back !end @entry\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL3dpbmRvdy5kaWFsb2cuanNvbi5qcyIsInNvdXJjZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./assets/dialog/window.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/dialog/wing1.dialog.json":
|
|
/*!*****************************************!*\
|
|
!*** ./assets/dialog/wing1.dialog.json ***!
|
|
\*****************************************/
|
|
/*! exports provided: entry, dontcallmethat, looking, jumping, noflying, pickup, seed, water, annoy, deal, giveaway, takecare, use, grown, sarcastic, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"entry\\\":[\\\"[visited]You again… Breaking into my home.\\\",\\\"[not visited]Who are you? Why are you breaking into my house…?\\\",\\\"►[not visited]I was just looking around. @looking\\\",\\\"►You… look like a flying ability power-up. @pickup\\\",\\\"►[$seedplanted]Do you know anything about growing seeds? @seed\\\",\\\"►[$seedgrown]I did it, the seed has grown. @grown\\\",\\\"►[not visited]What a strange person…\\\",\\\"►[visited]Bye power-up. @dontcallmethat\\\",\\\"Whatever. @entry !end\\\"],\\\"dontcallmethat\\\":[\\\"Don't call me that! @entry !end\\\"],\\\"looking\\\":[\\\"And you think this is an accepted behaviour?\\\",\\\"Nevermind, it's apparent what your standards are.\\\",\\\"How did you get up here in the first place?\\\",\\\"►Via jumping. @jumping\\\"],\\\"jumping\\\":[\\\"Aw man, another one of the multi-jump gang. Flying is better and you know it. !set visited\\\",\\\"►There was no flying ability available. @noflying\\\",\\\"►I like the multi-jump.\\\",\\\"Yeah, you look like someone who would. @entry\\\"],\\\"noflying\\\":[\\\"That's because I'm up here and don't let strangers touch me. That includes you! @entry !end\\\"],\\\"pickup\\\":[\\\"[$ismale]And you look like generic action guy.\\\",\\\"[not $ismale]And you look like a random japanese school girl.\\\",\\\"Go be generic somewhere else, it's unbearable. !set visited\\\",\\\"►Don't change the subject. You're even glowing.\\\",\\\"►Ouch! The truth hurts. @entry\\\",\\\"Yeah, so? That's none of your business and as if you needed a flying ability in the first place!\\\",\\\"I bet you got one of those multi-jump things! Even birds are falling for this scam nowadays.\\\",\\\"►Guilty as charged.\\\",\\\"I guessed so. @entry\\\"],\\\"seed\\\":[\\\"[not deal]Seeds? What is there to know? That's basic gardening. !set visited\\\",\\\"[not deal]Just put the thing in dirt and pour some liquids over it.\\\",\\\"►[not deal]I don't have any water.\\\",\\\"[not deal]Well, that's too bad. But not really my problem, is it?\\\",\\\"►[not deal]Then I will annoy you until it rains naturally. @annoy\\\",\\\"[not deal]Don't you have some water? @water\\\",\\\"[not $seedgrown]Seriously? I already gave you my stupid son and an instruction on how to get the water.\\\",\\\"►[not $seedgrown]Sorry, can you repeat it?\\\",\\\"[not $seedgrown]Wow… stand on top of the grey cloud next to my house.\\\",\\\"[not $seedgrown]It's very very simple. There shouldn't be any reason for me to repeat this.\\\",\\\"[not $seedgrown]Go away please!\\\",\\\"►[not $seedgrown]OK… !end @entry\\\",\\\"That's a trick question! I know that you already grew the seed.\\\",\\\"You really can't hold your side of our deal, can you?\\\",\\\"►Sorry, I just like being around you.\\\",\\\"Leave before I call the cops on you.\\\",\\\"►I'm on my way! !end @entry\\\"],\\\"water\\\":[\\\"Look around you! I'm living in the clouds.\\\",\\\"When I get thirsty, I just put my face in through my living room wall and breathe in.\\\",\\\"►Then I will annoy you until it rains naturally. @annoy\\\"],\\\"annoy\\\":[\\\"Company of a human is the last thing I need right now.\\\",\\\"OK, let's strike a deal.\\\",\\\"I get you your water and you leave me alone forever.\\\",\\\"How does that sound?\\\",\\\"►Best deal ever made. @deal\\\",\\\"►I might still send you emails in secret.\\\",\\\"Joke's on you, I forgot my email password a long time ago! @deal\\\",\\\"►OK OK, the deal is great. @deal\\\"],\\\"deal\\\":[\\\"So, listen closely. You can get water out of the darker clouds.\\\",\\\"Since waiting is not an option, there is the possibility of rain dancing.\\\",\\\"I think one of my children holds this kind of useless power.\\\",\\\"Let's see…\\\",\\\"…\\\",\\\"Yeah… Dave! That little misfit is nothing but trouble.\\\",\\\"You can have him.\\\",\\\"►Are you really just giving away your child? @giveaway\\\",\\\"►Thanks. I will take care of him. @takecare\\\"],\\\"giveaway\\\":[\\\"Don't worry. I have plenty more where this one comes from.\\\",\\\"Also, this might be the only opportunity for him to actually be of any importance.\\\",\\\"Plus, you have no idea how annoying he can be.\\\",\\\"So, win-win I guess? !learnraindance @use\\\"],\\\"takecare\\\":[\\\"Whatever. Just don't bring him back! !learnraindance @use\\\"],\\\"use\\\":[\\\"Where was I? Ah…\\\",\\\"Using the power is easy: Stand on top of the cloud and Dave should give you a hint on what to do.\\\",\\\"►I'm on my way then!\\\",\\\"Close the door on your way out. !end !set deal true @entry\\\"],\\\"grown\\\":[\\\"What a great achievement. I'm so proud of you. !set visited\\\",\\\"►Thanks!\\\",\\\"►Are you being sarcastic? @sarcastic\\\",\\\"That was sarcasm. I couldn't care less. @entry\\\"],\\\"sarcastic\\\":[\\\"Oh no, I have been found out!\\\",\\\"►Shame on you!\\\",\\\"I couldn't care less. @entry\\\"]}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvZGlhbG9nL3dpbmcxLmRpYWxvZy5qc29uLmpzIiwic291cmNlcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./assets/dialog/wing1.dialog.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./assets/maps/level.json":
|
|
/*!********************************!*\
|
|
!*** ./assets/maps/level.json ***!
|
|
\********************************/
|
|
/*! exports provided: compressionlevel, editorsettings, height, infinite, layers, nextlayerid, nextobjectid, orientation, renderorder, tiledversion, tileheight, tilesets, tilewidth, type, version, width, default */
|
|
/***/ (function(module) {
|
|
|
|
eval("module.exports = JSON.parse(\"{\\\"compressionlevel\\\":0,\\\"editorsettings\\\":{\\\"export\\\":{\\\"target\\\":\\\".\\\"}},\\\"height\\\":109,\\\"infinite\\\":false,\\\"layers\\\":[{\\\"compression\\\":\\\"zlib\\\",\\\"data\\\":\\\"eAHtXbvSLDcRXv9UgbEJgCIwOGC5PgMG7ASeANuQQNVJiKB4BNcJ4AEIyblUUbwCtgkMGUTYxoENGSRcAy7Job/d+fb036uWNLuaHc1Mq6r/llpSt/Tpm57Z+W+7XZRA4AYIPLHbPSGym1rfYCsRYoMIkLd26559GPdx6f+EyNTaLivagcBoBMjlQd+JfgQnxn7WTgUqzKn2XfCTCh22QGAMAjY3Pyuce0bE2tkG/x+QlyYQx3i65NubZ+0mbDQDgfEIkMODLuVk9IP3eJ45K4OPs3vDYC/59uad2c8ChyEQGIeAzaWlnIx+j/fWl22XfNvxXnvcDmN0IJBAwOToUk5eYr5/8W63o7wk9SiBgM2ppZy8xHxPzkMH79tz/g1x+WuR37R3PZnHVyTfvx/eK5/Bke/xjn7s8z1CYK4tF73vt04K7eB9AaAru9+V+e+J/PFKP7eeDt4z79fk+yTnlQ/60hp7gm9bLnnfb32U2sH7EkKX9/9Jpv5b5D8i/73czawzkfspFy1E5nv5G/5Onx2Uc2981q7mR3VeBP4n4T8s5/4RkY+KbLHo/J7K4/peQnxS40p+ODd0INAFApl8j/x9yvccJ4vO5nWOs7qLzcYiAoEjAqU8rfP9JXme/gPvQOAaBHSuBSf5cznaJ75HRbsej/c/Z8XmZdM+y/emn++UivoscBgCgUoEhHM65+pcDA9og/MQ7+d1bCTmY0/rGDq2N96z27jRDgRqEQCndP62uRht8t7L94f5OqDxafO2jWH7q9s6ZtQDgTEICEd1zrW5uCbfY74uXn6m3cagfazWMaMeCIxBAFyLfD8GsRi7FgQi36/lJGMfoxEY8r599o7n+9FIxoQFIcBna/vsHc/3CzrEWOpVCOj3Njrfn7238aKYzwz2/Yy9p9j+6rYXP+yBwAUI6Pf0Ot8/MO9tPNe8d3ja3lO8cSW7Fz/sgcAsCBTyfXU+L/mZZXPbCvoX2S4kShmBUp5u1V9eSYy4FoHfigPw/nfXOor5gcCCEAjeL+iwYqnNENgK738viGmxAOo+1u2YaAcCS0KAPLaae7B2ttkfOhBYGgLk8CXa7jX+RodFJNq9InAJ3zlH7yn+No1GY9l1Ptuv+T0mOXyJ1qc7J+8/KQvB30KxotcX9XoENO/1e/w1XQeX8J1zNJK98V6vLerjEEjxnvxfy/t8cBiFXB6jjzOPX4P3Go1l14P3/vVgTzZ4bxFZbnsLvOfp1OT5H3Fw5/rw9z47X2PPy9sS7/U56GcfbV9KnZ9vl7Le3ta5Vd73dg5j1xO8LyOWezcTvC/j1+OI4L1/KpbT/sjjz2PyPQ71Wt7n5Pa91L7gvX9ylvfgs+UyxvxZhFzX2o71I0XPrRHweI93Tlsvwfv1MkDzHnXwfc73rD0hHbx3TqP0O37sd6b3YA7e+6cQvE9jU/u7gOnZfVjBe5bI90TiqIP39/E4tZjPS/o0ob9K8N4/k+B9Gptr8r1+vkh7v41V815HjM+1u13wXjNC1W2eV125KjkPvc8NvEGfx/sbhO4+RPA+fUQ236dH3bdqzgfv72PTWyt4P5yIze+2XXFwwfsKkDoZAt6XCsas/ftWNr/bdgkj9PfEe66lZt0xJo0Avj+7dt4X/3ZfGpp7VnKNen+v97YNruG2UZcdTf8cAneS+nkEjEvZOWdJ2uZ3267ZC7lGXTNnqjE9rGGqvU3hV3OedS8O+61ey7Xg7duzk2vU3jj8/vfe62xkL62hUZhVuLH8zbXBba8/eP/4WT9FjOB9CpV5bB6HPbv3vI/x5D3fFbE9z85uF5U5VutU9Kl5X4qfWtNctlcl8GsirzdcwA/lXZz3ee3b6BsK+elxPGXfBO+Hd5nYf03RfGM9NW9q3sN/Ln5qTXPY3pSgb4m8LfIHkXdEWpSfy7nZz2dsvxK8fwzxwG+bI1LXu2eDM3JN68dBHteu4T3mlsoSeP9X2cTfRP4u8g+Rf4r8S6RFaZ3vsSYv92k+8LmG9xG2W+xpCh/MBVbrPdn6d2Qh3x3wICaa77au130t77XvvTi2/pbA+w9IrnlS5IMiT4k8LfIhkRalRb5vsY7ufQje+n8367xv+c7292VTPxBhm3vUnGR9z85BW56a7mxTcxr+9yLWnx6TdTZj514w/5TIp0U+I/JZkc+JfF7k2nJtvr82/lLm2zyv2+S1/t/Ouh92Xch1rfd6gNQtT013tqk5vWTePye4fVHkSyJfFnle5AWRFmVMvrfxcN5bLeQs8j55j/sB7FHaIPA1wfNFkZdEXhb5usg3RJoV8ZW8hzcLsD5H5H2tXh8Cy9+RvSezvfydtdtBLb+9ce1WEp6aIdA63+NeZH02W+w8jjw+19rnWXVEzSHA/G51bk6uD34eKLGf63Jze+2r5bc3rtd9bXpdNjc77TuxPxKgqL2cjn7Ne8xZevH4XGtf+v7XuH6b5732s8LnZ0So7Thgg8/H6Ne8R33ppZbf3ril73+V6xdeJt/nGDvzPPVZvh/GJ/M9fS0UQI/PtfaFbnvVy7Z522szz1Pnxul8j3sExy4VyFp+e+OWuu/e1/30iAU+L2Nf0OOZiwuaeZ76knzPe4EOzzruOfpnQGnvQXt8rrX3sIe1rIHfj752P8zFJc08T+2NR7+X79mXWjPe++ifAU2NmctWy29v3FzrXmPcVrw/YePk+8OzvwxiLpZhSPUHOc1FZZjPnE7uH97nJPq0nXMZ457fDhoen2vtHWzh4iV8TM4O0ksh76FrCs4oV7z8zffvOhcDBg0F6pzPnE7e6+d73aftnKtj5NZ6675afnvjbr3eS+Lp88R8njF0j7y3fLZtiwGukz2Nsinmc5paaeB1KkMcfS/oPd/rs/b4XGs/4dBrhTzwdEfrZr7X2O8r1neP9zKe+Tw5lTgkO/NGmXoqzOdLyvdb4j3Px9Ong+yg0or32XxP3huNvH2YZ3UHuLT6jLAl3uOhJnmeg70VppfQAzzXpRXvc/neu/513uZz/CO9uDnrDc4KnN8S771zpn3Oz12a56DVcyL6GQf1vUipwM8+MSj3u1c2H+jndPIen1NvWfTvzOi4Lc5qa7y352vbc+d7zfPWvAePkMdT71nIJeoe8v2961QTX/aAe/Y1Z7U13vNcPd1Lvgf/Ne+/MLT3+vydei7fI48fnlcG7tjrnm0v39fOpx/qEkf1vY57nDLfA7otPeccqDKcObgl1YMwzx76Z/qiz34K3rfI97X3C5tXSvlE730/4D9lvkeIrfGeZ7I13oNHtfl66fme+Syl+YyzJd4DB957e+M9lmZLzX3IjkHu3FtH0r4m3zNX9Jrv9f0CW0/xnbat8p5nSN7r6yBBl8P9UGNl65jzcgOBH55NjU6Nh00X7hU2+GS+T/ofjPjMaPP9YbJy/EDGZN/vSL9+Xzzm+Z5hxjzfB++JWlrjaHGG+kzIBdpxPaBYfnttjP1eA4EfrK+lcE/0yXzNttZ4z8/rxL7PgV2PtXXOgx2FberS8/1x1v2vHt6wl4pdn25rv/TDe+almn561dg/z4KaXGDb27vGS9ex1955T/7zGqcmH9hPbfM9x5X02bnLBPvOEW2N3xT13Dp1PK7XO/NaO/30qoEHz5aaHGCb2u4ZUzVmrMPeK+95LVPzGqcmP9hPbfM9x9VqYIJCfzrf475C7KbSuXXqmMdVnn9/0J6918Z89PVegAfPgpocYJva2yvsFrteec9rmJrXODXtVl+a71N805wAbigavynqqXXQpuMdV3M578kR+ulVH2CXL7nne3KAe0ppi10L3vNcWmpew9S8xqlptxr9+nn/2jWRD/CjsZuqnluvjsl1pc54jI1+etXAI3XGqe/d1+wbGKL0ynt7/szz1LzGS9r6uaateTdVPbc+HfN4epHviQPuB7fmPWLnzqtFH/M8tc0BXrtFbPrQvJuqzlgprWPyvHnWX7nb7b4qwnatpp9eNXCwZ+txoGbPwBClRb6Hn9Q5TWFjvp/Cd8mn5t1U9dwadExgjsKz/qZw/lsr5b2HCfaOAg1siEVOYxzK0njPa93DYkq75t1U9dz6dczj6a3/aw4P9LEAmxzf2YdxKC14X1rbmvo196ao57DS8Y6nt/6vOTzQxwJswG1q2Ml1q9HXgvfwU1rfGvo176aq53DSMYH5FsqT75P/oRYSGEzEgV6voeB8XPdTciB4H/yakl+9+g7eB+975eaU6+qV97GuQGCLCPxUviexRfmZ7PsnIj++2z38lehakfGHeZirpYQhxjJmaWyr/jli6rX3fD29JuexRfmF7PuXIq8bedW0bT/adgzaJQwxBjExvzS2Vf8cMfXae+b9m3IOW5Q3zL7fkrYWYPL2ccxD2NEe9EPYUR/6qQ92D0uMRUz68sa1tCOW3WdL/yVfPfN+LWsrnUH03z6/9cytKT/Lh+94h9Ur94Obwc0pORC8D35Nya9efQfvg/e9cnPKdfXK+/8DCiNATA==\\\",\\\"encoding\\\":\\\"base64\\\",\\\"height\\\":109,\\\"id\\\":4,\\\"name\\\":\\\"background\\\",\\\"opacity\\\":1,\\\"type\\\":\\\"tilelayer\\\",\\\"visible\\\":true,\\\"width\\\":190,\\\"x\\\":0,\\\"y\\\":0},{\\\"compression\\\":\\\"zlib\\\",\\\"data\\\":\\\"eAHtXVmvFUUQPtdXFXDhH6gIqP9AuODVRxKfVFB8g0SNGyq+cRI1bnAv+Oyu7AJqYtxQVvfEuMQXorJEAZf4AFFBI/gVnEqKvj37nHN6er5O6nZ3dXV31dc1PT3dc+Z2OgxEgAgQASJABIgAESACRIAICALrRjqd9aANoDJB6iq5bcw/r9PZgfJdJdsuow/rEIEkBFYbPxS/FL/dB5ow/KS6Ll99XmLX7xfB7xmIQCgIbHT8W3x/J6jMvKx+f7xE/eWOHqHgQz2IQBYCcr2UvWbsfSerH5YTgZARuKKn3AWIZ/TSUxIUpt8nAEN2XxAQn9RQda0xVRsqEdPvS4DGKrUgMEzfc58zajGIjRCBABEY63S6AapFlYgAESACRKAiAlWfHyp2z+pEoO8I+PZthvn80HeD2QERSECAfp8ADNlDQSDLH+UM9xhIzmOrhKx+qrTNukSgKAJ59hD1/YWibVv5PP1YeaaJQMwIcD8z5tEN27bpA1AP/s1ABKJDQNZCZd7j9AHBZwEfKuTFjgCfBWIf4cHbZ99FS+r9wqSCDP4SzPlLK+z7VK2foR6LiUDtCMh7xyvg813QdZ7Wk643+56y1p/lqU8WESACRIAIEAEiQASIABEgAkSACBABIkAEiAARIAJEgAgQASJABIgAESACzUdgM84TXwNtAW0FMRCB2BHYAz/fC/oI9DHoE5AbfsrxfQvIMBCBxiDwPfz8B9CPoP2gAyA3nHIZnvx/Hl6TWN81SVnqWhmBP+Hnf4H+Bp0AnQRlBZn/Y5vf6fdZox5X+RR8h30qaBroItDFoKwg83/T5/csG1keNwIz4OdXgmaCZoFmgxiIABEgAkSACBABIhADAnn2KGOwkzYQAYsAnk+7Ns80EWgbApz72zbitFcQyHM+1TakRj37W6tynHG0Dacm2zsH4zkXNAqalzG2sZ1bFRm3HRnYFGmLssNH4CaM582gW0ALM8Y29nOrMfPcsxhDc7sZHt+37E0xkw1D4F74+n2g+0HLMvy+YaZRXSKQiMCT8PWnQE+DVrbc7/k/eBLdJLqCl+Hrr4BeBa1tud/zO6zRufckgw6OnN3Dfx++vh30AehD+v0knMggArEjEPN8v8Dszc5s+fyWx49xXzgnvIn7xBug10HbevcMFViIxCLQraDblNmgmN/dbtBg1aSqnNsKZTX3BXz9c9BnoE8dv1+Gyg+AHgQ9lNVQQOXXQ5cbAtKHqgwOAZzbdqu+t7MS6q4CjYMmBqc6eyICtSGAuX9S8PGs0Fpk1oHWgzbYAqaJQEMQ8L234+M1xByq2SIE3PV61nzdImhoaoQIbOjtwciaXd6n0v+vV/X9mo3AalOEeNGk5iOwDn6ufj8Ma6ah092gPcPonH22CgH7DGnn91aBQGNbh8AuWDwXNNqzXP6nni9c7jBXI7/G4TFLBIgAESACzUFgHGv8CRADEWgTAuvNs23S/wluEx60NT4ExjwmWb/3FJPVIgS2t8hW+n2LBttj6o1mjdumbz5bv/fdDzxQkRURAnfA7+8E3QX6IyK7skwRv9cz2jTZ+ea3CPOQxndjumnyVcpw/fWt7TJ6LQBGGjStsfA1rbHlab1Q40dg26Ogx4yNoepap17HPfaKT8O3u7afRcbvLR+yZ4Lv90duG7Ye02Eg8CzG/zmPD4Sh3XC0KPLNgLTfH/muieFYxF5dBN6Czx/Fb4KOgA6DfnZ+H+TKx5KfmmJIXf6ap53Q1jYpsERV9CX8fkTu7aDT8PlTLfH7tEHM8tfFqCzfCZuR1gjKstrJqJ6r+HmM3wugF0EvgcoEXHve4Fu35+V5GyQzOASWQ6OHa9bKtwaSZ2MJ9nn5LKfc37fh6++A3gW9V9LvtefzNcGYCASOwFfw9a9B34C+rej3gZvaavXkW9OyB9nUsAS6L+3pr98oKPuexCG08wvoV9BvoN9BDHEiIL8ZEb8XKvPbEd1/HBQ67vPzCujdBTUh5F3L++SaYF+TdKzq96Hbyv2dwY5Q78zmnE5DPH+R30odA8m5U57z1nMMQiZp78KV0+dOeQ5192UEK1d+2HnVd9h6sP96EJD53Q3i+2V83m0nLW/PaV2/13p5ryGV72ds9e1nPzG1HfLvL3RdU2YtnzZG7r0sbd3v249MaluuEaUkGcsvc+9w/49Uv8bPt27Py7M2hpqu26fqtFP8vuyapk490trqrRG7KuPeH2QN4l5nKlsmdu+BIY9fGfsGVacsbninoXMYdAR0FNSPMIg1jepd5L0creOLXb+3MnJfwXXQtbyiacHEhn6v+WxfMaXL+j3eaeicljHAWI6AJFyW8C6tnAUmlZ2pWODPtZCdU0A+r6j4a9m9dNtH1roIa/Gule9Xuk7M+6XjMNvdh/EeF/+NOOCMp9sv8/T8Sd/b6Vc/0u4SjJOee2k/Pp6WZcVXpwjkXcv75FKaDaZIz4GCUahliuA+mDusgN+7516Wl3ZPvSp3L/ELyjOj0E5Q0XBN0Qol5e14aZ/uPKX8kl14q40lrNm8wgWYdT1HFOhykujsSZz2Mdz1vew9FD0Hcf0wNBRD0i/tuXdYuLXxOpD53g2hnYNcCgXtvO/q65blnf99++eyTyjPO/3aF3d1rzvvYqHt+6796VroiX3r9rw8T3ONY8neG+75wYW8vu1TPG3PRfxennnkeT903/f5ss9e8iYjYNexab7kuxfKPBxLkPWdXOOyPy7vAInvu2vAkG31zfO8LkIesXTdioydb+y19SLt6Jwfgt+7eqetTdTWtNg3f4l82pyX1p4tuxtzxT2gpoQ6bB6WrVX9wNV7Chjq924Z8+kIPA6ff6JBfp80B6RbOZxSuUabfJ0WRS2vrXnlivZPeSKQB4Gqzzxpa7U8/VOmPAKhz//umre8pXHUzHutuGtC3iPCHv9LalbPHf+am2dzRIAIEAEiQASIABEgAkSACBABIkAEiAARIAJ9RmAN3st5pvdbSemq7rxP/br7cNsbRp95dPDpNWjeZoy1jzYl8FV2o6dc62isskVjra9xVn2V01jlVUfhC9n8NuRt2I/8gR7vIOJDvbTl27StK2lfH6KH9CllErb2YtXPxiJj85L28VwZm9e+tJ70ucXpU8u0nuRdnq9vldHY1te0G0v/oYa9sNtHexL4KrvbU651NFbZorHW1zirvspprPKqo/CFbF7HYxz8CbyHeQLxSZCEfxD/20srHzIdTZ+V6nRW9WTQRtfXh+ghfUqZDaqfjUXG5iXt47kyNq99aT1fn1qm9STv8nx9q4zGtr6m3dj2zzQRIAJEgAgQASJABIgAESACRIAIEAEiUB8C/wOkAQzq\\\",\\\"encoding\\\":\\\"base64\\\",\\\"height\\\":109,\\\"id\\\":6,\\\"name\\\":\\\"decoration\\\",\\\"opacity\\\":1,\\\"type\\\":\\\"tilelayer\\\",\\\"visible\\\":true,\\\"width\\\":190,\\\"x\\\":0,\\\"y\\\":0},{\\\"compression\\\":\\\"zlib\\\",\\\"data\\\":\\\"eAHtXU3TbUdVfvOllgoOUG4CSajcOxAGWGAgqQIG3lQZPsoE9QeQ8yZvFSroVKK55UnQP2AJiYiQOaCUWsWHE6bqSEAHAiMKBoTwoVMHPs/reW49d93VvXvvs/c5+5yzu2rd/tirV3evfnr16t77PfdHd5yd/cjox0i/erbQSenA5n+FdKSLpCzyZPmh9TJZrWWAblNwzDNN3P/MQielg1cx38IB8XXjjrN1F2bBcwaedSseJY+yW+sM4WsCPZg0XsXE/ZsWOikdRNyX8PYJ4OLZAv0VylWPa0LpGNdkZLJdrmRl601tboP7B9DvL0DA50FM310gPsvoQZTfb89cVsZfku/lXs/lOY/S4lU+xnq+Tewyoxx/5unI15X3ukPTXW3weQn3EaPPgLcUnsazDKPCquLzioxMdpR7A/UlK4szGVmZ7Lxi2nuFHyDxQ9BfgqLe7zE+8bfGkrtChXNQlB3ztbbuQj+c33m7+q1+tPabfKqjdc01HkPW7iciE/IrEMf/9Camrj1kcnysxKznYzpr0+UrneGemK/hXHU9FkYvKr5MX9xTvuRmOI9l3p9aWnhXfO3Os7OfbuaSc8t5/RwEyPbLlmu+iQPO2zO1RsIzyX0W5XGumHd7zrn1tiI2HH+Sq+ZK8tXfyK96tbiljuuL/ed4/i4RGvvna5bsUQ5liaQTjV/lir3NFWSdg14BUX+cM6alB8f9DbRBLA3BJ0RWMUrZU8h17LMPLYF4j/vZzwH7rUE26bnWCsYXbTUxH+fe2C99J823l5fS6lu2tob0t9TO0PLYv1b73Le9uL5cH9SD414YGopP9u0pzKPkxHgbubL7WD/rKFf5Vt0Q99v0RTapDx7VtzjvjvsVmM5BtEmMo51HUWdQ33yelZ4KY52dMgb1jzba7bOxjJLM9Ox6mAr32juEScbbYI3KEPZd5gXkKt+qsG1x39pOxqd555rRfq31E21UbR/IZLNsBToHaY49lr2Xvz7EX4PogwjSM9cXSfrWWou4B17Xz4HvvRt6H+IsvN94xMv4T0HCYYwz3D9ekPMBlGehtp9k/FnZPnGf9Udl0UYNsc9x7TjutY6ir6X1oH6cQhxxH7HKNRCxT8zX8B1lKJ/JijjmuiM/eTPsR37JZtwa5op7t1GyS61jEl9cO457rSPinmtA+Nd6kIxS/C08+LbRd0qMHeUrPD8HvQIa4suh2tahhPsL86Pd/nfZdOIP2G22+R8Dr+7u411otj+Mhfs4pv9EP/qEFZjPQX5XwHnUXO7Lh/C1w/1d5Ovo8+in9n0+l5+F4stQ6vtrwPtao19COoYVCs5B0oXHukvxPUlrMcrx/AoZyXR9S57ztqYd98B6Ea9uV7uwHXmZ1zrKsKy+Rv894x0L97T5ovfgLufnQX2Cz53b1Jjehw+xwkCIE+KCcV+behd0w3EM6XuXXijzfsjmevO1iOJiqMkc0kc25LjP8Dp2GbH8ZrT7lsIoHftduL8BWd6/gsjbioV3xR8F5v8woT+qrAVhI+I85ulDlOznbR0bqSDipNWPUfPCZdwH9LwWq672Gcauk9iXFYSdg7QvaK0qz9jrx7Tktej4D2yOP4K05t8xNFWaWL6OsTwGKgXadGB63YX72MeSvFiu8Som7h3jK1QYMhecY9ow+hGad2JHa4S2aQWi7L42GFWaQ/TxW3yJZuEDGDV+YlY4lZi4RiOuVcdlOI/kacyt9j+z9/GdTvS/S8+d7wJjjLhkPvrVtbNrtjdM4ef4dwqcjyFzIf1rPj2WDeQakGzy00bJrj2NdJ/3vy4/pj+HAq29Vl8iyhgzL0wSr3ENSjeyE47pLK1x6Znkacyte1TEfe0bBWEus8OuJ/FluPeyLpue7Q2SfWHnbsn0PtTSsvOKr8He6zsF1otzoTnxmPoln+y79L1C/XMQ8ZzZdNkt4l5pzWHcD7QuuCYok/JK+/kq4fF+lOqh2uRBmGxZg9JJph+3LdJ99i1Ey4Ai7muYFuZqPGxTfMJjjB2zmSzVfw7Y4P2R36PqWZTJfGsQ3j2ONr9VVuSTPSeWZYuch/PFZ5pXxSrz+iwrUdzPh9bzvs0h7XtDHHumz6F93gfuHbM13IvPeabG/QqKPAeV7HWXnolr7gs12yZbxT1b+wbrMF2bd8eB2z72aWi9rvHs+rn2Bt9bu/TZ0scVmM5BmtcM91/H82+AvgnyQMzV/CDxZti82NTVGUDxMyiPQfVZh9h33Pt9P2X4nX+UU8q7nVda9t7t5pj2hX1Zgc5B7rcge0vQvDvGs3Ts29B6tzR+xBmfV+rTcX8DPrN8C317EH0MxyDVxO8MyPOkkXAre6041i2pOdav1XPekrxYLqx7LNy32OsorzUfdR9ttstx+91q++jDZ2tE9Wt7kLd9jGnNq3ThuBc+PXbMEWOep35KZS5D6Vi3pF/KxBq8eR9Uqzc27kt9GqPcsUx8Rpvtbch+t56XWZdzS376T/G87bKX9K32Xvj0mJiTLaeP8ScgBdp6fqcTcRlxK3mRT3IY+7ssxzLr1uo5r8urpd3OKy17X6u37TNhmTanr+31vSLuE/u8q9lWJ/uq38fexz4Kc9E3Kn2zVsPvdQh/bNOA5LasF/Jib1iTtzUI6x7vAvet/cv4tE9zn4i4vwtlLI93PJmcbcu+AgFfBf3ztoL2XH8M3AufXXFcHzpDxDium1o9521VpeNd6bnjXmMjxku4l08k3jHjeyHsPtCLoDXob0BXQCw/hODfKPCblNJ3ChcbG9qKOce87K+XDUmjDzd9/K76PA+0BmHd40PGPfeCKTHvev0iMl8G9P/BCw8w7fa+L866sFh7TpzWng951qp+x7vSh4L7XWI80+e/oPBfQf+WPTygMsf9EKzV6hBTxNOr0EdG/htlbwIffdQHjJgn8Zl4MzmlsofR7v0JCeseHwruDwhas+6q497xI5wp9mdMq5yYjMRn5BGuiCnxx1h1iW/e633StOX3fo79KKOUX3Bvypw4+WeQv97Q8xO3NYb4DPfCkTBZwhzLMxstfse9y/K0bPoXMBh+Y/T3Nijd+4nH67WkF9ybMrdI6iy7howSvYRnf72h7yKeeyjhnrhyTDMdscay+O6F9w3k49px3Au7WRzvJ6LOaPfl/2T1S2UL7qMm++U/A/bPgniWFaY9/vdQ/iUsC5x5z3jmZb2XQXMNNdw7HnmeEvYUy0b72Eq4V50s7nMX4b5PhneXv+DeZ2Z4WrjnPY7jvpQm7uceWnHfNY5fwJ3oL4Ic9+9C/mdBfX6LrKsd+T6Ob6Xj+llw36XNtue6w/lbsMOm32b7YfdvWQ+Hjnva0+xvJzJt8V35KyDWkZ+z7zuS30J/ngj0buTlfyke8nflEHNy4XsYMe8wSVwDmb3/NMoP4Y4z2nudaYlf2tFoQzGsNMgPmhPus45yDxDeFe97fWb9nHsZ14BwT59e6e/PveOb/mW4p712377PUNzPmSOeFtz3mc06r9t/7gGHgnmOalvcy6+nLPo6uvPhvvEQfPv/QNz3N5koa6qw4H4qzR6W3BLu5a8wpt9eI/KI5Nv7e6v4Ox270tAb0NBdG3oQ8VXQgnsoYQbhw3vuQ4Z7+fiy3S2x6jAm5h33+/J3dK7lWfadGz0vuM8Bl72b4jeXU4Xfm0pwo9yIe2HWcdySVj2PdW7U75H5bzNl3fO/PcmeDy17ARUX3Ne1xzv6eEe57X0kbfqVQrNzxb3jd2hauG+199eho8cKetq2+B4IKPk58fdztm3rEOvrjp73MrqPj7jnntBnD6hh+4N7VpLb+9q3lUOeCfdduLoXOrgPRH+cfvgUgbhnyPwc9rN1bf6/lOP9V/eT+t7AR8o9Ia4Ffx7TNdxH3l3np8S9zpSKiemaL0N//MmJFLDgvl2xsv3x/RPXRHZXWTqjHjLub8AWyta3/C4meS82deK37/Sxr4Om8mV8Zrl/oBs3A3Ff8nMWe39TTYMSJXzv25epDabV3g/5vaiI+0fQEdr+MX0Z+UbZ+ekdNvDF3psyRk7OGd+lobbivvZbCJL91MbOa3+IuFdedyuqt03c4hs9hAYW3G+j5eOrW8I9fJXL3+YQhsfGPX0O0rUdqXTxc3ak6ANppoR74V1xxP3jsO1dv/8h++7xu6CXqc6uJZXTz2+x978KxjeTeQlHr4GhuI8+jdaHx8T4E4F2hXn5/bwjpZ/fhXu9W+Nvq3S9X4O4JRyQBuJv59R+P8fxy/sZt/e8KxHudXcjfr//GdOPb1Gzm+ro9y9+TosGT4OH6yD+bhRwu87uK/13Makd4V54z+Jd497vb3wGfx8Z9eXU31v57x6soZc+9Dz4jyVkfo7b9tI454j7Ul+J9Y9vHp4y7on5l0D8FmEIfQr1jgX72+Cee0Nm51UmGwt1TRbctyk1It+ez0u4d//e/0/PY/D1+V3NGhQx/6Xwd7FcC/w+QWvi00j73xWC/4zYXwfq880Oqu49/ASguQpfR9/RCK9d9v79qOe/x6p6HtPPJ+55V0niOVPvrOI7Jp1BwdI7OKZLlcXDbyQy3B/739fq9xCE5w2+1573dPZd2vegO/1Nra8N/pYIv9nh74ZEehllcwxu64l94fY5pOMdpeczzMf7fspye0+88T7Ty6STeAZVeUssTJMXTaZBPNfxNMP9sX+TluHecZ6laefj9zn6bkd7gOLIl07CTAqjrSfu/S5Ga0Bx7Zl4YuwYr+F+G5UQ0/ruoXSuFe65rzwK0v6m+FRwTz8lwzhttpdn356BZXD4DGpyL3h5sIRxKmaYd3sf8Ts0736O4/7ucYZxKYVyfX1F0XDjbt7dc1/h314J74qjb38MPr3rgfZe2JaNLsUtmP8I5H3UGziQ9Fth21+fEPFNu/42gIXr3+2D9OZnnZLu6AfSB3Q8Cvf0dR4AyUYjuVVw3MdzAvNvBOkuhw2RX3hXfOz2Xv5JC6apo67w52D4iy6mGT53DBKHItl14d73PqaJ+RbdyZ8s4Z7t+TNkBwfacK4jnpnpw7hcjtMxj+xJ4p7j3jbwDnTdQM9v29CE9R+APb8voYh7P7cT961/a0Pcc68gBq9uiPj0bxbG/F7BZVMu27wGyvz9zN53/T0YRJ10IOZfAkU7yLz7BMx/CrSu0D7vPPXOqXRWdXsP/2at8fbBPeu47UW2OfCe1O+PsvQHwNMn6O+8MtzT3zl2X6ePrpy3hnnhAvbxJkZUFmOtj1YMeR/GSj+Nefb/51t2XvEvYy94fUKPo0xB32N+CGVrFDr9E/JDcd/yboD95F1rH+xfR58eA50S7l/EeNcbop3VncoT0N2TIM2h7Eo2l7Tzcd+PmFZeZ0Dls/gfIe950L5CxD5sf/XdK/cGf5+lPaO0Rrhu9PdV9L0jPYrn0rfH2bsBrccYl94zPALZsT3lH0VfdJ71+Bjt/W9CD7JfbrOEOc6hf1eoubyCehlmYbM77XqsF9cC8/SF9ol9YdfxRPxn36U9Cx3x2zTaCRL/D2eWReI+ojWk83IWvx269XbHTD8M2VmbKnO8Mz2H97X3AQu8f9L65H3XFdA2wXHtNksy+Vxz5foX/rVmWmNfL117xD6xn+G+5e9opbcs9n1EOMviOeF+LraePtjvwqZSX0PPRj4nPr/EvWyWYn/uuB+ablkvWhs8E3zXO7vDtGNUY83sQt8uSZ996+2KP9r7OeGemP9t0Ji4jz6q9Kx5cl9HOCjF4L30h6NPUDsvuiyuDWF/TmfcBfdCxe5j2nvtjWPg3u1aNq/CvXAZsew+bMR1lBdlSWYWC/v7xD1n1/scxzNk9iVvSN1d1Jm7vf8dKGEM3FOXmotsXuMZ7Rn4QqXANeTrIP4dEmVtznZN5zZiPztrl9qfopy60V73EvaxF5H/JGL5gUif9SmDjMuxT9HXMWRG3M/lvdXY9p66quF+DF26DN9fop2nr+Vl254jvd2haepG/crsQl+50nXfervij7hnfg4+PnEP3360cy31qbkYY15b5sexL1sa8c59o7a3tLQzBo90w/6NoR/JG6NvU8jIcD8Hm9/X3sNVuHnvqftPxneb0jQXY8yria0mHfuO+bHwVW28x0PpZqx+SV6PLuyUNcM9y/aN/Qz3D0EzV0F+ty+M81vTzf3P5R6hM7G+0+M7AM2F3vH1eceN6oNDPA/obBDPBYMbGKGidEPcn4J/L9yU4rG+ke47NRnuJcOfCd8e697fy3g29rnl/Gbfd/j3UNm3Ck9hY/F36mOundJvKWvcU8aumzH2Q8mbss/byCY2eEfuGGFa2BnrLqVvH1+wPqkPsvcR97zzif1Xns94Tshwz/ezsv3CMr8N0fkue/f0OuCea0aUrZ2+YyU/MV/6LeUh8vrWEU45rlPAffYNtpc9iHneVyC+gdtLzHofNuVcm7fg3b/tjml+k837RfoY8f5dGG6Js/NpXDtcQ333AX4/tM+7zFPDfddcj7H2HbN90rLrtNVXQdc2lf1vDITvj/cQ7HPcNf7W59ojxN+yD/g3oNxn+ug6+zvBt0PG0OA6OQX/vvZekrZxn2cvx/3Q+czqcY71jYFw6nGXTrRnZLbf5WT7gPyp96EPm35c+kxcN31wL93In+PeR/vwTsghPQLqExz3ffpRakPySs/3XT7GGKcawwsQzPnkN9x+H7lte5oTx6jSxHzLfbruaKLPVFtPaoPrhXr3frS2q7ET934u4763zd/teV/GwITkqb9zi8cY45RjIvbfDRrz7+/l5+s+0eMWzPt4Nb/CdIx5do5lzFPv3o9Su/Rn6L/wO+x7N8TvtN3e9/HxvO+e9nGMgQnJ8zbmlB5jjFOPh9iXPePd/b7uVrNxOnZ9/WRp/2anVe/Et+6zvH3hPnvmfK1p4lRr9BT8+0z/X4eyvgH6ZqvSdsjHM63/vfwOm966KflGXBMl+65G3gGemq8+Be61L2WYUL9a40Ow9/wb0w+C/H5B5y/G/reKY/rZrTpc+G7XQB/cl+bV59j/pvVUcC+tco1m5zL9rSLv0ulnzwn7d6I//q55Tn2TXqeIiXu+k2vxc2R7ac/ly8i2M473UqeIe9eH0sK97sz0zYvjzdP0v98TSH55LK/ls+9wvB2m9V0O+8b3srFvpXXgsh/F4nHbxzTvGbO/6eXZkudK2lDy7Ct02Xv3k4T7zKZpjj0+Ff9efo704zpg+n7g4g0g4or4qlHJBskv74OTjU27pU3ca96SZ1/YZqlPvg64Hh8CXQP574W9EWOLY+6yedRV7X4+rqOu97e/Ann8vcorIAWVxXI+78K9ZDAuzSvfGcRxM981dpddSqvN0vN9l/sY492E300T+/p+gWtAOOP9utKKW/belnFrbrM21FaM/U7b18i96LN/c6F5ifOuPd/1kvWV9cUbZWT52vtb3lX+GohjeRti4pyksljOZw+DWP7rG17VifE9GLf77lnfYlnX2DN9xDLpN5bPJV8bY+nbca0Bx7/jbWzcR2wPyfM3K3ysnBe+K+Ldit8vCgPOm82V5lX8LXEJ+1rfQ8bVVYfjLtn1Up+7xp7pI5ZJP7F8LvmuMfrdm9t/6kz+T9T9LnDv6yy2r7x4aOvpy3Cs8um4t+kbjLi+uR667hk1ryXslMqjb8QzgnCv/rL/vldpPK0x7x/EO+Q3ak7Jv38S+uddZi3EuebdQDzzRn+iJq/rGX1w31M0l4ojNkp+vua+tsZ9fXdhnv2Ouog4b7Gx1B/7JNxrXFlcGht5fb0wzzmQT5qdXaJ/Fvta0xPH3hKknxbeffD0GaPG4nMs3AuD0Z/YZkxsT/L7YMHnnfOvue8zVu+3/y2Kzqt9fWbXmadbcZ+Nv1TGOYjY9ja70kP15DoTVrxsTuk+Y9RYXG8Rl1PiHmvrtjN0Nvey795PpqOPQQx33bO0/jZvbKs1Pybu5d+Uxt+nT8Ko/ELlGbeUCSteb07pLizcAWycgf4XpLG4/hz37kePMUa25/IzjGdlfead4y9hP2KefomPfYx0X9z72hfOow76jD8bQx9bWJpnYaX0fN/lcdyc22wt0DZme7vjUvoeQ2/UC3WXnZ2jryv/1n2tOK6Ydz+gz3ijnG3zwj3GcPMsGnHcknffTn7dkL7R12efPkT9B3D+MfIf25Rlvp98QMdKEDGb7BDdeJ2pcc+2vI0WDGj9eT+Zjue3+HwfeeG+Ni6t6xoPx5ztR1jfvfeokh3IcN2ls9kAPXSkq998XtMdMSlbJbyNae/Zvt4X6I6iK97G3mX6qI0/4+9T5rjXflXDd+mZdN/Sdrb+ff/LxpvV6WqLdeYauvre9dxtsXQ/Nu67+nDIzx33JUyXymVv+Fy635cufN14H+aK+6VfiwYWDSwaWDSwaGDRwKKBRQOLBhYNHI8G/vvOs9/46YZ+jJj0k0JefIz71psb//9gDKCvYSyXhDF/DWO/JI0/63PUUcZD/bTw1dqpPdM8TNlGrf2WZ+wjdXw8K+U4RvJfuH8FrY9jNPMcBXW8hHlpYMH99POx4H56HfdtYcF9X431558z7uEjnsFfO4M/dsZ0LQ9f9pKPcY0vypkjP3zPM9AafVtj7GvoYI1+X5Lrw9MaVxx75CnpMvJ53tNd8ofy7rIe55w6XsKigUUDiwYWDSwaWDSwaGDRwKKBRQOLBqbWwP8BCeG8qA==\\\",\\\"encoding\\\":\\\"base64\\\",\\\"height\\\":109,\\\"id\\\":3,\\\"name\\\":\\\"map\\\",\\\"opacity\\\":1,\\\"type\\\":\\\"tilelayer\\\",\\\"visible\\\":true,\\\"width\\\":190,\\\"x\\\":0,\\\"y\\\":0},{\\\"compression\\\":\\\"zlib\\\",\\\"data\\\":\\\"eAHt3U1OAjEUAODqKVx5ADFGNx5A2OhC3Ys7489elwaPbkkUVpAZQpl23jfJBCJD5/V7D9I0pabkIECAAAECBAgQIECAAAECBAgQIEBgDAKvRym95dNBIJLAItf8j7qPlHJ9DSLwcJzSYz4d5QQuc9NX5ZrX8g4C77nmP9T9DnLd33KbL73rfrkrCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAJwHrNzsxuWhkAtZvjiyhukOAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBCoWOMmxLU8HAQIp2ZtJFbQssOu+V0PvzTTN+0LN7A3VcukNGnur+17Nc80/q/tBa6e1m/+P2bs+ttY/8RIgQIAAAQIECBAgQIAAAQIECBAgQIAAgbEK2DdnrJnVr20C9s3ZpuM1AgQIEKhZYOL/9tacHrEVEpip+0KymiVAgMDwAvfWKg+fhEoiMEdZSSKEcVABc5QH5XYzAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAlUL+J1d1ekRXCEBv7MrBKtZAgQIECBQgcCpPUUqyIIQSgi82BOtBKs2CRAgQIAAAQIECBAgQIAAAQKDCVybyxzM3o0PI7Cc0/w2r7kXbGt79sKokcYErO1pLGF/4frebzNvoiZQQuDMOLAEa3VtWsewTslNrvmpul+DeBZC4CnX/Fzdh8j1pk5GHP9/5pr/ClD3F5uSHvTvxjxBE5+7PQnUdXPQgZKtqysBc9ArinBPuox1zkeiEnHMPpLU6UZPgb5jdp+NnsAub1Kg7+eiyU4KOryA7/PwJQCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ6CHwC0xVHZU=\\\",\\\"encoding\\\":\\\"base64\\\",\\\"height\\\":109,\\\"id\\\":2,\\\"name\\\":\\\"foreground\\\",\\\"opacity\\\":1,\\\"type\\\":\\\"tilelayer\\\",\\\"visible\\\":true,\\\"width\\\":190,\\\"x\\\":0,\\\"y\\\":0},{\\\"draworder\\\":\\\"topdown\\\",\\\"id\\\":7,\\\"name\\\":\\\"objects\\\",\\\"objects\\\":[{\\\"height\\\":0,\\\"id\\\":182,\\\"name\\\":\\\"exitportal\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":156,\\\"y\\\":1928},{\\\"height\\\":0,\\\"id\\\":133,\\\"name\\\":\\\"riddlestone\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":0},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":0}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":1980,\\\"y\\\":1742},{\\\"height\\\":0,\\\"id\\\":134,\\\"name\\\":\\\"riddlestone\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":1},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":0}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":2004,\\\"y\\\":1741},{\\\"height\\\":0,\\\"id\\\":135,\\\"name\\\":\\\"riddlestone\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":2},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":0}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":2028,\\\"y\\\":1741},{\\\"height\\\":0,\\\"id\\\":136,\\\"name\\\":\\\"riddlestone\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":0},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":1}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":1980,\\\"y\\\":1718},{\\\"height\\\":0,\\\"id\\\":137,\\\"name\\\":\\\"riddlestone\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":1},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":1}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":2004,\\\"y\\\":1717},{\\\"height\\\":0,\\\"id\\\":138,\\\"name\\\":\\\"riddlestone\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":2},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":1}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":2028,\\\"y\\\":1717},{\\\"height\\\":0,\\\"id\\\":139,\\\"name\\\":\\\"riddlestone\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":0},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":2}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":1980,\\\"y\\\":1694},{\\\"height\\\":0,\\\"id\\\":140,\\\"name\\\":\\\"riddlestone\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":1},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":2}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":2004,\\\"y\\\":1693},{\\\"height\\\":0,\\\"id\\\":141,\\\"name\\\":\\\"riddlestone\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":2},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":2}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":2028,\\\"y\\\":1693},{\\\"height\\\":0,\\\"id\\\":142,\\\"name\\\":\\\"riddlestone\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":0},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":3}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":1980,\\\"y\\\":1670},{\\\"height\\\":0,\\\"id\\\":143,\\\"name\\\":\\\"riddlestone\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":1},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":3}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":2004,\\\"y\\\":1669},{\\\"height\\\":0,\\\"id\\\":144,\\\"name\\\":\\\"riddlestone\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":2},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":3}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":2028,\\\"y\\\":1669},{\\\"height\\\":0,\\\"id\\\":145,\\\"name\\\":\\\"riddlestone\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":0},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":4}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":1980,\\\"y\\\":1646},{\\\"height\\\":0,\\\"id\\\":146,\\\"name\\\":\\\"riddlestone\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":1},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":4}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":2004,\\\"y\\\":1645},{\\\"height\\\":0,\\\"id\\\":147,\\\"name\\\":\\\"riddlestone\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":2},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":4}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":2028,\\\"y\\\":1645},{\\\"height\\\":0,\\\"id\\\":85,\\\"name\\\":\\\"sign\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"Use “jump” to overcome obstacles.:::The longer you press, the higher the jump.\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":3432,\\\"y\\\":563},{\\\"height\\\":0,\\\"id\\\":86,\\\"name\\\":\\\"sign\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"Walk over items to carry them.:::You cannot interact with doors or other entities when carrying items.:::Press “throw” to throw your current item.\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":3492,\\\"y\\\":443},{\\\"height\\\":0,\\\"id\\\":88,\\\"name\\\":\\\"sign\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"↓ A magical journey awaits you beneath the clouds.\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":1140,\\\"y\\\":370},{\\\"height\\\":0,\\\"id\\\":89,\\\"name\\\":\\\"sign\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"Be careful!\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":120,\\\"y\\\":250},{\\\"height\\\":0,\\\"id\\\":102,\\\"name\\\":\\\"sign\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"↑ Mountain\\\\n← Temple\\\\n→ Sacred Forest\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":1392,\\\"y\\\":1999},{\\\"height\\\":0,\\\"id\\\":103,\\\"name\\\":\\\"sign\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"Landmark: The Broken Bridge\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":1668,\\\"y\\\":1977},{\\\"height\\\":0,\\\"id\\\":104,\\\"name\\\":\\\"sign\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"↑ Entrance to mountain hiking path.:::Good jumping skills required.\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":2064,\\\"y\\\":2000},{\\\"height\\\":0,\\\"id\\\":109,\\\"name\\\":\\\"sign\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"◊ Popular bird feeding spot\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":2016,\\\"y\\\":1235},{\\\"height\\\":0,\\\"id\\\":110,\\\"name\\\":\\\"sign\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"Bouncy mushrooms ahead →\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":3876,\\\"y\\\":534},{\\\"height\\\":0,\\\"id\\\":111,\\\"name\\\":\\\"sign\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"↑ Mountain trial\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":1788,\\\"y\\\":1714},{\\\"height\\\":0,\\\"id\\\":161,\\\"name\\\":\\\"sign\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"You can check the controls in the pause menu at any time.\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":3300,\\\"y\\\":439},{\\\"height\\\":0,\\\"id\\\":112,\\\"name\\\":\\\"sign\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"◊ Popular seed throwing spot\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":2532,\\\"y\\\":1861},{\\\"height\\\":0,\\\"id\\\":82,\\\"name\\\":\\\"sign\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"Hold “down” to fall through platforms.\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":3336,\\\"y\\\":490},{\\\"height\\\":0,\\\"id\\\":148,\\\"name\\\":\\\"sign\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"◊ Advanced seed throwing spot\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":1573,\\\"y\\\":1735},{\\\"height\\\":0,\\\"id\\\":4,\\\"name\\\":\\\"stone\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":2090,\\\"y\\\":672},{\\\"height\\\":0,\\\"id\\\":2,\\\"name\\\":\\\"fire\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":1212,\\\"y\\\":1968},{\\\"height\\\":0,\\\"id\\\":3,\\\"name\\\":\\\"tree\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":3048,\\\"y\\\":1944},{\\\"height\\\":0,\\\"id\\\":9,\\\"name\\\":\\\"flameboy\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":156,\\\"y\\\":1930},{\\\"height\\\":0,\\\"id\\\":13,\\\"name\\\":\\\"wing\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":3428,\\\"y\\\":850},{\\\"height\\\":0,\\\"id\\\":43,\\\"name\\\":\\\"campfire\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":3480,\\\"y\\\":192},{\\\"height\\\":0,\\\"id\\\":42,\\\"name\\\":\\\"caveman\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":3499,\\\"y\\\":177},{\\\"height\\\":0,\\\"id\\\":17,\\\"name\\\":\\\"river\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"pointer\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":864,\\\"y\\\":1945},{\\\"height\\\":0,\\\"id\\\":18,\\\"name\\\":\\\"forest\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"pointer\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":2907,\\\"y\\\":1890},{\\\"height\\\":0,\\\"id\\\":19,\\\"name\\\":\\\"mountain\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"pointer\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":1932,\\\"y\\\":579},{\\\"height\\\":0,\\\"id\\\":20,\\\"name\\\":\\\"seedposition\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"pointer\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":1932,\\\"y\\\":562},{\\\"height\\\":0,\\\"id\\\":24,\\\"name\\\":\\\"stone_floating_position\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"pointer\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":804,\\\"y\\\":2018},{\\\"height\\\":0,\\\"id\\\":25,\\\"name\\\":\\\"recover_floating_position\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"pointer\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":929,\\\"y\\\":2010},{\\\"height\\\":131,\\\"id\\\":26,\\\"name\\\":\\\"bird_nest_left\\\",\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":5,\\\"x\\\":163,\\\"y\\\":1011},{\\\"height\\\":0,\\\"id\\\":27,\\\"name\\\":\\\"rain_spawn_position\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"pointer\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":1933,\\\"y\\\":288},{\\\"height\\\":42,\\\"id\\\":36,\\\"name\\\":\\\"door_1\\\",\\\"properties\\\":[{\\\"name\\\":\\\"bgm\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"cave\\\"},{\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"door_2\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"gate\\\",\\\"visible\\\":true,\\\"width\\\":24,\\\"x\\\":204,\\\"y\\\":2166},{\\\"height\\\":0,\\\"id\\\":55,\\\"name\\\":\\\"movingplatform\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"direction\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"up\\\"},{\\\"name\\\":\\\"distance\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":200},{\\\"name\\\":\\\"velocity\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":44}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":1585,\\\"y\\\":1172},{\\\"height\\\":0,\\\"id\\\":56,\\\"name\\\":\\\"movingplatform\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"direction\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"up\\\"},{\\\"name\\\":\\\"distance\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":100},{\\\"name\\\":\\\"velocity\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":44}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":2364,\\\"y\\\":842},{\\\"height\\\":44,\\\"id\\\":37,\\\"name\\\":\\\"door_2\\\",\\\"properties\\\":[{\\\"name\\\":\\\"bgm\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"overworld\\\"},{\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"door_1\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"gate\\\",\\\"visible\\\":true,\\\"width\\\":24,\\\"x\\\":3252,\\\"y\\\":148},{\\\"height\\\":288,\\\"id\\\":39,\\\"name\\\":\\\"cave1-bounds\\\",\\\"rotation\\\":0,\\\"type\\\":\\\"bounds\\\",\\\"visible\\\":true,\\\"width\\\":480,\\\"x\\\":3168,\\\"y\\\":0},{\\\"height\\\":288,\\\"id\\\":44,\\\"name\\\":\\\"startingcave-bounds\\\",\\\"rotation\\\":0,\\\"type\\\":\\\"bounds\\\",\\\"visible\\\":true,\\\"width\\\":480,\\\"x\\\":3168,\\\"y\\\":336},{\\\"height\\\":0,\\\"id\\\":60,\\\"name\\\":\\\"shadowpresence\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":1862,\\\"y\\\":2136},{\\\"height\\\":44,\\\"id\\\":45,\\\"name\\\":\\\"startingdoor_1\\\",\\\"properties\\\":[{\\\"name\\\":\\\"bgm\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"overworld\\\"},{\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"startingdoor_2\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"gate\\\",\\\"visible\\\":true,\\\"width\\\":24,\\\"x\\\":3540,\\\"y\\\":484},{\\\"height\\\":0,\\\"id\\\":80,\\\"name\\\":\\\"stonedisciple\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":3480,\\\"y\\\":2204},{\\\"height\\\":44,\\\"id\\\":46,\\\"name\\\":\\\"startingdoor_2\\\",\\\"properties\\\":[{\\\"name\\\":\\\"bgm\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"cave\\\"},{\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"startingdoor_1\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"gate\\\",\\\"visible\\\":true,\\\"width\\\":24,\\\"x\\\":60,\\\"y\\\":220},{\\\"height\\\":42,\\\"id\\\":48,\\\"name\\\":\\\"forrest_door_left_1\\\",\\\"properties\\\":[{\\\"name\\\":\\\"bgm\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"cave\\\"},{\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"forrest_door_left_2\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"gate\\\",\\\"visible\\\":true,\\\"width\\\":24,\\\"x\\\":2604,\\\"y\\\":1998},{\\\"height\\\":42,\\\"id\\\":49,\\\"name\\\":\\\"forrest_door_right_1\\\",\\\"properties\\\":[{\\\"name\\\":\\\"bgm\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"cave\\\"},{\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"forrest_door_right_2\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"gate\\\",\\\"visible\\\":true,\\\"width\\\":24,\\\"x\\\":2724,\\\"y\\\":1998},{\\\"height\\\":624,\\\"id\\\":50,\\\"name\\\":\\\"forrest-cave-bounds\\\",\\\"rotation\\\":0,\\\"type\\\":\\\"bounds\\\",\\\"visible\\\":true,\\\"width\\\":624,\\\"x\\\":3696,\\\"y\\\":0},{\\\"height\\\":42,\\\"id\\\":51,\\\"name\\\":\\\"forrest_door_left_2\\\",\\\"properties\\\":[{\\\"name\\\":\\\"bgm\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"overworld\\\"},{\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"forrest_door_left_1\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"gate\\\",\\\"visible\\\":true,\\\"width\\\":24,\\\"x\\\":3804,\\\"y\\\":510},{\\\"height\\\":42,\\\"id\\\":52,\\\"name\\\":\\\"forrest_door_right_2\\\",\\\"properties\\\":[{\\\"name\\\":\\\"bgm\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"overworld\\\"},{\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"forrest_door_right_1\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"gate\\\",\\\"visible\\\":true,\\\"width\\\":24,\\\"x\\\":4188,\\\"y\\\":510},{\\\"height\\\":42,\\\"id\\\":53,\\\"name\\\":\\\"montain_door_floor_1\\\",\\\"properties\\\":[{\\\"name\\\":\\\"bgm\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"riddle\\\"},{\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"montain_door_floor_2\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"gate\\\",\\\"visible\\\":true,\\\"width\\\":24,\\\"x\\\":2100,\\\"y\\\":1974},{\\\"height\\\":42,\\\"id\\\":54,\\\"name\\\":\\\"montain_door_top_1\\\",\\\"properties\\\":[{\\\"name\\\":\\\"bgm\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"riddle\\\"},{\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"montain_door_top_2\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"gate\\\",\\\"visible\\\":true,\\\"width\\\":24,\\\"x\\\":2220,\\\"y\\\":1782},{\\\"height\\\":264,\\\"id\\\":57,\\\"name\\\":\\\"winghouse-bounds\\\",\\\"rotation\\\":0,\\\"type\\\":\\\"bounds\\\",\\\"visible\\\":true,\\\"width\\\":480,\\\"x\\\":3168,\\\"y\\\":672},{\\\"height\\\":40,\\\"id\\\":58,\\\"name\\\":\\\"wing_house_door_1\\\",\\\"properties\\\":[{\\\"name\\\":\\\"bgm\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"radio\\\"},{\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"wing_house_door_2\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"gate\\\",\\\"visible\\\":true,\\\"width\\\":24,\\\"x\\\":2197,\\\"y\\\":224},{\\\"height\\\":40,\\\"id\\\":59,\\\"name\\\":\\\"wing_house_door_2\\\",\\\"properties\\\":[{\\\"name\\\":\\\"bgm\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"overworld\\\"},{\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"wing_house_door_1\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"gate\\\",\\\"visible\\\":true,\\\"width\\\":24,\\\"x\\\":3348,\\\"y\\\":824},{\\\"height\\\":336,\\\"id\\\":61,\\\"name\\\":\\\"mountain-foot-cave-bounds\\\",\\\"rotation\\\":0,\\\"type\\\":\\\"bounds\\\",\\\"visible\\\":true,\\\"width\\\":480,\\\"x\\\":3168,\\\"y\\\":984},{\\\"height\\\":42,\\\"id\\\":62,\\\"name\\\":\\\"montain_door_floor_2\\\",\\\"properties\\\":[{\\\"name\\\":\\\"bgm\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"overworld\\\"},{\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"montain_door_floor_1\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"gate\\\",\\\"visible\\\":true,\\\"width\\\":24,\\\"x\\\":3276,\\\"y\\\":1230},{\\\"height\\\":42,\\\"id\\\":63,\\\"name\\\":\\\"montain_door_top_2\\\",\\\"properties\\\":[{\\\"name\\\":\\\"bgm\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"overworld\\\"},{\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"montain_door_top_1\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"gate\\\",\\\"visible\\\":true,\\\"width\\\":24,\\\"x\\\":3492,\\\"y\\\":1063},{\\\"height\\\":960,\\\"id\\\":64,\\\"name\\\":\\\"mountain-foot-cave-bounds\\\",\\\"rotation\\\":0,\\\"type\\\":\\\"bounds\\\",\\\"visible\\\":true,\\\"width\\\":480,\\\"x\\\":3168,\\\"y\\\":1344},{\\\"height\\\":42,\\\"id\\\":65,\\\"name\\\":\\\"montain_riddlecave_bottom_1\\\",\\\"properties\\\":[{\\\"name\\\":\\\"bgm\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"riddle\\\"},{\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"montain_riddlecave_bottom_2\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"gate\\\",\\\"visible\\\":true,\\\"width\\\":24,\\\"x\\\":1741,\\\"y\\\":1686},{\\\"height\\\":42,\\\"id\\\":66,\\\"name\\\":\\\"montain_riddlecave_bottom_2\\\",\\\"properties\\\":[{\\\"name\\\":\\\"bgm\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"overworld\\\"},{\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"montain_riddlecave_bottom_1\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"gate\\\",\\\"visible\\\":true,\\\"width\\\":24,\\\"x\\\":3276,\\\"y\\\":2190},{\\\"height\\\":42,\\\"id\\\":77,\\\"name\\\":\\\"montain_riddlecave_top_1\\\",\\\"properties\\\":[{\\\"name\\\":\\\"bgm\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"riddle\\\"},{\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"montain_riddlecave_top_2\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"gate\\\",\\\"visible\\\":true,\\\"width\\\":24,\\\"x\\\":1933,\\\"y\\\":1350},{\\\"height\\\":42,\\\"id\\\":78,\\\"name\\\":\\\"montain_riddlecave_top_2\\\",\\\"properties\\\":[{\\\"name\\\":\\\"bgm\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"overworld\\\"},{\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"montain_riddlecave_top_1\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"gate\\\",\\\"visible\\\":true,\\\"width\\\":24,\\\"x\\\":3540,\\\"y\\\":1397},{\\\"height\\\":505,\\\"id\\\":79,\\\"name\\\":\\\"no_emit_trigger\\\",\\\"properties\\\":[{\\\"name\\\":\\\"disableParticles\\\",\\\"type\\\":\\\"bool\\\",\\\"value\\\":true}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":384,\\\"x\\\":3216,\\\"y\\\":1608},{\\\"height\\\":45,\\\"id\\\":81,\\\"name\\\":\\\"finish_mountain_riddle\\\",\\\"properties\\\":[{\\\"name\\\":\\\"setDialogEntity\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"stonedisciple\\\"},{\\\"name\\\":\\\"setDialogValue\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"stonedisciple2\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":48,\\\"x\\\":3384,\\\"y\\\":1443},{\\\"height\\\":0,\\\"id\\\":87,\\\"name\\\":\\\"skull\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":3528,\\\"y\\\":432},{\\\"height\\\":0,\\\"id\\\":97,\\\"name\\\":\\\"wall\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"identifier\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"wall0\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":4260,\\\"y\\\":1464},{\\\"height\\\":0,\\\"id\\\":98,\\\"name\\\":\\\"wall\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"identifier\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"wall1\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":4452,\\\"y\\\":1464},{\\\"height\\\":912,\\\"id\\\":90,\\\"name\\\":\\\"inferno-bounds\\\",\\\"rotation\\\":0,\\\"type\\\":\\\"bounds\\\",\\\"visible\\\":true,\\\"width\\\":912,\\\"x\\\":3648,\\\"y\\\":624},{\\\"height\\\":0,\\\"id\\\":91,\\\"name\\\":\\\"boss_spawn\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"pointer\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":4104,\\\"y\\\":1416},{\\\"height\\\":0,\\\"id\\\":92,\\\"name\\\":\\\"bosscloud\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"pointer\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":4089,\\\"y\\\":936},{\\\"height\\\":0,\\\"id\\\":93,\\\"name\\\":\\\"bosscloud\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"pointer\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":4056,\\\"y\\\":1293},{\\\"height\\\":0,\\\"id\\\":94,\\\"name\\\":\\\"bosscloud\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"pointer\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":4176,\\\"y\\\":1105},{\\\"height\\\":2304,\\\"id\\\":95,\\\"name\\\":\\\"overworld-bounds\\\",\\\"rotation\\\":0,\\\"type\\\":\\\"bounds\\\",\\\"visible\\\":true,\\\"width\\\":3168,\\\"x\\\":0,\\\"y\\\":0},{\\\"height\\\":42,\\\"id\\\":100,\\\"name\\\":\\\"boss_door2\\\",\\\"properties\\\":[{\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"boss_door1\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"gate\\\",\\\"visible\\\":true,\\\"width\\\":24,\\\"x\\\":3684,\\\"y\\\":798},{\\\"height\\\":42,\\\"id\\\":101,\\\"name\\\":\\\"boss_door1\\\",\\\"properties\\\":[{\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"boss_door2\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"gate\\\",\\\"visible\\\":true,\\\"width\\\":24,\\\"x\\\":4451,\\\"y\\\":822},{\\\"height\\\":0,\\\"id\\\":105,\\\"name\\\":\\\"chicken\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":3504,\\\"y\\\":844},{\\\"height\\\":0,\\\"id\\\":106,\\\"name\\\":\\\"bird\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":168,\\\"y\\\":1131},{\\\"height\\\":24,\\\"id\\\":107,\\\"name\\\":\\\"raincloud_sky\\\",\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":72,\\\"x\\\":1897,\\\"y\\\":212},{\\\"height\\\":119,\\\"id\\\":108,\\\"name\\\":\\\"bird_nest_right\\\",\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":33,\\\"x\\\":2132,\\\"y\\\":1067},{\\\"height\\\":0,\\\"id\\\":113,\\\"name\\\":\\\"superthrow\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":2592,\\\"y\\\":1863},{\\\"height\\\":3,\\\"id\\\":114,\\\"name\\\":\\\"mountaingate\\\",\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":0},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":0}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":48,\\\"x\\\":3264,\\\"y\\\":2090},{\\\"height\\\":3,\\\"id\\\":115,\\\"name\\\":\\\"mountaingate\\\",\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":1},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":0}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":48,\\\"x\\\":3384,\\\"y\\\":2090},{\\\"height\\\":3,\\\"id\\\":116,\\\"name\\\":\\\"mountaingate\\\",\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":2},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":0}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":48,\\\"x\\\":3504,\\\"y\\\":2090},{\\\"height\\\":3,\\\"id\\\":117,\\\"name\\\":\\\"mountaingate\\\",\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":0},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":1}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":48,\\\"x\\\":3264,\\\"y\\\":1994},{\\\"height\\\":3,\\\"id\\\":118,\\\"name\\\":\\\"mountaingate\\\",\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":1},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":1}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":48,\\\"x\\\":3384,\\\"y\\\":1994},{\\\"height\\\":3,\\\"id\\\":119,\\\"name\\\":\\\"mountaingate\\\",\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":2},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":1}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":48,\\\"x\\\":3504,\\\"y\\\":1994},{\\\"height\\\":3,\\\"id\\\":120,\\\"name\\\":\\\"mountaingate\\\",\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":0},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":2}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":48,\\\"x\\\":3264,\\\"y\\\":1898},{\\\"height\\\":3,\\\"id\\\":121,\\\"name\\\":\\\"mountaingate\\\",\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":1},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":2}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":48,\\\"x\\\":3384,\\\"y\\\":1898},{\\\"height\\\":3,\\\"id\\\":122,\\\"name\\\":\\\"mountaingate\\\",\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":2},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":2}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":48,\\\"x\\\":3504,\\\"y\\\":1898},{\\\"height\\\":3,\\\"id\\\":123,\\\"name\\\":\\\"mountaingate\\\",\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":0},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":3}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":48,\\\"x\\\":3264,\\\"y\\\":1802},{\\\"height\\\":3,\\\"id\\\":124,\\\"name\\\":\\\"mountaingate\\\",\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":1},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":3}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":48,\\\"x\\\":3384,\\\"y\\\":1802},{\\\"height\\\":3,\\\"id\\\":125,\\\"name\\\":\\\"mountaingate\\\",\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":2},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":3}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":48,\\\"x\\\":3504,\\\"y\\\":1802},{\\\"height\\\":3,\\\"id\\\":126,\\\"name\\\":\\\"mountaingate\\\",\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":0},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":4}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":48,\\\"x\\\":3264,\\\"y\\\":1706},{\\\"height\\\":3,\\\"id\\\":127,\\\"name\\\":\\\"mountaingate\\\",\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":1},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":4}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":48,\\\"x\\\":3384,\\\"y\\\":1706},{\\\"height\\\":3,\\\"id\\\":128,\\\"name\\\":\\\"mountaingate\\\",\\\"properties\\\":[{\\\"name\\\":\\\"col\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":2},{\\\"name\\\":\\\"row\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":4}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":48,\\\"x\\\":3504,\\\"y\\\":1706},{\\\"height\\\":5,\\\"id\\\":129,\\\"name\\\":\\\"reset_mountain\\\",\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":384,\\\"x\\\":3216,\\\"y\\\":2140},{\\\"height\\\":1,\\\"id\\\":130,\\\"name\\\":\\\"teleporter\\\",\\\"properties\\\":[{\\\"name\\\":\\\"teleportY\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":288}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":384,\\\"x\\\":3216,\\\"y\\\":1705},{\\\"height\\\":1,\\\"id\\\":131,\\\"name\\\":\\\"teleporter\\\",\\\"properties\\\":[{\\\"name\\\":\\\"teleportY\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":192}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":384,\\\"x\\\":3216,\\\"y\\\":1801},{\\\"height\\\":1,\\\"id\\\":132,\\\"name\\\":\\\"teleporter\\\",\\\"properties\\\":[{\\\"name\\\":\\\"teleportY\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":96}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":384,\\\"x\\\":3216,\\\"y\\\":1897},{\\\"height\\\":24,\\\"id\\\":151,\\\"name\\\":\\\"readable\\\",\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"A strange device…:::There is no manual available.\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":24,\\\"x\\\":3240,\\\"y\\\":417},{\\\"height\\\":24,\\\"id\\\":152,\\\"name\\\":\\\"readable\\\",\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"A little garden. Cute.\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":24,\\\"x\\\":1920,\\\"y\\\":542},{\\\"height\\\":46,\\\"id\\\":153,\\\"name\\\":\\\"readable\\\",\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"A collection of books regarding non euclidean architecture.:::Just thinking about the contents drives me mad.\\\"},{\\\"name\\\":\\\"duration\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":4}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":30,\\\"x\\\":3558,\\\"y\\\":2162},{\\\"height\\\":0,\\\"id\\\":154,\\\"name\\\":\\\"portal\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":3252,\\\"y\\\":439},{\\\"height\\\":0,\\\"id\\\":156,\\\"name\\\":\\\"mimic\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":3288,\\\"y\\\":857},{\\\"height\\\":0,\\\"id\\\":160,\\\"name\\\":\\\"bone\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":3564,\\\"y\\\":438},{\\\"height\\\":24,\\\"id\\\":157,\\\"name\\\":\\\"readable\\\",\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"A classic mailbox.:::It's welded shut.\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":14,\\\"x\\\":2141,\\\"y\\\":240},{\\\"height\\\":0,\\\"id\\\":158,\\\"name\\\":\\\"radio\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":3552,\\\"y\\\":748},{\\\"height\\\":11,\\\"id\\\":159,\\\"name\\\":\\\"readable\\\",\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"Just a regular old stereo…:::How disappointing.\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":30,\\\"x\\\":3537,\\\"y\\\":737},{\\\"height\\\":0,\\\"id\\\":47,\\\"name\\\":\\\"player\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":3252,\\\"y\\\":426},{\\\"height\\\":0,\\\"id\\\":162,\\\"name\\\":\\\"shiba\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":184,\\\"y\\\":1231},{\\\"height\\\":0,\\\"id\\\":163,\\\"name\\\":\\\"powershiba\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":2712,\\\"y\\\":249},{\\\"height\\\":24,\\\"id\\\":164,\\\"name\\\":\\\"shiba_action\\\",\\\"properties\\\":[{\\\"name\\\":\\\"velocity\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":1}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":5,\\\"x\\\":150,\\\"y\\\":1224},{\\\"height\\\":24,\\\"id\\\":165,\\\"name\\\":\\\"shiba_action\\\",\\\"properties\\\":[{\\\"name\\\":\\\"velocity\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":-1}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":5,\\\"x\\\":264,\\\"y\\\":1224},{\\\"height\\\":24,\\\"id\\\":166,\\\"name\\\":\\\"readable\\\",\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"A small dog house entrance.:::I don't fit since I'm not a dog.\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":3,\\\"x\\\":144,\\\"y\\\":1224},{\\\"height\\\":12,\\\"id\\\":167,\\\"name\\\":\\\"readable\\\",\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"Some kind of bird nest made out of twigs.:::Pretty normal.\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":22,\\\"x\\\":158,\\\"y\\\":1130},{\\\"height\\\":24,\\\"id\\\":168,\\\"name\\\":\\\"readable\\\",\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"This a great vantage point.:::I can see a large tree with a birds nest in the distance.\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":24,\\\"x\\\":1392,\\\"y\\\":1440},{\\\"height\\\":0,\\\"id\\\":170,\\\"name\\\":\\\"shiba_mountain_spawn\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"pointer\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":1950,\\\"y\\\":1235},{\\\"height\\\":0,\\\"id\\\":171,\\\"name\\\":\\\"powershiba_mountain_spawn\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"pointer\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":1979,\\\"y\\\":1234},{\\\"height\\\":0,\\\"id\\\":172,\\\"name\\\":\\\"friendship_player_position\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"pointer\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":1179,\\\"y\\\":1968},{\\\"height\\\":0,\\\"id\\\":173,\\\"name\\\":\\\"friendship_shiba_spawn\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"pointer\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":1477,\\\"y\\\":2010},{\\\"height\\\":47,\\\"id\\\":175,\\\"name\\\":\\\"shiba_stop\\\",\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":12,\\\"x\\\":1212,\\\"y\\\":1921},{\\\"height\\\":0,\\\"id\\\":176,\\\"name\\\":\\\"water_sound\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"intensity\\\",\\\"type\\\":\\\"float\\\",\\\"value\\\":0.5},{\\\"name\\\":\\\"sound\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"stream\\\"},{\\\"name\\\":\\\"volume\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":1}],\\\"rotation\\\":0,\\\"type\\\":\\\"sound\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":732,\\\"y\\\":1992},{\\\"height\\\":0,\\\"id\\\":177,\\\"name\\\":\\\"wind_sound\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"intensity\\\",\\\"type\\\":\\\"float\\\",\\\"value\\\":1},{\\\"name\\\":\\\"sound\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"wind\\\"},{\\\"name\\\":\\\"volume\\\",\\\"type\\\":\\\"float\\\",\\\"value\\\":0.6}],\\\"rotation\\\":0,\\\"type\\\":\\\"sound\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":2029,\\\"y\\\":933},{\\\"height\\\":0,\\\"id\\\":178,\\\"name\\\":\\\"sign\\\",\\\"point\\\":true,\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"There is currently no way to save your progress.:::A single run is pretty short so we hope that it isn't too much of a problem.::: Sorry for any resulting inconveniences!\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":3336,\\\"y\\\":563},{\\\"height\\\":0,\\\"id\\\":179,\\\"name\\\":\\\"player_reset_position\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"pointer\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":1261,\\\"y\\\":1573},{\\\"height\\\":24,\\\"id\\\":180,\\\"name\\\":\\\"flameboy_action\\\",\\\"properties\\\":[{\\\"name\\\":\\\"velocity\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":1}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":5,\\\"x\\\":342,\\\"y\\\":1968},{\\\"height\\\":24,\\\"id\\\":181,\\\"name\\\":\\\"flameboy_action\\\",\\\"properties\\\":[{\\\"name\\\":\\\"velocity\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":-1}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":5,\\\"x\\\":504,\\\"y\\\":1968},{\\\"height\\\":44,\\\"id\\\":183,\\\"name\\\":\\\"exitportaldoor_1\\\",\\\"properties\\\":[{\\\"name\\\":\\\"bgm\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"awake\\\"},{\\\"name\\\":\\\"disabled\\\",\\\"type\\\":\\\"bool\\\",\\\"value\\\":true},{\\\"name\\\":\\\"enterSound\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"portal\\\"},{\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"exitportaldoor_2\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"gate\\\",\\\"visible\\\":true,\\\"width\\\":24,\\\"x\\\":144,\\\"y\\\":1887},{\\\"height\\\":44,\\\"id\\\":184,\\\"name\\\":\\\"exitportaldoor_2\\\",\\\"properties\\\":[{\\\"name\\\":\\\"bgm\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"cave\\\"},{\\\"name\\\":\\\"disabled\\\",\\\"type\\\":\\\"bool\\\",\\\"value\\\":true},{\\\"name\\\":\\\"exitFadeTime\\\",\\\"type\\\":\\\"float\\\",\\\"value\\\":5},{\\\"name\\\":\\\"exitSleepTime\\\",\\\"type\\\":\\\"float\\\",\\\"value\\\":5},{\\\"name\\\":\\\"exitSound\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"empty\\\"},{\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"exitportaldoor_1\\\"}],\\\"rotation\\\":0,\\\"type\\\":\\\"gate\\\",\\\"visible\\\":true,\\\"width\\\":24,\\\"x\\\":3360,\\\"y\\\":2452},{\\\"height\\\":264,\\\"id\\\":185,\\\"name\\\":\\\"laboratory-bounds\\\",\\\"rotation\\\":0,\\\"type\\\":\\\"bounds\\\",\\\"visible\\\":true,\\\"width\\\":3648,\\\"x\\\":0,\\\"y\\\":2328},{\\\"height\\\":41,\\\"id\\\":186,\\\"name\\\":\\\"readable\\\",\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"This door is locked. It says '100'\\\"},{\\\"name\\\":\\\"duration\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":4}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":22,\\\"x\\\":2881,\\\"y\\\":2455},{\\\"height\\\":39,\\\"id\\\":187,\\\"name\\\":\\\"readable\\\",\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"I woke up in this strange capsule\\\"},{\\\"name\\\":\\\"duration\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":4}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":19,\\\"x\\\":3362,\\\"y\\\":2457},{\\\"height\\\":39,\\\"id\\\":188,\\\"name\\\":\\\"readable\\\",\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"Some capsules are still closed. I can see a humanoid shape through the glass\\\"},{\\\"name\\\":\\\"duration\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":4}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":19,\\\"x\\\":3266,\\\"y\\\":2456},{\\\"height\\\":39,\\\"id\\\":189,\\\"name\\\":\\\"readable\\\",\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"He seems to be dead for quite some time.\\\"},{\\\"name\\\":\\\"duration\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":4}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":19,\\\"x\\\":2762,\\\"y\\\":2457},{\\\"height\\\":41,\\\"id\\\":190,\\\"name\\\":\\\"readable\\\",\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"The is door is locked as well. It says '200'\\\"},{\\\"name\\\":\\\"duration\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":4}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":22,\\\"x\\\":2185,\\\"y\\\":2455},{\\\"height\\\":0,\\\"id\\\":191,\\\"name\\\":\\\"window\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"entity\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":1680,\\\"y\\\":2476},{\\\"height\\\":41,\\\"id\\\":194,\\\"name\\\":\\\"readable\\\",\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"The blinds are shut tight.\\\"},{\\\"name\\\":\\\"duration\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":4}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":23,\\\"x\\\":1740,\\\"y\\\":2455},{\\\"height\\\":41,\\\"id\\\":195,\\\"name\\\":\\\"readable\\\",\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"The blinds are shut tight.\\\"},{\\\"name\\\":\\\"duration\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":4}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":23,\\\"x\\\":1812,\\\"y\\\":2455},{\\\"height\\\":41,\\\"id\\\":196,\\\"name\\\":\\\"readable\\\",\\\"properties\\\":[{\\\"name\\\":\\\"content\\\",\\\"type\\\":\\\"string\\\",\\\"value\\\":\\\"The blinds are shut tight.\\\"},{\\\"name\\\":\\\"duration\\\",\\\"type\\\":\\\"int\\\",\\\"value\\\":4}],\\\"rotation\\\":0,\\\"type\\\":\\\"trigger\\\",\\\"visible\\\":true,\\\"width\\\":23,\\\"x\\\":1596,\\\"y\\\":2455},{\\\"height\\\":0,\\\"id\\\":197,\\\"name\\\":\\\"windowzoomtarget\\\",\\\"point\\\":true,\\\"rotation\\\":0,\\\"type\\\":\\\"pointer\\\",\\\"visible\\\":true,\\\"width\\\":0,\\\"x\\\":275,\\\"y\\\":2465}],\\\"opacity\\\":1,\\\"type\\\":\\\"objectgroup\\\",\\\"visible\\\":true,\\\"x\\\":0,\\\"y\\\":0}],\\\"nextlayerid\\\":8,\\\"nextobjectid\\\":198,\\\"orientation\\\":\\\"orthogonal\\\",\\\"renderorder\\\":\\\"left-down\\\",\\\"tiledversion\\\":\\\"1.4.1\\\",\\\"tileheight\\\":24,\\\"tilesets\\\":[{\\\"columns\\\":25,\\\"firstgid\\\":1,\\\"image\\\":\\\"tilemap.png\\\",\\\"imageheight\\\":816,\\\"imagewidth\\\":600,\\\"margin\\\":0,\\\"name\\\":\\\"tilemap\\\",\\\"spacing\\\":0,\\\"tilecount\\\":850,\\\"tileheight\\\":24,\\\"tilewidth\\\":24,\\\"transparentcolor\\\":\\\"#ff00ff\\\"}],\\\"tilewidth\\\":24,\\\"type\\\":\\\"map\\\",\\\"version\\\":1.4,\\\"width\\\":190}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hc3NldHMvbWFwcy9sZXZlbC5qc29uLmpzIiwic291cmNlcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./assets/maps/level.json\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/Animator.js":
|
|
/*!*************************!*\
|
|
!*** ./lib/Animator.js ***!
|
|
\*************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Animator = void 0;\nconst Renderer_1 = __webpack_require__(/*! ./Renderer */ \"./lib/Renderer.js\");\n/**\n * The Animator class can be used to orchestrate and draw aseprite animations of an entity\n */\nclass Animator {\n constructor(entity) {\n this.currentAnimation = {\n tag: \"\",\n start: 0,\n duration: 0,\n finished: false,\n };\n this.entity = entity;\n }\n assignSprite(sprite) {\n this.sprite = sprite;\n }\n /**\n * Updates the animation if all conditions are met regarding the currently playing animation.\n *\n * @param tag - The animation tag to draw.\n * @param config - Optional animation configuration.\n */\n updateAnimation(tag, config) {\n var _a;\n // Early out if animation tag is already set as current animation\n if (!this.sprite)\n return;\n // Animation Update Logic\n // If current animation has a fixed duration, check if it was reached.\n // If so, the animation is set to finished.\n if (!this.currentAnimation.finished && this.currentAnimation.duration > 0) {\n const animationTime = (this.entity.scene.gameTime * 1000) - this.currentAnimation.start;\n if (animationTime + (this.entity.scene.dt * 1000) >= this.currentAnimation.duration) {\n this.currentAnimation.finished = true;\n if ((_a = this.currentAnimation.config) === null || _a === void 0 ? void 0 : _a.callback) {\n this.currentAnimation.config.callback();\n }\n }\n }\n // Leave function if the provided animation tag is the one that is already playing since\n // there is no need to update the current animation settings.\n if (this.currentAnimation.tag === tag)\n return;\n // Update Animation with new payload\n this.currentAnimation.tag = tag;\n this.currentAnimation.start = this.entity.scene.gameTime * 1000;\n this.currentAnimation.config = config;\n this.currentAnimation.finished = false;\n this.currentAnimation.duration = this.sprite.getAnimationDurationByTag(tag) || 0;\n }\n /**\n * Method to call from draw method of the entity to draw a specific animation by tag.\n *\n * @param tag - The animation tag to draw.\n * @param ctx - The canvas context to draw to.\n * @param config - Optional animation configuration.\n */\n play(tag, direction, config) {\n this.currentAnimation.direction = direction;\n this.updateAnimation(tag, config);\n let animationTime = (this.entity.scene.gameTime * 1000) - this.currentAnimation.start;\n /**\n * Forcefully stop the loop at the last frame, if looping is disabled.\n * We subtract an arbitrary small number the animation duration, since the exact animation\n * duration time will play frame 1 of the animation.\n */\n if ((config === null || config === void 0 ? void 0 : config.loop) === false) {\n const lastFrameTime = this.currentAnimation.duration - 1;\n animationTime = Math.min(lastFrameTime, animationTime);\n }\n /**\n * Zero Animation timer fix.\n * Sometimes (?), an animation time of zero does not play the first but the last frame, thus\n * we just skip 0.\n */\n if (animationTime === 0)\n animationTime += 1;\n this.draw(animationTime);\n }\n draw(animationTime) {\n if (this.sprite) {\n this.entity.scene.renderer.addAseprite(this.sprite, this.currentAnimation.tag, this.entity.x, this.entity.y, Renderer_1.RenderingLayer.ENTITIES, this.currentAnimation.direction, animationTime);\n }\n }\n}\nexports.Animator = Animator;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvQW5pbWF0b3IuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvQW5pbWF0b3IudHM/ODgxOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc2Vwcml0ZSB9IGZyb20gXCIuL0FzZXByaXRlXCI7XHJcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gXCIuL0VudGl0eVwiO1xyXG5pbXBvcnQgeyBSZW5kZXJpbmdMYXllciB9IGZyb20gXCIuL1JlbmRlcmVyXCI7XHJcblxyXG5leHBvcnQgdHlwZSBBbmltYXRpb25Db25maWcgPSB7XHJcbiAgICBsb29wPzogYm9vbGVhbjtcclxuICAgIGNhbGxiYWNrPzogRnVuY3Rpb247XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBDdXJyZW50QW5pbWF0aW9uU3RhdGUgPSB7XHJcbiAgICB0YWc6IHN0cmluZztcclxuICAgIHN0YXJ0OiBudW1iZXI7XHJcbiAgICBmaW5pc2hlZDogYm9vbGVhbjtcclxuICAgIGR1cmF0aW9uOiBudW1iZXI7XHJcbiAgICBjb25maWc/OiBBbmltYXRpb25Db25maWc7XHJcbiAgICBkaXJlY3Rpb24/OiBudW1iZXI7XHJcbn07XHJcblxyXG4vKipcclxuICogVGhlIEFuaW1hdG9yIGNsYXNzIGNhbiBiZSB1c2VkIHRvIG9yY2hlc3RyYXRlIGFuZCBkcmF3IGFzZXByaXRlIGFuaW1hdGlvbnMgb2YgYW4gZW50aXR5XHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQW5pbWF0b3Ige1xyXG4gICAgcHJpdmF0ZSBlbnRpdHk6IEVudGl0eTtcclxuICAgIHByaXZhdGUgc3ByaXRlPzogQXNlcHJpdGU7XHJcblxyXG4gICAgcHJpdmF0ZSBjdXJyZW50QW5pbWF0aW9uOiBDdXJyZW50QW5pbWF0aW9uU3RhdGUgPSB7XHJcbiAgICAgICAgdGFnOiBcIlwiLFxyXG4gICAgICAgIHN0YXJ0OiAwLFxyXG4gICAgICAgIGR1cmF0aW9uOiAwLFxyXG4gICAgICAgIGZpbmlzaGVkOiBmYWxzZSxcclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yIChlbnRpdHk6IEVudGl0eSkge1xyXG4gICAgICAgIHRoaXMuZW50aXR5ID0gZW50aXR5O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3NpZ25TcHJpdGUoc3ByaXRlOiBBc2Vwcml0ZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3ByaXRlID0gc3ByaXRlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgYW5pbWF0aW9uIGlmIGFsbCBjb25kaXRpb25zIGFyZSBtZXQgcmVnYXJkaW5nIHRoZSBjdXJyZW50bHkgcGxheWluZyBhbmltYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHRhZyAgICAtIFRoZSBhbmltYXRpb24gdGFnIHRvIGRyYXcuXHJcbiAgICAgKiBAcGFyYW0gY29uZmlnIC0gT3B0aW9uYWwgYW5pbWF0aW9uIGNvbmZpZ3VyYXRpb24uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdXBkYXRlQW5pbWF0aW9uKHRhZzogc3RyaW5nLCBjb25maWc/OiBBbmltYXRpb25Db25maWcpOiB2b2lkIHtcclxuICAgICAgICAvLyBFYXJseSBvdXQgaWYgYW5pbWF0aW9uIHRhZyBpcyBhbHJlYWR5IHNldCBhcyBjdXJyZW50IGFuaW1hdGlvblxyXG4gICAgICAgIGlmICghdGhpcy5zcHJpdGUpIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8gQW5pbWF0aW9uIFVwZGF0ZSBMb2dpY1xyXG4gICAgICAgIC8vIElmIGN1cnJlbnQgYW5pbWF0aW9uIGhhcyBhIGZpeGVkIGR1cmF0aW9uLCBjaGVjayBpZiBpdCB3YXMgcmVhY2hlZC5cclxuICAgICAgICAvLyBJZiBzbywgdGhlIGFuaW1hdGlvbiBpcyBzZXQgdG8gZmluaXNoZWQuXHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRBbmltYXRpb24uZmluaXNoZWQgJiYgdGhpcy5jdXJyZW50QW5pbWF0aW9uLmR1cmF0aW9uID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBhbmltYXRpb25UaW1lID0gKHRoaXMuZW50aXR5LnNjZW5lLmdhbWVUaW1lICogMTAwMCkgLSB0aGlzLmN1cnJlbnRBbmltYXRpb24uc3RhcnQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoYW5pbWF0aW9uVGltZSArICh0aGlzLmVudGl0eS5zY2VuZS5kdCAqIDEwMDApID49IHRoaXMuY3VycmVudEFuaW1hdGlvbi5kdXJhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QW5pbWF0aW9uLmZpbmlzaGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50QW5pbWF0aW9uLmNvbmZpZz8uY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBbmltYXRpb24uY29uZmlnLmNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIExlYXZlIGZ1bmN0aW9uIGlmIHRoZSBwcm92aWRlZCBhbmltYXRpb24gdGFnIGlzIHRoZSBvbmUgdGhhdCBpcyBhbHJlYWR5IHBsYXlpbmcgc2luY2VcclxuICAgICAgICAvLyB0aGVyZSBpcyBubyBuZWVkIHRvIHVwZGF0ZSB0aGUgY3VycmVudCBhbmltYXRpb24gc2V0dGluZ3MuXHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEFuaW1hdGlvbi50YWcgPT09IHRhZykgcmV0dXJuO1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgQW5pbWF0aW9uIHdpdGggbmV3IHBheWxvYWRcclxuICAgICAgICB0aGlzLmN1cnJlbnRBbmltYXRpb24udGFnID0gdGFnO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEFuaW1hdGlvbi5zdGFydCA9IHRoaXMuZW50aXR5LnNjZW5lLmdhbWVUaW1lICogMTAwMDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRBbmltYXRpb24uY29uZmlnID0gY29uZmlnO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEFuaW1hdGlvbi5maW5pc2hlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEFuaW1hdGlvbi5kdXJhdGlvbiA9IHRoaXMuc3ByaXRlLmdldEFuaW1hdGlvbkR1cmF0aW9uQnlUYWcodGFnKSB8fCAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kIHRvIGNhbGwgZnJvbSBkcmF3IG1ldGhvZCBvZiB0aGUgZW50aXR5IHRvIGRyYXcgYSBzcGVjaWZpYyBhbmltYXRpb24gYnkgdGFnLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0YWcgICAgLSBUaGUgYW5pbWF0aW9uIHRhZyB0byBkcmF3LlxyXG4gICAgICogQHBhcmFtIGN0eCAgICAtIFRoZSBjYW52YXMgY29udGV4dCB0byBkcmF3IHRvLlxyXG4gICAgICogQHBhcmFtIGNvbmZpZyAtIE9wdGlvbmFsIGFuaW1hdGlvbiBjb25maWd1cmF0aW9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcGxheSh0YWc6IHN0cmluZywgZGlyZWN0aW9uOiBudW1iZXIsIGNvbmZpZz86IEFuaW1hdGlvbkNvbmZpZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEFuaW1hdGlvbi5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XHJcbiAgICAgICAgdGhpcy51cGRhdGVBbmltYXRpb24odGFnLCBjb25maWcpO1xyXG5cclxuICAgICAgICBsZXQgYW5pbWF0aW9uVGltZSA9ICh0aGlzLmVudGl0eS5zY2VuZS5nYW1lVGltZSAqIDEwMDApIC0gdGhpcy5jdXJyZW50QW5pbWF0aW9uLnN0YXJ0O1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBGb3JjZWZ1bGx5IHN0b3AgdGhlIGxvb3AgYXQgdGhlIGxhc3QgZnJhbWUsIGlmIGxvb3BpbmcgaXMgZGlzYWJsZWQuXHJcbiAgICAgICAgICogV2Ugc3VidHJhY3QgYW4gYXJiaXRyYXJ5IHNtYWxsIG51bWJlciB0aGUgYW5pbWF0aW9uIGR1cmF0aW9uLCBzaW5jZSB0aGUgZXhhY3QgYW5pbWF0aW9uXHJcbiAgICAgICAgICogZHVyYXRpb24gdGltZSB3aWxsIHBsYXkgZnJhbWUgMSBvZiB0aGUgYW5pbWF0aW9uLlxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmIChjb25maWc/Lmxvb3AgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhc3RGcmFtZVRpbWUgPSB0aGlzLmN1cnJlbnRBbmltYXRpb24uZHVyYXRpb24gLSAxO1xyXG4gICAgICAgICAgICBhbmltYXRpb25UaW1lID0gTWF0aC5taW4obGFzdEZyYW1lVGltZSwgYW5pbWF0aW9uVGltZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBaZXJvIEFuaW1hdGlvbiB0aW1lciBmaXguXHJcbiAgICAgICAgICogU29tZXRpbWVzICg/KSwgYW4gYW5pbWF0aW9uIHRpbWUgb2YgemVybyBkb2VzIG5vdCBwbGF5IHRoZSBmaXJzdCBidXQgdGhlIGxhc3QgZnJhbWUsIHRodXNcclxuICAgICAgICAgKiB3ZSBqdXN0IHNraXAgMC5cclxuICAgICAgICAgKi9cclxuICAgICAgICBpZiAoYW5pbWF0aW9uVGltZSA9PT0gMCkgYW5pbWF0aW9uVGltZSArPSAxO1xyXG5cclxuICAgICAgICB0aGlzLmRyYXcoYW5pbWF0aW9uVGltZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkcmF3KGFuaW1hdGlvblRpbWU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnNwcml0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmVudGl0eS5zY2VuZS5yZW5kZXJlci5hZGRBc2Vwcml0ZShcclxuICAgICAgICAgICAgICAgIHRoaXMuc3ByaXRlLCB0aGlzLmN1cnJlbnRBbmltYXRpb24udGFnLCB0aGlzLmVudGl0eS54LCB0aGlzLmVudGl0eS55LFxyXG4gICAgICAgICAgICAgICAgUmVuZGVyaW5nTGF5ZXIuRU5USVRJRVMsIHRoaXMuY3VycmVudEFuaW1hdGlvbi5kaXJlY3Rpb24sIGFuaW1hdGlvblRpbWVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFFQTtBQWdCQTs7QUFFQTtBQUNBO0FBV0E7QUFQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBS0E7QUFDQTs7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFqR0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/Animator.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/Aseprite.js":
|
|
/*!*************************!*\
|
|
!*** ./lib/Aseprite.js ***!
|
|
\*************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Aseprite = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst graphics_1 = __webpack_require__(/*! ./graphics */ \"./lib/graphics.js\");\nconst util_1 = __webpack_require__(/*! ./util */ \"./lib/util.js\");\n/**\n * Sprite implementation which uses the Aseprite JSON format. Use the static asynchronous [[load]] method to load the\n * sprite and then use [[draw]] or [[drawTag]] to draw the sprite animation.\n */\nclass Aseprite {\n constructor(json, image) {\n var _a;\n this.json = json;\n this.image = image;\n this.frameTags = {};\n this.frameTagDurations = {};\n this.fallbackTag = \"idle\";\n this.frames = Object.values(json.frames);\n this.duration = this.frames.reduce((duration, frame) => duration + frame.duration, 0);\n for (const frameTag of (_a = json.meta.frameTags) !== null && _a !== void 0 ? _a : []) {\n let duration = 0;\n for (let i = frameTag.from; i <= frameTag.to; i++) {\n duration += this.frames[i].duration;\n }\n this.frameTags[frameTag.name] = frameTag;\n this.frameTagDurations[frameTag.name] = duration;\n }\n }\n /**\n * Loads the sprite from the given source.\n *\n * @param source - The URL pointing to the JSON file of the sprite.\n * @return The loaded sprite.\n */\n static load(source) {\n return tslib_1.__awaiter(this, void 0, void 0, function* () {\n const json = yield (yield fetch(source)).json();\n const baseURL = new URL(source, location.href);\n const image = yield graphics_1.loadImage(new URL(json.meta.image, baseURL));\n return new Aseprite(json, image);\n });\n }\n /**\n * Returns the sprite width in pixels.\n *\n * @return The sprite width in pixels.\n */\n get width() {\n return this.frames[0].sourceSize.w;\n }\n /**\n * Returns the sprite height in pixels.\n *\n * @return The sprite height in pixels.\n */\n get height() {\n return this.frames[0].sourceSize.h;\n }\n calculateFrameIndex(time = util_1.now(), duration = this.duration, from = 0, to = this.frames.length - 1, direction = \"forward\") {\n let delta = direction === \"reverse\" ? -1 : 1;\n if (direction === \"pingpong\") {\n duration = duration * 2 - this.frames[from].duration - this.frames[to].duration;\n }\n let frameTime = time % duration;\n let frameIndex = direction === \"reverse\" ? to : from;\n while (((delta > 0 && frameIndex < to)\n || (delta < 0 && frameIndex > from)) && frameTime >= this.frames[frameIndex].duration) {\n frameTime -= this.frames[frameIndex].duration;\n frameIndex += delta;\n if (frameIndex === to) {\n delta = -delta;\n }\n }\n return frameIndex;\n }\n /**\n * Returns the frame index to be drawn at the given time.\n *\n * @param time - Optional time index of the animation. Current system time is used if not specified.\n * @return The frame index to draw.\n */\n getFrameIndex(time = util_1.now()) {\n return this.calculateFrameIndex(time);\n }\n /**\n * Draws a single sprite animation frame.\n *\n * @param ctx - The canvas context to draw to.\n * @param index - The frame index to draw.\n * @param x - The X position in pixels to draw to the sprite at.\n * @param y - The Y position in pixels to draw to the sprite at.\n */\n drawFrame(ctx, index, x, y) {\n const frame = this.frames[index];\n if (frame == null) {\n throw new Error(\"Frame index not found: \" + index);\n }\n ctx.drawImage(this.image, frame.frame.x, frame.frame.y, frame.frame.w, frame.frame.h, Math.round(x) + frame.spriteSourceSize.x, Math.round(y) + frame.spriteSourceSize.y, frame.spriteSourceSize.w, frame.spriteSourceSize.h);\n }\n /**\n * Returns the frame index of a tagged sprite animation at the given time.\n *\n * @param tag - The animation tag to draw.\n * @param time - Optional time index of the animation. Current system time is used if not specified.\n * @return The frame index to draw.\n */\n getTaggedFrameIndex(tag, time = util_1.now()) {\n const frameTag = this.frameTags[tag] || this.frameTags[this.fallbackTag];\n if (frameTag == null) {\n throw new Error(`Frame tag not found and fallback is not available as well. Tag: '${tag}' | FallbackTag: '${this.fallbackTag}'`);\n }\n return this.calculateFrameIndex(time, this.frameTagDurations[tag], frameTag.from, frameTag.to, frameTag.direction);\n }\n /**\n * Return the full animation duration for a specific animation tag.\n *\n * @param tag - The animation tag to get the duration from.\n * @return The animation duration.\n */\n getAnimationDurationByTag(tag) {\n const duration = this.frameTagDurations[tag] || this.frameTagDurations[this.fallbackTag];\n if (duration == null) {\n throw new Error(`Frame tag not found and fallback is not available as well. Tag: '${tag}' | FallbackTag: '${this.fallbackTag}'`);\n }\n return duration;\n }\n /**\n * Draws a tagged sprite animation.\n *\n * @param ctx - The canvas context to draw to.\n * @param tag - The animation tag to draw.\n * @param x - The X position in pixels to draw to the sprite at.\n * @param y - The Y position in pixels to draw to the sprite at.\n * @param time - Optional time index of the animation. Current system time is used if not specified.\n */\n drawTag(ctx, tag, x, y, time = util_1.now()) {\n this.drawFrame(ctx, this.getTaggedFrameIndex(tag, time), x, y);\n }\n /**\n * Draws the untagged sprite animation (Simply all defined frames).\n *\n * @param ctx - The canvas context to draw to.\n * @param x - The X position in pixels to draw to the sprite at.\n * @param y - The Y position in pixels to draw to the sprite at.\n * @param time - Optional time index of the animation. Current system time is used if not specified.\n */\n draw(ctx, x, y, time = util_1.now()) {\n const frameIndex = this.calculateFrameIndex(time);\n this.drawFrame(ctx, frameIndex, x, y);\n }\n /**\n * Returns the layer with the given name.\n *\n * @param name - The layer name.\n * @return The found layer. Null if none.\n */\n getLayer(name) {\n var _a, _b;\n return (_b = (_a = this.json.meta.layers) === null || _a === void 0 ? void 0 : _a.find(layer => layer.name === name)) !== null && _b !== void 0 ? _b : null;\n }\n}\nexports.Aseprite = Aseprite;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvQXNlcHJpdGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvQXNlcHJpdGUudHM/YjRlMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XHJcbiAgICBBc2Vwcml0ZURpcmVjdGlvbiwgQXNlcHJpdGVGcmFtZUpTT04sIEFzZXByaXRlRnJhbWVUYWdKU09OLCBBc2Vwcml0ZUpTT04sIEFzZXByaXRlTGF5ZXJKU09OXHJcbn0gZnJvbSBcIiouYXNlcHJpdGUuanNvblwiO1xyXG5pbXBvcnQgeyBsb2FkSW1hZ2UgfSBmcm9tIFwiLi9ncmFwaGljc1wiO1xyXG5pbXBvcnQgeyBub3cgfSBmcm9tIFwiLi91dGlsXCI7XHJcblxyXG4vKipcclxuICogU3ByaXRlIGltcGxlbWVudGF0aW9uIHdoaWNoIHVzZXMgdGhlIEFzZXByaXRlIEpTT04gZm9ybWF0LiBVc2UgdGhlIHN0YXRpYyBhc3luY2hyb25vdXMgW1tsb2FkXV0gbWV0aG9kIHRvIGxvYWQgdGhlXHJcbiAqIHNwcml0ZSBhbmQgdGhlbiB1c2UgW1tkcmF3XV0gb3IgW1tkcmF3VGFnXV0gdG8gZHJhdyB0aGUgc3ByaXRlIGFuaW1hdGlvbi5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBBc2Vwcml0ZSB7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZyYW1lczogQXNlcHJpdGVGcmFtZUpTT05bXTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZnJhbWVUYWdzOiBSZWNvcmQ8c3RyaW5nLCBBc2Vwcml0ZUZyYW1lVGFnSlNPTj4gPSB7fTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZnJhbWVUYWdEdXJhdGlvbnM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZHVyYXRpb246IG51bWJlcjtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmFsbGJhY2tUYWcgPSBcImlkbGVcIjtcclxuXHJcbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkganNvbjogQXNlcHJpdGVKU09OLCBwcml2YXRlIHJlYWRvbmx5IGltYWdlOiBIVE1MSW1hZ2VFbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5mcmFtZXMgPSBPYmplY3QudmFsdWVzKGpzb24uZnJhbWVzKTtcclxuICAgICAgICB0aGlzLmR1cmF0aW9uID0gdGhpcy5mcmFtZXMucmVkdWNlKChkdXJhdGlvbiwgZnJhbWUpID0+IGR1cmF0aW9uICsgZnJhbWUuZHVyYXRpb24sIDApO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGZyYW1lVGFnIG9mIGpzb24ubWV0YS5mcmFtZVRhZ3MgPz8gW10pIHtcclxuICAgICAgICAgICAgbGV0IGR1cmF0aW9uID0gMDtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBmcmFtZVRhZy5mcm9tOyBpIDw9IGZyYW1lVGFnLnRvOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uICs9IHRoaXMuZnJhbWVzW2ldLmR1cmF0aW9uO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZyYW1lVGFnc1tmcmFtZVRhZy5uYW1lXSA9IGZyYW1lVGFnO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lVGFnRHVyYXRpb25zW2ZyYW1lVGFnLm5hbWVdID0gZHVyYXRpb247XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTG9hZHMgdGhlIHNwcml0ZSBmcm9tIHRoZSBnaXZlbiBzb3VyY2UuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHNvdXJjZSAtIFRoZSBVUkwgcG9pbnRpbmcgdG8gdGhlIEpTT04gZmlsZSBvZiB0aGUgc3ByaXRlLlxyXG4gICAgICogQHJldHVybiBUaGUgbG9hZGVkIHNwcml0ZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBhc3luYyBsb2FkKHNvdXJjZTogc3RyaW5nKTogUHJvbWlzZTxBc2Vwcml0ZT4ge1xyXG4gICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCAoYXdhaXQgZmV0Y2goc291cmNlKSkuanNvbigpIGFzIEFzZXByaXRlSlNPTjtcclxuICAgICAgICBjb25zdCBiYXNlVVJMID0gbmV3IFVSTChzb3VyY2UsIGxvY2F0aW9uLmhyZWYpO1xyXG4gICAgICAgIGNvbnN0IGltYWdlID0gYXdhaXQgbG9hZEltYWdlKG5ldyBVUkwoanNvbi5tZXRhLmltYWdlLCBiYXNlVVJMKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgQXNlcHJpdGUoanNvbiwgaW1hZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgc3ByaXRlIHdpZHRoIGluIHBpeGVscy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBzcHJpdGUgd2lkdGggaW4gcGl4ZWxzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHdpZHRoKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJhbWVzWzBdLnNvdXJjZVNpemUudztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHNwcml0ZSBoZWlnaHQgaW4gcGl4ZWxzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gVGhlIHNwcml0ZSBoZWlnaHQgaW4gcGl4ZWxzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGhlaWdodCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZyYW1lc1swXS5zb3VyY2VTaXplLmg7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVGcmFtZUluZGV4KFxyXG4gICAgICAgIHRpbWU6IG51bWJlciA9IG5vdygpLCBkdXJhdGlvbiA9IHRoaXMuZHVyYXRpb24sIGZyb20gPSAwLCB0byA9IHRoaXMuZnJhbWVzLmxlbmd0aCAtIDEsXHJcbiAgICAgICAgZGlyZWN0aW9uOiBBc2Vwcml0ZURpcmVjdGlvbiA9IFwiZm9yd2FyZFwiXHJcbiAgICApOiBudW1iZXIge1xyXG4gICAgICAgIGxldCBkZWx0YSA9IGRpcmVjdGlvbiA9PT0gXCJyZXZlcnNlXCIgPyAtMSA6IDE7XHJcblxyXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFwicGluZ3BvbmdcIikge1xyXG4gICAgICAgICAgICBkdXJhdGlvbiA9IGR1cmF0aW9uICogMiAtIHRoaXMuZnJhbWVzW2Zyb21dLmR1cmF0aW9uIC0gdGhpcy5mcmFtZXNbdG9dLmR1cmF0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGZyYW1lVGltZSA9IHRpbWUgJSBkdXJhdGlvbjtcclxuICAgICAgICBsZXQgZnJhbWVJbmRleCA9IGRpcmVjdGlvbiA9PT0gXCJyZXZlcnNlXCIgPyB0byA6IGZyb207XHJcblxyXG4gICAgICAgIHdoaWxlIChcclxuICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgICAgKGRlbHRhID4gMCAmJiBmcmFtZUluZGV4IDwgdG8pXHJcbiAgICAgICAgICAgICAgICB8fCAoZGVsdGEgPCAwICYmIGZyYW1lSW5kZXggPiBmcm9tKVxyXG4gICAgICAgICAgICApICYmIGZyYW1lVGltZSA+PSB0aGlzLmZyYW1lc1tmcmFtZUluZGV4XS5kdXJhdGlvblxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBmcmFtZVRpbWUgLT0gdGhpcy5mcmFtZXNbZnJhbWVJbmRleF0uZHVyYXRpb247XHJcbiAgICAgICAgICAgIGZyYW1lSW5kZXggKz0gZGVsdGE7XHJcblxyXG4gICAgICAgICAgICBpZiAoZnJhbWVJbmRleCA9PT0gdG8pIHtcclxuICAgICAgICAgICAgICAgIGRlbHRhID0gLWRlbHRhO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZnJhbWVJbmRleDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGZyYW1lIGluZGV4IHRvIGJlIGRyYXduIGF0IHRoZSBnaXZlbiB0aW1lLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0aW1lIC0gT3B0aW9uYWwgdGltZSBpbmRleCBvZiB0aGUgYW5pbWF0aW9uLiBDdXJyZW50IHN5c3RlbSB0aW1lIGlzIHVzZWQgaWYgbm90IHNwZWNpZmllZC5cclxuICAgICAqIEByZXR1cm4gVGhlIGZyYW1lIGluZGV4IHRvIGRyYXcuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRGcmFtZUluZGV4KHRpbWU6IG51bWJlciA9IG5vdygpKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVGcmFtZUluZGV4KHRpbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRHJhd3MgYSBzaW5nbGUgc3ByaXRlIGFuaW1hdGlvbiBmcmFtZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY3R4ICAgLSBUaGUgY2FudmFzIGNvbnRleHQgdG8gZHJhdyB0by5cclxuICAgICAqIEBwYXJhbSBpbmRleCAtIFRoZSBmcmFtZSBpbmRleCB0byBkcmF3LlxyXG4gICAgICogQHBhcmFtIHggICAgIC0gVGhlIFggcG9zaXRpb24gaW4gcGl4ZWxzIHRvIGRyYXcgdG8gdGhlIHNwcml0ZSBhdC5cclxuICAgICAqIEBwYXJhbSB5ICAgICAtIFRoZSBZIHBvc2l0aW9uIGluIHBpeGVscyB0byBkcmF3IHRvIHRoZSBzcHJpdGUgYXQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkcmF3RnJhbWUoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIGluZGV4OiBudW1iZXIsIHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZnJhbWUgPSB0aGlzLmZyYW1lc1tpbmRleF07XHJcblxyXG4gICAgICAgIGlmIChmcmFtZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZyYW1lIGluZGV4IG5vdCBmb3VuZDogXCIgKyBpbmRleCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjdHguZHJhd0ltYWdlKFxyXG4gICAgICAgICAgICB0aGlzLmltYWdlLFxyXG4gICAgICAgICAgICBmcmFtZS5mcmFtZS54LCBmcmFtZS5mcmFtZS55LFxyXG4gICAgICAgICAgICBmcmFtZS5mcmFtZS53LCBmcmFtZS5mcmFtZS5oLFxyXG4gICAgICAgICAgICBNYXRoLnJvdW5kKHgpICsgZnJhbWUuc3ByaXRlU291cmNlU2l6ZS54LCBNYXRoLnJvdW5kKHkpICsgZnJhbWUuc3ByaXRlU291cmNlU2l6ZS55LFxyXG4gICAgICAgICAgICBmcmFtZS5zcHJpdGVTb3VyY2VTaXplLncsIGZyYW1lLnNwcml0ZVNvdXJjZVNpemUuaFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBmcmFtZSBpbmRleCBvZiBhIHRhZ2dlZCBzcHJpdGUgYW5pbWF0aW9uIGF0IHRoZSBnaXZlbiB0aW1lLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0YWcgIC0gVGhlIGFuaW1hdGlvbiB0YWcgdG8gZHJhdy5cclxuICAgICAqIEBwYXJhbSB0aW1lIC0gT3B0aW9uYWwgdGltZSBpbmRleCBvZiB0aGUgYW5pbWF0aW9uLiBDdXJyZW50IHN5c3RlbSB0aW1lIGlzIHVzZWQgaWYgbm90IHNwZWNpZmllZC5cclxuICAgICAqIEByZXR1cm4gVGhlIGZyYW1lIGluZGV4IHRvIGRyYXcuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRUYWdnZWRGcmFtZUluZGV4KHRhZzogc3RyaW5nLCB0aW1lOiBudW1iZXIgPSBub3coKSk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgZnJhbWVUYWcgPSB0aGlzLmZyYW1lVGFnc1t0YWddIHx8IHRoaXMuZnJhbWVUYWdzW3RoaXMuZmFsbGJhY2tUYWddO1xyXG4gICAgICAgIGlmIChmcmFtZVRhZyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRnJhbWUgdGFnIG5vdCBmb3VuZCBhbmQgZmFsbGJhY2sgaXMgbm90IGF2YWlsYWJsZSBhcyB3ZWxsLiBUYWc6ICcke3RhZ30nIHwgRmFsbGJhY2tUYWc6ICcke3RoaXMuZmFsbGJhY2tUYWd9J2ApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5jYWxjdWxhdGVGcmFtZUluZGV4KFxyXG4gICAgICAgICAgICB0aW1lLCB0aGlzLmZyYW1lVGFnRHVyYXRpb25zW3RhZ10sIGZyYW1lVGFnLmZyb20sIGZyYW1lVGFnLnRvLCBmcmFtZVRhZy5kaXJlY3Rpb25cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIHRoZSBmdWxsIGFuaW1hdGlvbiBkdXJhdGlvbiBmb3IgYSBzcGVjaWZpYyBhbmltYXRpb24gdGFnLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0YWcgLSBUaGUgYW5pbWF0aW9uIHRhZyB0byBnZXQgdGhlIGR1cmF0aW9uIGZyb20uXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBhbmltYXRpb24gZHVyYXRpb24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRBbmltYXRpb25EdXJhdGlvbkJ5VGFnKHRhZzogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IHRoaXMuZnJhbWVUYWdEdXJhdGlvbnNbdGFnXSB8fCB0aGlzLmZyYW1lVGFnRHVyYXRpb25zW3RoaXMuZmFsbGJhY2tUYWddO1xyXG4gICAgICAgIGlmIChkdXJhdGlvbiA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRnJhbWUgdGFnIG5vdCBmb3VuZCBhbmQgZmFsbGJhY2sgaXMgbm90IGF2YWlsYWJsZSBhcyB3ZWxsLiBUYWc6ICcke3RhZ30nIHwgRmFsbGJhY2tUYWc6ICcke3RoaXMuZmFsbGJhY2tUYWd9J2ApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRHJhd3MgYSB0YWdnZWQgc3ByaXRlIGFuaW1hdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY3R4ICAtIFRoZSBjYW52YXMgY29udGV4dCB0byBkcmF3IHRvLlxyXG4gICAgICogQHBhcmFtIHRhZyAgLSBUaGUgYW5pbWF0aW9uIHRhZyB0byBkcmF3LlxyXG4gICAgICogQHBhcmFtIHggICAgLSBUaGUgWCBwb3NpdGlvbiBpbiBwaXhlbHMgdG8gZHJhdyB0byB0aGUgc3ByaXRlIGF0LlxyXG4gICAgICogQHBhcmFtIHkgICAgLSBUaGUgWSBwb3NpdGlvbiBpbiBwaXhlbHMgdG8gZHJhdyB0byB0aGUgc3ByaXRlIGF0LlxyXG4gICAgICogQHBhcmFtIHRpbWUgLSBPcHRpb25hbCB0aW1lIGluZGV4IG9mIHRoZSBhbmltYXRpb24uIEN1cnJlbnQgc3lzdGVtIHRpbWUgaXMgdXNlZCBpZiBub3Qgc3BlY2lmaWVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZHJhd1RhZyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgdGFnOiBzdHJpbmcsIHg6IG51bWJlciwgeTogbnVtYmVyLCB0aW1lOiBudW1iZXIgPSBub3coKSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZHJhd0ZyYW1lKGN0eCwgdGhpcy5nZXRUYWdnZWRGcmFtZUluZGV4KHRhZywgdGltZSksIHgsIHkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRHJhd3MgdGhlIHVudGFnZ2VkIHNwcml0ZSBhbmltYXRpb24gKFNpbXBseSBhbGwgZGVmaW5lZCBmcmFtZXMpLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjdHggIC0gVGhlIGNhbnZhcyBjb250ZXh0IHRvIGRyYXcgdG8uXHJcbiAgICAgKiBAcGFyYW0geCAgICAtIFRoZSBYIHBvc2l0aW9uIGluIHBpeGVscyB0byBkcmF3IHRvIHRoZSBzcHJpdGUgYXQuXHJcbiAgICAgKiBAcGFyYW0geSAgICAtIFRoZSBZIHBvc2l0aW9uIGluIHBpeGVscyB0byBkcmF3IHRvIHRoZSBzcHJpdGUgYXQuXHJcbiAgICAgKiBAcGFyYW0gdGltZSAtIE9wdGlvbmFsIHRpbWUgaW5kZXggb2YgdGhlIGFuaW1hdGlvbi4gQ3VycmVudCBzeXN0ZW0gdGltZSBpcyB1c2VkIGlmIG5vdCBzcGVjaWZpZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkcmF3KGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCB4OiBudW1iZXIsIHk6IG51bWJlciwgdGltZTogbnVtYmVyID0gbm93KCkpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBmcmFtZUluZGV4ID0gdGhpcy5jYWxjdWxhdGVGcmFtZUluZGV4KHRpbWUpO1xyXG4gICAgICAgIHRoaXMuZHJhd0ZyYW1lKGN0eCwgZnJhbWVJbmRleCwgeCwgeSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBsYXllciB3aXRoIHRoZSBnaXZlbiBuYW1lLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBuYW1lIC0gVGhlIGxheWVyIG5hbWUuXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBmb3VuZCBsYXllci4gTnVsbCBpZiBub25lLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0TGF5ZXIobmFtZTogc3RyaW5nKTogQXNlcHJpdGVMYXllckpTT04gfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5qc29uLm1ldGEubGF5ZXJzPy5maW5kKGxheWVyID0+IGxheWVyLm5hbWUgPT09IG5hbWUpID8/IG51bGw7XHJcbiAgICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBR0E7QUFDQTtBQUVBOzs7QUFHQTtBQUNBO0FBT0E7O0FBQUE7QUFBQTtBQUxBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFLQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUdBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQU9BO0FBRUE7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFFQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFLQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQTFMQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/Aseprite.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/Assets.js":
|
|
/*!***********************!*\
|
|
!*** ./lib/Assets.js ***!
|
|
\***********************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Assets = exports.asset = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ./Aseprite */ \"./lib/Aseprite.js\");\nconst BitmapFont_1 = __webpack_require__(/*! ./BitmapFont */ \"./lib/BitmapFont.js\");\nconst graphics_1 = __webpack_require__(/*! ./graphics */ \"./lib/graphics.js\");\nconst Sound_1 = __webpack_require__(/*! ./Sound */ \"./lib/Sound.js\");\nconst assets = new Map();\nclass AssetRequest {\n constructor(target, propertyKey, src, options) {\n this.target = target;\n this.propertyKey = propertyKey;\n this.src = src;\n this.options = options;\n }\n resolve(asset) {\n this.target[this.propertyKey] = this.options.map ? this.options.map(asset) : asset;\n }\n}\nconst assetRequests = [];\nfunction asset(src, options = {}) {\n return (target, propertyKey) => {\n assetRequests.push(new AssetRequest(target, propertyKey, src, options));\n };\n}\nexports.asset = asset;\nclass Assets {\n loadAsset(src) {\n return tslib_1.__awaiter(this, void 0, void 0, function* () {\n let asset = assets.get(src);\n if (asset == null) {\n if (src.endsWith(\".aseprite.json\")) {\n asset = yield Aseprite_1.Aseprite.load(\"assets/\" + src);\n }\n else if (src.endsWith(\".font.json\")) {\n asset = yield BitmapFont_1.BitmapFont.load(\"assets/\" + src);\n }\n else if (src.endsWith(\".png\")) {\n asset = yield graphics_1.loadImage(src);\n }\n else if (src.endsWith(\".mp3\")) {\n asset = yield Sound_1.Sound.load(\"assets/\" + src);\n }\n else if (src.endsWith(\".ogg\")) {\n asset = yield Sound_1.Sound.load(\"assets/\" + src);\n }\n else if (src === \"appinfo.json\") {\n asset = (yield (yield fetch(\"appinfo.json\")).json());\n }\n else {\n throw new Error(\"Unknown asset format: \" + src);\n }\n assets.set(src, asset);\n }\n return asset;\n });\n }\n load(onProgress) {\n return tslib_1.__awaiter(this, void 0, void 0, function* () {\n const total = assetRequests.length;\n let loaded = 0;\n if (onProgress) {\n onProgress(total, loaded);\n }\n let request;\n while ((request = assetRequests.pop()) != null) {\n if (typeof request.src === \"string\") {\n request.resolve(yield this.loadAsset(request.src));\n }\n else {\n request.resolve(yield Promise.all(request.src.map(src => this.loadAsset(src))));\n }\n loaded++;\n if (onProgress) {\n onProgress(total, loaded);\n }\n }\n });\n }\n}\nexports.Assets = Assets;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvQXNzZXRzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL0Fzc2V0cy50cz80MzFhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcEluZm9KU09OIH0gZnJvbSBcImFwcGluZm8uanNvblwiO1xyXG5pbXBvcnQgeyBBc2Vwcml0ZSB9IGZyb20gXCIuL0FzZXByaXRlXCI7XHJcbmltcG9ydCB7IEJpdG1hcEZvbnQgfSBmcm9tIFwiLi9CaXRtYXBGb250XCI7XHJcbmltcG9ydCB7IGxvYWRJbWFnZSB9IGZyb20gXCIuL2dyYXBoaWNzXCI7XHJcbmltcG9ydCB7IFNvdW5kIH0gZnJvbSBcIi4vU291bmRcIjtcclxuXHJcbmNvbnN0IGFzc2V0cyA9IG5ldyBNYXA8c3RyaW5nLCB1bmtub3duPigpO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBc3NldE9wdGlvbnMge1xyXG4gICAgbWFwPzogKGFzc2V0OiBhbnkpID0+IHVua25vd247XHJcbn1cclxuXHJcbmNsYXNzIEFzc2V0UmVxdWVzdDxcclxuICAgICAgICBTIGV4dGVuZHMgc3RyaW5nIHwgc3RyaW5nW10gPSBzdHJpbmcgfCBzdHJpbmdbXSxcclxuICAgICAgICBBIGV4dGVuZHMgKFMgZXh0ZW5kcyBzdHJpbmcgPyB1bmtub3duIDogdW5rbm93bltdKSA9IChTIGV4dGVuZHMgc3RyaW5nID8gdW5rbm93biA6IHVua25vd25bXSk+IHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdGFyZ2V0OiBhbnksXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBwcm9wZXJ0eUtleTogc3RyaW5nIHwgc3ltYm9sLFxyXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBzcmM6IFMsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBBc3NldE9wdGlvbnNcclxuICAgICkge31cclxuXHJcbiAgICBwdWJsaWMgcmVzb2x2ZShhc3NldDogQSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudGFyZ2V0W3RoaXMucHJvcGVydHlLZXldID0gdGhpcy5vcHRpb25zLm1hcCA/IHRoaXMub3B0aW9ucy5tYXAoYXNzZXQpIDogYXNzZXQ7XHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IGFzc2V0UmVxdWVzdHM6IEFzc2V0UmVxdWVzdFtdID0gW107XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYXNzZXQoc3JjOiBzdHJpbmcgfCBzdHJpbmdbXSwgb3B0aW9uczogQXNzZXRPcHRpb25zID0ge30pOiBQcm9wZXJ0eURlY29yYXRvciB7XHJcbiAgICByZXR1cm4gKHRhcmdldDogT2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nIHwgc3ltYm9sKTogdm9pZCA9PiB7XHJcbiAgICAgICAgYXNzZXRSZXF1ZXN0cy5wdXNoKG5ldyBBc3NldFJlcXVlc3QodGFyZ2V0LCBwcm9wZXJ0eUtleSwgc3JjLCBvcHRpb25zKSk7XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQXNzZXRzIHtcclxuICAgIHByaXZhdGUgYXN5bmMgbG9hZEFzc2V0KHNyYzogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XHJcbiAgICAgICAgbGV0IGFzc2V0ID0gYXNzZXRzLmdldChzcmMpO1xyXG5cclxuICAgICAgICBpZiAoYXNzZXQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoc3JjLmVuZHNXaXRoKFwiLmFzZXByaXRlLmpzb25cIikpIHtcclxuICAgICAgICAgICAgICAgIGFzc2V0ID0gYXdhaXQgQXNlcHJpdGUubG9hZChcImFzc2V0cy9cIiArIHNyYyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3JjLmVuZHNXaXRoKFwiLmZvbnQuanNvblwiKSkge1xyXG4gICAgICAgICAgICAgICAgYXNzZXQgPSBhd2FpdCBCaXRtYXBGb250LmxvYWQoXCJhc3NldHMvXCIgKyBzcmMpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNyYy5lbmRzV2l0aChcIi5wbmdcIikpIHtcclxuICAgICAgICAgICAgICAgIGFzc2V0ID0gYXdhaXQgbG9hZEltYWdlKHNyYyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3JjLmVuZHNXaXRoKFwiLm1wM1wiKSkge1xyXG4gICAgICAgICAgICAgICAgYXNzZXQgPSBhd2FpdCBTb3VuZC5sb2FkKFwiYXNzZXRzL1wiICsgc3JjKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChzcmMuZW5kc1dpdGgoXCIub2dnXCIpKSB7XHJcbiAgICAgICAgICAgICAgICBhc3NldCA9IGF3YWl0IFNvdW5kLmxvYWQoXCJhc3NldHMvXCIgKyBzcmMpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNyYyA9PT0gXCJhcHBpbmZvLmpzb25cIikge1xyXG4gICAgICAgICAgICAgICAgYXNzZXQgPSBhd2FpdCAoYXdhaXQgZmV0Y2goXCJhcHBpbmZvLmpzb25cIikpLmpzb24oKSBhcyBBcHBJbmZvSlNPTjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gYXNzZXQgZm9ybWF0OiBcIiArIHNyYyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGFzc2V0cy5zZXQoc3JjLCBhc3NldCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYXNzZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGxvYWQob25Qcm9ncmVzcz86ICh0b3RhbDogbnVtYmVyLCBsb2FkZWQ6IG51bWJlcikgPT4gdm9pZCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGNvbnN0IHRvdGFsID0gYXNzZXRSZXF1ZXN0cy5sZW5ndGg7XHJcbiAgICAgICAgbGV0IGxvYWRlZCA9IDA7XHJcblxyXG4gICAgICAgIGlmIChvblByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgIG9uUHJvZ3Jlc3ModG90YWwsIGxvYWRlZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcmVxdWVzdDtcclxuXHJcbiAgICAgICAgd2hpbGUgKChyZXF1ZXN0ID0gYXNzZXRSZXF1ZXN0cy5wb3AoKSkgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3Quc3JjID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0LnJlc29sdmUoYXdhaXQgdGhpcy5sb2FkQXNzZXQocmVxdWVzdC5zcmMpKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlcXVlc3QucmVzb2x2ZShhd2FpdCBQcm9taXNlLmFsbChyZXF1ZXN0LnNyYy5tYXAoc3JjID0+IHRoaXMubG9hZEFzc2V0KHNyYykpKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxvYWRlZCsrO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9uUHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3ModG90YWwsIGxvYWRlZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQU1BO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7O0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFFQTs7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFuREE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/Assets.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/BitmapFont.js":
|
|
/*!***************************!*\
|
|
!*** ./lib/BitmapFont.js ***!
|
|
\***************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BitmapFont = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst graphics_js_1 = __webpack_require__(/*! ./graphics.js */ \"./lib/graphics.js\");\nconst CHAR_SPACING = 1;\nclass BitmapFont {\n constructor(sourceImage, colors, charMap, charWidths, compactablePrecursors, charMargin = 1) {\n this.sourceImage = sourceImage;\n this.canvas = document.createElement(\"canvas\");\n this.colorMap = this.prepareColors(colors);\n this.charMap = charMap;\n this.charWidths = charWidths;\n this.compactablePrecursors = compactablePrecursors;\n this.charStartPoints = [];\n this.charCount = charMap.length;\n this.charReverseMap = {};\n for (let i = 0; i < this.charCount; i++) {\n this.charStartPoints[i] = (i === 0) ? 0 : this.charStartPoints[i - 1] + this.charWidths[i - 1] + charMargin;\n const char = this.charMap[i];\n this.charReverseMap[char] = i;\n }\n }\n /**\n * Loads the sprite from the given source.\n *\n * @param source - The URL pointing to the JSON file of the sprite.\n * @return The loaded sprite.\n */\n static load(source) {\n return tslib_1.__awaiter(this, void 0, void 0, function* () {\n const json = yield (yield fetch(source)).json();\n const baseURL = new URL(source, location.href);\n const image = yield graphics_js_1.loadImage(new URL(json.image, baseURL));\n const characters = json.characterMapping.map(charDef => charDef.char).join(\"\");\n const widths = json.characterMapping.map(charDef => charDef.width);\n const compactablePrecursors = json.characterMapping.map(charDef => charDef.compactablePrecursors || []);\n return new BitmapFont(image, json.colors, characters, widths, compactablePrecursors, json.margin);\n });\n }\n prepareColors(colorMap) {\n const result = {};\n const colors = Object.keys(colorMap);\n const count = colors.length;\n const w = this.canvas.width = this.sourceImage.width;\n const h = this.sourceImage.height;\n this.canvas.height = h * count;\n this.charHeight = h;\n const ctx = this.canvas.getContext(\"2d\");\n // Fill with font\n for (let i = 0; i < count; i++) {\n result[colors[i]] = i;\n ctx.drawImage(this.sourceImage, 0, h * i);\n }\n // Colorize\n ctx.globalCompositeOperation = \"source-in\";\n for (let i = 0; i < count; i++) {\n ctx.fillStyle = colorMap[colors[i]];\n ctx.save();\n ctx.beginPath();\n ctx.rect(0, h * i, w, h);\n ctx.clip();\n ctx.fillRect(0, 0, w, h * count);\n ctx.restore();\n }\n ctx.globalCompositeOperation = \"source-over\";\n return result;\n }\n getCharIndex(char) {\n let charIndex = this.charReverseMap[char];\n if (charIndex == null) {\n // To signalize missing char, use last char, which is a not-def glyph\n charIndex = this.charCount - 1;\n }\n return charIndex;\n }\n drawCharacter(ctx, char, color) {\n const colorIndex = this.colorMap[color];\n const charIndex = (typeof char === \"number\") ? char : this.getCharIndex(char);\n const charX = this.charStartPoints[charIndex], charY = colorIndex * this.charHeight;\n ctx.drawImage(this.canvas, charX, charY, this.charWidths[charIndex], this.charHeight, 0, 0, this.charWidths[charIndex], this.charHeight);\n }\n drawText(ctx, text, x, y, color, align = 0, alpha = 1) {\n ctx.save();\n ctx.translate(x, y);\n // Ugly hack to correct text position to exact pixel boundary because Chrome renders broken character images\n // when exactly between two pixels (Firefox doesn't have this problem).\n if (ctx.getTransform) {\n const transform = ctx.getTransform();\n ctx.translate(Math.round(transform.e) - transform.e, Math.round(transform.f) - transform.f);\n }\n text = \"\" + text;\n ctx.globalAlpha *= alpha;\n const { width } = this.measureText(text);\n ctx.translate(-align * width, 0);\n let precursorChar = null;\n for (const currentChar of text) {\n const index = this.getCharIndex(currentChar);\n const spaceReduction = precursorChar && this.compactablePrecursors[index].includes(precursorChar) ? 1 : 0;\n ctx.translate(-spaceReduction, 0);\n this.drawCharacter(ctx, index, color);\n ctx.translate(this.charWidths[index] + CHAR_SPACING, 0);\n precursorChar = currentChar;\n }\n ctx.restore();\n }\n measureText(text) {\n let width = 0;\n let precursorChar = null;\n for (const currentChar of text) {\n const index = this.getCharIndex(currentChar);\n const spaceReduction = precursorChar && this.compactablePrecursors[index].includes(precursorChar) ? 1 : 0;\n width += this.charWidths[index] - spaceReduction + CHAR_SPACING;\n precursorChar = currentChar;\n }\n if (text.length > 0) {\n width -= CHAR_SPACING;\n }\n return { width, height: this.charHeight };\n }\n drawTextWithOutline(ctx, text, xPos, yPos, textColor, outlineColor, align = 0) {\n for (let yOffset = yPos - 1; yOffset <= yPos + 1; yOffset++) {\n for (let xOffset = xPos - 1; xOffset <= xPos + 1; xOffset++) {\n if (xOffset !== xPos || yOffset !== yPos) {\n this.drawText(ctx, text, xOffset, yOffset, outlineColor, align);\n }\n }\n }\n this.drawText(ctx, text, xPos, yPos, textColor, align);\n }\n}\nexports.BitmapFont = BitmapFont;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvQml0bWFwRm9udC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9CaXRtYXBGb250LnRzPzU2ZDYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9udEpTT04gfSBmcm9tIFwiKi5mb250Lmpzb25cIjtcclxuaW1wb3J0IHsgbG9hZEltYWdlIH0gZnJvbSBcIi4vZ3JhcGhpY3MuanNcIjtcclxuXHJcbmNvbnN0IENIQVJfU1BBQ0lORyA9IDE7XHJcblxyXG5leHBvcnQgY2xhc3MgQml0bWFwRm9udCB7XHJcbiAgICBwcml2YXRlIHNvdXJjZUltYWdlOiBIVE1MSW1hZ2VFbGVtZW50O1xyXG4gICAgcHJpdmF0ZSBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50O1xyXG4gICAgcHJpdmF0ZSBjb2xvck1hcDogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcclxuICAgIHByaXZhdGUgY2hhck1hcDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBjaGFyV2lkdGhzOiBudW1iZXJbXTtcclxuICAgIHByaXZhdGUgY29tcGFjdGFibGVQcmVjdXJzb3JzOiBzdHJpbmdbXVtdO1xyXG4gICAgcHJpdmF0ZSBjaGFyU3RhcnRQb2ludHM6IG51bWJlcltdO1xyXG4gICAgcHJpdmF0ZSBjaGFyQ291bnQ6IG51bWJlcjtcclxuICAgIHByaXZhdGUgY2hhclJldmVyc2VNYXA6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XHJcbiAgICBwdWJsaWMgY2hhckhlaWdodCE6IG51bWJlcjtcclxuXHJcbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHNvdXJjZUltYWdlOiBIVE1MSW1hZ2VFbGVtZW50LCBjb2xvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIGNoYXJNYXA6IHN0cmluZyxcclxuICAgICAgICBjaGFyV2lkdGhzOiBudW1iZXJbXSwgY29tcGFjdGFibGVQcmVjdXJzb3JzOiBzdHJpbmdbXVtdLCBjaGFyTWFyZ2luID0gMVxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5zb3VyY2VJbWFnZSA9IHNvdXJjZUltYWdlO1xyXG4gICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcclxuICAgICAgICB0aGlzLmNvbG9yTWFwID0gdGhpcy5wcmVwYXJlQ29sb3JzKGNvbG9ycyk7XHJcbiAgICAgICAgdGhpcy5jaGFyTWFwID0gY2hhck1hcDtcclxuICAgICAgICB0aGlzLmNoYXJXaWR0aHMgPSBjaGFyV2lkdGhzO1xyXG4gICAgICAgIHRoaXMuY29tcGFjdGFibGVQcmVjdXJzb3JzID0gY29tcGFjdGFibGVQcmVjdXJzb3JzO1xyXG4gICAgICAgIHRoaXMuY2hhclN0YXJ0UG9pbnRzID0gW107XHJcbiAgICAgICAgdGhpcy5jaGFyQ291bnQgPSBjaGFyTWFwLmxlbmd0aDtcclxuICAgICAgICB0aGlzLmNoYXJSZXZlcnNlTWFwID0ge307XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGFyQ291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmNoYXJTdGFydFBvaW50c1tpXSA9IChpID09PSAwKSA/IDAgOiB0aGlzLmNoYXJTdGFydFBvaW50c1tpIC0gMV0gKyB0aGlzLmNoYXJXaWR0aHNbaSAtIDFdICsgY2hhck1hcmdpbjtcclxuICAgICAgICAgICAgY29uc3QgY2hhciA9IHRoaXMuY2hhck1hcFtpXTtcclxuICAgICAgICAgICAgdGhpcy5jaGFyUmV2ZXJzZU1hcFtjaGFyXSA9IGk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTG9hZHMgdGhlIHNwcml0ZSBmcm9tIHRoZSBnaXZlbiBzb3VyY2UuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHNvdXJjZSAtIFRoZSBVUkwgcG9pbnRpbmcgdG8gdGhlIEpTT04gZmlsZSBvZiB0aGUgc3ByaXRlLlxyXG4gICAgICogQHJldHVybiBUaGUgbG9hZGVkIHNwcml0ZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBhc3luYyBsb2FkKHNvdXJjZTogc3RyaW5nKTogUHJvbWlzZTxCaXRtYXBGb250PiB7XHJcbiAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IChhd2FpdCBmZXRjaChzb3VyY2UpKS5qc29uKCkgYXMgRm9udEpTT047XHJcbiAgICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBVUkwoc291cmNlLCBsb2NhdGlvbi5ocmVmKTtcclxuICAgICAgICBjb25zdCBpbWFnZSA9IGF3YWl0IGxvYWRJbWFnZShuZXcgVVJMKGpzb24uaW1hZ2UsIGJhc2VVUkwpKTtcclxuICAgICAgICBjb25zdCBjaGFyYWN0ZXJzID0ganNvbi5jaGFyYWN0ZXJNYXBwaW5nLm1hcChjaGFyRGVmID0+IGNoYXJEZWYuY2hhcikuam9pbihcIlwiKTtcclxuICAgICAgICBjb25zdCB3aWR0aHMgPSBqc29uLmNoYXJhY3Rlck1hcHBpbmcubWFwKGNoYXJEZWYgPT4gY2hhckRlZi53aWR0aCk7XHJcbiAgICAgICAgY29uc3QgY29tcGFjdGFibGVQcmVjdXJzb3JzID0ganNvbi5jaGFyYWN0ZXJNYXBwaW5nLm1hcChjaGFyRGVmID0+IGNoYXJEZWYuY29tcGFjdGFibGVQcmVjdXJzb3JzIHx8IFtdKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBCaXRtYXBGb250KGltYWdlLCBqc29uLmNvbG9ycywgY2hhcmFjdGVycywgd2lkdGhzLCBjb21wYWN0YWJsZVByZWN1cnNvcnMsIGpzb24ubWFyZ2luKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHByZXBhcmVDb2xvcnMoY29sb3JNYXA6IHsgW3g6IHN0cmluZ106IHN0cmluZzsgfSk6IHsgW3g6IHN0cmluZ106IG51bWJlciB9IHtcclxuICAgICAgICBjb25zdCByZXN1bHQ6IHsgW3g6IHN0cmluZ106IG51bWJlcn0gPSB7fTtcclxuICAgICAgICBjb25zdCBjb2xvcnMgPSBPYmplY3Qua2V5cyhjb2xvck1hcCk7XHJcbiAgICAgICAgY29uc3QgY291bnQgPSBjb2xvcnMubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IHcgPSB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuc291cmNlSW1hZ2Uud2lkdGg7XHJcbiAgICAgICAgY29uc3QgaCA9IHRoaXMuc291cmNlSW1hZ2UuaGVpZ2h0O1xyXG4gICAgICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGggKiBjb3VudDtcclxuICAgICAgICB0aGlzLmNoYXJIZWlnaHQgPSBoO1xyXG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKSE7XHJcblxyXG4gICAgICAgIC8vIEZpbGwgd2l0aCBmb250XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdFtjb2xvcnNbaV1dID0gaTtcclxuICAgICAgICAgICAgY3R4LmRyYXdJbWFnZSh0aGlzLnNvdXJjZUltYWdlLCAwLCBoICogaSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDb2xvcml6ZVxyXG4gICAgICAgIGN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBcInNvdXJjZS1pblwiO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGNvbG9yTWFwW2NvbG9yc1tpXV07XHJcbiAgICAgICAgICAgIGN0eC5zYXZlKCk7XHJcbiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuICAgICAgICAgICAgY3R4LnJlY3QoMCwgaCAqIGksIHcsIGgpO1xyXG4gICAgICAgICAgICBjdHguY2xpcCgpO1xyXG4gICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgdywgaCAqIGNvdW50KTtcclxuICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBcInNvdXJjZS1vdmVyXCI7XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDaGFySW5kZXgoY2hhcjogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgY2hhckluZGV4ID0gdGhpcy5jaGFyUmV2ZXJzZU1hcFtjaGFyXTtcclxuXHJcbiAgICAgICAgaWYgKGNoYXJJbmRleCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIC8vIFRvIHNpZ25hbGl6ZSBtaXNzaW5nIGNoYXIsIHVzZSBsYXN0IGNoYXIsIHdoaWNoIGlzIGEgbm90LWRlZiBnbHlwaFxyXG4gICAgICAgICAgICBjaGFySW5kZXggPSB0aGlzLmNoYXJDb3VudCAtIDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2hhckluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZHJhd0NoYXJhY3RlcihjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgY2hhcjogbnVtYmVyLCBjb2xvcjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY29sb3JJbmRleCA9IHRoaXMuY29sb3JNYXBbY29sb3JdO1xyXG4gICAgICAgIGNvbnN0IGNoYXJJbmRleCA9ICh0eXBlb2YgY2hhciA9PT0gXCJudW1iZXJcIikgPyBjaGFyIDogdGhpcy5nZXRDaGFySW5kZXgoY2hhcik7XHJcbiAgICAgICAgY29uc3QgY2hhclggPSB0aGlzLmNoYXJTdGFydFBvaW50c1tjaGFySW5kZXhdLCBjaGFyWSA9IGNvbG9ySW5kZXggKiB0aGlzLmNoYXJIZWlnaHQ7XHJcblxyXG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoXHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLCBjaGFyWCwgY2hhclksIHRoaXMuY2hhcldpZHRoc1tjaGFySW5kZXhdLCB0aGlzLmNoYXJIZWlnaHQsXHJcbiAgICAgICAgICAgIDAsIDAsIHRoaXMuY2hhcldpZHRoc1tjaGFySW5kZXhdLCB0aGlzLmNoYXJIZWlnaHRcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkcmF3VGV4dChcclxuICAgICAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgdGV4dDogc3RyaW5nLCB4OiBudW1iZXIsIHk6IG51bWJlciwgY29sb3I6IHN0cmluZywgYWxpZ24gPSAwLFxyXG4gICAgICAgIGFscGhhID0gMVxyXG4gICAgKTogdm9pZCB7XHJcbiAgICAgICAgY3R4LnNhdmUoKTtcclxuICAgICAgICBjdHgudHJhbnNsYXRlKHgsIHkpO1xyXG5cclxuICAgICAgICAvLyBVZ2x5IGhhY2sgdG8gY29ycmVjdCB0ZXh0IHBvc2l0aW9uIHRvIGV4YWN0IHBpeGVsIGJvdW5kYXJ5IGJlY2F1c2UgQ2hyb21lIHJlbmRlcnMgYnJva2VuIGNoYXJhY3RlciBpbWFnZXNcclxuICAgICAgICAvLyB3aGVuIGV4YWN0bHkgYmV0d2VlbiB0d28gcGl4ZWxzIChGaXJlZm94IGRvZXNuJ3QgaGF2ZSB0aGlzIHByb2JsZW0pLlxyXG4gICAgICAgIGlmIChjdHguZ2V0VHJhbnNmb3JtKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IGN0eC5nZXRUcmFuc2Zvcm0oKTtcclxuICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZShcclxuICAgICAgICAgICAgICAgIE1hdGgucm91bmQodHJhbnNmb3JtLmUpIC0gdHJhbnNmb3JtLmUsXHJcbiAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKHRyYW5zZm9ybS5mKSAtIHRyYW5zZm9ybS5mXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0ZXh0ID0gXCJcIiArIHRleHQ7XHJcbiAgICAgICAgY3R4Lmdsb2JhbEFscGhhICo9IGFscGhhO1xyXG5cclxuICAgICAgICBjb25zdCB7IHdpZHRoIH0gPSB0aGlzLm1lYXN1cmVUZXh0KHRleHQpO1xyXG4gICAgICAgIGN0eC50cmFuc2xhdGUoLWFsaWduICogd2lkdGgsIDApO1xyXG5cclxuICAgICAgICBsZXQgcHJlY3Vyc29yQ2hhciA9IG51bGw7XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgY3VycmVudENoYXIgb2YgdGV4dCkge1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0Q2hhckluZGV4KGN1cnJlbnRDaGFyKTtcclxuICAgICAgICAgICAgY29uc3Qgc3BhY2VSZWR1Y3Rpb24gPSBwcmVjdXJzb3JDaGFyICYmIHRoaXMuY29tcGFjdGFibGVQcmVjdXJzb3JzW2luZGV4XS5pbmNsdWRlcyhwcmVjdXJzb3JDaGFyKSA/IDEgOiAwO1xyXG4gICAgICAgICAgICBjdHgudHJhbnNsYXRlKC1zcGFjZVJlZHVjdGlvbiwgMCk7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhd0NoYXJhY3RlcihjdHgsIGluZGV4LCBjb2xvcik7XHJcbiAgICAgICAgICAgIGN0eC50cmFuc2xhdGUodGhpcy5jaGFyV2lkdGhzW2luZGV4XSArIENIQVJfU1BBQ0lORywgMCk7XHJcbiAgICAgICAgICAgIHByZWN1cnNvckNoYXIgPSBjdXJyZW50Q2hhcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG1lYXN1cmVUZXh0KHRleHQ6IHN0cmluZyk6IHsgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIgfSB7XHJcbiAgICAgICAgbGV0IHdpZHRoID0gMDtcclxuICAgICAgICBsZXQgcHJlY3Vyc29yQ2hhciA9IG51bGw7XHJcbiAgICAgICAgZm9yIChjb25zdCBjdXJyZW50Q2hhciBvZiB0ZXh0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRDaGFySW5kZXgoY3VycmVudENoYXIpO1xyXG4gICAgICAgICAgICBjb25zdCBzcGFjZVJlZHVjdGlvbiA9IHByZWN1cnNvckNoYXIgJiYgdGhpcy5jb21wYWN0YWJsZVByZWN1cnNvcnNbaW5kZXhdLmluY2x1ZGVzKHByZWN1cnNvckNoYXIpID8gMSA6IDA7XHJcbiAgICAgICAgICAgIHdpZHRoICs9IHRoaXMuY2hhcldpZHRoc1tpbmRleF0gLSBzcGFjZVJlZHVjdGlvbiArIENIQVJfU1BBQ0lORztcclxuICAgICAgICAgICAgcHJlY3Vyc29yQ2hhciA9IGN1cnJlbnRDaGFyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRleHQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB3aWR0aCAtPSBDSEFSX1NQQUNJTkc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4geyB3aWR0aCwgaGVpZ2h0OiB0aGlzLmNoYXJIZWlnaHQgfTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZHJhd1RleHRXaXRoT3V0bGluZShcclxuICAgICAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgdGV4dDogc3RyaW5nLCB4UG9zOiBudW1iZXIsIHlQb3M6IG51bWJlciwgdGV4dENvbG9yOiBzdHJpbmcsXHJcbiAgICAgICAgb3V0bGluZUNvbG9yOiBzdHJpbmcsIGFsaWduID0gMFxyXG4gICAgKTogdm9pZCB7XHJcbiAgICAgICAgZm9yIChsZXQgeU9mZnNldCA9IHlQb3MgLSAxOyB5T2Zmc2V0IDw9IHlQb3MgKyAxOyB5T2Zmc2V0KyspIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgeE9mZnNldCA9IHhQb3MgLSAxOyB4T2Zmc2V0IDw9IHhQb3MgKyAxOyB4T2Zmc2V0KyspIHtcclxuICAgICAgICAgICAgICAgIGlmICh4T2Zmc2V0ICE9PSB4UG9zIHx8IHlPZmZzZXQgIT09IHlQb3MpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdUZXh0KGN0eCwgdGV4dCwgeE9mZnNldCwgeU9mZnNldCwgb3V0bGluZUNvbG9yLCBhbGlnbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZHJhd1RleHQoY3R4LCB0ZXh0LCB4UG9zLCB5UG9zLCB0ZXh0Q29sb3IsIGFsaWduKTtcclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFDQTtBQUVBO0FBRUE7QUFZQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUtBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUlBO0FBRUE7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUE5S0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/BitmapFont.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/Camera.js":
|
|
/*!***********************!*\
|
|
!*** ./lib/Camera.js ***!
|
|
\***********************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Camera = void 0;\nconst util_1 = __webpack_require__(/*! ./util */ \"./lib/util.js\");\nconst Renderer_1 = __webpack_require__(/*! ./Renderer */ \"./lib/Renderer.js\");\nconst Particles_1 = __webpack_require__(/*! ./Particles */ \"./lib/Particles.js\");\nclass Camera {\n constructor(scene, target, interpolationTime = 0.5, barHeight = 0.1) {\n this.scene = scene;\n this.target = target;\n this.barHeight = barHeight;\n this.x = 0;\n this.y = 0;\n this.zoom = 1;\n this.rotation = 0;\n this.focuses = [];\n this.time = 0;\n this.zoomingOut = false;\n this.currentBarTarget = 0;\n this.currentBarHeight = 0;\n if (interpolationTime > 1) {\n throw new Error(\"Camera interpolation time may not exceed 1\");\n }\n this.interpolationTime = interpolationTime / 2;\n if (util_1.isDev()) {\n console.log(\"Dev mode, press “Tab” to zoom out & click somewhere to teleport there.\");\n document.addEventListener(\"keydown\", this.handleKeyDown.bind(this));\n document.addEventListener(\"keyup\", this.handleKeyUp.bind(this));\n this.scene.game.canvas.addEventListener(\"click\", this.handleClick.bind(this));\n }\n this.currentBarTarget = 0;\n this.currentBarHeight = 0;\n this.x = target.x;\n this.y = target.y;\n }\n setBounds(bounds) {\n this.bounds = bounds;\n }\n getBounds() {\n return this.bounds;\n }\n handleKeyDown(e) {\n if (e.key === \"Tab\") {\n if (!e.repeat) {\n this.zoomingOut = true;\n }\n e.stopPropagation();\n e.preventDefault();\n }\n }\n handleKeyUp(e) {\n if (e.key === \"Tab\") {\n this.zoomingOut = false;\n e.stopPropagation();\n e.preventDefault();\n }\n }\n handleClick(e) {\n if (this.zoomingOut) {\n const rect = this.scene.game.canvas.getBoundingClientRect();\n const cx = e.clientX - rect.x, cy = e.clientY - rect.y;\n const px = cx / rect.width, py = cy / rect.height;\n const worldRect = this.getVisibleRect();\n const tx = worldRect.x + px * worldRect.width, ty = worldRect.y + (1 - py) * worldRect.height;\n // Teleport player\n this.scene.player.x = tx;\n this.scene.player.y = ty;\n this.scene.player.setVelocity(0, 0);\n this.zoomingOut = false;\n }\n }\n getVisibleRect(x = this.x, y = this.y) {\n const cnv = this.scene.game.canvas;\n const cw = cnv.width;\n const ch = cnv.height;\n const offx = cw / 2 / this.zoom;\n const offy = ch / 2 / this.zoom;\n return {\n x: x - offx,\n y: y - offy,\n width: offx * 2,\n height: offy * 2\n };\n }\n isPointVisible(x, y, radius = 0) {\n const visibleRect = this.getVisibleRect();\n return (x >= visibleRect.x - radius\n && y >= visibleRect.y - radius\n && x <= visibleRect.x + visibleRect.width + radius\n && y <= visibleRect.y + visibleRect.height + radius);\n }\n setCinematicBar(target) {\n this.currentBarTarget = target;\n }\n getBaseCameraTarget() {\n // Base position always on target (player)\n let xTarget = this.target.x;\n let yTarget = this.target.y + 30;\n if (this.bounds) {\n const targetVisibleRect = this.getVisibleRect(xTarget, yTarget);\n const overBounds = {\n left: (targetVisibleRect.x < this.bounds.x),\n right: (targetVisibleRect.x + targetVisibleRect.width) > (this.bounds.x + this.bounds.width),\n top: (targetVisibleRect.y + targetVisibleRect.height) > this.bounds.y,\n bottom: targetVisibleRect.y < (this.bounds.y - this.bounds.height)\n };\n // Bound clip left / right\n if (targetVisibleRect.width >= this.bounds.width) {\n const visibleCenterX = targetVisibleRect.x + targetVisibleRect.width / 2;\n const boundCenterX = this.bounds.x + this.bounds.width / 2;\n const diff = boundCenterX - visibleCenterX;\n xTarget += diff;\n }\n else if (overBounds.left) {\n const diff = this.bounds.x - targetVisibleRect.x;\n xTarget += diff;\n }\n else if (overBounds.right) {\n const diff = (this.bounds.x + this.bounds.width) - (targetVisibleRect.x + targetVisibleRect.width);\n xTarget += diff;\n }\n // Bound clip top / bottom\n if (targetVisibleRect.height >= this.bounds.height) {\n const visibleCenterY = (targetVisibleRect.y + targetVisibleRect.height) - targetVisibleRect.height / 2;\n const boundCenterY = this.bounds.y - this.bounds.height / 2;\n const diff = boundCenterY - visibleCenterY;\n yTarget += diff;\n }\n else if (overBounds.top) {\n const diff = this.bounds.y - (targetVisibleRect.y + targetVisibleRect.height);\n yTarget += diff;\n }\n else if (overBounds.bottom) {\n const diff = (this.bounds.y - this.bounds.height) - targetVisibleRect.y;\n yTarget += diff;\n }\n }\n return {\n x: xTarget,\n y: yTarget\n };\n }\n update(dt, time) {\n this.time = time;\n // Base position always on target (player)\n const baseCamTarget = this.getBaseCameraTarget();\n this.x = baseCamTarget.x;\n this.y = baseCamTarget.y;\n // Cam Shake during apocalypse\n if (this.scene.fire.isAngry() || this.scene.apocalypse) {\n this.applyApocalypticShake(this.scene.fire);\n }\n this.zoom = this.zoomingOut ? 0.2 : 1;\n this.rotation = 0;\n // On top of that, apply cam focus(es)\n for (const focus of this.focuses) {\n this.updateAndApplyFocus(focus);\n }\n // Drop any focus that is done\n this.focuses = this.focuses.filter(f => !f.dead);\n // Update bar target towards goal\n this.currentBarHeight = util_1.shiftValue(this.currentBarHeight, this.currentBarTarget, dt * 1.5);\n // Reset bar to vanish automatically if not continuously set to 1\n this.currentBarTarget = 0;\n }\n applyApocalypticShake(shakeSource) {\n const dx = this.x - shakeSource.x, dy = this.y - shakeSource.y;\n const dis = Math.sqrt(dx * dx + dy * dy);\n const maxDis = 200;\n if (dis < maxDis) {\n const intensity = (shakeSource.intensity - 5) / 15;\n if (intensity > 0) {\n const shake = 5 * intensity * (1 - dis / maxDis) * (this.scene.player.playerConversation ? 0.5 : 1);\n this.x += util_1.rnd(-1, 1) * shake;\n this.y += util_1.rnd(-1, 1) * shake;\n }\n }\n }\n /**\n * Returns true if cam target (player) currently has full attention, or is showing something else for the moment.\n */\n isOnTarget() {\n return this.focuses.length === 0;\n }\n /**\n * Returns strength of camera focus on something other than the player. E.g. when camera focuses on some place to\n * show the player, the focus force will be between 0 and 1 during interpolation and exactly 1 while fully focusing\n * on that spot. This e.g. can be used for cinematic bars at top and bottom, scaling their height.\n */\n getFocusForce() {\n return this.focuses.reduce((a, b) => Math.max(a, b.force), 0);\n }\n applyTransform(ctx) {\n ctx.scale(this.zoom, this.zoom);\n ctx.rotate(this.rotation);\n ctx.translate(-this.x, this.y);\n }\n focusOn(duration, x, y, zoom = 1, rotation = 0, curve = Particles_1.valueCurves.cos(this.interpolationTime)) {\n const focus = {\n x,\n y,\n duration,\n zoom,\n rotation,\n startTime: this.time,\n endTime: this.time + duration,\n progress: 0,\n dead: false,\n force: 0,\n curve\n };\n this.focuses.push(focus);\n return new Promise((resolve, reject) => {\n focus.resolve = resolve;\n this.updateAndApplyFocus(focus);\n });\n }\n updateAndApplyFocus(focus) {\n focus.progress = util_1.clamp((this.time - focus.startTime) / focus.duration, 0, 1);\n focus.dead = (focus.progress >= 1);\n if (!focus.dead) {\n // Fade in and out of focus using force lerping from 0 to 1 and back to 0 over time\n const force = focus.force = focus.curve.get(focus.progress);\n // Apply to camera state\n const f1 = 1 - force;\n this.x = f1 * this.x + force * focus.x;\n this.y = f1 * this.y + force * focus.y;\n const originalSize = 1 / this.zoom, targetSize = 1 / focus.zoom;\n const currentSize = f1 * originalSize + force * targetSize;\n this.zoom = 1 / currentSize;\n this.rotation = f1 * this.rotation + force * focus.rotation;\n }\n else {\n if (focus.resolve) {\n focus.resolve();\n focus.resolve = undefined;\n }\n }\n }\n addCinematicBarsToRenderer(force = this.getFocusForce()) {\n force = Math.max(force, this.getFocusForce(), this.currentBarHeight);\n this.scene.renderer.add({\n type: Renderer_1.RenderingType.BLACK_BARS,\n layer: Renderer_1.RenderingLayer.BLACK_BARS,\n color: \"black\",\n height: this.barHeight,\n force\n });\n }\n drawBars(ctx, force = this.getFocusForce()) {\n force = Math.max(force, this.getFocusForce(), this.currentBarHeight);\n ctx.save();\n ctx.fillStyle = \"black\";\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n const f = 0.5 - 0.5 * Math.cos(Math.PI * force);\n const h = ctx.canvas.height * this.barHeight * f;\n ctx.fillRect(0, 0, ctx.canvas.width, h);\n ctx.fillRect(0, ctx.canvas.height - h, ctx.canvas.width, h);\n ctx.restore();\n }\n}\nexports.Camera = Camera;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvQ2FtZXJhLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL0NhbWVyYS50cz84OTUyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJvdW5kcyB9IGZyb20gXCIuL0VudGl0eVwiO1xyXG5pbXBvcnQgeyBjbGFtcCwgaXNEZXYsIHJuZCwgc2hpZnRWYWx1ZSB9IGZyb20gXCIuL3V0aWxcIjtcclxuaW1wb3J0IHsgRmlyZSB9IGZyb20gXCIuL2VudGl0aWVzL0ZpcmVcIjtcclxuaW1wb3J0IHsgR2FtZVNjZW5lIH0gZnJvbSBcIi4vc2NlbmVzL0dhbWVTY2VuZVwiO1xyXG5pbXBvcnQgeyBSZW5kZXJpbmdMYXllciwgUmVuZGVyaW5nVHlwZSB9IGZyb20gXCIuL1JlbmRlcmVyXCI7XHJcbmltcG9ydCB7IFZhbHVlQ3VydmUsIHZhbHVlQ3VydmVzIH0gZnJvbSBcIi4vUGFydGljbGVzXCI7XHJcbmltcG9ydCB7IFZlY3RvcjJMaWtlIH0gZnJvbSBcIi4vZ3JhcGhpY3MvVmVjdG9yMlwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDYW1Gb2N1cyB7XHJcbiAgICB4OiBudW1iZXI7XHJcbiAgICB5OiBudW1iZXI7XHJcbiAgICBkdXJhdGlvbjogbnVtYmVyO1xyXG4gICAgc3RhcnRUaW1lOiBudW1iZXI7XHJcbiAgICBlbmRUaW1lOiBudW1iZXI7XHJcbiAgICB6b29tOiBudW1iZXI7XHJcbiAgICByb3RhdGlvbjogbnVtYmVyO1xyXG4gICAgcHJvZ3Jlc3M6IG51bWJlcjtcclxuICAgIGRlYWQ6IGJvb2xlYW47XHJcbiAgICBmb3JjZTogbnVtYmVyO1xyXG4gICAgY3VydmU6IFZhbHVlQ3VydmU7XHJcbiAgICByZXNvbHZlPzogRnVuY3Rpb247XHJcbn1cclxuXHJcbmludGVyZmFjZSBSZWN0YW5nbGUge1xyXG4gICAgeDogbnVtYmVyO1xyXG4gICAgeTogbnVtYmVyO1xyXG4gICAgd2lkdGg6IG51bWJlcjtcclxuICAgIGhlaWdodDogbnVtYmVyO1xyXG59XHJcblxyXG50eXBlIE92ZXJCb3VuZERhdGEgPSB7XHJcbiAgICBsZWZ0OiBib29sZWFuO1xyXG4gICAgcmlnaHQ6IGJvb2xlYW47XHJcbiAgICB0b3A6IGJvb2xlYW47XHJcbiAgICBib3R0b206IGJvb2xlYW47XHJcbn07XHJcblxyXG5leHBvcnQgY2xhc3MgQ2FtZXJhIHtcclxuICAgIHB1YmxpYyB4ID0gMDtcclxuICAgIHB1YmxpYyB5ID0gMDtcclxuICAgIHB1YmxpYyB6b29tID0gMTtcclxuICAgIHB1YmxpYyByb3RhdGlvbiA9IDA7XHJcbiAgICBwcml2YXRlIGZvY3VzZXM6IENhbUZvY3VzW10gPSBbXTtcclxuICAgIHByaXZhdGUgdGltZSA9IDA7XHJcbiAgICBwcml2YXRlIGludGVycG9sYXRpb25UaW1lITogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSB6b29taW5nT3V0ID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGN1cnJlbnRCYXJUYXJnZXQgPSAwO1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50QmFySGVpZ2h0ID0gMDtcclxuICAgIHByaXZhdGUgYm91bmRzPzogQm91bmRzO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByb3RlY3RlZCBzY2VuZTogR2FtZVNjZW5lLCBwcml2YXRlIHRhcmdldDogVmVjdG9yMkxpa2UsIGludGVycG9sYXRpb25UaW1lID0gMC41LFxyXG4gICAgICAgIHByaXZhdGUgYmFySGVpZ2h0ID0gMC4xXHJcbiAgICApIHtcclxuICAgICAgICBpZiAoaW50ZXJwb2xhdGlvblRpbWUgPiAxKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbWVyYSBpbnRlcnBvbGF0aW9uIHRpbWUgbWF5IG5vdCBleGNlZWQgMVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaW50ZXJwb2xhdGlvblRpbWUgPSBpbnRlcnBvbGF0aW9uVGltZSAvIDI7XHJcblxyXG4gICAgICAgIGlmIChpc0RldigpKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRGV2IG1vZGUsIHByZXNzIOKAnFRhYuKAnSB0byB6b29tIG91dCAmIGNsaWNrIHNvbWV3aGVyZSB0byB0ZWxlcG9ydCB0aGVyZS5cIik7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuaGFuZGxlS2V5RG93bi5iaW5kKHRoaXMpKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIHRoaXMuaGFuZGxlS2V5VXAuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuZ2FtZS5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuaGFuZGxlQ2xpY2suYmluZCh0aGlzKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnRCYXJUYXJnZXQgPSAwO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEJhckhlaWdodCA9IDA7XHJcbiAgICAgICAgdGhpcy54ID0gdGFyZ2V0Lng7XHJcbiAgICAgICAgdGhpcy55ID0gdGFyZ2V0Lnk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEJvdW5kcyhib3VuZHM6IEJvdW5kcyB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYm91bmRzID0gYm91bmRzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRCb3VuZHMoKTogQm91bmRzIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ib3VuZHM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVLZXlEb3duKGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoZS5rZXkgPT09IFwiVGFiXCIpIHtcclxuICAgICAgICAgICAgaWYgKCFlLnJlcGVhdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy56b29taW5nT3V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZUtleVVwKGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoZS5rZXkgPT09IFwiVGFiXCIpIHtcclxuICAgICAgICAgICAgdGhpcy56b29taW5nT3V0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVDbGljayhlOiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuem9vbWluZ091dCkge1xyXG4gICAgICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5zY2VuZS5nYW1lLmNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgICAgY29uc3QgY3ggPSBlLmNsaWVudFggLSByZWN0LngsIGN5ID0gZS5jbGllbnRZIC0gcmVjdC55O1xyXG4gICAgICAgICAgICBjb25zdCBweCA9IGN4IC8gcmVjdC53aWR0aCwgcHkgPSBjeSAvIHJlY3QuaGVpZ2h0O1xyXG4gICAgICAgICAgICBjb25zdCB3b3JsZFJlY3QgPSB0aGlzLmdldFZpc2libGVSZWN0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHR4ID0gd29ybGRSZWN0LnggKyBweCAqIHdvcmxkUmVjdC53aWR0aCwgdHkgPSB3b3JsZFJlY3QueSArICgxIC0gcHkpICogd29ybGRSZWN0LmhlaWdodDtcclxuXHJcbiAgICAgICAgICAgIC8vIFRlbGVwb3J0IHBsYXllclxyXG4gICAgICAgICAgICB0aGlzLnNjZW5lLnBsYXllci54ID0gdHg7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUucGxheWVyLnkgPSB0eTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUucGxheWVyLnNldFZlbG9jaXR5KDAsIDApO1xyXG4gICAgICAgICAgICB0aGlzLnpvb21pbmdPdXQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFZpc2libGVSZWN0KHggPSB0aGlzLngsIHkgPSB0aGlzLnkpOiBSZWN0YW5nbGUge1xyXG4gICAgICAgIGNvbnN0IGNudiA9IHRoaXMuc2NlbmUuZ2FtZS5jYW52YXM7XHJcbiAgICAgICAgY29uc3QgY3cgPSBjbnYud2lkdGg7XHJcbiAgICAgICAgY29uc3QgY2ggPSBjbnYuaGVpZ2h0O1xyXG4gICAgICAgIGNvbnN0IG9mZnggPSBjdyAvIDIgLyB0aGlzLnpvb207XHJcbiAgICAgICAgY29uc3Qgb2ZmeSA9IGNoIC8gMiAvIHRoaXMuem9vbTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgeDogeCAtIG9mZngsXHJcbiAgICAgICAgICAgIHk6IHkgLSBvZmZ5LFxyXG4gICAgICAgICAgICB3aWR0aDogb2ZmeCAqIDIsXHJcbiAgICAgICAgICAgIGhlaWdodDogb2ZmeSAqIDJcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1BvaW50VmlzaWJsZSh4OiBudW1iZXIsIHk6IG51bWJlciwgcmFkaXVzID0gMCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHZpc2libGVSZWN0ID0gdGhpcy5nZXRWaXNpYmxlUmVjdCgpO1xyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB4ID49IHZpc2libGVSZWN0LnggLSByYWRpdXNcclxuICAgICAgICAgICAgJiYgeSA+PSB2aXNpYmxlUmVjdC55IC0gcmFkaXVzXHJcbiAgICAgICAgICAgICYmIHggPD0gdmlzaWJsZVJlY3QueCArIHZpc2libGVSZWN0LndpZHRoICsgcmFkaXVzXHJcbiAgICAgICAgICAgICYmIHkgPD0gdmlzaWJsZVJlY3QueSArIHZpc2libGVSZWN0LmhlaWdodCArIHJhZGl1c1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldENpbmVtYXRpY0Jhcih0YXJnZXQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEJhclRhcmdldCA9IHRhcmdldDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEJhc2VDYW1lcmFUYXJnZXQoKSB7XHJcbiAgICAgICAgLy8gQmFzZSBwb3NpdGlvbiBhbHdheXMgb24gdGFyZ2V0IChwbGF5ZXIpXHJcbiAgICAgICAgbGV0IHhUYXJnZXQgPSB0aGlzLnRhcmdldC54O1xyXG4gICAgICAgIGxldCB5VGFyZ2V0ID0gdGhpcy50YXJnZXQueSArIDMwO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5ib3VuZHMpIHtcclxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0VmlzaWJsZVJlY3QgPSB0aGlzLmdldFZpc2libGVSZWN0KHhUYXJnZXQsIHlUYXJnZXQpO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3ZlckJvdW5kczogT3ZlckJvdW5kRGF0YSA9IHtcclxuICAgICAgICAgICAgICAgIGxlZnQ6ICh0YXJnZXRWaXNpYmxlUmVjdC54IDwgdGhpcy5ib3VuZHMueCksXHJcbiAgICAgICAgICAgICAgICByaWdodDogKHRhcmdldFZpc2libGVSZWN0LnggKyB0YXJnZXRWaXNpYmxlUmVjdC53aWR0aCkgPiAodGhpcy5ib3VuZHMueCArIHRoaXMuYm91bmRzLndpZHRoKSxcclxuICAgICAgICAgICAgICAgIHRvcDogKHRhcmdldFZpc2libGVSZWN0LnkgKyB0YXJnZXRWaXNpYmxlUmVjdC5oZWlnaHQpID4gdGhpcy5ib3VuZHMueSxcclxuICAgICAgICAgICAgICAgIGJvdHRvbTogdGFyZ2V0VmlzaWJsZVJlY3QueSA8ICh0aGlzLmJvdW5kcy55IC0gdGhpcy5ib3VuZHMuaGVpZ2h0KVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgLy8gQm91bmQgY2xpcCBsZWZ0IC8gcmlnaHRcclxuICAgICAgICAgICAgaWYgKHRhcmdldFZpc2libGVSZWN0LndpZHRoID49IHRoaXMuYm91bmRzLndpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2aXNpYmxlQ2VudGVyWCA9IHRhcmdldFZpc2libGVSZWN0LnggKyB0YXJnZXRWaXNpYmxlUmVjdC53aWR0aCAvIDI7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZENlbnRlclggPSB0aGlzLmJvdW5kcy54ICsgdGhpcy5ib3VuZHMud2lkdGggLyAyO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGlmZiA9IGJvdW5kQ2VudGVyWCAtIHZpc2libGVDZW50ZXJYO1xyXG4gICAgICAgICAgICAgICAgeFRhcmdldCArPSBkaWZmO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG92ZXJCb3VuZHMubGVmdCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGlmZiA9IHRoaXMuYm91bmRzLnggLSB0YXJnZXRWaXNpYmxlUmVjdC54O1xyXG4gICAgICAgICAgICAgICAgeFRhcmdldCArPSBkaWZmO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG92ZXJCb3VuZHMucmlnaHQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSAodGhpcy5ib3VuZHMueCArIHRoaXMuYm91bmRzLndpZHRoKSAtICh0YXJnZXRWaXNpYmxlUmVjdC54ICsgdGFyZ2V0VmlzaWJsZVJlY3Qud2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgeFRhcmdldCArPSBkaWZmO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBCb3VuZCBjbGlwIHRvcCAvIGJvdHRvbVxyXG4gICAgICAgICAgICBpZiAodGFyZ2V0VmlzaWJsZVJlY3QuaGVpZ2h0ID49IHRoaXMuYm91bmRzLmhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmlzaWJsZUNlbnRlclkgPSAodGFyZ2V0VmlzaWJsZVJlY3QueSArIHRhcmdldFZpc2libGVSZWN0LmhlaWdodCkgLSB0YXJnZXRWaXNpYmxlUmVjdC5oZWlnaHQgLyAyO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYm91bmRDZW50ZXJZID0gdGhpcy5ib3VuZHMueSAtIHRoaXMuYm91bmRzLmhlaWdodCAvIDI7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaWZmID0gYm91bmRDZW50ZXJZIC0gdmlzaWJsZUNlbnRlclk7XHJcbiAgICAgICAgICAgICAgICB5VGFyZ2V0ICs9IGRpZmY7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3ZlckJvdW5kcy50b3ApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSB0aGlzLmJvdW5kcy55IC0gKHRhcmdldFZpc2libGVSZWN0LnkgKyB0YXJnZXRWaXNpYmxlUmVjdC5oZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgeVRhcmdldCArPSBkaWZmO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG92ZXJCb3VuZHMuYm90dG9tKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaWZmID0gKHRoaXMuYm91bmRzLnkgLSB0aGlzLmJvdW5kcy5oZWlnaHQpIC0gdGFyZ2V0VmlzaWJsZVJlY3QueTtcclxuICAgICAgICAgICAgICAgIHlUYXJnZXQgKz0gZGlmZjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgeDogeFRhcmdldCxcclxuICAgICAgICAgICAgeTogeVRhcmdldFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZShkdDogbnVtYmVyLCB0aW1lOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRpbWUgPSB0aW1lO1xyXG5cclxuICAgICAgICAvLyBCYXNlIHBvc2l0aW9uIGFsd2F5cyBvbiB0YXJnZXQgKHBsYXllcilcclxuICAgICAgICBjb25zdCBiYXNlQ2FtVGFyZ2V0ID0gdGhpcy5nZXRCYXNlQ2FtZXJhVGFyZ2V0KCk7XHJcbiAgICAgICAgdGhpcy54ID0gYmFzZUNhbVRhcmdldC54O1xyXG4gICAgICAgIHRoaXMueSA9IGJhc2VDYW1UYXJnZXQueTtcclxuXHJcbiAgICAgICAgLy8gQ2FtIFNoYWtlIGR1cmluZyBhcG9jYWx5cHNlXHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmUuZmlyZS5pc0FuZ3J5KCkgfHwgdGhpcy5zY2VuZS5hcG9jYWx5cHNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlBcG9jYWx5cHRpY1NoYWtlKHRoaXMuc2NlbmUuZmlyZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnpvb20gPSB0aGlzLnpvb21pbmdPdXQgPyAwLjIgOiAxO1xyXG4gICAgICAgIHRoaXMucm90YXRpb24gPSAwO1xyXG5cclxuICAgICAgICAvLyBPbiB0b3Agb2YgdGhhdCwgYXBwbHkgY2FtIGZvY3VzKGVzKVxyXG4gICAgICAgIGZvciAoY29uc3QgZm9jdXMgb2YgdGhpcy5mb2N1c2VzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQW5kQXBwbHlGb2N1cyhmb2N1cyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBEcm9wIGFueSBmb2N1cyB0aGF0IGlzIGRvbmVcclxuICAgICAgICB0aGlzLmZvY3VzZXMgPSB0aGlzLmZvY3VzZXMuZmlsdGVyKGYgPT4gIWYuZGVhZCk7XHJcbiAgICAgICAgLy8gVXBkYXRlIGJhciB0YXJnZXQgdG93YXJkcyBnb2FsXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QmFySGVpZ2h0ID0gc2hpZnRWYWx1ZSh0aGlzLmN1cnJlbnRCYXJIZWlnaHQsIHRoaXMuY3VycmVudEJhclRhcmdldCwgZHQgKiAxLjUpO1xyXG4gICAgICAgIC8vIFJlc2V0IGJhciB0byB2YW5pc2ggYXV0b21hdGljYWxseSBpZiBub3QgY29udGludW91c2x5IHNldCB0byAxXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QmFyVGFyZ2V0ID0gMDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFwcGx5QXBvY2FseXB0aWNTaGFrZShzaGFrZVNvdXJjZTogRmlyZSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGR4ID0gdGhpcy54IC0gc2hha2VTb3VyY2UueCwgZHkgPSB0aGlzLnkgLSBzaGFrZVNvdXJjZS55O1xyXG4gICAgICAgIGNvbnN0IGRpcyA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XHJcbiAgICAgICAgY29uc3QgbWF4RGlzID0gMjAwO1xyXG5cclxuICAgICAgICBpZiAoZGlzIDwgbWF4RGlzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVuc2l0eSA9IChzaGFrZVNvdXJjZS5pbnRlbnNpdHkgLSA1KSAvIDE1O1xyXG5cclxuICAgICAgICAgICAgaWYgKGludGVuc2l0eSA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNoYWtlID0gNSAqIGludGVuc2l0eSAqICgxIC0gZGlzIC8gbWF4RGlzKSAqICh0aGlzLnNjZW5lLnBsYXllci5wbGF5ZXJDb252ZXJzYXRpb24gPyAwLjUgOiAxKTtcclxuICAgICAgICAgICAgICAgIHRoaXMueCArPSBybmQoLTEsIDEpICogc2hha2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnkgKz0gcm5kKC0xLCAxKSAqIHNoYWtlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0cnVlIGlmIGNhbSB0YXJnZXQgKHBsYXllcikgY3VycmVudGx5IGhhcyBmdWxsIGF0dGVudGlvbiwgb3IgaXMgc2hvd2luZyBzb21ldGhpbmcgZWxzZSBmb3IgdGhlIG1vbWVudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGlzT25UYXJnZXQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9jdXNlcy5sZW5ndGggPT09IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHN0cmVuZ3RoIG9mIGNhbWVyYSBmb2N1cyBvbiBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgcGxheWVyLiBFLmcuIHdoZW4gY2FtZXJhIGZvY3VzZXMgb24gc29tZSBwbGFjZSB0b1xyXG4gICAgICogc2hvdyB0aGUgcGxheWVyLCB0aGUgZm9jdXMgZm9yY2Ugd2lsbCBiZSBiZXR3ZWVuIDAgYW5kIDEgZHVyaW5nIGludGVycG9sYXRpb24gYW5kIGV4YWN0bHkgMSB3aGlsZSBmdWxseSBmb2N1c2luZ1xyXG4gICAgICogb24gdGhhdCBzcG90LiBUaGlzIGUuZy4gY2FuIGJlIHVzZWQgZm9yIGNpbmVtYXRpYyBiYXJzIGF0IHRvcCBhbmQgYm90dG9tLCBzY2FsaW5nIHRoZWlyIGhlaWdodC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEZvY3VzRm9yY2UoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb2N1c2VzLnJlZHVjZSgoYSwgYikgPT4gTWF0aC5tYXgoYSwgYi5mb3JjZSksIDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhcHBseVRyYW5zZm9ybShjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6IHZvaWQge1xyXG4gICAgICAgIGN0eC5zY2FsZSh0aGlzLnpvb20sIHRoaXMuem9vbSk7XHJcbiAgICAgICAgY3R4LnJvdGF0ZSh0aGlzLnJvdGF0aW9uKTtcclxuICAgICAgICBjdHgudHJhbnNsYXRlKC10aGlzLngsIHRoaXMueSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGZvY3VzT24oXHJcbiAgICAgICAgZHVyYXRpb246IG51bWJlciwgeDogbnVtYmVyLCB5OiBudW1iZXIsIHpvb20gPSAxLCByb3RhdGlvbiA9IDAsXHJcbiAgICAgICAgY3VydmUgPSB2YWx1ZUN1cnZlcy5jb3ModGhpcy5pbnRlcnBvbGF0aW9uVGltZSlcclxuICAgICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGNvbnN0IGZvY3VzOiBDYW1Gb2N1cyA9IHtcclxuICAgICAgICAgICAgeCxcclxuICAgICAgICAgICAgeSxcclxuICAgICAgICAgICAgZHVyYXRpb24sXHJcbiAgICAgICAgICAgIHpvb20sXHJcbiAgICAgICAgICAgIHJvdGF0aW9uLFxyXG4gICAgICAgICAgICBzdGFydFRpbWU6IHRoaXMudGltZSxcclxuICAgICAgICAgICAgZW5kVGltZTogdGhpcy50aW1lICsgZHVyYXRpb24sXHJcbiAgICAgICAgICAgIHByb2dyZXNzOiAwLFxyXG4gICAgICAgICAgICBkZWFkOiBmYWxzZSxcclxuICAgICAgICAgICAgZm9yY2U6IDAsXHJcbiAgICAgICAgICAgIGN1cnZlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5mb2N1c2VzLnB1c2goZm9jdXMpO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBmb2N1cy5yZXNvbHZlID0gcmVzb2x2ZTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVBbmRBcHBseUZvY3VzKGZvY3VzKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlQW5kQXBwbHlGb2N1cyhmb2N1czogQ2FtRm9jdXMpOiB2b2lkIHtcclxuICAgICAgICBmb2N1cy5wcm9ncmVzcyA9IGNsYW1wKCh0aGlzLnRpbWUgLSBmb2N1cy5zdGFydFRpbWUpIC8gZm9jdXMuZHVyYXRpb24sIDAsIDEpO1xyXG4gICAgICAgIGZvY3VzLmRlYWQgPSAoZm9jdXMucHJvZ3Jlc3MgPj0gMSk7XHJcblxyXG4gICAgICAgIGlmICghZm9jdXMuZGVhZCkge1xyXG4gICAgICAgICAgICAvLyBGYWRlIGluIGFuZCBvdXQgb2YgZm9jdXMgdXNpbmcgZm9yY2UgbGVycGluZyBmcm9tIDAgdG8gMSBhbmQgYmFjayB0byAwIG92ZXIgdGltZVxyXG4gICAgICAgICAgICBjb25zdCBmb3JjZSA9IGZvY3VzLmZvcmNlID0gZm9jdXMuY3VydmUuZ2V0KGZvY3VzLnByb2dyZXNzKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEFwcGx5IHRvIGNhbWVyYSBzdGF0ZVxyXG4gICAgICAgICAgICBjb25zdCBmMSA9IDEgLSBmb3JjZTtcclxuICAgICAgICAgICAgdGhpcy54ID0gZjEgKiB0aGlzLnggKyBmb3JjZSAqIGZvY3VzLng7XHJcbiAgICAgICAgICAgIHRoaXMueSA9IGYxICogdGhpcy55ICsgZm9yY2UgKiBmb2N1cy55O1xyXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbFNpemUgPSAxIC8gdGhpcy56b29tLCB0YXJnZXRTaXplID0gMSAvIGZvY3VzLnpvb207XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTaXplID0gZjEgKiBvcmlnaW5hbFNpemUgKyBmb3JjZSAqIHRhcmdldFNpemU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnpvb20gPSAxIC8gY3VycmVudFNpemU7XHJcbiAgICAgICAgICAgIHRoaXMucm90YXRpb24gPSBmMSAqIHRoaXMucm90YXRpb24gKyBmb3JjZSAqIGZvY3VzLnJvdGF0aW9uO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChmb2N1cy5yZXNvbHZlKSB7XHJcbiAgICAgICAgICAgICAgICBmb2N1cy5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICBmb2N1cy5yZXNvbHZlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRDaW5lbWF0aWNCYXJzVG9SZW5kZXJlcihmb3JjZSA9IHRoaXMuZ2V0Rm9jdXNGb3JjZSgpKTogdm9pZCB7XHJcbiAgICAgICAgZm9yY2UgPSBNYXRoLm1heChmb3JjZSwgdGhpcy5nZXRGb2N1c0ZvcmNlKCksIHRoaXMuY3VycmVudEJhckhlaWdodCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUucmVuZGVyZXIuYWRkKHtcclxuICAgICAgICAgICAgdHlwZTogUmVuZGVyaW5nVHlwZS5CTEFDS19CQVJTLFxyXG4gICAgICAgICAgICBsYXllcjogUmVuZGVyaW5nTGF5ZXIuQkxBQ0tfQkFSUyxcclxuICAgICAgICAgICAgY29sb3I6IFwiYmxhY2tcIixcclxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmJhckhlaWdodCxcclxuICAgICAgICAgICAgZm9yY2VcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZHJhd0JhcnMoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIGZvcmNlID0gdGhpcy5nZXRGb2N1c0ZvcmNlKCkpOiB2b2lkIHtcclxuICAgICAgICBmb3JjZSA9IE1hdGgubWF4KGZvcmNlLCB0aGlzLmdldEZvY3VzRm9yY2UoKSwgdGhpcy5jdXJyZW50QmFySGVpZ2h0KTtcclxuICAgICAgICBjdHguc2F2ZSgpO1xyXG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBcImJsYWNrXCI7XHJcbiAgICAgICAgY3R4LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcclxuICAgICAgICBjb25zdCBmID0gMC41IC0gMC41ICogTWF0aC5jb3MoTWF0aC5QSSAqIGZvcmNlKTtcclxuICAgICAgICBjb25zdCBoID0gY3R4LmNhbnZhcy5oZWlnaHQgKiB0aGlzLmJhckhlaWdodCAqIGY7XHJcbiAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIGN0eC5jYW52YXMud2lkdGgsIGgpO1xyXG4gICAgICAgIGN0eC5maWxsUmVjdCgwLCBjdHguY2FudmFzLmhlaWdodCAtIGgsIGN0eC5jYW52YXMud2lkdGgsIGgpO1xyXG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XHJcbiAgICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFDQTtBQUdBO0FBQ0E7QUFnQ0E7QUFhQTtBQUNBO0FBQUE7QUFDQTtBQWRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE3U0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/Camera.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/Campaign.js":
|
|
/*!*************************!*\
|
|
!*** ./lib/Campaign.js ***!
|
|
\*************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Campaign = exports.VoiceAsset = exports.CharacterAsset = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst caveman1_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/caveman1.dialog.json */ \"./assets/dialog/caveman1.dialog.json\"));\nconst caveman2_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/caveman2.dialog.json */ \"./assets/dialog/caveman2.dialog.json\"));\nconst Conversation_1 = __webpack_require__(/*! ./Conversation */ \"./lib/Conversation.js\");\nconst Face_1 = __webpack_require__(/*! ./Face */ \"./lib/Face.js\");\nconst fire0_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/fire0.dialog.json */ \"./assets/dialog/fire0.dialog.json\"));\nconst fire1_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/fire1.dialog.json */ \"./assets/dialog/fire1.dialog.json\"));\nconst fire2_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/fire2.dialog.json */ \"./assets/dialog/fire2.dialog.json\"));\nconst fire3_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/fire3.dialog.json */ \"./assets/dialog/fire3.dialog.json\"));\nconst fire4_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/fire4.dialog.json */ \"./assets/dialog/fire4.dialog.json\"));\nconst flameboy1_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/flameboy1.dialog.json */ \"./assets/dialog/flameboy1.dialog.json\"));\nconst flameboy2_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/flameboy2.dialog.json */ \"./assets/dialog/flameboy2.dialog.json\"));\nconst flameboy3_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/flameboy3.dialog.json */ \"./assets/dialog/flameboy3.dialog.json\"));\nconst flameboy4_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/flameboy4.dialog.json */ \"./assets/dialog/flameboy4.dialog.json\"));\nconst powershiba2_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/powershiba2.dialog.json */ \"./assets/dialog/powershiba2.dialog.json\"));\nconst Quests_1 = __webpack_require__(/*! ./Quests */ \"./lib/Quests.js\");\nconst seed1_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/seed1.dialog.json */ \"./assets/dialog/seed1.dialog.json\"));\nconst shadowpresence1_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/shadowpresence1.dialog.json */ \"./assets/dialog/shadowpresence1.dialog.json\"));\nconst shiba1_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/shiba1.dialog.json */ \"./assets/dialog/shiba1.dialog.json\"));\nconst shiba2_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/shiba2.dialog.json */ \"./assets/dialog/shiba2.dialog.json\"));\nconst shiba3_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/shiba3.dialog.json */ \"./assets/dialog/shiba3.dialog.json\"));\nconst shiba4_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/shiba4.dialog.json */ \"./assets/dialog/shiba4.dialog.json\"));\nconst shiba5_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/shiba5.dialog.json */ \"./assets/dialog/shiba5.dialog.json\"));\nconst Signal_1 = __webpack_require__(/*! ./Signal */ \"./lib/Signal.js\");\nconst spider1_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/spider1.dialog.json */ \"./assets/dialog/spider1.dialog.json\"));\nconst stone1_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/stone1.dialog.json */ \"./assets/dialog/stone1.dialog.json\"));\nconst stone2_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/stone2.dialog.json */ \"./assets/dialog/stone2.dialog.json\"));\nconst stonedisciple1_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/stonedisciple1.dialog.json */ \"./assets/dialog/stonedisciple1.dialog.json\"));\nconst stonedisciple2_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/stonedisciple2.dialog.json */ \"./assets/dialog/stonedisciple2.dialog.json\"));\nconst tree0_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/tree0.dialog.json */ \"./assets/dialog/tree0.dialog.json\"));\nconst tree1_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/tree1.dialog.json */ \"./assets/dialog/tree1.dialog.json\"));\nconst tree2_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/tree2.dialog.json */ \"./assets/dialog/tree2.dialog.json\"));\nconst Particles_1 = __webpack_require__(/*! ./Particles */ \"./lib/Particles.js\");\nconst wing1_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/dialog/wing1.dialog.json */ \"./assets/dialog/wing1.dialog.json\"));\nconst allDialogs = {\n \"caveman1\": caveman1_dialog_json_1.default,\n \"caveman2\": caveman2_dialog_json_1.default,\n \"fire0\": fire0_dialog_json_1.default,\n \"fire1\": fire1_dialog_json_1.default,\n \"fire2\": fire2_dialog_json_1.default,\n \"fire3\": fire3_dialog_json_1.default,\n \"fire4\": fire4_dialog_json_1.default,\n \"stone1\": stone1_dialog_json_1.default,\n \"stone2\": stone2_dialog_json_1.default,\n \"stonedisciple1\": stonedisciple1_dialog_json_1.default,\n \"stonedisciple2\": stonedisciple2_dialog_json_1.default,\n \"seed1\": seed1_dialog_json_1.default,\n \"tree0\": tree0_dialog_json_1.default,\n \"tree1\": tree1_dialog_json_1.default,\n \"tree2\": tree2_dialog_json_1.default,\n \"shiba1\": shiba1_dialog_json_1.default,\n \"shiba2\": shiba2_dialog_json_1.default,\n \"shiba3\": shiba3_dialog_json_1.default,\n \"shiba4\": shiba4_dialog_json_1.default,\n \"shiba5\": shiba5_dialog_json_1.default,\n \"powershiba2\": powershiba2_dialog_json_1.default,\n \"spider1\": spider1_dialog_json_1.default,\n \"flameboy1\": flameboy1_dialog_json_1.default,\n \"flameboy2\": flameboy2_dialog_json_1.default,\n \"flameboy3\": flameboy3_dialog_json_1.default,\n \"flameboy4\": flameboy4_dialog_json_1.default,\n \"wing1\": wing1_dialog_json_1.default,\n \"shadowpresence1\": shadowpresence1_dialog_json_1.default,\n};\nvar CharacterAsset;\n(function (CharacterAsset) {\n CharacterAsset[CharacterAsset[\"FEMALE\"] = 0] = \"FEMALE\";\n CharacterAsset[CharacterAsset[\"MALE\"] = 1] = \"MALE\";\n CharacterAsset[CharacterAsset[\"PATIENT\"] = 2] = \"PATIENT\";\n})(CharacterAsset = exports.CharacterAsset || (exports.CharacterAsset = {}));\nvar VoiceAsset;\n(function (VoiceAsset) {\n VoiceAsset[VoiceAsset[\"FEMALE\"] = 0] = \"FEMALE\";\n VoiceAsset[VoiceAsset[\"MALE\"] = 1] = \"MALE\";\n})(VoiceAsset = exports.VoiceAsset || (exports.VoiceAsset = {}));\nclass Campaign {\n constructor(game) {\n this.game = game;\n this.onStatesChanged = new Signal_1.Signal();\n this.states = [\"start\"];\n this.quests = [\n new Quests_1.QuestA(this),\n new Quests_1.QuestB(this),\n new Quests_1.QuestC(this),\n new Quests_1.QuestD(this),\n new Quests_1.QuestE(this)\n ];\n this.selectedCharacter = CharacterAsset.FEMALE;\n this.selectedVoice = VoiceAsset.FEMALE;\n }\n getQuest(key) {\n const ending = this.quests.find(ending => ending.key === key);\n if (!ending)\n throw new Error(`Cannot find quest with key ${key}`);\n return ending;\n }\n toggleCharacterAsset() {\n this.selectedCharacter = this.selectedCharacter === CharacterAsset.MALE ? CharacterAsset.FEMALE : CharacterAsset.MALE;\n }\n toggleVoiceAsset() {\n this.selectedVoice = this.selectedVoice === VoiceAsset.MALE ? VoiceAsset.FEMALE : VoiceAsset.MALE;\n }\n /**\n * Init campaign. Assign Game Scene and enable all initial dialog trees\n * @param gameScene Game Scene\n */\n begin(gameScene) {\n this.gameScene = gameScene;\n // Rest quest progress\n this.quests.forEach(q => {\n q.reset();\n });\n this.getQuest(Quests_1.QuestKey.A).trigger(Quests_1.QuestATrigger.JUST_ARRIVED);\n // Setup initial NPC dialogs\n this.runAction(\"enable\", null, [\"caveman\", \"caveman1\"]);\n this.runAction(\"enable\", null, [\"fire\", \"fire0\"]);\n this.runAction(\"enable\", null, [\"tree\", \"tree0\"]);\n this.runAction(\"enable\", null, [\"stone\", \"stone1\"]);\n this.runAction(\"enable\", null, [\"stonedisciple\", \"stonedisciple1\"]);\n this.runAction(\"enable\", null, [\"flameboy\", \"flameboy1\"]);\n this.runAction(\"enable\", null, [\"wing\", \"wing1\"]);\n this.runAction(\"enable\", null, [\"spider\", \"spider1\"]);\n this.runAction(\"enable\", null, [\"shadowpresence\", \"shadowpresence1\"]);\n }\n hasState(state) {\n return this.states.includes(state);\n }\n setStates(states) {\n this.states = states;\n this.onStatesChanged.emit(this.states);\n }\n removeState(state) {\n if (this.hasState(state)) {\n this.states.splice(this.states.indexOf(state), 1);\n this.onStatesChanged.emit(this.states);\n }\n }\n addState(state) {\n if (!this.hasState(state)) {\n this.states.push(state);\n this.onStatesChanged.emit(this.states);\n }\n }\n /**\n * Run action is only allowed when active scene is GameScene\n * @param action - action string\n * @param npc - targeted npc\n * @param params - params consisting of string array\n */\n runAction(action, npc, params = []) {\n var _a, _b, _c, _d, _e;\n if (this.gameScene) {\n switch (action) {\n case \"angry\":\n (_a = npc === null || npc === void 0 ? void 0 : npc.face) === null || _a === void 0 ? void 0 : _a.setMode(Face_1.FaceModes.ANGRY);\n break;\n case \"neutral\":\n (_b = npc === null || npc === void 0 ? void 0 : npc.face) === null || _b === void 0 ? void 0 : _b.setMode(Face_1.FaceModes.NEUTRAL);\n break;\n case \"bored\":\n (_c = npc === null || npc === void 0 ? void 0 : npc.face) === null || _c === void 0 ? void 0 : _c.setMode(Face_1.FaceModes.BORED);\n break;\n case \"amused\":\n (_d = npc === null || npc === void 0 ? void 0 : npc.face) === null || _d === void 0 ? void 0 : _d.setMode(Face_1.FaceModes.AMUSED);\n break;\n case \"sad\":\n (_e = npc === null || npc === void 0 ? void 0 : npc.face) === null || _e === void 0 ? void 0 : _e.setMode(Face_1.FaceModes.SAD);\n break;\n case \"zoomin\":\n this.gameScene.camera.zoom += 1;\n break;\n case \"zoomout\":\n this.gameScene.camera.zoom -= 1;\n break;\n case \"treezoom\":\n const forestPointer = this.gameScene.pointsOfInterest.find(poi => poi.name === \"forest\");\n if (forestPointer) {\n this.gameScene.camera.focusOn(8, forestPointer.x, forestPointer.y, 1, 0, Particles_1.valueCurves.cos(0.35));\n }\n break;\n case \"mountainzoom\":\n const mountainPointer = this.gameScene.pointsOfInterest.find(poi => poi.name === \"mountain\");\n if (mountainPointer) {\n this.gameScene.camera.focusOn(8, mountainPointer.x, mountainPointer.y, 1, 0, Particles_1.valueCurves.cos(0.35));\n }\n break;\n case \"riverzoom\":\n const riverPointer = this.gameScene.pointsOfInterest.find(poi => poi.name === \"river\");\n if (riverPointer) {\n this.gameScene.camera.focusOn(8, riverPointer.x, riverPointer.y, 1, 0, Particles_1.valueCurves.cos(0.35));\n }\n break;\n case \"crazyzoom\":\n this.getQuest(Quests_1.QuestKey.A).trigger(Quests_1.QuestATrigger.APOCALYPSE_STARTED);\n const duration = 12;\n this.gameScene.camera.focusOn(duration, this.gameScene.fire.x, this.gameScene.fire.y + 15, 8, -2 * Math.PI, Particles_1.valueCurves.cubic).then(() => this.gameScene.beginApocalypse());\n this.gameScene.fire.conversation = null;\n this.gameScene.fireFuryEndTime = this.gameScene.gameTime + duration + 8;\n break;\n case \"friendshipEnding\":\n this.gameScene.beginFriendshipEnding();\n break;\n case \"activatefireportal\":\n this.gameScene.exitPortal.activate();\n this.gameScene.flameboy.nextState();\n break;\n case \"talkedtofire\":\n this.getQuest(Quests_1.QuestKey.A).trigger(Quests_1.QuestATrigger.TALKED_TO_FIRE);\n break;\n case \"giveWoodToFlameboy\":\n Conversation_1.Conversation.setGlobal(\"gaveWoodToFlameboy\", \"true\");\n this.gameScene.setGateDisabled(\"exitportaldoor_1\", false);\n this.gameScene.player.removeMultiJump();\n this.gameScene.removeGameObject(this.gameScene.fire);\n this.gameScene.removeGameObject(this.gameScene.shiba);\n this.gameScene.removeGameObject(this.gameScene.powerShiba);\n this.gameScene.removeGameObject(this.gameScene.bird);\n this.gameScene.removeGameObject(this.gameScene.shadowPresence);\n this.gameScene.removeGameObject(this.gameScene.tree);\n this.gameScene.removeGameObject(this.gameScene.wing);\n this.gameScene.removeGameObject(this.gameScene.mimic);\n this.gameScene.removeGameObject(this.gameScene.stone);\n this.gameScene.removeGameObject(this.gameScene.stoneDisciple);\n this.runAction(\"enable\", null, [\"flameboy\", \"flameboy3\"]);\n break;\n case \"giveBone\":\n Conversation_1.Conversation.setGlobal(\"gaveBoneToPowerShiba\", \"true\");\n this.runAction(\"enable\", null, [\"shiba\", \"shiba3\"]);\n this.runAction(\"enable\", null, [\"powershiba\", \"powershiba2\"]);\n break;\n case \"shibaNextState\":\n this.gameScene.shiba.nextState();\n break;\n case \"talkedtotree\":\n this.getQuest(Quests_1.QuestKey.A).trigger(Quests_1.QuestATrigger.TALKED_TO_TREE);\n break;\n case \"gotFireQuest\":\n this.getQuest(Quests_1.QuestKey.A).trigger(Quests_1.QuestATrigger.GOT_QUEST_FROM_FIRE);\n Conversation_1.Conversation.setGlobal(\"gotFireQuest\", \"true\");\n this.runAction(\"enable\", null, [\"tree\", \"tree1\"]);\n break;\n case \"endgameA\":\n this.getQuest(Quests_1.QuestKey.A).trigger(Quests_1.QuestATrigger.BEAT_GAME);\n this.getQuest(Quests_1.QuestKey.A).finish();\n this.gameScene.fire.conversation = null;\n this.gameScene.gameOver();\n break;\n case \"endgameB\":\n this.getQuest(Quests_1.QuestKey.B).finish();\n this.gameScene.fire.conversation = null;\n this.gameScene.gameOver();\n break;\n case \"endgameC\":\n this.getQuest(Quests_1.QuestKey.C).finish();\n this.gameScene.caveman.conversation = null;\n this.gameScene.gameOver();\n break;\n case \"game\":\n this.addState(params[0]);\n break;\n case \"enableRunning\":\n this.gameScene.player.enableRunning();\n break;\n case \"doublejump\":\n this.gameScene.player.enableDoubleJump();\n break;\n case \"multijump\":\n this.getQuest(Quests_1.QuestKey.A).trigger(Quests_1.QuestATrigger.GOT_MULTIJUMP);\n this.gameScene.player.enableMultiJump();\n break;\n case \"friendship\":\n this.gameScene.player.enableFriendship();\n break;\n case \"spawnseed\":\n this.gameScene.tree.spawnSeed();\n break;\n case \"spawnwood\":\n this.getQuest(Quests_1.QuestKey.A).trigger(Quests_1.QuestATrigger.TREE_DROPPED_WOOD);\n this.gameScene.tree.spawnWood();\n break;\n case \"talkedToStone\":\n if (this.getQuest(Quests_1.QuestKey.A).getHighestTriggerIndex() === Quests_1.QuestATrigger.PLANTED_SEED) {\n this.getQuest(Quests_1.QuestKey.A).trigger(Quests_1.QuestATrigger.TALKED_TO_STONE);\n }\n break;\n case \"pickupstone\":\n this.gameScene.stone.pickUp();\n break;\n case \"learnraindance\":\n this.gameScene.player.enableRainDance();\n break;\n case \"talkedToFireWithWood\":\n if (this.getQuest(Quests_1.QuestKey.A).getHighestTriggerIndex() === Quests_1.QuestATrigger.GOT_WOOD) {\n this.getQuest(Quests_1.QuestKey.A).trigger(Quests_1.QuestATrigger.TALKED_TO_FIRE_WITH_WOOD);\n }\n break;\n case \"dance\":\n setTimeout(() => {\n this.gameScene.player.startDance(+params[0] || 1);\n }, 500);\n break;\n case \"wakeupchest\":\n this.gameScene.mimic.nextState();\n break;\n case \"petDoggo\":\n this.gameScene.beginPetEnding();\n break;\n case \"lookThroughWindow\":\n this.gameScene.beginWindowEnding();\n break;\n case \"enable\":\n const char = params[0], dialogName = params[1];\n const npcMap = {\n \"fire\": this.gameScene.fire,\n \"stone\": this.gameScene.stone,\n \"stonedisciple\": this.gameScene.stoneDisciple,\n \"tree\": this.gameScene.tree,\n \"seed\": this.gameScene.seed,\n \"flameboy\": this.gameScene.flameboy,\n \"wing\": this.gameScene.wing,\n \"caveman\": this.gameScene.caveman,\n \"shadowpresence\": this.gameScene.shadowPresence,\n \"shiba\": this.gameScene.shiba,\n \"powershiba\": this.gameScene.powerShiba\n };\n const targetNpc = npcMap[char];\n const dialog = allDialogs[dialogName];\n if (targetNpc && dialog) {\n targetNpc.conversation = new Conversation_1.Conversation(dialog, targetNpc);\n }\n break;\n case \"disable\":\n const char1 = params[0];\n const npcMap1 = {\n \"fire\": this.gameScene.fire,\n \"stone\": this.gameScene.stone,\n \"stonedisciple\": this.gameScene.stoneDisciple,\n \"tree\": this.gameScene.tree,\n \"seed\": this.gameScene.seed,\n \"flameboy\": this.gameScene.flameboy,\n \"wing\": this.gameScene.wing,\n \"caveman\": this.gameScene.caveman,\n \"shadowpresence\": this.gameScene.shadowPresence,\n \"shiba\": this.gameScene.shiba,\n \"powershiba\": this.gameScene.powerShiba\n };\n const targetNpc1 = npcMap1[char1];\n if (targetNpc1) {\n targetNpc1.conversation = null;\n }\n break;\n }\n }\n }\n}\nexports.Campaign = Campaign;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvQ2FtcGFpZ24uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvQ2FtcGFpZ24udHM/MWU3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2F2ZW1hbjEgZnJvbSBcIi4uL2Fzc2V0cy9kaWFsb2cvY2F2ZW1hbjEuZGlhbG9nLmpzb25cIjtcclxuaW1wb3J0IGNhdmVtYW4yIGZyb20gXCIuLi9hc3NldHMvZGlhbG9nL2NhdmVtYW4yLmRpYWxvZy5qc29uXCI7XHJcbmltcG9ydCB7IENvbnZlcnNhdGlvbiB9IGZyb20gXCIuL0NvbnZlcnNhdGlvblwiO1xyXG5pbXBvcnQgdHlwZSB7IERpYWxvZ0pTT04gfSBmcm9tIFwiKi5kaWFsb2cuanNvblwiO1xyXG5pbXBvcnQgeyBGYWNlTW9kZXMgfSBmcm9tIFwiLi9GYWNlXCI7XHJcbmltcG9ydCBmaXJlMCBmcm9tIFwiLi4vYXNzZXRzL2RpYWxvZy9maXJlMC5kaWFsb2cuanNvblwiO1xyXG5pbXBvcnQgZmlyZTEgZnJvbSBcIi4uL2Fzc2V0cy9kaWFsb2cvZmlyZTEuZGlhbG9nLmpzb25cIjtcclxuaW1wb3J0IGZpcmUyIGZyb20gXCIuLi9hc3NldHMvZGlhbG9nL2ZpcmUyLmRpYWxvZy5qc29uXCI7XHJcbmltcG9ydCBmaXJlMyBmcm9tIFwiLi4vYXNzZXRzL2RpYWxvZy9maXJlMy5kaWFsb2cuanNvblwiO1xyXG5pbXBvcnQgZmlyZTQgZnJvbSBcIi4uL2Fzc2V0cy9kaWFsb2cvZmlyZTQuZGlhbG9nLmpzb25cIjtcclxuaW1wb3J0IGZsYW1lYm95MSBmcm9tIFwiLi4vYXNzZXRzL2RpYWxvZy9mbGFtZWJveTEuZGlhbG9nLmpzb25cIjtcclxuaW1wb3J0IGZsYW1lYm95MiBmcm9tIFwiLi4vYXNzZXRzL2RpYWxvZy9mbGFtZWJveTIuZGlhbG9nLmpzb25cIjtcclxuaW1wb3J0IGZsYW1lYm95MyBmcm9tIFwiLi4vYXNzZXRzL2RpYWxvZy9mbGFtZWJveTMuZGlhbG9nLmpzb25cIjtcclxuaW1wb3J0IGZsYW1lYm95NCBmcm9tIFwiLi4vYXNzZXRzL2RpYWxvZy9mbGFtZWJveTQuZGlhbG9nLmpzb25cIjtcclxuaW1wb3J0IHsgR2FtZSB9IGZyb20gXCIuL0dhbWVcIjtcclxuaW1wb3J0IHsgR2FtZVNjZW5lIH0gZnJvbSBcIi4vc2NlbmVzL0dhbWVTY2VuZVwiO1xyXG5pbXBvcnQgeyBOUEMgfSBmcm9tIFwiLi9lbnRpdGllcy9OUENcIjtcclxuaW1wb3J0IHBvd2Vyc2hpYmEyIGZyb20gXCIuLi9hc3NldHMvZGlhbG9nL3Bvd2Vyc2hpYmEyLmRpYWxvZy5qc29uXCI7XHJcbmltcG9ydCB7IFF1ZXN0LCBRdWVzdEEsIFF1ZXN0QVRyaWdnZXIsIFF1ZXN0QiwgUXVlc3RLZXksIFF1ZXN0QywgUXVlc3RELCBRdWVzdEUgfSBmcm9tIFwiLi9RdWVzdHNcIjtcclxuaW1wb3J0IHNlZWQxIGZyb20gXCIuLi9hc3NldHMvZGlhbG9nL3NlZWQxLmRpYWxvZy5qc29uXCI7XHJcbmltcG9ydCBzaGFkb3dwcmVzZW5jZTEgZnJvbSBcIi4uL2Fzc2V0cy9kaWFsb2cvc2hhZG93cHJlc2VuY2UxLmRpYWxvZy5qc29uXCI7XHJcbmltcG9ydCBzaGliYTEgZnJvbSBcIi4uL2Fzc2V0cy9kaWFsb2cvc2hpYmExLmRpYWxvZy5qc29uXCI7XHJcbmltcG9ydCBzaGliYTIgZnJvbSBcIi4uL2Fzc2V0cy9kaWFsb2cvc2hpYmEyLmRpYWxvZy5qc29uXCI7XHJcbmltcG9ydCBzaGliYTMgZnJvbSBcIi4uL2Fzc2V0cy9kaWFsb2cvc2hpYmEzLmRpYWxvZy5qc29uXCI7XHJcbmltcG9ydCBzaGliYTQgZnJvbSBcIi4uL2Fzc2V0cy9kaWFsb2cvc2hpYmE0LmRpYWxvZy5qc29uXCI7XHJcbmltcG9ydCBzaGliYTUgZnJvbSBcIi4uL2Fzc2V0cy9kaWFsb2cvc2hpYmE1LmRpYWxvZy5qc29uXCI7XHJcbmltcG9ydCB7IFNpZ25hbCB9IGZyb20gXCIuL1NpZ25hbFwiO1xyXG5pbXBvcnQgc3BpZGVyMSBmcm9tIFwiLi4vYXNzZXRzL2RpYWxvZy9zcGlkZXIxLmRpYWxvZy5qc29uXCI7XHJcbmltcG9ydCBzdG9uZTEgZnJvbSBcIi4uL2Fzc2V0cy9kaWFsb2cvc3RvbmUxLmRpYWxvZy5qc29uXCI7XHJcbmltcG9ydCBzdG9uZTIgZnJvbSBcIi4uL2Fzc2V0cy9kaWFsb2cvc3RvbmUyLmRpYWxvZy5qc29uXCI7XHJcbmltcG9ydCBzdG9uZWRpc2NpcGxlMSBmcm9tIFwiLi4vYXNzZXRzL2RpYWxvZy9zdG9uZWRpc2NpcGxlMS5kaWFsb2cuanNvblwiO1xyXG5pbXBvcnQgc3RvbmVkaXNjaXBsZTIgZnJvbSBcIi4uL2Fzc2V0cy9kaWFsb2cvc3RvbmVkaXNjaXBsZTIuZGlhbG9nLmpzb25cIjtcclxuaW1wb3J0IHRyZWUwIGZyb20gXCIuLi9hc3NldHMvZGlhbG9nL3RyZWUwLmRpYWxvZy5qc29uXCI7XHJcbmltcG9ydCB0cmVlMSBmcm9tIFwiLi4vYXNzZXRzL2RpYWxvZy90cmVlMS5kaWFsb2cuanNvblwiO1xyXG5pbXBvcnQgdHJlZTIgZnJvbSBcIi4uL2Fzc2V0cy9kaWFsb2cvdHJlZTIuZGlhbG9nLmpzb25cIjtcclxuaW1wb3J0IHsgdmFsdWVDdXJ2ZXMgfSBmcm9tIFwiLi9QYXJ0aWNsZXNcIjtcclxuaW1wb3J0IHdpbmcxIGZyb20gXCIuLi9hc3NldHMvZGlhbG9nL3dpbmcxLmRpYWxvZy5qc29uXCI7XHJcblxyXG5leHBvcnQgdHlwZSBDYW1wYWlnblN0YXRlID0gXCJzdGFydFwiIHwgXCJmaW5pc2hlZFwiO1xyXG5cclxuY29uc3QgYWxsRGlhbG9nczogUmVjb3JkPHN0cmluZywgRGlhbG9nSlNPTj4gPSB7XHJcbiAgICBcImNhdmVtYW4xXCI6IGNhdmVtYW4xLFxyXG4gICAgXCJjYXZlbWFuMlwiOiBjYXZlbWFuMixcclxuICAgIFwiZmlyZTBcIjogZmlyZTAsXHJcbiAgICBcImZpcmUxXCI6IGZpcmUxLFxyXG4gICAgXCJmaXJlMlwiOiBmaXJlMixcclxuICAgIFwiZmlyZTNcIjogZmlyZTMsXHJcbiAgICBcImZpcmU0XCI6IGZpcmU0LFxyXG4gICAgXCJzdG9uZTFcIjogc3RvbmUxLFxyXG4gICAgXCJzdG9uZTJcIjogc3RvbmUyLFxyXG4gICAgXCJzdG9uZWRpc2NpcGxlMVwiOiBzdG9uZWRpc2NpcGxlMSxcclxuICAgIFwic3RvbmVkaXNjaXBsZTJcIjogc3RvbmVkaXNjaXBsZTIsXHJcbiAgICBcInNlZWQxXCI6IHNlZWQxLFxyXG4gICAgXCJ0cmVlMFwiOiB0cmVlMCxcclxuICAgIFwidHJlZTFcIjogdHJlZTEsXHJcbiAgICBcInRyZWUyXCI6IHRyZWUyLFxyXG4gICAgXCJzaGliYTFcIjogc2hpYmExLFxyXG4gICAgXCJzaGliYTJcIjogc2hpYmEyLFxyXG4gICAgXCJzaGliYTNcIjogc2hpYmEzLFxyXG4gICAgXCJzaGliYTRcIjogc2hpYmE0LFxyXG4gICAgXCJzaGliYTVcIjogc2hpYmE1LFxyXG4gICAgXCJwb3dlcnNoaWJhMlwiOiBwb3dlcnNoaWJhMixcclxuICAgIFwic3BpZGVyMVwiOiBzcGlkZXIxLFxyXG4gICAgXCJmbGFtZWJveTFcIjogZmxhbWVib3kxLFxyXG4gICAgXCJmbGFtZWJveTJcIjogZmxhbWVib3kyLFxyXG4gICAgXCJmbGFtZWJveTNcIjogZmxhbWVib3kzLFxyXG4gICAgXCJmbGFtZWJveTRcIjogZmxhbWVib3k0LFxyXG4gICAgXCJ3aW5nMVwiOiB3aW5nMSxcclxuICAgIFwic2hhZG93cHJlc2VuY2UxXCI6IHNoYWRvd3ByZXNlbmNlMSxcclxufTtcclxuXHJcbmV4cG9ydCBlbnVtIENoYXJhY3RlckFzc2V0IHtcclxuICAgIEZFTUFMRSwgTUFMRSwgUEFUSUVOVFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBWb2ljZUFzc2V0IHtcclxuICAgIEZFTUFMRSwgTUFMRVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ2FtcGFpZ24ge1xyXG4gICAgcHVibGljIG9uU3RhdGVzQ2hhbmdlZCA9IG5ldyBTaWduYWw8Q2FtcGFpZ25TdGF0ZVtdPigpO1xyXG4gICAgcHVibGljIHN0YXRlczogQ2FtcGFpZ25TdGF0ZVtdID0gW1wic3RhcnRcIl07XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcXVlc3RzID0gW1xyXG4gICAgICAgIG5ldyBRdWVzdEEodGhpcyksXHJcbiAgICAgICAgbmV3IFF1ZXN0Qih0aGlzKSxcclxuICAgICAgICBuZXcgUXVlc3RDKHRoaXMpLFxyXG4gICAgICAgIG5ldyBRdWVzdEQodGhpcyksXHJcbiAgICAgICAgbmV3IFF1ZXN0RSh0aGlzKVxyXG4gICAgXTtcclxuICAgIHB1YmxpYyBnYW1lU2NlbmU/OiBHYW1lU2NlbmUgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgcHVibGljIHNlbGVjdGVkQ2hhcmFjdGVyID0gQ2hhcmFjdGVyQXNzZXQuRkVNQUxFO1xyXG4gICAgcHVibGljIHNlbGVjdGVkVm9pY2UgPSBWb2ljZUFzc2V0LkZFTUFMRTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZ2FtZTogR2FtZSkge31cclxuXHJcbiAgICBwdWJsaWMgZ2V0UXVlc3Qoa2V5OiBRdWVzdEtleSk6IFF1ZXN0IHtcclxuICAgICAgICBjb25zdCBlbmRpbmcgPSB0aGlzLnF1ZXN0cy5maW5kKGVuZGluZyA9PiBlbmRpbmcua2V5ID09PSBrZXkpO1xyXG4gICAgICAgIGlmICghZW5kaW5nKSB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHF1ZXN0IHdpdGgga2V5ICR7a2V5fWApO1xyXG4gICAgICAgIHJldHVybiBlbmRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvZ2dsZUNoYXJhY3RlckFzc2V0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDaGFyYWN0ZXIgPSB0aGlzLnNlbGVjdGVkQ2hhcmFjdGVyID09PSBDaGFyYWN0ZXJBc3NldC5NQUxFID8gQ2hhcmFjdGVyQXNzZXQuRkVNQUxFIDogQ2hhcmFjdGVyQXNzZXQuTUFMRTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdG9nZ2xlVm9pY2VBc3NldCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVm9pY2UgPSB0aGlzLnNlbGVjdGVkVm9pY2UgPT09IFZvaWNlQXNzZXQuTUFMRSA/IFZvaWNlQXNzZXQuRkVNQUxFIDogVm9pY2VBc3NldC5NQUxFO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdCBjYW1wYWlnbi4gQXNzaWduIEdhbWUgU2NlbmUgYW5kIGVuYWJsZSBhbGwgaW5pdGlhbCBkaWFsb2cgdHJlZXNcclxuICAgICAqIEBwYXJhbSBnYW1lU2NlbmUgR2FtZSBTY2VuZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYmVnaW4oZ2FtZVNjZW5lOiBHYW1lU2NlbmUpIHtcclxuICAgICAgICB0aGlzLmdhbWVTY2VuZSA9IGdhbWVTY2VuZTtcclxuXHJcbiAgICAgICAgLy8gUmVzdCBxdWVzdCBwcm9ncmVzc1xyXG4gICAgICAgIHRoaXMucXVlc3RzLmZvckVhY2gocSA9PiB7XHJcbiAgICAgICAgICAgIHEucmVzZXQoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRRdWVzdChRdWVzdEtleS5BKS50cmlnZ2VyKFF1ZXN0QVRyaWdnZXIuSlVTVF9BUlJJVkVEKTtcclxuXHJcbiAgICAgICAgLy8gU2V0dXAgaW5pdGlhbCBOUEMgZGlhbG9nc1xyXG4gICAgICAgIHRoaXMucnVuQWN0aW9uKFwiZW5hYmxlXCIsIG51bGwsIFtcImNhdmVtYW5cIiwgXCJjYXZlbWFuMVwiXSk7XHJcbiAgICAgICAgdGhpcy5ydW5BY3Rpb24oXCJlbmFibGVcIiwgbnVsbCwgW1wiZmlyZVwiLCBcImZpcmUwXCJdKTtcclxuICAgICAgICB0aGlzLnJ1bkFjdGlvbihcImVuYWJsZVwiLCBudWxsLCBbXCJ0cmVlXCIsIFwidHJlZTBcIl0pO1xyXG4gICAgICAgIHRoaXMucnVuQWN0aW9uKFwiZW5hYmxlXCIsIG51bGwsIFtcInN0b25lXCIsIFwic3RvbmUxXCJdKTtcclxuICAgICAgICB0aGlzLnJ1bkFjdGlvbihcImVuYWJsZVwiLCBudWxsLCBbXCJzdG9uZWRpc2NpcGxlXCIsIFwic3RvbmVkaXNjaXBsZTFcIl0pO1xyXG4gICAgICAgIHRoaXMucnVuQWN0aW9uKFwiZW5hYmxlXCIsIG51bGwsIFtcImZsYW1lYm95XCIsIFwiZmxhbWVib3kxXCJdKTtcclxuICAgICAgICB0aGlzLnJ1bkFjdGlvbihcImVuYWJsZVwiLCBudWxsLCBbXCJ3aW5nXCIsIFwid2luZzFcIl0pO1xyXG4gICAgICAgIHRoaXMucnVuQWN0aW9uKFwiZW5hYmxlXCIsIG51bGwsIFtcInNwaWRlclwiLCBcInNwaWRlcjFcIl0pO1xyXG4gICAgICAgIHRoaXMucnVuQWN0aW9uKFwiZW5hYmxlXCIsIG51bGwsIFtcInNoYWRvd3ByZXNlbmNlXCIsIFwic2hhZG93cHJlc2VuY2UxXCJdKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFzU3RhdGUoc3RhdGU6IENhbXBhaWduU3RhdGUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZXMuaW5jbHVkZXMoc3RhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRTdGF0ZXMoc3RhdGVzOiBDYW1wYWlnblN0YXRlW10pIHtcclxuICAgICAgICB0aGlzLnN0YXRlcyA9IHN0YXRlcztcclxuICAgICAgICB0aGlzLm9uU3RhdGVzQ2hhbmdlZC5lbWl0KHRoaXMuc3RhdGVzKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlU3RhdGUoc3RhdGU6IENhbXBhaWduU3RhdGUpIHtcclxuICAgICAgICBpZiAodGhpcy5oYXNTdGF0ZShzdGF0ZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZXMuc3BsaWNlKHRoaXMuc3RhdGVzLmluZGV4T2Yoc3RhdGUpLCAxKTtcclxuICAgICAgICAgICAgdGhpcy5vblN0YXRlc0NoYW5nZWQuZW1pdCh0aGlzLnN0YXRlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRTdGF0ZShzdGF0ZTogQ2FtcGFpZ25TdGF0ZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNTdGF0ZShzdGF0ZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZXMucHVzaChzdGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMub25TdGF0ZXNDaGFuZ2VkLmVtaXQodGhpcy5zdGF0ZXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJ1biBhY3Rpb24gaXMgb25seSBhbGxvd2VkIHdoZW4gYWN0aXZlIHNjZW5lIGlzIEdhbWVTY2VuZVxyXG4gICAgICogQHBhcmFtIGFjdGlvbiAtIGFjdGlvbiBzdHJpbmdcclxuICAgICAqIEBwYXJhbSBucGMgICAgLSB0YXJnZXRlZCBucGNcclxuICAgICAqIEBwYXJhbSBwYXJhbXMgLSBwYXJhbXMgY29uc2lzdGluZyBvZiBzdHJpbmcgYXJyYXlcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJ1bkFjdGlvbihhY3Rpb246IHN0cmluZywgbnBjPzogTlBDIHwgbnVsbCwgcGFyYW1zOiBzdHJpbmdbXSA9IFtdKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2FtZVNjZW5lKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiYW5ncnlcIjpcclxuICAgICAgICAgICAgICAgICAgICBucGM/LmZhY2U/LnNldE1vZGUoRmFjZU1vZGVzLkFOR1JZKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJuZXV0cmFsXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgbnBjPy5mYWNlPy5zZXRNb2RlKEZhY2VNb2Rlcy5ORVVUUkFMKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJib3JlZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIG5wYz8uZmFjZT8uc2V0TW9kZShGYWNlTW9kZXMuQk9SRUQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcImFtdXNlZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIG5wYz8uZmFjZT8uc2V0TW9kZShGYWNlTW9kZXMuQU1VU0VEKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJzYWRcIjpcclxuICAgICAgICAgICAgICAgICAgICBucGM/LmZhY2U/LnNldE1vZGUoRmFjZU1vZGVzLlNBRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiem9vbWluXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nYW1lU2NlbmUuY2FtZXJhLnpvb20gKz0gMTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJ6b29tb3V0XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nYW1lU2NlbmUuY2FtZXJhLnpvb20gLT0gMTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJ0cmVlem9vbVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcmVzdFBvaW50ZXIgPSB0aGlzLmdhbWVTY2VuZS5wb2ludHNPZkludGVyZXN0LmZpbmQocG9pID0+IHBvaS5uYW1lID09PSBcImZvcmVzdFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcmVzdFBvaW50ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nYW1lU2NlbmUuY2FtZXJhLmZvY3VzT24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZXN0UG9pbnRlci54LCBmb3Jlc3RQb2ludGVyLnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlQ3VydmVzLmNvcygwLjM1KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwibW91bnRhaW56b29tXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW91bnRhaW5Qb2ludGVyID0gdGhpcy5nYW1lU2NlbmUucG9pbnRzT2ZJbnRlcmVzdC5maW5kKHBvaSA9PiBwb2kubmFtZSA9PT0gXCJtb3VudGFpblwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vdW50YWluUG9pbnRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdhbWVTY2VuZS5jYW1lcmEuZm9jdXNPbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VudGFpblBvaW50ZXIueCwgbW91bnRhaW5Qb2ludGVyLnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlQ3VydmVzLmNvcygwLjM1KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwicml2ZXJ6b29tXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcml2ZXJQb2ludGVyID0gdGhpcy5nYW1lU2NlbmUucG9pbnRzT2ZJbnRlcmVzdC5maW5kKHBvaSA9PiBwb2kubmFtZSA9PT0gXCJyaXZlclwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJpdmVyUG9pbnRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdhbWVTY2VuZS5jYW1lcmEuZm9jdXNPbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByaXZlclBvaW50ZXIueCwgcml2ZXJQb2ludGVyLnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlQ3VydmVzLmNvcygwLjM1KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiY3Jhenl6b29tXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRRdWVzdChRdWVzdEtleS5BKS50cmlnZ2VyKFF1ZXN0QVRyaWdnZXIuQVBPQ0FMWVBTRV9TVEFSVEVEKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IDEyO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdhbWVTY2VuZS5jYW1lcmEuZm9jdXNPbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FtZVNjZW5lLmZpcmUueCwgdGhpcy5nYW1lU2NlbmUuZmlyZS55ICsgMTUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC0yICogTWF0aC5QSSwgdmFsdWVDdXJ2ZXMuY3ViaWNcclxuICAgICAgICAgICAgICAgICAgICApLnRoZW4oKCkgPT4gdGhpcy5nYW1lU2NlbmUhLmJlZ2luQXBvY2FseXBzZSgpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nYW1lU2NlbmUuZmlyZS5jb252ZXJzYXRpb24gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FtZVNjZW5lLmZpcmVGdXJ5RW5kVGltZSA9IHRoaXMuZ2FtZVNjZW5lLmdhbWVUaW1lICsgZHVyYXRpb24gKyA4O1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcImZyaWVuZHNoaXBFbmRpbmdcIjpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdhbWVTY2VuZS5iZWdpbkZyaWVuZHNoaXBFbmRpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJhY3RpdmF0ZWZpcmVwb3J0YWxcIjpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdhbWVTY2VuZS5leGl0UG9ydGFsLmFjdGl2YXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nYW1lU2NlbmUuZmxhbWVib3kubmV4dFN0YXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwidGFsa2VkdG9maXJlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRRdWVzdChRdWVzdEtleS5BKS50cmlnZ2VyKFF1ZXN0QVRyaWdnZXIuVEFMS0VEX1RPX0ZJUkUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcImdpdmVXb29kVG9GbGFtZWJveVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIENvbnZlcnNhdGlvbi5zZXRHbG9iYWwoXCJnYXZlV29vZFRvRmxhbWVib3lcIiwgXCJ0cnVlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FtZVNjZW5lLnNldEdhdGVEaXNhYmxlZChcImV4aXRwb3J0YWxkb29yXzFcIiwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FtZVNjZW5lLnBsYXllci5yZW1vdmVNdWx0aUp1bXAoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdhbWVTY2VuZS5yZW1vdmVHYW1lT2JqZWN0KHRoaXMuZ2FtZVNjZW5lLmZpcmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FtZVNjZW5lLnJlbW92ZUdhbWVPYmplY3QodGhpcy5nYW1lU2NlbmUuc2hpYmEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FtZVNjZW5lLnJlbW92ZUdhbWVPYmplY3QodGhpcy5nYW1lU2NlbmUucG93ZXJTaGliYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nYW1lU2NlbmUucmVtb3ZlR2FtZU9iamVjdCh0aGlzLmdhbWVTY2VuZS5iaXJkKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdhbWVTY2VuZS5yZW1vdmVHYW1lT2JqZWN0KHRoaXMuZ2FtZVNjZW5lLnNoYWRvd1ByZXNlbmNlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdhbWVTY2VuZS5yZW1vdmVHYW1lT2JqZWN0KHRoaXMuZ2FtZVNjZW5lLnRyZWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FtZVNjZW5lLnJlbW92ZUdhbWVPYmplY3QodGhpcy5nYW1lU2NlbmUud2luZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nYW1lU2NlbmUucmVtb3ZlR2FtZU9iamVjdCh0aGlzLmdhbWVTY2VuZS5taW1pYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nYW1lU2NlbmUucmVtb3ZlR2FtZU9iamVjdCh0aGlzLmdhbWVTY2VuZS5zdG9uZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nYW1lU2NlbmUucmVtb3ZlR2FtZU9iamVjdCh0aGlzLmdhbWVTY2VuZS5zdG9uZURpc2NpcGxlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ydW5BY3Rpb24oXCJlbmFibGVcIiwgbnVsbCwgW1wiZmxhbWVib3lcIiwgXCJmbGFtZWJveTNcIl0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcImdpdmVCb25lXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgQ29udmVyc2F0aW9uLnNldEdsb2JhbChcImdhdmVCb25lVG9Qb3dlclNoaWJhXCIsIFwidHJ1ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJ1bkFjdGlvbihcImVuYWJsZVwiLCBudWxsLCBbXCJzaGliYVwiLCBcInNoaWJhM1wiXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ydW5BY3Rpb24oXCJlbmFibGVcIiwgbnVsbCwgW1wicG93ZXJzaGliYVwiLCBcInBvd2Vyc2hpYmEyXCJdKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJzaGliYU5leHRTdGF0ZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FtZVNjZW5lLnNoaWJhLm5leHRTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcInRhbGtlZHRvdHJlZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0UXVlc3QoUXVlc3RLZXkuQSkudHJpZ2dlcihRdWVzdEFUcmlnZ2VyLlRBTEtFRF9UT19UUkVFKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJnb3RGaXJlUXVlc3RcIjpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFF1ZXN0KFF1ZXN0S2V5LkEpLnRyaWdnZXIoUXVlc3RBVHJpZ2dlci5HT1RfUVVFU1RfRlJPTV9GSVJFKTtcclxuICAgICAgICAgICAgICAgICAgICBDb252ZXJzYXRpb24uc2V0R2xvYmFsKFwiZ290RmlyZVF1ZXN0XCIsIFwidHJ1ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJ1bkFjdGlvbihcImVuYWJsZVwiLCBudWxsLCBbXCJ0cmVlXCIsIFwidHJlZTFcIl0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcImVuZGdhbWVBXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRRdWVzdChRdWVzdEtleS5BKS50cmlnZ2VyKFF1ZXN0QVRyaWdnZXIuQkVBVF9HQU1FKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFF1ZXN0KFF1ZXN0S2V5LkEpLmZpbmlzaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FtZVNjZW5lLmZpcmUuY29udmVyc2F0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdhbWVTY2VuZS5nYW1lT3ZlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcImVuZGdhbWVCXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRRdWVzdChRdWVzdEtleS5CKS5maW5pc2goKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdhbWVTY2VuZS5maXJlLmNvbnZlcnNhdGlvbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nYW1lU2NlbmUuZ2FtZU92ZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJlbmRnYW1lQ1wiOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0UXVlc3QoUXVlc3RLZXkuQykuZmluaXNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nYW1lU2NlbmUuY2F2ZW1hbi5jb252ZXJzYXRpb24gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FtZVNjZW5lLmdhbWVPdmVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiZ2FtZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkU3RhdGUocGFyYW1zWzBdIGFzIGFueSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiZW5hYmxlUnVubmluZ1wiOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FtZVNjZW5lLnBsYXllci5lbmFibGVSdW5uaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiZG91YmxlanVtcFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FtZVNjZW5lLnBsYXllci5lbmFibGVEb3VibGVKdW1wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwibXVsdGlqdW1wXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRRdWVzdChRdWVzdEtleS5BKS50cmlnZ2VyKFF1ZXN0QVRyaWdnZXIuR09UX01VTFRJSlVNUCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nYW1lU2NlbmUucGxheWVyLmVuYWJsZU11bHRpSnVtcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcImZyaWVuZHNoaXBcIjpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdhbWVTY2VuZS5wbGF5ZXIuZW5hYmxlRnJpZW5kc2hpcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcInNwYXduc2VlZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FtZVNjZW5lLnRyZWUuc3Bhd25TZWVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwic3Bhd253b29kXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRRdWVzdChRdWVzdEtleS5BKS50cmlnZ2VyKFF1ZXN0QVRyaWdnZXIuVFJFRV9EUk9QUEVEX1dPT0QpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FtZVNjZW5lLnRyZWUuc3Bhd25Xb29kKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwidGFsa2VkVG9TdG9uZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldFF1ZXN0KFF1ZXN0S2V5LkEpLmdldEhpZ2hlc3RUcmlnZ2VySW5kZXgoKSA9PT0gUXVlc3RBVHJpZ2dlci5QTEFOVEVEX1NFRUQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRRdWVzdChRdWVzdEtleS5BKS50cmlnZ2VyKFF1ZXN0QVRyaWdnZXIuVEFMS0VEX1RPX1NUT05FKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwicGlja3Vwc3RvbmVcIjpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdhbWVTY2VuZS5zdG9uZS5waWNrVXAoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJsZWFybnJhaW5kYW5jZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FtZVNjZW5lLnBsYXllci5lbmFibGVSYWluRGFuY2UoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJ0YWxrZWRUb0ZpcmVXaXRoV29vZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldFF1ZXN0KFF1ZXN0S2V5LkEpLmdldEhpZ2hlc3RUcmlnZ2VySW5kZXgoKSA9PT0gUXVlc3RBVHJpZ2dlci5HT1RfV09PRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFF1ZXN0KFF1ZXN0S2V5LkEpLnRyaWdnZXIoUXVlc3RBVHJpZ2dlci5UQUxLRURfVE9fRklSRV9XSVRIX1dPT0QpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJkYW5jZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdhbWVTY2VuZSEucGxheWVyLnN0YXJ0RGFuY2UoK3BhcmFtc1swXSB8fCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9LCA1MDApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJ3YWtldXBjaGVzdFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FtZVNjZW5lLm1pbWljLm5leHRTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcInBldERvZ2dvXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nYW1lU2NlbmUuYmVnaW5QZXRFbmRpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJsb29rVGhyb3VnaFdpbmRvd1wiOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FtZVNjZW5lLmJlZ2luV2luZG93RW5kaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiZW5hYmxlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciA9IHBhcmFtc1swXSwgZGlhbG9nTmFtZSA9IHBhcmFtc1sxXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbnBjTWFwOiBSZWNvcmQ8c3RyaW5nLCBOUEM+ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZpcmVcIjogdGhpcy5nYW1lU2NlbmUuZmlyZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzdG9uZVwiOiB0aGlzLmdhbWVTY2VuZS5zdG9uZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzdG9uZWRpc2NpcGxlXCI6IHRoaXMuZ2FtZVNjZW5lLnN0b25lRGlzY2lwbGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidHJlZVwiOiB0aGlzLmdhbWVTY2VuZS50cmVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNlZWRcIjogdGhpcy5nYW1lU2NlbmUuc2VlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmbGFtZWJveVwiOiB0aGlzLmdhbWVTY2VuZS5mbGFtZWJveSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ3aW5nXCI6IHRoaXMuZ2FtZVNjZW5lLndpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY2F2ZW1hblwiOiB0aGlzLmdhbWVTY2VuZS5jYXZlbWFuLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNoYWRvd3ByZXNlbmNlXCI6IHRoaXMuZ2FtZVNjZW5lLnNoYWRvd1ByZXNlbmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNoaWJhXCI6IHRoaXMuZ2FtZVNjZW5lLnNoaWJhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcInBvd2Vyc2hpYmFcIjogdGhpcy5nYW1lU2NlbmUucG93ZXJTaGliYVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldE5wYyA9IG5wY01hcFtjaGFyXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWFsb2cgPSBhbGxEaWFsb2dzW2RpYWxvZ05hbWVdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0TnBjICYmIGRpYWxvZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXROcGMuY29udmVyc2F0aW9uID0gbmV3IENvbnZlcnNhdGlvbihkaWFsb2csIHRhcmdldE5wYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJkaXNhYmxlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcjEgPSBwYXJhbXNbMF07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5wY01hcDE6IFJlY29yZDxzdHJpbmcsIE5QQz4gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlyZVwiOiB0aGlzLmdhbWVTY2VuZS5maXJlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcInN0b25lXCI6IHRoaXMuZ2FtZVNjZW5lLnN0b25lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcInN0b25lZGlzY2lwbGVcIjogdGhpcy5nYW1lU2NlbmUuc3RvbmVEaXNjaXBsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ0cmVlXCI6IHRoaXMuZ2FtZVNjZW5lLnRyZWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic2VlZFwiOiB0aGlzLmdhbWVTY2VuZS5zZWVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZsYW1lYm95XCI6IHRoaXMuZ2FtZVNjZW5lLmZsYW1lYm95LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIndpbmdcIjogdGhpcy5nYW1lU2NlbmUud2luZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjYXZlbWFuXCI6IHRoaXMuZ2FtZVNjZW5lLmNhdmVtYW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic2hhZG93cHJlc2VuY2VcIjogdGhpcy5nYW1lU2NlbmUuc2hhZG93UHJlc2VuY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic2hpYmFcIjogdGhpcy5nYW1lU2NlbmUuc2hpYmEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicG93ZXJzaGliYVwiOiB0aGlzLmdhbWVTY2VuZS5wb3dlclNoaWJhXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0TnBjMSA9IG5wY01hcDFbY2hhcjFdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0TnBjMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXROcGMxLmNvbnZlcnNhdGlvbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFlQTtBQUFBO0FBZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFLQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQU9BO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQU9BO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQU9BO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTNVQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/Campaign.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/ColorGradient.js":
|
|
/*!******************************!*\
|
|
!*** ./lib/ColorGradient.js ***!
|
|
\******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ColorGradient = void 0;\nconst util_1 = __webpack_require__(/*! ./util */ \"./lib/util.js\");\nconst graphics_1 = __webpack_require__(/*! ./graphics */ \"./lib/graphics.js\");\nclass ColorGradient {\n constructor(mapping) {\n this.mapping = mapping;\n }\n get(p) {\n return this.mapping(util_1.clamp(p, 0, 0.9999999999));\n }\n getCss(p) {\n const color = this.get(p);\n return `rgba(${color[0]},${color[1]},${color[2]},${color[3]})`;\n }\n static fromTable(table) {\n const items = table.length;\n const grad = new ColorGradient((v) => {\n const index = Math.floor(v * items);\n return table[index];\n });\n return grad;\n }\n static fromImage(img) {\n const data = graphics_1.getImageData(img);\n const pixels = data.data;\n const w = img.naturalWidth, h = img.naturalHeight;\n let p = 0;\n if (h === 1) {\n // mapping each value to single unique color\n const colors = [];\n for (let x = 0; x < w; x++) {\n colors.push([pixels[p++], pixels[p++], pixels[p++], pixels[p++]]);\n }\n return ColorGradient.fromTable(colors);\n }\n else {\n // mapping each value to randomly selected color of given set\n const colors = [];\n for (let x = 0; x < w; x++) {\n colors[x] = [];\n for (let y = 0; y < h; y++) {\n const p = 4 * (x + w * y);\n colors[x].push([pixels[p], pixels[p + 1], pixels[p + 2], pixels[p + 3]]);\n }\n }\n const items = w;\n return new ColorGradient((v) => {\n const index = Math.floor(v * items);\n return util_1.rndItem(colors[index]);\n });\n }\n }\n}\nexports.ColorGradient = ColorGradient;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvQ29sb3JHcmFkaWVudC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9Db2xvckdyYWRpZW50LnRzPzY2MzMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2xhbXAsIHJuZEl0ZW0gfSBmcm9tIFwiLi91dGlsXCI7XHJcbmltcG9ydCB7IGdldEltYWdlRGF0YSB9IGZyb20gXCIuL2dyYXBoaWNzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sb3JHcmFkaWVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1hcHBpbmc6IChwOiBudW1iZXIpID0+IG51bWJlcltdKSB7fVxyXG5cclxuICAgIHB1YmxpYyBnZXQocDogbnVtYmVyKTogbnVtYmVyW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1hcHBpbmcoY2xhbXAocCwgMCwgMC45OTk5OTk5OTk5KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENzcyhwOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGNvbG9yID0gdGhpcy5nZXQocCk7XHJcblxyXG4gICAgICAgIHJldHVybiBgcmdiYSgke2NvbG9yWzBdfSwke2NvbG9yWzFdfSwke2NvbG9yWzJdfSwke2NvbG9yWzNdfSlgO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbVRhYmxlKHRhYmxlOiBudW1iZXJbXVtdKTogQ29sb3JHcmFkaWVudCB7XHJcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0YWJsZS5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgZ3JhZCA9IG5ldyBDb2xvckdyYWRpZW50KCh2KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gTWF0aC5mbG9vcih2ICogaXRlbXMpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGFibGVbaW5kZXhdO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gZ3JhZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGZyb21JbWFnZShpbWc6IEhUTUxJbWFnZUVsZW1lbnQpOiBDb2xvckdyYWRpZW50IHtcclxuICAgICAgICBjb25zdCBkYXRhID0gZ2V0SW1hZ2VEYXRhKGltZyk7XHJcbiAgICAgICAgY29uc3QgcGl4ZWxzID0gZGF0YS5kYXRhO1xyXG4gICAgICAgIGNvbnN0IHcgPSBpbWcubmF0dXJhbFdpZHRoLCBoID0gaW1nLm5hdHVyYWxIZWlnaHQ7XHJcbiAgICAgICAgbGV0IHAgPSAwO1xyXG5cclxuICAgICAgICBpZiAoaCA9PT0gMSkge1xyXG4gICAgICAgICAgICAvLyBtYXBwaW5nIGVhY2ggdmFsdWUgdG8gc2luZ2xlIHVuaXF1ZSBjb2xvclxyXG4gICAgICAgICAgICBjb25zdCBjb2xvcnM6IG51bWJlcltdW10gPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdzsgeCsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb2xvcnMucHVzaChbcGl4ZWxzW3ArK10sIHBpeGVsc1twKytdLCBwaXhlbHNbcCsrXSwgcGl4ZWxzW3ArK11dKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIENvbG9yR3JhZGllbnQuZnJvbVRhYmxlKGNvbG9ycyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gbWFwcGluZyBlYWNoIHZhbHVlIHRvIHJhbmRvbWx5IHNlbGVjdGVkIGNvbG9yIG9mIGdpdmVuIHNldFxyXG4gICAgICAgICAgICBjb25zdCBjb2xvcnM6IG51bWJlcltdW11bXSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB3OyB4KyspIHtcclxuICAgICAgICAgICAgICAgIGNvbG9yc1t4XSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgaDsgeSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IDQgKiAoeCArIHcgKiB5KTtcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcnNbeF0ucHVzaChbcGl4ZWxzW3BdLCBwaXhlbHNbcCArIDFdLCBwaXhlbHNbcCArIDJdLCBwaXhlbHNbcCArIDNdXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gdztcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3JHcmFkaWVudCgodikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBNYXRoLmZsb29yKHYgKiBpdGVtcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcm5kSXRlbShjb2xvcnNbaW5kZXhdKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUEzREE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/ColorGradient.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/Conversation.js":
|
|
/*!*****************************!*\
|
|
!*** ./lib/Conversation.js ***!
|
|
\*****************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ConversationLine = exports.Conversation = void 0;\n// Actions that shall be executed before an NPC talks, not after\nconst earlyActions = [\n \"angry\",\n \"sad\",\n \"amused\",\n \"neutral\",\n \"bored\"\n];\nclass Conversation {\n constructor(json, npc) {\n this.npc = npc;\n this.stateIndex = 0;\n this.endConversation = false;\n this.localVariables = {};\n this.skippedLines = 0; // help variable to make goBack() work with skipped dialog lines due to conditions\n this.states = Object.keys(json);\n this.data = {};\n for (const state of this.states) {\n this.data[state] = json[state].map(line => new ConversationLine(line, this));\n }\n this.setState(\"entry\");\n this.endConversation = false;\n }\n setState(name = \"entry\") {\n if (!this.states.includes(name)) {\n throw new Error(\"State name \" + name + \" does not exist in conversation\");\n }\n this.state = name;\n this.stateIndex = 0;\n }\n getNextInteraction() {\n if (this.endConversation) {\n this.endConversation = false;\n return null;\n }\n this.skippedLines = 0;\n const result = {\n npcLine: null,\n options: [],\n spoiledOptions: []\n };\n // Does NPC speak?\n const line = this.getNextLine();\n if (line == null) {\n // Conversation is over without changing state or anything\n return null;\n }\n else {\n if (line.isNpc) {\n result.npcLine = line;\n }\n else {\n this.goBack(1 + this.skippedLines);\n }\n }\n // Does Player react?\n this.skippedLines = 0;\n let option = this.getNextLine();\n while (option && !option.isNpc) {\n // TODO: Identify spoiled options (that don't lead to anything new for the player) and\n // sort accordingly.\n result.options.push(option);\n this.skippedLines = 0;\n option = this.getNextLine();\n }\n if (option && !option.isNpc) {\n this.goBack();\n }\n else {\n this.goBack(1 + this.skippedLines);\n }\n this.skippedLines = 0;\n return result;\n }\n runAction(action) {\n switch (action[0]) {\n case \"end\":\n this.endConversation = true;\n break;\n case \"set\":\n this.setVariable(action[1], action[2]);\n break;\n default:\n this.npc.scene.game.campaign.runAction(action[0], this.npc, action.slice(1));\n }\n }\n setVariable(name = \"\", value = \"true\") {\n if (name.startsWith(\"$\")) {\n // Global variable\n Conversation.globalVariables[name] = value;\n }\n else {\n // Local variable\n this.localVariables[name] = value;\n }\n }\n static setGlobal(varname, value = \"true\") {\n if (!varname.startsWith(\"$\")) {\n varname = \"$\" + varname;\n }\n Conversation.globalVariables[varname] = value;\n }\n static getGlobals() {\n return Conversation.globalVariables;\n }\n static resetGlobals() {\n Conversation.globalVariables = {};\n }\n getVariable(name) {\n if (name.startsWith(\"$\")) {\n return Conversation.globalVariables[name];\n }\n else {\n return this.localVariables[name];\n }\n }\n goBack(steps = 1) {\n if (steps <= 0) {\n return;\n }\n this.stateIndex -= steps;\n this.skippedLines = 0;\n }\n getNextLine(ignoreDisabled = false) {\n if (this.stateIndex >= this.data[this.state].length) {\n return null;\n }\n const line = this.data[this.state][this.stateIndex++];\n // console.log(line.condition);\n if (line.condition && (!ignoreDisabled && !this.testCondition(line.condition))) {\n this.skippedLines++;\n return this.getNextLine(ignoreDisabled);\n }\n return line;\n }\n testCondition(condition) {\n const self = this;\n const subconditions = condition.split(\",\");\n const result = subconditions.some(evaluateFragment);\n return result;\n function evaluateFragment(s) {\n if (s.startsWith(\"not \")) {\n return !evaluateFragment(s.substr(4));\n }\n else {\n if (s.includes(\"!=\")) {\n const values = s.split(\"!=\").map(s => s.trim());\n return self.getVariable(values[0]) !== values[1];\n }\n else if (s.includes(\"=\")) {\n const values = s.split(\"=\").map(s => s.trim());\n return self.getVariable(values[0]) === values[1];\n }\n else if (s.includes(\">\")) {\n const values = s.split(\">\").map(s => s.trim());\n return parseFloat(self.getVariable(values[0])) > parseFloat(values[1]);\n }\n else if (s.includes(\"<\")) {\n const values = s.split(\"<\").map(s => s.trim());\n return parseFloat(self.getVariable(values[0])) < parseFloat(values[1]);\n }\n }\n // Variable name only\n const v = self.getVariable(s.trim());\n return v != null && v !== \"\" && v !== \"0\" && v !== \"false\";\n }\n }\n hasEnded() {\n return this.endConversation;\n }\n}\nexports.Conversation = Conversation;\nConversation.globalVariables = {};\nconst MAX_CHARS_PER_LINE = 50;\nclass ConversationLine {\n constructor(full, conversation) {\n this.full = full;\n this.conversation = conversation;\n this.visited = false;\n this.isNpc = !full.startsWith(\"►\");\n this.line = ConversationLine.extractText(full, this.isNpc);\n this.condition = ConversationLine.extractCondition(full);\n this.targetState = ConversationLine.extractState(full);\n this.actions = ConversationLine.extractActions(full);\n this.visited = false;\n }\n executeBeforeLine() {\n if (this.actions.length > 0) {\n for (const action of this.actions) {\n if (this.isEarlyAction(action[0])) {\n this.conversation.runAction(action);\n }\n }\n }\n }\n execute() {\n this.visited = true;\n if (this.targetState != null) {\n this.conversation.setState(this.targetState);\n }\n if (this.actions.length > 0) {\n for (const action of this.actions) {\n if (!this.isEarlyAction(action[0])) {\n this.conversation.runAction(action);\n }\n }\n }\n }\n isEarlyAction(s) {\n return earlyActions.includes(s);\n }\n wasVisited() {\n return this.visited;\n }\n static extractText(line, autoWrap = false) {\n // Remove player option sign\n if (line.startsWith(ConversationLine.OPTION_MARKER)) {\n line = line.substr(1);\n }\n // Remove conditions\n if (line.trim().startsWith(\"[\") && line.includes(\"]\")) {\n line = line.substr(line.indexOf(\"]\") + 1).trim();\n }\n // Remove actions and state changes\n const atPos = line.indexOf(\"@\");\n const exclPos = line.search(/\\![a-zA-Z]/);\n if (atPos >= 0 || exclPos >= 0) {\n const minPos = (atPos >= 0 && exclPos >= 0) ? Math.min(atPos, exclPos) : (atPos >= 0) ? atPos : exclPos;\n line = line.substr(0, minPos).trim();\n }\n // Auto wrap to some character count\n if (autoWrap) {\n return ConversationLine.wrapString(line, MAX_CHARS_PER_LINE);\n }\n return line;\n }\n static extractCondition(line) {\n const conditionString = line.match(/\\[[a-zA-Z0-9\\_\\<\\>\\!\\=\\$ ]+\\]/g);\n if (conditionString && conditionString[0]) {\n return conditionString[0].substr(1, conditionString[0].length - 2);\n }\n return null;\n }\n static extractState(line) {\n const stateChanges = line.match(/(@[a-zA-Z0-9\\_]+)/g);\n if (stateChanges && stateChanges.length > 0) {\n const stateName = stateChanges[0].substr(1);\n return stateName;\n }\n return null;\n }\n static extractActions(line) {\n let actions = line.match(/(\\![a-zA-Z][a-zA-Z0-9\\_\\$ ]*)+/g);\n const result = [];\n if (actions) {\n actions = actions.join(\" \").split(\"!\").map(action => action.trim()).filter(s => s.length > 0);\n for (const action of actions) {\n const segments = action.split(\" \");\n result.push(segments);\n }\n }\n return result;\n }\n static wrapString(s, charsPerLine) {\n let currentLength = 0, lastSpace = -1;\n for (let i = 0; i < s.length; i++) {\n const char = s[i];\n if (char === \"\\n\") {\n // New line\n currentLength = 0;\n }\n else {\n if (char === \" \") {\n lastSpace = i;\n }\n currentLength++;\n if (currentLength >= charsPerLine) {\n if (lastSpace >= 0) {\n // Add cut at last space\n s = s.substr(0, lastSpace) + \"\\n\" + s.substr(lastSpace + 1);\n currentLength = i - lastSpace;\n lastSpace = -1;\n }\n else {\n // Cut mid-word\n s = s.substr(0, i + 1) + \"\\n\" + s.substr(i + 1);\n currentLength = 0;\n }\n }\n }\n }\n return s;\n }\n}\nexports.ConversationLine = ConversationLine;\nConversationLine.OPTION_MARKER = \"►\";\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvQ29udmVyc2F0aW9uLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL0NvbnZlcnNhdGlvbi50cz85MTYxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpYWxvZ0pTT04gfSBmcm9tIFwiKi5kaWFsb2cuanNvblwiO1xyXG5pbXBvcnQgeyBOUEMgfSBmcm9tIFwiLi9lbnRpdGllcy9OUENcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJhY3Rpb24ge1xyXG4gICAgbnBjTGluZTogQ29udmVyc2F0aW9uTGluZSB8IG51bGw7XHJcbiAgICBvcHRpb25zOiBDb252ZXJzYXRpb25MaW5lW107XHJcbiAgICBzcG9pbGVkT3B0aW9uczogQ29udmVyc2F0aW9uTGluZVtdO1xyXG59XHJcblxyXG4vLyBBY3Rpb25zIHRoYXQgc2hhbGwgYmUgZXhlY3V0ZWQgYmVmb3JlIGFuIE5QQyB0YWxrcywgbm90IGFmdGVyXHJcbmNvbnN0IGVhcmx5QWN0aW9ucyA9IFtcclxuICAgIFwiYW5ncnlcIixcclxuICAgIFwic2FkXCIsXHJcbiAgICBcImFtdXNlZFwiLFxyXG4gICAgXCJuZXV0cmFsXCIsXHJcbiAgICBcImJvcmVkXCJcclxuXTtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb252ZXJzYXRpb24ge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2xvYmFsVmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XHJcbiAgICBwcml2YXRlIHN0YXRlczogc3RyaW5nW107XHJcbiAgICBwcml2YXRlIGRhdGE6IHtba2V5OiBzdHJpbmddOiBDb252ZXJzYXRpb25MaW5lW119O1xyXG4gICAgcHJpdmF0ZSBzdGF0ZSE6IHN0cmluZztcclxuICAgIHByaXZhdGUgc3RhdGVJbmRleCA9IDA7XHJcbiAgICBwcml2YXRlIGVuZENvbnZlcnNhdGlvbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBsb2NhbFZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xyXG4gICAgcHJpdmF0ZSBza2lwcGVkTGluZXMgPSAwOyAvLyBoZWxwIHZhcmlhYmxlIHRvIG1ha2UgZ29CYWNrKCkgd29yayB3aXRoIHNraXBwZWQgZGlhbG9nIGxpbmVzIGR1ZSB0byBjb25kaXRpb25zXHJcblxyXG4gICAgY29uc3RydWN0b3IoanNvbjogRGlhbG9nSlNPTiwgcHJpdmF0ZSByZWFkb25seSBucGM6IE5QQykge1xyXG4gICAgICAgIHRoaXMuc3RhdGVzID0gT2JqZWN0LmtleXMoanNvbik7XHJcbiAgICAgICAgdGhpcy5kYXRhID0ge307XHJcblxyXG4gICAgICAgIGZvciAoY29uc3Qgc3RhdGUgb2YgdGhpcy5zdGF0ZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhW3N0YXRlXSA9IGpzb25bc3RhdGVdLm1hcChsaW5lID0+IG5ldyBDb252ZXJzYXRpb25MaW5lKGxpbmUsIHRoaXMpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoXCJlbnRyeVwiKTtcclxuICAgICAgICB0aGlzLmVuZENvbnZlcnNhdGlvbiA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRTdGF0ZShuYW1lID0gXCJlbnRyeVwiKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlcy5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdGF0ZSBuYW1lIFwiICsgbmFtZSArIFwiIGRvZXMgbm90IGV4aXN0IGluIGNvbnZlcnNhdGlvblwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMuc3RhdGVJbmRleCA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE5leHRJbnRlcmFjdGlvbigpOiBJbnRlcmFjdGlvbiB8IG51bGwge1xyXG4gICAgICAgIGlmICh0aGlzLmVuZENvbnZlcnNhdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLmVuZENvbnZlcnNhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2tpcHBlZExpbmVzID0gMDtcclxuXHJcbiAgICAgICAgY29uc3QgcmVzdWx0OiBJbnRlcmFjdGlvbiA9IHtcclxuICAgICAgICAgICAgbnBjTGluZTogbnVsbCxcclxuICAgICAgICAgICAgb3B0aW9uczogW10sXHJcbiAgICAgICAgICAgIHNwb2lsZWRPcHRpb25zOiBbXVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIERvZXMgTlBDIHNwZWFrP1xyXG4gICAgICAgIGNvbnN0IGxpbmUgPSB0aGlzLmdldE5leHRMaW5lKCk7XHJcblxyXG4gICAgICAgIGlmIChsaW5lID09IG51bGwpIHtcclxuICAgICAgICAgICAgLy8gQ29udmVyc2F0aW9uIGlzIG92ZXIgd2l0aG91dCBjaGFuZ2luZyBzdGF0ZSBvciBhbnl0aGluZ1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAobGluZS5pc05wYykge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0Lm5wY0xpbmUgPSBsaW5lO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nb0JhY2soMSArIHRoaXMuc2tpcHBlZExpbmVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRG9lcyBQbGF5ZXIgcmVhY3Q/XHJcbiAgICAgICAgdGhpcy5za2lwcGVkTGluZXMgPSAwO1xyXG4gICAgICAgIGxldCBvcHRpb24gPSB0aGlzLmdldE5leHRMaW5lKCk7XHJcblxyXG4gICAgICAgIHdoaWxlIChvcHRpb24gJiYgIW9wdGlvbi5pc05wYykge1xyXG4gICAgICAgICAgICAvLyBUT0RPOiBJZGVudGlmeSBzcG9pbGVkIG9wdGlvbnMgKHRoYXQgZG9uJ3QgbGVhZCB0byBhbnl0aGluZyBuZXcgZm9yIHRoZSBwbGF5ZXIpIGFuZFxyXG4gICAgICAgICAgICAvLyAgICAgICBzb3J0IGFjY29yZGluZ2x5LlxyXG4gICAgICAgICAgICByZXN1bHQub3B0aW9ucy5wdXNoKG9wdGlvbik7XHJcbiAgICAgICAgICAgIHRoaXMuc2tpcHBlZExpbmVzID0gMDtcclxuICAgICAgICAgICAgb3B0aW9uID0gdGhpcy5nZXROZXh0TGluZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbiAmJiAhb3B0aW9uLmlzTnBjKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ29CYWNrKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nb0JhY2soMSArIHRoaXMuc2tpcHBlZExpbmVzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2tpcHBlZExpbmVzID0gMDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcnVuQWN0aW9uKGFjdGlvbjogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgICAgICBzd2l0Y2ggKGFjdGlvblswXSkge1xyXG4gICAgICAgICAgICBjYXNlIFwiZW5kXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuZENvbnZlcnNhdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInNldFwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWYXJpYWJsZShhY3Rpb25bMV0sIGFjdGlvblsyXSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRoaXMubnBjLnNjZW5lLmdhbWUuY2FtcGFpZ24ucnVuQWN0aW9uKGFjdGlvblswXSwgdGhpcy5ucGMsIGFjdGlvbi5zbGljZSgxKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0VmFyaWFibGUobmFtZSA9IFwiXCIsIHZhbHVlID0gXCJ0cnVlXCIpOiB2b2lkIHtcclxuICAgICAgICBpZiAobmFtZS5zdGFydHNXaXRoKFwiJFwiKSkge1xyXG4gICAgICAgICAgICAvLyBHbG9iYWwgdmFyaWFibGVcclxuICAgICAgICAgICAgQ29udmVyc2F0aW9uLmdsb2JhbFZhcmlhYmxlc1tuYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIExvY2FsIHZhcmlhYmxlXHJcbiAgICAgICAgICAgIHRoaXMubG9jYWxWYXJpYWJsZXNbbmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBzZXRHbG9iYWwodmFybmFtZTogc3RyaW5nLCB2YWx1ZSA9IFwidHJ1ZVwiKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF2YXJuYW1lLnN0YXJ0c1dpdGgoXCIkXCIpKSB7XHJcbiAgICAgICAgICAgIHZhcm5hbWUgPSBcIiRcIiArIHZhcm5hbWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBDb252ZXJzYXRpb24uZ2xvYmFsVmFyaWFibGVzW3Zhcm5hbWVdID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRHbG9iYWxzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiBDb252ZXJzYXRpb24uZ2xvYmFsVmFyaWFibGVzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgcmVzZXRHbG9iYWxzKCk6IHZvaWQge1xyXG4gICAgICAgIENvbnZlcnNhdGlvbi5nbG9iYWxWYXJpYWJsZXMgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFZhcmlhYmxlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKG5hbWUuc3RhcnRzV2l0aChcIiRcIikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIENvbnZlcnNhdGlvbi5nbG9iYWxWYXJpYWJsZXNbbmFtZV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxWYXJpYWJsZXNbbmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ29CYWNrKHN0ZXBzID0gMSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChzdGVwcyA8PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGVJbmRleCAtPSBzdGVwcztcclxuICAgICAgICB0aGlzLnNraXBwZWRMaW5lcyA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXROZXh0TGluZShpZ25vcmVEaXNhYmxlZCA9IGZhbHNlKTogQ29udmVyc2F0aW9uTGluZSB8IG51bGwge1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlSW5kZXggPj0gdGhpcy5kYXRhW3RoaXMuc3RhdGVdLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGxpbmUgPSB0aGlzLmRhdGFbdGhpcy5zdGF0ZV1bdGhpcy5zdGF0ZUluZGV4KytdO1xyXG5cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lLmNvbmRpdGlvbik7XHJcbiAgICAgICAgaWYgKGxpbmUuY29uZGl0aW9uICYmICghaWdub3JlRGlzYWJsZWQgJiYgIXRoaXMudGVzdENvbmRpdGlvbihsaW5lLmNvbmRpdGlvbikpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2tpcHBlZExpbmVzKys7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE5leHRMaW5lKGlnbm9yZURpc2FibGVkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBsaW5lO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdGVzdENvbmRpdGlvbihjb25kaXRpb246IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IHN1YmNvbmRpdGlvbnMgPSBjb25kaXRpb24uc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHN1YmNvbmRpdGlvbnMuc29tZShldmFsdWF0ZUZyYWdtZW50KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gZXZhbHVhdGVGcmFnbWVudChzOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICAgICAgaWYgKHMuc3RhcnRzV2l0aChcIm5vdCBcIikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAhZXZhbHVhdGVGcmFnbWVudChzLnN1YnN0cig0KSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocy5pbmNsdWRlcyhcIiE9XCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gcy5zcGxpdChcIiE9XCIpLm1hcChzID0+IHMudHJpbSgpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRWYXJpYWJsZSh2YWx1ZXNbMF0pICE9PSB2YWx1ZXNbMV07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHMuaW5jbHVkZXMoXCI9XCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gcy5zcGxpdChcIj1cIikubWFwKHMgPT4gcy50cmltKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldFZhcmlhYmxlKHZhbHVlc1swXSkgPT09IHZhbHVlc1sxXTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocy5pbmNsdWRlcyhcIj5cIikpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBzLnNwbGl0KFwiPlwiKS5tYXAocyA9PiBzLnRyaW0oKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoc2VsZi5nZXRWYXJpYWJsZSh2YWx1ZXNbMF0pKSA+IHBhcnNlRmxvYXQodmFsdWVzWzFdKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocy5pbmNsdWRlcyhcIjxcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBzLnNwbGl0KFwiPFwiKS5tYXAocyA9PiBzLnRyaW0oKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoc2VsZi5nZXRWYXJpYWJsZSh2YWx1ZXNbMF0pKSA8IHBhcnNlRmxvYXQodmFsdWVzWzFdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gVmFyaWFibGUgbmFtZSBvbmx5XHJcbiAgICAgICAgICAgIGNvbnN0IHYgPSBzZWxmLmdldFZhcmlhYmxlKHMudHJpbSgpKTtcclxuICAgICAgICAgICAgcmV0dXJuIHYgIT0gbnVsbCAmJiB2ICE9PSBcIlwiICYmIHYgIT09IFwiMFwiICYmIHYgIT09IFwiZmFsc2VcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhhc0VuZGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVuZENvbnZlcnNhdGlvbjtcclxuICAgIH1cclxufVxyXG5cclxuY29uc3QgTUFYX0NIQVJTX1BFUl9MSU5FID0gNTA7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29udmVyc2F0aW9uTGluZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIE9QVElPTl9NQVJLRVIgPSBcIuKWulwiO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IGxpbmU6IHN0cmluZztcclxuICAgIHB1YmxpYyByZWFkb25seSBjb25kaXRpb246IHN0cmluZyB8IG51bGw7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0U3RhdGU6IHN0cmluZyB8IG51bGw7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgYWN0aW9uczogc3RyaW5nW11bXTtcclxuICAgIHB1YmxpYyByZWFkb25seSBpc05wYzogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgdmlzaXRlZCA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBmdWxsOiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmlzTnBjID0gIWZ1bGwuc3RhcnRzV2l0aChcIuKWulwiKTtcclxuICAgICAgICB0aGlzLmxpbmUgPSBDb252ZXJzYXRpb25MaW5lLmV4dHJhY3RUZXh0KGZ1bGwsIHRoaXMuaXNOcGMpO1xyXG4gICAgICAgIHRoaXMuY29uZGl0aW9uID0gQ29udmVyc2F0aW9uTGluZS5leHRyYWN0Q29uZGl0aW9uKGZ1bGwpO1xyXG4gICAgICAgIHRoaXMudGFyZ2V0U3RhdGUgPSBDb252ZXJzYXRpb25MaW5lLmV4dHJhY3RTdGF0ZShmdWxsKTtcclxuICAgICAgICB0aGlzLmFjdGlvbnMgPSBDb252ZXJzYXRpb25MaW5lLmV4dHJhY3RBY3Rpb25zKGZ1bGwpO1xyXG4gICAgICAgIHRoaXMudmlzaXRlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBleGVjdXRlQmVmb3JlTGluZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5hY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgdGhpcy5hY3Rpb25zKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0Vhcmx5QWN0aW9uKGFjdGlvblswXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbi5ydW5BY3Rpb24oYWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZXhlY3V0ZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpc2l0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50YXJnZXRTdGF0ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udmVyc2F0aW9uLnNldFN0YXRlKHRoaXMudGFyZ2V0U3RhdGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIHRoaXMuYWN0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzRWFybHlBY3Rpb24oYWN0aW9uWzBdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udmVyc2F0aW9uLnJ1bkFjdGlvbihhY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0Vhcmx5QWN0aW9uKHM6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBlYXJseUFjdGlvbnMuaW5jbHVkZXMocyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHdhc1Zpc2l0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaXRlZDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBleHRyYWN0VGV4dChsaW5lOiBzdHJpbmcsIGF1dG9XcmFwID0gZmFsc2UpOiBzdHJpbmcge1xyXG4gICAgICAgIC8vIFJlbW92ZSBwbGF5ZXIgb3B0aW9uIHNpZ25cclxuICAgICAgICBpZiAobGluZS5zdGFydHNXaXRoKENvbnZlcnNhdGlvbkxpbmUuT1BUSU9OX01BUktFUikpIHsgbGluZSA9IGxpbmUuc3Vic3RyKDEpOyB9XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSBjb25kaXRpb25zXHJcbiAgICAgICAgaWYgKGxpbmUudHJpbSgpLnN0YXJ0c1dpdGgoXCJbXCIpICYmIGxpbmUuaW5jbHVkZXMoXCJdXCIpKSB7XHJcbiAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN1YnN0cihsaW5lLmluZGV4T2YoXCJdXCIpICsgMSkudHJpbSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVtb3ZlIGFjdGlvbnMgYW5kIHN0YXRlIGNoYW5nZXNcclxuICAgICAgICBjb25zdCBhdFBvcyA9IGxpbmUuaW5kZXhPZihcIkBcIik7XHJcbiAgICAgICAgY29uc3QgZXhjbFBvcyA9IGxpbmUuc2VhcmNoKC9cXCFbYS16QS1aXS8pO1xyXG5cclxuICAgICAgICBpZiAoYXRQb3MgPj0gMCB8fCBleGNsUG9zID49IDApIHtcclxuICAgICAgICAgICAgY29uc3QgbWluUG9zID0gKGF0UG9zID49IDAgJiYgZXhjbFBvcyA+PSAwKSA/IE1hdGgubWluKGF0UG9zLCBleGNsUG9zKSA6IChhdFBvcyA+PSAwKSA/IGF0UG9zIDogZXhjbFBvcztcclxuICAgICAgICAgICAgbGluZSA9IGxpbmUuc3Vic3RyKDAsIG1pblBvcykudHJpbSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQXV0byB3cmFwIHRvIHNvbWUgY2hhcmFjdGVyIGNvdW50XHJcbiAgICAgICAgaWYgKGF1dG9XcmFwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBDb252ZXJzYXRpb25MaW5lLndyYXBTdHJpbmcobGluZSwgTUFYX0NIQVJTX1BFUl9MSU5FKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBsaW5lO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIGV4dHJhY3RDb25kaXRpb24obGluZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgY29uc3QgY29uZGl0aW9uU3RyaW5nID0gbGluZS5tYXRjaCgvXFxbW2EtekEtWjAtOVxcX1xcPFxcPlxcIVxcPVxcJCBdK1xcXS9nKTtcclxuXHJcbiAgICAgICAgaWYgKGNvbmRpdGlvblN0cmluZyAmJiBjb25kaXRpb25TdHJpbmdbMF0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbmRpdGlvblN0cmluZ1swXS5zdWJzdHIoMSwgY29uZGl0aW9uU3RyaW5nWzBdLmxlbmd0aCAtIDIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgZXh0cmFjdFN0YXRlKGxpbmU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIGNvbnN0IHN0YXRlQ2hhbmdlcyA9IGxpbmUubWF0Y2goLyhAW2EtekEtWjAtOVxcX10rKS9nKTtcclxuXHJcbiAgICAgICAgaWYgKHN0YXRlQ2hhbmdlcyAmJiBzdGF0ZUNoYW5nZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGF0ZU5hbWUgPSBzdGF0ZUNoYW5nZXNbMF0uc3Vic3RyKDEpO1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhdGVOYW1lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgZXh0cmFjdEFjdGlvbnMobGluZTogc3RyaW5nKTogc3RyaW5nW11bXSB7XHJcbiAgICAgICAgbGV0IGFjdGlvbnMgPSBsaW5lLm1hdGNoKC8oXFwhW2EtekEtWl1bYS16QS1aMC05XFxfXFwkIF0qKSsvZyk7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XHJcblxyXG4gICAgICAgIGlmIChhY3Rpb25zKSB7XHJcbiAgICAgICAgICAgIGFjdGlvbnMgPSBhY3Rpb25zLmpvaW4oXCIgXCIpLnNwbGl0KFwiIVwiKS5tYXAoYWN0aW9uID0+IGFjdGlvbi50cmltKCkpLmZpbHRlcihzID0+IHMubGVuZ3RoID4gMCk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZWdtZW50cyA9IGFjdGlvbi5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChzZWdtZW50cyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyB3cmFwU3RyaW5nKHM6IHN0cmluZywgY2hhcnNQZXJMaW5lOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBjdXJyZW50TGVuZ3RoID0gMCwgbGFzdFNwYWNlID0gLTE7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBjaGFyID0gc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjaGFyID09PSBcIlxcblwiKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBOZXcgbGluZVxyXG4gICAgICAgICAgICAgICAgY3VycmVudExlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hhciA9PT0gXCIgXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBsYXN0U3BhY2UgPSBpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGN1cnJlbnRMZW5ndGgrKztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudExlbmd0aCA+PSBjaGFyc1BlckxpbmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobGFzdFNwYWNlID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGN1dCBhdCBsYXN0IHNwYWNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBzLnN1YnN0cigwLCBsYXN0U3BhY2UpICsgXCJcXG5cIiArIHMuc3Vic3RyKGxhc3RTcGFjZSArIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TGVuZ3RoID0gaSAtIGxhc3RTcGFjZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFNwYWNlID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3V0IG1pZC13b3JkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBzLnN1YnN0cigwLCBpICsgMSkgKyBcIlxcblwiICsgcy5zdWJzdHIoaSArIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzO1xyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBVUE7QUFBQTtBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7QUE1TEE7QUFDQTtBQThMQTtBQUVBO0FBU0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7O0FBdEpBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/Conversation.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/ConversationProxy.js":
|
|
/*!**********************************!*\
|
|
!*** ./lib/ConversationProxy.js ***!
|
|
\**********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ConversationProxy = void 0;\nconst Conversation_1 = __webpack_require__(/*! ./Conversation */ \"./lib/Conversation.js\");\nconst NPC_1 = __webpack_require__(/*! ./entities/NPC */ \"./lib/entities/NPC.js\");\nclass ConversationProxy extends NPC_1.NPC {\n constructor(scene, x, y, properties) {\n super(scene, x, y, 16, 16);\n this.conversation = this.generateConversation(this.prepareContent(properties.content));\n this.scene.addGameObject(this);\n }\n prepareContent(content) {\n if (!content) {\n return [\"Nothing…\"];\n }\n return content.split(\":::\");\n }\n generateConversation(lines) {\n const json = { \"entry\": [] };\n lines.forEach((line, index) => {\n if (index === lines.length - 1) {\n line += \" @entry !end\";\n }\n json.entry.push(line);\n });\n return new Conversation_1.Conversation(json, this);\n }\n draw(ctx) {\n if (this.scene.showBounds)\n this.drawBounds();\n this.speechBubble.draw(ctx);\n }\n update() {\n if (!this.hasActiveConversation()) {\n this.scene.removeGameObject(this);\n }\n }\n}\nexports.ConversationProxy = ConversationProxy;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvQ29udmVyc2F0aW9uUHJveHkuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvQ29udmVyc2F0aW9uUHJveHkudHM/YzhmYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb252ZXJzYXRpb24gfSBmcm9tIFwiLi9Db252ZXJzYXRpb25cIjtcclxuaW1wb3J0IHsgR2FtZU9iamVjdFByb3BlcnRpZXMgfSBmcm9tIFwiLi9NYXBJbmZvXCI7XHJcbmltcG9ydCB7IEdhbWVTY2VuZSB9IGZyb20gXCIuL3NjZW5lcy9HYW1lU2NlbmVcIjtcclxuaW1wb3J0IHsgTlBDIH0gZnJvbSBcIi4vZW50aXRpZXMvTlBDXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29udmVyc2F0aW9uUHJveHkgZXh0ZW5kcyBOUEMge1xyXG4gICAgcHVibGljIGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uO1xyXG5cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihzY2VuZTogR2FtZVNjZW5lLCB4OiBudW1iZXIsIHk6IG51bWJlciwgcHJvcGVydGllczogR2FtZU9iamVjdFByb3BlcnRpZXMpIHtcclxuICAgICAgICBzdXBlcihzY2VuZSwgeCwgeSwgMTYsIDE2KTtcclxuXHJcbiAgICAgICAgdGhpcy5jb252ZXJzYXRpb24gPSB0aGlzLmdlbmVyYXRlQ29udmVyc2F0aW9uKHRoaXMucHJlcGFyZUNvbnRlbnQocHJvcGVydGllcy5jb250ZW50KSk7XHJcbiAgICAgICAgdGhpcy5zY2VuZS5hZGRHYW1lT2JqZWN0KHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHJlcGFyZUNvbnRlbnQoY29udGVudD86IHN0cmluZyApOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgaWYgKCFjb250ZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXCJOb3RoaW5n4oCmXCJdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQuc3BsaXQoXCI6OjpcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUNvbnZlcnNhdGlvbihsaW5lczogc3RyaW5nW10pOiBDb252ZXJzYXRpb24ge1xyXG4gICAgICAgIGNvbnN0IGpzb246IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHsgXCJlbnRyeVwiOiBbXSB9O1xyXG5cclxuICAgICAgICBsaW5lcy5mb3JFYWNoKChsaW5lLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IGxpbmVzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIGxpbmUgKz0gXCIgQGVudHJ5ICFlbmRcIjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAganNvbi5lbnRyeS5wdXNoKGxpbmUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IENvbnZlcnNhdGlvbihqc29uLCB0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZHJhdyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lLnNob3dCb3VuZHMpIHRoaXMuZHJhd0JvdW5kcygpO1xyXG4gICAgICAgIHRoaXMuc3BlZWNoQnViYmxlLmRyYXcoY3R4KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNBY3RpdmVDb252ZXJzYXRpb24oKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNjZW5lLnJlbW92ZUdhbWVPYmplY3QodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFHQTtBQUVBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/ConversationProxy.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/Dance.js":
|
|
/*!**********************!*\
|
|
!*** ./lib/Dance.js ***!
|
|
\**********************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Dance = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ./Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ./Assets */ \"./lib/Assets.js\");\nconst ControllerManager_1 = __webpack_require__(/*! ./input/ControllerManager */ \"./lib/input/ControllerManager.js\");\nconst GameScene_1 = __webpack_require__(/*! ./scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst Renderer_1 = __webpack_require__(/*! ./Renderer */ \"./lib/Renderer.js\");\nconst Sound_1 = __webpack_require__(/*! ./Sound */ \"./lib/Sound.js\");\nconst Particles_1 = __webpack_require__(/*! ./Particles */ \"./lib/Particles.js\");\nclass Dance {\n constructor(scene, x, y, bpm = 128, keys = \"\", // can contain \"1\" or \"2\" for single keys, or \"3\" for both at once\n warmupBeats = 8, allowedMistakes = 3, timeTolerance = 0.75, withMusic = true, musicIndex = 1 // 0 tree-dance, 1 for raindance\n ) {\n this.scene = scene;\n this.x = x;\n this.y = y;\n this.bpm = bpm;\n this.warmupBeats = warmupBeats;\n this.allowedMistakes = allowedMistakes;\n this.timeTolerance = timeTolerance;\n this.withMusic = withMusic;\n this.musicIndex = musicIndex;\n /** Progress time relative to startTime. So starts out negative during warmup. */\n this.progress = 0;\n this.currentKey = \"\";\n this.currentDistanceToIdealTime = 0;\n this.allKeys = [\"1\", \"2\"];\n this.mistakes = 0;\n this.lastMistake = 0;\n this.lastSuccess = 0;\n this.performance = [];\n this.currentIndex = 0;\n this.success = false;\n this.duration = keys.length;\n this.keys = [];\n this.performance = [];\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n this.keys[i] = key === \" \" ? \"\" : key === \"3\" ? \"12\" : key;\n this.performance[i] = {};\n }\n this.begin();\n this.alphaCurve = Particles_1.valueCurves.cos(0.15);\n }\n wasSuccessful() {\n return this.success;\n }\n hasStarted() {\n return this.progress > 0;\n }\n getTimeSinceLastMistake() {\n return this.progress - this.lastMistake;\n }\n getTimeSinceLastSuccess() {\n return this.progress - this.lastSuccess;\n }\n begin() {\n this.openTime = this.scene.gameTime;\n this.startTime = this.openTime + this.warmupBeats / this.bpm * 60;\n this.currentKey = \"\";\n this.currentDistanceToIdealTime = 0;\n this.mistakes = 0;\n this.lastMistake = -Infinity;\n this.lastSuccess = -Infinity;\n this.currentIndex = 0;\n this.performance = this.performance.map(() => ({}));\n this.success = false;\n Dance.raindance_music.stop();\n Dance.raindance_music.setVolume(0);\n Dance.treedance_music.stop();\n Dance.treedance_music.setVolume(0);\n }\n setPosition(x, y) {\n this.x = x;\n this.y = y;\n }\n // Called by parent\n handleButtonDown(e) {\n if (!e.repeat && this.hasStarted()) {\n const key = e.isPlayerDance1 ? \"1\" : \"2\";\n if (this.allKeys.indexOf(key) >= 0) {\n if (this.currentKey.includes(key)) {\n if (this.currentDistanceToIdealTime <= this.timeTolerance) {\n this.keySuccess(key);\n return;\n }\n }\n const nxt = this.currentIndex + 1;\n if (this.keys[nxt] && this.keys[nxt].includes(key)) {\n if (this.progress - (nxt + 0.5) < this.timeTolerance) {\n this.keySuccess(key, nxt);\n return;\n }\n }\n this.keyFailure(key);\n }\n }\n }\n keySuccess(key, index = this.currentIndex) {\n for (const char of key) {\n if (index === this.currentIndex) {\n this.currentKey = this.currentKey.replace(char, \"\");\n }\n this.performance[index][char] = true;\n }\n if (index === this.currentIndex && this.currentKey.length === 0 || this.keys[index].length === 0) {\n this.lastSuccess = this.progress;\n Dance.successSound.stop();\n }\n }\n keyFailure(key) {\n if (!this.currentKey.includes(key)) {\n this.registerMistake();\n Dance.failSound.play();\n }\n }\n keyMissed(key) {\n if (this.performance[this.currentIndex]) {\n for (const char of key) {\n this.performance[this.currentIndex][char] = false;\n }\n }\n this.registerMistake();\n }\n registerMistake() {\n this.mistakes++;\n this.lastMistake = this.progress;\n Dance.failSound.play();\n if (this.mistakes > this.allowedMistakes) {\n this.loseGame();\n }\n }\n loseGame() {\n // Simply reset for now\n this.begin();\n }\n update() {\n const time = this.scene.gameTime - this.startTime;\n this.progress = time * this.bpm / 60;\n const prevIndex = this.currentIndex;\n this.currentIndex = Math.floor(this.progress);\n this.updateMusic();\n // Next key?\n if (this.currentIndex > prevIndex) {\n // Missed last one?\n if (this.currentKey.length > 0) {\n this.keyMissed(this.currentKey);\n this.currentKey = \"\";\n return false;\n }\n // Proceed\n this.currentKey = this.keys[this.currentIndex] || \"\";\n for (const char of this.currentKey) {\n if (this.performance[this.currentIndex] && this.performance[this.currentIndex][char]) {\n this.currentKey = this.currentKey.replace(char, \"\");\n }\n }\n }\n if (this.progress >= this.duration) {\n // Done! Success! Yeah!\n this.success = true;\n this.resetMusic();\n return true;\n }\n if (this.currentKey) {\n this.currentDistanceToIdealTime = Math.abs(this.progress - (this.currentIndex + 0.5));\n }\n else {\n this.currentDistanceToIdealTime = 0;\n }\n return false;\n }\n updateMusic() {\n if (!this.withMusic) {\n return;\n }\n if (this.progress < 0 && !Dance.raindance_music.isPlaying()) {\n const fade = -this.progress / this.warmupBeats;\n this.scene.fadeActiveBackgroundTrack(fade);\n }\n else {\n // own music paused\n if (this.musicIndex === 0 && !Dance.treedance_music.isPlaying()) {\n Dance.treedance_music.setVolume(0.8);\n Dance.treedance_music.play();\n GameScene_1.GameScene.bgm1.setVolume(0);\n GameScene_1.GameScene.bgm2.setVolume(0);\n }\n if (this.musicIndex === 1 && !Dance.raindance_music.isPlaying()) {\n Dance.raindance_music.setVolume(0.8);\n Dance.raindance_music.play();\n GameScene_1.GameScene.bgm1.setVolume(0);\n GameScene_1.GameScene.bgm2.setVolume(0);\n }\n }\n }\n resetMusic() {\n Dance.raindance_music.stop();\n Dance.treedance_music.stop();\n this.scene.resetMusicVolumes();\n }\n addDanceToRenderQueue() {\n this.scene.renderer.add({\n type: Renderer_1.RenderingType.DANCE,\n layer: Renderer_1.RenderingLayer.UI,\n dance: this\n });\n }\n draw(ctx) {\n const controller = ControllerManager_1.ControllerManager.getInstance().controllerSprite;\n ctx.save();\n ctx.translate(this.x, -this.y);\n // Key Bar\n const w = 100;\n const h = 18;\n const w2 = w / 2;\n const h2 = h / 2;\n ctx.drawImage(Dance.bar, Dance.bar.width / -2, 1 + Dance.bar.height / -2);\n // Feedback\n if (this.progress - this.lastMistake < 1) {\n ctx.fillStyle = \"red\";\n ctx.globalAlpha = (1 - this.progress + this.lastMistake) * 0.6;\n ctx.fillRect(-w2 + 2, -h2 + 1, w - 4, h);\n }\n if (this.progress - this.lastSuccess < 1) {\n ctx.fillStyle = \"green\";\n ctx.globalAlpha = (1 - this.progress + this.lastSuccess) * 0.1;\n ctx.fillRect(-w2 + 2, -h2 + 1, w - 4, h);\n }\n // Upcoming keys\n ctx.globalAlpha = 1;\n ctx.textAlign = \"center\";\n const sweetX = w2 - 16;\n const y1 = -8;\n const y2 = 1;\n ctx.fillStyle = \"black\";\n for (let i = Math.floor(this.progress) - 2; i < this.progress + 8; i++) {\n const keys = this.keys[i];\n if (keys) {\n const diff = i - this.progress;\n const x = sweetX - diff * 20 - 6;\n const xp = (x - (-w2)) / w;\n const alpha = this.alphaCurve.get(xp);\n ctx.globalAlpha = alpha;\n if (keys.includes(\"1\")) {\n ctx.strokeStyle = \"#ff8010\";\n if (this.performance[i][\"1\"] != null) {\n ctx.fillStyle = this.performance[i][\"1\"] ? \"#70F070\" : \"#F06060\";\n ctx.fillRect(x - 4, y1, 9, 9);\n }\n else {\n Dance.keys.drawTag(ctx, `${controller}-dance1`, x + Dance.keys.width / -2, y1);\n }\n }\n if (keys.includes(\"2\")) {\n ctx.strokeStyle = \"blue\";\n if (this.performance[i][\"2\"] != null) {\n ctx.fillStyle = this.performance[i][\"2\"] ? \"#70F070\" : \"#F06060\";\n ctx.fillRect(x - 4, y2, 9, 9);\n }\n else {\n Dance.keys.drawTag(ctx, `${controller}-dance2`, x + Dance.keys.width / -2, y2);\n }\n }\n }\n }\n // Sweet spot\n ctx.globalAlpha = 1;\n ctx.drawImage(Dance.indicator, sweetX - 8, 1 + Dance.indicator.height / -2);\n ctx.drawImage(Dance.indicator, sweetX + 4, 1 + Dance.indicator.height / -2);\n ctx.restore();\n }\n}\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/dancing/success.mp3\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], Dance, \"successSound\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/dancing/fail.mp3\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], Dance, \"failSound\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"music/raindance.ogg\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], Dance, \"raindance_music\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"music/dancing_queen.ogg\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], Dance, \"treedance_music\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/dancing_ui_bar.png\"),\n tslib_1.__metadata(\"design:type\", HTMLImageElement)\n], Dance, \"bar\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/dancing_ui_indicator.png\"),\n tslib_1.__metadata(\"design:type\", HTMLImageElement)\n], Dance, \"indicator\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/dancing_ui_keys.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], Dance, \"keys\", void 0);\nexports.Dance = Dance;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvRGFuY2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvRGFuY2UudHM/NTBlZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc2Vwcml0ZSB9IGZyb20gXCIuL0FzZXByaXRlXCI7XHJcbmltcG9ydCB7IGFzc2V0IH0gZnJvbSBcIi4vQXNzZXRzXCI7XHJcbmltcG9ydCB7IENvbnRyb2xsZXJFdmVudCB9IGZyb20gXCIuL2lucHV0L0NvbnRyb2xsZXJFdmVudFwiO1xyXG5pbXBvcnQgeyBDb250cm9sbGVyTWFuYWdlciB9IGZyb20gXCIuL2lucHV0L0NvbnRyb2xsZXJNYW5hZ2VyXCI7XHJcbmltcG9ydCB7IENvbnRyb2xsZXJTcHJpdGVNYXAgfSBmcm9tIFwiLi9pbnB1dC9Db250cm9sbGVyRmFtaWx5XCI7XHJcbmltcG9ydCB7IEdhbWVTY2VuZSB9IGZyb20gXCIuL3NjZW5lcy9HYW1lU2NlbmVcIjtcclxuaW1wb3J0IHsgUmVuZGVyaW5nTGF5ZXIsIFJlbmRlcmluZ1R5cGUgfSBmcm9tIFwiLi9SZW5kZXJlclwiO1xyXG5pbXBvcnQgeyBTb3VuZCB9IGZyb20gXCIuL1NvdW5kXCI7XHJcbmltcG9ydCB7IFZhbHVlQ3VydmUsIHZhbHVlQ3VydmVzIH0gZnJvbSBcIi4vUGFydGljbGVzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgRGFuY2Uge1xyXG4gICAgQGFzc2V0KFwic291bmRzL2RhbmNpbmcvc3VjY2Vzcy5tcDNcIilcclxuICAgIHByaXZhdGUgc3RhdGljIHN1Y2Nlc3NTb3VuZDogU291bmQ7XHJcblxyXG4gICAgQGFzc2V0KFwic291bmRzL2RhbmNpbmcvZmFpbC5tcDNcIilcclxuICAgIHByaXZhdGUgc3RhdGljIGZhaWxTb3VuZDogU291bmQ7XHJcblxyXG4gICAgQGFzc2V0KFwibXVzaWMvcmFpbmRhbmNlLm9nZ1wiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmFpbmRhbmNlX211c2ljOiBTb3VuZDtcclxuXHJcbiAgICBAYXNzZXQoXCJtdXNpYy9kYW5jaW5nX3F1ZWVuLm9nZ1wiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgdHJlZWRhbmNlX211c2ljOiBTb3VuZDtcclxuXHJcbiAgICBAYXNzZXQoXCJzcHJpdGVzL2RhbmNpbmdfdWlfYmFyLnBuZ1wiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgYmFyOiBIVE1MSW1hZ2VFbGVtZW50O1xyXG5cclxuICAgIEBhc3NldChcInNwcml0ZXMvZGFuY2luZ191aV9pbmRpY2F0b3IucG5nXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBpbmRpY2F0b3I6IEhUTUxJbWFnZUVsZW1lbnQ7XHJcblxyXG4gICAgQGFzc2V0KFwic3ByaXRlcy9kYW5jaW5nX3VpX2tleXMuYXNlcHJpdGUuanNvblwiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMga2V5czogQXNlcHJpdGU7XHJcblxyXG4gICAgLyoqIFdoZW4gdGhlIGRhbmNlIHdhcyBjcmVhdGVkIGFuZCB2aXNpYmxlIHRvIHRoZSBwbGF5ZXIgZm9yIHRoZSBmaXJzdCB0aW1lICovXHJcbiAgICBwcml2YXRlIG9wZW5UaW1lITogbnVtYmVyO1xyXG4gICAgLyoqIFRpbWUgb2YgdGhlIGZpcnN0IG5vdGUsIGRlcGVuZHMgb24gb3BlblRpbWUgYW5kIHdhcm11cEJlYXRzICovXHJcbiAgICBwcml2YXRlIHN0YXJ0VGltZSE6IG51bWJlcjtcclxuICAgIC8qKiBQcm9ncmVzcyB0aW1lIHJlbGF0aXZlIHRvIHN0YXJ0VGltZS4gU28gc3RhcnRzIG91dCBuZWdhdGl2ZSBkdXJpbmcgd2FybXVwLiAqL1xyXG4gICAgcHJpdmF0ZSBwcm9ncmVzcyA9IDA7XHJcbiAgICBwcml2YXRlIGR1cmF0aW9uOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIGN1cnJlbnRLZXkgPSBcIlwiO1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50RGlzdGFuY2VUb0lkZWFsVGltZSA9IDA7XHJcbiAgICBwcml2YXRlIGFsbEtleXMgPSBbXCIxXCIsIFwiMlwiXTtcclxuICAgIHByaXZhdGUga2V5czogc3RyaW5nW107XHJcbiAgICBwcml2YXRlIGFscGhhQ3VydmU6IFZhbHVlQ3VydmU7XHJcbiAgICBwcml2YXRlIG1pc3Rha2VzID0gMDtcclxuICAgIHByaXZhdGUgbGFzdE1pc3Rha2UgPSAwO1xyXG4gICAgcHJpdmF0ZSBsYXN0U3VjY2VzcyA9IDA7XHJcbiAgICBwcml2YXRlIHBlcmZvcm1hbmNlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPltdID0gW107XHJcbiAgICBwcml2YXRlIGN1cnJlbnRJbmRleCA9IDA7XHJcbiAgICBwcml2YXRlIHN1Y2Nlc3MgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHNjZW5lOiBHYW1lU2NlbmUsXHJcbiAgICAgICAgcHJpdmF0ZSB4OiBudW1iZXIsXHJcbiAgICAgICAgcHJpdmF0ZSB5OiBudW1iZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBicG0gPSAxMjgsXHJcbiAgICAgICAga2V5cyA9IFwiXCIsIC8vIGNhbiBjb250YWluIFwiMVwiIG9yIFwiMlwiIGZvciBzaW5nbGUga2V5cywgb3IgXCIzXCIgZm9yIGJvdGggYXQgb25jZVxyXG4gICAgICAgIHByaXZhdGUgd2FybXVwQmVhdHMgPSA4LFxyXG4gICAgICAgIHByaXZhdGUgYWxsb3dlZE1pc3Rha2VzID0gMyxcclxuICAgICAgICBwcml2YXRlIHRpbWVUb2xlcmFuY2UgPSAwLjc1LFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgd2l0aE11c2ljID0gdHJ1ZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG11c2ljSW5kZXggPSAxIC8vIDAgdHJlZS1kYW5jZSwgMSBmb3IgcmFpbmRhbmNlXHJcbiAgICApe1xyXG4gICAgICAgIHRoaXMuZHVyYXRpb24gPSBrZXlzLmxlbmd0aDtcclxuICAgICAgICB0aGlzLmtleXMgPSBbXTtcclxuICAgICAgICB0aGlzLnBlcmZvcm1hbmNlID0gW107XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xyXG4gICAgICAgICAgICB0aGlzLmtleXNbaV0gPSBrZXkgPT09IFwiIFwiID8gXCJcIiA6IGtleSA9PT0gXCIzXCIgPyBcIjEyXCIgOiBrZXk7XHJcbiAgICAgICAgICAgIHRoaXMucGVyZm9ybWFuY2VbaV0gPSB7fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYmVnaW4oKTtcclxuICAgICAgICB0aGlzLmFscGhhQ3VydmUgPSB2YWx1ZUN1cnZlcy5jb3MoMC4xNSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHdhc1N1Y2Nlc3NmdWwoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VjY2VzcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFzU3RhcnRlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9ncmVzcyA+IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFRpbWVTaW5jZUxhc3RNaXN0YWtlKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3MgLSB0aGlzLmxhc3RNaXN0YWtlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRUaW1lU2luY2VMYXN0U3VjY2VzcygpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb2dyZXNzIC0gdGhpcy5sYXN0U3VjY2VzcztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJlZ2luKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub3BlblRpbWUgPSB0aGlzLnNjZW5lLmdhbWVUaW1lO1xyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5vcGVuVGltZSArIHRoaXMud2FybXVwQmVhdHMgLyB0aGlzLmJwbSAqIDYwO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEtleSA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RGlzdGFuY2VUb0lkZWFsVGltZSA9IDA7XHJcbiAgICAgICAgdGhpcy5taXN0YWtlcyA9IDA7XHJcbiAgICAgICAgdGhpcy5sYXN0TWlzdGFrZSA9IC1JbmZpbml0eTtcclxuICAgICAgICB0aGlzLmxhc3RTdWNjZXNzID0gLUluZmluaXR5O1xyXG4gICAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcclxuICAgICAgICB0aGlzLnBlcmZvcm1hbmNlID0gdGhpcy5wZXJmb3JtYW5jZS5tYXAoKCkgPT4gKHt9KSk7XHJcbiAgICAgICAgdGhpcy5zdWNjZXNzID0gZmFsc2U7XHJcbiAgICAgICAgRGFuY2UucmFpbmRhbmNlX211c2ljLnN0b3AoKTtcclxuICAgICAgICBEYW5jZS5yYWluZGFuY2VfbXVzaWMuc2V0Vm9sdW1lKDApO1xyXG4gICAgICAgIERhbmNlLnRyZWVkYW5jZV9tdXNpYy5zdG9wKCk7XHJcbiAgICAgICAgRGFuY2UudHJlZWRhbmNlX211c2ljLnNldFZvbHVtZSgwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0UG9zaXRpb24oeDogbnVtYmVyLCB5OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnggPSB4O1xyXG4gICAgICAgIHRoaXMueSA9IHk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2FsbGVkIGJ5IHBhcmVudFxyXG4gICAgcHVibGljIGhhbmRsZUJ1dHRvbkRvd24oZTogQ29udHJvbGxlckV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFlLnJlcGVhdCAmJiB0aGlzLmhhc1N0YXJ0ZWQoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBrZXkgPSBlLmlzUGxheWVyRGFuY2UxID8gXCIxXCIgOiBcIjJcIjtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYWxsS2V5cy5pbmRleE9mKGtleSkgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEtleS5pbmNsdWRlcyhrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudERpc3RhbmNlVG9JZGVhbFRpbWUgPD0gdGhpcy50aW1lVG9sZXJhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMua2V5U3VjY2VzcyhrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IG54dCA9IHRoaXMuY3VycmVudEluZGV4ICsgMTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5rZXlzW254dF0gJiYgdGhpcy5rZXlzW254dF0uaW5jbHVkZXMoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb2dyZXNzIC0gKG54dCArIDAuNSkgPCB0aGlzLnRpbWVUb2xlcmFuY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5rZXlTdWNjZXNzKGtleSwgbnh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmtleUZhaWx1cmUoa2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGtleVN1Y2Nlc3Moa2V5OiBzdHJpbmcsIGluZGV4ID0gdGhpcy5jdXJyZW50SW5kZXgpOiB2b2lkIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGNoYXIgb2Yga2V5KSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5jdXJyZW50SW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEtleSA9IHRoaXMuY3VycmVudEtleS5yZXBsYWNlKGNoYXIsIFwiXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBlcmZvcm1hbmNlW2luZGV4XVtjaGFyXSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5jdXJyZW50SW5kZXggJiYgdGhpcy5jdXJyZW50S2V5Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmtleXNbaW5kZXhdLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmxhc3RTdWNjZXNzID0gdGhpcy5wcm9ncmVzcztcclxuICAgICAgICAgICAgRGFuY2Uuc3VjY2Vzc1NvdW5kLnN0b3AoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBrZXlGYWlsdXJlKGtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRLZXkuaW5jbHVkZXMoa2V5KSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyTWlzdGFrZSgpO1xyXG4gICAgICAgICAgICBEYW5jZS5mYWlsU291bmQucGxheSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGtleU1pc3NlZChrZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnBlcmZvcm1hbmNlW3RoaXMuY3VycmVudEluZGV4XSkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoYXIgb2Yga2V5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcmZvcm1hbmNlW3RoaXMuY3VycmVudEluZGV4XVtjaGFyXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlZ2lzdGVyTWlzdGFrZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVnaXN0ZXJNaXN0YWtlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubWlzdGFrZXMrKztcclxuICAgICAgICB0aGlzLmxhc3RNaXN0YWtlID0gdGhpcy5wcm9ncmVzcztcclxuICAgICAgICBEYW5jZS5mYWlsU291bmQucGxheSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5taXN0YWtlcyA+IHRoaXMuYWxsb3dlZE1pc3Rha2VzKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9zZUdhbWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsb3NlR2FtZSgpOiB2b2lkIHtcclxuICAgICAgICAvLyBTaW1wbHkgcmVzZXQgZm9yIG5vd1xyXG4gICAgICAgIHRoaXMuYmVnaW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLnNjZW5lLmdhbWVUaW1lIC0gdGhpcy5zdGFydFRpbWU7XHJcbiAgICAgICAgdGhpcy5wcm9ncmVzcyA9IHRpbWUgKiB0aGlzLmJwbSAvIDYwO1xyXG4gICAgICAgIGNvbnN0IHByZXZJbmRleCA9IHRoaXMuY3VycmVudEluZGV4O1xyXG4gICAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gTWF0aC5mbG9vcih0aGlzLnByb2dyZXNzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZU11c2ljKCk7XHJcblxyXG4gICAgICAgIC8vIE5leHQga2V5P1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA+IHByZXZJbmRleCkge1xyXG4gICAgICAgICAgICAvLyBNaXNzZWQgbGFzdCBvbmU/XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRLZXkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5rZXlNaXNzZWQodGhpcy5jdXJyZW50S2V5KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEtleSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFByb2NlZWRcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50S2V5ID0gdGhpcy5rZXlzW3RoaXMuY3VycmVudEluZGV4XSB8fCBcIlwiO1xyXG5cclxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGFyIG9mIHRoaXMuY3VycmVudEtleSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGVyZm9ybWFuY2VbdGhpcy5jdXJyZW50SW5kZXhdICYmIHRoaXMucGVyZm9ybWFuY2VbdGhpcy5jdXJyZW50SW5kZXhdW2NoYXJdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50S2V5ID0gdGhpcy5jdXJyZW50S2V5LnJlcGxhY2UoY2hhciwgXCJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnByb2dyZXNzID49IHRoaXMuZHVyYXRpb24pIHtcclxuICAgICAgICAgICAgLy8gRG9uZSEgU3VjY2VzcyEgWWVhaCFcclxuICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5yZXNldE11c2ljKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEtleSkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnREaXN0YW5jZVRvSWRlYWxUaW1lID0gTWF0aC5hYnModGhpcy5wcm9ncmVzcyAtICh0aGlzLmN1cnJlbnRJbmRleCArIDAuNSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudERpc3RhbmNlVG9JZGVhbFRpbWUgPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlTXVzaWMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLndpdGhNdXNpYykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm9ncmVzcyA8IDAgJiYgIURhbmNlLnJhaW5kYW5jZV9tdXNpYy5pc1BsYXlpbmcoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBmYWRlID0gLXRoaXMucHJvZ3Jlc3MgLyB0aGlzLndhcm11cEJlYXRzO1xyXG4gICAgICAgICAgICB0aGlzLnNjZW5lLmZhZGVBY3RpdmVCYWNrZ3JvdW5kVHJhY2soZmFkZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gb3duIG11c2ljIHBhdXNlZFxyXG4gICAgICAgICAgICBpZiAodGhpcy5tdXNpY0luZGV4ID09PSAwICYmICFEYW5jZS50cmVlZGFuY2VfbXVzaWMuaXNQbGF5aW5nKCkpIHtcclxuICAgICAgICAgICAgICAgIERhbmNlLnRyZWVkYW5jZV9tdXNpYy5zZXRWb2x1bWUoMC44KTtcclxuICAgICAgICAgICAgICAgIERhbmNlLnRyZWVkYW5jZV9tdXNpYy5wbGF5KCk7XHJcbiAgICAgICAgICAgICAgICBHYW1lU2NlbmUuYmdtMS5zZXRWb2x1bWUoMCk7XHJcbiAgICAgICAgICAgICAgICBHYW1lU2NlbmUuYmdtMi5zZXRWb2x1bWUoMCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm11c2ljSW5kZXggPT09IDEgJiYgIURhbmNlLnJhaW5kYW5jZV9tdXNpYy5pc1BsYXlpbmcoKSkge1xyXG4gICAgICAgICAgICAgICAgRGFuY2UucmFpbmRhbmNlX211c2ljLnNldFZvbHVtZSgwLjgpO1xyXG4gICAgICAgICAgICAgICAgRGFuY2UucmFpbmRhbmNlX211c2ljLnBsYXkoKTtcclxuICAgICAgICAgICAgICAgIEdhbWVTY2VuZS5iZ20xLnNldFZvbHVtZSgwKTtcclxuICAgICAgICAgICAgICAgIEdhbWVTY2VuZS5iZ20yLnNldFZvbHVtZSgwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzZXRNdXNpYygpOiB2b2lkIHtcclxuICAgICAgICBEYW5jZS5yYWluZGFuY2VfbXVzaWMuc3RvcCgpO1xyXG4gICAgICAgIERhbmNlLnRyZWVkYW5jZV9tdXNpYy5zdG9wKCk7XHJcbiAgICAgICAgdGhpcy5zY2VuZS5yZXNldE11c2ljVm9sdW1lcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGREYW5jZVRvUmVuZGVyUXVldWUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zY2VuZS5yZW5kZXJlci5hZGQoe1xyXG4gICAgICAgICAgICB0eXBlOiBSZW5kZXJpbmdUeXBlLkRBTkNFLFxyXG4gICAgICAgICAgICBsYXllcjogUmVuZGVyaW5nTGF5ZXIuVUksXHJcbiAgICAgICAgICAgIGRhbmNlOiB0aGlzXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRyYXcoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjb250cm9sbGVyOiBDb250cm9sbGVyU3ByaXRlTWFwID0gQ29udHJvbGxlck1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5jb250cm9sbGVyU3ByaXRlO1xyXG4gICAgICAgIGN0eC5zYXZlKCk7XHJcbiAgICAgICAgY3R4LnRyYW5zbGF0ZSh0aGlzLngsIC10aGlzLnkpO1xyXG5cclxuICAgICAgICAvLyBLZXkgQmFyXHJcbiAgICAgICAgY29uc3QgdyA9IDEwMDtcclxuICAgICAgICBjb25zdCBoID0gMTg7XHJcbiAgICAgICAgY29uc3QgdzIgPSB3IC8gMjtcclxuICAgICAgICBjb25zdCBoMiA9IGggLyAyO1xyXG5cclxuICAgICAgICBjdHguZHJhd0ltYWdlKERhbmNlLmJhciwgRGFuY2UuYmFyLndpZHRoIC8gLTIsIDEgKyBEYW5jZS5iYXIuaGVpZ2h0IC8gLTIpO1xyXG5cclxuICAgICAgICAvLyBGZWVkYmFja1xyXG4gICAgICAgIGlmICh0aGlzLnByb2dyZXNzIC0gdGhpcy5sYXN0TWlzdGFrZSA8IDEpIHtcclxuICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IFwicmVkXCI7XHJcbiAgICAgICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9ICgxIC0gdGhpcy5wcm9ncmVzcyArIHRoaXMubGFzdE1pc3Rha2UpICogMC42O1xyXG4gICAgICAgICAgICBjdHguZmlsbFJlY3QoLXcyICsgMiwgLWgyICsgMSwgdyAtIDQsIGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvZ3Jlc3MgLSB0aGlzLmxhc3RTdWNjZXNzIDwgMSkge1xyXG4gICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gXCJncmVlblwiO1xyXG4gICAgICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSAoMSAtIHRoaXMucHJvZ3Jlc3MgKyB0aGlzLmxhc3RTdWNjZXNzKSAqIDAuMTtcclxuICAgICAgICAgICAgY3R4LmZpbGxSZWN0KC13MiArIDIsIC1oMiArIDEsIHcgLSA0LCBoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFVwY29taW5nIGtleXNcclxuICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSAxO1xyXG4gICAgICAgIGN0eC50ZXh0QWxpZ24gPSBcImNlbnRlclwiO1xyXG4gICAgICAgIGNvbnN0IHN3ZWV0WCA9IHcyIC0gMTY7XHJcbiAgICAgICAgY29uc3QgeTEgPSAtODtcclxuICAgICAgICBjb25zdCB5MiA9IDE7XHJcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IFwiYmxhY2tcIjtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IE1hdGguZmxvb3IodGhpcy5wcm9ncmVzcykgLSAyOyBpIDwgdGhpcy5wcm9ncmVzcyArIDg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBrZXlzID0gdGhpcy5rZXlzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGtleXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBpIC0gdGhpcy5wcm9ncmVzcztcclxuICAgICAgICAgICAgICAgIGNvbnN0IHggPSBzd2VldFggLSBkaWZmICogMjAgLSA2O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeHAgPSAoeCAtICgtdzIpKSAvIHc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhbHBoYSA9IHRoaXMuYWxwaGFDdXJ2ZS5nZXQoeHApO1xyXG4gICAgICAgICAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gYWxwaGE7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGtleXMuaW5jbHVkZXMoXCIxXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gXCIjZmY4MDEwXCI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlcmZvcm1hbmNlW2ldW1wiMVwiXSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLnBlcmZvcm1hbmNlW2ldW1wiMVwiXSA/IFwiIzcwRjA3MFwiIDogXCIjRjA2MDYwXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCh4IC0gNCwgeTEsIDksIDkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERhbmNlLmtleXMuZHJhd1RhZyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2NvbnRyb2xsZXJ9LWRhbmNlMWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICsgRGFuY2Uua2V5cy53aWR0aCAvIC0yLCB5MVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5cy5pbmNsdWRlcyhcIjJcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBcImJsdWVcIjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucGVyZm9ybWFuY2VbaV1bXCIyXCJdICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMucGVyZm9ybWFuY2VbaV1bXCIyXCJdID8gXCIjNzBGMDcwXCIgOiBcIiNGMDYwNjBcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KHggLSA0LCB5MiwgOSwgOSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGFuY2Uua2V5cy5kcmF3VGFnKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7Y29udHJvbGxlcn0tZGFuY2UyYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggKyBEYW5jZS5rZXlzLndpZHRoIC8gLTIsIHkyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTd2VldCBzcG90XHJcbiAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gMTtcclxuICAgICAgICBjdHguZHJhd0ltYWdlKERhbmNlLmluZGljYXRvciwgc3dlZXRYIC0gOCwgMSArIERhbmNlLmluZGljYXRvci5oZWlnaHQgLyAtMik7XHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShEYW5jZS5pbmRpY2F0b3IsIHN3ZWV0WCArIDQsIDEgKyBEYW5jZS5pbmRpY2F0b3IuaGVpZ2h0IC8gLTIpO1xyXG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XHJcbiAgICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQXlDQTtBQU1BOztBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXpCQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBY0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBS0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBblZBO0FBREE7QUFDQTtBQUFBO0FBR0E7QUFEQTtBQUNBO0FBQUE7QUFHQTtBQURBO0FBQ0E7QUFBQTtBQUdBO0FBREE7QUFDQTtBQUFBO0FBR0E7QUFEQTtBQUNBO0FBQUE7QUFHQTtBQURBO0FBQ0E7QUFBQTtBQUdBO0FBREE7QUFDQTtBQUFBO0FBcEJBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/Dance.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/DialoguePrompt.js":
|
|
/*!*******************************!*\
|
|
!*** ./lib/DialoguePrompt.js ***!
|
|
\*******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DialoguePrompt = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ./Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ./Assets */ \"./lib/Assets.js\");\nconst Renderer_1 = __webpack_require__(/*! ./Renderer */ \"./lib/Renderer.js\");\nclass DialoguePrompt {\n constructor(scene, x, y) {\n this.timeAlive = 0;\n this.floatAmount = 2;\n this.floatSpeed = 5;\n this.scene = scene;\n this.x = x;\n this.y = y;\n }\n draw() {\n const floatOffsetY = Math.sin(this.timeAlive * this.floatSpeed) * this.floatAmount;\n this.scene.renderer.addAseprite(DialoguePrompt.sprite, \"idle\", this.x, this.y - floatOffsetY, Renderer_1.RenderingLayer.ENTITIES);\n }\n update(dt, anchorX, anchorY) {\n this.timeAlive += dt;\n this.x = anchorX;\n this.y = anchorY;\n }\n}\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/dialogue.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], DialoguePrompt, \"sprite\", void 0);\nexports.DialoguePrompt = DialoguePrompt;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvRGlhbG9ndWVQcm9tcHQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvRGlhbG9ndWVQcm9tcHQudHM/MTA3NiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc2Vwcml0ZSB9IGZyb20gXCIuL0FzZXByaXRlXCI7XHJcbmltcG9ydCB7IGFzc2V0IH0gZnJvbSBcIi4vQXNzZXRzXCI7XHJcbmltcG9ydCB7IEdhbWVTY2VuZSB9IGZyb20gXCIuL3NjZW5lcy9HYW1lU2NlbmVcIjtcclxuaW1wb3J0IHsgUmVuZGVyaW5nTGF5ZXIgfSBmcm9tIFwiLi9SZW5kZXJlclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIERpYWxvZ3VlUHJvbXB0IHtcclxuICAgIEBhc3NldChcInNwcml0ZXMvZGlhbG9ndWUuYXNlcHJpdGUuanNvblwiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgc3ByaXRlOiBBc2Vwcml0ZTtcclxuXHJcbiAgICBwcml2YXRlIHNjZW5lOiBHYW1lU2NlbmU7XHJcbiAgICBwcml2YXRlIHg6IG51bWJlcjtcclxuICAgIHByaXZhdGUgeTogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSB0aW1lQWxpdmUgPSAwO1xyXG4gICAgcHJpdmF0ZSBmbG9hdEFtb3VudCA9IDI7XHJcbiAgICBwcml2YXRlIGZsb2F0U3BlZWQgPSA1O1xyXG5cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihzY2VuZTogR2FtZVNjZW5lLCB4OiBudW1iZXIsIHk6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuICAgICAgICB0aGlzLnggPSB4O1xyXG4gICAgICAgIHRoaXMueSA9IHk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRyYXcoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZmxvYXRPZmZzZXRZID0gTWF0aC5zaW4odGhpcy50aW1lQWxpdmUgKiB0aGlzLmZsb2F0U3BlZWQpICogdGhpcy5mbG9hdEFtb3VudDtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZS5yZW5kZXJlci5hZGRBc2Vwcml0ZShcclxuICAgICAgICAgICAgRGlhbG9ndWVQcm9tcHQuc3ByaXRlLFxyXG4gICAgICAgICAgICBcImlkbGVcIixcclxuICAgICAgICAgICAgdGhpcy54LCB0aGlzLnkgLSBmbG9hdE9mZnNldFksXHJcbiAgICAgICAgICAgIFJlbmRlcmluZ0xheWVyLkVOVElUSUVTXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlKGR0OiBudW1iZXIsIGFuY2hvclg6IG51bWJlciwgYW5jaG9yWTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50aW1lQWxpdmUgKz0gZHQ7XHJcbiAgICAgICAgdGhpcy54ID0gYW5jaG9yWDtcclxuICAgICAgICB0aGlzLnkgPSBhbmNob3JZO1xyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFFQTtBQUVBO0FBV0E7QUFKQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQU1BO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBL0JBO0FBREE7QUFDQTtBQUFBO0FBRkE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/DialoguePrompt.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/Entity.js":
|
|
/*!***********************!*\
|
|
!*** ./lib/Entity.js ***!
|
|
\***********************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Entity = exports.createEntity = exports.entity = void 0;\nconst Animator_1 = __webpack_require__(/*! ./Animator */ \"./lib/Animator.js\");\nconst Renderer_1 = __webpack_require__(/*! ./Renderer */ \"./lib/Renderer.js\");\nconst entities = new Map();\nfunction entity(name) {\n return (type) => {\n entities.set(name, type);\n };\n}\nexports.entity = entity;\nfunction createEntity(name, scene, x, y, properties) {\n const constructor = entities.get(name);\n if (!constructor) {\n throw new Error(\"Entity not found: \" + name);\n }\n return new constructor(scene, x, y, properties);\n}\nexports.createEntity = createEntity;\nclass Entity {\n constructor(scene, x, y, width = 0, height = 0, isTrigger = true) {\n this.scene = scene;\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n this.isTrigger = isTrigger;\n this.timeAlive = 0;\n this.animator = new Animator_1.Animator(this);\n }\n update(dt) {\n this.timeAlive += dt;\n }\n distanceTo(entity) {\n const a = this.x - entity.x;\n const b = this.y - entity.y;\n return Math.sqrt(a * a + b * b);\n }\n get distanceToPlayer() {\n return this.distanceTo(this.scene.player);\n }\n getClosestEntityInRange(range) {\n const sortedEntityDistances = this.getEntitiesInRange(range).sort((a, b) => { return a.distance - b.distance; });\n if (sortedEntityDistances[0]) {\n return sortedEntityDistances[0].target;\n }\n else {\n return null;\n }\n }\n getEntitiesInRange(range) {\n const entitiesInRange = [];\n this.scene.gameObjects.forEach(gameObject => {\n if (gameObject instanceof Entity && gameObject !== this) {\n const distance = this.distanceTo(gameObject);\n if (distance < range) {\n entitiesInRange.push({ source: this, target: gameObject, distance });\n }\n }\n });\n return entitiesInRange;\n }\n getClosestEntity() {\n const entitiesInRange = [];\n this.scene.gameObjects.forEach(gameObject => {\n if (gameObject instanceof Entity && gameObject !== this) {\n const distance = this.distanceTo(gameObject);\n entitiesInRange.push({ source: this, target: gameObject, distance });\n }\n });\n entitiesInRange.sort((a, b) => { return a.distance - b.distance; });\n return entitiesInRange[0].target;\n }\n getBounds(margin = 0) {\n const width = this.width + (margin * 2);\n const height = this.height + (margin * 2);\n const x = this.x - (this.width / 2) - margin;\n const y = this.y - -this.height + margin;\n return { x, y, width, height };\n }\n drawBounds() {\n this.scene.renderer.add({\n type: Renderer_1.RenderingType.RECT,\n layer: Renderer_1.RenderingLayer.DEBUG,\n position: {\n x: this.getBounds().x,\n y: -this.getBounds().y\n },\n lineColor: \"red\",\n dimension: {\n width: this.getBounds().width,\n height: this.getBounds().height\n }\n });\n }\n /**\n * Checks wether this entity is currently colliding with the provided named trigger.\n * @param triggerName the trigger name to check against.\n */\n isCollidingWithTrigger(triggerName) {\n const collisions = this.scene.world.getTriggerCollisions(this);\n if (collisions.length === 0) {\n return false;\n }\n return collisions.findIndex(o => o.name === triggerName) > -1;\n }\n remove() {\n this.scene.removeGameObject(this);\n }\n}\nexports.Entity = Entity;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvRW50aXR5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL0VudGl0eS50cz9hYzY4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFuaW1hdG9yIH0gZnJvbSBcIi4vQW5pbWF0b3JcIjtcclxuaW1wb3J0IHsgR2FtZU9iamVjdCwgR2FtZVNjZW5lIH0gZnJvbSBcIi4vc2NlbmVzL0dhbWVTY2VuZVwiO1xyXG5pbXBvcnQgeyBHYW1lT2JqZWN0UHJvcGVydGllcyB9IGZyb20gXCIuL01hcEluZm9cIjtcclxuaW1wb3J0IHsgUmVuZGVyaW5nTGF5ZXIsIFJlbmRlcmluZ1R5cGUgfSBmcm9tIFwiLi9SZW5kZXJlclwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlEaXN0YW5jZSB7XHJcbiAgICBzb3VyY2U6IEVudGl0eTtcclxuICAgIHRhcmdldDogRW50aXR5O1xyXG4gICAgZGlzdGFuY2U6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQm91bmRzID0ge1xyXG4gICAgeDogbnVtYmVyO1xyXG4gICAgeTogbnVtYmVyO1xyXG4gICAgd2lkdGg6IG51bWJlcjtcclxuICAgIGhlaWdodDogbnVtYmVyO1xyXG59O1xyXG5cclxudHlwZSBFbnRpdHlDb25zdHJ1Y3RvciA9IG5ldyAoc2NlbmU6IEdhbWVTY2VuZSwgeDogbnVtYmVyLCB5OiBudW1iZXIsIHByb3BlcnRpZXM6IEdhbWVPYmplY3RQcm9wZXJ0aWVzKSA9PiBFbnRpdHk7XHJcblxyXG5jb25zdCBlbnRpdGllcyA9IG5ldyBNYXA8c3RyaW5nLCBFbnRpdHlDb25zdHJ1Y3Rvcj4oKTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBlbnRpdHkobmFtZTogc3RyaW5nKTogKHRhcmdldDogRW50aXR5Q29uc3RydWN0b3IpID0+IHZvaWQge1xyXG4gICAgcmV0dXJuICh0eXBlOiBFbnRpdHlDb25zdHJ1Y3RvcikgPT4ge1xyXG4gICAgICAgIGVudGl0aWVzLnNldChuYW1lLCB0eXBlKTtcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbnRpdHkoXHJcbiAgICBuYW1lOiBzdHJpbmcsIHNjZW5lOiBHYW1lU2NlbmUsIHg6IG51bWJlciwgeTogbnVtYmVyLCBwcm9wZXJ0aWVzOiBHYW1lT2JqZWN0UHJvcGVydGllc1xyXG4pOiBFbnRpdHkge1xyXG4gICAgY29uc3QgY29uc3RydWN0b3IgPSBlbnRpdGllcy5nZXQobmFtZSk7XHJcblxyXG4gICAgaWYgKCFjb25zdHJ1Y3Rvcikge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVudGl0eSBub3QgZm91bmQ6IFwiICsgbmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBjb25zdHJ1Y3RvcihzY2VuZSwgeCwgeSwgcHJvcGVydGllcyk7XHJcbn1cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBFbnRpdHkgaW1wbGVtZW50cyBHYW1lT2JqZWN0IHtcclxuICAgIHByb3RlY3RlZCB0aW1lQWxpdmUgPSAwO1xyXG4gICAgcHJvdGVjdGVkIGFuaW1hdG9yID0gbmV3IEFuaW1hdG9yKHRoaXMpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBzY2VuZTogR2FtZVNjZW5lLFxyXG4gICAgICAgIHB1YmxpYyB4OiBudW1iZXIsXHJcbiAgICAgICAgcHVibGljIHk6IG51bWJlcixcclxuICAgICAgICBwdWJsaWMgd2lkdGggPSAwLFxyXG4gICAgICAgIHB1YmxpYyBoZWlnaHQgPSAwLFxyXG4gICAgICAgIHB1YmxpYyBpc1RyaWdnZXIgPSB0cnVlXHJcbiAgICApIHt9XHJcblxyXG4gICAgYWJzdHJhY3QgZHJhdyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6IHZvaWQ7XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZShkdDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50aW1lQWxpdmUgKz0gZHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRpc3RhbmNlVG8oZW50aXR5OiBFbnRpdHkpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IGEgPSB0aGlzLnggLSBlbnRpdHkueDtcclxuICAgICAgICBjb25zdCBiID0gdGhpcy55IC0gZW50aXR5Lnk7XHJcblxyXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQoYSAqIGEgKyBiICogYik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBkaXN0YW5jZVRvUGxheWVyKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzdGFuY2VUbyh0aGlzLnNjZW5lLnBsYXllcik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldENsb3Nlc3RFbnRpdHlJblJhbmdlKHJhbmdlOiBudW1iZXIpOiBFbnRpdHkgfCBudWxsIHtcclxuICAgICAgICBjb25zdCBzb3J0ZWRFbnRpdHlEaXN0YW5jZXMgPSB0aGlzLmdldEVudGl0aWVzSW5SYW5nZShyYW5nZSkuc29ydChcclxuICAgICAgICAgICAgKGEsIGIgKSA9PiB7IHJldHVybiBhLmRpc3RhbmNlIC0gYi5kaXN0YW5jZTsgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmIChzb3J0ZWRFbnRpdHlEaXN0YW5jZXNbMF0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNvcnRlZEVudGl0eURpc3RhbmNlc1swXS50YXJnZXQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRFbnRpdGllc0luUmFuZ2UocmFuZ2U6IG51bWJlcik6IEVudGl0eURpc3RhbmNlW10ge1xyXG4gICAgICAgIGNvbnN0IGVudGl0aWVzSW5SYW5nZTogRW50aXR5RGlzdGFuY2VbXSA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lLmdhbWVPYmplY3RzLmZvckVhY2goZ2FtZU9iamVjdCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChnYW1lT2JqZWN0IGluc3RhbmNlb2YgRW50aXR5ICYmIGdhbWVPYmplY3QgIT09IHRoaXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gdGhpcy5kaXN0YW5jZVRvKGdhbWVPYmplY3QpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkaXN0YW5jZSA8IHJhbmdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW50aXRpZXNJblJhbmdlLnB1c2goe3NvdXJjZTogdGhpcywgdGFyZ2V0OiBnYW1lT2JqZWN0LCBkaXN0YW5jZX0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBlbnRpdGllc0luUmFuZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldENsb3Nlc3RFbnRpdHkoKTogRW50aXR5IHtcclxuICAgICAgICBjb25zdCBlbnRpdGllc0luUmFuZ2U6IEVudGl0eURpc3RhbmNlW10gPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZS5nYW1lT2JqZWN0cy5mb3JFYWNoKGdhbWVPYmplY3QgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZ2FtZU9iamVjdCBpbnN0YW5jZW9mIEVudGl0eSAmJiBnYW1lT2JqZWN0ICE9PSB0aGlzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IHRoaXMuZGlzdGFuY2VUbyhnYW1lT2JqZWN0KTtcclxuICAgICAgICAgICAgICAgIGVudGl0aWVzSW5SYW5nZS5wdXNoKHtzb3VyY2U6IHRoaXMsIHRhcmdldDogZ2FtZU9iamVjdCwgZGlzdGFuY2V9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBlbnRpdGllc0luUmFuZ2Uuc29ydCgoYSwgYiApID0+IHsgcmV0dXJuIGEuZGlzdGFuY2UgLSBiLmRpc3RhbmNlOyB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGVudGl0aWVzSW5SYW5nZVswXS50YXJnZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEJvdW5kcyhtYXJnaW4gPSAwKTogQm91bmRzIHtcclxuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMud2lkdGggKyAobWFyZ2luICogMik7XHJcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5oZWlnaHQgKyAobWFyZ2luICogMik7XHJcbiAgICAgICAgY29uc3QgeCA9IHRoaXMueCAtICh0aGlzLndpZHRoIC8gMikgLSBtYXJnaW47XHJcbiAgICAgICAgY29uc3QgeSA9IHRoaXMueSAtIC10aGlzLmhlaWdodCArIG1hcmdpbjtcclxuICAgICAgICByZXR1cm4geyB4LCB5LCB3aWR0aCwgaGVpZ2h0IH07XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGRyYXdCb3VuZHMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zY2VuZS5yZW5kZXJlci5hZGQoe1xyXG4gICAgICAgICAgICB0eXBlOiBSZW5kZXJpbmdUeXBlLlJFQ1QsXHJcbiAgICAgICAgICAgIGxheWVyOiBSZW5kZXJpbmdMYXllci5ERUJVRyxcclxuICAgICAgICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICAgICAgICAgIHg6IHRoaXMuZ2V0Qm91bmRzKCkueCxcclxuICAgICAgICAgICAgICAgIHk6IC10aGlzLmdldEJvdW5kcygpLnlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbGluZUNvbG9yOiBcInJlZFwiLFxyXG4gICAgICAgICAgICBkaW1lbnNpb246IHtcclxuICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMuZ2V0Qm91bmRzKCkud2lkdGgsXHJcbiAgICAgICAgICAgICAgIGhlaWdodDogdGhpcy5nZXRCb3VuZHMoKS5oZWlnaHRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIHdldGhlciB0aGlzIGVudGl0eSBpcyBjdXJyZW50bHkgY29sbGlkaW5nIHdpdGggdGhlIHByb3ZpZGVkIG5hbWVkIHRyaWdnZXIuXHJcbiAgICAgKiBAcGFyYW0gdHJpZ2dlck5hbWUgdGhlIHRyaWdnZXIgbmFtZSB0byBjaGVjayBhZ2FpbnN0LlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgaXNDb2xsaWRpbmdXaXRoVHJpZ2dlcih0cmlnZ2VyTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgY29sbGlzaW9ucyA9IHRoaXMuc2NlbmUud29ybGQuZ2V0VHJpZ2dlckNvbGxpc2lvbnModGhpcyk7XHJcblxyXG4gICAgICAgIGlmIChjb2xsaXNpb25zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY29sbGlzaW9ucy5maW5kSW5kZXgobyA9PiBvLm5hbWUgPT09IHRyaWdnZXJOYW1lKSA+IC0xO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zY2VuZS5yZW1vdmVHYW1lT2JqZWN0KHRoaXMpO1xyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFHQTtBQWlCQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBVkE7QUFZQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVEE7QUFDQTtBQVNBO0FBSUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFsSEE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/Entity.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/Face.js":
|
|
/*!*********************!*\
|
|
!*** ./lib/Face.js ***!
|
|
\*********************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Face = exports.EyeType = exports.FaceModes = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Assets_1 = __webpack_require__(/*! ./Assets */ \"./lib/Assets.js\");\nconst Renderer_1 = __webpack_require__(/*! ./Renderer */ \"./lib/Renderer.js\");\nvar FaceModes;\n(function (FaceModes) {\n FaceModes[\"BLINK\"] = \"blink\";\n FaceModes[\"NEUTRAL\"] = \"neutral\";\n FaceModes[\"ANGRY\"] = \"angry\";\n FaceModes[\"BORED\"] = \"bored\";\n FaceModes[\"AMUSED\"] = \"amused\";\n FaceModes[\"SAD\"] = \"sad\";\n FaceModes[\"DISGUSTED\"] = \"disgusted\";\n})(FaceModes = exports.FaceModes || (exports.FaceModes = {}));\nvar EyeType;\n(function (EyeType) {\n EyeType[EyeType[\"STANDARD\"] = 0] = \"STANDARD\";\n EyeType[EyeType[\"TREE\"] = 1] = \"TREE\";\n EyeType[EyeType[\"STONE\"] = 2] = \"STONE\";\n EyeType[EyeType[\"FLAMEBOY\"] = 3] = \"FLAMEBOY\";\n EyeType[EyeType[\"STONEDISCIPLE\"] = 4] = \"STONEDISCIPLE\";\n EyeType[EyeType[\"FLAMEBOY2\"] = 5] = \"FLAMEBOY2\";\n})(EyeType = exports.EyeType || (exports.EyeType = {}));\nclass Face {\n constructor(scene, owner, eyeType, offX = 0, offY = 20) {\n this.scene = scene;\n this.owner = owner;\n this.eyeType = eyeType;\n this.offX = offX;\n this.offY = offY;\n this.mode = FaceModes.NEUTRAL;\n this.direction = 1; // 1 = right, -1 = left\n }\n setMode(mode) {\n this.mode = mode;\n }\n setOffY(offY) {\n this.offY = offY;\n }\n draw(ctx) {\n const sprite = Face.sprites[this.eyeType];\n this.scene.renderer.add({\n type: Renderer_1.RenderingType.ASEPRITE,\n layer: Renderer_1.RenderingLayer.ENTITIES,\n asset: sprite,\n scale: {\n x: this.direction,\n y: 1\n },\n translation: {\n x: this.owner.x + this.offX,\n y: -this.owner.y - this.offY\n },\n position: {\n x: -sprite.width >> 1,\n y: -sprite.height\n },\n animationTag: this.mode,\n time: this.scene.gameTime * 1000\n });\n }\n toggleDirection(direction = this.direction > 0 ? -1 : 1) {\n if (direction !== this.direction) {\n this.direction = direction;\n }\n }\n setDirection(direction) {\n this.direction = direction;\n }\n}\ntslib_1.__decorate([\n Assets_1.asset([\n \"sprites/eyes/standard.aseprite.json\",\n \"sprites/eyes/tree.aseprite.json\",\n \"sprites/eyes/stone.aseprite.json\",\n \"sprites/eyes/flameboy.aseprite.json\",\n \"sprites/eyes/stonedisciple.aseprite.json\",\n \"sprites/eyes/flameboy2.aseprite.json\",\n ]),\n tslib_1.__metadata(\"design:type\", Array)\n], Face, \"sprites\", void 0);\nexports.Face = Face;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvRmFjZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9GYWNlLnRzP2U0YWIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNlcHJpdGUgfSBmcm9tIFwiLi9Bc2Vwcml0ZVwiO1xyXG5pbXBvcnQgeyBhc3NldCB9IGZyb20gXCIuL0Fzc2V0c1wiO1xyXG5pbXBvcnQgeyBHYW1lU2NlbmUgfSBmcm9tIFwiLi9zY2VuZXMvR2FtZVNjZW5lXCI7XHJcbmltcG9ydCB7IE5QQyB9IGZyb20gXCIuL2VudGl0aWVzL05QQ1wiO1xyXG5pbXBvcnQgeyBSZW5kZXJpbmdMYXllciwgUmVuZGVyaW5nVHlwZSB9IGZyb20gXCIuL1JlbmRlcmVyXCI7XHJcblxyXG5leHBvcnQgZW51bSBGYWNlTW9kZXMge1xyXG4gICAgQkxJTksgPSBcImJsaW5rXCIsXHJcbiAgICBORVVUUkFMID0gXCJuZXV0cmFsXCIsXHJcbiAgICBBTkdSWSA9IFwiYW5ncnlcIixcclxuICAgIEJPUkVEID0gXCJib3JlZFwiLFxyXG4gICAgQU1VU0VEID0gXCJhbXVzZWRcIixcclxuICAgIFNBRCA9IFwic2FkXCIsXHJcbiAgICBESVNHVVNURUQgPSBcImRpc2d1c3RlZFwiXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEV5ZVR5cGUge1xyXG4gICAgU1RBTkRBUkQgPSAwLFxyXG4gICAgVFJFRSA9IDEsXHJcbiAgICBTVE9ORSA9IDIsXHJcbiAgICBGTEFNRUJPWSA9IDMsXHJcbiAgICBTVE9ORURJU0NJUExFID0gNCxcclxuICAgIEZMQU1FQk9ZMiA9IDUsXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBGYWNlIHtcclxuICAgIEBhc3NldChbXHJcbiAgICAgICAgXCJzcHJpdGVzL2V5ZXMvc3RhbmRhcmQuYXNlcHJpdGUuanNvblwiLFxyXG4gICAgICAgIFwic3ByaXRlcy9leWVzL3RyZWUuYXNlcHJpdGUuanNvblwiLFxyXG4gICAgICAgIFwic3ByaXRlcy9leWVzL3N0b25lLmFzZXByaXRlLmpzb25cIixcclxuICAgICAgICBcInNwcml0ZXMvZXllcy9mbGFtZWJveS5hc2Vwcml0ZS5qc29uXCIsXHJcbiAgICAgICAgXCJzcHJpdGVzL2V5ZXMvc3RvbmVkaXNjaXBsZS5hc2Vwcml0ZS5qc29uXCIsXHJcbiAgICAgICAgXCJzcHJpdGVzL2V5ZXMvZmxhbWVib3kyLmFzZXByaXRlLmpzb25cIixcclxuICAgIF0pXHJcbiAgICBwcml2YXRlIHN0YXRpYyBzcHJpdGVzOiBBc2Vwcml0ZVtdO1xyXG5cclxuICAgIHByaXZhdGUgbW9kZSA9IEZhY2VNb2Rlcy5ORVVUUkFMO1xyXG4gICAgcHJpdmF0ZSBkaXJlY3Rpb24gPSAxOyAvLyAxID0gcmlnaHQsIC0xID0gbGVmdFxyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgc2NlbmU6IEdhbWVTY2VuZSxcclxuICAgICAgICBwcml2YXRlIG93bmVyOiBOUEMsXHJcbiAgICAgICAgcHJpdmF0ZSBleWVUeXBlOiBFeWVUeXBlLFxyXG4gICAgICAgIHByaXZhdGUgb2ZmWCA9IDAsXHJcbiAgICAgICAgcHJpdmF0ZSBvZmZZID0gMjBcclxuICAgICkge31cclxuXHJcbiAgICBwdWJsaWMgc2V0TW9kZShtb2RlOiBGYWNlTW9kZXMpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm1vZGUgPSBtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRPZmZZIChvZmZZOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9mZlkgPSBvZmZZO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkcmF3KGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc3ByaXRlID0gRmFjZS5zcHJpdGVzW3RoaXMuZXllVHlwZV07XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUucmVuZGVyZXIuYWRkKHtcclxuICAgICAgICAgICAgdHlwZTogUmVuZGVyaW5nVHlwZS5BU0VQUklURSxcclxuICAgICAgICAgICAgbGF5ZXI6IFJlbmRlcmluZ0xheWVyLkVOVElUSUVTLFxyXG4gICAgICAgICAgICBhc3NldDogc3ByaXRlLFxyXG4gICAgICAgICAgICBzY2FsZToge1xyXG4gICAgICAgICAgICAgICAgeDogdGhpcy5kaXJlY3Rpb24sXHJcbiAgICAgICAgICAgICAgICB5OiAxXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICB4OiB0aGlzLm93bmVyLnggKyB0aGlzLm9mZlgsXHJcbiAgICAgICAgICAgICAgICB5OiAtdGhpcy5vd25lci55IC0gdGhpcy5vZmZZXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICB4OiAtc3ByaXRlLndpZHRoID4+IDEsXHJcbiAgICAgICAgICAgICAgICB5OiAtc3ByaXRlLmhlaWdodFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhbmltYXRpb25UYWc6IHRoaXMubW9kZSxcclxuICAgICAgICAgICAgdGltZTogdGhpcy5zY2VuZS5nYW1lVGltZSAqIDEwMDBcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdG9nZ2xlRGlyZWN0aW9uKGRpcmVjdGlvbiA9IHRoaXMuZGlyZWN0aW9uID4gMCA/IC0xIDogMSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChkaXJlY3Rpb24gIT09IHRoaXMuZGlyZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uID0gZGlyZWN0aW9uO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXREaXJlY3Rpb24oZGlyZWN0aW9uOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFDQTtBQUdBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBQ0E7QUFRQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBckRBO0FBUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQVRBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/Face.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/FireGfx.js":
|
|
/*!************************!*\
|
|
!*** ./lib/FireGfx.js ***!
|
|
\************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FireGfx = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Assets_1 = __webpack_require__(/*! ./Assets */ \"./lib/Assets.js\");\nconst util_1 = __webpack_require__(/*! ./util */ \"./lib/util.js\");\nconst ColorGradient_1 = __webpack_require__(/*! ./ColorGradient */ \"./lib/ColorGradient.js\");\nclass FireGfx {\n constructor(w = 48, h = 64, coneShaped = true, updateMs = 33) {\n this.w = w;\n this.h = h;\n this.coneShaped = coneShaped;\n this.updateMs = updateMs;\n this.returnColor = [0, 0, 0, 255];\n this.bottomLine = [];\n this.nextUpdate = -Infinity;\n this.age = 0;\n this.startTime = 0;\n this.canvas = document.createElement(\"canvas\");\n this.canvas.width = this.w;\n this.canvas.height = this.h;\n this.context = this.canvas.getContext(\"2d\");\n this.imageData = this.context.getImageData(0, 0, this.w, this.h);\n this.data = [];\n this.decayData = [];\n this.init();\n }\n init() {\n this.age = 0;\n this.nextUpdate = -Infinity;\n this.startTime = Date.now();\n const decay = this.decayData;\n const data = this.data;\n for (let y = 0; y < this.h; y++) {\n const row = data[y] = [];\n const decayRow = decay[y] = [];\n const yrel = y / (this.h - 1);\n for (let x = 0; x < this.w; x++) {\n row[x] = 0;\n decayRow[x] = this.getDecay(x / (this.w - 1), yrel);\n }\n }\n const bottom = data[this.h - 1];\n for (let x = 0; x < this.w; x++) {\n const xrel = x / (this.w - 1);\n const stuffedXrel = this.coneShaped ? util_1.clamp(2 * xrel - 0.5, 0, 1) : xrel;\n const smooth = 0.5 - 0.5 * Math.cos(2 * Math.PI * stuffedXrel);\n bottom[x] = 1.25 * Math.pow(smooth, 0.5);\n }\n this.bottomLine = bottom.slice();\n }\n getDecay(xrel, yrel) {\n if (xrel > 0.5) {\n xrel = 1 - xrel;\n }\n if (this.coneShaped) {\n yrel = 1.2 * yrel;\n if (yrel > 1) {\n return 0.02;\n }\n }\n return 0.02 + (0.5 - xrel) * 0.1 + Math.pow(1 - yrel, 8);\n }\n update() {\n const t = Date.now();\n this.age = t - this.startTime;\n if (t >= this.nextUpdate) {\n this.nextUpdate = t + this.updateMs;\n this.updateStep();\n this.render();\n }\n }\n updateStep() {\n const data = this.data;\n let fromRow = data[0];\n let fromX = 0, toCenter = 0;\n let toCenter1 = 1;\n const midX = (this.w - 1) * 0.5;\n const yThreshold = this.coneShaped ? this.h * 0.8 : Infinity;\n // Let all fire rows move upward, so update rows from top to bottom\n for (let y = 0; y < this.h - 1; y++) {\n const row = fromRow, decayRow = this.decayData[y];\n fromRow = data[y + 1];\n if (y > yThreshold) {\n const yp = (y - yThreshold) / (this.h - yThreshold);\n toCenter = 0.15 * yp * yp;\n toCenter1 = 1 - toCenter;\n }\n for (let x = 0; x < this.w; x++) {\n fromX = util_1.clamp(x + util_1.rnd(-1, 1) * util_1.rnd(), 0.3, this.w - 1.3);\n if (toCenter) {\n fromX = toCenter * midX + toCenter1 * fromX;\n }\n const fromX1 = Math.floor(fromX), fx = fromX - fromX1;\n const v = fx * fromRow[fromX1 + 1] + (1 - fx) * fromRow[fromX1] - decayRow[x] + util_1.rnd(-0.03, 0.02);\n row[x] = util_1.clamp(v, 0, Infinity);\n }\n }\n // Bottom line always stays mostly the same, only minor variations\n const row = data[this.h - 1];\n const t = this.age * 6 / 1000;\n const skew = 0.5 * util_1.orientPow(Math.sin(t) * Math.sin(t * 0.353) * Math.sin(t * 0.764)\n * Math.sin(t * 0.5433) * Math.sin(t * 1.634) * Math.sin(t * 1.342), 1.5);\n const exponent = (skew > 0) ? 1 + skew : 1 / (1 - skew);\n for (let x = 0; x < this.w; x++) {\n const f = 1.2 + Math.pow((0.8 * Math.sin(t) * Math.sin(0.1 * x * t) * Math.sin(-0.07 * x * t)), 2);\n const baseX = Math.floor((this.w - 1) * Math.pow((x / (this.w - 1)), exponent));\n row[x] = this.bottomLine[baseX] * f;\n }\n }\n render() {\n const pixels = this.imageData.data;\n const data = this.data;\n let p = 0, col = [0];\n for (let y = 0; y < this.h; y++) {\n const row = data[y];\n for (let x = 0; x < this.w; x++) {\n col = this.valueToColor(row[x]);\n pixels[p++] = col[0];\n pixels[p++] = col[1];\n pixels[p++] = col[2];\n pixels[p++] = col[3];\n }\n }\n this.context.putImageData(this.imageData, 0, 0);\n }\n valueToColor(v) {\n return FireGfx.gradient.get(util_1.clamp(v, 0, 1));\n }\n oldValueToColor(v) {\n v = util_1.clamp(v, 0, 1);\n const v255 = 255 * v;\n this.returnColor[0] = 255;\n this.returnColor[1] = v255;\n this.returnColor[2] = v255 * v;\n this.returnColor[3] = v255;\n return this.returnColor;\n }\n getImage() {\n return this.canvas;\n }\n draw(ctx, x = 0, y = 0) {\n const img = this.getImage();\n ctx.drawImage(img, x - img.width / 2, -y - img.height);\n }\n}\ntslib_1.__decorate([\n Assets_1.asset(\"gradients/fire.png\", { map: (image) => ColorGradient_1.ColorGradient.fromImage(image) }),\n tslib_1.__metadata(\"design:type\", ColorGradient_1.ColorGradient)\n], FireGfx, \"gradient\", void 0);\nexports.FireGfx = FireGfx;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvRmlyZUdmeC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9GaXJlR2Z4LnRzPzZiZTQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXNzZXQgfSBmcm9tIFwiLi9Bc3NldHNcIjtcclxuaW1wb3J0IHsgY2xhbXAsIG9yaWVudFBvdywgcm5kIH0gZnJvbSBcIi4vdXRpbFwiO1xyXG5pbXBvcnQgeyBDb2xvckdyYWRpZW50IH0gZnJvbSBcIi4vQ29sb3JHcmFkaWVudFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEZpcmVHZngge1xyXG4gICAgQGFzc2V0KFwiZ3JhZGllbnRzL2ZpcmUucG5nXCIsIHsgbWFwOiAoaW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQpID0+IENvbG9yR3JhZGllbnQuZnJvbUltYWdlKGltYWdlKSB9KVxyXG4gICAgcHVibGljIHN0YXRpYyBncmFkaWVudDogQ29sb3JHcmFkaWVudDtcclxuXHJcbiAgICBwcml2YXRlIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7XHJcbiAgICBwcml2YXRlIGNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcclxuICAgIHByaXZhdGUgZGF0YTogbnVtYmVyW11bXTtcclxuICAgIHByaXZhdGUgZGVjYXlEYXRhOiBudW1iZXJbXVtdO1xyXG4gICAgcHJpdmF0ZSBpbWFnZURhdGE6IEltYWdlRGF0YTtcclxuICAgIHByaXZhdGUgcmV0dXJuQ29sb3I6IG51bWJlcltdID0gWzAsIDAsIDAsIDI1NV07XHJcbiAgICBwcml2YXRlIGJvdHRvbUxpbmU6IG51bWJlcltdID0gW107XHJcbiAgICBwcml2YXRlIG5leHRVcGRhdGUgPSAtSW5maW5pdHk7XHJcbiAgICBwcml2YXRlIGFnZSA9IDA7XHJcbiAgICBwcml2YXRlIHN0YXJ0VGltZSA9IDA7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSB3ID0gNDgsXHJcbiAgICAgICAgcHJpdmF0ZSBoID0gNjQsXHJcbiAgICAgICAgcHJpdmF0ZSBjb25lU2hhcGVkID0gdHJ1ZSxcclxuICAgICAgICBwcml2YXRlIHVwZGF0ZU1zID0gMzNcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcclxuICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMudztcclxuICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmg7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcclxuICAgICAgICB0aGlzLmltYWdlRGF0YSA9IHRoaXMuY29udGV4dC5nZXRJbWFnZURhdGEoMCwgMCwgdGhpcy53LCB0aGlzLmgpO1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IFtdO1xyXG4gICAgICAgIHRoaXMuZGVjYXlEYXRhID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFnZSA9IDA7XHJcbiAgICAgICAgdGhpcy5uZXh0VXBkYXRlID0gLUluZmluaXR5O1xyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICAgICAgY29uc3QgZGVjYXkgPSB0aGlzLmRlY2F5RGF0YTtcclxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xyXG5cclxuICAgICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IHRoaXMuaDsgeSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvdzogbnVtYmVyW10gPSBkYXRhW3ldID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IGRlY2F5Um93OiBudW1iZXJbXSA9IGRlY2F5W3ldID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IHlyZWwgPSB5IC8gKHRoaXMuaCAtIDEpO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB0aGlzLnc7IHgrKykge1xyXG4gICAgICAgICAgICAgICAgcm93W3hdID0gMDtcclxuICAgICAgICAgICAgICAgIGRlY2F5Um93W3hdID0gdGhpcy5nZXREZWNheSh4IC8gKHRoaXMudyAtIDEpLCB5cmVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYm90dG9tID0gZGF0YVt0aGlzLmggLSAxXTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB0aGlzLnc7IHgrKykge1xyXG4gICAgICAgICAgICBjb25zdCB4cmVsID0geCAvICh0aGlzLncgLSAxKTtcclxuICAgICAgICAgICAgY29uc3Qgc3R1ZmZlZFhyZWwgPSB0aGlzLmNvbmVTaGFwZWQgPyBjbGFtcCgyICogeHJlbCAtIDAuNSwgMCwgMSkgOiB4cmVsO1xyXG4gICAgICAgICAgICBjb25zdCBzbW9vdGggPSAwLjUgLSAwLjUgKiBNYXRoLmNvcygyICogTWF0aC5QSSAqIHN0dWZmZWRYcmVsKTtcclxuICAgICAgICAgICAgYm90dG9tW3hdID0gMS4yNSAqIE1hdGgucG93KHNtb290aCwgMC41KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYm90dG9tTGluZSA9IGJvdHRvbS5zbGljZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RGVjYXkoeHJlbDogbnVtYmVyLCB5cmVsOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh4cmVsID4gMC41KSB7XHJcbiAgICAgICAgICAgIHhyZWwgPSAxIC0geHJlbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbmVTaGFwZWQpIHtcclxuICAgICAgICAgICAgeXJlbCA9IDEuMiAqIHlyZWw7XHJcblxyXG4gICAgICAgICAgICBpZiAoeXJlbCA+IDEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAwLjAyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gMC4wMiArICgwLjUgLSB4cmVsKSAqIDAuMSArIE1hdGgucG93KDEgLSB5cmVsLCA4KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHQgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgIHRoaXMuYWdlID0gdCAtIHRoaXMuc3RhcnRUaW1lO1xyXG5cclxuICAgICAgICBpZiAodCA+PSB0aGlzLm5leHRVcGRhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5uZXh0VXBkYXRlID0gdCArIHRoaXMudXBkYXRlTXM7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3RlcCgpO1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZVN0ZXAoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcclxuICAgICAgICBsZXQgZnJvbVJvdyA9IGRhdGFbMF07XHJcbiAgICAgICAgbGV0IGZyb21YID0gMCwgdG9DZW50ZXIgPSAwO1xyXG4gICAgICAgIGxldCAgdG9DZW50ZXIxID0gMTtcclxuICAgICAgICBjb25zdCBtaWRYID0gKHRoaXMudyAtIDEpICogMC41O1xyXG4gICAgICAgIGNvbnN0IHlUaHJlc2hvbGQgPSB0aGlzLmNvbmVTaGFwZWQgPyB0aGlzLmggKiAwLjggOiBJbmZpbml0eTtcclxuXHJcbiAgICAgICAgLy8gTGV0IGFsbCBmaXJlIHJvd3MgbW92ZSB1cHdhcmQsIHNvIHVwZGF0ZSByb3dzIGZyb20gdG9wIHRvIGJvdHRvbVxyXG4gICAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgdGhpcy5oIC0gMTsgeSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IGZyb21Sb3csIGRlY2F5Um93ID0gdGhpcy5kZWNheURhdGFbeV07XHJcbiAgICAgICAgICAgIGZyb21Sb3cgPSBkYXRhW3kgKyAxXTtcclxuXHJcbiAgICAgICAgICAgIGlmICh5ID4geVRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeXAgPSAoeSAtIHlUaHJlc2hvbGQpIC8gKHRoaXMuaCAtIHlUaHJlc2hvbGQpO1xyXG4gICAgICAgICAgICAgICAgdG9DZW50ZXIgPSAwLjE1ICogeXAgKiB5cDtcclxuICAgICAgICAgICAgICAgIHRvQ2VudGVyMSA9IDEgLSB0b0NlbnRlcjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB0aGlzLnc7IHgrKykge1xyXG4gICAgICAgICAgICAgICAgZnJvbVggPSBjbGFtcCh4ICsgcm5kKC0xLCAxKSAqIHJuZCgpLCAwLjMsIHRoaXMudyAtIDEuMyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRvQ2VudGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbVggPSB0b0NlbnRlciAqIG1pZFggKyB0b0NlbnRlcjEgKiBmcm9tWDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmcm9tWDEgPSBNYXRoLmZsb29yKGZyb21YKSwgZnggPSBmcm9tWCAtIGZyb21YMTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBmeCAqIGZyb21Sb3dbZnJvbVgxICsgMV0gKyAoMSAtIGZ4KSAqIGZyb21Sb3dbZnJvbVgxXSAtIGRlY2F5Um93W3hdICsgcm5kKC0wLjAzLCAwLjAyKTtcclxuICAgICAgICAgICAgICAgIHJvd1t4XSA9IGNsYW1wKHYsIDAsIEluZmluaXR5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQm90dG9tIGxpbmUgYWx3YXlzIHN0YXlzIG1vc3RseSB0aGUgc2FtZSwgb25seSBtaW5vciB2YXJpYXRpb25zXHJcbiAgICAgICAgY29uc3Qgcm93ID0gZGF0YVt0aGlzLmggLSAxXTtcclxuICAgICAgICBjb25zdCB0ID0gdGhpcy5hZ2UgKiA2IC8gMTAwMDtcclxuICAgICAgICBjb25zdCBza2V3ID0gMC41ICogb3JpZW50UG93KE1hdGguc2luKHQpICogTWF0aC5zaW4odCAqIDAuMzUzKSAqIE1hdGguc2luKHQgKiAwLjc2NClcclxuICAgICAgICAgICAgKiBNYXRoLnNpbih0ICogMC41NDMzKSAqIE1hdGguc2luKHQgKiAxLjYzNCkgKiBNYXRoLnNpbih0ICogMS4zNDIpLCAxLjUpO1xyXG4gICAgICAgIGNvbnN0IGV4cG9uZW50ID0gKHNrZXcgPiAwKSA/IDEgKyBza2V3IDogMSAvICgxIC0gc2tldyk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdGhpcy53OyB4KyspIHtcclxuICAgICAgICAgICAgY29uc3QgZiA9IDEuMiArICgwLjggKiBNYXRoLnNpbih0KSAqIE1hdGguc2luKDAuMSAqIHggKiB0KSAqIE1hdGguc2luKC0wLjA3ICogeCAqIHQpKSAqKiAyO1xyXG4gICAgICAgICAgICBjb25zdCBiYXNlWCA9IE1hdGguZmxvb3IoKHRoaXMudyAtIDEpICogKHggLyAodGhpcy53IC0gMSkpICoqIGV4cG9uZW50KTtcclxuICAgICAgICAgICAgcm93W3hdID0gdGhpcy5ib3R0b21MaW5lW2Jhc2VYXSAqIGY7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVuZGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHBpeGVscyA9IHRoaXMuaW1hZ2VEYXRhLmRhdGE7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcclxuICAgICAgICBsZXQgcCA9IDAsIGNvbCA9IFswXTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCB0aGlzLmg7IHkrKykge1xyXG4gICAgICAgICAgICBjb25zdCByb3cgPSBkYXRhW3ldO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB0aGlzLnc7IHgrKykge1xyXG4gICAgICAgICAgICAgICAgY29sID0gdGhpcy52YWx1ZVRvQ29sb3Iocm93W3hdKTtcclxuICAgICAgICAgICAgICAgIHBpeGVsc1twKytdID0gY29sWzBdO1xyXG4gICAgICAgICAgICAgICAgcGl4ZWxzW3ArK10gPSBjb2xbMV07XHJcbiAgICAgICAgICAgICAgICBwaXhlbHNbcCsrXSA9IGNvbFsyXTtcclxuICAgICAgICAgICAgICAgIHBpeGVsc1twKytdID0gY29sWzNdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNvbnRleHQucHV0SW1hZ2VEYXRhKHRoaXMuaW1hZ2VEYXRhLCAwLCAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmFsdWVUb0NvbG9yKHY6IG51bWJlcik6IG51bWJlcltdIHtcclxuICAgICAgICByZXR1cm4gRmlyZUdmeC5ncmFkaWVudC5nZXQoY2xhbXAodiwgMCwgMSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbGRWYWx1ZVRvQ29sb3IodjogbnVtYmVyKTogbnVtYmVyW10ge1xyXG4gICAgICAgIHYgPSBjbGFtcCh2LCAwLCAxKTtcclxuICAgICAgICBjb25zdCB2MjU1ID0gMjU1ICogdjtcclxuICAgICAgICB0aGlzLnJldHVybkNvbG9yWzBdID0gMjU1O1xyXG4gICAgICAgIHRoaXMucmV0dXJuQ29sb3JbMV0gPSB2MjU1O1xyXG4gICAgICAgIHRoaXMucmV0dXJuQ29sb3JbMl0gPSB2MjU1ICogdjtcclxuICAgICAgICB0aGlzLnJldHVybkNvbG9yWzNdID0gdjI1NTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuQ29sb3I7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEltYWdlKCk6IEhUTUxDYW52YXNFbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYW52YXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRyYXcoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHggPSAwLCB5ID0gMCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGltZyA9IHRoaXMuZ2V0SW1hZ2UoKTtcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltZywgeCAtIGltZy53aWR0aCAvIDIsIC15IC0gaW1nLmhlaWdodCk7XHJcbiAgICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFqTEE7QUFEQTtBQUNBO0FBQUE7QUFGQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/FireGfx.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/FriendlyFire.js":
|
|
/*!*****************************!*\
|
|
!*** ./lib/FriendlyFire.js ***!
|
|
\*****************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FriendlyFire = void 0;\nconst Game_1 = __webpack_require__(/*! ./Game */ \"./lib/Game.js\");\nconst LoadingScene_1 = __webpack_require__(/*! ./scenes/LoadingScene */ \"./lib/scenes/LoadingScene.js\");\nclass FriendlyFire extends Game_1.Game {\n constructor() {\n super();\n }\n}\nexports.FriendlyFire = FriendlyFire;\nconst game = new FriendlyFire();\ngame.scenes.setScene(LoadingScene_1.LoadingScene);\nwindow.game = game;\ngame.start();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvRnJpZW5kbHlGaXJlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL0ZyaWVuZGx5RmlyZS50cz83M2Q4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdhbWUgfSBmcm9tIFwiLi9HYW1lXCI7XHJcbmltcG9ydCB7IExvYWRpbmdTY2VuZSB9IGZyb20gXCIuL3NjZW5lcy9Mb2FkaW5nU2NlbmVcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBGcmllbmRseUZpcmUgZXh0ZW5kcyBHYW1lIHtcclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBnYW1lID0gbmV3IEZyaWVuZGx5RmlyZSgpO1xyXG5nYW1lLnNjZW5lcy5zZXRTY2VuZShMb2FkaW5nU2NlbmUpO1xyXG4od2luZG93IGFzIGFueSkuZ2FtZSA9IGdhbWU7XHJcbmdhbWUuc3RhcnQoKTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/FriendlyFire.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/Game.js":
|
|
/*!*********************!*\
|
|
!*** ./lib/Game.js ***!
|
|
\*********************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Game = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Assets_1 = __webpack_require__(/*! ./Assets */ \"./lib/Assets.js\");\nconst Campaign_1 = __webpack_require__(/*! ./Campaign */ \"./lib/Campaign.js\");\nconst util_1 = __webpack_require__(/*! ./util */ \"./lib/util.js\");\nconst ControllerManager_1 = __webpack_require__(/*! ./input/ControllerManager */ \"./lib/input/ControllerManager.js\");\nconst graphics_1 = __webpack_require__(/*! ./graphics */ \"./lib/graphics.js\");\nconst constants_1 = __webpack_require__(/*! ./constants */ \"./lib/constants.js\");\nconst GamepadInput_1 = __webpack_require__(/*! ./input/GamepadInput */ \"./lib/input/GamepadInput.js\");\nconst Keyboard_1 = __webpack_require__(/*! ./input/Keyboard */ \"./lib/input/Keyboard.js\");\nconst Scenes_1 = __webpack_require__(/*! ./Scenes */ \"./lib/Scenes.js\");\n/**\n * Max time delta (in s). If game freezes for a few seconds for whatever reason, we don't want\n * updates to jump too much.\n */\nconst MAX_DT = 0.1;\n/** Number of seconds the mouse is visible after moving it */\nconst MOUSE_TIMEOUT = 2.0;\nclass Game {\n constructor(width = constants_1.GAME_CANVAS_WIDTH, height = constants_1.GAME_CANVAS_HEIGHT) {\n this.width = width;\n this.height = height;\n this.controllerManager = ControllerManager_1.ControllerManager.getInstance();\n this.keyboard = new Keyboard_1.Keyboard();\n this.gamepad = new GamepadInput_1.GamepadInput();\n this.scenes = new Scenes_1.Scenes(this);\n this.assets = new Assets_1.Assets();\n this.campaign = new Campaign_1.Campaign(this);\n this.backgroundColor = \"black\";\n this.gameLoopCallback = this.gameLoop.bind(this);\n this.gameLoopId = null;\n this.lastUpdateTime = performance.now();\n this.mouseTimeout = MOUSE_TIMEOUT;\n const canvas = this.canvas = graphics_1.createCanvas(width, height);\n // Desynchronized sounds like a good idea but unfortunately it prevents pixelated graphics\n // on some systems (Chrome+Windows+NVidia for example which forces bilinear filtering). So\n // it is deactivated here.\n this.ctx = graphics_1.getRenderingContext(canvas, \"2d\", { alpha: false, desynchronized: false });\n const style = canvas.style;\n style.position = \"absolute\";\n style.margin = \"auto\";\n style.left = style.top = style.right = style.bottom = \"0\";\n style.imageRendering = \"pixelated\";\n style.imageRendering = \"crisp-edges\";\n document.body.appendChild(this.canvas);\n this.updateCanvasSize();\n window.addEventListener(\"resize\", () => this.updateCanvasSize());\n window.addEventListener(\"pointermove\", () => this.mouseMoved());\n // Use Alt+Enter to toggle fullscreen mode.\n window.addEventListener(\"keydown\", (event) => tslib_1.__awaiter(this, void 0, void 0, function* () {\n if (event.altKey && event.key === \"Enter\") {\n const lockingEnabled = \"keyboard\" in navigator && \"lock\" in navigator.keyboard && typeof navigator.keyboard.lock === \"function\";\n // If the browser is in full screen mode AND fullscreen has been triggered by our own keyboard shortcut...\n if (window.matchMedia(\"(display-mode: fullscreen)\").matches && document.fullscreenElement != null) {\n if (lockingEnabled) {\n navigator.keyboard.unlock();\n }\n yield document.exitFullscreen();\n }\n else {\n if (lockingEnabled) {\n yield navigator.keyboard.lock([\"Escape\"]);\n }\n yield document.body.requestFullscreen();\n }\n }\n }));\n }\n mouseMoved() {\n this.canvas.style.cursor = \"default\";\n this.mouseTimeout = MOUSE_TIMEOUT;\n }\n updateMouse(dt) {\n if (this.mouseTimeout > 0) {\n this.mouseTimeout = Math.max(0, this.mouseTimeout - dt);\n if (this.mouseTimeout === 0) {\n this.canvas.style.cursor = \"none\";\n }\n }\n }\n updateCanvasSize() {\n const { width, height } = this;\n const scale = Math.max(1, Math.floor(Math.min(window.innerWidth / width, window.innerHeight / height)));\n const style = this.canvas.style;\n style.width = width * scale + \"px\";\n style.height = height * scale + \"px\";\n }\n gameLoop() {\n const currentUpdateTime = performance.now();\n const dt = util_1.clamp((currentUpdateTime - this.lastUpdateTime) / 1000, 0, MAX_DT);\n this.update(dt);\n this.lastUpdateTime = currentUpdateTime;\n const { ctx, width, height } = this;\n ctx.save();\n ctx.imageSmoothingEnabled = false;\n ctx.fillStyle = this.backgroundColor;\n ctx.fillRect(0, 0, width, height);\n this.draw(ctx, width, height);\n ctx.restore();\n this.nextFrame();\n }\n nextFrame() {\n this.gameLoopId = requestAnimationFrame(this.gameLoopCallback);\n }\n update(dt) {\n this.gamepad.update();\n this.updateMouse(dt);\n this.scenes.update(dt);\n }\n draw(ctx, width, height) {\n this.scenes.draw(ctx, width, height);\n }\n start() {\n if (this.gameLoopId == null) {\n this.lastUpdateTime = performance.now();\n this.nextFrame();\n }\n }\n stop() {\n if (this.gameLoopId != null) {\n cancelAnimationFrame(this.gameLoopId);\n this.gameLoopId = null;\n }\n }\n}\nexports.Game = Game;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvR2FtZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9HYW1lLnRzPzZkNDciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNzZXRzIH0gZnJvbSBcIi4vQXNzZXRzXCI7XHJcbmltcG9ydCB7IENhbXBhaWduIH0gZnJvbSBcIi4vQ2FtcGFpZ25cIjtcclxuaW1wb3J0IHsgY2xhbXAgfSBmcm9tIFwiLi91dGlsXCI7XHJcbmltcG9ydCB7IENvbnRyb2xsZXJNYW5hZ2VyIH0gZnJvbSBcIi4vaW5wdXQvQ29udHJvbGxlck1hbmFnZXJcIjtcclxuaW1wb3J0IHsgY3JlYXRlQ2FudmFzLCBnZXRSZW5kZXJpbmdDb250ZXh0IH0gZnJvbSBcIi4vZ3JhcGhpY3NcIjtcclxuaW1wb3J0IHsgR0FNRV9DQU5WQVNfSEVJR0hULCBHQU1FX0NBTlZBU19XSURUSCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBHYW1lcGFkSW5wdXQgfSBmcm9tIFwiLi9pbnB1dC9HYW1lcGFkSW5wdXRcIjtcclxuaW1wb3J0IHsgS2V5Ym9hcmQgfSBmcm9tIFwiLi9pbnB1dC9LZXlib2FyZFwiO1xyXG5pbXBvcnQgeyBTY2VuZXMgfSBmcm9tIFwiLi9TY2VuZXNcIjtcclxuXHJcbi8qKlxyXG4gKiBNYXggdGltZSBkZWx0YSAoaW4gcykuIElmIGdhbWUgZnJlZXplcyBmb3IgYSBmZXcgc2Vjb25kcyBmb3Igd2hhdGV2ZXIgcmVhc29uLCB3ZSBkb24ndCB3YW50XHJcbiAqIHVwZGF0ZXMgdG8ganVtcCB0b28gbXVjaC5cclxuICovXHJcbmNvbnN0IE1BWF9EVCA9IDAuMTtcclxuXHJcbi8qKiBOdW1iZXIgb2Ygc2Vjb25kcyB0aGUgbW91c2UgaXMgdmlzaWJsZSBhZnRlciBtb3ZpbmcgaXQgKi9cclxuY29uc3QgTU9VU0VfVElNRU9VVCA9IDIuMDtcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHYW1lIHtcclxuICAgIHB1YmxpYyByZWFkb25seSBjb250cm9sbGVyTWFuYWdlciA9IENvbnRyb2xsZXJNYW5hZ2VyLmdldEluc3RhbmNlKCk7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkga2V5Ym9hcmQgPSBuZXcgS2V5Ym9hcmQoKTtcclxuICAgIHB1YmxpYyByZWFkb25seSBnYW1lcGFkID0gbmV3IEdhbWVwYWRJbnB1dCgpO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IHNjZW5lcyA9IG5ldyBTY2VuZXModGhpcyk7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgYXNzZXRzID0gbmV3IEFzc2V0cygpO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IGNhbXBhaWduID0gbmV3IENhbXBhaWduKHRoaXMpO1xyXG5cclxuICAgIHB1YmxpYyBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyA9IFwiYmxhY2tcIjtcclxuXHJcbiAgICBwdWJsaWMgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGdhbWVMb29wQ2FsbGJhY2sgPSB0aGlzLmdhbWVMb29wLmJpbmQodGhpcyk7XHJcbiAgICBwcml2YXRlIGdhbWVMb29wSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBsYXN0VXBkYXRlVGltZTogbnVtYmVyID0gcGVyZm9ybWFuY2Uubm93KCk7XHJcbiAgICBwcml2YXRlIG1vdXNlVGltZW91dDogbnVtYmVyID0gTU9VU0VfVElNRU9VVDtcclxuXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHdpZHRoOiBudW1iZXIgPSBHQU1FX0NBTlZBU19XSURUSCwgcHVibGljIHJlYWRvbmx5IGhlaWdodDogbnVtYmVyID0gR0FNRV9DQU5WQVNfSEVJR0hUKSB7XHJcbiAgICAgICAgY29uc3QgY2FudmFzID0gdGhpcy5jYW52YXMgPSBjcmVhdGVDYW52YXMod2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgLy8gRGVzeW5jaHJvbml6ZWQgc291bmRzIGxpa2UgYSBnb29kIGlkZWEgYnV0IHVuZm9ydHVuYXRlbHkgaXQgcHJldmVudHMgcGl4ZWxhdGVkIGdyYXBoaWNzXHJcbiAgICAgICAgLy8gb24gc29tZSBzeXN0ZW1zIChDaHJvbWUrV2luZG93cytOVmlkaWEgZm9yIGV4YW1wbGUgd2hpY2ggZm9yY2VzIGJpbGluZWFyIGZpbHRlcmluZykuIFNvXHJcbiAgICAgICAgLy8gaXQgaXMgZGVhY3RpdmF0ZWQgaGVyZS5cclxuICAgICAgICB0aGlzLmN0eCA9IGdldFJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBcIjJkXCIsIHsgYWxwaGE6IGZhbHNlLCBkZXN5bmNocm9uaXplZDogZmFsc2UgfSk7XHJcbiAgICAgICAgY29uc3Qgc3R5bGUgPSBjYW52YXMuc3R5bGU7XHJcbiAgICAgICAgc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgICAgc3R5bGUubWFyZ2luID0gXCJhdXRvXCI7XHJcbiAgICAgICAgc3R5bGUubGVmdCA9IHN0eWxlLnRvcCA9IHN0eWxlLnJpZ2h0ID0gc3R5bGUuYm90dG9tID0gXCIwXCI7XHJcbiAgICAgICAgc3R5bGUuaW1hZ2VSZW5kZXJpbmcgPSBcInBpeGVsYXRlZFwiO1xyXG4gICAgICAgIHN0eWxlLmltYWdlUmVuZGVyaW5nID0gXCJjcmlzcC1lZGdlc1wiO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jYW52YXMpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ2FudmFzU2l6ZSgpO1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsICgpID0+IHRoaXMudXBkYXRlQ2FudmFzU2l6ZSgpKTtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsICgpID0+IHRoaXMubW91c2VNb3ZlZCgpKTtcclxuXHJcbiAgICAgICAgLy8gVXNlIEFsdCtFbnRlciB0byB0b2dnbGUgZnVsbHNjcmVlbiBtb2RlLlxyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBhc3luYyAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50LmFsdEtleSAmJiBldmVudC5rZXkgPT09IFwiRW50ZXJcIikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ja2luZ0VuYWJsZWQgPSBcImtleWJvYXJkXCIgaW4gbmF2aWdhdG9yICYmIFwibG9ja1wiIGluIG5hdmlnYXRvci5rZXlib2FyZCAmJiB0eXBlb2YgbmF2aWdhdG9yLmtleWJvYXJkLmxvY2sgPT09IFwiZnVuY3Rpb25cIjtcclxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBicm93c2VyIGlzIGluIGZ1bGwgc2NyZWVuIG1vZGUgQU5EIGZ1bGxzY3JlZW4gaGFzIGJlZW4gdHJpZ2dlcmVkIGJ5IG91ciBvd24ga2V5Ym9hcmQgc2hvcnRjdXQuLi5cclxuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubWF0Y2hNZWRpYShcIihkaXNwbGF5LW1vZGU6IGZ1bGxzY3JlZW4pXCIpLm1hdGNoZXMgJiYgZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2NraW5nRW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3Iua2V5Ym9hcmQudW5sb2NrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2NraW5nRW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3Iua2V5Ym9hcmQubG9jayhbXCJFc2NhcGVcIl0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBkb2N1bWVudC5ib2R5LnJlcXVlc3RGdWxsc2NyZWVuKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtb3VzZU1vdmVkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmN1cnNvciA9IFwiZGVmYXVsdFwiO1xyXG4gICAgICAgIHRoaXMubW91c2VUaW1lb3V0ID0gTU9VU0VfVElNRU9VVDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZU1vdXNlKGR0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5tb3VzZVRpbWVvdXQgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW91c2VUaW1lb3V0ID0gTWF0aC5tYXgoMCwgdGhpcy5tb3VzZVRpbWVvdXQgLSBkdCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5tb3VzZVRpbWVvdXQgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLnN0eWxlLmN1cnNvciA9IFwibm9uZVwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlQ2FudmFzU2l6ZSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXM7XHJcblxyXG4gICAgICAgIGNvbnN0IHNjYWxlID0gTWF0aC5tYXgoXHJcbiAgICAgICAgICAgIDEsXHJcbiAgICAgICAgICAgIE1hdGguZmxvb3IoTWF0aC5taW4od2luZG93LmlubmVyV2lkdGggLyB3aWR0aCwgd2luZG93LmlubmVySGVpZ2h0IC8gaGVpZ2h0KSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBzdHlsZSA9IHRoaXMuY2FudmFzLnN0eWxlO1xyXG4gICAgICAgIHN0eWxlLndpZHRoID0gd2lkdGggKiBzY2FsZSArIFwicHhcIjtcclxuICAgICAgICBzdHlsZS5oZWlnaHQgPSBoZWlnaHQgKiBzY2FsZSArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdhbWVMb29wKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRVcGRhdGVUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XHJcbiAgICAgICAgY29uc3QgZHQgPSBjbGFtcCgoY3VycmVudFVwZGF0ZVRpbWUgLSB0aGlzLmxhc3RVcGRhdGVUaW1lKSAvIDEwMDAsIDAsIE1BWF9EVCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGUoZHQpO1xyXG4gICAgICAgIHRoaXMubGFzdFVwZGF0ZVRpbWUgPSBjdXJyZW50VXBkYXRlVGltZTtcclxuXHJcbiAgICAgICAgY29uc3QgeyBjdHgsIHdpZHRoLCBoZWlnaHQgfSA9IHRoaXM7XHJcbiAgICAgICAgY3R4LnNhdmUoKTtcclxuICAgICAgICBjdHguaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XHJcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuYmFja2dyb3VuZENvbG9yO1xyXG4gICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAgICB0aGlzLmRyYXcoY3R4LCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG5cclxuICAgICAgICB0aGlzLm5leHRGcmFtZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbmV4dEZyYW1lKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZ2FtZUxvb3BJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLmdhbWVMb29wQ2FsbGJhY2spO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB1cGRhdGUoZHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZ2FtZXBhZC51cGRhdGUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZU1vdXNlKGR0KTtcclxuICAgICAgICB0aGlzLnNjZW5lcy51cGRhdGUoZHQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBkcmF3KGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2NlbmVzLmRyYXcoY3R4LCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2FtZUxvb3BJZCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGFzdFVwZGF0ZVRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcclxuICAgICAgICAgICAgdGhpcy5uZXh0RnJhbWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0b3AoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2FtZUxvb3BJZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuZ2FtZUxvb3BJZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2FtZUxvb3BJZCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBaUJBO0FBQUE7QUFBQTtBQWhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQS9IQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/Game.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/GlobalState.js":
|
|
/*!****************************!*\
|
|
!*** ./lib/GlobalState.js ***!
|
|
\****************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GlobalState = void 0;\nvar GlobalStateKey;\n(function (GlobalStateKey) {\n GlobalStateKey[\"BEAT_GAME_ONCE\"] = \"beatGame\";\n GlobalStateKey[\"ACHIEVED_ENDINGS\"] = \"achievedEndings\";\n})(GlobalStateKey || (GlobalStateKey = {}));\nclass GlobalState {\n static getParsedValueByKey(key, fallback) {\n const serialized = localStorage.getItem(key);\n if (serialized) {\n try {\n const parsed = JSON.parse(serialized);\n return parsed || fallback;\n }\n catch (e) {\n console.error(e);\n return fallback;\n }\n }\n else {\n return fallback;\n }\n }\n static setKeyValuePair(key, value) {\n try {\n const serialized = JSON.stringify(value);\n localStorage.setItem(key, serialized);\n }\n catch (e) {\n console.error(e);\n }\n }\n static getHasBeatenGame() {\n return GlobalState.getParsedValueByKey(GlobalStateKey.BEAT_GAME_ONCE, false);\n }\n static setHasBeatenGame() {\n GlobalState.setKeyValuePair(GlobalStateKey.BEAT_GAME_ONCE, true);\n }\n static getAchievedEndings() {\n return GlobalState.getParsedValueByKey(GlobalStateKey.ACHIEVED_ENDINGS, []);\n }\n static setAchievedEnding(questKey) {\n const achievedEndings = GlobalState.getParsedValueByKey(GlobalStateKey.ACHIEVED_ENDINGS, []);\n if (!achievedEndings.includes(questKey)) {\n achievedEndings.push(questKey);\n GlobalState.setKeyValuePair(GlobalStateKey.ACHIEVED_ENDINGS, achievedEndings);\n }\n }\n}\nexports.GlobalState = GlobalState;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvR2xvYmFsU3RhdGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvR2xvYmFsU3RhdGUudHM/YjQwMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBRdWVzdEtleSB9IGZyb20gXCIuL1F1ZXN0c1wiO1xyXG5cclxuZW51bSBHbG9iYWxTdGF0ZUtleSB7XHJcbiAgQkVBVF9HQU1FX09OQ0UgPSBcImJlYXRHYW1lXCIsXHJcbiAgQUNISUVWRURfRU5ESU5HUyA9IFwiYWNoaWV2ZWRFbmRpbmdzXCJcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEdsb2JhbFN0YXRlIHtcclxuICBwcml2YXRlIHN0YXRpYyBnZXRQYXJzZWRWYWx1ZUJ5S2V5PFQ+IChrZXk6IEdsb2JhbFN0YXRlS2V5LCBmYWxsYmFjazogVCk6IFQge1xyXG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XHJcbiAgICBpZiAoc2VyaWFsaXplZCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc2VyaWFsaXplZCkgYXMgVDtcclxuICAgICAgICByZXR1cm4gcGFyc2VkIHx8IGZhbGxiYWNrO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICByZXR1cm4gZmFsbGJhY2s7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxsYmFjaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHNldEtleVZhbHVlUGFpcjxUPiAoa2V5OiBHbG9iYWxTdGF0ZUtleSwgdmFsdWU6IFQpOiB2b2lkIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgc2VyaWFsaXplZCk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldEhhc0JlYXRlbkdhbWUgKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIEdsb2JhbFN0YXRlLmdldFBhcnNlZFZhbHVlQnlLZXk8Ym9vbGVhbj4oR2xvYmFsU3RhdGVLZXkuQkVBVF9HQU1FX09OQ0UsIGZhbHNlKTtcclxuICB9XHJcbiAgcHVibGljIHN0YXRpYyBzZXRIYXNCZWF0ZW5HYW1lICgpOiB2b2lkIHtcclxuICAgIEdsb2JhbFN0YXRlLnNldEtleVZhbHVlUGFpcjxib29sZWFuPihHbG9iYWxTdGF0ZUtleS5CRUFUX0dBTUVfT05DRSwgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldEFjaGlldmVkRW5kaW5ncyAoKTogUXVlc3RLZXlbXSB7XHJcbiAgICByZXR1cm4gR2xvYmFsU3RhdGUuZ2V0UGFyc2VkVmFsdWVCeUtleTxRdWVzdEtleVtdPihHbG9iYWxTdGF0ZUtleS5BQ0hJRVZFRF9FTkRJTkdTLCBbXSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIHNldEFjaGlldmVkRW5kaW5nIChxdWVzdEtleTogUXVlc3RLZXkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGFjaGlldmVkRW5kaW5ncyA9IEdsb2JhbFN0YXRlLmdldFBhcnNlZFZhbHVlQnlLZXk8UXVlc3RLZXlbXT4oR2xvYmFsU3RhdGVLZXkuQUNISUVWRURfRU5ESU5HUywgW10pO1xyXG4gICAgaWYgKCFhY2hpZXZlZEVuZGluZ3MuaW5jbHVkZXMocXVlc3RLZXkpKSB7XHJcbiAgICAgIGFjaGlldmVkRW5kaW5ncy5wdXNoKHF1ZXN0S2V5KTtcclxuICAgICAgR2xvYmFsU3RhdGUuc2V0S2V5VmFsdWVQYWlyPFF1ZXN0S2V5W10+KEdsb2JhbFN0YXRlS2V5LkFDSElFVkVEX0VORElOR1MsIGFjaGlldmVkRW5kaW5ncyk7XHJcbiAgICB9XHJcbiAgfVxyXG59Il0sIm1hcHBpbmdzIjoiOzs7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUEzQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/GlobalState.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/MapInfo.js":
|
|
/*!************************!*\
|
|
!*** ./lib/MapInfo.js ***!
|
|
\************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MapInfo = exports.MapObjectType = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst level_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../assets/maps/level.json */ \"./assets/maps/level.json\"));\nvar MapObjectType;\n(function (MapObjectType) {\n MapObjectType[\"ENTITY\"] = \"entity\";\n MapObjectType[\"TRIGGER\"] = \"trigger\";\n MapObjectType[\"POINTER\"] = \"pointer\";\n MapObjectType[\"GATE\"] = \"gate\";\n MapObjectType[\"BOUNDS\"] = \"bounds\";\n MapObjectType[\"SOUND\"] = \"sound\";\n})(MapObjectType = exports.MapObjectType || (exports.MapObjectType = {}));\nclass MapInfo {\n getLayer(type, name) {\n var _a;\n return (_a = level_json_1.default.layers.find(layer => layer.type === type && layer.name === name)) !== null && _a !== void 0 ? _a : null;\n }\n getObject(name) {\n var _a, _b;\n return (_b = (_a = this.getLayer(\"objectgroup\", \"objects\")) === null || _a === void 0 ? void 0 : _a.objects.find(object => object.name === name)) !== null && _b !== void 0 ? _b : null;\n }\n getObjects(type) {\n var _a, _b;\n return (_b = (_a = this.getLayer(\"objectgroup\", \"objects\")) === null || _a === void 0 ? void 0 : _a.objects.filter(object => !type || object.type === type)) !== null && _b !== void 0 ? _b : [];\n }\n getPlayerStart() {\n const mapHeight = MapInfo.getMapSize().height;\n const object = this.getObject(\"player\");\n if (object) {\n return { x: object.x, y: mapHeight - object.y };\n }\n else {\n return { x: 0, y: 0 };\n }\n }\n getGameObjectInfos(type) {\n const mapHeight = MapInfo.getMapSize().height;\n return this.getObjects(type).map(object => {\n var _a;\n return ({\n name: object.name,\n x: object.x,\n y: mapHeight - object.y,\n type: object.type,\n width: object.width,\n height: object.height,\n properties: ((_a = object.properties) !== null && _a !== void 0 ? _a : []).reduce((props, property) => {\n props[property.name] = property.value;\n return props;\n }, {})\n });\n });\n }\n getEntities() {\n return this.getGameObjectInfos(MapObjectType.ENTITY);\n }\n getSounds() {\n return this.getGameObjectInfos(MapObjectType.SOUND);\n }\n getPointers() {\n return this.getGameObjectInfos(MapObjectType.POINTER);\n }\n getTriggerObjects() {\n return this.getGameObjectInfos(MapObjectType.TRIGGER);\n }\n getBoundObjects() {\n return this.getGameObjectInfos(MapObjectType.BOUNDS);\n }\n getGateObjects() {\n return this.getGameObjectInfos(MapObjectType.GATE);\n }\n static normalizeCoordinates(objects) {\n const mapHeight = MapInfo.getMapSize().height;\n objects.forEach(o => { o.y = mapHeight - o.y; });\n return objects;\n }\n static getMapSize() {\n return {\n width: level_json_1.default.width * level_json_1.default.tilewidth,\n height: level_json_1.default.height * level_json_1.default.tileheight\n };\n }\n}\nexports.MapInfo = MapInfo;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvTWFwSW5mby5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9NYXBJbmZvLnRzPzQxYTEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGpzb24sIHsgTWFwTGF5ZXJKU09OVHlwZSwgTWFwT2JqZWN0SlNPTiB9IGZyb20gXCIuLi9hc3NldHMvbWFwcy9sZXZlbC5qc29uXCI7XHJcbmltcG9ydCB7IFZlY3RvcjJMaWtlIH0gZnJvbSBcIi4vZ3JhcGhpY3MvVmVjdG9yMlwiO1xyXG5cclxuZXhwb3J0IGVudW0gTWFwT2JqZWN0VHlwZSB7XHJcbiAgICBFTlRJVFkgPSBcImVudGl0eVwiLFxyXG4gICAgVFJJR0dFUiA9IFwidHJpZ2dlclwiLFxyXG4gICAgUE9JTlRFUiA9IFwicG9pbnRlclwiLFxyXG4gICAgR0FURSA9IFwiZ2F0ZVwiLFxyXG4gICAgQk9VTkRTID0gXCJib3VuZHNcIixcclxuICAgIFNPVU5EID0gXCJzb3VuZFwiXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgR2FtZU9iamVjdFByb3BlcnRpZXMge1xyXG4gICAgZGlyZWN0aW9uPzogXCJ1cFwiIHwgXCJkb3duXCIgfCBcImxlZnRcIiB8IFwicmlnaHRcIjtcclxuICAgIGRpc3RhbmNlOiBudW1iZXI7XHJcbiAgICB2ZWxvY2l0eTogbnVtYmVyO1xyXG4gICAgdGFyZ2V0Pzogc3RyaW5nO1xyXG4gICAgZHVyYXRpb24/OiBudW1iZXI7XHJcbiAgICB0ZWxlcG9ydFk/OiBudW1iZXI7XHJcbiAgICBkaXNhYmxlUGFydGljbGVzPzogYm9vbGVhbjtcclxuICAgIHNldEdsb2JhbEtleT86IHN0cmluZztcclxuICAgIHNldEdsb2JhbFZhbD86IHN0cmluZztcclxuICAgIHNldERpYWxvZ0VudGl0eT86IHN0cmluZztcclxuICAgIHNldERpYWxvZ1ZhbHVlPzogc3RyaW5nO1xyXG4gICAgY29udGVudD86IHN0cmluZztcclxuICAgIGVudGVyRmFkZVRpbWU/OiBudW1iZXI7XHJcbiAgICBlbnRlclNsZWVwVGltZT86IG51bWJlcjtcclxuICAgIGVudGVyU291bmQ/OiBzdHJpbmc7XHJcbiAgICBleGl0RmFkZVRpbWU/OiBudW1iZXI7XHJcbiAgICBleGl0U2xlZXBUaW1lPzogbnVtYmVyO1xyXG4gICAgZXhpdFNvdW5kPzogc3RyaW5nO1xyXG4gICAgYmdtPzogc3RyaW5nO1xyXG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG4gICAgaWRlbnRpZmllcj86IHN0cmluZztcclxuICAgIGludGVuc2l0eT86IG51bWJlcjtcclxuICAgIHZvbHVtZT86IG51bWJlcjtcclxuICAgIHNvdW5kPzogc3RyaW5nO1xyXG4gICAgY29sPzogbnVtYmVyO1xyXG4gICAgcm93PzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEdhbWVPYmplY3RJbmZvIHtcclxuICAgIHg6IG51bWJlcjtcclxuICAgIHk6IG51bWJlcjtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIHR5cGU6IHN0cmluZztcclxuICAgIHdpZHRoOiBudW1iZXI7XHJcbiAgICBoZWlnaHQ6IG51bWJlcjtcclxuICAgIHByb3BlcnRpZXM6IEdhbWVPYmplY3RQcm9wZXJ0aWVzO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTWFwSW5mbyB7XHJcbiAgICBwcml2YXRlIGdldExheWVyPFQgZXh0ZW5kcyBzdHJpbmc+KHR5cGU6IFQsIG5hbWU6IHN0cmluZyk6IE1hcExheWVySlNPTlR5cGU8VD4gfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gPE1hcExheWVySlNPTlR5cGU8VD4+anNvbi5sYXllcnMuZmluZChsYXllciA9PiBsYXllci50eXBlID09PSB0eXBlICYmIGxheWVyLm5hbWUgPT09IG5hbWUpID8/IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRPYmplY3QobmFtZTogc3RyaW5nKTogTWFwT2JqZWN0SlNPTiB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldExheWVyKFwib2JqZWN0Z3JvdXBcIiwgXCJvYmplY3RzXCIpPy5vYmplY3RzLmZpbmQob2JqZWN0ID0+IG9iamVjdC5uYW1lID09PSBuYW1lKSA/PyBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0T2JqZWN0cyh0eXBlPzogc3RyaW5nKTogTWFwT2JqZWN0SlNPTltdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRMYXllcihcIm9iamVjdGdyb3VwXCIsIFwib2JqZWN0c1wiKT8ub2JqZWN0cy5maWx0ZXIob2JqZWN0ID0+ICF0eXBlIHx8IG9iamVjdC50eXBlID09PSB0eXBlKSA/PyBbXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UGxheWVyU3RhcnQoKTogVmVjdG9yMkxpa2Uge1xyXG4gICAgICAgIGNvbnN0IG1hcEhlaWdodCA9IE1hcEluZm8uZ2V0TWFwU2l6ZSgpLmhlaWdodDtcclxuICAgICAgICBjb25zdCBvYmplY3QgPSB0aGlzLmdldE9iamVjdChcInBsYXllclwiKTtcclxuXHJcbiAgICAgICAgaWYgKG9iamVjdCkge1xyXG4gICAgICAgICAgICByZXR1cm4geyB4OiBvYmplY3QueCwgeTogbWFwSGVpZ2h0IC0gb2JqZWN0LnkgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4geyB4OiAwLCB5OiAwIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRHYW1lT2JqZWN0SW5mb3ModHlwZTogTWFwT2JqZWN0VHlwZSk6IEdhbWVPYmplY3RJbmZvW10ge1xyXG4gICAgICAgIGNvbnN0IG1hcEhlaWdodCA9IE1hcEluZm8uZ2V0TWFwU2l6ZSgpLmhlaWdodDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0cyh0eXBlKS5tYXAob2JqZWN0ID0+ICh7XHJcbiAgICAgICAgICAgIG5hbWU6IG9iamVjdC5uYW1lLFxyXG4gICAgICAgICAgICB4OiBvYmplY3QueCxcclxuICAgICAgICAgICAgeTogbWFwSGVpZ2h0IC0gb2JqZWN0LnksXHJcbiAgICAgICAgICAgIHR5cGU6IG9iamVjdC50eXBlLFxyXG4gICAgICAgICAgICB3aWR0aDogb2JqZWN0LndpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IG9iamVjdC5oZWlnaHQsXHJcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IChvYmplY3QucHJvcGVydGllcyA/PyBbXSkucmVkdWNlKChwcm9wcywgcHJvcGVydHkpID0+IHtcclxuICAgICAgICAgICAgICAgIHByb3BzW3Byb3BlcnR5Lm5hbWVdID0gcHJvcGVydHkudmFsdWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHM7XHJcbiAgICAgICAgICAgIH0sIHt9KVxyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RW50aXRpZXMoKTogR2FtZU9iamVjdEluZm9bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0R2FtZU9iamVjdEluZm9zKE1hcE9iamVjdFR5cGUuRU5USVRZKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U291bmRzKCk6IEdhbWVPYmplY3RJbmZvW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEdhbWVPYmplY3RJbmZvcyhNYXBPYmplY3RUeXBlLlNPVU5EKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UG9pbnRlcnMoKTogR2FtZU9iamVjdEluZm9bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0R2FtZU9iamVjdEluZm9zKE1hcE9iamVjdFR5cGUuUE9JTlRFUik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFRyaWdnZXJPYmplY3RzKCk6IEdhbWVPYmplY3RJbmZvW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEdhbWVPYmplY3RJbmZvcyhNYXBPYmplY3RUeXBlLlRSSUdHRVIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRCb3VuZE9iamVjdHMoKTogR2FtZU9iamVjdEluZm9bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0R2FtZU9iamVjdEluZm9zKE1hcE9iamVjdFR5cGUuQk9VTkRTKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0R2F0ZU9iamVjdHMoKTogR2FtZU9iamVjdEluZm9bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0R2FtZU9iamVjdEluZm9zKE1hcE9iamVjdFR5cGUuR0FURSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBub3JtYWxpemVDb29yZGluYXRlcyhvYmplY3RzOiBNYXBPYmplY3RKU09OW10pOiBNYXBPYmplY3RKU09OW10ge1xyXG4gICAgICAgIGNvbnN0IG1hcEhlaWdodCA9IE1hcEluZm8uZ2V0TWFwU2l6ZSgpLmhlaWdodDtcclxuICAgICAgICBvYmplY3RzLmZvckVhY2gobyA9PiB7IG8ueSA9IG1hcEhlaWdodCAtIG8ueTsgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBvYmplY3RzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0TWFwU2l6ZSgpOiB7IHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyIH0ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHdpZHRoOiBqc29uLndpZHRoICoganNvbi50aWxld2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDoganNvbi5oZWlnaHQgKiBqc29uLnRpbGVoZWlnaHRcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBeUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUVBOztBQUNBO0FBQ0E7QUFFQTs7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTlFQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/MapInfo.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/Menu.js":
|
|
/*!*********************!*\
|
|
!*** ./lib/Menu.js ***!
|
|
\*********************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MenuList = exports.MenuItem = exports.MenuAlignment = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Assets_1 = __webpack_require__(/*! ./Assets */ \"./lib/Assets.js\");\nconst Signal_1 = __webpack_require__(/*! ./Signal */ \"./lib/Signal.js\");\nconst Sound_1 = __webpack_require__(/*! ./Sound */ \"./lib/Sound.js\");\nconst SceneNode_1 = __webpack_require__(/*! ./scene/SceneNode */ \"./lib/scene/SceneNode.js\");\nvar MenuAlignment;\n(function (MenuAlignment) {\n MenuAlignment[MenuAlignment[\"LEFT\"] = 0] = \"LEFT\";\n MenuAlignment[MenuAlignment[\"CENTER\"] = 1] = \"CENTER\";\n MenuAlignment[MenuAlignment[\"RIGHT\"] = 2] = \"RIGHT\";\n})(MenuAlignment = exports.MenuAlignment || (exports.MenuAlignment = {}));\n/**\n * Simple MenuItem Class for usage in a MenuList.\n * Currently, each item is only rendered as simple text. The focused state is visualized via an\n * additional `►` character as prefix. The item instances don't need to be manually drawn, since the\n * MenuList class' draw method will take care of it.\n */\nclass MenuItem {\n constructor(id, label, font, color, x, y, enabled = true) {\n this.id = id;\n this.label = label;\n this.font = font;\n this.color = color;\n this.x = x;\n this.y = y;\n this.enabled = enabled;\n this.focused = false;\n }\n /**\n * Draw method for a single ListItem. Is automatically called when the parent\n * MenuList's draw method is called.\n *\n * @param ctx CanvasRenderingContext2D\n */\n draw(ctx, align) {\n ctx.save();\n const alpha = this.enabled ? 1 : 0.35;\n let x = this.x;\n const y = this.y;\n const text = this.label;\n const width = this.font.measureText(text).width;\n if (align === MenuAlignment.CENTER) {\n x -= Math.round(width / 2);\n }\n this.font.drawText(ctx, text, x, y, this.color, 0, alpha);\n if (this.focused) {\n ctx.drawImage(MenuItem.selectorImage, x - 13, y + 2);\n }\n ctx.restore();\n }\n}\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/menu_selector.png\"),\n tslib_1.__metadata(\"design:type\", HTMLImageElement)\n], MenuItem, \"selectorImage\", void 0);\nexports.MenuItem = MenuItem;\n/**\n * A simple MenuList that can hold MenuItems and navigate them in two directions via methods. On\n * each navigational change, the new MenuItem is focused. When calling the `executeAction` method a\n * signal is emitted containing the focused MenuItem's ID. Disabled MenuItems will be skipped\n * automatically when navigating. The draw method of the list instance has to be called to have all\n * containing buttons be drawn automatically.\n */\nclass MenuList extends SceneNode_1.SceneNode {\n constructor(_a = {}) {\n var { align = MenuAlignment.LEFT } = _a, args = tslib_1.__rest(_a, [\"align\"]);\n super(args);\n this.items = [];\n this.onActivated = new Signal_1.Signal();\n this.align = align;\n }\n /**\n * Adds an arbitrary number of menu items to the menu list\n * The first available menu item will be focused automatically\n * @param items\n */\n addItems(...items) {\n this.items.push(...items);\n this.focusFirstItem();\n }\n /**\n * Clears all menu items from the menu instance\n */\n reset() {\n this.items = [];\n }\n /**\n * Sets an arbitrary number of menu items to the menu list and overrides any previously added\n * items. The first available menu item will be focused automatically.\n */\n setItems(...items) {\n this.items = [...items];\n this.focusFirstItem();\n return this;\n }\n /**\n * Finds and focuses the first available item if no item was focused before.\n */\n focusFirstItem() {\n if (!this.getFocusedItem()) {\n const index = this.items.findIndex(item => item.enabled);\n if (index > -1) {\n this.items[index].focused = true;\n }\n }\n }\n getFocusedItem() {\n return this.items.find(item => item.focused);\n }\n getFocusedItemIndex() {\n return this.items.findIndex(item => item.focused);\n }\n unfocusAllItems() {\n this.items.forEach(item => { item.focused = false; });\n }\n focusItem(item) {\n this.unfocusAllItems();\n item.focused = true;\n }\n /**\n * Recursive method to focus the next item in the direction provided in the argument.\n * @param currentIndex - The index of the currently focused item in the items array\n * @param direction - Direction in which the next item should be searched for.\n * Either 1 (forwards) or -1 (backwards)\n */\n findAndFocusNextItem(currentIndex, direction) {\n const min = direction > 0 ? 0 : (this.items.length - 1);\n const max = direction > 0 ? (this.items.length - 1) : 0;\n const nextIndex = (currentIndex === max) ? min : currentIndex + direction;\n const nextItem = this.items[nextIndex];\n if (nextItem.enabled) {\n this.focusItem(this.items[nextIndex]);\n }\n else {\n this.findAndFocusNextItem(nextIndex, direction);\n }\n MenuList.click.stop();\n MenuList.click.play();\n }\n /**\n * Method to navigate the focus of the menu list to the next item\n */\n next() {\n this.findAndFocusNextItem(this.getFocusedItemIndex(), 1);\n }\n /**\n * Method to navigate the focus of the menu list to the previous item\n */\n prev() {\n this.findAndFocusNextItem(this.getFocusedItemIndex(), -1);\n }\n executeAction(sound = MenuList.confirm) {\n const focusedButton = this.getFocusedItem();\n if (focusedButton && focusedButton.enabled) {\n sound.stop();\n sound.play();\n this.onActivated.emit(focusedButton.id);\n }\n }\n draw(ctx) {\n this.items.forEach(item => {\n item.draw(ctx, this.align);\n });\n }\n}\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/interface/click.mp3\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], MenuList, \"click\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/interface/confirm.mp3\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], MenuList, \"confirm\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/interface/select.mp3\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], MenuList, \"select\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/interface/bass.mp3\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], MenuList, \"pause\", void 0);\nexports.MenuList = MenuList;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvTWVudS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9NZW51LnRzP2YwMTAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXNzZXQgfSBmcm9tIFwiLi9Bc3NldHNcIjtcclxuaW1wb3J0IHsgQml0bWFwRm9udCB9IGZyb20gXCIuL0JpdG1hcEZvbnRcIjtcclxuaW1wb3J0IHsgU2lnbmFsIH0gZnJvbSBcIi4vU2lnbmFsXCI7XHJcbmltcG9ydCB7IFNvdW5kIH0gZnJvbSBcIi4vU291bmRcIjtcclxuaW1wb3J0IHsgU2NlbmVOb2RlLCBTY2VuZU5vZGVBcmdzIH0gZnJvbSBcIi4vc2NlbmUvU2NlbmVOb2RlXCI7XHJcbmltcG9ydCB7IEZyaWVuZGx5RmlyZSB9IGZyb20gXCIuL0ZyaWVuZGx5RmlyZVwiO1xyXG5cclxuZXhwb3J0IGVudW0gTWVudUFsaWdubWVudCB7IExFRlQsIENFTlRFUiwgUklHSFQgfVxyXG5cclxuLyoqXHJcbiAqIFNpbXBsZSBNZW51SXRlbSBDbGFzcyBmb3IgdXNhZ2UgaW4gYSBNZW51TGlzdC5cclxuICogQ3VycmVudGx5LCBlYWNoIGl0ZW0gaXMgb25seSByZW5kZXJlZCBhcyBzaW1wbGUgdGV4dC4gVGhlIGZvY3VzZWQgc3RhdGUgaXMgdmlzdWFsaXplZCB2aWEgYW5cclxuICogYWRkaXRpb25hbCBg4pa6YCBjaGFyYWN0ZXIgYXMgcHJlZml4LiBUaGUgaXRlbSBpbnN0YW5jZXMgZG9uJ3QgbmVlZCB0byBiZSBtYW51YWxseSBkcmF3biwgc2luY2UgdGhlXHJcbiAqIE1lbnVMaXN0IGNsYXNzJyBkcmF3IG1ldGhvZCB3aWxsIHRha2UgY2FyZSBvZiBpdC5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBNZW51SXRlbSB7XHJcbiAgICBwdWJsaWMgaWQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBsYWJlbDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBmb250OiBCaXRtYXBGb250O1xyXG4gICAgcHJpdmF0ZSBjb2xvcjogXCJibGFja1wiIHwgXCJ3aGl0ZVwiO1xyXG4gICAgcHVibGljIHg6IG51bWJlcjtcclxuICAgIHB1YmxpYyB5OiBudW1iZXI7XHJcbiAgICBwdWJsaWMgZW5hYmxlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBmb2N1c2VkOiBib29sZWFuO1xyXG5cclxuICAgIEBhc3NldChcInNwcml0ZXMvbWVudV9zZWxlY3Rvci5wbmdcIilcclxuICAgIHByaXZhdGUgc3RhdGljIHNlbGVjdG9ySW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQ7XHJcblxyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGlkOiBzdHJpbmcsIGxhYmVsOiBzdHJpbmcsIGZvbnQ6IEJpdG1hcEZvbnQsIGNvbG9yOiBcImJsYWNrXCIgfCBcIndoaXRlXCIsIHg6IG51bWJlciwgeTogbnVtYmVyLFxyXG4gICAgICAgIGVuYWJsZWQgPSB0cnVlXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmlkID0gaWQ7XHJcbiAgICAgICAgdGhpcy5sYWJlbCA9IGxhYmVsO1xyXG4gICAgICAgIHRoaXMuZm9udCA9IGZvbnQ7XHJcbiAgICAgICAgdGhpcy5jb2xvciA9IGNvbG9yO1xyXG4gICAgICAgIHRoaXMueCA9IHg7XHJcbiAgICAgICAgdGhpcy55ID0geTtcclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBlbmFibGVkO1xyXG4gICAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRHJhdyBtZXRob2QgZm9yIGEgc2luZ2xlIExpc3RJdGVtLiBJcyBhdXRvbWF0aWNhbGx5IGNhbGxlZCB3aGVuIHRoZSBwYXJlbnRcclxuICAgICAqIE1lbnVMaXN0J3MgZHJhdyBtZXRob2QgaXMgY2FsbGVkLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjdHggQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkcmF3KGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCBhbGlnbjogTWVudUFsaWdubWVudCkge1xyXG4gICAgICAgIGN0eC5zYXZlKCk7XHJcbiAgICAgICAgY29uc3QgYWxwaGEgPSB0aGlzLmVuYWJsZWQgPyAxIDogMC4zNTtcclxuXHJcbiAgICAgICAgbGV0IHggPSB0aGlzLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHRoaXMueTtcclxuXHJcbiAgICAgICAgY29uc3QgdGV4dCA9IHRoaXMubGFiZWw7XHJcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmZvbnQubWVhc3VyZVRleHQodGV4dCkud2lkdGg7XHJcblxyXG5cclxuICAgICAgICBpZiAoYWxpZ24gPT09IE1lbnVBbGlnbm1lbnQuQ0VOVEVSKSB7XHJcbiAgICAgICAgICAgIHggLT0gTWF0aC5yb3VuZCh3aWR0aCAvIDIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5mb250LmRyYXdUZXh0KGN0eCwgdGV4dCwgeCwgeSwgdGhpcy5jb2xvciwgMCwgYWxwaGEpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5mb2N1c2VkKSB7XHJcbiAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoTWVudUl0ZW0uc2VsZWN0b3JJbWFnZSwgeCAtIDEzLCB5ICsgMik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE1lbnVMaXN0QXJncyBleHRlbmRzIFNjZW5lTm9kZUFyZ3Mge1xyXG4gICAgYWxpZ24/OiBNZW51QWxpZ25tZW50O1xyXG59XHJcblxyXG4vKipcclxuICogQSBzaW1wbGUgTWVudUxpc3QgdGhhdCBjYW4gaG9sZCBNZW51SXRlbXMgYW5kIG5hdmlnYXRlIHRoZW0gaW4gdHdvIGRpcmVjdGlvbnMgdmlhIG1ldGhvZHMuIE9uXHJcbiAqIGVhY2ggbmF2aWdhdGlvbmFsIGNoYW5nZSwgdGhlIG5ldyBNZW51SXRlbSBpcyBmb2N1c2VkLiBXaGVuIGNhbGxpbmcgdGhlIGBleGVjdXRlQWN0aW9uYCBtZXRob2QgYVxyXG4gKiBzaWduYWwgaXMgZW1pdHRlZCBjb250YWluaW5nIHRoZSBmb2N1c2VkIE1lbnVJdGVtJ3MgSUQuIERpc2FibGVkIE1lbnVJdGVtcyB3aWxsIGJlIHNraXBwZWRcclxuICogYXV0b21hdGljYWxseSB3aGVuIG5hdmlnYXRpbmcuIFRoZSBkcmF3IG1ldGhvZCBvZiB0aGUgbGlzdCBpbnN0YW5jZSBoYXMgdG8gYmUgY2FsbGVkIHRvIGhhdmUgYWxsXHJcbiAqIGNvbnRhaW5pbmcgYnV0dG9ucyBiZSBkcmF3biBhdXRvbWF0aWNhbGx5LlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIE1lbnVMaXN0IGV4dGVuZHMgU2NlbmVOb2RlPEZyaWVuZGx5RmlyZT4ge1xyXG4gICAgQGFzc2V0KFwic291bmRzL2ludGVyZmFjZS9jbGljay5tcDNcIilcclxuICAgIHB1YmxpYyBzdGF0aWMgY2xpY2s6IFNvdW5kO1xyXG4gICAgQGFzc2V0KFwic291bmRzL2ludGVyZmFjZS9jb25maXJtLm1wM1wiKVxyXG4gICAgcHVibGljIHN0YXRpYyBjb25maXJtOiBTb3VuZDtcclxuICAgIEBhc3NldChcInNvdW5kcy9pbnRlcmZhY2Uvc2VsZWN0Lm1wM1wiKVxyXG4gICAgcHVibGljIHN0YXRpYyBzZWxlY3Q6IFNvdW5kO1xyXG4gICAgQGFzc2V0KFwic291bmRzL2ludGVyZmFjZS9iYXNzLm1wM1wiKVxyXG4gICAgcHVibGljIHN0YXRpYyBwYXVzZTogU291bmQ7XHJcblxyXG4gICAgcHJpdmF0ZSBhbGlnbjogTWVudUFsaWdubWVudDtcclxuICAgIHByaXZhdGUgaXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcclxuICAgIHB1YmxpYyBvbkFjdGl2YXRlZCA9IG5ldyBTaWduYWw8c3RyaW5nPigpO1xyXG5cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcih7IGFsaWduID0gTWVudUFsaWdubWVudC5MRUZULCAuLi5hcmdzIH06IE1lbnVMaXN0QXJncyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIoYXJncyk7XHJcbiAgICAgICAgdGhpcy5hbGlnbiA9IGFsaWduO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIG1lbnUgaXRlbXMgdG8gdGhlIG1lbnUgbGlzdFxyXG4gICAgICogVGhlIGZpcnN0IGF2YWlsYWJsZSBtZW51IGl0ZW0gd2lsbCBiZSBmb2N1c2VkIGF1dG9tYXRpY2FsbHlcclxuICAgICAqIEBwYXJhbSBpdGVtc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWRkSXRlbXMoLi4uaXRlbXM6IE1lbnVJdGVtW10pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLml0ZW1zLnB1c2goLi4uaXRlbXMpO1xyXG4gICAgICAgIHRoaXMuZm9jdXNGaXJzdEl0ZW0oKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFycyBhbGwgbWVudSBpdGVtcyBmcm9tIHRoZSBtZW51IGluc3RhbmNlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgbWVudSBpdGVtcyB0byB0aGUgbWVudSBsaXN0IGFuZCBvdmVycmlkZXMgYW55IHByZXZpb3VzbHkgYWRkZWRcclxuICAgICAqIGl0ZW1zLiBUaGUgZmlyc3QgYXZhaWxhYmxlIG1lbnUgaXRlbSB3aWxsIGJlIGZvY3VzZWQgYXV0b21hdGljYWxseS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldEl0ZW1zKC4uLml0ZW1zOiBNZW51SXRlbVtdKTogdGhpcyB7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFsuLi5pdGVtc107XHJcbiAgICAgICAgdGhpcy5mb2N1c0ZpcnN0SXRlbSgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgYW5kIGZvY3VzZXMgdGhlIGZpcnN0IGF2YWlsYWJsZSBpdGVtIGlmIG5vIGl0ZW0gd2FzIGZvY3VzZWQgYmVmb3JlLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGZvY3VzRmlyc3RJdGVtKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5nZXRGb2N1c2VkSXRlbSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmVuYWJsZWQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbaW5kZXhdLmZvY3VzZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Rm9jdXNlZEl0ZW0oKTogTWVudUl0ZW0gfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLmZvY3VzZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Rm9jdXNlZEl0ZW1JbmRleCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uZm9jdXNlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1bmZvY3VzQWxsSXRlbXMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4geyBpdGVtLmZvY3VzZWQgPSBmYWxzZTsgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmb2N1c0l0ZW0oaXRlbTogTWVudUl0ZW0pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVuZm9jdXNBbGxJdGVtcygpO1xyXG4gICAgICAgIGl0ZW0uZm9jdXNlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWN1cnNpdmUgbWV0aG9kIHRvIGZvY3VzIHRoZSBuZXh0IGl0ZW0gaW4gdGhlIGRpcmVjdGlvbiBwcm92aWRlZCBpbiB0aGUgYXJndW1lbnQuXHJcbiAgICAgKiBAcGFyYW0gY3VycmVudEluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBjdXJyZW50bHkgZm9jdXNlZCBpdGVtIGluIHRoZSBpdGVtcyBhcnJheVxyXG4gICAgICogQHBhcmFtIGRpcmVjdGlvbiAgICAtIERpcmVjdGlvbiBpbiB3aGljaCB0aGUgbmV4dCBpdGVtIHNob3VsZCBiZSBzZWFyY2hlZCBmb3IuXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgRWl0aGVyIDEgKGZvcndhcmRzKSBvciAtMSAoYmFja3dhcmRzKVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGZpbmRBbmRGb2N1c05leHRJdGVtKGN1cnJlbnRJbmRleDogbnVtYmVyLCBkaXJlY3Rpb246IC0xIHwgMSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG1pbiA9IGRpcmVjdGlvbiA+IDAgPyAwIDogKHRoaXMuaXRlbXMubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgY29uc3QgbWF4ID0gZGlyZWN0aW9uID4gMCA/ICh0aGlzLml0ZW1zLmxlbmd0aCAtIDEpIDogMDtcclxuICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ID09PSBtYXgpID8gbWluIDogY3VycmVudEluZGV4ICsgZGlyZWN0aW9uO1xyXG5cclxuICAgICAgICBjb25zdCBuZXh0SXRlbSA9IHRoaXMuaXRlbXNbbmV4dEluZGV4XTtcclxuXHJcbiAgICAgICAgaWYgKG5leHRJdGVtLmVuYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5mb2N1c0l0ZW0odGhpcy5pdGVtc1tuZXh0SW5kZXhdKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZpbmRBbmRGb2N1c05leHRJdGVtKG5leHRJbmRleCwgZGlyZWN0aW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIE1lbnVMaXN0LmNsaWNrLnN0b3AoKTtcclxuICAgICAgICBNZW51TGlzdC5jbGljay5wbGF5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2QgdG8gbmF2aWdhdGUgdGhlIGZvY3VzIG9mIHRoZSBtZW51IGxpc3QgdG8gdGhlIG5leHQgaXRlbVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmV4dCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZpbmRBbmRGb2N1c05leHRJdGVtKHRoaXMuZ2V0Rm9jdXNlZEl0ZW1JbmRleCgpLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZCB0byBuYXZpZ2F0ZSB0aGUgZm9jdXMgb2YgdGhlIG1lbnUgbGlzdCB0byB0aGUgcHJldmlvdXMgaXRlbVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcHJldigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZpbmRBbmRGb2N1c05leHRJdGVtKHRoaXMuZ2V0Rm9jdXNlZEl0ZW1JbmRleCgpLCAtMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGV4ZWN1dGVBY3Rpb24oc291bmQ6IFNvdW5kID0gTWVudUxpc3QuY29uZmlybSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGZvY3VzZWRCdXR0b24gPSB0aGlzLmdldEZvY3VzZWRJdGVtKCk7XHJcblxyXG4gICAgICAgIGlmIChmb2N1c2VkQnV0dG9uICYmIGZvY3VzZWRCdXR0b24uZW5hYmxlZCkge1xyXG4gICAgICAgICAgICBzb3VuZC5zdG9wKCk7XHJcbiAgICAgICAgICAgIHNvdW5kLnBsYXkoKTtcclxuICAgICAgICAgICAgdGhpcy5vbkFjdGl2YXRlZC5lbWl0KGZvY3VzZWRCdXR0b24uaWQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZHJhdyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgaXRlbS5kcmF3KGN0eCwgdGhpcy5hbGlnbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTs7Ozs7QUFLQTtBQUNBO0FBYUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUE3Q0E7QUFEQTtBQUNBO0FBQUE7QUFYQTtBQThEQTs7Ozs7O0FBTUE7QUFDQTtBQWNBO0FBQUE7QUFDQTtBQUpBO0FBQ0E7QUFJQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTlIQTtBQURBO0FBQ0E7QUFBQTtBQUVBO0FBREE7QUFDQTtBQUFBO0FBRUE7QUFEQTtBQUNBO0FBQUE7QUFFQTtBQURBO0FBQ0E7QUFBQTtBQVJBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/Menu.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/MountainRiddle.js":
|
|
/*!*******************************!*\
|
|
!*** ./lib/MountainRiddle.js ***!
|
|
\*******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MountainRiddle = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Conversation_1 = __webpack_require__(/*! ./Conversation */ \"./lib/Conversation.js\");\nconst GameScene_1 = __webpack_require__(/*! ./scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst Sound_1 = __webpack_require__(/*! ./Sound */ \"./lib/Sound.js\");\nconst Assets_1 = __webpack_require__(/*! ./Assets */ \"./lib/Assets.js\");\nconst AMOUNT_GATE_COLS = 3;\nconst AMOUNT_GATE_ROWS = 5;\nclass MountainRiddle {\n constructor() {\n this.attemptCount = 0;\n this.failed = false;\n this.cleared = false;\n this.solution = this.getRandomizedSolution();\n }\n getRandomizedSolution() {\n const solution = [];\n for (let index = 0; index < AMOUNT_GATE_ROWS; index++) {\n solution.push(Math.floor(Math.random() * Math.floor(AMOUNT_GATE_COLS)));\n }\n return solution;\n }\n isCorrectGate(col, row) {\n return this.solution[row] === col;\n }\n checkGate(col, row) {\n if (!this.failed && !this.cleared && !this.isCorrectGate(col, row)) {\n this.failRiddle();\n }\n }\n wasAttempted() {\n return this.attemptCount > 0;\n }\n registerAttempt() {\n this.attemptCount++;\n }\n failRiddle() {\n Conversation_1.Conversation.setGlobal(\"gotTeleported\", \"true\");\n this.failed = true;\n this.registerAttempt();\n GameScene_1.GameScene.wrong.play();\n }\n isFailed() {\n return this.failed;\n }\n resetRiddle() {\n if (this.failed && !this.cleared) {\n this.solution = this.getRandomizedSolution();\n this.failed = false;\n }\n }\n isCleared() {\n return this.cleared;\n }\n clearRiddle() {\n if (!this.cleared) {\n MountainRiddle.sound.play();\n this.failed = false;\n this.cleared = true;\n }\n }\n}\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/item/fanfare.mp3\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], MountainRiddle, \"sound\", void 0);\nexports.MountainRiddle = MountainRiddle;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvTW91bnRhaW5SaWRkbGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvTW91bnRhaW5SaWRkbGUudHM/N2IwZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb252ZXJzYXRpb24gfSBmcm9tIFwiLi9Db252ZXJzYXRpb25cIjtcclxuaW1wb3J0IHsgR2FtZVNjZW5lIH0gZnJvbSBcIi4vc2NlbmVzL0dhbWVTY2VuZVwiO1xyXG5pbXBvcnQgeyBTb3VuZCB9IGZyb20gXCIuL1NvdW5kXCI7XHJcbmltcG9ydCB7IGFzc2V0IH0gZnJvbSBcIi4vQXNzZXRzXCI7XHJcblxyXG5jb25zdCBBTU9VTlRfR0FURV9DT0xTID0gMztcclxuY29uc3QgQU1PVU5UX0dBVEVfUk9XUyA9IDU7XHJcblxyXG5leHBvcnQgY2xhc3MgTW91bnRhaW5SaWRkbGUge1xyXG4gICAgcHJpdmF0ZSBhdHRlbXB0Q291bnQgPSAwO1xyXG4gICAgcHJpdmF0ZSBmYWlsZWQgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgY2xlYXJlZCA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBzb2x1dGlvbjogbnVtYmVyW107XHJcblxyXG4gICAgQGFzc2V0KFwic291bmRzL2l0ZW0vZmFuZmFyZS5tcDNcIilcclxuICAgIHByaXZhdGUgc3RhdGljIHNvdW5kOiBTb3VuZDtcclxuXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5zb2x1dGlvbiA9IHRoaXMuZ2V0UmFuZG9taXplZFNvbHV0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRSYW5kb21pemVkU29sdXRpb24oKTogbnVtYmVyW10ge1xyXG4gICAgICAgIGNvbnN0IHNvbHV0aW9uOiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgQU1PVU5UX0dBVEVfUk9XUzsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICBzb2x1dGlvbi5wdXNoKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIE1hdGguZmxvb3IoQU1PVU5UX0dBVEVfQ09MUykpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzb2x1dGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNDb3JyZWN0R2F0ZShjb2w6IG51bWJlciwgcm93OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zb2x1dGlvbltyb3ddID09PSBjb2w7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoZWNrR2F0ZShjb2w6IG51bWJlciwgcm93OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuZmFpbGVkICYmICF0aGlzLmNsZWFyZWQgJiYgIXRoaXMuaXNDb3JyZWN0R2F0ZShjb2wsIHJvdykpIHtcclxuICAgICAgICAgICAgdGhpcy5mYWlsUmlkZGxlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB3YXNBdHRlbXB0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0ZW1wdENvdW50ID4gMDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJBdHRlbXB0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYXR0ZW1wdENvdW50Kys7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGZhaWxSaWRkbGUoKTogdm9pZCB7XHJcbiAgICAgICAgQ29udmVyc2F0aW9uLnNldEdsb2JhbChcImdvdFRlbGVwb3J0ZWRcIiwgXCJ0cnVlXCIpO1xyXG4gICAgICAgIHRoaXMuZmFpbGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyQXR0ZW1wdCgpO1xyXG4gICAgICAgIEdhbWVTY2VuZS53cm9uZy5wbGF5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzRmFpbGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZhaWxlZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzZXRSaWRkbGUoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmFpbGVkICYmICF0aGlzLmNsZWFyZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zb2x1dGlvbiA9IHRoaXMuZ2V0UmFuZG9taXplZFNvbHV0aW9uKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZmFpbGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0NsZWFyZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xlYXJlZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJSaWRkbGUoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsZWFyZWQpIHtcclxuICAgICAgICAgICAgTW91bnRhaW5SaWRkbGUuc291bmQucGxheSgpO1xyXG4gICAgICAgICAgICB0aGlzLmZhaWxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQVNBO0FBUkE7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUEvREE7QUFEQTtBQUNBO0FBQUE7QUFQQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/MountainRiddle.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/Particles.js":
|
|
/*!**************************!*\
|
|
!*** ./lib/Particles.js ***!
|
|
\**************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.valueCurves = exports.ValueCurve = exports.Particle = exports.ParticleEmitter = exports.Particles = void 0;\nconst constants_1 = __webpack_require__(/*! ./constants */ \"./lib/constants.js\");\nconst Renderer_1 = __webpack_require__(/*! ./Renderer */ \"./lib/Renderer.js\");\nclass Particles {\n constructor(scene) {\n this.emitters = [];\n this.scene = scene;\n }\n update(dt) {\n this.emitters.forEach(emitter => emitter.update(dt));\n }\n addEmittersToRenderingQueue() {\n this.emitters.forEach(emitter => {\n this.scene.renderer.add({\n type: Renderer_1.RenderingType.PARTICLE_EMITTER,\n layer: emitter.renderingLayer,\n zIndex: emitter.zIndex,\n emitter\n });\n });\n }\n // Direct drawing of particles is deactivated since it's handled via rendering engine\n draw(ctx) { }\n addEmitter(emitter) {\n this.emitters.push(emitter);\n }\n dropEmitter(emitter) {\n const index = this.emitters.indexOf(emitter);\n if (index >= 0) {\n this.emitters.splice(index, 1);\n return true;\n }\n return false;\n }\n createEmitter(args) {\n const emitter = new ParticleEmitter(args);\n this.addEmitter(emitter);\n return emitter;\n }\n}\nexports.Particles = Particles;\nclass ParticleEmitter {\n constructor(args) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n this.particles = [];\n this.x = args.position.x;\n this.y = args.position.y;\n this.offsetGenerator = toGenerator((_a = args.offset) !== null && _a !== void 0 ? _a : ({ x: 0, y: 0 }));\n this.velocityGenerator = toGenerator((_b = args.velocity) !== null && _b !== void 0 ? _b : ({ x: 0, y: 0 }));\n this.colorGenerator = toGenerator((_c = args.color) !== null && _c !== void 0 ? _c : \"white\");\n this.alphaGenerator = toGenerator((_d = args.alpha) !== null && _d !== void 0 ? _d : 1);\n this.sizeGenerator = toGenerator((_e = args.size) !== null && _e !== void 0 ? _e : 4);\n this.gravityGenerator = toGenerator((_f = args.gravity) !== null && _f !== void 0 ? _f : { x: 0, y: constants_1.GRAVITY });\n this.lifetimeGenerator = toGenerator((_g = args.lifetime) !== null && _g !== void 0 ? _g : 5);\n this.angleGenerator = toGenerator((_h = args.angle) !== null && _h !== void 0 ? _h : 0);\n this.angleSpeedGenerator = toGenerator((_j = args.angleSpeed) !== null && _j !== void 0 ? _j : 0);\n this.gravity = this.gravityGenerator();\n this.breakFactor = args.breakFactor || 1;\n this.blendMode = args.blendMode || \"source-over\";\n this.alphaCurve = args.alphaCurve || exports.valueCurves.constant;\n this.sizeCurve = args.sizeCurve || exports.valueCurves.constant;\n this.renderingLayer = args.renderingLayer || Renderer_1.RenderingLayer.PARTICLES;\n this.zIndex = args.zIndex !== undefined ? args.zIndex : 0;\n this.updateMethod = args.update;\n function toGenerator(obj) {\n if (obj instanceof Function) {\n return obj;\n }\n else {\n return () => obj;\n }\n }\n }\n setPosition(x, y) {\n this.x = x;\n this.y = y;\n }\n clear() {\n this.particles = [];\n }\n emit(count = 1) {\n for (let i = 0; i < count; i++) {\n this.emitSingle();\n }\n }\n emitSingle() {\n const v = this.velocityGenerator();\n const off = this.offsetGenerator();\n const particle = new Particle(this, this.x + off.x, this.y + off.y, v.x, v.y, this.angleGenerator(), this.angleSpeedGenerator(), this.colorGenerator(), this.sizeGenerator(), this.lifetimeGenerator(), this.alphaGenerator());\n this.particles.push(particle);\n return particle;\n }\n update(dt) {\n this.gravity = this.gravityGenerator();\n for (let i = this.particles.length - 1; i >= 0; i--) {\n if (this.particles[i].update(dt)) {\n this.particles.splice(i, 1);\n }\n }\n if (this.updateMethod) {\n for (const p of this.particles) {\n this.updateMethod(p);\n }\n }\n }\n draw(ctx) {\n ctx.save();\n ctx.globalCompositeOperation = this.blendMode;\n this.particles.forEach(p => p.draw(ctx));\n ctx.restore();\n }\n}\nexports.ParticleEmitter = ParticleEmitter;\nclass Particle {\n constructor(emitter, x, y, vx = 0, vy = 0, angle = 0, angleSpeed = 0, imageOrColor = \"white\", size = 4, lifetime = 1, alpha = 1) {\n this.emitter = emitter;\n this.x = x;\n this.y = y;\n this.vx = vx;\n this.vy = vy;\n this.angle = angle;\n this.angleSpeed = angleSpeed;\n this.imageOrColor = imageOrColor;\n this.size = size;\n this.lifetime = lifetime;\n this.alpha = alpha;\n this.progress = 0;\n this.halfSize = this.size / 2;\n this.originalLifetime = this.lifetime;\n this.progress = 0;\n }\n update(dt) {\n // Life\n this.lifetime -= dt;\n if (this.lifetime <= 0) {\n // Tell parent that it may eliminate this particle\n return true;\n }\n else {\n this.progress = 1 - (this.lifetime / this.originalLifetime);\n }\n // Gravity\n this.vx += this.emitter.gravity.x * dt;\n this.vy += this.emitter.gravity.y * dt;\n if (this.emitter.breakFactor !== 1) {\n const factor = Math.pow(this.emitter.breakFactor, dt);\n this.vx *= factor;\n this.vy *= factor;\n }\n // Movement\n this.x += this.vx * dt;\n this.y += this.vy * dt;\n this.angle += this.angleSpeed * dt;\n return false;\n }\n draw(ctx) {\n ctx.save();\n ctx.globalAlpha = this.alpha * this.emitter.alphaCurve.get(this.progress);\n ctx.translate(this.x, -this.y);\n if (this.angle) {\n ctx.rotate(this.angle);\n }\n if (this.imageOrColor instanceof Object) {\n // Image\n const img = this.imageOrColor;\n const w = (img.naturalWidth || img.width), h = (img.naturalHeight || img.height);\n const sz = Math.max(w, h);\n ctx.drawImage(img, -this.halfSize, -this.halfSize, this.size * w / sz, this.size * h / sz);\n }\n else {\n // Color\n ctx.fillStyle = this.imageOrColor;\n ctx.fillRect(-this.halfSize, -this.halfSize, this.size, this.size);\n }\n ctx.restore();\n }\n}\nexports.Particle = Particle;\nclass ValueCurve {\n constructor(func, steps = 1023) {\n this.func = func;\n this.steps = steps;\n this.mapping = [];\n for (let i = 0; i <= steps; i++) {\n this.mapping[i] = func(i / steps);\n }\n }\n get(p) {\n const i = Math.round(p * this.steps);\n return this.mapping[i < 0 ? 0 : i > this.steps ? this.steps : i];\n }\n getExact(p) {\n return this.func(p);\n }\n invert() {\n return new ValueCurve((p) => this.getExact(1 - p), this.steps);\n }\n append(otherCurve, relativeLength = 1) {\n const total = 1 + relativeLength;\n const mid = (total - relativeLength) / total;\n return new ValueCurve((p) => p < mid ? this.getExact(p / mid) :\n otherCurve.getExact((p - mid) / relativeLength), Math.max(this.steps, otherCurve.steps));\n }\n}\nexports.ValueCurve = ValueCurve;\nfunction trapezeFunction(v, v1 = v) {\n return (p) => p < v ? p / v : p > 1 - v1 ? (1 - p) / v1 : 1;\n}\nexports.valueCurves = {\n constant: new ValueCurve((p) => 1, 1),\n linear: new ValueCurve((p) => p),\n trapeze: (v = 0.1, v1 = v) => new ValueCurve(trapezeFunction(v, v1)),\n cos: (v = 0.1, v1 = v) => // smooth 0 to 1 to 0\n new ValueCurve((p) => 0.5 - 0.5 * Math.cos(Math.PI * trapezeFunction(v, v1)(p))),\n cubic: new ValueCurve((p) => 3 * p * p - 2 * p * p * p) // smooth 0 to 1\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvUGFydGljbGVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL1BhcnRpY2xlcy50cz84YTEyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdhbWVTY2VuZSB9IGZyb20gXCIuL3NjZW5lcy9HYW1lU2NlbmVcIjtcclxuaW1wb3J0IHsgR1JBVklUWSB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBSZW5kZXJpbmdMYXllciwgUmVuZGVyaW5nVHlwZSB9IGZyb20gXCIuL1JlbmRlcmVyXCI7XHJcbmltcG9ydCB7IFZlY3RvcjJMaWtlIH0gZnJvbSBcIi4vZ3JhcGhpY3MvVmVjdG9yMlwiO1xyXG5cclxudHlwZSBQYXJ0aWNsZUFwcGVhcmFuY2UgPSBzdHJpbmcgfCBIVE1MSW1hZ2VFbGVtZW50IHwgSFRNTENhbnZhc0VsZW1lbnQ7XHJcblxyXG50eXBlIE51bWJlckdlbmVyYXRvciA9ICgpID0+IG51bWJlcjtcclxuXHJcbnR5cGUgVmVjdG9yR2VuZXJhdG9yID0gKCkgPT4gVmVjdG9yMkxpa2U7XHJcblxyXG50eXBlIFBhcnRpY2xlQXBwZWFyYW5jZUdlbmVyYXRvciA9ICgpID0+IFBhcnRpY2xlQXBwZWFyYW5jZTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGFydGljbGVFbWl0dGVyQXJndW1lbnRzIHtcclxuICAgIHBvc2l0aW9uOiBWZWN0b3IyTGlrZTtcclxuICAgIG9mZnNldD86IFZlY3RvcjJMaWtlIHwgVmVjdG9yR2VuZXJhdG9yO1xyXG4gICAgdmVsb2NpdHk/OiBWZWN0b3IyTGlrZSB8IFZlY3RvckdlbmVyYXRvcjtcclxuICAgIGNvbG9yPzogUGFydGljbGVBcHBlYXJhbmNlIHwgUGFydGljbGVBcHBlYXJhbmNlR2VuZXJhdG9yO1xyXG4gICAgYWxwaGE/OiBudW1iZXIgfCBOdW1iZXJHZW5lcmF0b3I7XHJcbiAgICBzaXplPzogbnVtYmVyIHwgTnVtYmVyR2VuZXJhdG9yO1xyXG4gICAgZ3Jhdml0eT86IFZlY3RvcjJMaWtlIHwgVmVjdG9yR2VuZXJhdG9yO1xyXG4gICAgbGlmZXRpbWU/OiBudW1iZXIgfCBOdW1iZXJHZW5lcmF0b3I7XHJcbiAgICBicmVha0ZhY3Rvcj86IG51bWJlcjtcclxuICAgIGJsZW5kTW9kZT86IHN0cmluZztcclxuICAgIGFscGhhQ3VydmU/OiBWYWx1ZUN1cnZlO1xyXG4gICAgc2l6ZUN1cnZlPzogVmFsdWVDdXJ2ZTtcclxuICAgIGFuZ2xlPzogbnVtYmVyIHwgTnVtYmVyR2VuZXJhdG9yO1xyXG4gICAgYW5nbGVTcGVlZD86IG51bWJlciB8IE51bWJlckdlbmVyYXRvcjtcclxuICAgIHJlbmRlcmluZ0xheWVyPzogUmVuZGVyaW5nTGF5ZXI7XHJcbiAgICB6SW5kZXg/OiBudW1iZXI7XHJcbiAgICB1cGRhdGU/OiAocDogUGFydGljbGUpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBQYXJ0aWNsZXMge1xyXG4gICAgcHJpdmF0ZSBzY2VuZTogR2FtZVNjZW5lO1xyXG4gICAgcHJpdmF0ZSBlbWl0dGVyczogUGFydGljbGVFbWl0dGVyW10gPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioc2NlbmU6IEdhbWVTY2VuZSkge1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlKGR0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmVtaXR0ZXJzLmZvckVhY2goZW1pdHRlciA9PiBlbWl0dGVyLnVwZGF0ZShkdCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRFbWl0dGVyc1RvUmVuZGVyaW5nUXVldWUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5lbWl0dGVycy5mb3JFYWNoKGVtaXR0ZXIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNjZW5lLnJlbmRlcmVyLmFkZCh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBSZW5kZXJpbmdUeXBlLlBBUlRJQ0xFX0VNSVRURVIsXHJcbiAgICAgICAgICAgICAgICBsYXllcjogZW1pdHRlci5yZW5kZXJpbmdMYXllcixcclxuICAgICAgICAgICAgICAgIHpJbmRleDogZW1pdHRlci56SW5kZXgsXHJcbiAgICAgICAgICAgICAgICBlbWl0dGVyXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIERpcmVjdCBkcmF3aW5nIG9mIHBhcnRpY2xlcyBpcyBkZWFjdGl2YXRlZCBzaW5jZSBpdCdzIGhhbmRsZWQgdmlhIHJlbmRlcmluZyBlbmdpbmVcclxuICAgIHB1YmxpYyBkcmF3KGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTogdm9pZCB7fVxyXG5cclxuICAgIHB1YmxpYyBhZGRFbWl0dGVyKGVtaXR0ZXI6IFBhcnRpY2xlRW1pdHRlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZW1pdHRlcnMucHVzaChlbWl0dGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZHJvcEVtaXR0ZXIoZW1pdHRlcjogUGFydGljbGVFbWl0dGVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmVtaXR0ZXJzLmluZGV4T2YoZW1pdHRlcik7XHJcblxyXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZUVtaXR0ZXIoYXJnczogUGFydGljbGVFbWl0dGVyQXJndW1lbnRzKSB7XHJcbiAgICAgICAgY29uc3QgZW1pdHRlciA9IG5ldyBQYXJ0aWNsZUVtaXR0ZXIoYXJncyk7XHJcbiAgICAgICAgdGhpcy5hZGRFbWl0dGVyKGVtaXR0ZXIpO1xyXG5cclxuICAgICAgICByZXR1cm4gZW1pdHRlcjtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFBhcnRpY2xlRW1pdHRlciB7XHJcbiAgICBwcml2YXRlIHBhcnRpY2xlczogUGFydGljbGVbXTtcclxuICAgIHByaXZhdGUgeDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSB5OiBudW1iZXI7XHJcbiAgICBwcml2YXRlIG9mZnNldEdlbmVyYXRvcjogVmVjdG9yR2VuZXJhdG9yO1xyXG4gICAgcHJpdmF0ZSB2ZWxvY2l0eUdlbmVyYXRvcjogVmVjdG9yR2VuZXJhdG9yO1xyXG4gICAgcHJpdmF0ZSBjb2xvckdlbmVyYXRvcjogUGFydGljbGVBcHBlYXJhbmNlR2VuZXJhdG9yO1xyXG4gICAgcHJpdmF0ZSBzaXplR2VuZXJhdG9yOiBOdW1iZXJHZW5lcmF0b3I7XHJcbiAgICBwcml2YXRlIGdyYXZpdHlHZW5lcmF0b3I6IFZlY3RvckdlbmVyYXRvcjtcclxuICAgIHByaXZhdGUgbGlmZXRpbWVHZW5lcmF0b3I6IE51bWJlckdlbmVyYXRvcjtcclxuICAgIHByaXZhdGUgYWxwaGFHZW5lcmF0b3I6IE51bWJlckdlbmVyYXRvcjtcclxuICAgIHByaXZhdGUgYW5nbGVHZW5lcmF0b3I6IE51bWJlckdlbmVyYXRvcjtcclxuICAgIHByaXZhdGUgYW5nbGVTcGVlZEdlbmVyYXRvcjogTnVtYmVyR2VuZXJhdG9yO1xyXG4gICAgcHVibGljIGdyYXZpdHk6IFZlY3RvcjJMaWtlO1xyXG4gICAgcHVibGljIGJyZWFrRmFjdG9yOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIGJsZW5kTW9kZTogc3RyaW5nO1xyXG4gICAgcHVibGljIGFscGhhQ3VydmU6IFZhbHVlQ3VydmU7XHJcbiAgICBwdWJsaWMgc2l6ZUN1cnZlOiBWYWx1ZUN1cnZlO1xyXG4gICAgcHVibGljIHJlbmRlcmluZ0xheWVyOiBSZW5kZXJpbmdMYXllcjtcclxuICAgIHB1YmxpYyB6SW5kZXg6IG51bWJlcjtcclxuICAgIHByaXZhdGUgdXBkYXRlTWV0aG9kOiAoKHA6IFBhcnRpY2xlKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihhcmdzOiBQYXJ0aWNsZUVtaXR0ZXJBcmd1bWVudHMpIHtcclxuICAgICAgICB0aGlzLnBhcnRpY2xlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMueCA9IGFyZ3MucG9zaXRpb24ueDtcclxuICAgICAgICB0aGlzLnkgPSBhcmdzLnBvc2l0aW9uLnk7XHJcbiAgICAgICAgdGhpcy5vZmZzZXRHZW5lcmF0b3IgPSB0b0dlbmVyYXRvcihhcmdzLm9mZnNldCA/PyAoe3g6IDAsIHk6IDB9KSk7XHJcbiAgICAgICAgdGhpcy52ZWxvY2l0eUdlbmVyYXRvciA9IHRvR2VuZXJhdG9yKGFyZ3MudmVsb2NpdHkgPz8gKHt4OiAwLCB5OiAwfSkpO1xyXG4gICAgICAgIHRoaXMuY29sb3JHZW5lcmF0b3IgPSB0b0dlbmVyYXRvcihhcmdzLmNvbG9yID8/IFwid2hpdGVcIik7XHJcbiAgICAgICAgdGhpcy5hbHBoYUdlbmVyYXRvciA9IHRvR2VuZXJhdG9yKGFyZ3MuYWxwaGEgPz8gMSk7XHJcbiAgICAgICAgdGhpcy5zaXplR2VuZXJhdG9yID0gdG9HZW5lcmF0b3IoYXJncy5zaXplID8/IDQpO1xyXG4gICAgICAgIHRoaXMuZ3Jhdml0eUdlbmVyYXRvciA9IHRvR2VuZXJhdG9yKGFyZ3MuZ3Jhdml0eSA/PyB7eDogMCwgeTogR1JBVklUWX0pO1xyXG4gICAgICAgIHRoaXMubGlmZXRpbWVHZW5lcmF0b3IgPSB0b0dlbmVyYXRvcihhcmdzLmxpZmV0aW1lID8/IDUpO1xyXG4gICAgICAgIHRoaXMuYW5nbGVHZW5lcmF0b3IgPSB0b0dlbmVyYXRvcihhcmdzLmFuZ2xlID8/IDApO1xyXG4gICAgICAgIHRoaXMuYW5nbGVTcGVlZEdlbmVyYXRvciA9IHRvR2VuZXJhdG9yKGFyZ3MuYW5nbGVTcGVlZCA/PyAwKTtcclxuICAgICAgICB0aGlzLmdyYXZpdHkgPSB0aGlzLmdyYXZpdHlHZW5lcmF0b3IoKTtcclxuICAgICAgICB0aGlzLmJyZWFrRmFjdG9yID0gYXJncy5icmVha0ZhY3RvciB8fCAxO1xyXG4gICAgICAgIHRoaXMuYmxlbmRNb2RlID0gYXJncy5ibGVuZE1vZGUgfHwgXCJzb3VyY2Utb3ZlclwiO1xyXG4gICAgICAgIHRoaXMuYWxwaGFDdXJ2ZSA9IGFyZ3MuYWxwaGFDdXJ2ZSB8fCB2YWx1ZUN1cnZlcy5jb25zdGFudDtcclxuICAgICAgICB0aGlzLnNpemVDdXJ2ZSA9IGFyZ3Muc2l6ZUN1cnZlIHx8IHZhbHVlQ3VydmVzLmNvbnN0YW50O1xyXG4gICAgICAgIHRoaXMucmVuZGVyaW5nTGF5ZXIgPSBhcmdzLnJlbmRlcmluZ0xheWVyIHx8IFJlbmRlcmluZ0xheWVyLlBBUlRJQ0xFUztcclxuICAgICAgICB0aGlzLnpJbmRleCA9IGFyZ3MuekluZGV4ICE9PSB1bmRlZmluZWQgPyBhcmdzLnpJbmRleCA6IDA7XHJcbiAgICAgICAgdGhpcy51cGRhdGVNZXRob2QgPSBhcmdzLnVwZGF0ZTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gdG9HZW5lcmF0b3I8dHA+KG9iajogdHAgfCAoKCkgPT4gdHApKTogKCgpID0+IHRwKSB7XHJcbiAgICAgICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBGdW5jdGlvbikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiBvYmo7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFBvc2l0aW9uKHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy54ID0geDtcclxuICAgICAgICB0aGlzLnkgPSB5O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBhcnRpY2xlcyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlbWl0KGNvdW50ID0gMSk6IHZvaWQge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmVtaXRTaW5nbGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVtaXRTaW5nbGUoKTogUGFydGljbGUge1xyXG4gICAgICAgIGNvbnN0IHYgPSB0aGlzLnZlbG9jaXR5R2VuZXJhdG9yKCk7XHJcbiAgICAgICAgY29uc3Qgb2ZmID0gdGhpcy5vZmZzZXRHZW5lcmF0b3IoKTtcclxuXHJcbiAgICAgICAgY29uc3QgcGFydGljbGUgPSBuZXcgUGFydGljbGUoXHJcbiAgICAgICAgICAgIHRoaXMsXHJcbiAgICAgICAgICAgIHRoaXMueCArIG9mZi54LFxyXG4gICAgICAgICAgICB0aGlzLnkgKyBvZmYueSxcclxuICAgICAgICAgICAgdi54LFxyXG4gICAgICAgICAgICB2LnksXHJcbiAgICAgICAgICAgIHRoaXMuYW5nbGVHZW5lcmF0b3IoKSxcclxuICAgICAgICAgICAgdGhpcy5hbmdsZVNwZWVkR2VuZXJhdG9yKCksXHJcbiAgICAgICAgICAgIHRoaXMuY29sb3JHZW5lcmF0b3IoKSxcclxuICAgICAgICAgICAgdGhpcy5zaXplR2VuZXJhdG9yKCksXHJcbiAgICAgICAgICAgIHRoaXMubGlmZXRpbWVHZW5lcmF0b3IoKSxcclxuICAgICAgICAgICAgdGhpcy5hbHBoYUdlbmVyYXRvcigpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5wYXJ0aWNsZXMucHVzaChwYXJ0aWNsZSk7XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJ0aWNsZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlKGR0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmdyYXZpdHkgPSB0aGlzLmdyYXZpdHlHZW5lcmF0b3IoKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMucGFydGljbGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcnRpY2xlc1tpXS51cGRhdGUoZHQpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcnRpY2xlcy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnVwZGF0ZU1ldGhvZCkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpcy5wYXJ0aWNsZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTWV0aG9kKHApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkcmF3KGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTogdm9pZCB7XHJcbiAgICAgICAgY3R4LnNhdmUoKTtcclxuICAgICAgICBjdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gdGhpcy5ibGVuZE1vZGU7XHJcbiAgICAgICAgdGhpcy5wYXJ0aWNsZXMuZm9yRWFjaChwID0+IHAuZHJhdyhjdHgpKTtcclxuICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUGFydGljbGUge1xyXG4gICAgcHJpdmF0ZSBoYWxmU2l6ZTogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBvcmlnaW5hbExpZmV0aW1lOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIHByb2dyZXNzOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZW1pdHRlcjogUGFydGljbGVFbWl0dGVyLFxyXG4gICAgICAgIHB1YmxpYyB4OiBudW1iZXIsXHJcbiAgICAgICAgcHVibGljIHk6IG51bWJlcixcclxuICAgICAgICBwdWJsaWMgdnggPSAwLFxyXG4gICAgICAgIHB1YmxpYyB2eSA9IDAsXHJcbiAgICAgICAgcHJpdmF0ZSBhbmdsZSA9IDAsXHJcbiAgICAgICAgcHJpdmF0ZSBhbmdsZVNwZWVkID0gMCxcclxuICAgICAgICBwcml2YXRlIGltYWdlT3JDb2xvcjogUGFydGljbGVBcHBlYXJhbmNlID0gXCJ3aGl0ZVwiLFxyXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBzaXplID0gNCxcclxuICAgICAgICBwcml2YXRlIGxpZmV0aW1lID0gMSxcclxuICAgICAgICBwcml2YXRlIGFscGhhID0gMVxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5oYWxmU2l6ZSA9IHRoaXMuc2l6ZSAvIDI7XHJcbiAgICAgICAgdGhpcy5vcmlnaW5hbExpZmV0aW1lID0gdGhpcy5saWZldGltZTtcclxuICAgICAgICB0aGlzLnByb2dyZXNzID0gMDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlKGR0OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICAvLyBMaWZlXHJcbiAgICAgICAgdGhpcy5saWZldGltZSAtPSBkdDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubGlmZXRpbWUgPD0gMCkge1xyXG4gICAgICAgICAgICAvLyBUZWxsIHBhcmVudCB0aGF0IGl0IG1heSBlbGltaW5hdGUgdGhpcyBwYXJ0aWNsZVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gMSAtICh0aGlzLmxpZmV0aW1lIC8gdGhpcy5vcmlnaW5hbExpZmV0aW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEdyYXZpdHlcclxuICAgICAgICB0aGlzLnZ4ICs9IHRoaXMuZW1pdHRlci5ncmF2aXR5LnggKiBkdDtcclxuICAgICAgICB0aGlzLnZ5ICs9IHRoaXMuZW1pdHRlci5ncmF2aXR5LnkgKiBkdDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZW1pdHRlci5icmVha0ZhY3RvciAhPT0gMSkge1xyXG4gICAgICAgICAgICBjb25zdCBmYWN0b3IgPSB0aGlzLmVtaXR0ZXIuYnJlYWtGYWN0b3IgKiogZHQ7XHJcbiAgICAgICAgICAgIHRoaXMudnggKj0gZmFjdG9yO1xyXG4gICAgICAgICAgICB0aGlzLnZ5ICo9IGZhY3RvcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE1vdmVtZW50XHJcbiAgICAgICAgdGhpcy54ICs9IHRoaXMudnggKiBkdDtcclxuICAgICAgICB0aGlzLnkgKz0gdGhpcy52eSAqIGR0O1xyXG4gICAgICAgIHRoaXMuYW5nbGUgKz0gdGhpcy5hbmdsZVNwZWVkICogZHQ7XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZHJhdyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6IHZvaWQge1xyXG4gICAgICAgIGN0eC5zYXZlKCk7XHJcbiAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gdGhpcy5hbHBoYSAqIHRoaXMuZW1pdHRlci5hbHBoYUN1cnZlLmdldCh0aGlzLnByb2dyZXNzKTtcclxuICAgICAgICBjdHgudHJhbnNsYXRlKHRoaXMueCwgLXRoaXMueSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFuZ2xlKSB7XHJcbiAgICAgICAgICAgIGN0eC5yb3RhdGUodGhpcy5hbmdsZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pbWFnZU9yQ29sb3IgaW5zdGFuY2VvZiBPYmplY3QpIHtcclxuICAgICAgICAgICAgLy8gSW1hZ2VcclxuICAgICAgICAgICAgY29uc3QgaW1nID0gdGhpcy5pbWFnZU9yQ29sb3I7XHJcbiAgICAgICAgICAgIGNvbnN0IHcgPSAoKDxhbnk+aW1nKS5uYXR1cmFsV2lkdGggfHwgaW1nLndpZHRoKSwgaCA9ICgoPGFueT5pbWcpLm5hdHVyYWxIZWlnaHQgfHwgaW1nLmhlaWdodCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN6ID0gTWF0aC5tYXgodywgaCk7XHJcbiAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAtdGhpcy5oYWxmU2l6ZSwgLXRoaXMuaGFsZlNpemUsIHRoaXMuc2l6ZSAqIHcgLyBzeiwgdGhpcy5zaXplICogaCAvIHN6KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBDb2xvclxyXG4gICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gKHRoaXMuaW1hZ2VPckNvbG9yIGFzIHN0cmluZyk7XHJcbiAgICAgICAgICAgIGN0eC5maWxsUmVjdCgtdGhpcy5oYWxmU2l6ZSwgLXRoaXMuaGFsZlNpemUsIHRoaXMuc2l6ZSwgdGhpcy5zaXplKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBWYWx1ZUN1cnZlIHtcclxuICAgIHByaXZhdGUgbWFwcGluZzogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGZ1bmM6IChwOiBudW1iZXIpID0+IG51bWJlciwgcHJpdmF0ZSByZWFkb25seSBzdGVwcyA9IDEwMjMpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBzdGVwczsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWFwcGluZ1tpXSA9IGZ1bmMoaSAvIHN0ZXBzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldChwOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IGkgPSBNYXRoLnJvdW5kKHAgKiB0aGlzLnN0ZXBzKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tYXBwaW5nW2kgPCAwID8gMCA6IGkgPiB0aGlzLnN0ZXBzID8gdGhpcy5zdGVwcyA6IGldO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRFeGFjdChwOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZ1bmMocCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGludmVydCgpOiBWYWx1ZUN1cnZlIHtcclxuICAgICAgICByZXR1cm4gbmV3IFZhbHVlQ3VydmUoKHApID0+IHRoaXMuZ2V0RXhhY3QoMSAtIHApLCB0aGlzLnN0ZXBzKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXBwZW5kKG90aGVyQ3VydmU6IFZhbHVlQ3VydmUsIHJlbGF0aXZlTGVuZ3RoID0gMSk6IFZhbHVlQ3VydmUge1xyXG4gICAgICAgIGNvbnN0IHRvdGFsID0gMSArIHJlbGF0aXZlTGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IG1pZCA9ICh0b3RhbCAtIHJlbGF0aXZlTGVuZ3RoKSAvIHRvdGFsO1xyXG4gICAgICAgIHJldHVybiBuZXcgVmFsdWVDdXJ2ZSgocCkgPT4gcCA8IG1pZCA/IHRoaXMuZ2V0RXhhY3QocCAvIG1pZCkgOlxyXG4gICAgICAgICAgICAgICAgb3RoZXJDdXJ2ZS5nZXRFeGFjdCgocCAtIG1pZCkgLyByZWxhdGl2ZUxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICBNYXRoLm1heCh0aGlzLnN0ZXBzLCBvdGhlckN1cnZlLnN0ZXBzKSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRyYXBlemVGdW5jdGlvbih2OiBudW1iZXIsIHYxOiBudW1iZXIgPSB2KTogKChwOiBudW1iZXIpID0+IG51bWJlcikge1xyXG4gICAgcmV0dXJuIChwOiBudW1iZXIpID0+IHAgPCB2ID8gcCAvIHYgOiBwID4gMSAtIHYxID8gKDEgLSBwKSAvIHYxIDogMTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHZhbHVlQ3VydmVzID0ge1xyXG4gICAgY29uc3RhbnQ6IG5ldyBWYWx1ZUN1cnZlKChwKSA9PiAxLCAxKSwgLy8gYWx3YXlzIDFcclxuICAgIGxpbmVhcjogbmV3IFZhbHVlQ3VydmUoKHApID0+IHApLCAvLyBsaW5lYXIgMCB0byAxXHJcbiAgICB0cmFwZXplOiAodjogbnVtYmVyID0gMC4xLCB2MTogbnVtYmVyID0gdikgPT4gbmV3IFZhbHVlQ3VydmUodHJhcGV6ZUZ1bmN0aW9uKHYsIHYxKSksIC8vIGJsb2NreSAwIHRvIDEgdG8gMFxyXG4gICAgY29zOiAodjogbnVtYmVyID0gMC4xLCB2MTogbnVtYmVyID0gdikgPT4gLy8gc21vb3RoIDAgdG8gMSB0byAwXHJcbiAgICAgICAgICAgIG5ldyBWYWx1ZUN1cnZlKChwKSA9PiAwLjUgLSAwLjUgKiBNYXRoLmNvcyhNYXRoLlBJICogdHJhcGV6ZUZ1bmN0aW9uKHYsIHYxKShwKSkpLFxyXG4gICAgY3ViaWM6IG5ldyBWYWx1ZUN1cnZlKChwKSA9PiAzICogcCAqIHAgLSAyICogcCAqIHAgKiBwKSAvLyBzbW9vdGggMCB0byAxXHJcbn07XHJcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQ0E7QUFDQTtBQStCQTtBQUlBO0FBRkE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQS9DQTtBQWlEQTtBQXNCQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFjQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBakhBO0FBbUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBYkE7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBM0VBO0FBNkVBO0FBR0E7QUFBQTtBQUFBO0FBRkE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUE3QkE7QUErQkE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/Particles.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/PlayerConversation.js":
|
|
/*!***********************************!*\
|
|
!*** ./lib/PlayerConversation.js ***!
|
|
\***********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PlayerConversation = void 0;\nconst Menu_1 = __webpack_require__(/*! ./Menu */ \"./lib/Menu.js\");\nclass PlayerConversation {\n constructor(player, npc, conversation, autoMove = true) {\n var _a, _b;\n this.player = player;\n this.npc = npc;\n this.conversation = conversation;\n this.autoMove = autoMove;\n this.interaction = null;\n this.selectedOption = -1;\n this.interaction = this.conversation.getNextInteraction();\n this.setSelectedOption(0);\n this.setBubblesContent();\n (_b = (_a = this.interaction) === null || _a === void 0 ? void 0 : _a.npcLine) === null || _b === void 0 ? void 0 : _b.executeBeforeLine();\n npc.meet();\n // Ensure safe distance to NPC\n if (this.autoMove) {\n const minDis = 20;\n if (Math.abs(player.x - npc.x) < minDis) {\n if (player.x < npc.x) {\n player.startAutoMove(npc.x - minDis, true);\n }\n else {\n player.startAutoMove(npc.x + minDis, true);\n }\n }\n }\n }\n /**\n * Returns true if conversation has been terminated (one way or the other)\n */\n update() {\n if (!this.interaction || this.conversation.hasEnded()) {\n if (this.player.playerConversation != null) {\n this.endConversation();\n }\n return true;\n }\n this.player.scene.camera.setCinematicBar(1);\n return false;\n }\n setBubblesContent() {\n if (this.interaction) {\n const optionsTexts = this.interaction.options.map(options => options.line);\n if (this.interaction.npcLine) {\n this.npc.speechBubble.setMessage(this.interaction.npcLine.line);\n this.npc.speechBubble.show();\n }\n if (optionsTexts.length > 0) {\n this.setSelectedOption(0);\n this.player.speechBubble.setOptions(optionsTexts, this.npc.speechBubble);\n this.player.speechBubble.show();\n }\n }\n }\n setSelectedOption(num = 0) {\n if (this.interaction && this.interaction.options && this.interaction.options.length > 0) {\n let sel = num % this.interaction.options.length;\n if (sel < 0) {\n sel += this.interaction.options.length;\n }\n this.selectedOption = sel;\n }\n else {\n this.selectedOption = -1;\n }\n this.player.speechBubble.selectedOptionIndex = this.selectedOption;\n return this.selectedOption;\n }\n handleButton(e) {\n if (e.isAbort && !e.isPause) {\n this.endConversation();\n }\n else if (!e.repeat) {\n // Enter to proceed\n if (e.isConfirm) {\n this.proceed();\n }\n const upDown = (e.isMenuDown ? 1 : 0) - (e.isMenuUp ? 1 : 0);\n if (upDown !== 0) {\n Menu_1.MenuList.click.stop();\n Menu_1.MenuList.click.play();\n this.setSelectedOption(this.selectedOption + upDown);\n }\n }\n }\n proceed() {\n var _a;\n if (this.interaction) {\n if (this.npc.speechBubble.isCurrentlyWriting || this.npc.speechBubble.preventUnwantedSelection) {\n this.npc.speechBubble.isCurrentlyWriting = false;\n return;\n }\n const options = this.interaction.options;\n if (options && options.length > 0) {\n // Player could choose between options, confirmed with Enter\n const index = (options.length === 1) ? 0 : this.selectedOption;\n const option = options[index];\n if (option) {\n Menu_1.MenuList.select.play();\n option.execute();\n }\n else {\n console.error(\"Tried to execute invalid option at index \" + index\n + \" in interaction around line: \" + this.interaction.npcLine);\n }\n }\n if (this.interaction.npcLine) {\n Menu_1.MenuList.click.stop();\n Menu_1.MenuList.click.play();\n // NPC said something, player proceeds without any options\n this.interaction.npcLine.execute();\n }\n this.interaction = this.conversation.getNextInteraction();\n this.setSelectedOption(-1);\n this.setBubblesContent();\n }\n if (!this.interaction) {\n this.endConversation();\n }\n else {\n if (this.interaction.npcLine) {\n // Mostly NPCs execute actions at the beginning of their line, not afterwards\n (_a = this.npc.face) === null || _a === void 0 ? void 0 : _a.setMode(this.npc.defaultFaceMode);\n this.interaction.npcLine.executeBeforeLine();\n }\n }\n }\n endConversation() {\n this.player.playerConversation = null;\n this.player.speechBubble.hide();\n this.npc.speechBubble.hide();\n this.npc.registerEndedConversation();\n }\n}\nexports.PlayerConversation = PlayerConversation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvUGxheWVyQ29udmVyc2F0aW9uLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL1BsYXllckNvbnZlcnNhdGlvbi50cz8wOWIwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRyb2xsZXJFdmVudCB9IGZyb20gXCIuL2lucHV0L0NvbnRyb2xsZXJFdmVudFwiO1xyXG5pbXBvcnQgeyBDb252ZXJzYXRpb24sIEludGVyYWN0aW9uIH0gZnJvbSBcIi4vQ29udmVyc2F0aW9uXCI7XHJcbmltcG9ydCB7IE1lbnVMaXN0IH0gZnJvbSBcIi4vTWVudVwiO1xyXG5pbXBvcnQgeyBOUEMgfSBmcm9tIFwiLi9lbnRpdGllcy9OUENcIjtcclxuaW1wb3J0IHsgUGxheWVyIH0gZnJvbSBcIi4vZW50aXRpZXMvUGxheWVyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUGxheWVyQ29udmVyc2F0aW9uIHtcclxuICAgIHByaXZhdGUgaW50ZXJhY3Rpb246IEludGVyYWN0aW9uIHwgbnVsbCA9IG51bGw7XHJcbiAgICBwcml2YXRlIHNlbGVjdGVkT3B0aW9uID0gLTE7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBwbGF5ZXI6IFBsYXllcixcclxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgbnBjOiBOUEMsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjb252ZXJzYXRpb246IENvbnZlcnNhdGlvbixcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGF1dG9Nb3ZlID0gdHJ1ZVxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcmFjdGlvbiA9IHRoaXMuY29udmVyc2F0aW9uLmdldE5leHRJbnRlcmFjdGlvbigpO1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRPcHRpb24oMCk7XHJcbiAgICAgICAgdGhpcy5zZXRCdWJibGVzQ29udGVudCgpO1xyXG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb24/Lm5wY0xpbmU/LmV4ZWN1dGVCZWZvcmVMaW5lKCk7XHJcbiAgICAgICAgbnBjLm1lZXQoKTtcclxuXHJcbiAgICAgICAgLy8gRW5zdXJlIHNhZmUgZGlzdGFuY2UgdG8gTlBDXHJcbiAgICAgICAgaWYgKHRoaXMuYXV0b01vdmUpIHtcclxuICAgICAgICAgICAgY29uc3QgbWluRGlzID0gMjA7XHJcblxyXG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMocGxheWVyLnggLSBucGMueCkgPCBtaW5EaXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwbGF5ZXIueCA8IG5wYy54KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGxheWVyLnN0YXJ0QXV0b01vdmUobnBjLnggLSBtaW5EaXMsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwbGF5ZXIuc3RhcnRBdXRvTW92ZShucGMueCArIG1pbkRpcywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgY29udmVyc2F0aW9uIGhhcyBiZWVuIHRlcm1pbmF0ZWQgKG9uZSB3YXkgb3IgdGhlIG90aGVyKVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5pbnRlcmFjdGlvbiB8fCB0aGlzLmNvbnZlcnNhdGlvbi5oYXNFbmRlZCgpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBsYXllci5wbGF5ZXJDb252ZXJzYXRpb24gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmRDb252ZXJzYXRpb24oKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBsYXllci5zY2VuZS5jYW1lcmEuc2V0Q2luZW1hdGljQmFyKDEpO1xyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRCdWJibGVzQ29udGVudCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5pbnRlcmFjdGlvbikge1xyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zVGV4dHMgPSB0aGlzLmludGVyYWN0aW9uLm9wdGlvbnMubWFwKG9wdGlvbnMgPT4gb3B0aW9ucy5saW5lKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmludGVyYWN0aW9uLm5wY0xpbmUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubnBjLnNwZWVjaEJ1YmJsZS5zZXRNZXNzYWdlKHRoaXMuaW50ZXJhY3Rpb24ubnBjTGluZS5saW5lKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubnBjLnNwZWVjaEJ1YmJsZS5zaG93KCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zVGV4dHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZE9wdGlvbigwKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGxheWVyLnNwZWVjaEJ1YmJsZS5zZXRPcHRpb25zKG9wdGlvbnNUZXh0cywgdGhpcy5ucGMuc3BlZWNoQnViYmxlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGxheWVyLnNwZWVjaEJ1YmJsZS5zaG93KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRTZWxlY3RlZE9wdGlvbihudW0gPSAwKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5pbnRlcmFjdGlvbiAmJiB0aGlzLmludGVyYWN0aW9uLm9wdGlvbnMgJiYgdGhpcy5pbnRlcmFjdGlvbi5vcHRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbGV0IHNlbCA9IG51bSAlIHRoaXMuaW50ZXJhY3Rpb24ub3B0aW9ucy5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2VsIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgc2VsICs9IHRoaXMuaW50ZXJhY3Rpb24ub3B0aW9ucy5sZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSBzZWw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IC0xO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wbGF5ZXIuc3BlZWNoQnViYmxlLnNlbGVjdGVkT3B0aW9uSW5kZXggPSB0aGlzLnNlbGVjdGVkT3B0aW9uO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9wdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFuZGxlQnV0dG9uKGU6IENvbnRyb2xsZXJFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChlLmlzQWJvcnQgJiYgIWUuaXNQYXVzZSkge1xyXG4gICAgICAgICAgICB0aGlzLmVuZENvbnZlcnNhdGlvbigpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIWUucmVwZWF0KSB7XHJcbiAgICAgICAgICAgIC8vIEVudGVyIHRvIHByb2NlZWRcclxuICAgICAgICAgICAgaWYgKGUuaXNDb25maXJtKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2NlZWQoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgdXBEb3duID0gKGUuaXNNZW51RG93biA/IDEgOiAwKSAtIChlLmlzTWVudVVwID8gMSA6IDApO1xyXG5cclxuICAgICAgICAgICAgaWYgKHVwRG93biAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgTWVudUxpc3QuY2xpY2suc3RvcCgpO1xyXG4gICAgICAgICAgICAgICAgTWVudUxpc3QuY2xpY2sucGxheSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZE9wdGlvbih0aGlzLnNlbGVjdGVkT3B0aW9uICsgdXBEb3duKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHByb2NlZWQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW50ZXJhY3Rpb24pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubnBjLnNwZWVjaEJ1YmJsZS5pc0N1cnJlbnRseVdyaXRpbmcgfHwgdGhpcy5ucGMuc3BlZWNoQnViYmxlLnByZXZlbnRVbndhbnRlZFNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ucGMuc3BlZWNoQnViYmxlLmlzQ3VycmVudGx5V3JpdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5pbnRlcmFjdGlvbi5vcHRpb25zO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBQbGF5ZXIgY291bGQgY2hvb3NlIGJldHdlZW4gb3B0aW9ucywgY29uZmlybWVkIHdpdGggRW50ZXJcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gKG9wdGlvbnMubGVuZ3RoID09PSAxKSA/IDAgOiB0aGlzLnNlbGVjdGVkT3B0aW9uO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gb3B0aW9uc1tpbmRleF07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIE1lbnVMaXN0LnNlbGVjdC5wbGF5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJUcmllZCB0byBleGVjdXRlIGludmFsaWQgb3B0aW9uIGF0IGluZGV4IFwiICsgaW5kZXhcclxuICAgICAgICAgICAgICAgICAgICAgICAgKyBcIiBpbiBpbnRlcmFjdGlvbiBhcm91bmQgbGluZTogXCIgKyB0aGlzLmludGVyYWN0aW9uLm5wY0xpbmVcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5pbnRlcmFjdGlvbi5ucGNMaW5lKSB7XHJcbiAgICAgICAgICAgICAgICBNZW51TGlzdC5jbGljay5zdG9wKCk7XHJcbiAgICAgICAgICAgICAgICBNZW51TGlzdC5jbGljay5wbGF5KCk7XHJcbiAgICAgICAgICAgICAgICAvLyBOUEMgc2FpZCBzb21ldGhpbmcsIHBsYXllciBwcm9jZWVkcyB3aXRob3V0IGFueSBvcHRpb25zXHJcbiAgICAgICAgICAgICAgICB0aGlzLmludGVyYWN0aW9uLm5wY0xpbmUuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmludGVyYWN0aW9uID0gdGhpcy5jb252ZXJzYXRpb24uZ2V0TmV4dEludGVyYWN0aW9uKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRPcHRpb24oLTEpO1xyXG4gICAgICAgICAgICB0aGlzLnNldEJ1YmJsZXNDb250ZW50KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5lbmRDb252ZXJzYXRpb24oKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pbnRlcmFjdGlvbi5ucGNMaW5lKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBNb3N0bHkgTlBDcyBleGVjdXRlIGFjdGlvbnMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGVpciBsaW5lLCBub3QgYWZ0ZXJ3YXJkc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ucGMuZmFjZT8uc2V0TW9kZSh0aGlzLm5wYy5kZWZhdWx0RmFjZU1vZGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcmFjdGlvbi5ucGNMaW5lLmV4ZWN1dGVCZWZvcmVMaW5lKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBlbmRDb252ZXJzYXRpb24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wbGF5ZXIucGxheWVyQ29udmVyc2F0aW9uID0gbnVsbDtcclxuICAgICAgICB0aGlzLnBsYXllci5zcGVlY2hCdWJibGUuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMubnBjLnNwZWVjaEJ1YmJsZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy5ucGMucmVnaXN0ZXJFbmRlZENvbnZlcnNhdGlvbigpO1xyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBRUE7QUFJQTtBQUlBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBM0pBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/PlayerConversation.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/Quests.js":
|
|
/*!***********************!*\
|
|
!*** ./lib/Quests.js ***!
|
|
\***********************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.QuestE = exports.QuestD = exports.QuestC = exports.QuestB = exports.QuestA = exports.Quest = exports.QuestETrigger = exports.QuestDTrigger = exports.QuestCTrigger = exports.QuestBTrigger = exports.QuestATrigger = exports.QuestKey = void 0;\nvar QuestKey;\n(function (QuestKey) {\n QuestKey[\"A\"] = \"questA\";\n QuestKey[\"B\"] = \"questB\";\n QuestKey[\"C\"] = \"questC\";\n QuestKey[\"D\"] = \"questD\";\n QuestKey[\"E\"] = \"questE\";\n})(QuestKey = exports.QuestKey || (exports.QuestKey = {}));\nvar QuestATrigger;\n(function (QuestATrigger) {\n QuestATrigger[QuestATrigger[\"JUST_ARRIVED\"] = 0] = \"JUST_ARRIVED\";\n QuestATrigger[QuestATrigger[\"TALKED_TO_FIRE\"] = 1] = \"TALKED_TO_FIRE\";\n QuestATrigger[QuestATrigger[\"GOT_QUEST_FROM_FIRE\"] = 2] = \"GOT_QUEST_FROM_FIRE\";\n QuestATrigger[QuestATrigger[\"GOT_RUNNING_ABILITY\"] = 3] = \"GOT_RUNNING_ABILITY\";\n QuestATrigger[QuestATrigger[\"TALKED_TO_TREE\"] = 4] = \"TALKED_TO_TREE\";\n QuestATrigger[QuestATrigger[\"GOT_QUEST_FROM_TREE\"] = 5] = \"GOT_QUEST_FROM_TREE\";\n QuestATrigger[QuestATrigger[\"GOT_SEED\"] = 6] = \"GOT_SEED\";\n QuestATrigger[QuestATrigger[\"PLANTED_SEED\"] = 7] = \"PLANTED_SEED\";\n QuestATrigger[QuestATrigger[\"TALKED_TO_STONE\"] = 8] = \"TALKED_TO_STONE\";\n QuestATrigger[QuestATrigger[\"GOT_STONE\"] = 9] = \"GOT_STONE\";\n QuestATrigger[QuestATrigger[\"THROWN_STONE_INTO_WATER\"] = 10] = \"THROWN_STONE_INTO_WATER\";\n QuestATrigger[QuestATrigger[\"GOT_MULTIJUMP\"] = 11] = \"GOT_MULTIJUMP\";\n QuestATrigger[QuestATrigger[\"LEARNED_RAIN_DANCE\"] = 12] = \"LEARNED_RAIN_DANCE\";\n QuestATrigger[QuestATrigger[\"MADE_RAIN\"] = 13] = \"MADE_RAIN\";\n QuestATrigger[QuestATrigger[\"TREE_DROPPED_WOOD\"] = 14] = \"TREE_DROPPED_WOOD\";\n QuestATrigger[QuestATrigger[\"GOT_WOOD\"] = 15] = \"GOT_WOOD\";\n QuestATrigger[QuestATrigger[\"TALKED_TO_FIRE_WITH_WOOD\"] = 16] = \"TALKED_TO_FIRE_WITH_WOOD\";\n QuestATrigger[QuestATrigger[\"THROWN_WOOD_INTO_FIRE\"] = 17] = \"THROWN_WOOD_INTO_FIRE\";\n QuestATrigger[QuestATrigger[\"APOCALYPSE_STARTED\"] = 18] = \"APOCALYPSE_STARTED\";\n QuestATrigger[QuestATrigger[\"BEAT_FIRE\"] = 19] = \"BEAT_FIRE\";\n QuestATrigger[QuestATrigger[\"BEAT_GAME\"] = 20] = \"BEAT_GAME\";\n})(QuestATrigger = exports.QuestATrigger || (exports.QuestATrigger = {}));\nvar QuestBTrigger;\n(function (QuestBTrigger) {\n QuestBTrigger[QuestBTrigger[\"ENDING_TRIGGERED\"] = 0] = \"ENDING_TRIGGERED\";\n})(QuestBTrigger = exports.QuestBTrigger || (exports.QuestBTrigger = {}));\nvar QuestCTrigger;\n(function (QuestCTrigger) {\n QuestCTrigger[QuestCTrigger[\"ENDING_TRIGGERED\"] = 0] = \"ENDING_TRIGGERED\";\n})(QuestCTrigger = exports.QuestCTrigger || (exports.QuestCTrigger = {}));\nvar QuestDTrigger;\n(function (QuestDTrigger) {\n QuestDTrigger[QuestDTrigger[\"ENDING_TRIGGERED\"] = 0] = \"ENDING_TRIGGERED\";\n})(QuestDTrigger = exports.QuestDTrigger || (exports.QuestDTrigger = {}));\nvar QuestETrigger;\n(function (QuestETrigger) {\n QuestETrigger[QuestETrigger[\"ENDING_TRIGGERED\"] = 0] = \"ENDING_TRIGGERED\";\n})(QuestETrigger = exports.QuestETrigger || (exports.QuestETrigger = {}));\nclass Quest {\n constructor(key, campaign, title, triggerIndices) {\n this.triggers = [];\n this.finished = false;\n this.key = key;\n this.campaign = campaign;\n this.title = title;\n this.triggers = triggerIndices.map(index => ({\n index,\n isTriggered: false\n }));\n }\n reset() {\n this.finished = false;\n this.triggers.forEach((t, i) => { this.untrigger(i); });\n }\n trigger(index) {\n if (this.triggers[index]) {\n this.triggers[index].isTriggered = true;\n }\n }\n untrigger(index) {\n if (this.triggers[index]) {\n this.triggers[index].isTriggered = false;\n }\n }\n getTriggers() {\n return this.triggers;\n }\n isTriggered(index) {\n return this.triggers[index].isTriggered || false;\n }\n allTriggered() {\n return this.triggers.every(trigger => trigger.isTriggered);\n }\n getHighestTriggerIndex() {\n return Math.max(...this.triggers.filter(t => t.isTriggered).map(t => t.index), -1);\n }\n finish() {\n this.finished = true;\n }\n isFinished() {\n return this.finished;\n }\n}\nexports.Quest = Quest;\n/**\n * Standard Ending A. Follow the questline and beat the fire at the end\n */\nclass QuestA extends Quest {\n constructor(campaign) {\n super(QuestKey.A, campaign, \"[A]POCALYPSE NOT NOW\", Object.values(QuestATrigger).filter((i) => typeof i === \"number\"));\n }\n}\nexports.QuestA = QuestA;\n/**\n * Ending B. Helped Dog and Beat fire\n */\nclass QuestB extends Quest {\n constructor(campaign) {\n super(QuestKey.B, campaign, \"GOOD [B]OY\", Object.values(QuestBTrigger).filter((i) => typeof i === \"number\"));\n }\n}\nexports.QuestB = QuestB;\n/**\n * Ending C. Sequence broken and soft locked in cave\n */\nclass QuestC extends Quest {\n constructor(campaign) {\n super(QuestKey.C, campaign, \"SOFT LO[C]KED\", Object.values(QuestCTrigger).filter((i) => typeof i === \"number\"));\n }\n}\nexports.QuestC = QuestC;\n/**\n * Ending D. Petted the dog for quite some time and transcended\n */\nclass QuestD extends Quest {\n constructor(campaign) {\n super(QuestKey.D, campaign, \"[D]ROWNED IN ECSTASY\", Object.values(QuestDTrigger).filter((i) => typeof i === \"number\"));\n }\n}\nexports.QuestD = QuestD;\n/**\n * Ending E. Petted the dog for quite some time and transcended\n */\nclass QuestE extends Quest {\n constructor(campaign) {\n super(QuestKey.E, campaign, \"AWAK[E]\", Object.values(QuestETrigger).filter((i) => typeof i === \"number\"));\n }\n}\nexports.QuestE = QuestE;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvUXVlc3RzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL1F1ZXN0cy50cz8yODI3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENhbXBhaWduIH0gZnJvbSBcIi4vQ2FtcGFpZ25cIjtcclxuXHJcbmV4cG9ydCBlbnVtIFF1ZXN0S2V5IHtcclxuICAgIEEgPSBcInF1ZXN0QVwiLFxyXG4gICAgQiA9IFwicXVlc3RCXCIsXHJcbiAgICBDID0gXCJxdWVzdENcIixcclxuICAgIEQgPSBcInF1ZXN0RFwiLFxyXG4gICAgRSA9IFwicXVlc3RFXCJcclxufVxyXG5cclxuZXhwb3J0IGVudW0gUXVlc3RBVHJpZ2dlciB7XHJcbiAgICBKVVNUX0FSUklWRUQsXHJcbiAgICBUQUxLRURfVE9fRklSRSxcclxuICAgIEdPVF9RVUVTVF9GUk9NX0ZJUkUsXHJcbiAgICBHT1RfUlVOTklOR19BQklMSVRZLFxyXG4gICAgVEFMS0VEX1RPX1RSRUUsXHJcbiAgICBHT1RfUVVFU1RfRlJPTV9UUkVFLFxyXG4gICAgR09UX1NFRUQsXHJcbiAgICBQTEFOVEVEX1NFRUQsXHJcbiAgICBUQUxLRURfVE9fU1RPTkUsXHJcbiAgICBHT1RfU1RPTkUsXHJcbiAgICBUSFJPV05fU1RPTkVfSU5UT19XQVRFUixcclxuICAgIEdPVF9NVUxUSUpVTVAsXHJcbiAgICBMRUFSTkVEX1JBSU5fREFOQ0UsXHJcbiAgICBNQURFX1JBSU4sXHJcbiAgICBUUkVFX0RST1BQRURfV09PRCxcclxuICAgIEdPVF9XT09ELFxyXG4gICAgVEFMS0VEX1RPX0ZJUkVfV0lUSF9XT09ELFxyXG4gICAgVEhST1dOX1dPT0RfSU5UT19GSVJFLFxyXG4gICAgQVBPQ0FMWVBTRV9TVEFSVEVELFxyXG4gICAgQkVBVF9GSVJFLFxyXG4gICAgQkVBVF9HQU1FXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFF1ZXN0QlRyaWdnZXIge1xyXG4gICAgRU5ESU5HX1RSSUdHRVJFRFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBRdWVzdENUcmlnZ2VyIHtcclxuICAgIEVORElOR19UUklHR0VSRURcclxufVxyXG5cclxuZXhwb3J0IGVudW0gUXVlc3REVHJpZ2dlciB7XHJcbiAgICBFTkRJTkdfVFJJR0dFUkVEXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFF1ZXN0RVRyaWdnZXIge1xyXG4gICAgRU5ESU5HX1RSSUdHRVJFRFxyXG59XHJcblxyXG50eXBlIFRyaWdnZXJEZWZpbml0aW9uID0ge1xyXG4gICAgaW5kZXg6IG51bWJlcjtcclxuICAgIGlzVHJpZ2dlcmVkOiBib29sZWFuO1xyXG59O1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFF1ZXN0IHtcclxuICAgIHB1YmxpYyByZWFkb25seSBrZXk6IFF1ZXN0S2V5O1xyXG4gICAgcHVibGljIHJlYWRvbmx5IGNhbXBhaWduOiBDYW1wYWlnbjtcclxuICAgIHByb3RlY3RlZCByZWFkb25seSB0cmlnZ2VyczogVHJpZ2dlckRlZmluaXRpb25bXSA9IFtdO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IHRpdGxlOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGZpbmlzaGVkID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGtleTogUXVlc3RLZXksIGNhbXBhaWduOiBDYW1wYWlnbiwgdGl0bGU6IHN0cmluZywgdHJpZ2dlckluZGljZXM6IG51bWJlcltdKSB7XHJcbiAgICAgICAgdGhpcy5rZXkgPSBrZXk7XHJcbiAgICAgICAgdGhpcy5jYW1wYWlnbiA9IGNhbXBhaWduO1xyXG4gICAgICAgIHRoaXMudGl0bGUgPSB0aXRsZTtcclxuXHJcbiAgICAgICAgdGhpcy50cmlnZ2VycyA9IHRyaWdnZXJJbmRpY2VzLm1hcChpbmRleCA9PiAoe1xyXG4gICAgICAgICAgICBpbmRleCxcclxuICAgICAgICAgICAgaXNUcmlnZ2VyZWQ6IGZhbHNlXHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZpbmlzaGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50cmlnZ2Vycy5mb3JFYWNoKCh0LCBpKSA9PiB7IHRoaXMudW50cmlnZ2VyKGkpOyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdHJpZ2dlcihpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMudHJpZ2dlcnNbaW5kZXhdKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcnNbaW5kZXhdLmlzVHJpZ2dlcmVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVudHJpZ2dlcihpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMudHJpZ2dlcnNbaW5kZXhdKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlcnNbaW5kZXhdLmlzVHJpZ2dlcmVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRUcmlnZ2VycygpOiBUcmlnZ2VyRGVmaW5pdGlvbltdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50cmlnZ2VycztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNUcmlnZ2VyZWQoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRyaWdnZXJzW2luZGV4XS5pc1RyaWdnZXJlZCB8fCBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWxsVHJpZ2dlcmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRyaWdnZXJzLmV2ZXJ5KHRyaWdnZXIgPT4gdHJpZ2dlci5pc1RyaWdnZXJlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEhpZ2hlc3RUcmlnZ2VySW5kZXgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5tYXgoLi4udGhpcy50cmlnZ2Vycy5maWx0ZXIodCA9PiB0LmlzVHJpZ2dlcmVkKS5tYXAodCA9PiB0LmluZGV4KSwgLTEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBmaW5pc2goKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5maW5pc2hlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzRmluaXNoZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoZWQ7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTdGFuZGFyZCBFbmRpbmcgQS4gRm9sbG93IHRoZSBxdWVzdGxpbmUgYW5kIGJlYXQgdGhlIGZpcmUgYXQgdGhlIGVuZFxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFF1ZXN0QSBleHRlbmRzIFF1ZXN0IHtcclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAoY2FtcGFpZ246IENhbXBhaWduKSB7XHJcbiAgICAgICAgc3VwZXIoXHJcbiAgICAgICAgICAgIFF1ZXN0S2V5LkEsXHJcbiAgICAgICAgICAgIGNhbXBhaWduLFxyXG4gICAgICAgICAgICBcIltBXVBPQ0FMWVBTRSBOT1QgTk9XXCIsXHJcbiAgICAgICAgICAgIE9iamVjdC52YWx1ZXMoUXVlc3RBVHJpZ2dlcikuZmlsdGVyKChpKTogaSBpcyBudW1iZXIgPT4gdHlwZW9mIGkgPT09IFwibnVtYmVyXCIpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEVuZGluZyBCLiBIZWxwZWQgRG9nIGFuZCBCZWF0IGZpcmVcclxuICovXHJcbmV4cG9ydCBjbGFzcyBRdWVzdEIgZXh0ZW5kcyBRdWVzdCB7XHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKGNhbXBhaWduOiBDYW1wYWlnbikge1xyXG4gICAgICAgIHN1cGVyKFxyXG4gICAgICAgICAgICBRdWVzdEtleS5CLFxyXG4gICAgICAgICAgICBjYW1wYWlnbixcclxuICAgICAgICAgICAgXCJHT09EIFtCXU9ZXCIsXHJcbiAgICAgICAgICAgIE9iamVjdC52YWx1ZXMoUXVlc3RCVHJpZ2dlcikuZmlsdGVyKChpKTogaSBpcyBudW1iZXIgPT4gdHlwZW9mIGkgPT09IFwibnVtYmVyXCIpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEVuZGluZyBDLiBTZXF1ZW5jZSBicm9rZW4gYW5kIHNvZnQgbG9ja2VkIGluIGNhdmVcclxuICovXHJcbmV4cG9ydCBjbGFzcyBRdWVzdEMgZXh0ZW5kcyBRdWVzdCB7XHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKGNhbXBhaWduOiBDYW1wYWlnbikge1xyXG4gICAgICAgIHN1cGVyKFxyXG4gICAgICAgICAgICBRdWVzdEtleS5DLFxyXG4gICAgICAgICAgICBjYW1wYWlnbixcclxuICAgICAgICAgICAgXCJTT0ZUIExPW0NdS0VEXCIsXHJcbiAgICAgICAgICAgIE9iamVjdC52YWx1ZXMoUXVlc3RDVHJpZ2dlcikuZmlsdGVyKChpKTogaSBpcyBudW1iZXIgPT4gdHlwZW9mIGkgPT09IFwibnVtYmVyXCIpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBFbmRpbmcgRC4gUGV0dGVkIHRoZSBkb2cgZm9yIHF1aXRlIHNvbWUgdGltZSBhbmQgdHJhbnNjZW5kZWRcclxuICovXHJcbmV4cG9ydCBjbGFzcyBRdWVzdEQgZXh0ZW5kcyBRdWVzdCB7XHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKGNhbXBhaWduOiBDYW1wYWlnbikge1xyXG4gICAgICAgIHN1cGVyKFxyXG4gICAgICAgICAgICBRdWVzdEtleS5ELFxyXG4gICAgICAgICAgICBjYW1wYWlnbixcclxuICAgICAgICAgICAgXCJbRF1ST1dORUQgSU4gRUNTVEFTWVwiLFxyXG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKFF1ZXN0RFRyaWdnZXIpLmZpbHRlcigoaSk6IGkgaXMgbnVtYmVyID0+IHR5cGVvZiBpID09PSBcIm51bWJlclwiKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBFbmRpbmcgRS4gUGV0dGVkIHRoZSBkb2cgZm9yIHF1aXRlIHNvbWUgdGltZSBhbmQgdHJhbnNjZW5kZWRcclxuICovXHJcbmV4cG9ydCBjbGFzcyBRdWVzdEUgZXh0ZW5kcyBRdWVzdCB7XHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKGNhbXBhaWduOiBDYW1wYWlnbikge1xyXG4gICAgICAgIHN1cGVyKFxyXG4gICAgICAgICAgICBRdWVzdEtleS5FLFxyXG4gICAgICAgICAgICBjYW1wYWlnbixcclxuICAgICAgICAgICAgXCJBV0FLW0VdXCIsXHJcbiAgICAgICAgICAgIE9iamVjdC52YWx1ZXMoUXVlc3RFVHJpZ2dlcikuZmlsdGVyKChpKTogaSBpcyBudW1iZXIgPT4gdHlwZW9mIGkgPT09IFwibnVtYmVyXCIpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFPQTtBQU9BO0FBSkE7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUExREE7QUE0REE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBVEE7QUFXQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFUQTtBQVdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQVRBO0FBWUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBVEE7QUFXQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFUQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/Quests.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/Renderer.js":
|
|
/*!*************************!*\
|
|
!*** ./lib/Renderer.js ***!
|
|
\*************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Renderer = exports.LAYER_ORDER = exports.RenderingLayer = exports.RenderingType = void 0;\nconst SpeechBubble_1 = __webpack_require__(/*! ./SpeechBubble */ \"./lib/SpeechBubble.js\");\nvar RenderingType;\n(function (RenderingType) {\n RenderingType[RenderingType[\"PARTICLE_EMITTER\"] = 0] = \"PARTICLE_EMITTER\";\n RenderingType[RenderingType[\"FIRE\"] = 1] = \"FIRE\";\n RenderingType[RenderingType[\"DANCE\"] = 2] = \"DANCE\";\n RenderingType[RenderingType[\"BLACK_BARS\"] = 3] = \"BLACK_BARS\";\n RenderingType[RenderingType[\"DRAW_IMAGE\"] = 4] = \"DRAW_IMAGE\";\n RenderingType[RenderingType[\"ASEPRITE\"] = 5] = \"ASEPRITE\";\n RenderingType[RenderingType[\"RECT\"] = 6] = \"RECT\";\n RenderingType[RenderingType[\"SPEECH_BUBBLE\"] = 7] = \"SPEECH_BUBBLE\";\n RenderingType[RenderingType[\"TEXT\"] = 8] = \"TEXT\";\n})(RenderingType = exports.RenderingType || (exports.RenderingType = {}));\nvar RenderingLayer;\n(function (RenderingLayer) {\n RenderingLayer[\"DEBUG\"] = \"debug\";\n RenderingLayer[\"FULLSCREEN_FX\"] = \"fullscreenFX\";\n RenderingLayer[\"UI\"] = \"ui\";\n RenderingLayer[\"BLACK_BARS\"] = \"blackBars\";\n RenderingLayer[\"TILEMAP_FOREGROUND\"] = \"tilemapForeground\";\n RenderingLayer[\"PLAYER\"] = \"player\";\n RenderingLayer[\"ENTITIES\"] = \"entities\";\n RenderingLayer[\"PLATFORMS\"] = \"platforms\";\n RenderingLayer[\"TILEMAP_MAP\"] = \"tilemapMap\";\n RenderingLayer[\"TILEMAP_BACKGROUND\"] = \"tilemapBackground\";\n RenderingLayer[\"PARTICLES\"] = \"particles\";\n})(RenderingLayer = exports.RenderingLayer || (exports.RenderingLayer = {}));\nexports.LAYER_ORDER = [\n RenderingLayer.DEBUG,\n RenderingLayer.FULLSCREEN_FX,\n RenderingLayer.UI,\n RenderingLayer.BLACK_BARS,\n RenderingLayer.TILEMAP_FOREGROUND,\n RenderingLayer.PLAYER,\n RenderingLayer.ENTITIES,\n RenderingLayer.PARTICLES,\n RenderingLayer.PLATFORMS,\n RenderingLayer.TILEMAP_MAP,\n RenderingLayer.TILEMAP_BACKGROUND,\n];\nclass Renderer {\n constructor(scene) {\n this.layers = exports.LAYER_ORDER;\n this.queue = [];\n this.scene = scene;\n }\n draw(ctx) {\n [...this.layers].reverse().forEach(layer => {\n const itemsInLayer = this.queue.filter(item => item.layer === layer);\n itemsInLayer.forEach(item => {\n if (item.type === RenderingType.BLACK_BARS) {\n this.scene.camera.drawBars(ctx);\n }\n else if (item.type === RenderingType.PARTICLE_EMITTER) {\n item.emitter.draw(ctx);\n }\n else if (item.type === RenderingType.FIRE) {\n item.entity.drawToCanvas(ctx);\n }\n else if (item.type === RenderingType.DANCE) {\n item.dance.draw(ctx);\n }\n else {\n ctx.save();\n if (item.translation)\n ctx.translate(item.translation.x, item.translation.y);\n if (item.scale)\n ctx.scale(item.scale.x, item.scale.y);\n if (item.relativeToScreen)\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n if (item.globalCompositeOperation)\n ctx.globalCompositeOperation = item.globalCompositeOperation;\n if (item.alpha !== undefined)\n ctx.globalAlpha = item.alpha;\n switch (item.type) {\n case RenderingType.DRAW_IMAGE:\n ctx.drawImage(item.asset, item.position.x, item.position.y);\n break;\n case RenderingType.ASEPRITE:\n item.asset.drawTag(ctx, item.animationTag, item.position.x, item.position.y, item.time);\n break;\n case RenderingType.RECT:\n if (item.lineColor) {\n ctx.strokeStyle = item.lineColor;\n ctx.lineWidth = item.lineWidth || 1;\n ctx.strokeRect(item.position.x, item.position.y, item.dimension.width, item.dimension.height);\n }\n else if (item.fillColor) {\n ctx.fillStyle = item.fillColor;\n ctx.fillRect(item.position.x, item.position.y, item.dimension.width, item.dimension.height);\n }\n break;\n case RenderingType.SPEECH_BUBBLE:\n ctx.beginPath();\n ctx = SpeechBubble_1.roundRect(ctx, Math.round(item.position.x), Math.round(item.position.y), Math.round(item.dimension.width), Math.round(item.dimension.height), item.radius, item.relativeToScreen, Math.round(item.offsetX));\n ctx.fillStyle = item.fillColor;\n ctx.fill();\n ctx.closePath();\n break;\n case RenderingType.TEXT:\n if (item.outlineColor) {\n item.asset.drawTextWithOutline(ctx, item.text, item.position.x, item.position.y, item.textColor, item.outlineColor);\n }\n else {\n item.asset.drawText(ctx, item.text, item.position.x, item.position.y, item.textColor);\n }\n break;\n }\n ctx.restore();\n }\n });\n });\n this.queue = [];\n }\n add(item) {\n this.queue.push(item);\n }\n addAseprite(sprite, animationTag, x, y, layer, direction = 1, time, alpha) {\n const scale = direction < 0 ? { x: -1, y: 1 } : undefined;\n this.add({\n type: RenderingType.ASEPRITE,\n layer,\n translation: {\n x: x,\n y: -y\n },\n position: {\n x: -sprite.width >> 1,\n y: -sprite.height\n },\n scale,\n alpha,\n asset: sprite,\n animationTag,\n time: time || this.scene.gameTime * 1000\n });\n }\n}\nexports.Renderer = Renderer;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvUmVuZGVyZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvUmVuZGVyZXIudHM/MDRmOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc2Vwcml0ZSB9IGZyb20gXCIuL0FzZXByaXRlXCI7XHJcbmltcG9ydCB7IEJpdG1hcEZvbnQgfSBmcm9tIFwiLi9CaXRtYXBGb250XCI7XHJcbmltcG9ydCB7IERhbmNlIH0gZnJvbSBcIi4vRGFuY2VcIjtcclxuaW1wb3J0IHsgRmlyZSB9IGZyb20gXCIuL2VudGl0aWVzL0ZpcmVcIjtcclxuaW1wb3J0IHsgR2FtZVNjZW5lIH0gZnJvbSBcIi4vc2NlbmVzL0dhbWVTY2VuZVwiO1xyXG5pbXBvcnQgeyBQYXJ0aWNsZUVtaXR0ZXIgfSBmcm9tIFwiLi9QYXJ0aWNsZXNcIjtcclxuaW1wb3J0IHsgcm91bmRSZWN0IH0gZnJvbSBcIi4vU3BlZWNoQnViYmxlXCI7XHJcblxyXG5leHBvcnQgZW51bSBSZW5kZXJpbmdUeXBlIHtcclxuICAgIFBBUlRJQ0xFX0VNSVRURVIsXHJcbiAgICBGSVJFLFxyXG4gICAgREFOQ0UsXHJcbiAgICBCTEFDS19CQVJTLFxyXG4gICAgRFJBV19JTUFHRSxcclxuICAgIEFTRVBSSVRFLFxyXG4gICAgUkVDVCxcclxuICAgIFNQRUVDSF9CVUJCTEUsXHJcbiAgICBURVhUXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFJlbmRlcmluZ0xheWVyIHtcclxuICAgIERFQlVHID0gXCJkZWJ1Z1wiLFxyXG4gICAgRlVMTFNDUkVFTl9GWCA9IFwiZnVsbHNjcmVlbkZYXCIsXHJcbiAgICBVSSA9IFwidWlcIixcclxuICAgIEJMQUNLX0JBUlMgPSBcImJsYWNrQmFyc1wiLFxyXG4gICAgVElMRU1BUF9GT1JFR1JPVU5EID0gXCJ0aWxlbWFwRm9yZWdyb3VuZFwiLFxyXG4gICAgUExBWUVSID0gXCJwbGF5ZXJcIixcclxuICAgIEVOVElUSUVTID0gXCJlbnRpdGllc1wiLFxyXG4gICAgUExBVEZPUk1TID0gXCJwbGF0Zm9ybXNcIixcclxuICAgIFRJTEVNQVBfTUFQID0gXCJ0aWxlbWFwTWFwXCIsXHJcbiAgICBUSUxFTUFQX0JBQ0tHUk9VTkQgPSBcInRpbGVtYXBCYWNrZ3JvdW5kXCIsXHJcbiAgICBQQVJUSUNMRVMgPSBcInBhcnRpY2xlc1wiXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBMQVlFUl9PUkRFUjogUmVuZGVyaW5nTGF5ZXJbXSA9IFtcclxuICAgIFJlbmRlcmluZ0xheWVyLkRFQlVHLFxyXG4gICAgUmVuZGVyaW5nTGF5ZXIuRlVMTFNDUkVFTl9GWCxcclxuICAgIFJlbmRlcmluZ0xheWVyLlVJLFxyXG4gICAgUmVuZGVyaW5nTGF5ZXIuQkxBQ0tfQkFSUyxcclxuICAgIFJlbmRlcmluZ0xheWVyLlRJTEVNQVBfRk9SRUdST1VORCxcclxuICAgIFJlbmRlcmluZ0xheWVyLlBMQVlFUixcclxuICAgIFJlbmRlcmluZ0xheWVyLkVOVElUSUVTLFxyXG4gICAgUmVuZGVyaW5nTGF5ZXIuUEFSVElDTEVTLFxyXG4gICAgUmVuZGVyaW5nTGF5ZXIuUExBVEZPUk1TLFxyXG4gICAgUmVuZGVyaW5nTGF5ZXIuVElMRU1BUF9NQVAsXHJcbiAgICBSZW5kZXJpbmdMYXllci5USUxFTUFQX0JBQ0tHUk9VTkQsXHJcbl07XHJcblxyXG5leHBvcnQgdHlwZSBDb29yZGluYXRlcyA9IHtcclxuICAgIHg6IG51bWJlcjtcclxuICAgIHk6IG51bWJlcjtcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIERpbWVuc2lvbiA9IHtcclxuICAgIHdpZHRoOiBudW1iZXI7XHJcbiAgICBoZWlnaHQ6IG51bWJlcjtcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIEJhc2VSZW5kZXJpbmdJdGVtID0ge1xyXG4gICAgdHlwZTogUmVuZGVyaW5nVHlwZTtcclxuICAgIGxheWVyOiBSZW5kZXJpbmdMYXllcjtcclxuICAgIHpJbmRleD86IG51bWJlcjtcclxuICAgIHRyYW5zbGF0aW9uPzogQ29vcmRpbmF0ZXM7XHJcbiAgICBwb3NpdGlvbjogQ29vcmRpbmF0ZXM7XHJcbiAgICBzY2FsZT86IENvb3JkaW5hdGVzO1xyXG4gICAgYWxwaGE/OiBudW1iZXI7XHJcbiAgICBnbG9iYWxDb21wb3NpdGVPcGVyYXRpb24/OiBzdHJpbmc7XHJcbiAgICByZWxhdGl2ZVRvU2NyZWVuPzogYm9vbGVhbixcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIFBhcnRpY2xlRW1pdHRlclJlbmRlcmluZ0l0ZW0gPSB7XHJcbiAgICB0eXBlOiBSZW5kZXJpbmdUeXBlLlBBUlRJQ0xFX0VNSVRURVI7XHJcbiAgICBsYXllcjogUmVuZGVyaW5nTGF5ZXI7XHJcbiAgICB6SW5kZXg6IG51bWJlcjtcclxuICAgIGVtaXR0ZXI6IFBhcnRpY2xlRW1pdHRlcjtcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIEZpcmVSZW5kZXJpbmdJdGVtID0ge1xyXG4gICAgdHlwZTogUmVuZGVyaW5nVHlwZS5GSVJFO1xyXG4gICAgbGF5ZXI6IFJlbmRlcmluZ0xheWVyO1xyXG4gICAgZW50aXR5OiBGaXJlO1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgRGFuY2VSZW5kZXJpbmdJdGVtID0ge1xyXG4gICAgdHlwZTogUmVuZGVyaW5nVHlwZS5EQU5DRTtcclxuICAgIGxheWVyOiBSZW5kZXJpbmdMYXllcjtcclxuICAgIGRhbmNlOiBEYW5jZTtcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIEJsYWNrQmFyc1JlbmRlcmluZ0l0ZW0gPSB7XHJcbiAgICB0eXBlOiBSZW5kZXJpbmdUeXBlLkJMQUNLX0JBUlM7XHJcbiAgICBsYXllcjogUmVuZGVyaW5nTGF5ZXI7XHJcbiAgICBmb3JjZTogbnVtYmVyO1xyXG4gICAgaGVpZ2h0OiBudW1iZXI7XHJcbiAgICBjb2xvcjogc3RyaW5nO1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgUmVjdFJlbmRlcmluZ0l0ZW0gPSBCYXNlUmVuZGVyaW5nSXRlbSAmIHtcclxuICAgIHR5cGU6IFJlbmRlcmluZ1R5cGUuUkVDVDtcclxuICAgIGZpbGxDb2xvcj86IHN0cmluZyxcclxuICAgIGxpbmVDb2xvcj86IHN0cmluZyxcclxuICAgIGxpbmVXaWR0aD86IG51bWJlcjtcclxuICAgIGRpbWVuc2lvbjogRGltZW5zaW9uO1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgU3BlZWNoQnViYmxlUmVuZGVyaW5nSXRlbSA9IEJhc2VSZW5kZXJpbmdJdGVtICYge1xyXG4gICAgdHlwZTogUmVuZGVyaW5nVHlwZS5TUEVFQ0hfQlVCQkxFO1xyXG4gICAgZmlsbENvbG9yOiBzdHJpbmcsXHJcbiAgICByYWRpdXM6IG51bWJlcjtcclxuICAgIG9mZnNldFg6IG51bWJlcjtcclxuICAgIGRpbWVuc2lvbjogRGltZW5zaW9uO1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgVGV4dFJlbmRlcmluZ0l0ZW0gPSBCYXNlUmVuZGVyaW5nSXRlbSAmIHtcclxuICAgIHR5cGU6IFJlbmRlcmluZ1R5cGUuVEVYVDtcclxuICAgIGFzc2V0OiBCaXRtYXBGb250O1xyXG4gICAgdGV4dDogc3RyaW5nLFxyXG4gICAgdGV4dENvbG9yOiBzdHJpbmcsXHJcbiAgICBvdXRsaW5lQ29sb3I/OiBzdHJpbmcsXHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBEcmF3SW1hZ2VSZW5kZXJpbmdJdGVtID0gQmFzZVJlbmRlcmluZ0l0ZW0gJiB7XHJcbiAgICB0eXBlOiBSZW5kZXJpbmdUeXBlLkRSQVdfSU1BR0U7XHJcbiAgICBhc3NldDogSFRNTEltYWdlRWxlbWVudDtcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIEFzZXByaXRlUmVuZGVyaW5nSXRlbSA9IEJhc2VSZW5kZXJpbmdJdGVtICYge1xyXG4gICAgdHlwZTogUmVuZGVyaW5nVHlwZS5BU0VQUklURTtcclxuICAgIGFzc2V0OiBBc2Vwcml0ZTtcclxuICAgIGFuaW1hdGlvblRhZzogc3RyaW5nO1xyXG4gICAgdGltZT86IG51bWJlcjtcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIFJlbmRlcmluZ0l0ZW0gPSBCbGFja0JhcnNSZW5kZXJpbmdJdGVtIHwgRHJhd0ltYWdlUmVuZGVyaW5nSXRlbSB8IEFzZXByaXRlUmVuZGVyaW5nSXRlbSB8IFJlY3RSZW5kZXJpbmdJdGVtIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRSZW5kZXJpbmdJdGVtIHwgU3BlZWNoQnViYmxlUmVuZGVyaW5nSXRlbSB8IFBhcnRpY2xlRW1pdHRlclJlbmRlcmluZ0l0ZW0gfCBGaXJlUmVuZGVyaW5nSXRlbSB8IERhbmNlUmVuZGVyaW5nSXRlbTtcclxuXHJcbmV4cG9ydCBjbGFzcyBSZW5kZXJlciB7XHJcbiAgICBwcml2YXRlIHNjZW5lOiBHYW1lU2NlbmU7XHJcbiAgICBwcml2YXRlIGxheWVycyA9IExBWUVSX09SREVSO1xyXG4gICAgcHJpdmF0ZSBxdWV1ZTogUmVuZGVyaW5nSXRlbVtdID0gW107XHJcblxyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHNjZW5lOiBHYW1lU2NlbmUpIHtcclxuICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRyYXcoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOiB2b2lkIHtcclxuICAgICAgICBbLi4udGhpcy5sYXllcnNdLnJldmVyc2UoKS5mb3JFYWNoKGxheWVyID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbXNJbkxheWVyID0gdGhpcy5xdWV1ZS5maWx0ZXIoaXRlbSA9PiBpdGVtLmxheWVyID09PSBsYXllcik7XHJcblxyXG4gICAgICAgICAgICBpdGVtc0luTGF5ZXIuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09IFJlbmRlcmluZ1R5cGUuQkxBQ0tfQkFSUykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUuY2FtZXJhLmRyYXdCYXJzKGN0eCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gUmVuZGVyaW5nVHlwZS5QQVJUSUNMRV9FTUlUVEVSKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5lbWl0dGVyLmRyYXcoY3R4KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSBSZW5kZXJpbmdUeXBlLkZJUkUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLmVudGl0eS5kcmF3VG9DYW52YXMoY3R4KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSBSZW5kZXJpbmdUeXBlLkRBTkNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5kYW5jZS5kcmF3KGN0eCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGN0eC5zYXZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0udHJhbnNsYXRpb24pIGN0eC50cmFuc2xhdGUoaXRlbS50cmFuc2xhdGlvbi54LCBpdGVtLnRyYW5zbGF0aW9uLnkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnNjYWxlKSBjdHguc2NhbGUoaXRlbS5zY2FsZS54LCBpdGVtLnNjYWxlLnkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnJlbGF0aXZlVG9TY3JlZW4pIGN0eC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKSBjdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gaXRlbS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uYWxwaGEgIT09IHVuZGVmaW5lZCkgY3R4Lmdsb2JhbEFscGhhID0gaXRlbS5hbHBoYTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpdGVtLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBSZW5kZXJpbmdUeXBlLkRSQVdfSU1BR0U6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguZHJhd0ltYWdlKGl0ZW0uYXNzZXQsIGl0ZW0ucG9zaXRpb24ueCwgaXRlbS5wb3NpdGlvbi55KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFJlbmRlcmluZ1R5cGUuQVNFUFJJVEU6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmFzc2V0LmRyYXdUYWcoY3R4LCBpdGVtLmFuaW1hdGlvblRhZywgaXRlbS5wb3NpdGlvbi54LCBpdGVtLnBvc2l0aW9uLnksIGl0ZW0udGltZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBSZW5kZXJpbmdUeXBlLlJFQ1Q6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5saW5lQ29sb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBpdGVtLmxpbmVDb2xvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgubGluZVdpZHRoID0gaXRlbS5saW5lV2lkdGggfHwgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc3Ryb2tlUmVjdChpdGVtLnBvc2l0aW9uLngsIGl0ZW0ucG9zaXRpb24ueSwgaXRlbS5kaW1lbnNpb24ud2lkdGgsIGl0ZW0uZGltZW5zaW9uLmhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uZmlsbENvbG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGl0ZW0uZmlsbENvbG9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdChpdGVtLnBvc2l0aW9uLngsIGl0ZW0ucG9zaXRpb24ueSwgaXRlbS5kaW1lbnNpb24ud2lkdGgsIGl0ZW0uZGltZW5zaW9uLmhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBSZW5kZXJpbmdUeXBlLlNQRUVDSF9CVUJCTEU6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHggPSByb3VuZFJlY3QoY3R4LCBNYXRoLnJvdW5kKGl0ZW0ucG9zaXRpb24ueCksIE1hdGgucm91bmQoaXRlbS5wb3NpdGlvbi55KSwgTWF0aC5yb3VuZChpdGVtLmRpbWVuc2lvbi53aWR0aCksIE1hdGgucm91bmQoaXRlbS5kaW1lbnNpb24uaGVpZ2h0KSwgaXRlbS5yYWRpdXMsIGl0ZW0ucmVsYXRpdmVUb1NjcmVlbiwgTWF0aC5yb3VuZChpdGVtLm9mZnNldFgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBpdGVtLmZpbGxDb2xvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5maWxsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBSZW5kZXJpbmdUeXBlLlRFWFQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5vdXRsaW5lQ29sb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmFzc2V0LmRyYXdUZXh0V2l0aE91dGxpbmUoY3R4LCBpdGVtLnRleHQsIGl0ZW0ucG9zaXRpb24ueCwgaXRlbS5wb3NpdGlvbi55LCBpdGVtLnRleHRDb2xvciwgaXRlbS5vdXRsaW5lQ29sb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmFzc2V0LmRyYXdUZXh0KGN0eCwgaXRlbS50ZXh0LCBpdGVtLnBvc2l0aW9uLngsIGl0ZW0ucG9zaXRpb24ueSwgaXRlbS50ZXh0Q29sb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGQoaXRlbTogUmVuZGVyaW5nSXRlbSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucXVldWUucHVzaChpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkQXNlcHJpdGUgKFxyXG4gICAgICAgIHNwcml0ZTogQXNlcHJpdGUsIGFuaW1hdGlvblRhZzogc3RyaW5nLCB4OiBudW1iZXIsIHk6IG51bWJlciwgbGF5ZXI6IFJlbmRlcmluZ0xheWVyLFxyXG4gICAgICAgIGRpcmVjdGlvbiA9IDEsIHRpbWU/OiBudW1iZXIsIGFscGhhPzogbnVtYmVyXHJcbiAgICApOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzY2FsZSA9IGRpcmVjdGlvbiA8IDAgPyB7IHg6IC0xLCB5OiAxIH0gOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkKHtcclxuICAgICAgICAgICAgdHlwZTogUmVuZGVyaW5nVHlwZS5BU0VQUklURSxcclxuICAgICAgICAgICAgbGF5ZXIsXHJcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICB4OiB4LFxyXG4gICAgICAgICAgICAgICAgeTogLXlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICAgICAgICAgIHg6IC1zcHJpdGUud2lkdGggPj4gMSxcclxuICAgICAgICAgICAgICAgIHk6IC1zcHJpdGUuaGVpZ2h0XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNjYWxlLFxyXG4gICAgICAgICAgICBhbHBoYSxcclxuICAgICAgICAgICAgYXNzZXQ6IHNwcml0ZSxcclxuICAgICAgICAgICAgYW5pbWF0aW9uVGFnLFxyXG4gICAgICAgICAgICB0aW1lOiB0aW1lIHx8IHRoaXMuc2NlbmUuZ2FtZVRpbWUgKiAxMDAwXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFNQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTBGQTtBQUtBO0FBSEE7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbkdBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/Renderer.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/Scene.js":
|
|
/*!**********************!*\
|
|
!*** ./lib/Scene.js ***!
|
|
\**********************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Scene = void 0;\nconst ControllerManager_1 = __webpack_require__(/*! ./input/ControllerManager */ \"./lib/input/ControllerManager.js\");\nconst RootNode_1 = __webpack_require__(/*! ./scene/RootNode */ \"./lib/scene/RootNode.js\");\n/**\n * Abstract base class of a scene.\n *\n * @param T - The game type.\n * @param A - Optional scene argument type. A value of this type must be specified when setting or pushing a scene.\n * Defaults to no argument (void type)\n */\nclass Scene {\n constructor(game) {\n this.game = game;\n this.zIndex = 0;\n this.currentTransition = null;\n this.inTransition = null;\n this.outTransition = null;\n this.usedLayers = 0;\n this.hiddenLayers = 0;\n this.backgroundStyle = null;\n this.rootNode = new RootNode_1.RootNode(this, (update, draw) => {\n this.updateRootNode = update;\n this.drawRootNode = draw;\n });\n this.rootNode.resizeTo(this.game.width, this.game.height);\n }\n get keyboard() {\n return this.game.keyboard;\n }\n get input() {\n return ControllerManager_1.ControllerManager.getInstance();\n }\n get scenes() {\n return this.game.scenes;\n }\n /**\n * Shows the given layer when it was previously hidden.\n *\n * @param layer - The layer to show (0-31).\n */\n showLayer(layer) {\n this.hiddenLayers &= ~(1 << layer);\n return this;\n }\n /**\n * Hides the given layer when it was previously shown.\n *\n * @param layer - The layer to hide (0-31).\n */\n hideLayer(layer) {\n this.hiddenLayers |= 1 << layer;\n return this;\n }\n /**\n * Checks if given layer is hidden.\n *\n * @param layer - The layer to check (0-31).\n * @return True if layer is hidden, false if not.\n */\n isLayerHidden(layer) {\n return (this.hiddenLayers & (1 << layer)) !== 0;\n }\n /**\n * Checks if given layer is shown.\n *\n * @param layer - The layer to check (0-31).\n * @return True if layer is shown, false if not.\n */\n isLayerShown(layer) {\n return (this.hiddenLayers & (1 << layer)) === 0;\n }\n /**\n * Returns the scene node with the given id.\n *\n * @param id - The ID to look for.\n * @return The matching scene node or null if none.\n */\n getNodeById(id) {\n return this.rootNode.getDescendantById(id);\n }\n /**\n * Returns the background style of this scene. This style is used to fill the background of the scene when set.\n *\n * @return The scene background style.\n */\n getBackgroundStyle() {\n return this.backgroundStyle;\n }\n /**\n * Sets the background style of this scene. This style is used to fill the background of the scene when set.\n *\n * @param backgroundStyle - The background style to set.\n */\n setBackgroundStyle(backgroundStyle) {\n this.backgroundStyle = backgroundStyle;\n return this;\n }\n /**\n * Checks if this scene is active.\n *\n * @return True if scene is active, false it not.\n */\n isActive() {\n return this.scenes.activeScene === this;\n }\n /**\n * Called when the scene is pushed onto the stack and before any transitions.\n *\n * @param args - The scene arguments (if any).\n */\n setup(args) { }\n /**\n * Called when the scene becomes the top scene on the stack and after the on-stage transition is complete.\n */\n activate() { }\n /**\n * Called when the scene is no longer the top scene on the stack and before the off-stage transition begins.\n */\n deactivate() { }\n /**\n * Called when the scene is popped from the scene stack, after any transitions are complete.\n */\n cleanup() { }\n /**\n * Updates the scene. Scenes can overwrite this method to do its own drawing but when you are going to use the\n * scene graph then make sure to call the super method in your overwritten method or the scene graph will not be\n * updated.\n */\n update(dt) {\n this.usedLayers = this.updateRootNode(dt);\n }\n /**\n * Draws the scene. Scenes can overwrite this method to do its own drawing but when you are going to use the\n * scene graph then make sure to call the super method in your overwritten method or the scene graph will not be\n * rendered.\n *\n * @param ctx - The rendering context.\n * @param width - The scene width.\n * @param height - The scene height.\n */\n draw(ctx, width, height) {\n if (this.backgroundStyle != null) {\n ctx.save();\n ctx.fillStyle = this.backgroundStyle;\n ctx.fillRect(0, 0, width, height);\n }\n let layer = 1;\n let usedLayers = this.usedLayers & ~this.hiddenLayers;\n while (usedLayers !== 0) {\n if ((usedLayers & 1) === 1) {\n this.drawRootNode(ctx, layer, width, height);\n }\n usedLayers >>>= 1;\n layer <<= 1;\n }\n }\n}\nexports.Scene = Scene;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvU2NlbmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvU2NlbmUudHM/NDMwZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb250cm9sbGVyTWFuYWdlciB9IGZyb20gXCIuL2lucHV0L0NvbnRyb2xsZXJNYW5hZ2VyXCI7XHJcbmltcG9ydCB7IEdhbWUgfSBmcm9tIFwiLi9HYW1lXCI7XHJcbmltcG9ydCB7IEtleWJvYXJkIH0gZnJvbSBcIi4vaW5wdXQvS2V5Ym9hcmRcIjtcclxuaW1wb3J0IHsgU2NlbmVzIH0gZnJvbSBcIi4vU2NlbmVzXCI7XHJcbmltcG9ydCB7IFRyYW5zaXRpb24gfSBmcm9tIFwiLi9UcmFuc2l0aW9uXCI7XHJcbmltcG9ydCB7IFJvb3ROb2RlLCBVcGRhdGVSb290Tm9kZSwgRHJhd1Jvb3ROb2RlIH0gZnJvbSBcIi4vc2NlbmUvUm9vdE5vZGVcIjtcclxuaW1wb3J0IHsgU2NlbmVOb2RlIH0gZnJvbSBcIi4vc2NlbmUvU2NlbmVOb2RlXCI7XHJcblxyXG4vKipcclxuICogQ29uc3RydWN0b3IgdHlwZSBvZiBhIHNjZW5lLlxyXG4gKlxyXG4gKiBAcGFyYW0gVCAtIFRoZSBnYW1lIHR5cGUuXHJcbiAqIEBwYXJhbSBBIC0gT3B0aW9uYWwgc2NlbmUgYXJndW1lbnQgdHlwZS4gQSB2YWx1ZSBvZiB0aGlzIHR5cGUgbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiBzZXR0aW5nIG9yIHB1c2hpbmcgYSBzY2VuZS5cclxuICogICAgICAgICAgICBEZWZhdWx0cyB0byBubyBhcmd1bWVudCAodm9pZCB0eXBlKVxyXG4gKi9cclxuZXhwb3J0IHR5cGUgU2NlbmVDb25zdHJ1Y3RvcjxUIGV4dGVuZHMgR2FtZSwgQSA9IHZvaWQ+ID0gbmV3IChnYW1lOiBUKSA9PiBTY2VuZTxULCBBPjtcclxuXHJcbi8qKlxyXG4gKiBBYnN0cmFjdCBiYXNlIGNsYXNzIG9mIGEgc2NlbmUuXHJcbiAqXHJcbiAqIEBwYXJhbSBUIC0gVGhlIGdhbWUgdHlwZS5cclxuICogQHBhcmFtIEEgLSBPcHRpb25hbCBzY2VuZSBhcmd1bWVudCB0eXBlLiBBIHZhbHVlIG9mIHRoaXMgdHlwZSBtdXN0IGJlIHNwZWNpZmllZCB3aGVuIHNldHRpbmcgb3IgcHVzaGluZyBhIHNjZW5lLlxyXG4gKiAgICAgICAgICAgIERlZmF1bHRzIHRvIG5vIGFyZ3VtZW50ICh2b2lkIHR5cGUpXHJcbiAqL1xyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2NlbmU8VCBleHRlbmRzIEdhbWUsIEEgPSB2b2lkPiB7XHJcbiAgICBwdWJsaWMgekluZGV4OiBudW1iZXIgPSAwO1xyXG4gICAgcHVibGljIGN1cnJlbnRUcmFuc2l0aW9uOiBUcmFuc2l0aW9uIHwgbnVsbCA9IG51bGw7XHJcbiAgICBwdWJsaWMgaW5UcmFuc2l0aW9uOiBUcmFuc2l0aW9uIHwgbnVsbCA9IG51bGw7XHJcbiAgICBwdWJsaWMgb3V0VHJhbnNpdGlvbjogVHJhbnNpdGlvbiB8IG51bGwgPSBudWxsO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IHJvb3ROb2RlOiBSb290Tm9kZTxUPjtcclxuICAgIHByaXZhdGUgdXBkYXRlUm9vdE5vZGUhOiBVcGRhdGVSb290Tm9kZTtcclxuICAgIHByaXZhdGUgZHJhd1Jvb3ROb2RlITogRHJhd1Jvb3ROb2RlO1xyXG4gICAgcHJpdmF0ZSB1c2VkTGF5ZXJzOiBudW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSBoaWRkZW5MYXllcnM6IG51bWJlciA9IDA7XHJcbiAgICBwcml2YXRlIGJhY2tncm91bmRTdHlsZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBnYW1lOiBUKSB7XHJcbiAgICAgICAgdGhpcy5yb290Tm9kZSA9IG5ldyBSb290Tm9kZSh0aGlzLCAodXBkYXRlLCBkcmF3KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUm9vdE5vZGUgPSB1cGRhdGU7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jvb3ROb2RlID0gZHJhdztcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnJvb3ROb2RlLnJlc2l6ZVRvKHRoaXMuZ2FtZS53aWR0aCwgdGhpcy5nYW1lLmhlaWdodCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBrZXlib2FyZCgpOiBLZXlib2FyZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2FtZS5rZXlib2FyZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGlucHV0KCk6IENvbnRyb2xsZXJNYW5hZ2VyIHtcclxuICAgICAgICByZXR1cm4gQ29udHJvbGxlck1hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHNjZW5lcygpOiBTY2VuZXM8VD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdhbWUuc2NlbmVzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hvd3MgdGhlIGdpdmVuIGxheWVyIHdoZW4gaXQgd2FzIHByZXZpb3VzbHkgaGlkZGVuLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBsYXllciAtIFRoZSBsYXllciB0byBzaG93ICgwLTMxKS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNob3dMYXllcihsYXllcjogbnVtYmVyKTogdGhpcyB7XHJcbiAgICAgICAgdGhpcy5oaWRkZW5MYXllcnMgJj0gfigxIDw8IGxheWVyKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhpZGVzIHRoZSBnaXZlbiBsYXllciB3aGVuIGl0IHdhcyBwcmV2aW91c2x5IHNob3duLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBsYXllciAtIFRoZSBsYXllciB0byBoaWRlICgwLTMxKS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGhpZGVMYXllcihsYXllcjogbnVtYmVyKTogdGhpcyB7XHJcbiAgICAgICAgdGhpcy5oaWRkZW5MYXllcnMgfD0gMSA8PCBsYXllcjtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBnaXZlbiBsYXllciBpcyBoaWRkZW4uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGxheWVyIC0gVGhlIGxheWVyIHRvIGNoZWNrICgwLTMxKS5cclxuICAgICAqIEByZXR1cm4gVHJ1ZSBpZiBsYXllciBpcyBoaWRkZW4sIGZhbHNlIGlmIG5vdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGlzTGF5ZXJIaWRkZW4obGF5ZXI6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5oaWRkZW5MYXllcnMgJiAoMSA8PCBsYXllcikpICE9PSAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIGdpdmVuIGxheWVyIGlzIHNob3duLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBsYXllciAtIFRoZSBsYXllciB0byBjaGVjayAoMC0zMSkuXHJcbiAgICAgKiBAcmV0dXJuIFRydWUgaWYgbGF5ZXIgaXMgc2hvd24sIGZhbHNlIGlmIG5vdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGlzTGF5ZXJTaG93bihsYXllcjogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmhpZGRlbkxheWVycyAmICgxIDw8IGxheWVyKSkgPT09IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBzY2VuZSBub2RlIHdpdGggdGhlIGdpdmVuIGlkLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBpZCAtIFRoZSBJRCB0byBsb29rIGZvci5cclxuICAgICAqIEByZXR1cm4gVGhlIG1hdGNoaW5nIHNjZW5lIG5vZGUgb3IgbnVsbCBpZiBub25lLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Tm9kZUJ5SWQoaWQ6IHN0cmluZyk6IFNjZW5lTm9kZTxUPiB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJvb3ROb2RlLmdldERlc2NlbmRhbnRCeUlkKGlkKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGJhY2tncm91bmQgc3R5bGUgb2YgdGhpcyBzY2VuZS4gVGhpcyBzdHlsZSBpcyB1c2VkIHRvIGZpbGwgdGhlIGJhY2tncm91bmQgb2YgdGhlIHNjZW5lIHdoZW4gc2V0LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gVGhlIHNjZW5lIGJhY2tncm91bmQgc3R5bGUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRCYWNrZ3JvdW5kU3R5bGUoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFja2dyb3VuZFN0eWxlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgYmFja2dyb3VuZCBzdHlsZSBvZiB0aGlzIHNjZW5lLiBUaGlzIHN0eWxlIGlzIHVzZWQgdG8gZmlsbCB0aGUgYmFja2dyb3VuZCBvZiB0aGUgc2NlbmUgd2hlbiBzZXQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGJhY2tncm91bmRTdHlsZSAtIFRoZSBiYWNrZ3JvdW5kIHN0eWxlIHRvIHNldC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldEJhY2tncm91bmRTdHlsZShiYWNrZ3JvdW5kU3R5bGU6IHN0cmluZyB8IG51bGwpOiB0aGlzIHtcclxuICAgICAgICB0aGlzLmJhY2tncm91bmRTdHlsZSA9IGJhY2tncm91bmRTdHlsZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiB0aGlzIHNjZW5lIGlzIGFjdGl2ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFRydWUgaWYgc2NlbmUgaXMgYWN0aXZlLCBmYWxzZSBpdCBub3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc0FjdGl2ZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zY2VuZXMuYWN0aXZlU2NlbmUgPT09IHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgc2NlbmUgaXMgcHVzaGVkIG9udG8gdGhlIHN0YWNrIGFuZCBiZWZvcmUgYW55IHRyYW5zaXRpb25zLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBhcmdzIC0gVGhlIHNjZW5lIGFyZ3VtZW50cyAoaWYgYW55KS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldHVwKGFyZ3M6IEEpOiBQcm9taXNlPHZvaWQ+IHwgdm9pZCB7fVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIHNjZW5lIGJlY29tZXMgdGhlIHRvcCBzY2VuZSBvbiB0aGUgc3RhY2sgYW5kIGFmdGVyIHRoZSBvbi1zdGFnZSB0cmFuc2l0aW9uIGlzIGNvbXBsZXRlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWN0aXZhdGUoKTogUHJvbWlzZTx2b2lkPiB8IHZvaWQge31cclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCB3aGVuIHRoZSBzY2VuZSBpcyBubyBsb25nZXIgdGhlIHRvcCBzY2VuZSBvbiB0aGUgc3RhY2sgYW5kIGJlZm9yZSB0aGUgb2ZmLXN0YWdlIHRyYW5zaXRpb24gYmVnaW5zLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGVhY3RpdmF0ZSgpOiBQcm9taXNlPHZvaWQ+IHwgdm9pZCB7fVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGVkIHdoZW4gdGhlIHNjZW5lIGlzIHBvcHBlZCBmcm9tIHRoZSBzY2VuZSBzdGFjaywgYWZ0ZXIgYW55IHRyYW5zaXRpb25zIGFyZSBjb21wbGV0ZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNsZWFudXAoKTogUHJvbWlzZTx2b2lkPiB8IHZvaWQge31cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIHNjZW5lLiBTY2VuZXMgY2FuIG92ZXJ3cml0ZSB0aGlzIG1ldGhvZCB0byBkbyBpdHMgb3duIGRyYXdpbmcgYnV0IHdoZW4geW91IGFyZSBnb2luZyB0byB1c2UgdGhlXHJcbiAgICAgKiBzY2VuZSBncmFwaCB0aGVuIG1ha2Ugc3VyZSB0byBjYWxsIHRoZSBzdXBlciBtZXRob2QgaW4geW91ciBvdmVyd3JpdHRlbiBtZXRob2Qgb3IgdGhlIHNjZW5lIGdyYXBoIHdpbGwgbm90IGJlXHJcbiAgICAgKiB1cGRhdGVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlKGR0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZWRMYXllcnMgPSB0aGlzLnVwZGF0ZVJvb3ROb2RlKGR0KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERyYXdzIHRoZSBzY2VuZS4gU2NlbmVzIGNhbiBvdmVyd3JpdGUgdGhpcyBtZXRob2QgdG8gZG8gaXRzIG93biBkcmF3aW5nIGJ1dCB3aGVuIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZVxyXG4gICAgICogc2NlbmUgZ3JhcGggdGhlbiBtYWtlIHN1cmUgdG8gY2FsbCB0aGUgc3VwZXIgbWV0aG9kIGluIHlvdXIgb3ZlcndyaXR0ZW4gbWV0aG9kIG9yIHRoZSBzY2VuZSBncmFwaCB3aWxsIG5vdCBiZVxyXG4gICAgICogcmVuZGVyZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGN0eCAgICAtIFRoZSByZW5kZXJpbmcgY29udGV4dC5cclxuICAgICAqIEBwYXJhbSB3aWR0aCAgLSBUaGUgc2NlbmUgd2lkdGguXHJcbiAgICAgKiBAcGFyYW0gaGVpZ2h0IC0gVGhlIHNjZW5lIGhlaWdodC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGRyYXcoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuYmFja2dyb3VuZFN0eWxlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgY3R4LnNhdmUoKTtcclxuICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMuYmFja2dyb3VuZFN0eWxlO1xyXG4gICAgICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBsYXllciA9IDE7XHJcbiAgICAgICAgbGV0IHVzZWRMYXllcnMgPSB0aGlzLnVzZWRMYXllcnMgJiB+dGhpcy5oaWRkZW5MYXllcnM7XHJcbiAgICAgICAgd2hpbGUgKHVzZWRMYXllcnMgIT09IDApIHtcclxuICAgICAgICAgICAgaWYgKCh1c2VkTGF5ZXJzICYgMSkgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJhd1Jvb3ROb2RlKGN0eCwgbGF5ZXIsIHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHVzZWRMYXllcnMgPj4+PSAxO1xyXG4gICAgICAgICAgICBsYXllciA8PD0gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUtBO0FBWUE7Ozs7OztBQU1BO0FBQ0E7QUFZQTtBQUFBO0FBWEE7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUVBOztBQUVBO0FBQ0E7QUFFQTs7QUFFQTtBQUNBO0FBRUE7O0FBRUE7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF0S0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/Scene.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/Scenes.js":
|
|
/*!***********************!*\
|
|
!*** ./lib/Scenes.js ***!
|
|
\***********************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Scenes = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nclass Scenes {\n constructor(game) {\n this.game = game;\n this.activeScene = null;\n this.sceneCache = new WeakMap();\n this.scenes = [];\n this.sortedScenes = [];\n }\n createScene(sceneClass) {\n let scene = this.sceneCache.get(sceneClass);\n if (scene == null) {\n scene = new sceneClass(this.game);\n this.sceneCache.set(sceneClass, scene);\n }\n return scene;\n }\n pushScene(sceneClass, args) {\n return tslib_1.__awaiter(this, void 0, void 0, function* () {\n if (this.activeScene != null) {\n yield this.activeScene.deactivate();\n }\n const scene = this.createScene(sceneClass);\n yield scene.setup(args);\n this.scenes.push(scene);\n this.updateSortedScenes();\n if (scene.inTransition != null) {\n scene.currentTransition = scene.inTransition;\n yield scene.currentTransition.start(\"in\");\n scene.currentTransition = null;\n }\n yield scene.activate();\n this.activeScene = scene;\n });\n }\n getPreviousScene() {\n var _a;\n return (_a = this.scenes[this.scenes.length - 2]) !== null && _a !== void 0 ? _a : null;\n }\n popScene({ noTransition = false } = {}) {\n var _a;\n return tslib_1.__awaiter(this, void 0, void 0, function* () {\n const activeScene = this.activeScene;\n if (activeScene != null) {\n yield activeScene.deactivate();\n if (!noTransition && activeScene.outTransition != null) {\n activeScene.currentTransition = activeScene.outTransition;\n yield activeScene.currentTransition.start(\"out\");\n activeScene.currentTransition = null;\n }\n this.scenes.pop();\n this.updateSortedScenes();\n yield activeScene.cleanup();\n this.activeScene = (_a = this.scenes[this.scenes.length - 1]) !== null && _a !== void 0 ? _a : null;\n if (this.activeScene != null) {\n yield this.activeScene.activate();\n }\n }\n return activeScene;\n });\n }\n setScene(newSceneClass, args) {\n return tslib_1.__awaiter(this, void 0, void 0, function* () {\n const currentScene = this.activeScene;\n if (currentScene == null) {\n return this.pushScene(newSceneClass, args);\n }\n yield currentScene.deactivate();\n let outTransitionPromise = null;\n if (currentScene.outTransition) {\n currentScene.currentTransition = currentScene.outTransition;\n outTransitionPromise = currentScene.currentTransition.start(\"out\");\n }\n const currentSceneIndex = this.scenes.length - 1;\n const newScene = this.createScene(newSceneClass);\n yield newScene.setup(args);\n this.scenes.push(newScene);\n this.updateSortedScenes();\n if (newScene.inTransition != null) {\n newScene.currentTransition = newScene.inTransition;\n yield newScene.currentTransition.start(\"in\");\n newScene.currentTransition = null;\n }\n yield newScene.activate();\n this.activeScene = newScene;\n if (outTransitionPromise != null) {\n yield outTransitionPromise;\n currentScene.currentTransition = null;\n }\n this.scenes.splice(currentSceneIndex, 1);\n this.updateSortedScenes();\n currentScene.cleanup();\n });\n }\n updateSortedScenes() {\n this.sortedScenes = this.scenes.slice().sort((a, b) => {\n if (a.zIndex === b.zIndex) {\n return this.scenes.indexOf(a) - this.scenes.indexOf(b);\n }\n else {\n return a.zIndex - b.zIndex;\n }\n });\n }\n update(dt) {\n this.sortedScenes.forEach(scene => {\n var _a;\n (_a = scene.currentTransition) === null || _a === void 0 ? void 0 : _a.update(dt);\n scene.update(dt);\n });\n }\n draw(ctx, width, height) {\n this.sortedScenes.forEach(scene => {\n ctx.save();\n if (scene.currentTransition != null) {\n scene.currentTransition.draw(ctx, () => scene.draw(ctx, width, height), width, height);\n }\n else {\n scene.draw(ctx, width, height);\n }\n ctx.restore();\n });\n }\n}\nexports.Scenes = Scenes;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvU2NlbmVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL1NjZW5lcy50cz9mNWM2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdhbWUgfSBmcm9tIFwiLi9HYW1lXCI7XHJcbmltcG9ydCB7IFNjZW5lLCBTY2VuZUNvbnN0cnVjdG9yIH0gZnJvbSBcIi4vU2NlbmVcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTY2VuZXM8VCBleHRlbmRzIEdhbWU+IHtcclxuICAgIHB1YmxpYyBhY3RpdmVTY2VuZTogU2NlbmU8VCwgdW5rbm93bj4gfCBudWxsID0gbnVsbDtcclxuICAgIHByaXZhdGUgc2NlbmVDYWNoZSA9IG5ldyBXZWFrTWFwPFNjZW5lQ29uc3RydWN0b3I8VCwgdW5rbm93bj4sIFNjZW5lPFQsIHVua25vd24+PigpO1xyXG4gICAgcHJpdmF0ZSBzY2VuZXM6IFNjZW5lPFQsIHVua25vd24+W10gPSBbXTtcclxuICAgIHByaXZhdGUgc29ydGVkU2NlbmVzOiBTY2VuZTxULCB1bmtub3duPltdID0gW107XHJcblxyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBnYW1lOiBUKSB7fVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlU2NlbmU8QT4oc2NlbmVDbGFzczogU2NlbmVDb25zdHJ1Y3RvcjxULCBBPik6IFNjZW5lPFQsIEE+IHtcclxuICAgICAgICBsZXQgc2NlbmUgPSB0aGlzLnNjZW5lQ2FjaGUuZ2V0KHNjZW5lQ2xhc3MpO1xyXG5cclxuICAgICAgICBpZiAoc2NlbmUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBzY2VuZSA9IG5ldyBzY2VuZUNsYXNzKHRoaXMuZ2FtZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmVDYWNoZS5zZXQoc2NlbmVDbGFzcywgc2NlbmUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHNjZW5lO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBwdXNoU2NlbmU8QT4oc2NlbmVDbGFzczogU2NlbmVDb25zdHJ1Y3RvcjxULCB2b2lkPiwgYXJnczogdm9pZCk6IFByb21pc2U8dm9pZD47XHJcbiAgICBwdWJsaWMgYXN5bmMgcHVzaFNjZW5lPEE+KHNjZW5lQ2xhc3M6IFNjZW5lQ29uc3RydWN0b3I8VCwgQT4sIGFyZ3M6IEEpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgcHVibGljIGFzeW5jIHB1c2hTY2VuZTxBPihzY2VuZUNsYXNzOiBTY2VuZUNvbnN0cnVjdG9yPFQsIEE+LCBhcmdzOiBBKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlU2NlbmUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFjdGl2ZVNjZW5lLmRlYWN0aXZhdGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHNjZW5lID0gdGhpcy5jcmVhdGVTY2VuZShzY2VuZUNsYXNzKTtcclxuXHJcbiAgICAgICAgYXdhaXQgc2NlbmUuc2V0dXAoYXJncyk7XHJcbiAgICAgICAgdGhpcy5zY2VuZXMucHVzaChzY2VuZSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTb3J0ZWRTY2VuZXMoKTtcclxuXHJcbiAgICAgICAgaWYgKHNjZW5lLmluVHJhbnNpdGlvbiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHNjZW5lLmN1cnJlbnRUcmFuc2l0aW9uID0gc2NlbmUuaW5UcmFuc2l0aW9uO1xyXG4gICAgICAgICAgICBhd2FpdCBzY2VuZS5jdXJyZW50VHJhbnNpdGlvbi5zdGFydChcImluXCIpO1xyXG4gICAgICAgICAgICBzY2VuZS5jdXJyZW50VHJhbnNpdGlvbiA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCBzY2VuZS5hY3RpdmF0ZSgpO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlU2NlbmUgPSBzY2VuZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UHJldmlvdXNTY2VuZSgpOiBTY2VuZTxUPiB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNjZW5lc1t0aGlzLnNjZW5lcy5sZW5ndGggLSAyXSA/PyBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBwb3BTY2VuZSh7IG5vVHJhbnNpdGlvbiA9IGZhbHNlIH06IHsgbm9UcmFuc2l0aW9uPzogYm9vbGVhbn0gPSB7fSk6IFByb21pc2U8U2NlbmU8VD4gfCBudWxsPiB7XHJcbiAgICAgICAgY29uc3QgYWN0aXZlU2NlbmUgPSB0aGlzLmFjdGl2ZVNjZW5lO1xyXG5cclxuICAgICAgICBpZiAoYWN0aXZlU2NlbmUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBhd2FpdCBhY3RpdmVTY2VuZS5kZWFjdGl2YXRlKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIW5vVHJhbnNpdGlvbiAmJiBhY3RpdmVTY2VuZS5vdXRUcmFuc2l0aW9uICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGFjdGl2ZVNjZW5lLmN1cnJlbnRUcmFuc2l0aW9uID0gYWN0aXZlU2NlbmUub3V0VHJhbnNpdGlvbjtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGFjdGl2ZVNjZW5lLmN1cnJlbnRUcmFuc2l0aW9uLnN0YXJ0KFwib3V0XCIpO1xyXG4gICAgICAgICAgICAgICAgYWN0aXZlU2NlbmUuY3VycmVudFRyYW5zaXRpb24gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNjZW5lcy5wb3AoKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVTb3J0ZWRTY2VuZXMoKTtcclxuICAgICAgICAgICAgYXdhaXQgYWN0aXZlU2NlbmUuY2xlYW51cCgpO1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVNjZW5lID0gdGhpcy5zY2VuZXNbdGhpcy5zY2VuZXMubGVuZ3RoIC0gMV0gPz8gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZVNjZW5lICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYWN0aXZlU2NlbmUuYWN0aXZhdGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGFjdGl2ZVNjZW5lO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBzZXRTY2VuZTxBPihuZXdTY2VuZUNsYXNzOiBTY2VuZUNvbnN0cnVjdG9yPFQsIHZvaWQ+LCBhcmdzOiB2b2lkKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHB1YmxpYyBhc3luYyBzZXRTY2VuZTxBPihuZXdTY2VuZUNsYXNzOiBTY2VuZUNvbnN0cnVjdG9yPFQsIEE+LCBhcmdzOiBBKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHB1YmxpYyBhc3luYyBzZXRTY2VuZTxBPihuZXdTY2VuZUNsYXNzOiBTY2VuZUNvbnN0cnVjdG9yPFQsIEE+LCBhcmdzOiBBKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFNjZW5lID0gdGhpcy5hY3RpdmVTY2VuZTtcclxuXHJcbiAgICAgICAgaWYgKGN1cnJlbnRTY2VuZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTY2VuZShuZXdTY2VuZUNsYXNzLCBhcmdzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IGN1cnJlbnRTY2VuZS5kZWFjdGl2YXRlKCk7XHJcbiAgICAgICAgbGV0IG91dFRyYW5zaXRpb25Qcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmIChjdXJyZW50U2NlbmUub3V0VHJhbnNpdGlvbikge1xyXG4gICAgICAgICAgICBjdXJyZW50U2NlbmUuY3VycmVudFRyYW5zaXRpb24gPSBjdXJyZW50U2NlbmUub3V0VHJhbnNpdGlvbjtcclxuICAgICAgICAgICAgb3V0VHJhbnNpdGlvblByb21pc2UgPSBjdXJyZW50U2NlbmUuY3VycmVudFRyYW5zaXRpb24uc3RhcnQoXCJvdXRcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjdXJyZW50U2NlbmVJbmRleCA9IHRoaXMuc2NlbmVzLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgY29uc3QgbmV3U2NlbmUgPSB0aGlzLmNyZWF0ZVNjZW5lKG5ld1NjZW5lQ2xhc3MpO1xyXG4gICAgICAgIGF3YWl0IG5ld1NjZW5lLnNldHVwKGFyZ3MpO1xyXG4gICAgICAgIHRoaXMuc2NlbmVzLnB1c2gobmV3U2NlbmUpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlU29ydGVkU2NlbmVzKCk7XHJcblxyXG4gICAgICAgIGlmIChuZXdTY2VuZS5pblRyYW5zaXRpb24gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBuZXdTY2VuZS5jdXJyZW50VHJhbnNpdGlvbiA9IG5ld1NjZW5lLmluVHJhbnNpdGlvbjtcclxuICAgICAgICAgICAgYXdhaXQgbmV3U2NlbmUuY3VycmVudFRyYW5zaXRpb24uc3RhcnQoXCJpblwiKTtcclxuICAgICAgICAgICAgbmV3U2NlbmUuY3VycmVudFRyYW5zaXRpb24gPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgbmV3U2NlbmUuYWN0aXZhdGUoKTtcclxuICAgICAgICB0aGlzLmFjdGl2ZVNjZW5lID0gbmV3U2NlbmU7XHJcblxyXG4gICAgICAgIGlmIChvdXRUcmFuc2l0aW9uUHJvbWlzZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IG91dFRyYW5zaXRpb25Qcm9taXNlO1xyXG4gICAgICAgICAgICBjdXJyZW50U2NlbmUuY3VycmVudFRyYW5zaXRpb24gPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZXMuc3BsaWNlKGN1cnJlbnRTY2VuZUluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNvcnRlZFNjZW5lcygpO1xyXG4gICAgICAgIGN1cnJlbnRTY2VuZS5jbGVhbnVwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVTb3J0ZWRTY2VuZXMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zb3J0ZWRTY2VuZXMgPSB0aGlzLnNjZW5lcy5zbGljZSgpLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgaWYgKGEuekluZGV4ID09PSBiLnpJbmRleCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NlbmVzLmluZGV4T2YoYSkgLSB0aGlzLnNjZW5lcy5pbmRleE9mKGIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuekluZGV4IC0gYi56SW5kZXg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlKGR0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNvcnRlZFNjZW5lcy5mb3JFYWNoKHNjZW5lID0+IHtcclxuICAgICAgICAgICAgc2NlbmUuY3VycmVudFRyYW5zaXRpb24/LnVwZGF0ZShkdCk7XHJcbiAgICAgICAgICAgIHNjZW5lLnVwZGF0ZShkdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRyYXcoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zb3J0ZWRTY2VuZXMuZm9yRWFjaChzY2VuZSA9PiB7XHJcbiAgICAgICAgICAgIGN0eC5zYXZlKCk7XHJcbiAgICAgICAgICAgIGlmIChzY2VuZS5jdXJyZW50VHJhbnNpdGlvbiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBzY2VuZS5jdXJyZW50VHJhbnNpdGlvbi5kcmF3KGN0eCwgKCkgPT4gc2NlbmUuZHJhdyhjdHgsIHdpZHRoLCBoZWlnaHQpLCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNjZW5lLmRyYXcoY3R4LCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUdBO0FBTUE7QUFBQTtBQUxBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBSUE7O0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFFQTs7QUFDQTtBQUNBO0FBRUE7OztBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBQ0E7QUFJQTs7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBN0lBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/Scenes.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/Signal.js":
|
|
/*!***********************!*\
|
|
!*** ./lib/Signal.js ***!
|
|
\***********************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Signal = void 0;\n/**\n * Internally used container for a slot (A callback function with a calling context).\n */\nclass Slot {\n constructor(callback, context) {\n this.callback = callback;\n this.context = context;\n }\n call(value) {\n this.callback.call(this.context, value);\n }\n}\n/**\n * Light-weight and very fast signal/slot based event system. Just create a signal instance, connect slots\n * (event listeners) to it and then let the signal emit values which are then send to all connected slots.\n * Slots can be methods and it's easy to disconnect them again using the disconnect() method or calling the function\n * returned by connect().\n */\nclass Signal {\n /**\n * Creates a new signal with the given optional initialization function.\n *\n * @param onInit - Optional initialization function which is called when the first slot is connected to the signal.\n * This function can return an optional deinitialization function which is called after the last\n * slot has been disconnected.\n */\n constructor(onInit) {\n this.slots = [];\n this.onDone = null;\n this.onInit = onInit !== null && onInit !== void 0 ? onInit : null;\n }\n /**\n * Connects a slot to this signal.\n *\n * @param callback - The slot callback function to call when signal emits a value.\n * @param context - Optional context to call the slot callback function on. This is useful for connecting methods.\n * @return A function which can be called to disconnect the slot from the signal again.\n */\n connect(callback, context) {\n if (this.onInit != null && this.slots.length === 0) {\n this.onDone = this.onInit(this) || null;\n }\n this.slots.push(new Slot(callback, context));\n return () => this.disconnect(callback, context);\n }\n /**\n * Disconnects a slot from this signal.\n *\n * @param callback - The slot callback function to disconnect from the signal.\n * @param context - Optional context. Needed to disconnect methods.\n */\n disconnect(callback, context) {\n const index = this.slots.findIndex(slot => slot.callback === callback && slot.context === context);\n if (index >= 0) {\n this.slots.splice(index, 1);\n }\n if (this.onDone != null && this.slots.length === 0) {\n this.onDone(this);\n this.onDone = null;\n }\n }\n /**\n * Emits the given value to all connected slots.\n *\n * @param value - The value to emit.\n */\n emit(value) {\n this.slots.forEach(slot => slot.call(value));\n }\n /**\n * Returns a new signal which only emits the values matching the giving predicate.\n *\n * @parm predicate - The function which decides if the value is emitted or not.\n * @return The new signal.\n */\n filter(predicate) {\n return new Signal(signal => this.connect(value => {\n if (predicate(value)) {\n signal.emit(value);\n }\n }));\n }\n /**\n * Returns a new signal which maps all emitted values to something else.\n *\n * @param mapper - The function which maps the original value to something new.\n * @return The new signal.\n */\n map(mapper) {\n return new Signal(signal => this.connect(value => {\n return signal.emit(mapper(value));\n }));\n }\n}\nexports.Signal = Signal;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvU2lnbmFsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL1NpZ25hbC50cz81NmY4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBJbnRlcm5hbGx5IHVzZWQgY29udGFpbmVyIGZvciBhIHNsb3QgKEEgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCBhIGNhbGxpbmcgY29udGV4dCkuXHJcbiAqL1xyXG5jbGFzcyBTbG90PFQgPSB1bmtub3duPiB7XHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIGNhbGxiYWNrOiAodmFsdWU6IFQpID0+IHZvaWQsIHB1YmxpYyBjb250ZXh0Pzogb2JqZWN0KSB7fVxyXG4gICAgcHVibGljIGNhbGwodmFsdWU6IFQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNhbGxiYWNrLmNhbGwodGhpcy5jb250ZXh0LCB2YWx1ZSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMaWdodC13ZWlnaHQgYW5kIHZlcnkgZmFzdCBzaWduYWwvc2xvdCBiYXNlZCBldmVudCBzeXN0ZW0uIEp1c3QgY3JlYXRlIGEgc2lnbmFsIGluc3RhbmNlLCBjb25uZWN0IHNsb3RzXHJcbiAqIChldmVudCBsaXN0ZW5lcnMpIHRvIGl0IGFuZCB0aGVuIGxldCB0aGUgc2lnbmFsIGVtaXQgdmFsdWVzIHdoaWNoIGFyZSB0aGVuIHNlbmQgdG8gYWxsIGNvbm5lY3RlZCBzbG90cy5cclxuICogU2xvdHMgY2FuIGJlIG1ldGhvZHMgYW5kIGl0J3MgZWFzeSB0byBkaXNjb25uZWN0IHRoZW0gYWdhaW4gdXNpbmcgdGhlIGRpc2Nvbm5lY3QoKSBtZXRob2Qgb3IgY2FsbGluZyB0aGUgZnVuY3Rpb25cclxuICogcmV0dXJuZWQgYnkgY29ubmVjdCgpLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFNpZ25hbDxUID0gdm9pZD4ge1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBzbG90czogU2xvdDxUPltdID0gW107XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9uSW5pdDogKChzaWduYWw6IFNpZ25hbDxUPikgPT4gKCgpID0+IHZvaWQpIHwgdm9pZCkgfCBudWxsO1xyXG4gICAgcHJpdmF0ZSBvbkRvbmU6ICgoc2lnbmFsOiBTaWduYWw8VD4pID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHNpZ25hbCB3aXRoIHRoZSBnaXZlbiBvcHRpb25hbCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb25Jbml0IC0gT3B0aW9uYWwgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIHdoZW4gdGhlIGZpcnN0IHNsb3QgaXMgY29ubmVjdGVkIHRvIHRoZSBzaWduYWwuXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBjYW4gcmV0dXJuIGFuIG9wdGlvbmFsIGRlaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGFmdGVyIHRoZSBsYXN0XHJcbiAgICAgKiAgICAgICAgICAgICAgICAgc2xvdCBoYXMgYmVlbiBkaXNjb25uZWN0ZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihvbkluaXQ/OiAoc2lnbmFsOiBTaWduYWw8VD4pID0+ICgoKSA9PiB2b2lkKSB8IHZvaWQpIHtcclxuICAgICAgICB0aGlzLm9uSW5pdCA9IG9uSW5pdCA/PyBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29ubmVjdHMgYSBzbG90IHRvIHRoaXMgc2lnbmFsLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBzbG90IGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBzaWduYWwgZW1pdHMgYSB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSBjb250ZXh0ICAtIE9wdGlvbmFsIGNvbnRleHQgdG8gY2FsbCB0aGUgc2xvdCBjYWxsYmFjayBmdW5jdGlvbiBvbi4gVGhpcyBpcyB1c2VmdWwgZm9yIGNvbm5lY3RpbmcgbWV0aG9kcy5cclxuICAgICAqIEByZXR1cm4gQSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIHRvIGRpc2Nvbm5lY3QgdGhlIHNsb3QgZnJvbSB0aGUgc2lnbmFsIGFnYWluLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29ubmVjdChjYWxsYmFjazogKHZhbHVlOiBUKSA9PiB2b2lkLCBjb250ZXh0Pzogb2JqZWN0KTogKCkgPT4gdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMub25Jbml0ICE9IG51bGwgJiYgdGhpcy5zbG90cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5vbkRvbmUgPSB0aGlzLm9uSW5pdCh0aGlzKSB8fCBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNsb3RzLnB1c2gobmV3IFNsb3QoY2FsbGJhY2ssIGNvbnRleHQpKTtcclxuICAgICAgICByZXR1cm4gKCkgPT4gdGhpcy5kaXNjb25uZWN0KGNhbGxiYWNrLCBjb250ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc2Nvbm5lY3RzIGEgc2xvdCBmcm9tIHRoaXMgc2lnbmFsLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBzbG90IGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGRpc2Nvbm5lY3QgZnJvbSB0aGUgc2lnbmFsLlxyXG4gICAgICogQHBhcmFtIGNvbnRleHQgIC0gT3B0aW9uYWwgY29udGV4dC4gTmVlZGVkIHRvIGRpc2Nvbm5lY3QgbWV0aG9kcy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGRpc2Nvbm5lY3QoY2FsbGJhY2s6ICh2YWx1ZTogVCkgPT4gdm9pZCwgY29udGV4dD86IG9iamVjdCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zbG90cy5maW5kSW5kZXgoc2xvdCA9PiBzbG90LmNhbGxiYWNrID09PSBjYWxsYmFjayAmJiBzbG90LmNvbnRleHQgPT09IGNvbnRleHQpO1xyXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2xvdHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub25Eb25lICE9IG51bGwgJiYgdGhpcy5zbG90cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5vbkRvbmUodGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMub25Eb25lID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0cyB0aGUgZ2l2ZW4gdmFsdWUgdG8gYWxsIGNvbm5lY3RlZCBzbG90cy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gZW1pdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGVtaXQodmFsdWU6IFQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNsb3RzLmZvckVhY2goc2xvdCA9PiBzbG90LmNhbGwodmFsdWUpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBuZXcgc2lnbmFsIHdoaWNoIG9ubHkgZW1pdHMgdGhlIHZhbHVlcyBtYXRjaGluZyB0aGUgZ2l2aW5nIHByZWRpY2F0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFybSBwcmVkaWNhdGUgLSBUaGUgZnVuY3Rpb24gd2hpY2ggZGVjaWRlcyBpZiB0aGUgdmFsdWUgaXMgZW1pdHRlZCBvciBub3QuXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBuZXcgc2lnbmFsLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmlsdGVyKHByZWRpY2F0ZTogKHZhbHVlOiBUKSA9PiBib29sZWFuKTogU2lnbmFsPFQ+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFNpZ25hbChzaWduYWwgPT4gdGhpcy5jb25uZWN0KHZhbHVlID0+IHtcclxuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHNpZ25hbC5lbWl0KHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBuZXcgc2lnbmFsIHdoaWNoIG1hcHMgYWxsIGVtaXR0ZWQgdmFsdWVzIHRvIHNvbWV0aGluZyBlbHNlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBtYXBwZXIgLSBUaGUgZnVuY3Rpb24gd2hpY2ggbWFwcyB0aGUgb3JpZ2luYWwgdmFsdWUgdG8gc29tZXRoaW5nIG5ldy5cclxuICAgICAqIEByZXR1cm4gVGhlIG5ldyBzaWduYWwuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBtYXA8Uj4obWFwcGVyOiAodmFsdWU6IFQpID0+IFIpOiBTaWduYWw8Uj4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgU2lnbmFsPFI+KHNpZ25hbCA9PiB0aGlzLmNvbm5lY3QodmFsdWUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gc2lnbmFsLmVtaXQobWFwcGVyKHZhbHVlKSk7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFLQTtBQUNBO0FBS0E7Ozs7OztBQU1BO0FBQ0E7QUFYQTtBQUVBO0FBVUE7QUFDQTtBQUVBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFsRkE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/Signal.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/Sound.js":
|
|
/*!**********************!*\
|
|
!*** ./lib/Sound.js ***!
|
|
\**********************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar _a;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Sound = exports.getGlobalGainNode = exports.getAudioContext = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst util_1 = __webpack_require__(/*! ./util */ \"./lib/util.js\");\nconst ControllerManager_1 = __webpack_require__(/*! ./input/ControllerManager */ \"./lib/input/ControllerManager.js\");\n// Get cross-browser AudioContext (Safari still uses webkitAudioContext…)\nconst AudioContext = (_a = window.AudioContext) !== null && _a !== void 0 ? _a : window.webkitAudioContext;\nlet audioContext = null;\nlet globalGainNode = null;\nfunction getAudioContext() {\n const controllerManager = ControllerManager_1.ControllerManager.getInstance();\n if (audioContext == null) {\n audioContext = new AudioContext();\n // When audio context is suspended then try to wake it up on next key or pointer press\n if (audioContext.state === \"suspended\") {\n const resume = () => {\n audioContext === null || audioContext === void 0 ? void 0 : audioContext.resume();\n };\n controllerManager.onButtonDown.connect(resume);\n document.addEventListener(\"pointerdown\", resume);\n audioContext.addEventListener(\"statechange\", () => {\n if ((audioContext === null || audioContext === void 0 ? void 0 : audioContext.state) === \"running\") {\n controllerManager.onButtonDown.disconnect(resume);\n document.removeEventListener(\"pointerdown\", resume);\n }\n });\n }\n }\n return audioContext;\n}\nexports.getAudioContext = getAudioContext;\nfunction getGlobalGainNode() {\n if (globalGainNode == null) {\n const audioContext = getAudioContext();\n globalGainNode = audioContext.createGain();\n globalGainNode.connect(audioContext.destination);\n }\n return globalGainNode;\n}\nexports.getGlobalGainNode = getGlobalGainNode;\nclass Sound {\n constructor(buffer) {\n this.buffer = buffer;\n this.source = null;\n this.loop = false;\n this.gainNode = getAudioContext().createGain();\n this.gainNode.connect(getGlobalGainNode());\n }\n static load(url) {\n return tslib_1.__awaiter(this, void 0, void 0, function* () {\n const arrayBuffer = yield (yield fetch(url)).arrayBuffer();\n return new Promise((resolve, reject) => {\n getAudioContext().decodeAudioData(arrayBuffer, buffer => resolve(new Sound(buffer)), error => reject(error));\n });\n });\n }\n isPlaying() {\n return this.source != null;\n }\n play() {\n if (!this.isPlaying()) {\n const source = getAudioContext().createBufferSource();\n source.buffer = this.buffer;\n source.loop = this.loop;\n source.connect(this.gainNode);\n source.addEventListener(\"ended\", () => {\n if (this.source === source) {\n this.source = null;\n }\n });\n this.source = source;\n source.start();\n }\n }\n stop() {\n if (this.source) {\n try {\n this.source.stop();\n }\n catch (e) {\n // Ignored. Happens on Safari sometimes. Can't stop a sound which may not be really playing?\n }\n this.source = null;\n }\n }\n setLoop(loop) {\n this.loop = loop;\n if (this.source) {\n this.source.loop = loop;\n }\n }\n setVolume(volume) {\n const gain = this.gainNode.gain;\n gain.value = util_1.clamp(volume, gain.minValue, gain.maxValue);\n }\n}\nexports.Sound = Sound;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvU291bmQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvU291bmQudHM/MTFkZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjbGFtcCB9IGZyb20gXCIuL3V0aWxcIjtcclxuaW1wb3J0IHsgQ29udHJvbGxlck1hbmFnZXIgfSBmcm9tIFwiLi9pbnB1dC9Db250cm9sbGVyTWFuYWdlclwiO1xyXG5cclxuLy8gR2V0IGNyb3NzLWJyb3dzZXIgQXVkaW9Db250ZXh0IChTYWZhcmkgc3RpbGwgdXNlcyB3ZWJraXRBdWRpb0NvbnRleHTigKYpXHJcbmNvbnN0IEF1ZGlvQ29udGV4dCA9IHdpbmRvdy5BdWRpb0NvbnRleHQgPz8gKHdpbmRvdyBhcyBhbnkpLndlYmtpdEF1ZGlvQ29udGV4dCBhcyBBdWRpb0NvbnRleHQ7XHJcblxyXG5sZXQgYXVkaW9Db250ZXh0OiBBdWRpb0NvbnRleHQgfCBudWxsID0gbnVsbDtcclxubGV0IGdsb2JhbEdhaW5Ob2RlOiBHYWluTm9kZSB8IG51bGwgPSBudWxsO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEF1ZGlvQ29udGV4dCgpOiBBdWRpb0NvbnRleHQge1xyXG4gICAgY29uc3QgY29udHJvbGxlck1hbmFnZXIgPSBDb250cm9sbGVyTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xyXG5cclxuICAgIGlmIChhdWRpb0NvbnRleHQgPT0gbnVsbCkge1xyXG4gICAgICAgIGF1ZGlvQ29udGV4dCA9IG5ldyBBdWRpb0NvbnRleHQoKTtcclxuXHJcbiAgICAgICAgLy8gV2hlbiBhdWRpbyBjb250ZXh0IGlzIHN1c3BlbmRlZCB0aGVuIHRyeSB0byB3YWtlIGl0IHVwIG9uIG5leHQga2V5IG9yIHBvaW50ZXIgcHJlc3NcclxuICAgICAgICBpZiAoYXVkaW9Db250ZXh0LnN0YXRlID09PSBcInN1c3BlbmRlZFwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VtZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGF1ZGlvQ29udGV4dD8ucmVzdW1lKCk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb250cm9sbGVyTWFuYWdlci5vbkJ1dHRvbkRvd24uY29ubmVjdChyZXN1bWUpO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgcmVzdW1lKTtcclxuXHJcbiAgICAgICAgICAgIGF1ZGlvQ29udGV4dC5hZGRFdmVudExpc3RlbmVyKFwic3RhdGVjaGFuZ2VcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGF1ZGlvQ29udGV4dD8uc3RhdGUgPT09IFwicnVubmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlck1hbmFnZXIub25CdXR0b25Eb3duLmRpc2Nvbm5lY3QocmVzdW1lKTtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgcmVzdW1lKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBhdWRpb0NvbnRleHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRHbG9iYWxHYWluTm9kZSgpOiBHYWluTm9kZSB7XHJcbiAgICBpZiAoZ2xvYmFsR2Fpbk5vZGUgPT0gbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IGF1ZGlvQ29udGV4dCA9IGdldEF1ZGlvQ29udGV4dCgpO1xyXG4gICAgICAgIGdsb2JhbEdhaW5Ob2RlID0gYXVkaW9Db250ZXh0LmNyZWF0ZUdhaW4oKTtcclxuICAgICAgICBnbG9iYWxHYWluTm9kZS5jb25uZWN0KGF1ZGlvQ29udGV4dC5kZXN0aW5hdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGdsb2JhbEdhaW5Ob2RlO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU291bmQge1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBnYWluTm9kZTogR2Fpbk5vZGU7XHJcbiAgICBwcml2YXRlIHNvdXJjZTogQXVkaW9CdWZmZXJTb3VyY2VOb2RlIHwgbnVsbCA9IG51bGw7XHJcbiAgICBwcml2YXRlIGxvb3A6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYnVmZmVyOiBBdWRpb0J1ZmZlcikge1xyXG4gICAgICAgIHRoaXMuZ2Fpbk5vZGUgPSBnZXRBdWRpb0NvbnRleHQoKS5jcmVhdGVHYWluKCk7XHJcbiAgICAgICAgdGhpcy5nYWluTm9kZS5jb25uZWN0KGdldEdsb2JhbEdhaW5Ob2RlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgYXN5bmMgbG9hZCh1cmw6IHN0cmluZyk6IFByb21pc2U8U291bmQ+IHtcclxuICAgICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGF3YWl0IChhd2FpdCBmZXRjaCh1cmwpKS5hcnJheUJ1ZmZlcigpO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBnZXRBdWRpb0NvbnRleHQoKS5kZWNvZGVBdWRpb0RhdGEoYXJyYXlCdWZmZXIsXHJcbiAgICAgICAgICAgICAgICBidWZmZXIgPT4gcmVzb2x2ZShuZXcgU291bmQoYnVmZmVyKSksXHJcbiAgICAgICAgICAgICAgICBlcnJvciA9PiByZWplY3QoZXJyb3IpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzUGxheWluZygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2UgIT0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcGxheSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNQbGF5aW5nKCkpIHtcclxuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gZ2V0QXVkaW9Db250ZXh0KCkuY3JlYXRlQnVmZmVyU291cmNlKCk7XHJcbiAgICAgICAgICAgIHNvdXJjZS5idWZmZXIgPSB0aGlzLmJ1ZmZlcjtcclxuICAgICAgICAgICAgc291cmNlLmxvb3AgPSB0aGlzLmxvb3A7XHJcbiAgICAgICAgICAgIHNvdXJjZS5jb25uZWN0KHRoaXMuZ2Fpbk5vZGUpO1xyXG5cclxuICAgICAgICAgICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoXCJlbmRlZFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2UgPT09IHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcclxuICAgICAgICAgICAgc291cmNlLnN0YXJ0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdG9wKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnNvdXJjZSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zb3VyY2Uuc3RvcCgpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJZ25vcmVkLiBIYXBwZW5zIG9uIFNhZmFyaSBzb21ldGltZXMuIENhbid0IHN0b3AgYSBzb3VuZCB3aGljaCBtYXkgbm90IGJlIHJlYWxseSBwbGF5aW5nP1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNvdXJjZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRMb29wKGxvb3A6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmxvb3AgPSBsb29wO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zb3VyY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5zb3VyY2UubG9vcCA9IGxvb3A7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRWb2x1bWUodm9sdW1lOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBnYWluID0gdGhpcy5nYWluTm9kZS5nYWluO1xyXG4gICAgICAgIGdhaW4udmFsdWUgPSBjbGFtcCh2b2x1bWUsIGdhaW4ubWluVmFsdWUsIGdhaW4ubWF4VmFsdWUpO1xyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUF6QkE7QUEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQVJBO0FBVUE7QUFLQTtBQUFBO0FBSEE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUVBOztBQUNBO0FBRUE7QUFDQTtBQUlBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbkVBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/Sound.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/SoundEmitter.js":
|
|
/*!*****************************!*\
|
|
!*** ./lib/SoundEmitter.js ***!
|
|
\*****************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SoundEmitter = void 0;\nconst util_1 = __webpack_require__(/*! ./util */ \"./lib/util.js\");\nconst Entity_1 = __webpack_require__(/*! ./Entity */ \"./lib/Entity.js\");\n/**\n * Sound emitters are invisible entities that emit a sound in relation to the player distance.\n * Might be better to set the volume according to the camera center in the future.\n */\nclass SoundEmitter extends Entity_1.Entity {\n constructor(scene, x, y, sound, maxVolume, intensity) {\n super(scene, x, y, 1, 1);\n this.sound = sound;\n this.maxVolume = maxVolume;\n this.intensity = intensity;\n }\n draw() { }\n update() {\n const vol = this.scene.paused ? 0 : util_1.calculateVolume(this.distanceToPlayer, this.maxVolume, this.intensity);\n if (vol) {\n this.sound.setVolume(vol);\n if (!this.sound.isPlaying())\n this.sound.play();\n }\n else {\n this.sound.stop();\n }\n }\n static fromGameObjectInfo(scene, gameObjectInfo) {\n const soundId = gameObjectInfo.properties.sound;\n const volume = gameObjectInfo.properties.volume || 1;\n const intensity = gameObjectInfo.properties.intensity || 1;\n if (soundId) {\n const sound = scene.ambientSounds[soundId];\n if (sound) {\n return new SoundEmitter(scene, gameObjectInfo.x, gameObjectInfo.y, sound, volume, intensity);\n }\n else {\n throw new Error(`Cannot create sound emitter because '${soundId}' is not a valid ambient sound ID.`);\n }\n }\n else {\n throw new Error(\"Cannot create sound emitter because 'sound' property is empty.\");\n }\n }\n}\nexports.SoundEmitter = SoundEmitter;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvU291bmRFbWl0dGVyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL1NvdW5kRW1pdHRlci50cz80YzlmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFtYmllbnRTb3VuZElkLCBHYW1lU2NlbmUgfSBmcm9tIFwiLi9zY2VuZXMvR2FtZVNjZW5lXCI7XHJcbmltcG9ydCB7IGNhbGN1bGF0ZVZvbHVtZSB9IGZyb20gXCIuL3V0aWxcIjtcclxuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSBcIi4vRW50aXR5XCI7XHJcbmltcG9ydCB7IEdhbWVPYmplY3RJbmZvIH0gZnJvbSBcIi4vTWFwSW5mb1wiO1xyXG5pbXBvcnQgeyBTb3VuZCB9IGZyb20gXCIuL1NvdW5kXCI7XHJcblxyXG4vKipcclxuICogU291bmQgZW1pdHRlcnMgYXJlIGludmlzaWJsZSBlbnRpdGllcyB0aGF0IGVtaXQgYSBzb3VuZCBpbiByZWxhdGlvbiB0byB0aGUgcGxheWVyIGRpc3RhbmNlLlxyXG4gKiBNaWdodCBiZSBiZXR0ZXIgdG8gc2V0IHRoZSB2b2x1bWUgYWNjb3JkaW5nIHRvIHRoZSBjYW1lcmEgY2VudGVyIGluIHRoZSBmdXR1cmUuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgU291bmRFbWl0dGVyIGV4dGVuZHMgRW50aXR5IHtcclxuICAgIHByaXZhdGUgc291bmQ6IFNvdW5kO1xyXG4gICAgcHJpdmF0ZSBtYXhWb2x1bWU6IG51bWJlcjtcclxuICAgIHByaXZhdGUgaW50ZW5zaXR5OiBudW1iZXI7XHJcblxyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHNjZW5lOiBHYW1lU2NlbmUsIHg6IG51bWJlciwgeTogbnVtYmVyLCBzb3VuZDogU291bmQsIG1heFZvbHVtZTogbnVtYmVyLCBpbnRlbnNpdHk6IG51bWJlclxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoc2NlbmUsIHgsIHksIDEsIDEpO1xyXG5cclxuICAgICAgICB0aGlzLnNvdW5kID0gc291bmQ7XHJcbiAgICAgICAgdGhpcy5tYXhWb2x1bWUgPSBtYXhWb2x1bWU7XHJcbiAgICAgICAgdGhpcy5pbnRlbnNpdHkgPSBpbnRlbnNpdHk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRyYXcoKTogdm9pZCB7fVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGUoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgdm9sID0gdGhpcy5zY2VuZS5wYXVzZWQgPyAwIDogY2FsY3VsYXRlVm9sdW1lKFxyXG4gICAgICAgICAgICB0aGlzLmRpc3RhbmNlVG9QbGF5ZXIsIHRoaXMubWF4Vm9sdW1lLCB0aGlzLmludGVuc2l0eVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmICh2b2wpIHtcclxuICAgICAgICAgICAgdGhpcy5zb3VuZC5zZXRWb2x1bWUodm9sKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5zb3VuZC5pc1BsYXlpbmcoKSkgdGhpcy5zb3VuZC5wbGF5KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zb3VuZC5zdG9wKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUdhbWVPYmplY3RJbmZvKFxyXG4gICAgICAgIHNjZW5lOiBHYW1lU2NlbmUsIGdhbWVPYmplY3RJbmZvOiBHYW1lT2JqZWN0SW5mb1xyXG4gICAgKTogU291bmRFbWl0dGVyIHtcclxuICAgICAgICBjb25zdCBzb3VuZElkID0gZ2FtZU9iamVjdEluZm8ucHJvcGVydGllcy5zb3VuZDtcclxuICAgICAgICBjb25zdCB2b2x1bWUgPSBnYW1lT2JqZWN0SW5mby5wcm9wZXJ0aWVzLnZvbHVtZSB8fCAxO1xyXG4gICAgICAgIGNvbnN0IGludGVuc2l0eSA9IGdhbWVPYmplY3RJbmZvLnByb3BlcnRpZXMuaW50ZW5zaXR5IHx8IDE7XHJcblxyXG4gICAgICAgIGlmIChzb3VuZElkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNvdW5kID0gc2NlbmUuYW1iaWVudFNvdW5kc1tzb3VuZElkIGFzIEFtYmllbnRTb3VuZElkXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTb3VuZEVtaXR0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgc2NlbmUsIGdhbWVPYmplY3RJbmZvLngsIGdhbWVPYmplY3RJbmZvLnksIHNvdW5kLCB2b2x1bWUsIGludGVuc2l0eVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICAgICAgICBgQ2Fubm90IGNyZWF0ZSBzb3VuZCBlbWl0dGVyIGJlY2F1c2UgJyR7c291bmRJZH0nIGlzIG5vdCBhIHZhbGlkIGFtYmllbnQgc291bmQgSUQuYFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjcmVhdGUgc291bmQgZW1pdHRlciBiZWNhdXNlICdzb3VuZCcgcHJvcGVydHkgaXMgZW1wdHkuXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7OztBQUNBO0FBQ0E7QUFJQTs7O0FBR0E7QUFDQTtBQUtBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXREQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/SoundEmitter.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/SpeechBubble.js":
|
|
/*!*****************************!*\
|
|
!*** ./lib/SpeechBubble.js ***!
|
|
\*****************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SpeechBubble = exports.roundRect = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Assets_1 = __webpack_require__(/*! ./Assets */ \"./lib/Assets.js\");\nconst BitmapFont_1 = __webpack_require__(/*! ./BitmapFont */ \"./lib/BitmapFont.js\");\nconst Conversation_1 = __webpack_require__(/*! ./Conversation */ \"./lib/Conversation.js\");\nconst constants_1 = __webpack_require__(/*! ./constants */ \"./lib/constants.js\");\nconst Renderer_1 = __webpack_require__(/*! ./Renderer */ \"./lib/Renderer.js\");\nconst util_1 = __webpack_require__(/*! ./util */ \"./lib/util.js\");\nfunction roundRect(ctx, x, y, w, h, r, up = false, tipOffset = 0) {\n const halfWidth = w / 2;\n const halfHeight = h / 2;\n const middlePos = x + halfWidth;\n const rightPos = x + w;\n const bottomPos = y + h;\n if (w < 2 * r) {\n r = halfWidth;\n }\n if (h < 2 * r) {\n r = halfHeight;\n }\n ctx.beginPath();\n ctx.moveTo(x + r, y);\n if (up) {\n ctx.lineTo(middlePos - 4, y);\n ctx.lineTo(middlePos, y - 4);\n ctx.lineTo(middlePos + 4, y);\n }\n ctx.arcTo(rightPos, y, rightPos, bottomPos, r);\n ctx.arcTo(rightPos, bottomPos, x, bottomPos, r);\n if (!up) {\n ctx.lineTo(middlePos - 4 + tipOffset, bottomPos);\n ctx.lineTo(middlePos + tipOffset, bottomPos + 4);\n ctx.lineTo(middlePos + 4 + tipOffset, bottomPos);\n }\n ctx.arcTo(x, bottomPos, x, y, r);\n ctx.arcTo(x, y, rightPos, y, r);\n ctx.closePath();\n return ctx;\n}\nexports.roundRect = roundRect;\nclass SpeechBubble {\n constructor(scene, anchorX, anchorY, lineHeightFactor = 1, paddingTop = 3, paddingBottom = 4, paddingLeft = 7, paddingRight = 7, color = \"white\", relativeToScreen = false) {\n this.scene = scene;\n this.anchorX = anchorX;\n this.anchorY = anchorY;\n this.lineHeightFactor = lineHeightFactor;\n this.paddingTop = paddingTop;\n this.paddingBottom = paddingBottom;\n this.paddingLeft = paddingLeft;\n this.paddingRight = paddingRight;\n this.color = color;\n this.relativeToScreen = relativeToScreen;\n this.messageLines = [];\n this.options = [];\n this.selectedOptionIndex = -1;\n this.fontSize = SpeechBubble.font.charHeight;\n this.lineHeight = this.fontSize;\n this.height = 0;\n this.offset = { x: 0, y: 40 };\n this.messageVelocity = 20;\n this.isCurrentlyWriting = false;\n this.preventUnwantedSelection = false;\n this.isVisible = false;\n this.content = [];\n this.longestLine = 0;\n this.partnersBubble = null;\n this.x = Math.round(anchorX + this.offset.x);\n this.y = Math.round(anchorY + this.offset.y);\n this.lineHeight = Math.round(this.fontSize * this.lineHeightFactor);\n this.paddingHorizontal = this.paddingLeft + this.paddingRight;\n this.paddingVertical = this.paddingTop + this.paddingBottom;\n }\n show() {\n this.isVisible = true;\n }\n hide() {\n this.isVisible = false;\n }\n hasContent() {\n return this.content.length > 0 &&\n (!this.partnersBubble || !this.partnersBubble.isCurrentlyWriting && this.selectedOptionIndex > -1);\n }\n setMessage(message) {\n return tslib_1.__awaiter(this, void 0, void 0, function* () {\n this.messageLines = [\"\"];\n this.isCurrentlyWriting = true;\n this.longestLine = this.determineMaxLineLength(message.split(\"\\n\"));\n let index = 0;\n for (const char of message) {\n if (!char) {\n index++;\n continue;\n }\n if (char === \"\\n\") {\n index++;\n this.messageLines.push(\"\");\n continue;\n }\n this.messageLines[index] += char;\n if (this.isCurrentlyWriting) {\n yield util_1.sleep(this.messageVelocity);\n }\n this.updateContent();\n }\n this.preventUnwantedSelection = true;\n this.updateContent();\n this.isCurrentlyWriting = false;\n setTimeout(() => {\n this.preventUnwantedSelection = false;\n }, 300);\n });\n }\n setOptions(options, partnersBubble) {\n this.partnersBubble = partnersBubble;\n this.options = options;\n this.selectedOptionIndex = this.options.length > 0 ? 0 : -1;\n this.updateContent();\n this.longestLine = this.determineMaxLineLength(this.messageLines);\n }\n updateContent() {\n this.content = this.messageLines.concat(this.options);\n this.height = (this.content.length - 1) * this.lineHeight + this.fontSize + this.paddingVertical;\n }\n draw(ctx) {\n if (!this.isVisible\n || !this.hasContent()\n || !this.scene.camera.isOnTarget()\n || !this.scene.isActive()) {\n return;\n }\n let posX = this.x;\n let posY = this.y;\n let offsetX = 0;\n if (this.relativeToScreen) {\n posX = Math.round(ctx.canvas.width / 2);\n posY = Math.round(-ctx.canvas.height * 0.63 - this.height);\n }\n else {\n // Check if Speech Bubble clips the viewport and correct position\n const visibleRect = this.scene.camera.getVisibleRect();\n const relativeX = posX - visibleRect.x;\n const clipAmount = Math.max((this.longestLine / 2) + relativeX - constants_1.GAME_CANVAS_WIDTH, 0)\n || Math.min(relativeX - (this.longestLine / 2), 0);\n if (clipAmount !== 0) {\n offsetX = clipAmount + (10 * Math.sign(clipAmount));\n }\n }\n posX -= offsetX;\n const bubbleXPos = posX - Math.round(this.longestLine / 2) - this.paddingLeft;\n const bubbleYPos = -posY - this.height;\n this.scene.renderer.add({\n type: Renderer_1.RenderingType.SPEECH_BUBBLE,\n layer: Renderer_1.RenderingLayer.UI,\n fillColor: this.color,\n position: {\n x: bubbleXPos,\n y: bubbleYPos\n },\n dimension: {\n width: this.longestLine + this.paddingHorizontal,\n height: this.height\n },\n radius: 5,\n relativeToScreen: this.relativeToScreen,\n offsetX\n });\n const textXPos = bubbleXPos + this.paddingLeft;\n const textColor = \"black\";\n for (let i = 0; i < this.messageLines.length; i++) {\n const textYPos = Math.round(bubbleYPos + this.paddingTop + i * this.lineHeight);\n this.scene.renderer.add({\n type: Renderer_1.RenderingType.TEXT,\n layer: Renderer_1.RenderingLayer.UI,\n text: this.messageLines[i],\n textColor: textColor,\n relativeToScreen: this.relativeToScreen,\n position: {\n x: textXPos,\n y: textYPos\n },\n asset: SpeechBubble.font,\n });\n }\n for (let i = 0; i < this.options.length; i++) {\n const isSelected = this.selectedOptionIndex === i;\n const textYPos = Math.round(bubbleYPos + this.paddingTop + i * this.lineHeight);\n if (isSelected) {\n this.scene.renderer.add({\n type: Renderer_1.RenderingType.TEXT,\n layer: Renderer_1.RenderingLayer.UI,\n text: Conversation_1.ConversationLine.OPTION_MARKER,\n textColor: textColor,\n relativeToScreen: this.relativeToScreen,\n position: {\n x: textXPos,\n y: textYPos\n },\n asset: SpeechBubble.font\n });\n }\n this.scene.renderer.add({\n type: Renderer_1.RenderingType.TEXT,\n layer: Renderer_1.RenderingLayer.UI,\n text: this.options[i],\n textColor: textColor,\n relativeToScreen: this.relativeToScreen,\n position: {\n x: textXPos + SpeechBubble.OPTION_BUBBLE_INDENTATION,\n y: textYPos\n },\n asset: SpeechBubble.font\n });\n }\n }\n update(anchorX, anchorY) {\n this.x = Math.round(anchorX + this.offset.x);\n this.y = Math.round(anchorY + this.offset.y);\n }\n determineMaxLineLength(message) {\n let lineLengths = message.map(line => SpeechBubble.font.measureText(line).width);\n lineLengths = lineLengths.concat(this.options.map(line => SpeechBubble.font.measureText(line).width + SpeechBubble.OPTION_BUBBLE_INDENTATION));\n return Math.max(...lineLengths);\n }\n}\nSpeechBubble.OPTION_BUBBLE_INDENTATION = 11;\ntslib_1.__decorate([\n Assets_1.asset(constants_1.DIALOG_FONT),\n tslib_1.__metadata(\"design:type\", BitmapFont_1.BitmapFont)\n], SpeechBubble, \"font\", void 0);\nexports.SpeechBubble = SpeechBubble;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvU3BlZWNoQnViYmxlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL1NwZWVjaEJ1YmJsZS50cz81ZDkwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFzc2V0IH0gZnJvbSBcIi4vQXNzZXRzXCI7XHJcbmltcG9ydCB7IEJpdG1hcEZvbnQgfSBmcm9tIFwiLi9CaXRtYXBGb250XCI7XHJcbmltcG9ydCB7IENvbnZlcnNhdGlvbkxpbmUgfSBmcm9tIFwiLi9Db252ZXJzYXRpb25cIjtcclxuaW1wb3J0IHsgRElBTE9HX0ZPTlQsIEdBTUVfQ0FOVkFTX1dJRFRIIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IEdhbWVTY2VuZSB9IGZyb20gXCIuL3NjZW5lcy9HYW1lU2NlbmVcIjtcclxuaW1wb3J0IHsgUmVuZGVyaW5nTGF5ZXIsIFJlbmRlcmluZ1R5cGUgfSBmcm9tIFwiLi9SZW5kZXJlclwiO1xyXG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gXCIuL3V0aWxcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByb3VuZFJlY3QoXHJcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgeDogbnVtYmVyLCB5OiBudW1iZXIsIHc6IG51bWJlciwgaDogbnVtYmVyLCByOiBudW1iZXIsXHJcbiAgICB1cCA9IGZhbHNlLCB0aXBPZmZzZXQgPSAwXHJcbik6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB7XHJcbiAgICBjb25zdCBoYWxmV2lkdGggPSB3IC8gMjtcclxuICAgIGNvbnN0IGhhbGZIZWlnaHQgPSBoIC8gMjtcclxuICAgIGNvbnN0IG1pZGRsZVBvcyA9IHggKyBoYWxmV2lkdGg7XHJcbiAgICBjb25zdCByaWdodFBvcyA9IHggKyB3O1xyXG4gICAgY29uc3QgYm90dG9tUG9zID0geSArIGg7XHJcblxyXG4gICAgaWYgKHcgPCAyICogcikgeyByID0gaGFsZldpZHRoOyB9XHJcbiAgICBpZiAoaCA8IDIgKiByKSB7IHIgPSBoYWxmSGVpZ2h0OyB9XHJcblxyXG4gICAgY3R4LmJlZ2luUGF0aCgpO1xyXG4gICAgY3R4Lm1vdmVUbyh4ICsgciwgeSk7XHJcblxyXG4gICAgaWYgKHVwKSB7XHJcbiAgICAgICAgY3R4LmxpbmVUbyhtaWRkbGVQb3MgLSA0LCB5KTtcclxuICAgICAgICBjdHgubGluZVRvKG1pZGRsZVBvcywgeSAtIDQpO1xyXG4gICAgICAgIGN0eC5saW5lVG8obWlkZGxlUG9zICsgNCwgeSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3R4LmFyY1RvKHJpZ2h0UG9zLCB5LCByaWdodFBvcywgYm90dG9tUG9zLCByKTtcclxuICAgIGN0eC5hcmNUbyhyaWdodFBvcywgYm90dG9tUG9zLCB4LCBib3R0b21Qb3MsIHIpO1xyXG5cclxuICAgIGlmICghdXApIHtcclxuICAgICAgICBjdHgubGluZVRvKG1pZGRsZVBvcyAtIDQgKyB0aXBPZmZzZXQsIGJvdHRvbVBvcyk7XHJcbiAgICAgICAgY3R4LmxpbmVUbyhtaWRkbGVQb3MgKyB0aXBPZmZzZXQsIGJvdHRvbVBvcyArIDQpO1xyXG4gICAgICAgIGN0eC5saW5lVG8obWlkZGxlUG9zICsgNCArIHRpcE9mZnNldCwgYm90dG9tUG9zKTtcclxuICAgIH1cclxuXHJcbiAgICBjdHguYXJjVG8oeCwgYm90dG9tUG9zLCB4LCB5LCByKTtcclxuICAgIGN0eC5hcmNUbyh4LCB5LCByaWdodFBvcywgeSwgcik7XHJcbiAgICBjdHguY2xvc2VQYXRoKCk7XHJcblxyXG4gICAgcmV0dXJuIGN0eDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNwZWVjaEJ1YmJsZSB7XHJcbiAgICBAYXNzZXQoRElBTE9HX0ZPTlQpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBmb250OiBCaXRtYXBGb250O1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgT1BUSU9OX0JVQkJMRV9JTkRFTlRBVElPTiA9IDExO1xyXG5cclxuICAgIHByaXZhdGUgbWVzc2FnZUxpbmVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBvcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgcHVibGljIHNlbGVjdGVkT3B0aW9uSW5kZXggPSAtMTtcclxuICAgIHByaXZhdGUgZm9udFNpemUgPSBTcGVlY2hCdWJibGUuZm9udC5jaGFySGVpZ2h0O1xyXG4gICAgcHJpdmF0ZSBsaW5lSGVpZ2h0ID0gdGhpcy5mb250U2l6ZTtcclxuICAgIHByaXZhdGUgaGVpZ2h0ID0gMDtcclxuICAgIHByaXZhdGUgb2Zmc2V0ID0geyB4OiAwLCB5OiA0MCB9O1xyXG4gICAgcHJpdmF0ZSBtZXNzYWdlVmVsb2NpdHkgPSAyMDtcclxuXHJcbiAgICBwcml2YXRlIHg6IG51bWJlcjtcclxuICAgIHByaXZhdGUgeTogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBwYWRkaW5nSG9yaXpvbnRhbDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBwYWRkaW5nVmVydGljYWw6IG51bWJlcjtcclxuICAgIHB1YmxpYyBpc0N1cnJlbnRseVdyaXRpbmcgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBwcmV2ZW50VW53YW50ZWRTZWxlY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgICBwcml2YXRlIGlzVmlzaWJsZSA9IGZhbHNlO1xyXG5cclxuICAgIHByaXZhdGUgY29udGVudDogc3RyaW5nIFtdID0gW107XHJcbiAgICBwcml2YXRlIGxvbmdlc3RMaW5lOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIHByaXZhdGUgcGFydG5lcnNCdWJibGU6IFNwZWVjaEJ1YmJsZSB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgc2NlbmU6IEdhbWVTY2VuZSxcclxuICAgICAgICBwdWJsaWMgYW5jaG9yWDogbnVtYmVyLFxyXG4gICAgICAgIHB1YmxpYyBhbmNob3JZOiBudW1iZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBsaW5lSGVpZ2h0RmFjdG9yID0gMSxcclxuICAgICAgICBwcml2YXRlIHBhZGRpbmdUb3AgPSAzLFxyXG4gICAgICAgIHByaXZhdGUgcGFkZGluZ0JvdHRvbSA9IDQsXHJcbiAgICAgICAgcHJpdmF0ZSBwYWRkaW5nTGVmdCA9IDcsXHJcbiAgICAgICAgcHJpdmF0ZSBwYWRkaW5nUmlnaHQgPSA3LFxyXG4gICAgICAgIHByaXZhdGUgY29sb3IgPSBcIndoaXRlXCIsXHJcbiAgICAgICAgcHJpdmF0ZSByZWxhdGl2ZVRvU2NyZWVuID0gZmFsc2VcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMueCA9IE1hdGgucm91bmQoYW5jaG9yWCArIHRoaXMub2Zmc2V0LngpO1xyXG4gICAgICAgIHRoaXMueSA9IE1hdGgucm91bmQoYW5jaG9yWSArIHRoaXMub2Zmc2V0LnkpO1xyXG4gICAgICAgIHRoaXMubGluZUhlaWdodCA9IE1hdGgucm91bmQodGhpcy5mb250U2l6ZSAqIHRoaXMubGluZUhlaWdodEZhY3Rvcik7XHJcbiAgICAgICAgdGhpcy5wYWRkaW5nSG9yaXpvbnRhbCA9IHRoaXMucGFkZGluZ0xlZnQgKyB0aGlzLnBhZGRpbmdSaWdodDtcclxuICAgICAgICB0aGlzLnBhZGRpbmdWZXJ0aWNhbCA9IHRoaXMucGFkZGluZ1RvcCArIHRoaXMucGFkZGluZ0JvdHRvbTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvdygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhpZGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc1Zpc2libGUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFzQ29udGVudCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50Lmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgKCF0aGlzLnBhcnRuZXJzQnViYmxlIHx8ICF0aGlzLnBhcnRuZXJzQnViYmxlLmlzQ3VycmVudGx5V3JpdGluZyAmJiB0aGlzLnNlbGVjdGVkT3B0aW9uSW5kZXggPiAtMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHNldE1lc3NhZ2UobWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlTGluZXMgPSBbXCJcIl07XHJcbiAgICAgICAgdGhpcy5pc0N1cnJlbnRseVdyaXRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubG9uZ2VzdExpbmUgPSB0aGlzLmRldGVybWluZU1heExpbmVMZW5ndGgobWVzc2FnZS5zcGxpdChcIlxcblwiKSk7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBjaGFyIG9mIG1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgaWYgKCFjaGFyKSB7XHJcbiAgICAgICAgICAgICAgICBpbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNoYXIgPT09IFwiXFxuXCIpIHtcclxuICAgICAgICAgICAgICAgIGluZGV4Kys7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VMaW5lcy5wdXNoKFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlTGluZXNbaW5kZXhdICs9IGNoYXI7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQ3VycmVudGx5V3JpdGluZykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgc2xlZXAodGhpcy5tZXNzYWdlVmVsb2NpdHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29udGVudCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wcmV2ZW50VW53YW50ZWRTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQ29udGVudCgpO1xyXG4gICAgICAgIHRoaXMuaXNDdXJyZW50bHlXcml0aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZlbnRVbndhbnRlZFNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIH0sIDMwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldE9wdGlvbnMob3B0aW9uczogc3RyaW5nW10sIHBhcnRuZXJzQnViYmxlOiBTcGVlY2hCdWJibGUpIHtcclxuICAgICAgICB0aGlzLnBhcnRuZXJzQnViYmxlID0gcGFydG5lcnNCdWJibGU7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcclxuICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uSW5kZXggPSB0aGlzLm9wdGlvbnMubGVuZ3RoID4gMCA/IDAgOiAtMTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNvbnRlbnQoKTtcclxuICAgICAgICB0aGlzLmxvbmdlc3RMaW5lID0gdGhpcy5kZXRlcm1pbmVNYXhMaW5lTGVuZ3RoKHRoaXMubWVzc2FnZUxpbmVzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUNvbnRlbnQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb250ZW50ID0gdGhpcy5tZXNzYWdlTGluZXMuY29uY2F0KHRoaXMub3B0aW9ucyk7XHJcbiAgICAgICAgdGhpcy5oZWlnaHQgPSAodGhpcy5jb250ZW50Lmxlbmd0aCAtIDEpICogdGhpcy5saW5lSGVpZ2h0ICsgdGhpcy5mb250U2l6ZSArIHRoaXMucGFkZGluZ1ZlcnRpY2FsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkcmF3KGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhdGhpcy5pc1Zpc2libGVcclxuICAgICAgICAgICAgfHwgIXRoaXMuaGFzQ29udGVudCgpXHJcbiAgICAgICAgICAgIHx8ICF0aGlzLnNjZW5lLmNhbWVyYS5pc09uVGFyZ2V0KClcclxuICAgICAgICAgICAgfHwgIXRoaXMuc2NlbmUuaXNBY3RpdmUoKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcG9zWCA9IHRoaXMueDtcclxuICAgICAgICBsZXQgcG9zWSA9IHRoaXMueTtcclxuICAgICAgICBsZXQgb2Zmc2V0WCA9IDA7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJlbGF0aXZlVG9TY3JlZW4pIHtcclxuICAgICAgICAgICAgcG9zWCA9IE1hdGgucm91bmQoY3R4LmNhbnZhcy53aWR0aCAvIDIpO1xyXG4gICAgICAgICAgICBwb3NZID0gTWF0aC5yb3VuZCgtY3R4LmNhbnZhcy5oZWlnaHQgKiAwLjYzIC0gdGhpcy5oZWlnaHQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIFNwZWVjaCBCdWJibGUgY2xpcHMgdGhlIHZpZXdwb3J0IGFuZCBjb3JyZWN0IHBvc2l0aW9uXHJcbiAgICAgICAgICAgIGNvbnN0IHZpc2libGVSZWN0ID0gdGhpcy5zY2VuZS5jYW1lcmEuZ2V0VmlzaWJsZVJlY3QoKTtcclxuICAgICAgICAgICAgY29uc3QgcmVsYXRpdmVYID0gcG9zWCAtIHZpc2libGVSZWN0Lng7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjbGlwQW1vdW50ID0gTWF0aC5tYXgoXHJcbiAgICAgICAgICAgICAgICAodGhpcy5sb25nZXN0TGluZSAvIDIpICsgcmVsYXRpdmVYIC0gR0FNRV9DQU5WQVNfV0lEVEgsIDApXHJcbiAgICAgICAgICAgICAgICB8fCBNYXRoLm1pbihyZWxhdGl2ZVggLSAodGhpcy5sb25nZXN0TGluZSAvIDIpLFxyXG4gICAgICAgICAgICAgICAgMFxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNsaXBBbW91bnQgIT09IDApIHtcclxuICAgICAgICAgICAgICAgIG9mZnNldFggPSBjbGlwQW1vdW50ICsgKDEwICogTWF0aC5zaWduKGNsaXBBbW91bnQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcG9zWCAtPSBvZmZzZXRYO1xyXG5cclxuICAgICAgICBjb25zdCBidWJibGVYUG9zID0gcG9zWCAtIE1hdGgucm91bmQodGhpcy5sb25nZXN0TGluZSAvIDIpIC0gdGhpcy5wYWRkaW5nTGVmdDtcclxuICAgICAgICBjb25zdCBidWJibGVZUG9zID0gLXBvc1kgLSB0aGlzLmhlaWdodDtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZS5yZW5kZXJlci5hZGQoe1xyXG4gICAgICAgICAgICB0eXBlOiBSZW5kZXJpbmdUeXBlLlNQRUVDSF9CVUJCTEUsXHJcbiAgICAgICAgICAgIGxheWVyOiBSZW5kZXJpbmdMYXllci5VSSxcclxuICAgICAgICAgICAgZmlsbENvbG9yOiB0aGlzLmNvbG9yLFxyXG4gICAgICAgICAgICBwb3NpdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgeDogYnViYmxlWFBvcyxcclxuICAgICAgICAgICAgICAgIHk6IGJ1YmJsZVlQb3NcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZGltZW5zaW9uOiB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy5sb25nZXN0TGluZSArIHRoaXMucGFkZGluZ0hvcml6b250YWwsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJhZGl1czogNSxcclxuICAgICAgICAgICAgcmVsYXRpdmVUb1NjcmVlbjogdGhpcy5yZWxhdGl2ZVRvU2NyZWVuLFxyXG4gICAgICAgICAgICBvZmZzZXRYXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHRleHRYUG9zID0gYnViYmxlWFBvcyArIHRoaXMucGFkZGluZ0xlZnQ7XHJcbiAgICAgICAgY29uc3QgdGV4dENvbG9yID0gXCJibGFja1wiO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubWVzc2FnZUxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRleHRZUG9zID0gTWF0aC5yb3VuZChidWJibGVZUG9zICsgdGhpcy5wYWRkaW5nVG9wICsgaSAqIHRoaXMubGluZUhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNjZW5lLnJlbmRlcmVyLmFkZCh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBSZW5kZXJpbmdUeXBlLlRFWFQsXHJcbiAgICAgICAgICAgICAgICBsYXllcjogUmVuZGVyaW5nTGF5ZXIuVUksXHJcbiAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLm1lc3NhZ2VMaW5lc1tpXSxcclxuICAgICAgICAgICAgICAgIHRleHRDb2xvcjogdGV4dENvbG9yLFxyXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVUb1NjcmVlbjogdGhpcy5yZWxhdGl2ZVRvU2NyZWVuLFxyXG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICB4OiB0ZXh0WFBvcyxcclxuICAgICAgICAgICAgICAgICAgICB5OiB0ZXh0WVBvc1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGFzc2V0OiBTcGVlY2hCdWJibGUuZm9udCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub3B0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5zZWxlY3RlZE9wdGlvbkluZGV4ID09PSBpO1xyXG4gICAgICAgICAgICBjb25zdCB0ZXh0WVBvcyA9IE1hdGgucm91bmQoYnViYmxlWVBvcyArIHRoaXMucGFkZGluZ1RvcCArIGkgKiB0aGlzLmxpbmVIZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGlzU2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUucmVuZGVyZXIuYWRkKHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBSZW5kZXJpbmdUeXBlLlRFWFQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXI6IFJlbmRlcmluZ0xheWVyLlVJLFxyXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IENvbnZlcnNhdGlvbkxpbmUuT1BUSU9OX01BUktFUixcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6IHRleHRDb2xvcixcclxuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVRvU2NyZWVuOiB0aGlzLnJlbGF0aXZlVG9TY3JlZW4sXHJcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeDogdGV4dFhQb3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHRleHRZUG9zXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBhc3NldDogU3BlZWNoQnViYmxlLmZvbnRcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNjZW5lLnJlbmRlcmVyLmFkZCh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBSZW5kZXJpbmdUeXBlLlRFWFQsXHJcbiAgICAgICAgICAgICAgICBsYXllcjogUmVuZGVyaW5nTGF5ZXIuVUksXHJcbiAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLm9wdGlvbnNbaV0sXHJcbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I6IHRleHRDb2xvcixcclxuICAgICAgICAgICAgICAgIHJlbGF0aXZlVG9TY3JlZW46IHRoaXMucmVsYXRpdmVUb1NjcmVlbixcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgeDogdGV4dFhQb3MgKyBTcGVlY2hCdWJibGUuT1BUSU9OX0JVQkJMRV9JTkRFTlRBVElPTixcclxuICAgICAgICAgICAgICAgICAgICB5OiB0ZXh0WVBvc1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGFzc2V0OiBTcGVlY2hCdWJibGUuZm9udFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZShhbmNob3JYOiBudW1iZXIsIGFuY2hvclk6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMueCA9IE1hdGgucm91bmQoYW5jaG9yWCArIHRoaXMub2Zmc2V0LngpO1xyXG4gICAgICAgIHRoaXMueSA9IE1hdGgucm91bmQoYW5jaG9yWSArIHRoaXMub2Zmc2V0LnkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZGV0ZXJtaW5lTWF4TGluZUxlbmd0aChtZXNzYWdlOiBzdHJpbmdbXSk6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IGxpbmVMZW5ndGhzID0gbWVzc2FnZS5tYXAoXHJcbiAgICAgICAgICAgIGxpbmUgPT4gU3BlZWNoQnViYmxlLmZvbnQubWVhc3VyZVRleHQobGluZSkud2lkdGhcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBsaW5lTGVuZ3RocyA9IGxpbmVMZW5ndGhzLmNvbmNhdChcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLm1hcChcclxuICAgICAgICAgICAgICAgIGxpbmUgPT4gU3BlZWNoQnViYmxlLmZvbnQubWVhc3VyZVRleHQobGluZSkud2lkdGggKyBTcGVlY2hCdWJibGUuT1BUSU9OX0JVQkJMRV9JTkRFTlRBVElPTlxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KC4uLmxpbmVMZW5ndGhzKTtcclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQXBDQTtBQXNDQTtBQTRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFjQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBSUE7QUFNQTtBQUNBOztBQXBPQTtBQURBO0FBREE7QUFDQTtBQUFBO0FBRkE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/SpeechBubble.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/Transition.js":
|
|
/*!***************************!*\
|
|
!*** ./lib/Transition.js ***!
|
|
\***************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Transition = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst util_1 = __webpack_require__(/*! ./util */ \"./lib/util.js\");\nconst easings_1 = __webpack_require__(/*! ./easings */ \"./lib/easings.js\");\nclass Transition {\n constructor({ duration = 0.5, easing = easings_1.linear } = {}) {\n this.type = \"out\";\n this.elapsed = 0;\n this.resolve = null;\n this.promise = null;\n this.duration = duration;\n this.easing = easing;\n }\n valueOf() {\n const value = this.easing(util_1.clamp(this.elapsed / this.duration, 0, 1));\n return this.type === \"out\" ? value : (1 - value);\n }\n update(dt) {\n if (this.promise != null) {\n this.elapsed += dt;\n if (this.elapsed >= this.duration) {\n this.stop();\n }\n }\n }\n draw(ctx, draw, width, height) { }\n start(type) {\n return tslib_1.__awaiter(this, void 0, void 0, function* () {\n if (this.promise == null) {\n this.type = type;\n this.elapsed = 0;\n this.promise = new Promise(resolve => { this.resolve = resolve; });\n }\n return this.promise;\n });\n }\n stop() {\n if (this.resolve != null) {\n this.resolve();\n this.resolve = null;\n this.promise = null;\n }\n }\n}\nexports.Transition = Transition;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvVHJhbnNpdGlvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9UcmFuc2l0aW9uLnRzPzAwYzMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2xhbXAgfSBmcm9tIFwiLi91dGlsXCI7XHJcbmltcG9ydCB7IEVhc2luZywgbGluZWFyIH0gZnJvbSBcIi4vZWFzaW5nc1wiO1xyXG5cclxuZXhwb3J0IHR5cGUgVHJhbnNpdGlvblR5cGUgPSBcImluXCIgfCBcIm91dFwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2l0aW9uT3B0aW9ucyB7XHJcbiAgICBkdXJhdGlvbj86IG51bWJlcjtcclxuICAgIHJldmVyc2U/OiBib29sZWFuO1xyXG4gICAgZWFzaW5nPzogRWFzaW5nO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVHJhbnNpdGlvbiB7XHJcbiAgICBwcml2YXRlIHR5cGU6IFRyYW5zaXRpb25UeXBlID0gXCJvdXRcIjtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZHVyYXRpb246IG51bWJlcjtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWFzaW5nOiBFYXNpbmc7XHJcbiAgICBwcml2YXRlIGVsYXBzZWQ6IG51bWJlciA9IDA7XHJcbiAgICBwcml2YXRlIHJlc29sdmU6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBwcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHsgZHVyYXRpb24gPSAwLjUsIGVhc2luZyA9IGxpbmVhciB9OiBUcmFuc2l0aW9uT3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5kdXJhdGlvbiA9IGR1cmF0aW9uO1xyXG4gICAgICAgIHRoaXMuZWFzaW5nID0gZWFzaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2YWx1ZU9mKCk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmVhc2luZyhjbGFtcCh0aGlzLmVsYXBzZWQgLyB0aGlzLmR1cmF0aW9uLCAwLCAxKSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gXCJvdXRcIiA/IHZhbHVlIDogICgxIC0gdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGUoZHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnByb21pc2UgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmVsYXBzZWQgKz0gZHQ7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVsYXBzZWQgPj0gdGhpcy5kdXJhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRyYXcoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIGRyYXc6ICgpID0+IHZvaWQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7fVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBzdGFydCh0eXBlOiBUcmFuc2l0aW9uVHlwZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGlmICh0aGlzLnByb21pc2UgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xyXG4gICAgICAgICAgICB0aGlzLmVsYXBzZWQgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsgdGhpcy5yZXNvbHZlID0gcmVzb2x2ZTsgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0b3AoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVzb2x2ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnJlc29sdmUgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnByb21pc2UgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBVUE7QUFRQTtBQVBBO0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTdDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/Transition.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/World.js":
|
|
/*!**********************!*\
|
|
!*** ./lib/World.js ***!
|
|
\**********************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.World = exports.validEnvironments = exports.Environment = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Assets_1 = __webpack_require__(/*! ./Assets */ \"./lib/Assets.js\");\nconst Entity_1 = __webpack_require__(/*! ./Entity */ \"./lib/Entity.js\");\nconst util_1 = __webpack_require__(/*! ./util */ \"./lib/util.js\");\nconst GameScene_1 = __webpack_require__(/*! ./scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst graphics_1 = __webpack_require__(/*! ./graphics */ \"./lib/graphics.js\");\nconst Particles_1 = __webpack_require__(/*! ./Particles */ \"./lib/Particles.js\");\nconst Renderer_1 = __webpack_require__(/*! ./Renderer */ \"./lib/Renderer.js\");\nconst constants_1 = __webpack_require__(/*! ./constants */ \"./lib/constants.js\");\nvar Environment;\n(function (Environment) {\n Environment[Environment[\"AIR\"] = 0] = \"AIR\";\n Environment[Environment[\"SOLID\"] = 4278190080] = \"SOLID\";\n Environment[Environment[\"PLATFORM\"] = 4286545791] = \"PLATFORM\";\n Environment[Environment[\"BOUNCE\"] = 4294901760] = \"BOUNCE\";\n Environment[Environment[\"WATER\"] = 4278190335] = \"WATER\";\n Environment[Environment[\"SOIL\"] = 4294967040] = \"SOIL\";\n Environment[Environment[\"RAINCLOUD\"] = 4278255360] = \"RAINCLOUD\";\n})(Environment = exports.Environment || (exports.Environment = {}));\nexports.validEnvironments = Object.values(Environment);\nclass World {\n constructor(scene) {\n this.raining = false;\n this.scene = scene;\n const rainSpawnPosition = this.scene.pointsOfInterest.find(o => o.name === \"rain_spawn_position\");\n if (!rainSpawnPosition) {\n throw new Error(\"Missing 'rain_spawn_position' point in map data to place rain emitter\");\n }\n this.rainEmitter = this.scene.particles.createEmitter({\n position: { x: rainSpawnPosition.x, y: rainSpawnPosition.y },\n offset: () => ({ x: util_1.rnd(-1, 1) * 26, y: util_1.rnd(-1, 1) * 5 }),\n velocity: () => ({ x: util_1.rnd(-1, 1) * 5, y: -util_1.rnd(50, 80) }),\n color: () => World.raindrop,\n size: 4,\n gravity: { x: 0, y: -100 },\n lifetime: () => 3,\n alpha: 0.6,\n alphaCurve: Particles_1.valueCurves.linear.invert()\n });\n }\n getWidth() {\n return World.foreground.width;\n }\n getHeight() {\n return World.foreground.height;\n }\n update() {\n if (this.raining) {\n this.rainEmitter.emit(util_1.rndInt(1, 4));\n }\n }\n draw(ctx, width, height) {\n const camX = this.scene.camera.x;\n const camY = this.scene.camera.y;\n const posXMultiplier = 1 - (camX / this.getWidth() * 2);\n let alpha = 1;\n if (this.scene.pettingCutscene) {\n alpha = Math.max(0, 1 - (this.scene.pettingCutsceneTime / constants_1.PETTING_ENDING_CUTSCENE_DURATION));\n }\n if (this.scene.windowCutscene) {\n alpha = Math.max(0, 1 - (this.scene.windowCutsceneTime / (constants_1.WINDOW_ENDING_CUTSCENE_DURATION / 1.5)));\n }\n this.scene.renderer.add({\n type: Renderer_1.RenderingType.DRAW_IMAGE,\n layer: Renderer_1.RenderingLayer.TILEMAP_MAP,\n translation: { x: camX, y: -camY },\n position: { x: -camX, y: -this.getHeight() + camY },\n asset: World.foreground,\n alpha: alpha\n });\n for (const background of World.backgrounds) {\n const bgX = this.getWidth() / background.width;\n const bgY = this.getHeight() / background.height;\n this.scene.renderer.add({\n type: Renderer_1.RenderingType.DRAW_IMAGE,\n layer: Renderer_1.RenderingLayer.TILEMAP_BACKGROUND,\n translation: { x: camX, y: -camY },\n position: {\n x: (-camX / bgX) + (-posXMultiplier * (width / 2)),\n y: (-this.getHeight() + camY) / bgY\n },\n asset: background,\n alpha: alpha\n });\n }\n }\n getEnvironment(x, y) {\n const index = (this.getHeight() - 1 - Math.round(y)) * this.getWidth() + Math.round(x);\n if (index < 0 || index >= World.collisionMap.length) {\n return Environment.AIR;\n }\n return World.collisionMap[index];\n }\n /**\n * Checks if the given position collides with the world.\n *\n * @param x - X position within the world.\n * @param y - Y position within the world.\n * @return 0 if no collision. Anything else is a specific collision type (actually an RGBA color\n * which has specific meaning which isn't defined yet).\n */\n collidesWith(x, y, ignoreObjects = [], ignore = []) {\n for (const gameObject of this.scene.gameObjects) {\n if (gameObject !== this\n && !ignoreObjects.includes(gameObject)\n && GameScene_1.isCollidableGameObject(gameObject)) {\n const environment = gameObject.collidesWith(x, y);\n if (environment !== Environment.AIR && !ignore.includes(environment)) {\n return environment;\n }\n }\n }\n const index = (this.getHeight() - 1 - Math.round(y)) * this.getWidth() + Math.round(x);\n if (index < 0 || index >= World.collisionMap.length) {\n return 0;\n }\n const environment = this.getEnvironment(x, y);\n if (!exports.validEnvironments.includes(environment)\n || (ignore && ignore.includes(environment))) {\n return Environment.AIR;\n }\n return World.collisionMap[index];\n }\n /**\n * Checks if a specific entity (`sourceEntity`) collides with either of of the entities in the\n * gameObjects array of the GameScene and returns all entities that currently collide.\n * `Particles` are taken out of this check automatically.\n *\n * @param sourceEntity - The entity to be checked against the other entities\n * @param margin - Optional margin added to the bounding boxes of the entities to\n * extend collision radius\n * @param ignoreEntities - Array of entities to be ignored with this check\n * @return - An array containing all entities that collide with the source\n * entity.\n */\n getEntityCollisions(sourceEntity, margin = 0, ignoreEntities = []) {\n const collidesWith = [];\n for (const gameObject of this.scene.gameObjects) {\n if (gameObject !== sourceEntity\n && !(gameObject instanceof Particles_1.Particles)\n && gameObject instanceof Entity_1.Entity\n && gameObject.isTrigger\n && !ignoreEntities.includes(gameObject)) {\n const colliding = this.boundingBoxesCollide(sourceEntity.getBounds(margin), gameObject.getBounds(margin));\n if (colliding) {\n collidesWith.push(gameObject);\n }\n }\n }\n return collidesWith;\n }\n /**\n * Returns all triggers that do collide with the provided entity\n * @param sourceEntity Entity to check collisions against trigger boxes\n */\n getTriggerCollisions(sourceEntity) {\n const collidesWith = [];\n for (const triggerObject of this.scene.triggerObjects) {\n const colliding = this.boundingBoxesCollide(sourceEntity.getBounds(), util_1.boundsFromMapObject(triggerObject));\n if (colliding) {\n collidesWith.push(triggerObject);\n }\n }\n return collidesWith;\n }\n getGateCollisions(sourceEntity) {\n const collidesWith = [];\n for (const gateObject of this.scene.gateObjects) {\n const colliding = this.boundingBoxesCollide(sourceEntity.getBounds(), util_1.boundsFromMapObject(gateObject, 0));\n if (colliding && !gateObject.properties.disabled) {\n collidesWith.push(gateObject);\n }\n }\n return collidesWith;\n }\n getCameraBounds(sourceEntity) {\n const collidesWith = [];\n for (const triggerObject of this.scene.boundObjects) {\n const colliding = this.boundingBoxesCollide(sourceEntity.getBounds(), util_1.boundsFromMapObject(triggerObject));\n if (colliding) {\n collidesWith.push(triggerObject);\n }\n }\n return collidesWith;\n }\n /**\n * Checks if the two provided bounding boxes are touching each other\n * @param box1 first bounding box\n * @param box2 second bounding box\n * @return `true` when the bounding boxes are touching, `false` if not.\n */\n boundingBoxesCollide(box1, box2) {\n return !(((box1.y - box1.height) > (box2.y)) ||\n (box1.y < (box2.y - box2.height)) ||\n ((box1.x + box1.width) < box2.x) ||\n (box1.x > (box2.x + box2.width)));\n }\n getObjectAt(x, y, ignoreObjects = [], ignore = []) {\n for (const gameObject of this.scene.gameObjects) {\n if (gameObject !== this\n && !ignoreObjects.includes(gameObject)\n && GameScene_1.isCollidableGameObject(gameObject)) {\n const environment = gameObject.collidesWith(x, y);\n if (environment !== Environment.AIR && !ignore.includes(environment)) {\n return gameObject;\n }\n }\n }\n return null;\n }\n /**\n * Check collision of a vertical line with the world.\n *\n * @param x - X position within the world.\n * @param y - Y start position of the line in the world.\n * @param height - The height of the line to check\n * @return 0 if no collision. Type of first collision along the line otherwise.\n */\n collidesWithVerticalLine(x, y, height, ignoreObjects, ignore) {\n for (let i = 0; i < height; i++) {\n const collision = this.collidesWith(x, y - i, ignoreObjects, ignore);\n if (collision) {\n return collision;\n }\n }\n return 0;\n }\n /**\n * Returns the Y coordinate of the ground below the given world coordinate.\n *\n * @param x - X coordinate of current position.\n * @param y - Y coordinate of current position.\n * @return The Y coordinate of the ground below the given coordinate.\n */\n getGround(x, y, ignoreObjects, ignore) {\n while (y > 0 && !this.collidesWith(x, y, ignoreObjects, ignore)) {\n y--;\n }\n return y;\n }\n startRain() {\n this.raining = true;\n }\n stopRain() {\n this.raining = false;\n }\n isRaining() {\n return this.raining;\n }\n}\ntslib_1.__decorate([\n Assets_1.asset(\"maps/level.png\"),\n tslib_1.__metadata(\"design:type\", HTMLImageElement)\n], World, \"foreground\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"maps/level_collision.png\", {\n map: (image) => new Uint32Array(graphics_1.getImageData(image).data.buffer)\n }),\n tslib_1.__metadata(\"design:type\", Uint32Array)\n], World, \"collisionMap\", void 0);\ntslib_1.__decorate([\n Assets_1.asset([\n \"maps/bg.png\",\n \"maps/bg2.png\",\n \"maps/bg3.png\"\n ]),\n tslib_1.__metadata(\"design:type\", Array)\n], World, \"backgrounds\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/raindrop.png\"),\n tslib_1.__metadata(\"design:type\", HTMLImageElement)\n], World, \"raindrop\", void 0);\nexports.World = World;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvV29ybGQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvV29ybGQudHM/Y2MwYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc3NldCB9IGZyb20gXCIuL0Fzc2V0c1wiO1xyXG5pbXBvcnQgeyBCb3VuZHMsIEVudGl0eSB9IGZyb20gXCIuL0VudGl0eVwiO1xyXG5pbXBvcnQgeyBib3VuZHNGcm9tTWFwT2JqZWN0LCBybmQsIHJuZEludCB9IGZyb20gXCIuL3V0aWxcIjtcclxuaW1wb3J0IHsgR2FtZU9iamVjdCwgR2FtZVNjZW5lLCBpc0NvbGxpZGFibGVHYW1lT2JqZWN0IH0gZnJvbSBcIi4vc2NlbmVzL0dhbWVTY2VuZVwiO1xyXG5pbXBvcnQgeyBHYW1lT2JqZWN0SW5mbyB9IGZyb20gXCIuL01hcEluZm9cIjtcclxuaW1wb3J0IHsgZ2V0SW1hZ2VEYXRhIH0gZnJvbSBcIi4vZ3JhcGhpY3NcIjtcclxuaW1wb3J0IHsgUGFydGljbGVFbWl0dGVyLCBQYXJ0aWNsZXMsIHZhbHVlQ3VydmVzIH0gZnJvbSBcIi4vUGFydGljbGVzXCI7XHJcbmltcG9ydCB7IFJlbmRlcmluZ0xheWVyLCBSZW5kZXJpbmdUeXBlIH0gZnJvbSBcIi4vUmVuZGVyZXJcIjtcclxuaW1wb3J0IHsgUEVUVElOR19FTkRJTkdfQ1VUU0NFTkVfRFVSQVRJT04sIFdJTkRPV19FTkRJTkdfQ1VUU0NFTkVfRFVSQVRJT04gfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcclxuXHJcbmV4cG9ydCBlbnVtIEVudmlyb25tZW50IHtcclxuICAgIEFJUiA9IDAsXHJcbiAgICBTT0xJRCA9IDB4ZmYwMDAwMDAsXHJcbiAgICBQTEFURk9STSA9IDB4ZmY3ZjdmN2YsXHJcbiAgICBCT1VOQ0UgPSAweGZmZmYwMDAwLFxyXG4gICAgV0FURVIgPSAweGZmMDAwMGZmLFxyXG4gICAgU09JTCA9IDB4ZmZmZmZmMDAsXHJcbiAgICBSQUlOQ0xPVUQgPSAweGZmMDBmZjAwXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCB2YWxpZEVudmlyb25tZW50cyA9IE9iamVjdC52YWx1ZXMoRW52aXJvbm1lbnQpO1xyXG5cclxuZXhwb3J0IGNsYXNzIFdvcmxkIGltcGxlbWVudHMgR2FtZU9iamVjdCB7XHJcbiAgICBAYXNzZXQoXCJtYXBzL2xldmVsLnBuZ1wiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgZm9yZWdyb3VuZDogSFRNTEltYWdlRWxlbWVudDtcclxuXHJcbiAgICBAYXNzZXQoXCJtYXBzL2xldmVsX2NvbGxpc2lvbi5wbmdcIiwge1xyXG4gICAgICAgIG1hcDogKGltYWdlOiBIVE1MSW1hZ2VFbGVtZW50KSA9PiBuZXcgVWludDMyQXJyYXkoZ2V0SW1hZ2VEYXRhKGltYWdlKS5kYXRhLmJ1ZmZlcilcclxuICAgIH0pXHJcbiAgICBwcml2YXRlIHN0YXRpYyBjb2xsaXNpb25NYXA6IFVpbnQzMkFycmF5O1xyXG5cclxuICAgIEBhc3NldChbXHJcbiAgICAgICAgXCJtYXBzL2JnLnBuZ1wiLFxyXG4gICAgICAgIFwibWFwcy9iZzIucG5nXCIsXHJcbiAgICAgICAgXCJtYXBzL2JnMy5wbmdcIlxyXG4gICAgXSlcclxuICAgIHByaXZhdGUgc3RhdGljIGJhY2tncm91bmRzOiBIVE1MSW1hZ2VFbGVtZW50W107XHJcblxyXG4gICAgcHJpdmF0ZSBzY2VuZTogR2FtZVNjZW5lO1xyXG5cclxuICAgIEBhc3NldChcInNwcml0ZXMvcmFpbmRyb3AucG5nXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyByYWluZHJvcDogSFRNTEltYWdlRWxlbWVudDtcclxuICAgIHByaXZhdGUgcmFpbkVtaXR0ZXI6IFBhcnRpY2xlRW1pdHRlcjtcclxuICAgIHByaXZhdGUgcmFpbmluZyA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihzY2VuZTogR2FtZVNjZW5lKSB7XHJcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xyXG5cclxuICAgICAgICBjb25zdCByYWluU3Bhd25Qb3NpdGlvbiA9IHRoaXMuc2NlbmUucG9pbnRzT2ZJbnRlcmVzdC5maW5kKFxyXG4gICAgICAgICAgICBvID0+IG8ubmFtZSA9PT0gXCJyYWluX3NwYXduX3Bvc2l0aW9uXCJcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoIXJhaW5TcGF3blBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvciAoXCJNaXNzaW5nICdyYWluX3NwYXduX3Bvc2l0aW9uJyBwb2ludCBpbiBtYXAgZGF0YSB0byBwbGFjZSByYWluIGVtaXR0ZXJcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJhaW5FbWl0dGVyID0gdGhpcy5zY2VuZS5wYXJ0aWNsZXMuY3JlYXRlRW1pdHRlcih7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7eDogcmFpblNwYXduUG9zaXRpb24ueCwgeTogcmFpblNwYXduUG9zaXRpb24ueX0sXHJcbiAgICAgICAgICAgIG9mZnNldDogKCkgPT4gKHt4OiBybmQoLTEsIDEpICogMjYsIHk6IHJuZCgtMSwgMSkgKiA1fSksXHJcbiAgICAgICAgICAgIHZlbG9jaXR5OiAoKSA9PiAoeyB4OiBybmQoLTEsIDEpICogNSwgeTogLXJuZCg1MCwgODApIH0pLFxyXG4gICAgICAgICAgICBjb2xvcjogKCkgPT4gV29ybGQucmFpbmRyb3AsXHJcbiAgICAgICAgICAgIHNpemU6IDQsXHJcbiAgICAgICAgICAgIGdyYXZpdHk6IHt4OiAwLCB5OiAtMTAwfSxcclxuICAgICAgICAgICAgbGlmZXRpbWU6ICgpID0+IDMsXHJcbiAgICAgICAgICAgIGFscGhhOiAwLjYsXHJcbiAgICAgICAgICAgIGFscGhhQ3VydmU6IHZhbHVlQ3VydmVzLmxpbmVhci5pbnZlcnQoKVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRXaWR0aCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBXb3JsZC5mb3JlZ3JvdW5kLndpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRIZWlnaHQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gV29ybGQuZm9yZWdyb3VuZC5oZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5yYWluaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmFpbkVtaXR0ZXIuZW1pdChybmRJbnQoMSwgNCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZHJhdyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjYW1YID0gdGhpcy5zY2VuZS5jYW1lcmEueDtcclxuICAgICAgICBjb25zdCBjYW1ZID0gdGhpcy5zY2VuZS5jYW1lcmEueTtcclxuICAgICAgICBjb25zdCBwb3NYTXVsdGlwbGllciA9IDEgLSAoY2FtWCAvIHRoaXMuZ2V0V2lkdGgoKSAqIDIpO1xyXG5cclxuICAgICAgICBsZXQgYWxwaGEgPSAxO1xyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lLnBldHRpbmdDdXRzY2VuZSkge1xyXG4gICAgICAgICAgICBhbHBoYSA9IE1hdGgubWF4KDAsIDEgLSAodGhpcy5zY2VuZS5wZXR0aW5nQ3V0c2NlbmVUaW1lIC8gUEVUVElOR19FTkRJTkdfQ1VUU0NFTkVfRFVSQVRJT04pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmUud2luZG93Q3V0c2NlbmUpIHtcclxuICAgICAgICAgICAgYWxwaGEgPSBNYXRoLm1heCgwLCAxIC0gKHRoaXMuc2NlbmUud2luZG93Q3V0c2NlbmVUaW1lIC8gKFdJTkRPV19FTkRJTkdfQ1VUU0NFTkVfRFVSQVRJT04gLyAxLjUgKSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZS5yZW5kZXJlci5hZGQoe1xyXG4gICAgICAgICAgICB0eXBlOiBSZW5kZXJpbmdUeXBlLkRSQVdfSU1BR0UsXHJcbiAgICAgICAgICAgIGxheWVyOiBSZW5kZXJpbmdMYXllci5USUxFTUFQX01BUCxcclxuICAgICAgICAgICAgdHJhbnNsYXRpb246IHsgeDogY2FtWCwgeTogLWNhbVkgfSxcclxuICAgICAgICAgICAgcG9zaXRpb246IHsgeDogLWNhbVgsIHk6IC10aGlzLmdldEhlaWdodCgpICsgY2FtWSB9LFxyXG4gICAgICAgICAgICBhc3NldDogV29ybGQuZm9yZWdyb3VuZCxcclxuICAgICAgICAgICAgYWxwaGE6IGFscGhhXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgYmFja2dyb3VuZCBvZiBXb3JsZC5iYWNrZ3JvdW5kcykge1xyXG4gICAgICAgICAgICBjb25zdCBiZ1ggPSB0aGlzLmdldFdpZHRoKCkgLyBiYWNrZ3JvdW5kLndpZHRoO1xyXG4gICAgICAgICAgICBjb25zdCBiZ1kgPSB0aGlzLmdldEhlaWdodCgpIC8gYmFja2dyb3VuZC5oZWlnaHQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNjZW5lLnJlbmRlcmVyLmFkZCh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBSZW5kZXJpbmdUeXBlLkRSQVdfSU1BR0UsXHJcbiAgICAgICAgICAgICAgICBsYXllcjogUmVuZGVyaW5nTGF5ZXIuVElMRU1BUF9CQUNLR1JPVU5ELFxyXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb246IHsgeDogY2FtWCwgeTogLWNhbVkgfSxcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgeDogKC1jYW1YIC8gYmdYKSArICgtcG9zWE11bHRpcGxpZXIgKiAod2lkdGggLyAyKSksXHJcbiAgICAgICAgICAgICAgICAgICAgeTogKC10aGlzLmdldEhlaWdodCgpICsgY2FtWSkgLyBiZ1lcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBhc3NldDogYmFja2dyb3VuZCxcclxuICAgICAgICAgICAgICAgIGFscGhhOiBhbHBoYVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEVudmlyb25tZW50KHg6IG51bWJlciwgeTogbnVtYmVyKTogRW52aXJvbm1lbnQge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gKHRoaXMuZ2V0SGVpZ2h0KCkgLSAxIC0gTWF0aC5yb3VuZCh5KSkgKiB0aGlzLmdldFdpZHRoKCkgKyBNYXRoLnJvdW5kKHgpO1xyXG5cclxuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IFdvcmxkLmNvbGxpc2lvbk1hcC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIEVudmlyb25tZW50LkFJUjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBXb3JsZC5jb2xsaXNpb25NYXBbaW5kZXhdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBwb3NpdGlvbiBjb2xsaWRlcyB3aXRoIHRoZSB3b3JsZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geCAtIFggcG9zaXRpb24gd2l0aGluIHRoZSB3b3JsZC5cclxuICAgICAqIEBwYXJhbSB5IC0gWSBwb3NpdGlvbiB3aXRoaW4gdGhlIHdvcmxkLlxyXG4gICAgICogQHJldHVybiAwIGlmIG5vIGNvbGxpc2lvbi4gQW55dGhpbmcgZWxzZSBpcyBhIHNwZWNpZmljIGNvbGxpc2lvbiB0eXBlIChhY3R1YWxseSBhbiBSR0JBIGNvbG9yXHJcbiAgICAgKiAgICAgICAgIHdoaWNoIGhhcyBzcGVjaWZpYyBtZWFuaW5nIHdoaWNoIGlzbid0IGRlZmluZWQgeWV0KS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvbGxpZGVzV2l0aChcclxuICAgICAgICB4OiBudW1iZXIsIHk6IG51bWJlciwgaWdub3JlT2JqZWN0czogR2FtZU9iamVjdFtdID0gW10sIGlnbm9yZTogRW52aXJvbm1lbnRbXSA9IFtdXHJcbiAgICApOiBudW1iZXIge1xyXG4gICAgICAgIGZvciAoY29uc3QgZ2FtZU9iamVjdCBvZiB0aGlzLnNjZW5lLmdhbWVPYmplY3RzKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIGdhbWVPYmplY3QgIT09IHRoaXNcclxuICAgICAgICAgICAgICAgICYmICFpZ25vcmVPYmplY3RzLmluY2x1ZGVzKGdhbWVPYmplY3QpXHJcbiAgICAgICAgICAgICAgICAmJiBpc0NvbGxpZGFibGVHYW1lT2JqZWN0KGdhbWVPYmplY3QpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZW52aXJvbm1lbnQgPSBnYW1lT2JqZWN0LmNvbGxpZGVzV2l0aCh4LCB5KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZW52aXJvbm1lbnQgIT09IEVudmlyb25tZW50LkFJUiAmJiAhaWdub3JlLmluY2x1ZGVzKGVudmlyb25tZW50KSApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW52aXJvbm1lbnQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gKHRoaXMuZ2V0SGVpZ2h0KCkgLSAxIC0gTWF0aC5yb3VuZCh5KSkgKiB0aGlzLmdldFdpZHRoKCkgKyBNYXRoLnJvdW5kKHgpO1xyXG5cclxuICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IFdvcmxkLmNvbGxpc2lvbk1hcC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBlbnZpcm9ubWVudCA9IHRoaXMuZ2V0RW52aXJvbm1lbnQoeCwgeSk7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgIXZhbGlkRW52aXJvbm1lbnRzLmluY2x1ZGVzKGVudmlyb25tZW50KVxyXG4gICAgICAgICAgICB8fCAoaWdub3JlICYmIGlnbm9yZS5pbmNsdWRlcyhlbnZpcm9ubWVudCkpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5BSVI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gV29ybGQuY29sbGlzaW9uTWFwW2luZGV4XTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBhIHNwZWNpZmljIGVudGl0eSAoYHNvdXJjZUVudGl0eWApIGNvbGxpZGVzIHdpdGggZWl0aGVyIG9mIG9mIHRoZSBlbnRpdGllcyBpbiB0aGVcclxuICAgICAqIGdhbWVPYmplY3RzIGFycmF5IG9mIHRoZSBHYW1lU2NlbmUgYW5kIHJldHVybnMgYWxsIGVudGl0aWVzIHRoYXQgY3VycmVudGx5IGNvbGxpZGUuXHJcbiAgICAgKiBgUGFydGljbGVzYCBhcmUgdGFrZW4gb3V0IG9mIHRoaXMgY2hlY2sgYXV0b21hdGljYWxseS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gc291cmNlRW50aXR5ICAgIC0gVGhlIGVudGl0eSB0byBiZSBjaGVja2VkIGFnYWluc3QgdGhlIG90aGVyIGVudGl0aWVzXHJcbiAgICAgKiBAcGFyYW0gbWFyZ2luICAgICAgICAgIC0gT3B0aW9uYWwgbWFyZ2luIGFkZGVkIHRvIHRoZSBib3VuZGluZyBib3hlcyBvZiB0aGUgZW50aXRpZXMgdG9cclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbmQgY29sbGlzaW9uIHJhZGl1c1xyXG4gICAgICogQHBhcmFtIGlnbm9yZUVudGl0aWVzICAtIEFycmF5IG9mIGVudGl0aWVzIHRvIGJlIGlnbm9yZWQgd2l0aCB0aGlzIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJuICAgICAgICAgICAgICAgIC0gQW4gYXJyYXkgY29udGFpbmluZyBhbGwgZW50aXRpZXMgdGhhdCBjb2xsaWRlIHdpdGggdGhlIHNvdXJjZVxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEVudGl0eUNvbGxpc2lvbnMoXHJcbiAgICAgICAgc291cmNlRW50aXR5OiBFbnRpdHksIG1hcmdpbiA9IDAsIGlnbm9yZUVudGl0aWVzOiBFbnRpdHlbXSA9IFtdXHJcbiAgICApOiBFbnRpdHlbXSB7XHJcbiAgICAgICAgY29uc3QgY29sbGlkZXNXaXRoOiBFbnRpdHlbXSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGdhbWVPYmplY3Qgb2YgdGhpcy5zY2VuZS5nYW1lT2JqZWN0cykge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBnYW1lT2JqZWN0ICE9PSBzb3VyY2VFbnRpdHlcclxuICAgICAgICAgICAgICAgICYmICEoZ2FtZU9iamVjdCBpbnN0YW5jZW9mIFBhcnRpY2xlcylcclxuICAgICAgICAgICAgICAgICYmIGdhbWVPYmplY3QgaW5zdGFuY2VvZiBFbnRpdHlcclxuICAgICAgICAgICAgICAgICYmIGdhbWVPYmplY3QuaXNUcmlnZ2VyXHJcbiAgICAgICAgICAgICAgICAmJiAhaWdub3JlRW50aXRpZXMuaW5jbHVkZXMoZ2FtZU9iamVjdClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb2xsaWRpbmcgPSB0aGlzLmJvdW5kaW5nQm94ZXNDb2xsaWRlKFxyXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUVudGl0eS5nZXRCb3VuZHMobWFyZ2luKSwgZ2FtZU9iamVjdC5nZXRCb3VuZHMobWFyZ2luKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY29sbGlkaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sbGlkZXNXaXRoLnB1c2goZ2FtZU9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjb2xsaWRlc1dpdGg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGFsbCB0cmlnZ2VycyB0aGF0IGRvIGNvbGxpZGUgd2l0aCB0aGUgcHJvdmlkZWQgZW50aXR5XHJcbiAgICAgKiBAcGFyYW0gc291cmNlRW50aXR5IEVudGl0eSB0byBjaGVjayBjb2xsaXNpb25zIGFnYWluc3QgdHJpZ2dlciBib3hlc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0VHJpZ2dlckNvbGxpc2lvbnMoc291cmNlRW50aXR5OiBFbnRpdHkpOiBHYW1lT2JqZWN0SW5mb1tdIHtcclxuICAgICAgICBjb25zdCBjb2xsaWRlc1dpdGg6IEdhbWVPYmplY3RJbmZvW10gPSBbXTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCB0cmlnZ2VyT2JqZWN0IG9mIHRoaXMuc2NlbmUudHJpZ2dlck9iamVjdHMpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sbGlkaW5nID0gdGhpcy5ib3VuZGluZ0JveGVzQ29sbGlkZShcclxuICAgICAgICAgICAgICAgIHNvdXJjZUVudGl0eS5nZXRCb3VuZHMoKSwgYm91bmRzRnJvbU1hcE9iamVjdCh0cmlnZ2VyT2JqZWN0KVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbGxpZGluZykge1xyXG4gICAgICAgICAgICAgICAgY29sbGlkZXNXaXRoLnB1c2godHJpZ2dlck9iamVjdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjb2xsaWRlc1dpdGg7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEdhdGVDb2xsaXNpb25zKHNvdXJjZUVudGl0eTogRW50aXR5KTogR2FtZU9iamVjdEluZm9bXSB7XHJcbiAgICAgICAgY29uc3QgY29sbGlkZXNXaXRoOiBHYW1lT2JqZWN0SW5mb1tdID0gW107XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgZ2F0ZU9iamVjdCBvZiB0aGlzLnNjZW5lLmdhdGVPYmplY3RzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbGxpZGluZyA9IHRoaXMuYm91bmRpbmdCb3hlc0NvbGxpZGUoXHJcbiAgICAgICAgICAgICAgICBzb3VyY2VFbnRpdHkuZ2V0Qm91bmRzKCksIGJvdW5kc0Zyb21NYXBPYmplY3QoZ2F0ZU9iamVjdCwgMClcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb2xsaWRpbmcgJiYgIWdhdGVPYmplY3QucHJvcGVydGllcy5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgY29sbGlkZXNXaXRoLnB1c2goZ2F0ZU9iamVjdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjb2xsaWRlc1dpdGg7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENhbWVyYUJvdW5kcyhzb3VyY2VFbnRpdHk6IEVudGl0eSk6IEdhbWVPYmplY3RJbmZvW10ge1xyXG4gICAgICAgIGNvbnN0IGNvbGxpZGVzV2l0aDogR2FtZU9iamVjdEluZm9bXSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IHRyaWdnZXJPYmplY3Qgb2YgdGhpcy5zY2VuZS5ib3VuZE9iamVjdHMpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sbGlkaW5nID0gdGhpcy5ib3VuZGluZ0JveGVzQ29sbGlkZShcclxuICAgICAgICAgICAgICAgIHNvdXJjZUVudGl0eS5nZXRCb3VuZHMoKSwgYm91bmRzRnJvbU1hcE9iamVjdCh0cmlnZ2VyT2JqZWN0KVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbGxpZGluZykge1xyXG4gICAgICAgICAgICAgICAgY29sbGlkZXNXaXRoLnB1c2godHJpZ2dlck9iamVjdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjb2xsaWRlc1dpdGg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlIHR3byBwcm92aWRlZCBib3VuZGluZyBib3hlcyBhcmUgdG91Y2hpbmcgZWFjaCBvdGhlclxyXG4gICAgICogQHBhcmFtIGJveDEgZmlyc3QgYm91bmRpbmcgYm94XHJcbiAgICAgKiBAcGFyYW0gYm94MiBzZWNvbmQgYm91bmRpbmcgYm94XHJcbiAgICAgKiBAcmV0dXJuIGB0cnVlYCB3aGVuIHRoZSBib3VuZGluZyBib3hlcyBhcmUgdG91Y2hpbmcsIGBmYWxzZWAgaWYgbm90LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYm91bmRpbmdCb3hlc0NvbGxpZGUoYm94MTogQm91bmRzLCBib3gyOiBCb3VuZHMpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIShcclxuICAgICAgICAgICAgKChib3gxLnkgLSBib3gxLmhlaWdodCkgPiAoYm94Mi55KSkgfHxcclxuICAgICAgICAgICAgKGJveDEueSA8IChib3gyLnkgLSBib3gyLmhlaWdodCkpIHx8XHJcbiAgICAgICAgICAgICgoYm94MS54ICsgYm94MS53aWR0aCkgPCBib3gyLngpIHx8XHJcbiAgICAgICAgICAgIChib3gxLnggPiAoYm94Mi54ICsgYm94Mi53aWR0aCkpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0T2JqZWN0QXQoXHJcbiAgICAgICAgeDogbnVtYmVyLCB5OiBudW1iZXIsIGlnbm9yZU9iamVjdHM6IEdhbWVPYmplY3RbXSA9IFtdLCBpZ25vcmU6IEVudmlyb25tZW50W10gPSBbXVxyXG4gICAgKTogR2FtZU9iamVjdCB8IG51bGwge1xyXG4gICAgICAgIGZvciAoY29uc3QgZ2FtZU9iamVjdCBvZiB0aGlzLnNjZW5lLmdhbWVPYmplY3RzKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIGdhbWVPYmplY3QgIT09IHRoaXNcclxuICAgICAgICAgICAgICAgICYmICFpZ25vcmVPYmplY3RzLmluY2x1ZGVzKGdhbWVPYmplY3QpXHJcbiAgICAgICAgICAgICAgICAmJiBpc0NvbGxpZGFibGVHYW1lT2JqZWN0KGdhbWVPYmplY3QpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZW52aXJvbm1lbnQgPSBnYW1lT2JqZWN0LmNvbGxpZGVzV2l0aCh4LCB5KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZW52aXJvbm1lbnQgIT09IEVudmlyb25tZW50LkFJUiAmJiAhaWdub3JlLmluY2x1ZGVzKGVudmlyb25tZW50KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnYW1lT2JqZWN0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrIGNvbGxpc2lvbiBvZiBhIHZlcnRpY2FsIGxpbmUgd2l0aCB0aGUgd29ybGQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHggICAgICAtIFggcG9zaXRpb24gd2l0aGluIHRoZSB3b3JsZC5cclxuICAgICAqIEBwYXJhbSB5ICAgICAgLSBZIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBsaW5lIGluIHRoZSB3b3JsZC5cclxuICAgICAqIEBwYXJhbSBoZWlnaHQgLSBUaGUgaGVpZ2h0IG9mIHRoZSBsaW5lIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJuIDAgaWYgbm8gY29sbGlzaW9uLiBUeXBlIG9mIGZpcnN0IGNvbGxpc2lvbiBhbG9uZyB0aGUgbGluZSBvdGhlcndpc2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb2xsaWRlc1dpdGhWZXJ0aWNhbExpbmUoXHJcbiAgICAgICAgeDogbnVtYmVyLCB5OiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBpZ25vcmVPYmplY3RzPzogR2FtZU9iamVjdFtdLCBpZ25vcmU/OiBFbnZpcm9ubWVudFtdXHJcbiAgICApOiBudW1iZXIge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgY29sbGlzaW9uID0gdGhpcy5jb2xsaWRlc1dpdGgoXHJcbiAgICAgICAgICAgICAgICB4LCB5IC0gaSwgaWdub3JlT2JqZWN0cywgaWdub3JlXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBpZiAoY29sbGlzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sbGlzaW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIFkgY29vcmRpbmF0ZSBvZiB0aGUgZ3JvdW5kIGJlbG93IHRoZSBnaXZlbiB3b3JsZCBjb29yZGluYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB4IC0gWCBjb29yZGluYXRlIG9mIGN1cnJlbnQgcG9zaXRpb24uXHJcbiAgICAgKiBAcGFyYW0geSAtIFkgY29vcmRpbmF0ZSBvZiBjdXJyZW50IHBvc2l0aW9uLlxyXG4gICAgICogQHJldHVybiBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBncm91bmQgYmVsb3cgdGhlIGdpdmVuIGNvb3JkaW5hdGUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRHcm91bmQoXHJcbiAgICAgICAgeDogbnVtYmVyLCB5OiBudW1iZXIsIGlnbm9yZU9iamVjdHM/OiBHYW1lT2JqZWN0W10sIGlnbm9yZT86IEVudmlyb25tZW50W11cclxuICAgICk6IG51bWJlciB7XHJcbiAgICAgICAgd2hpbGUgKFxyXG4gICAgICAgICAgICB5ID4gMCAmJiAhdGhpcy5jb2xsaWRlc1dpdGgoeCwgeSwgaWdub3JlT2JqZWN0cywgaWdub3JlKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB5LS07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4geTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRSYWluKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucmFpbmluZyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0b3BSYWluKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucmFpbmluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1JhaW5pbmcoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmFpbmluZztcclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBdUJBO0FBRkE7QUFHQTtBQUVBO0FBSUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBOzs7Ozs7O0FBT0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBOzs7Ozs7Ozs7OztBQVdBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7Ozs7Ozs7QUFPQTtBQUNBO0FBR0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBOzs7Ozs7QUFNQTtBQUNBO0FBR0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBM1VBO0FBREE7QUFDQTtBQUFBO0FBS0E7QUFIQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBT0E7QUFMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBS0E7QUFEQTtBQUNBO0FBQUE7QUFuQkE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/World.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/constants.js":
|
|
/*!**************************!*\
|
|
!*** ./lib/constants.js ***!
|
|
\**************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WINDOW_ENDING_FADE_DURATION = exports.WINDOW_ENDING_CUTSCENE_DURATION = exports.PETTING_ENDING_FADE_DURATION = exports.PETTING_ENDING_CUTSCENE_DURATION = exports.DIALOG_FONT = exports.PLAYER_CARRY_HEIGHT = exports.PLAYER_WIDTH = exports.PLAYER_HEIGHT = exports.DOUBLE_JUMP_COLORS = exports.PLAYER_JUMP_TIMING_THRESHOLD = exports.TERMINAL_VELOCITY = exports.PLAYER_BOUNCE_HEIGHT = exports.PLAYER_JUMP_HEIGHT = exports.PLAYER_ACCELERATION_AIR = exports.PLAYER_ACCELERATION = exports.MAX_PLAYER_RUNNING_SPEED = exports.MAX_PLAYER_SPEED = exports.DROWNING_VELOCITY = exports.SHORT_JUMP_GRAVITY = exports.GRAVITY = exports.SOUND_INTENSITY_MULTIPLIER = exports.METER_PER_PIXEL = exports.PIXEL_PER_METER = exports.GAME_CANVAS_HEIGHT = exports.GAME_CANVAS_WIDTH = void 0;\n/**\n * Width of the game canvas in pixels.\n */\nexports.GAME_CANVAS_WIDTH = 480;\n/**\n * Height of the game canvas in pixels.\n */\nexports.GAME_CANVAS_HEIGHT = 270;\n/**\n * Number if pixels per meter on the world map. Used to convert from pixel coordinates to meters (for size and\n * physics calculations).\n */\nexports.PIXEL_PER_METER = 18;\nexports.METER_PER_PIXEL = 1 / exports.PIXEL_PER_METER;\nexports.SOUND_INTENSITY_MULTIPLIER = 50;\n/** Gravity in m/s² */\nexports.GRAVITY = 35;\n/** Gravity for short jumps (while flying upwards, after player releases jump key) in m/s² */\nexports.SHORT_JUMP_GRAVITY = 70;\n/** Drowning velocity in meters per second. */\nexports.DROWNING_VELOCITY = -1;\n/** Maximum movement speed of the player in m/s */\nexports.MAX_PLAYER_SPEED = 5;\n/** Maximum movement speed of the player in m/s */\nexports.MAX_PLAYER_RUNNING_SPEED = 7;\n/** Player movement acceleration on ground in m/s² */\nexports.PLAYER_ACCELERATION = 30;\n/** Player movement acceleration in air in m/s² */\nexports.PLAYER_ACCELERATION_AIR = 12;\n/** Player jump height in meters. */\nexports.PLAYER_JUMP_HEIGHT = 3.75;\n/** Player jump height in meters. */\nexports.PLAYER_BOUNCE_HEIGHT = 10;\n/** Terminal velocity in m/s */\nexports.TERMINAL_VELOCITY = -30;\n/** Threshold in seconds for allowing a jump after entering falling state */\nexports.PLAYER_JUMP_TIMING_THRESHOLD = 0.1;\n/** Color array containing all double jump particle colors */\nexports.DOUBLE_JUMP_COLORS = [\"#ffffff\", \"#cccccc\", \"#aaaaaa\"];\n/** Player dimensions */\nexports.PLAYER_HEIGHT = 1.60 * exports.PIXEL_PER_METER;\nexports.PLAYER_WIDTH = 0.5 * exports.PIXEL_PER_METER;\nexports.PLAYER_CARRY_HEIGHT = 4;\n/** Fonts */\nexports.DIALOG_FONT = \"fonts/pixcelsior.font.json\";\n/** Total duration in seconds until dog petting ending occurs */\nexports.PETTING_ENDING_CUTSCENE_DURATION = 135;\nexports.PETTING_ENDING_FADE_DURATION = 5;\n/** Total duration in seconds of ending d cutscene */\nexports.WINDOW_ENDING_CUTSCENE_DURATION = 50;\nexports.WINDOW_ENDING_FADE_DURATION = 3;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvY29uc3RhbnRzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2NvbnN0YW50cy50cz84NWVlIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBXaWR0aCBvZiB0aGUgZ2FtZSBjYW52YXMgaW4gcGl4ZWxzLlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEdBTUVfQ0FOVkFTX1dJRFRIID0gNDgwO1xyXG5cclxuLyoqXHJcbiAqIEhlaWdodCBvZiB0aGUgZ2FtZSBjYW52YXMgaW4gcGl4ZWxzLlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEdBTUVfQ0FOVkFTX0hFSUdIVCA9IDI3MDtcclxuXHJcbi8qKlxyXG4gKiBOdW1iZXIgaWYgcGl4ZWxzIHBlciBtZXRlciBvbiB0aGUgd29ybGQgbWFwLiBVc2VkIHRvIGNvbnZlcnQgZnJvbSBwaXhlbCBjb29yZGluYXRlcyB0byBtZXRlcnMgKGZvciBzaXplIGFuZFxyXG4gKiBwaHlzaWNzIGNhbGN1bGF0aW9ucykuXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgUElYRUxfUEVSX01FVEVSID0gMTg7XHJcbmV4cG9ydCBjb25zdCBNRVRFUl9QRVJfUElYRUwgPSAxIC8gUElYRUxfUEVSX01FVEVSO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNPVU5EX0lOVEVOU0lUWV9NVUxUSVBMSUVSID0gNTA7XHJcblxyXG4vKiogR3Jhdml0eSBpbiBtL3PCsiAqL1xyXG5leHBvcnQgY29uc3QgR1JBVklUWSA9IDM1O1xyXG5cclxuLyoqIEdyYXZpdHkgZm9yIHNob3J0IGp1bXBzICh3aGlsZSBmbHlpbmcgdXB3YXJkcywgYWZ0ZXIgcGxheWVyIHJlbGVhc2VzIGp1bXAga2V5KSBpbiBtL3PCsiAqL1xyXG5leHBvcnQgY29uc3QgU0hPUlRfSlVNUF9HUkFWSVRZID0gNzA7XHJcblxyXG4vKiogRHJvd25pbmcgdmVsb2NpdHkgaW4gbWV0ZXJzIHBlciBzZWNvbmQuICovXHJcbmV4cG9ydCBjb25zdCBEUk9XTklOR19WRUxPQ0lUWSA9IC0xO1xyXG5cclxuLyoqIE1heGltdW0gbW92ZW1lbnQgc3BlZWQgb2YgdGhlIHBsYXllciBpbiBtL3MgKi9cclxuZXhwb3J0IGNvbnN0IE1BWF9QTEFZRVJfU1BFRUQgPSA1O1xyXG5cclxuLyoqIE1heGltdW0gbW92ZW1lbnQgc3BlZWQgb2YgdGhlIHBsYXllciBpbiBtL3MgKi9cclxuZXhwb3J0IGNvbnN0IE1BWF9QTEFZRVJfUlVOTklOR19TUEVFRCA9IDc7XHJcblxyXG4vKiogUGxheWVyIG1vdmVtZW50IGFjY2VsZXJhdGlvbiBvbiBncm91bmQgaW4gbS9zwrIgKi9cclxuZXhwb3J0IGNvbnN0IFBMQVlFUl9BQ0NFTEVSQVRJT04gPSAzMDtcclxuXHJcbi8qKiBQbGF5ZXIgbW92ZW1lbnQgYWNjZWxlcmF0aW9uIGluIGFpciBpbiBtL3PCsiAqL1xyXG5leHBvcnQgY29uc3QgUExBWUVSX0FDQ0VMRVJBVElPTl9BSVIgPSAxMjtcclxuXHJcbi8qKiBQbGF5ZXIganVtcCBoZWlnaHQgaW4gbWV0ZXJzLiAqL1xyXG5leHBvcnQgY29uc3QgUExBWUVSX0pVTVBfSEVJR0hUID0gMy43NTtcclxuXHJcbi8qKiBQbGF5ZXIganVtcCBoZWlnaHQgaW4gbWV0ZXJzLiAqL1xyXG5leHBvcnQgY29uc3QgUExBWUVSX0JPVU5DRV9IRUlHSFQgPSAxMDtcclxuXHJcbi8qKiBUZXJtaW5hbCB2ZWxvY2l0eSBpbiBtL3MgKi9cclxuZXhwb3J0IGNvbnN0IFRFUk1JTkFMX1ZFTE9DSVRZID0gLTMwO1xyXG5cclxuLyoqIFRocmVzaG9sZCBpbiBzZWNvbmRzIGZvciBhbGxvd2luZyBhIGp1bXAgYWZ0ZXIgZW50ZXJpbmcgZmFsbGluZyBzdGF0ZSAqL1xyXG5leHBvcnQgY29uc3QgUExBWUVSX0pVTVBfVElNSU5HX1RIUkVTSE9MRCA9IDAuMTtcclxuXHJcbi8qKiBDb2xvciBhcnJheSBjb250YWluaW5nIGFsbCBkb3VibGUganVtcCBwYXJ0aWNsZSBjb2xvcnMgKi9cclxuZXhwb3J0IGNvbnN0IERPVUJMRV9KVU1QX0NPTE9SUyA9IFsgXCIjZmZmZmZmXCIsIFwiI2NjY2NjY1wiLCBcIiNhYWFhYWFcIiBdO1xyXG5cclxuLyoqIFBsYXllciBkaW1lbnNpb25zICovXHJcbmV4cG9ydCBjb25zdCBQTEFZRVJfSEVJR0hUID0gMS42MCAqIFBJWEVMX1BFUl9NRVRFUjtcclxuZXhwb3J0IGNvbnN0IFBMQVlFUl9XSURUSCA9IDAuNSAqIFBJWEVMX1BFUl9NRVRFUjtcclxuZXhwb3J0IGNvbnN0IFBMQVlFUl9DQVJSWV9IRUlHSFQgPSA0O1xyXG5cclxuLyoqIEZvbnRzICovXHJcbmV4cG9ydCBjb25zdCBESUFMT0dfRk9OVCA9IFwiZm9udHMvcGl4Y2Vsc2lvci5mb250Lmpzb25cIjtcclxuXHJcbi8qKiBUb3RhbCBkdXJhdGlvbiBpbiBzZWNvbmRzIHVudGlsIGRvZyBwZXR0aW5nIGVuZGluZyBvY2N1cnMgKi9cclxuZXhwb3J0IGNvbnN0IFBFVFRJTkdfRU5ESU5HX0NVVFNDRU5FX0RVUkFUSU9OID0gMTM1O1xyXG5leHBvcnQgY29uc3QgUEVUVElOR19FTkRJTkdfRkFERV9EVVJBVElPTiA9IDU7XHJcblxyXG4vKiogVG90YWwgZHVyYXRpb24gaW4gc2Vjb25kcyBvZiBlbmRpbmcgZCBjdXRzY2VuZSAqL1xyXG5leHBvcnQgY29uc3QgV0lORE9XX0VORElOR19DVVRTQ0VORV9EVVJBVElPTiA9IDUwO1xyXG5leHBvcnQgY29uc3QgV0lORE9XX0VORElOR19GQURFX0RVUkFUSU9OID0gMzsiXSwibWFwcGluZ3MiOiI7OztBQUFBOztBQUVBO0FBQ0E7QUFFQTs7QUFFQTtBQUNBO0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/constants.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/easings.js":
|
|
/*!************************!*\
|
|
!*** ./lib/easings.js ***!
|
|
\************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.easeInOutBounce = exports.easeInBounce = exports.easeOutBounce = exports.easeInOutElastic = exports.easeOutElastic = exports.easeInElastic = exports.easeInOutBack = exports.easeOutBack = exports.easeInBack = exports.easeInOutCirc = exports.easeOutCirc = exports.easeInCirc = exports.easeInOutExpo = exports.easeOutExpo = exports.easeInExpo = exports.easeInOutQuint = exports.easeOutQuint = exports.easeInQuint = exports.easeInOutQuart = exports.easeOutQuart = exports.easeInQuart = exports.easeInOutCubic = exports.easeOutCubic = exports.easeInCubic = exports.easeInOutQuad = exports.easeOutQuad = exports.easeInQuad = exports.easeInOutSine = exports.easeOutSine = exports.easeInSine = exports.linear = void 0;\nconst { PI, cos, sin } = Math;\nfunction linear(t) {\n return t;\n}\nexports.linear = linear;\nfunction easeInSine(t) {\n return 1 - cos(t * PI / 2);\n}\nexports.easeInSine = easeInSine;\nfunction easeOutSine(t) {\n return sin(t * PI / 2);\n}\nexports.easeOutSine = easeOutSine;\nfunction easeInOutSine(t) {\n return 0.5 - cos(PI * t) / 2;\n}\nexports.easeInOutSine = easeInOutSine;\nfunction easeInQuad(t) {\n return t * t;\n}\nexports.easeInQuad = easeInQuad;\nfunction easeOutQuad(t) {\n return t * (2 - t);\n}\nexports.easeOutQuad = easeOutQuad;\nfunction easeInOutQuad(t) {\n if (t < 0.5) {\n return 2 * t * t;\n }\n else {\n return 4 * t - 2 * t * t - 1;\n }\n}\nexports.easeInOutQuad = easeInOutQuad;\nfunction easeInCubic(t) {\n return Math.pow(t, 3);\n}\nexports.easeInCubic = easeInCubic;\nfunction easeOutCubic(t) {\n return Math.pow(t, 3) + 3 * (t - t * t);\n}\nexports.easeOutCubic = easeOutCubic;\nfunction easeInOutCubic(t) {\n if (t < 0.5) {\n return 4 * Math.pow(t, 3);\n }\n else {\n return 4 * Math.pow(t, 3) + 12 * (t - t * t) - 3;\n }\n}\nexports.easeInOutCubic = easeInOutCubic;\nfunction easeInQuart(t) {\n return Math.pow(t, 4);\n}\nexports.easeInQuart = easeInQuart;\nfunction easeOutQuart(t) {\n return 1 - Math.pow((t - 1), 4);\n}\nexports.easeOutQuart = easeOutQuart;\nfunction easeInOutQuart(t) {\n if (t < 0.5) {\n return 8 * Math.pow(t, 4);\n }\n else {\n return 1 - 8 * Math.pow((t - 1), 4);\n }\n}\nexports.easeInOutQuart = easeInOutQuart;\nfunction easeInQuint(t) {\n return Math.pow(t, 5);\n}\nexports.easeInQuint = easeInQuint;\nfunction easeOutQuint(t) {\n return 1 + Math.pow((t - 1), 5);\n}\nexports.easeOutQuint = easeOutQuint;\nfunction easeInOutQuint(t) {\n if (t < 0.5) {\n return 16 * Math.pow(t, 5);\n }\n else {\n return 1 + 16 * Math.pow((t - 1), 5);\n }\n}\nexports.easeInOutQuint = easeInOutQuint;\nfunction easeInExpo(t) {\n if (t <= 0) {\n return 0;\n }\n return Math.pow(2, (10 * (t - 1)));\n}\nexports.easeInExpo = easeInExpo;\nfunction easeOutExpo(t) {\n if (t >= 1) {\n return 1;\n }\n return 1 - 1 / Math.pow(1024, t);\n}\nexports.easeOutExpo = easeOutExpo;\nfunction easeInOutExpo(t) {\n if (t <= 0) {\n return 0;\n }\n if (t >= 1) {\n return 1;\n }\n if (t < 0.5) {\n return Math.pow(1048576, t) / 2048;\n }\n else {\n return 1 - 512 / Math.pow(1048576, t);\n }\n}\nexports.easeInOutExpo = easeInOutExpo;\nfunction easeInCirc(t) {\n return 1 - Math.pow((1 - t * t), 0.5);\n}\nexports.easeInCirc = easeInCirc;\nfunction easeOutCirc(t) {\n return Math.pow((2 * t - t * t), 0.5);\n}\nexports.easeOutCirc = easeOutCirc;\nfunction easeInOutCirc(t) {\n if (t < 0.5) {\n return 0.5 - Math.pow((0.25 - t * t), 0.5);\n }\n else {\n return (Math.pow((4 * t * (2 - t) - 3), 0.5) + 1) / 2;\n }\n}\nexports.easeInOutCirc = easeInOutCirc;\nfunction easeInBack(t) {\n return 2.70158 * Math.pow(t, 3) - 1.70158 * t * t;\n}\nexports.easeInBack = easeInBack;\nfunction easeOutBack(t) {\n return 2.70158 * Math.pow(t, 3) - 6.40316 * t * t + 4.70158 * t;\n}\nexports.easeOutBack = easeOutBack;\nfunction easeInOutBack(t) {\n if (t < 0.5) {\n return 14.379638 * Math.pow(t, 3) - 5.189819 * t * t;\n }\n else {\n return 14.379638 * Math.pow(t, 3) - 37.949095 * t * t + 32.759276 * t - 8.189819;\n }\n}\nexports.easeInOutBack = easeInOutBack;\nfunction easeInElastic(t) {\n if (t <= 0) {\n return 0;\n }\n if (t >= 1) {\n return 1;\n }\n return Math.pow(1024, (t - 1)) * -sin(PI * (20 * t / 3 - 43 / 6));\n}\nexports.easeInElastic = easeInElastic;\nfunction easeOutElastic(t) {\n if (t <= 0) {\n return 0;\n }\n if (t >= 1) {\n return 1;\n }\n return sin(PI * (20 * t / 3 - 0.5)) / (Math.pow(1024, t)) + 1;\n}\nexports.easeOutElastic = easeOutElastic;\nfunction easeInOutElastic(t) {\n if (t <= 0) {\n return 0;\n }\n if (t >= 1) {\n return 1;\n }\n if (t < 0.5) {\n return Math.pow(1048576, t) / -2048 * sin(PI * (80 * t / 9 - 89 / 18));\n }\n else {\n return 512 / Math.pow(1048576, t) * sin(PI * (80 * t / 9 - 89 / 18)) + 1;\n }\n}\nexports.easeInOutElastic = easeInOutElastic;\nfunction easeOutBounce(t) {\n if (t < 4 / 11) {\n return 121 * t * t / 16;\n }\n else if (t < 8 / 11) {\n return 121 * t * t / 16 - 33 * t / 4 + 3;\n }\n else if (t < 10 / 11) {\n return 121 * t * t / 16 - 99 * t / 8 + 6;\n }\n else {\n return 121 * t * t / 16 - 231 * t / 16 + 63 / 8;\n }\n}\nexports.easeOutBounce = easeOutBounce;\nfunction easeInBounce(t) {\n return 1 - easeOutBounce(1 - t);\n}\nexports.easeInBounce = easeInBounce;\nfunction easeInOutBounce(t) {\n if (t < 0.5) {\n return easeInBounce(t * 2) / 2;\n }\n else {\n return easeOutBounce(t * 2 - 1) / 2 + 0.5;\n }\n}\nexports.easeInOutBounce = easeInOutBounce;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZWFzaW5ncy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9lYXNpbmdzLnRzPzRhZjAiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgeyBQSSwgY29zLCBzaW4gfSA9IE1hdGg7XHJcblxyXG5leHBvcnQgdHlwZSBFYXNpbmcgPSAodDogbnVtYmVyKSA9PiBudW1iZXI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbGluZWFyKHQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVhc2VJblNpbmUodDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAxIC0gY29zKHQgKiBQSSAvIDIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZWFzZU91dFNpbmUodDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBzaW4odCAqIFBJIC8gMik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBlYXNlSW5PdXRTaW5lKHQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gMC41IC0gY29zKFBJICogdCkgLyAyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZWFzZUluUXVhZCh0OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHQgKiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZWFzZU91dFF1YWQodDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0ICogKDIgLSB0KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVhc2VJbk91dFF1YWQodDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGlmICh0IDwgMC41KSB7XHJcbiAgICAgICAgcmV0dXJuIDIgKiB0ICogdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIDQgKiB0IC0gMiAqIHQgKiB0IC0gMTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVhc2VJbkN1YmljKHQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdCAqKiAzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZWFzZU91dEN1YmljKHQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdCAqKiAzICsgMyAqICh0IC0gdCAqIHQpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZWFzZUluT3V0Q3ViaWModDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGlmICh0IDwgMC41KSB7XHJcbiAgICAgICAgcmV0dXJuIDQgKiB0ICoqIDM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiA0ICogdCAqKiAzICsgMTIgKiAodCAtIHQgKiB0KSAtIDM7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBlYXNlSW5RdWFydCh0OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHQgKiogNDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVhc2VPdXRRdWFydCh0OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIDEgLSAodCAtIDEpICoqIDQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBlYXNlSW5PdXRRdWFydCh0OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgaWYgKHQgPCAwLjUpIHtcclxuICAgICAgICByZXR1cm4gOCAqIHQgKiogNDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSA4ICogKHQgLSAxKSAqKiA0O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZWFzZUluUXVpbnQodDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0ICoqIDU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBlYXNlT3V0UXVpbnQodDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAxICsgKHQgLSAxKSAqKiA1O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZWFzZUluT3V0UXVpbnQodDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGlmICh0IDwgMC41KSB7XHJcbiAgICAgICAgcmV0dXJuIDE2ICogdCAqKiA1O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gMSArIDE2ICogKHQgLSAxKSAqKiA1O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZWFzZUluRXhwbyh0OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgaWYgKHQgPD0gMCkgeyByZXR1cm4gMDsgfVxyXG4gICAgcmV0dXJuIDIgKiogKDEwICogKHQgLSAxKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBlYXNlT3V0RXhwbyh0OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgaWYgKHQgPj0gMSkge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDEgLSAxIC8gMTAyNCAqKiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZWFzZUluT3V0RXhwbyh0OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgaWYgKHQgPD0gMCkge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgaWYgKHQgPj0gMSkge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG4gICAgaWYgKHQgPCAwLjUpIHtcclxuICAgICAgICByZXR1cm4gMTA0ODU3NiAqKiB0IC8gMjA0ODtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIDEgLSA1MTIgLyAxMDQ4NTc2ICoqIHQ7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBlYXNlSW5DaXJjKHQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gMSAtICgxIC0gdCAqIHQpICoqIDAuNTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVhc2VPdXRDaXJjKHQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKDIgKiB0IC0gdCAqIHQpICoqIDAuNTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVhc2VJbk91dENpcmModDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGlmICh0IDwgMC41KSB7XHJcbiAgICAgICAgcmV0dXJuIDAuNSAtICgwLjI1IC0gdCAqIHQpICoqIDAuNTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuICgoNCAqIHQgKiAoMiAtIHQpIC0gMykgKiogMC41ICsgMSkgLyAyO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZWFzZUluQmFjayh0OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIDIuNzAxNTggKiB0ICoqIDMgLSAxLjcwMTU4ICogdCAqIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBlYXNlT3V0QmFjayh0OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIDIuNzAxNTggKiB0ICoqIDMgLSA2LjQwMzE2ICogdCAqIHQgKyA0LjcwMTU4ICogdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVhc2VJbk91dEJhY2sodDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGlmICh0IDwgMC41KSB7XHJcbiAgICAgICAgcmV0dXJuIDE0LjM3OTYzOCAqIHQgKiogMyAtIDUuMTg5ODE5ICogdCAqIHQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAxNC4zNzk2MzggKiB0ICoqIDMgLSAzNy45NDkwOTUgKiB0ICogdCArIDMyLjc1OTI3NiAqIHQgLSA4LjE4OTgxOTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVhc2VJbkVsYXN0aWModDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGlmICh0IDw9IDApIHtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIGlmICh0ID49IDEpIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuICAgIHJldHVybiAxMDI0ICoqICh0IC0gMSkgKiAtc2luKFBJICogKDIwICogdCAvIDMgLSA0MyAvIDYpKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVhc2VPdXRFbGFzdGljKHQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBpZiAodCA8PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBpZiAodCA+PSAxKSB7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2luKFBJICogKDIwICogdCAvIDMgLSAwLjUpKSAvICgxMDI0ICoqIHQpICsgMTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVhc2VJbk91dEVsYXN0aWModDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGlmICh0IDw9IDApIHtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIGlmICh0ID49IDEpIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuICAgIGlmICh0IDwgMC41KSB7XHJcbiAgICAgICAgcmV0dXJuIDEwNDg1NzYgKiogdCAvIC0yMDQ4ICogc2luKFBJICogKDgwICogdCAvIDkgLSA4OSAvIDE4KSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiA1MTIgLyAxMDQ4NTc2ICoqIHQgKiBzaW4oUEkgKiAoODAgKiB0IC8gOSAtIDg5IC8gMTgpKSArIDE7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBlYXNlT3V0Qm91bmNlKHQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBpZiAodCA8IDQgLyAxMSkge1xyXG4gICAgICAgIHJldHVybiAxMjEgKiB0ICogdCAvIDE2O1xyXG4gICAgfSBlbHNlIGlmICh0IDwgOCAvIDExKSB7XHJcbiAgICAgICAgcmV0dXJuIDEyMSAqIHQgKiB0IC8gMTYgLSAzMyAqIHQgLyA0ICsgMztcclxuICAgIH0gZWxzZSBpZiAodCA8IDEwIC8gMTEpIHtcclxuICAgICAgICByZXR1cm4gMTIxICogdCAqIHQgLyAxNiAtIDk5ICogdCAvIDggKyA2O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gMTIxICogdCAqIHQgLyAxNiAtIDIzMSAqIHQgLyAxNiArIDYzIC8gODtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVhc2VJbkJvdW5jZSh0OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIDEgLSBlYXNlT3V0Qm91bmNlKDEgLSB0KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVhc2VJbk91dEJvdW5jZSh0OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgaWYgKHQgPCAwLjUpIHtcclxuICAgICAgICByZXR1cm4gZWFzZUluQm91bmNlKHQgKiAyKSAvIDI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBlYXNlT3V0Qm91bmNlKHQgKiAyIC0gMSkgLyAyICsgMC41O1xyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQVpBO0FBY0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVFBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQVpBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQVZBO0FBWUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/easings.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/Bird.js":
|
|
/*!******************************!*\
|
|
!*** ./lib/entities/Bird.js ***!
|
|
\******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar Bird_1;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Bird = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ./../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ./../Assets */ \"./lib/Assets.js\");\nconst util_1 = __webpack_require__(/*! ./../util */ \"./lib/util.js\");\nconst Conversation_1 = __webpack_require__(/*! ./../Conversation */ \"./lib/Conversation.js\");\nconst bird_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ./../../assets/dialog/bird.dialog.json */ \"./assets/dialog/bird.dialog.json\"));\nconst constants_1 = __webpack_require__(/*! ./../constants */ \"./lib/constants.js\");\nconst Entity_1 = __webpack_require__(/*! ./../Entity */ \"./lib/Entity.js\");\nconst World_1 = __webpack_require__(/*! ./../World */ \"./lib/World.js\");\nconst GameScene_1 = __webpack_require__(/*! ./../scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst NPC_1 = __webpack_require__(/*! ./NPC */ \"./lib/entities/NPC.js\");\nconst Particles_1 = __webpack_require__(/*! ./../Particles */ \"./lib/Particles.js\");\nconst Renderer_1 = __webpack_require__(/*! ./../Renderer */ \"./lib/Renderer.js\");\nconst Sound_1 = __webpack_require__(/*! ./../Sound */ \"./lib/Sound.js\");\nvar BirdState;\n(function (BirdState) {\n BirdState[BirdState[\"WAITING_LEFT\"] = 0] = \"WAITING_LEFT\";\n BirdState[BirdState[\"FLYING_RIGHT\"] = 1] = \"FLYING_RIGHT\";\n BirdState[BirdState[\"WAITING_RIGHT\"] = 2] = \"WAITING_RIGHT\";\n BirdState[BirdState[\"FLYING_LEFT\"] = 3] = \"FLYING_LEFT\";\n})(BirdState || (BirdState = {}));\nconst WAITING_TIME = 5;\nconst JUMP_INTERVAL = 0.3;\nconst MAX_SPEED = 4;\nlet Bird = Bird_1 = class Bird extends NPC_1.NPC {\n constructor(scene, x, y) {\n super(scene, x, y, 28, 24);\n this.move = 1;\n this.jumpHeight = 1.5;\n this.waitTimer = 0;\n this.state = BirdState.WAITING_LEFT;\n this.jumpTimer = 0;\n this.minAltitude = y;\n this.conversation = new Conversation_1.Conversation(bird_dialog_json_1.default, this);\n this.doubleJumpEmitter = this.scene.particles.createEmitter({\n position: { x: this.x, y: this.y },\n velocity: () => ({ x: util_1.rnd(-1, 1) * 90, y: util_1.rnd(-1, 0) * 100 }),\n color: () => util_1.rndItem(constants_1.DOUBLE_JUMP_COLORS),\n size: util_1.rnd(1, 2),\n gravity: { x: 0, y: -120 },\n lifetime: () => util_1.rnd(0.4, 0.6),\n alphaCurve: Particles_1.valueCurves.trapeze(0.05, 0.2)\n });\n this.setMaxVelocity(MAX_SPEED);\n }\n isWaiting() {\n return this.state === BirdState.WAITING_LEFT || this.state === BirdState.WAITING_RIGHT;\n }\n jump() {\n this.jumpTimer = JUMP_INTERVAL;\n this.setVelocityY(Math.sqrt(2 * this.jumpHeight * constants_1.GRAVITY));\n this.doubleJumpEmitter.setPosition(this.x, this.y + 20);\n if (!this.scene.pettingCutscene) {\n this.doubleJumpEmitter.emit(20);\n const vol = util_1.calculateVolume(this.distanceToPlayer, 0.4);\n if (vol > 0) {\n Bird_1.jumpSound.setVolume(vol);\n Bird_1.jumpSound.stop();\n Bird_1.jumpSound.play();\n }\n }\n }\n canJump() {\n return this.jumpTimer === 0;\n }\n updatePosition(newX, newY) {\n this.x = newX;\n this.y = newY;\n // Check collision with the environment and correct player position and movement\n if (this.pullOutOfGround() !== 0 || this.pullOutOfCeiling() !== 0) {\n this.setVelocityY(0);\n }\n if (this.pullOutOfWall() !== 0) {\n this.setVelocityX(0);\n }\n }\n pullOutOfGround() {\n let pulled = 0, col = 0;\n if (this.getVelocityY() <= 0) {\n const world = this.scene.world;\n const height = world.getHeight();\n col = world.collidesWith(this.x, this.y, [this], [World_1.Environment.WATER]);\n while (this.y < height && col) {\n pulled++;\n this.y++;\n col = world.collidesWith(this.x, this.y);\n }\n }\n return pulled;\n }\n pullOutOfCeiling() {\n let pulled = 0;\n const world = this.scene.world;\n while (this.y > 0\n && world.collidesWith(this.x, this.y + this.height, [this], [World_1.Environment.PLATFORM, World_1.Environment.WATER])) {\n pulled++;\n this.y--;\n }\n return pulled;\n }\n pullOutOfWall() {\n let pulled = 0;\n const world = this.scene.world;\n if (this.getVelocityX() > 0) {\n while (world.collidesWithVerticalLine(this.x + this.width / 2, this.y + this.height * 3 / 4, this.height / 2, [this], [World_1.Environment.PLATFORM, World_1.Environment.WATER])) {\n this.x--;\n pulled++;\n }\n }\n else {\n while (world.collidesWithVerticalLine(this.x - this.width / 2, this.y + this.height * 3 / 4, this.height / 2, [this], [World_1.Environment.PLATFORM, World_1.Environment.WATER])) {\n this.x++;\n pulled++;\n }\n }\n return pulled;\n }\n nextState() {\n if (this.state === BirdState.FLYING_LEFT) {\n this.state = BirdState.WAITING_LEFT;\n }\n else {\n this.state = this.state + 1;\n }\n }\n isReadyForConversation() {\n const superResult = super.isReadyForConversation();\n return (superResult && this.isWaiting());\n }\n draw(ctx) {\n let alpha;\n if (this.scene.pettingCutscene) {\n alpha = Math.max(0, 1 - (this.scene.pettingCutsceneTime / constants_1.PETTING_ENDING_CUTSCENE_DURATION));\n }\n this.scene.renderer.addAseprite(Bird_1.sprite, \"idle\", this.x, this.y, Renderer_1.RenderingLayer.ENTITIES, this.direction, undefined, alpha);\n if (this.scene.showBounds)\n this.drawBounds();\n this.speechBubble.draw(ctx);\n }\n update(dt) {\n super.update(dt);\n this.move = 0;\n // Triggers\n const triggerCollisions = this.scene.world.getTriggerCollisions(this);\n if (this.jumpTimer > 0) {\n this.jumpTimer -= dt;\n if (this.jumpTimer < 0) {\n this.jumpTimer = 0;\n }\n }\n if ((this.state === BirdState.WAITING_LEFT || this.state === BirdState.WAITING_RIGHT) && !this.hasActiveConversation()) {\n this.waitTimer += dt;\n if (this.waitTimer >= WAITING_TIME) {\n this.waitTimer = 0;\n this.nextState();\n }\n }\n if (this.state === BirdState.FLYING_RIGHT || this.state === BirdState.FLYING_LEFT) {\n this.move = this.state === BirdState.FLYING_RIGHT ? 1 : -1;\n if (this.y < this.minAltitude && this.canJump()) {\n this.jump();\n }\n if (this.state === BirdState.FLYING_RIGHT && triggerCollisions.length > 0 && triggerCollisions.find(t => t.name === \"bird_nest_right\")) {\n this.nextState();\n }\n if (this.state === BirdState.FLYING_LEFT && triggerCollisions.length > 0 && triggerCollisions.find(t => t.name === \"bird_nest_left\")) {\n this.nextState();\n }\n }\n // Bird acceleration\n if (this.move !== 0) {\n this.direction = this.move;\n this.accelerateX(constants_1.PLAYER_ACCELERATION_AIR * dt * this.move);\n }\n else {\n if (this.getVelocityX() > 0) {\n this.decelerateX(constants_1.PLAYER_ACCELERATION_AIR * dt);\n }\n else {\n this.decelerateX(-constants_1.PLAYER_ACCELERATION_AIR * dt);\n }\n }\n this.speechBubble.update(this.x, this.y);\n }\n};\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/bird.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], Bird, \"sprite\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/jumping/jump_neutral.ogg\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], Bird, \"jumpSound\", void 0);\nBird = Bird_1 = tslib_1.__decorate([\n Entity_1.entity(\"bird\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number])\n], Bird);\nexports.Bird = Bird;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvQmlyZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9lbnRpdGllcy9CaXJkLnRzP2Y3MzkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNlcHJpdGUgfSBmcm9tIFwiLi8uLi9Bc2Vwcml0ZVwiO1xyXG5pbXBvcnQgeyBhc3NldCB9IGZyb20gXCIuLy4uL0Fzc2V0c1wiO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVWb2x1bWUsIHJuZCwgcm5kSXRlbSB9IGZyb20gXCIuLy4uL3V0aWxcIjtcclxuaW1wb3J0IHsgQ29udmVyc2F0aW9uIH0gZnJvbSBcIi4vLi4vQ29udmVyc2F0aW9uXCI7XHJcbmltcG9ydCBjb252ZXJzYXRpb24gZnJvbSBcIi4vLi4vLi4vYXNzZXRzL2RpYWxvZy9iaXJkLmRpYWxvZy5qc29uXCI7XHJcbmltcG9ydCB7IERPVUJMRV9KVU1QX0NPTE9SUywgR1JBVklUWSwgUEVUVElOR19FTkRJTkdfQ1VUU0NFTkVfRFVSQVRJT04sIFBMQVlFUl9BQ0NFTEVSQVRJT05fQUlSIH0gZnJvbSBcIi4vLi4vY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IGVudGl0eSB9IGZyb20gXCIuLy4uL0VudGl0eVwiO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gXCIuLy4uL1dvcmxkXCI7XHJcbmltcG9ydCB7IEdhbWVTY2VuZSB9IGZyb20gXCIuLy4uL3NjZW5lcy9HYW1lU2NlbmVcIjtcclxuaW1wb3J0IHsgTlBDIH0gZnJvbSBcIi4vTlBDXCI7XHJcbmltcG9ydCB7IFBhcnRpY2xlRW1pdHRlciwgdmFsdWVDdXJ2ZXMgfSBmcm9tIFwiLi8uLi9QYXJ0aWNsZXNcIjtcclxuaW1wb3J0IHsgUmVuZGVyaW5nTGF5ZXIgfSBmcm9tIFwiLi8uLi9SZW5kZXJlclwiO1xyXG5pbXBvcnQgeyBTb3VuZCB9IGZyb20gXCIuLy4uL1NvdW5kXCI7XHJcblxyXG5lbnVtIEJpcmRTdGF0ZSB7XHJcbiAgICBXQUlUSU5HX0xFRlQsXHJcbiAgICBGTFlJTkdfUklHSFQsXHJcbiAgICBXQUlUSU5HX1JJR0hULFxyXG4gICAgRkxZSU5HX0xFRlRcclxufVxyXG5cclxuY29uc3QgV0FJVElOR19USU1FID0gNTtcclxuY29uc3QgSlVNUF9JTlRFUlZBTCA9IDAuMztcclxuY29uc3QgTUFYX1NQRUVEID0gNDtcclxuXHJcbkBlbnRpdHkoXCJiaXJkXCIpXHJcbmV4cG9ydCBjbGFzcyBCaXJkIGV4dGVuZHMgTlBDIHtcclxuICAgIEBhc3NldChcInNwcml0ZXMvYmlyZC5hc2Vwcml0ZS5qc29uXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBzcHJpdGU6IEFzZXByaXRlO1xyXG4gICAgQGFzc2V0KFwic291bmRzL2p1bXBpbmcvanVtcF9uZXV0cmFsLm9nZ1wiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMganVtcFNvdW5kOiBTb3VuZDtcclxuICAgIHByaXZhdGUgZG91YmxlSnVtcEVtaXR0ZXI6IFBhcnRpY2xlRW1pdHRlcjtcclxuICAgIHByaXZhdGUgbW92ZTogMCB8IDEgfCAtMSAgPSAxO1xyXG4gICAgcHJpdmF0ZSBtaW5BbHRpdHVkZTogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBqdW1wSGVpZ2h0ID0gMS41O1xyXG4gICAgcHJpdmF0ZSB3YWl0VGltZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSBzdGF0ZSA9IEJpcmRTdGF0ZS5XQUlUSU5HX0xFRlQ7XHJcbiAgICBwcml2YXRlIGp1bXBUaW1lciA9IDA7XHJcblxyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHNjZW5lOiBHYW1lU2NlbmUsIHg6IG51bWJlciwgeTogbnVtYmVyKSB7XHJcbiAgICAgICAgc3VwZXIoc2NlbmUsIHgsIHksIDI4LCAyNCk7XHJcbiAgICAgICAgdGhpcy5taW5BbHRpdHVkZSA9IHk7XHJcbiAgICAgICAgdGhpcy5jb252ZXJzYXRpb24gPSBuZXcgQ29udmVyc2F0aW9uKGNvbnZlcnNhdGlvbiwgdGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuZG91YmxlSnVtcEVtaXR0ZXIgPSB0aGlzLnNjZW5lLnBhcnRpY2xlcy5jcmVhdGVFbWl0dGVyKHtcclxuICAgICAgICAgICAgcG9zaXRpb246IHt4OiB0aGlzLngsIHk6IHRoaXMueX0sXHJcbiAgICAgICAgICAgIHZlbG9jaXR5OiAoKSA9PiAoeyB4OiBybmQoLTEsIDEpICogOTAsIHk6IHJuZCgtMSwgMCkgKiAxMDAgfSksXHJcbiAgICAgICAgICAgIGNvbG9yOiAoKSA9PiBybmRJdGVtKERPVUJMRV9KVU1QX0NPTE9SUyksXHJcbiAgICAgICAgICAgIHNpemU6IHJuZCgxLCAyKSxcclxuICAgICAgICAgICAgZ3Jhdml0eToge3g6IDAsIHk6IC0xMjB9LFxyXG4gICAgICAgICAgICBsaWZldGltZTogKCkgPT4gcm5kKDAuNCwgMC42KSxcclxuICAgICAgICAgICAgYWxwaGFDdXJ2ZTogdmFsdWVDdXJ2ZXMudHJhcGV6ZSgwLjA1LCAwLjIpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zZXRNYXhWZWxvY2l0eShNQVhfU1BFRUQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNXYWl0aW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlID09PSBCaXJkU3RhdGUuV0FJVElOR19MRUZUIHx8IHRoaXMuc3RhdGUgPT09IEJpcmRTdGF0ZS5XQUlUSU5HX1JJR0hUO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBqdW1wKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuanVtcFRpbWVyID0gSlVNUF9JTlRFUlZBTDtcclxuICAgICAgICB0aGlzLnNldFZlbG9jaXR5WShNYXRoLnNxcnQoMiAqIHRoaXMuanVtcEhlaWdodCAqIEdSQVZJVFkpKTtcclxuICAgICAgICB0aGlzLmRvdWJsZUp1bXBFbWl0dGVyLnNldFBvc2l0aW9uKHRoaXMueCwgdGhpcy55ICsgMjApO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuc2NlbmUucGV0dGluZ0N1dHNjZW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZG91YmxlSnVtcEVtaXR0ZXIuZW1pdCgyMCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB2b2wgPSBjYWxjdWxhdGVWb2x1bWUodGhpcy5kaXN0YW5jZVRvUGxheWVyLCAwLjQpO1xyXG4gICAgICAgICAgICBpZiAodm9sID4gMCkge1xyXG4gICAgICAgICAgICAgICAgQmlyZC5qdW1wU291bmQuc2V0Vm9sdW1lKHZvbCk7XHJcbiAgICAgICAgICAgICAgICBCaXJkLmp1bXBTb3VuZC5zdG9wKCk7XHJcbiAgICAgICAgICAgICAgICBCaXJkLmp1bXBTb3VuZC5wbGF5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGNhbkp1bXAoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuanVtcFRpbWVyID09PSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB1cGRhdGVQb3NpdGlvbihuZXdYOiBudW1iZXIsIG5ld1k6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMueCA9IG5ld1g7XHJcbiAgICAgICAgdGhpcy55ID0gbmV3WTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgY29sbGlzaW9uIHdpdGggdGhlIGVudmlyb25tZW50IGFuZCBjb3JyZWN0IHBsYXllciBwb3NpdGlvbiBhbmQgbW92ZW1lbnRcclxuICAgICAgICBpZiAodGhpcy5wdWxsT3V0T2ZHcm91bmQoKSAhPT0gMCB8fCB0aGlzLnB1bGxPdXRPZkNlaWxpbmcoKSAhPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFZlbG9jaXR5WSgwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnB1bGxPdXRPZldhbGwoKSAhPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFZlbG9jaXR5WCgwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwdWxsT3V0T2ZHcm91bmQoKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgcHVsbGVkID0gMCwgY29sID0gMDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0VmVsb2NpdHlZKCkgPD0gMCkge1xyXG4gICAgICAgICAgICBjb25zdCB3b3JsZCA9IHRoaXMuc2NlbmUud29ybGQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IHdvcmxkLmdldEhlaWdodCgpO1xyXG4gICAgICAgICAgICBjb2wgPSB3b3JsZC5jb2xsaWRlc1dpdGgodGhpcy54LCB0aGlzLnksIFsgdGhpcyBdLCBbIEVudmlyb25tZW50LldBVEVSIF0pO1xyXG5cclxuICAgICAgICAgICAgd2hpbGUgKHRoaXMueSA8IGhlaWdodCAmJiBjb2wpIHtcclxuICAgICAgICAgICAgICAgIHB1bGxlZCsrO1xyXG4gICAgICAgICAgICAgICAgdGhpcy55Kys7XHJcbiAgICAgICAgICAgICAgICBjb2wgPSB3b3JsZC5jb2xsaWRlc1dpdGgodGhpcy54LCB0aGlzLnkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcHVsbGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHVsbE91dE9mQ2VpbGluZygpOiBudW1iZXIge1xyXG4gICAgICAgIGxldCBwdWxsZWQgPSAwO1xyXG4gICAgICAgIGNvbnN0IHdvcmxkID0gdGhpcy5zY2VuZS53b3JsZDtcclxuXHJcbiAgICAgICAgd2hpbGUgKFxyXG4gICAgICAgICAgICB0aGlzLnkgPiAwXHJcbiAgICAgICAgICAgICYmIHdvcmxkLmNvbGxpZGVzV2l0aChcclxuICAgICAgICAgICAgICAgIHRoaXMueCwgdGhpcy55ICsgdGhpcy5oZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBbIHRoaXMgXSxcclxuICAgICAgICAgICAgICAgIFsgRW52aXJvbm1lbnQuUExBVEZPUk0sIEVudmlyb25tZW50LldBVEVSIF1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBwdWxsZWQrKztcclxuICAgICAgICAgICAgdGhpcy55LS07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcHVsbGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHVsbE91dE9mV2FsbCgpOiBudW1iZXIge1xyXG4gICAgICAgIGxldCBwdWxsZWQgPSAwO1xyXG4gICAgICAgIGNvbnN0IHdvcmxkID0gdGhpcy5zY2VuZS53b3JsZDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0VmVsb2NpdHlYKCkgPiAwKSB7XHJcbiAgICAgICAgICAgIHdoaWxlIChcclxuICAgICAgICAgICAgICAgIHdvcmxkLmNvbGxpZGVzV2l0aFZlcnRpY2FsTGluZShcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnggKyB0aGlzLndpZHRoIC8gMiwgdGhpcy55ICsgdGhpcy5oZWlnaHQgKiAzIC8gNCxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgWyB0aGlzIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgWyBFbnZpcm9ubWVudC5QTEFURk9STSwgRW52aXJvbm1lbnQuV0FURVIgXVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMueC0tO1xyXG4gICAgICAgICAgICAgICAgcHVsbGVkKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB3aGlsZSAoXHJcbiAgICAgICAgICAgICAgICB3b3JsZC5jb2xsaWRlc1dpdGhWZXJ0aWNhbExpbmUoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy54IC0gdGhpcy53aWR0aCAvIDIsIHRoaXMueSArIHRoaXMuaGVpZ2h0ICogMyAvIDQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIFsgdGhpcyBdLFxyXG4gICAgICAgICAgICAgICAgICAgIFsgRW52aXJvbm1lbnQuUExBVEZPUk0sIEVudmlyb25tZW50LldBVEVSIF1cclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLngrKztcclxuICAgICAgICAgICAgICAgIHB1bGxlZCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcHVsbGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbmV4dFN0YXRlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBCaXJkU3RhdGUuRkxZSU5HX0xFRlQpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IEJpcmRTdGF0ZS5XQUlUSU5HX0xFRlQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHRoaXMuc3RhdGUgKyAxO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNSZWFkeUZvckNvbnZlcnNhdGlvbigpOiBib29sZWFuIHwgbnVsbCB7XHJcbiAgICAgICAgY29uc3Qgc3VwZXJSZXN1bHQgPSBzdXBlci5pc1JlYWR5Rm9yQ29udmVyc2F0aW9uKCk7XHJcbiAgICAgICAgcmV0dXJuIChzdXBlclJlc3VsdCAmJiB0aGlzLmlzV2FpdGluZygpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZHJhdyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBhbHBoYTogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lLnBldHRpbmdDdXRzY2VuZSkge1xyXG4gICAgICAgICAgICBhbHBoYSA9IE1hdGgubWF4KDAsIDEgLSAodGhpcy5zY2VuZS5wZXR0aW5nQ3V0c2NlbmVUaW1lIC8gUEVUVElOR19FTkRJTkdfQ1VUU0NFTkVfRFVSQVRJT04pKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUucmVuZGVyZXIuYWRkQXNlcHJpdGUoQmlyZC5zcHJpdGUsIFwiaWRsZVwiLCB0aGlzLngsIHRoaXMueSwgUmVuZGVyaW5nTGF5ZXIuRU5USVRJRVMsIHRoaXMuZGlyZWN0aW9uLCB1bmRlZmluZWQsIGFscGhhKTtcclxuICAgICAgICBpZiAodGhpcy5zY2VuZS5zaG93Qm91bmRzKSB0aGlzLmRyYXdCb3VuZHMoKTtcclxuICAgICAgICB0aGlzLnNwZWVjaEJ1YmJsZS5kcmF3KGN0eCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZShkdDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIudXBkYXRlKGR0KTtcclxuICAgICAgICB0aGlzLm1vdmUgPSAwO1xyXG5cclxuICAgICAgICAvLyBUcmlnZ2Vyc1xyXG4gICAgICAgIGNvbnN0IHRyaWdnZXJDb2xsaXNpb25zID0gdGhpcy5zY2VuZS53b3JsZC5nZXRUcmlnZ2VyQ29sbGlzaW9ucyh0aGlzKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuanVtcFRpbWVyID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmp1bXBUaW1lciAtPSBkdDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuanVtcFRpbWVyIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5qdW1wVGltZXIgPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoKHRoaXMuc3RhdGUgPT09IEJpcmRTdGF0ZS5XQUlUSU5HX0xFRlQgfHwgdGhpcy5zdGF0ZSA9PT0gQmlyZFN0YXRlLldBSVRJTkdfUklHSFQpICYmICF0aGlzLmhhc0FjdGl2ZUNvbnZlcnNhdGlvbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMud2FpdFRpbWVyICs9IGR0O1xyXG4gICAgICAgICAgICBpZiAodGhpcy53YWl0VGltZXIgPj0gV0FJVElOR19USU1FKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndhaXRUaW1lciA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5leHRTdGF0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gQmlyZFN0YXRlLkZMWUlOR19SSUdIVCB8fCB0aGlzLnN0YXRlID09PSBCaXJkU3RhdGUuRkxZSU5HX0xFRlQpIHtcclxuICAgICAgICAgICAgdGhpcy5tb3ZlID0gdGhpcy5zdGF0ZSA9PT0gQmlyZFN0YXRlLkZMWUlOR19SSUdIVCA/IDEgOiAtMTtcclxuICAgICAgICAgICAgaWYgKHRoaXMueSA8IHRoaXMubWluQWx0aXR1ZGUgJiYgdGhpcy5jYW5KdW1wKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuanVtcCgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gQmlyZFN0YXRlLkZMWUlOR19SSUdIVCAmJiB0cmlnZ2VyQ29sbGlzaW9ucy5sZW5ndGggPiAwICYmIHRyaWdnZXJDb2xsaXNpb25zLmZpbmQodCA9PiB0Lm5hbWUgPT09IFwiYmlyZF9uZXN0X3JpZ2h0XCIpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5leHRTdGF0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gQmlyZFN0YXRlLkZMWUlOR19MRUZUICYmIHRyaWdnZXJDb2xsaXNpb25zLmxlbmd0aCA+IDAgJiYgdHJpZ2dlckNvbGxpc2lvbnMuZmluZCh0ID0+IHQubmFtZSA9PT0gXCJiaXJkX25lc3RfbGVmdFwiKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0U3RhdGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQmlyZCBhY2NlbGVyYXRpb25cclxuICAgICAgICBpZiAodGhpcy5tb3ZlICE9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uID0gdGhpcy5tb3ZlO1xyXG4gICAgICAgICAgICB0aGlzLmFjY2VsZXJhdGVYKFBMQVlFUl9BQ0NFTEVSQVRJT05fQUlSICogZHQgKiB0aGlzLm1vdmUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdldFZlbG9jaXR5WCgpID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWNlbGVyYXRlWChQTEFZRVJfQUNDRUxFUkFUSU9OX0FJUiAqIGR0KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVjZWxlcmF0ZVgoLVBMQVlFUl9BQ0NFTEVSQVRJT05fQUlSICogZHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNwZWVjaEJ1YmJsZS51cGRhdGUodGhpcy54LCB0aGlzLnkpO1xyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFhQTtBQUNBO0FBUkE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQU1BO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQXBOQTtBQURBO0FBQ0E7QUFBQTtBQUVBO0FBREE7QUFDQTtBQUFBO0FBSkE7QUFEQTtBQWNBO0FBYkE7QUFBQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/entities/Bird.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/Bone.js":
|
|
/*!******************************!*\
|
|
!*** ./lib/entities/Bone.js ***!
|
|
\******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar Bone_1;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Bone = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst Conversation_1 = __webpack_require__(/*! ../Conversation */ \"./lib/Conversation.js\");\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst World_1 = __webpack_require__(/*! ../World */ \"./lib/World.js\");\nconst GameScene_1 = __webpack_require__(/*! ../scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst PhysicsEntity_1 = __webpack_require__(/*! ./PhysicsEntity */ \"./lib/entities/PhysicsEntity.js\");\nconst Renderer_1 = __webpack_require__(/*! ../Renderer */ \"./lib/Renderer.js\");\nconst Sound_1 = __webpack_require__(/*! ../Sound */ \"./lib/Sound.js\");\nlet Bone = Bone_1 = class Bone extends PhysicsEntity_1.PhysicsEntity {\n constructor(scene, x, y) {\n super(scene, x, y, 20, 10);\n }\n draw() {\n this.scene.renderer.addAseprite(Bone_1.sprite, \"idle\", this.x, this.y, Renderer_1.RenderingLayer.ENTITIES);\n if (this.scene.showBounds) {\n this.drawBounds();\n }\n }\n isCarried() {\n return this.scene.player.isCarrying(this);\n }\n update(dt) {\n super.update(dt);\n const player = this.scene.player;\n if (!this.isCarried() && this.distanceTo(player) < 20) {\n player.carry(this);\n }\n if (!this.isCarried() && this.scene.world.collidesWith(this.x, this.y - 5) === World_1.Environment.WATER) {\n const vx = this.getVelocityX();\n this.setVelocity(vx, 10);\n }\n if (Conversation_1.Conversation.getGlobals()[\"$gotBoneQuest\"] && !this.isCarried() && this.distanceTo(this.scene.powerShiba) < 20) {\n Bone_1.successSound.play();\n this.scene.powerShiba.feed();\n this.scene.removeGameObject(this);\n }\n }\n};\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/bone.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], Bone, \"sprite\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/throwing/success.mp3\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], Bone, \"successSound\", void 0);\nBone = Bone_1 = tslib_1.__decorate([\n Entity_1.entity(\"bone\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number])\n], Bone);\nexports.Bone = Bone;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvQm9uZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9lbnRpdGllcy9Cb25lLnRzP2EzN2UiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNlcHJpdGUgfSBmcm9tIFwiLi4vQXNlcHJpdGVcIjtcclxuaW1wb3J0IHsgYXNzZXQgfSBmcm9tIFwiLi4vQXNzZXRzXCI7XHJcbmltcG9ydCB7IENvbnZlcnNhdGlvbiB9IGZyb20gXCIuLi9Db252ZXJzYXRpb25cIjtcclxuaW1wb3J0IHsgZW50aXR5IH0gZnJvbSBcIi4uL0VudGl0eVwiO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gXCIuLi9Xb3JsZFwiO1xyXG5pbXBvcnQgeyBHYW1lU2NlbmUgfSBmcm9tIFwiLi4vc2NlbmVzL0dhbWVTY2VuZVwiO1xyXG5pbXBvcnQgeyBQaHlzaWNzRW50aXR5IH0gZnJvbSBcIi4vUGh5c2ljc0VudGl0eVwiO1xyXG5pbXBvcnQgeyBSZW5kZXJpbmdMYXllciB9IGZyb20gXCIuLi9SZW5kZXJlclwiO1xyXG5pbXBvcnQgeyBTb3VuZCB9IGZyb20gXCIuLi9Tb3VuZFwiO1xyXG5cclxuQGVudGl0eShcImJvbmVcIilcclxuZXhwb3J0IGNsYXNzIEJvbmUgZXh0ZW5kcyBQaHlzaWNzRW50aXR5IHtcclxuICAgIEBhc3NldChcInNwcml0ZXMvYm9uZS5hc2Vwcml0ZS5qc29uXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBzcHJpdGU6IEFzZXByaXRlO1xyXG5cclxuICAgIEBhc3NldChcInNvdW5kcy90aHJvd2luZy9zdWNjZXNzLm1wM1wiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgc3VjY2Vzc1NvdW5kOiBTb3VuZDtcclxuXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioc2NlbmU6IEdhbWVTY2VuZSwgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcclxuICAgICAgICBzdXBlcihzY2VuZSwgeCwgeSwgMjAsIDEwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZHJhdygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNjZW5lLnJlbmRlcmVyLmFkZEFzZXByaXRlKEJvbmUuc3ByaXRlLCBcImlkbGVcIiwgdGhpcy54LCB0aGlzLnksIFJlbmRlcmluZ0xheWVyLkVOVElUSUVTKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmUuc2hvd0JvdW5kcykge1xyXG4gICAgICAgICAgICB0aGlzLmRyYXdCb3VuZHMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzQ2FycmllZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zY2VuZS5wbGF5ZXIuaXNDYXJyeWluZyh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlKGR0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci51cGRhdGUoZHQpO1xyXG5cclxuICAgICAgICBjb25zdCBwbGF5ZXIgPSB0aGlzLnNjZW5lLnBsYXllcjtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzQ2FycmllZCgpICYmIHRoaXMuZGlzdGFuY2VUbyhwbGF5ZXIpIDwgMjApIHtcclxuICAgICAgICAgICAgcGxheWVyLmNhcnJ5KHRoaXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzQ2FycmllZCgpICYmIHRoaXMuc2NlbmUud29ybGQuY29sbGlkZXNXaXRoKHRoaXMueCwgdGhpcy55IC0gNSkgPT09IEVudmlyb25tZW50LldBVEVSKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZ4ID0gdGhpcy5nZXRWZWxvY2l0eVgoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRWZWxvY2l0eSh2eCwgMTApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKENvbnZlcnNhdGlvbi5nZXRHbG9iYWxzKClbXCIkZ290Qm9uZVF1ZXN0XCJdICYmICF0aGlzLmlzQ2FycmllZCgpICYmIHRoaXMuZGlzdGFuY2VUbyh0aGlzLnNjZW5lLnBvd2VyU2hpYmEpIDwgMjApIHtcclxuICAgICAgICAgICAgQm9uZS5zdWNjZXNzU291bmQucGxheSgpO1xyXG4gICAgICAgICAgICB0aGlzLnNjZW5lLnBvd2VyU2hpYmEuZmVlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLnNjZW5lLnJlbW92ZUdhbWVPYmplY3QodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQU9BO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF6Q0E7QUFEQTtBQUNBO0FBQUE7QUFHQTtBQURBO0FBQ0E7QUFBQTtBQUxBO0FBREE7QUFRQTtBQVBBO0FBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/entities/Bone.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/Campfire.js":
|
|
/*!**********************************!*\
|
|
!*** ./lib/entities/Campfire.js ***!
|
|
\**********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar Campfire_1;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Campfire = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst GameScene_1 = __webpack_require__(/*! ../scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst Renderer_1 = __webpack_require__(/*! ../Renderer */ \"./lib/Renderer.js\");\nlet Campfire = Campfire_1 = class Campfire extends Entity_1.Entity {\n constructor(scene, x, y) {\n super(scene, x, y, 14, 28, false);\n }\n draw() {\n this.scene.renderer.addAseprite(Campfire_1.sprite, \"idle\", this.x, this.y - 2, Renderer_1.RenderingLayer.ENTITIES);\n if (this.scene.showBounds) {\n this.drawBounds();\n }\n }\n update() { }\n};\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/campfire.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], Campfire, \"sprite\", void 0);\nCampfire = Campfire_1 = tslib_1.__decorate([\n Entity_1.entity(\"campfire\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number])\n], Campfire);\nexports.Campfire = Campfire;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvQ2FtcGZpcmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZW50aXRpZXMvQ2FtcGZpcmUudHM/MDIyOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc2Vwcml0ZSB9IGZyb20gXCIuLi9Bc2Vwcml0ZVwiO1xyXG5pbXBvcnQgeyBhc3NldCB9IGZyb20gXCIuLi9Bc3NldHNcIjtcclxuaW1wb3J0IHsgZW50aXR5LCBFbnRpdHkgfSBmcm9tIFwiLi4vRW50aXR5XCI7XHJcbmltcG9ydCB7IEdhbWVTY2VuZSB9IGZyb20gXCIuLi9zY2VuZXMvR2FtZVNjZW5lXCI7XHJcbmltcG9ydCB7IFJlbmRlcmluZ0xheWVyIH0gZnJvbSBcIi4uL1JlbmRlcmVyXCI7XHJcblxyXG5AZW50aXR5KFwiY2FtcGZpcmVcIilcclxuZXhwb3J0IGNsYXNzIENhbXBmaXJlIGV4dGVuZHMgRW50aXR5IHtcclxuICAgIEBhc3NldChcInNwcml0ZXMvY2FtcGZpcmUuYXNlcHJpdGUuanNvblwiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgc3ByaXRlOiBBc2Vwcml0ZTtcclxuXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioc2NlbmU6IEdhbWVTY2VuZSwgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcclxuICAgICAgICBzdXBlcihzY2VuZSwgeCwgeSwgMTQsIDI4LCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRyYXcoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zY2VuZS5yZW5kZXJlci5hZGRBc2Vwcml0ZShcclxuICAgICAgICAgICAgQ2FtcGZpcmUuc3ByaXRlLFxyXG4gICAgICAgICAgICBcImlkbGVcIixcclxuICAgICAgICAgICAgdGhpcy54LCB0aGlzLnkgLSAyLFxyXG4gICAgICAgICAgICBSZW5kZXJpbmdMYXllci5FTlRJVElFU1xyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lLnNob3dCb3VuZHMpIHtcclxuICAgICAgICAgICAgdGhpcy5kcmF3Qm91bmRzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGUoKTogdm9pZCB7fVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFJQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBcEJBO0FBREE7QUFDQTtBQUFBO0FBRkE7QUFEQTtBQUtBO0FBSkE7QUFBQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/entities/Campfire.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/Caveman.js":
|
|
/*!*********************************!*\
|
|
!*** ./lib/entities/Caveman.js ***!
|
|
\*********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar Caveman_1;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Caveman = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst GameScene_1 = __webpack_require__(/*! ../scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst NPC_1 = __webpack_require__(/*! ./NPC */ \"./lib/entities/NPC.js\");\nconst Renderer_1 = __webpack_require__(/*! ../Renderer */ \"./lib/Renderer.js\");\nlet Caveman = Caveman_1 = class Caveman extends NPC_1.NPC {\n constructor(scene, x, y) {\n super(scene, x, y, 18, 24);\n }\n draw(ctx) {\n this.scene.renderer.addAseprite(Caveman_1.sprite, \"idle\", this.x, this.y, Renderer_1.RenderingLayer.ENTITIES, this.direction);\n if (this.scene.showBounds) {\n this.drawBounds();\n }\n this.speechBubble.draw(ctx);\n }\n update(dt) {\n super.update(dt);\n this.speechBubble.update(this.x, this.y);\n }\n};\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/caveman.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], Caveman, \"sprite\", void 0);\nCaveman = Caveman_1 = tslib_1.__decorate([\n Entity_1.entity(\"caveman\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number])\n], Caveman);\nexports.Caveman = Caveman;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvQ2F2ZW1hbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9lbnRpdGllcy9DYXZlbWFuLnRzPzI2ODEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNlcHJpdGUgfSBmcm9tIFwiLi4vQXNlcHJpdGVcIjtcclxuaW1wb3J0IHsgYXNzZXQgfSBmcm9tIFwiLi4vQXNzZXRzXCI7XHJcbmltcG9ydCB7IGVudGl0eSB9IGZyb20gXCIuLi9FbnRpdHlcIjtcclxuaW1wb3J0IHsgR2FtZVNjZW5lIH0gZnJvbSBcIi4uL3NjZW5lcy9HYW1lU2NlbmVcIjtcclxuaW1wb3J0IHsgTlBDIH0gZnJvbSBcIi4vTlBDXCI7XHJcbmltcG9ydCB7IFJlbmRlcmluZ0xheWVyIH0gZnJvbSBcIi4uL1JlbmRlcmVyXCI7XHJcblxyXG5AZW50aXR5KFwiY2F2ZW1hblwiKVxyXG5leHBvcnQgY2xhc3MgQ2F2ZW1hbiBleHRlbmRzIE5QQyB7XHJcbiAgICBAYXNzZXQoXCJzcHJpdGVzL2NhdmVtYW4uYXNlcHJpdGUuanNvblwiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgc3ByaXRlOiBBc2Vwcml0ZTtcclxuXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioc2NlbmU6IEdhbWVTY2VuZSwgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcclxuICAgICAgICBzdXBlcihzY2VuZSwgeCwgeSwgMTgsIDI0KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZHJhdyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2NlbmUucmVuZGVyZXIuYWRkQXNlcHJpdGUoXHJcbiAgICAgICAgICAgIENhdmVtYW4uc3ByaXRlLFxyXG4gICAgICAgICAgICBcImlkbGVcIixcclxuICAgICAgICAgICAgdGhpcy54LCB0aGlzLnksXHJcbiAgICAgICAgICAgIFJlbmRlcmluZ0xheWVyLkVOVElUSUVTLFxyXG4gICAgICAgICAgICB0aGlzLmRpcmVjdGlvblxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lLnNob3dCb3VuZHMpIHtcclxuICAgICAgICAgICAgdGhpcy5kcmF3Qm91bmRzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNwZWVjaEJ1YmJsZS5kcmF3KGN0eCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZShkdDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIudXBkYXRlKGR0KTtcclxuICAgICAgICB0aGlzLnNwZWVjaEJ1YmJsZS51cGRhdGUodGhpcy54LCB0aGlzLnkpO1xyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUlBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTFCQTtBQURBO0FBQ0E7QUFBQTtBQUZBO0FBREE7QUFLQTtBQUpBO0FBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/entities/Caveman.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/Chicken.js":
|
|
/*!*********************************!*\
|
|
!*** ./lib/entities/Chicken.js ***!
|
|
\*********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar Chicken_1;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Chicken = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst Conversation_1 = __webpack_require__(/*! ../Conversation */ \"./lib/Conversation.js\");\nconst chicken_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../../assets/dialog/chicken.dialog.json */ \"./assets/dialog/chicken.dialog.json\"));\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst GameScene_1 = __webpack_require__(/*! ../scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst NPC_1 = __webpack_require__(/*! ./NPC */ \"./lib/entities/NPC.js\");\nconst Renderer_1 = __webpack_require__(/*! ../Renderer */ \"./lib/Renderer.js\");\nlet Chicken = Chicken_1 = class Chicken extends NPC_1.NPC {\n constructor(scene, x, y) {\n super(scene, x, y, 24, 18);\n this.lookAtPlayer = false;\n this.conversation = new Conversation_1.Conversation(chicken_dialog_json_1.default, this);\n }\n getInteractionText() {\n if (!this.met) {\n return \"Touch\";\n }\n else {\n return \"Talk\";\n }\n }\n draw(ctx) {\n this.scene.renderer.addAseprite(Chicken_1.sprite, \"idle\", this.x, this.y, Renderer_1.RenderingLayer.ENTITIES, this.direction);\n if (this.scene.showBounds) {\n this.drawBounds();\n }\n this.speechBubble.draw(ctx);\n }\n update(dt) {\n super.update(dt);\n this.speechBubble.update(this.x, this.y);\n }\n};\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/chicken.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], Chicken, \"sprite\", void 0);\nChicken = Chicken_1 = tslib_1.__decorate([\n Entity_1.entity(\"chicken\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number])\n], Chicken);\nexports.Chicken = Chicken;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvQ2hpY2tlbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9lbnRpdGllcy9DaGlja2VuLnRzPzM2ZjgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNlcHJpdGUgfSBmcm9tIFwiLi4vQXNlcHJpdGVcIjtcclxuaW1wb3J0IHsgYXNzZXQgfSBmcm9tIFwiLi4vQXNzZXRzXCI7XHJcbmltcG9ydCB7IENvbnZlcnNhdGlvbiB9IGZyb20gXCIuLi9Db252ZXJzYXRpb25cIjtcclxuaW1wb3J0IGNvbnZlcnNhdGlvbiBmcm9tIFwiLi4vLi4vYXNzZXRzL2RpYWxvZy9jaGlja2VuLmRpYWxvZy5qc29uXCI7XHJcbmltcG9ydCB7IGVudGl0eSB9IGZyb20gXCIuLi9FbnRpdHlcIjtcclxuaW1wb3J0IHsgR2FtZVNjZW5lIH0gZnJvbSBcIi4uL3NjZW5lcy9HYW1lU2NlbmVcIjtcclxuaW1wb3J0IHsgTlBDIH0gZnJvbSBcIi4vTlBDXCI7XHJcbmltcG9ydCB7IFJlbmRlcmluZ0xheWVyIH0gZnJvbSBcIi4uL1JlbmRlcmVyXCI7XHJcblxyXG5AZW50aXR5KFwiY2hpY2tlblwiKVxyXG5leHBvcnQgY2xhc3MgQ2hpY2tlbiBleHRlbmRzIE5QQyB7XHJcbiAgICBAYXNzZXQoXCJzcHJpdGVzL2NoaWNrZW4uYXNlcHJpdGUuanNvblwiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgc3ByaXRlOiBBc2Vwcml0ZTtcclxuXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioc2NlbmU6IEdhbWVTY2VuZSwgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcclxuICAgICAgICBzdXBlcihzY2VuZSwgeCwgeSwgMjQsIDE4KTtcclxuXHJcbiAgICAgICAgdGhpcy5sb29rQXRQbGF5ZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbiA9IG5ldyBDb252ZXJzYXRpb24oY29udmVyc2F0aW9uLCB0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SW50ZXJhY3Rpb25UZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm1ldCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJUb3VjaFwiO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIlRhbGtcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRyYXcoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNjZW5lLnJlbmRlcmVyLmFkZEFzZXByaXRlKFxyXG4gICAgICAgICAgICBDaGlja2VuLnNwcml0ZSxcclxuICAgICAgICAgICAgXCJpZGxlXCIsXHJcbiAgICAgICAgICAgIHRoaXMueCwgdGhpcy55LFxyXG4gICAgICAgICAgICBSZW5kZXJpbmdMYXllci5FTlRJVElFUyxcclxuICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb25cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zY2VuZS5zaG93Qm91bmRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhd0JvdW5kcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zcGVlY2hCdWJibGUuZHJhdyhjdHgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGUoZHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLnVwZGF0ZShkdCk7XHJcbiAgICAgICAgdGhpcy5zcGVlY2hCdWJibGUudXBkYXRlKHRoaXMueCwgdGhpcy55KTtcclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFyQ0E7QUFEQTtBQUNBO0FBQUE7QUFGQTtBQURBO0FBS0E7QUFKQTtBQUFBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/entities/Chicken.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/Cloud.js":
|
|
/*!*******************************!*\
|
|
!*** ./lib/entities/Cloud.js ***!
|
|
\*******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar Cloud_1;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Cloud = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst GameScene_1 = __webpack_require__(/*! ../scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst World_1 = __webpack_require__(/*! ../World */ \"./lib/World.js\");\nconst Particles_1 = __webpack_require__(/*! ../Particles */ \"./lib/Particles.js\");\nconst PhysicsEntity_1 = __webpack_require__(/*! ./PhysicsEntity */ \"./lib/entities/PhysicsEntity.js\");\nconst constants_1 = __webpack_require__(/*! ../constants */ \"./lib/constants.js\");\nconst Renderer_1 = __webpack_require__(/*! ../Renderer */ \"./lib/Renderer.js\");\nconst util_1 = __webpack_require__(/*! ../util */ \"./lib/util.js\");\nlet Cloud = Cloud_1 = class Cloud extends PhysicsEntity_1.PhysicsEntity {\n constructor(scene, x, y, properties, canRain = false) {\n super(scene, x, y, 74, 5);\n this.raining = 0;\n this.isRainCloud = false;\n this.setFloating(true);\n this.startX = this.targetX = x;\n this.startY = this.targetY = y;\n this.isRainCloud = canRain;\n this.velocity = properties.velocity / constants_1.PIXEL_PER_METER;\n if (properties.direction === \"right\") {\n this.targetX = x + properties.distance;\n this.setVelocityX(this.velocity);\n }\n else if (properties.direction === \"left\") {\n this.targetX = x - properties.distance;\n this.setVelocityX(-this.velocity);\n }\n else if (properties.direction === \"up\") {\n this.targetY = y + properties.distance;\n this.setVelocityY(this.velocity);\n }\n else if (properties.direction === \"down\") {\n this.targetY = y - properties.distance;\n this.setVelocityY(-this.velocity);\n }\n this.rainEmitter = this.scene.particles.createEmitter({\n position: { x: this.x, y: this.y },\n offset: () => ({ x: util_1.rnd(-1, 1) * 26, y: util_1.rnd(-1, 1) * 5 }),\n velocity: () => ({\n x: this.getVelocityX() * constants_1.PIXEL_PER_METER + util_1.rnd(-1, 1) * 5,\n y: this.getVelocityY() * constants_1.PIXEL_PER_METER - util_1.rnd(50, 80)\n }),\n color: () => Cloud_1.raindrop,\n size: 4,\n gravity: { x: 0, y: -100 },\n lifetime: () => util_1.rnd(0.7, 1.2),\n alpha: 0.6,\n alphaCurve: Particles_1.valueCurves.linear.invert()\n });\n }\n startRain(time = Infinity) {\n this.raining = time;\n }\n isRaining() {\n return this.raining > 0;\n }\n canRain() {\n return this.isRainCloud;\n }\n draw() {\n this.scene.renderer.addAseprite(Cloud_1.sprite, \"idle\", this.x, this.y, Renderer_1.RenderingLayer.PLATFORMS);\n }\n update(dt) {\n super.update(dt);\n if (this.getVelocityY() > 0) {\n if (this.y >= Math.max(this.startY, this.targetY)) {\n this.y = Math.max(this.startY, this.targetY);\n this.setVelocityY(-this.velocity);\n }\n }\n else if (this.getVelocityY() < 0) {\n if (this.y <= Math.min(this.startY, this.targetY)) {\n this.y = Math.min(this.startY, this.targetY);\n this.setVelocityY(this.velocity);\n }\n }\n if (this.getVelocityX() > 0) {\n if (this.x >= Math.max(this.targetX, this.startX)) {\n this.x = Math.max(this.targetX, this.startX);\n this.setVelocityX(-this.velocity);\n }\n }\n else if (this.getVelocityX() < 0) {\n if (this.x <= Math.min(this.startX, this.targetX)) {\n this.x = Math.min(this.startX, this.targetX);\n this.setVelocityX(this.velocity);\n }\n }\n if (this.raining) {\n this.raining -= dt;\n if (this.raining <= 0) {\n this.raining = 0;\n }\n else {\n if (util_1.timedRnd(dt, 0.1)) {\n this.rainEmitter.setPosition(this.x, this.y);\n this.rainEmitter.emit(util_1.rndInt(1, 4));\n }\n }\n }\n }\n collidesWith(x, y) {\n if (x >= this.x - this.width / 2\n && x <= this.x + this.width / 2\n && y >= this.y\n && y <= this.y + this.height) {\n return World_1.Environment.PLATFORM;\n }\n return World_1.Environment.AIR;\n }\n};\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/cloud3.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], Cloud, \"sprite\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/raindrop.png\"),\n tslib_1.__metadata(\"design:type\", HTMLImageElement)\n], Cloud, \"raindrop\", void 0);\nCloud = Cloud_1 = tslib_1.__decorate([\n Entity_1.entity(\"cloud\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number, Object, Object])\n], Cloud);\nexports.Cloud = Cloud;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvQ2xvdWQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZW50aXRpZXMvQ2xvdWQudHM/ZDNiNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc2Vwcml0ZSB9IGZyb20gXCIuLi9Bc2Vwcml0ZVwiO1xyXG5pbXBvcnQgeyBhc3NldCB9IGZyb20gXCIuLi9Bc3NldHNcIjtcclxuaW1wb3J0IHsgQ29sbGlkYWJsZUdhbWVPYmplY3QsIEdhbWVTY2VuZSB9IGZyb20gXCIuLi9zY2VuZXMvR2FtZVNjZW5lXCI7XHJcbmltcG9ydCB7IGVudGl0eSB9IGZyb20gXCIuLi9FbnRpdHlcIjtcclxuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tIFwiLi4vV29ybGRcIjtcclxuaW1wb3J0IHsgR2FtZU9iamVjdFByb3BlcnRpZXMgfSBmcm9tIFwiLi4vTWFwSW5mb1wiO1xyXG5pbXBvcnQgeyBQYXJ0aWNsZUVtaXR0ZXIsIHZhbHVlQ3VydmVzIH0gZnJvbSBcIi4uL1BhcnRpY2xlc1wiO1xyXG5pbXBvcnQgeyBQaHlzaWNzRW50aXR5IH0gZnJvbSBcIi4vUGh5c2ljc0VudGl0eVwiO1xyXG5pbXBvcnQgeyBQSVhFTF9QRVJfTUVURVIgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IFJlbmRlcmluZ0xheWVyIH0gZnJvbSBcIi4uL1JlbmRlcmVyXCI7XHJcbmltcG9ydCB7IHJuZCwgcm5kSW50LCB0aW1lZFJuZCB9IGZyb20gXCIuLi91dGlsXCI7XHJcblxyXG5AZW50aXR5KFwiY2xvdWRcIilcclxuZXhwb3J0IGNsYXNzIENsb3VkIGV4dGVuZHMgUGh5c2ljc0VudGl0eSBpbXBsZW1lbnRzIENvbGxpZGFibGVHYW1lT2JqZWN0IHtcclxuICAgIEBhc3NldChcInNwcml0ZXMvY2xvdWQzLmFzZXByaXRlLmpzb25cIilcclxuICAgIHByaXZhdGUgc3RhdGljIHNwcml0ZTogQXNlcHJpdGU7XHJcblxyXG4gICAgQGFzc2V0KFwic3ByaXRlcy9yYWluZHJvcC5wbmdcIilcclxuICAgIHByaXZhdGUgc3RhdGljIHJhaW5kcm9wOiBIVE1MSW1hZ2VFbGVtZW50O1xyXG5cclxuICAgIHByaXZhdGUgc3RhcnRYOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIHN0YXJ0WTogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSB0YXJnZXRYOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIHRhcmdldFk6IG51bWJlcjtcclxuICAgIHByaXZhdGUgdmVsb2NpdHk6IG51bWJlcjtcclxuXHJcbiAgICBwcml2YXRlIHJhaW5FbWl0dGVyOiBQYXJ0aWNsZUVtaXR0ZXI7XHJcbiAgICBwcml2YXRlIHJhaW5pbmcgPSAwO1xyXG4gICAgcHJpdmF0ZSBpc1JhaW5DbG91ZCA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihzY2VuZTogR2FtZVNjZW5lLCB4OiBudW1iZXIsIHk6IG51bWJlciwgcHJvcGVydGllczogR2FtZU9iamVjdFByb3BlcnRpZXMsIGNhblJhaW4gPSBmYWxzZSkge1xyXG4gICAgICAgIHN1cGVyKHNjZW5lLCB4LCB5LCA3NCwgNSk7XHJcbiAgICAgICAgdGhpcy5zZXRGbG9hdGluZyh0cnVlKTtcclxuICAgICAgICB0aGlzLnN0YXJ0WCA9IHRoaXMudGFyZ2V0WCA9IHg7XHJcbiAgICAgICAgdGhpcy5zdGFydFkgPSB0aGlzLnRhcmdldFkgPSB5O1xyXG4gICAgICAgIHRoaXMuaXNSYWluQ2xvdWQgPSBjYW5SYWluO1xyXG4gICAgICAgIHRoaXMudmVsb2NpdHkgPSBwcm9wZXJ0aWVzLnZlbG9jaXR5IC8gUElYRUxfUEVSX01FVEVSO1xyXG5cclxuICAgICAgICBpZiAocHJvcGVydGllcy5kaXJlY3Rpb24gPT09IFwicmlnaHRcIikge1xyXG4gICAgICAgICAgICB0aGlzLnRhcmdldFggPSB4ICsgcHJvcGVydGllcy5kaXN0YW5jZTtcclxuICAgICAgICAgICAgdGhpcy5zZXRWZWxvY2l0eVgodGhpcy52ZWxvY2l0eSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0aWVzLmRpcmVjdGlvbiA9PT0gXCJsZWZ0XCIpIHtcclxuICAgICAgICAgICAgdGhpcy50YXJnZXRYID0geCAtIHByb3BlcnRpZXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmVsb2NpdHlYKC10aGlzLnZlbG9jaXR5KTtcclxuICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnRpZXMuZGlyZWN0aW9uID09PSBcInVwXCIpIHtcclxuICAgICAgICAgICAgdGhpcy50YXJnZXRZID0geSArIHByb3BlcnRpZXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmVsb2NpdHlZKHRoaXMudmVsb2NpdHkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocHJvcGVydGllcy5kaXJlY3Rpb24gPT09IFwiZG93blwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0WSA9IHkgLSBwcm9wZXJ0aWVzLmRpc3RhbmNlO1xyXG4gICAgICAgICAgICB0aGlzLnNldFZlbG9jaXR5WSgtdGhpcy52ZWxvY2l0eSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJhaW5FbWl0dGVyID0gdGhpcy5zY2VuZS5wYXJ0aWNsZXMuY3JlYXRlRW1pdHRlcih7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7eDogdGhpcy54LCB5OiB0aGlzLnl9LFxyXG4gICAgICAgICAgICBvZmZzZXQ6ICgpID0+ICh7eDogcm5kKC0xLCAxKSAqIDI2LCB5OiBybmQoLTEsIDEpICogNX0pLFxyXG4gICAgICAgICAgICB2ZWxvY2l0eTogKCkgPT4gKHtcclxuICAgICAgICAgICAgICAgIHg6IHRoaXMuZ2V0VmVsb2NpdHlYKCkgKiBQSVhFTF9QRVJfTUVURVIgKyBybmQoLTEsIDEpICogNSxcclxuICAgICAgICAgICAgICAgIHk6IHRoaXMuZ2V0VmVsb2NpdHlZKCkgKiBQSVhFTF9QRVJfTUVURVIgLSBybmQoNTAsIDgwKVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgY29sb3I6ICgpID0+IENsb3VkLnJhaW5kcm9wLFxyXG4gICAgICAgICAgICBzaXplOiA0LFxyXG4gICAgICAgICAgICBncmF2aXR5OiB7eDogMCwgeTogLTEwMH0sXHJcbiAgICAgICAgICAgIGxpZmV0aW1lOiAoKSA9PiBybmQoMC43LCAxLjIpLFxyXG4gICAgICAgICAgICBhbHBoYTogMC42LFxyXG4gICAgICAgICAgICBhbHBoYUN1cnZlOiB2YWx1ZUN1cnZlcy5saW5lYXIuaW52ZXJ0KClcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRSYWluKHRpbWU6IG51bWJlciA9IEluZmluaXR5KSB7XHJcbiAgICAgICAgdGhpcy5yYWluaW5nID0gdGltZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNSYWluaW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJhaW5pbmcgPiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYW5SYWluKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzUmFpbkNsb3VkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkcmF3KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2NlbmUucmVuZGVyZXIuYWRkQXNlcHJpdGUoXHJcbiAgICAgICAgICAgIENsb3VkLnNwcml0ZSxcclxuICAgICAgICAgICAgXCJpZGxlXCIsXHJcbiAgICAgICAgICAgIHRoaXMueCwgdGhpcy55LFxyXG4gICAgICAgICAgICBSZW5kZXJpbmdMYXllci5QTEFURk9STVNcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGUoZHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLnVwZGF0ZShkdCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdldFZlbG9jaXR5WSgpID4gMCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy55ID49IE1hdGgubWF4KHRoaXMuc3RhcnRZLCB0aGlzLnRhcmdldFkpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnkgPSBNYXRoLm1heCh0aGlzLnN0YXJ0WSwgdGhpcy50YXJnZXRZKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmVsb2NpdHlZKC10aGlzLnZlbG9jaXR5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRWZWxvY2l0eVkoKSA8IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMueSA8PSBNYXRoLm1pbih0aGlzLnN0YXJ0WSwgdGhpcy50YXJnZXRZKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy55ID0gTWF0aC5taW4odGhpcy5zdGFydFksIHRoaXMudGFyZ2V0WSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZlbG9jaXR5WSh0aGlzLnZlbG9jaXR5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0VmVsb2NpdHlYKCkgPiAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnggPj0gTWF0aC5tYXgodGhpcy50YXJnZXRYLCB0aGlzLnN0YXJ0WCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMueCA9IE1hdGgubWF4KHRoaXMudGFyZ2V0WCwgdGhpcy5zdGFydFgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWZWxvY2l0eVgoLXRoaXMudmVsb2NpdHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldFZlbG9jaXR5WCgpIDwgMCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy54IDw9IE1hdGgubWluKHRoaXMuc3RhcnRYLCB0aGlzLnRhcmdldFgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnggPSBNYXRoLm1pbih0aGlzLnN0YXJ0WCwgdGhpcy50YXJnZXRYKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmVsb2NpdHlYKHRoaXMudmVsb2NpdHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5yYWluaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmFpbmluZyAtPSBkdDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJhaW5pbmcgPD0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yYWluaW5nID0gMDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aW1lZFJuZChkdCwgMC4xKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmFpbkVtaXR0ZXIuc2V0UG9zaXRpb24odGhpcy54LCB0aGlzLnkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmFpbkVtaXR0ZXIuZW1pdChybmRJbnQoMSwgNCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb2xsaWRlc1dpdGgoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgeCA+PSB0aGlzLnggLSB0aGlzLndpZHRoIC8gMlxyXG4gICAgICAgICAgICAmJiB4IDw9IHRoaXMueCArIHRoaXMud2lkdGggLyAyXHJcbiAgICAgICAgICAgICYmIHkgPj0gdGhpcy55XHJcbiAgICAgICAgICAgICYmIHkgPD0gdGhpcy55ICsgdGhpcy5oZWlnaHRcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuIEVudmlyb25tZW50LlBMQVRGT1JNO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIEVudmlyb25tZW50LkFJUjtcclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQWlCQTtBQUNBO0FBSkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFNQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBL0hBO0FBREE7QUFDQTtBQUFBO0FBR0E7QUFEQTtBQUNBO0FBQUE7QUFMQTtBQURBO0FBa0JBO0FBakJBO0FBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/entities/Cloud.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/ExitPortal.js":
|
|
/*!************************************!*\
|
|
!*** ./lib/entities/ExitPortal.js ***!
|
|
\************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar ExitPortal_1;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ExitPortal = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst GameScene_1 = __webpack_require__(/*! ../scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst Sound_1 = __webpack_require__(/*! ../Sound */ \"./lib/Sound.js\");\nvar PortalAnimationState;\n(function (PortalAnimationState) {\n PortalAnimationState[PortalAnimationState[\"OFF\"] = 0] = \"OFF\";\n PortalAnimationState[PortalAnimationState[\"FADEIN\"] = 1] = \"FADEIN\";\n PortalAnimationState[PortalAnimationState[\"IDLE\"] = 2] = \"IDLE\";\n})(PortalAnimationState || (PortalAnimationState = {}));\nlet ExitPortal = ExitPortal_1 = class ExitPortal extends Entity_1.Entity {\n constructor(scene, x, y) {\n super(scene, x, y, 32, 50, false);\n this.animationState = PortalAnimationState.OFF;\n this.animator.assignSprite(ExitPortal_1.sprite);\n }\n activate() {\n if (this.animationState === PortalAnimationState.OFF) {\n ExitPortal_1.sound.play();\n this.nextAnimationState();\n }\n }\n nextAnimationState() {\n this.animationState++;\n }\n draw() {\n switch (this.animationState) {\n case PortalAnimationState.OFF:\n this.animator.play(\"empty\", 1);\n break;\n case PortalAnimationState.FADEIN:\n this.animator.play(\"fadein\", 1, { loop: false, callback: this.nextAnimationState.bind(this) });\n break;\n case PortalAnimationState.IDLE:\n this.animator.play(\"idle\", 1);\n break;\n }\n if (this.scene.showBounds) {\n this.drawBounds();\n }\n }\n update(dt) {\n super.update(dt);\n }\n};\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/portal.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], ExitPortal, \"sprite\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/portal/portal.ogg\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], ExitPortal, \"sound\", void 0);\nExitPortal = ExitPortal_1 = tslib_1.__decorate([\n Entity_1.entity(\"exitportal\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number])\n], ExitPortal);\nexports.ExitPortal = ExitPortal;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvRXhpdFBvcnRhbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9lbnRpdGllcy9FeGl0UG9ydGFsLnRzPzRjNDAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNlcHJpdGUgfSBmcm9tIFwiLi4vQXNlcHJpdGVcIjtcclxuaW1wb3J0IHsgYXNzZXQgfSBmcm9tIFwiLi4vQXNzZXRzXCI7XHJcbmltcG9ydCB7IGVudGl0eSwgRW50aXR5IH0gZnJvbSBcIi4uL0VudGl0eVwiO1xyXG5pbXBvcnQgeyBHYW1lU2NlbmUgfSBmcm9tIFwiLi4vc2NlbmVzL0dhbWVTY2VuZVwiO1xyXG5pbXBvcnQgeyBTb3VuZCB9IGZyb20gXCIuLi9Tb3VuZFwiO1xyXG5cclxuZW51bSBQb3J0YWxBbmltYXRpb25TdGF0ZSB7IE9GRiwgRkFERUlOLCBJRExFIH1cclxuXHJcbkBlbnRpdHkoXCJleGl0cG9ydGFsXCIpXHJcbmV4cG9ydCBjbGFzcyBFeGl0UG9ydGFsIGV4dGVuZHMgRW50aXR5IHtcclxuICAgIEBhc3NldChcInNwcml0ZXMvcG9ydGFsLmFzZXByaXRlLmpzb25cIilcclxuICAgIHByaXZhdGUgc3RhdGljIHNwcml0ZTogQXNlcHJpdGU7XHJcblxyXG4gICAgQGFzc2V0KFwic291bmRzL3BvcnRhbC9wb3J0YWwub2dnXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBzb3VuZDogU291bmQ7XHJcblxyXG4gICAgcHJpdmF0ZSBhbmltYXRpb25TdGF0ZSA9IFBvcnRhbEFuaW1hdGlvblN0YXRlLk9GRjtcclxuXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioc2NlbmU6IEdhbWVTY2VuZSwgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcclxuICAgICAgICBzdXBlcihzY2VuZSwgeCwgeSwgMzIsIDUwLCBmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5hbmltYXRvci5hc3NpZ25TcHJpdGUoRXhpdFBvcnRhbC5zcHJpdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhY3RpdmF0ZSAoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uU3RhdGUgPT09IFBvcnRhbEFuaW1hdGlvblN0YXRlLk9GRikge1xyXG4gICAgICAgICAgICBFeGl0UG9ydGFsLnNvdW5kLnBsYXkoKTtcclxuICAgICAgICAgICAgdGhpcy5uZXh0QW5pbWF0aW9uU3RhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBuZXh0QW5pbWF0aW9uU3RhdGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hbmltYXRpb25TdGF0ZSsrO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkcmF3KCk6IHZvaWQge1xyXG4gICAgICAgIHN3aXRjaCAodGhpcy5hbmltYXRpb25TdGF0ZSkge1xyXG4gICAgICAgICAgICBjYXNlIFBvcnRhbEFuaW1hdGlvblN0YXRlLk9GRjpcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5pbWF0b3IucGxheShcImVtcHR5XCIsIDEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgUG9ydGFsQW5pbWF0aW9uU3RhdGUuRkFERUlOOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmltYXRvci5wbGF5KFwiZmFkZWluXCIsIDEsIHsgbG9vcDogZmFsc2UsIGNhbGxiYWNrOiB0aGlzLm5leHRBbmltYXRpb25TdGF0ZS5iaW5kKHRoaXMpIH0pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgUG9ydGFsQW5pbWF0aW9uU3RhdGUuSURMRTpcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5pbWF0b3IucGxheShcImlkbGVcIiwgMSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lLnNob3dCb3VuZHMpIHtcclxuICAgICAgICAgICAgdGhpcy5kcmF3Qm91bmRzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGUoZHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLnVwZGF0ZShkdCk7XHJcbiAgICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQVNBO0FBQ0E7QUFIQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBNUNBO0FBREE7QUFDQTtBQUFBO0FBR0E7QUFEQTtBQUNBO0FBQUE7QUFMQTtBQURBO0FBVUE7QUFUQTtBQUFBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/entities/ExitPortal.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/Fire.js":
|
|
/*!******************************!*\
|
|
!*** ./lib/entities/Fire.js ***!
|
|
\******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar Fire_1;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Fire = exports.FireState = exports.SHRINK_SIZE = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst Face_1 = __webpack_require__(/*! ../Face */ \"./lib/Face.js\");\nconst FireGfx_1 = __webpack_require__(/*! ../FireGfx */ \"./lib/FireGfx.js\");\nconst GameScene_1 = __webpack_require__(/*! ../scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst NPC_1 = __webpack_require__(/*! ./NPC */ \"./lib/entities/NPC.js\");\nconst Particles_1 = __webpack_require__(/*! ../Particles */ \"./lib/Particles.js\");\nconst constants_1 = __webpack_require__(/*! ../constants */ \"./lib/constants.js\");\nconst Quests_1 = __webpack_require__(/*! ../Quests */ \"./lib/Quests.js\");\nconst Renderer_1 = __webpack_require__(/*! ../Renderer */ \"./lib/Renderer.js\");\nconst util_1 = __webpack_require__(/*! ../util */ \"./lib/util.js\");\nconst Shiba_1 = __webpack_require__(/*! ./Shiba */ \"./lib/entities/Shiba.js\");\nconst Sound_1 = __webpack_require__(/*! ../Sound */ \"./lib/Sound.js\");\nconst SoundEmitter_1 = __webpack_require__(/*! ../SoundEmitter */ \"./lib/SoundEmitter.js\");\nexports.SHRINK_SIZE = 2;\nvar FireState;\n(function (FireState) {\n FireState[FireState[\"IDLE\"] = 0] = \"IDLE\";\n FireState[FireState[\"ANGRY\"] = 1] = \"ANGRY\";\n FireState[FireState[\"BEING_PUT_OUT\"] = 2] = \"BEING_PUT_OUT\";\n FireState[FireState[\"PUT_OUT\"] = 3] = \"PUT_OUT\";\n})(FireState = exports.FireState || (exports.FireState = {}));\nlet Fire = Fire_1 = class Fire extends NPC_1.NPC {\n constructor(scene, x, y) {\n super(scene, x, y, 1.5 * constants_1.PIXEL_PER_METER, 1.85 * constants_1.PIXEL_PER_METER);\n this.intensity = 5;\n this.state = FireState.IDLE;\n this.angry = false; // fire will be angry once wood was fed\n this.beingPutOut = false;\n this.growthTarget = 5;\n this.growth = 1;\n this.averageParticleDelay = 0.1;\n this.averageSteamDelay = 0.05;\n this.isVisible = true;\n this.fireGfx = new FireGfx_1.FireGfx();\n this.soundEmitter = new SoundEmitter_1.SoundEmitter(this.scene, this.x, this.y, Fire_1.fireAmbience, 0.7, 0.2);\n this.smokeEmitter = this.scene.particles.createEmitter({\n position: { x: this.x, y: this.y },\n offset: () => ({ x: util_1.rnd(-1, 1) * 3 * this.intensity, y: util_1.rnd(2) * this.intensity }),\n velocity: () => ({ x: util_1.rnd(-1, 1) * 15, y: 4 + util_1.rnd(3) }),\n color: () => Fire_1.smokeImage,\n size: () => util_1.rndInt(24, 32),\n gravity: { x: 0, y: 8 },\n lifetime: () => util_1.rnd(5, 8),\n alpha: () => util_1.rnd(0.2, 0.45),\n angleSpeed: () => util_1.rnd(-1, 1) * 1.5,\n blendMode: \"source-over\",\n alphaCurve: Particles_1.valueCurves.cos(0.1, 0.5),\n breakFactor: 0.85\n });\n this.steamEmitter = this.scene.particles.createEmitter({\n position: { x: this.x + 10, y: this.y },\n offset: () => ({ x: util_1.rnd(-1, 1) * 3, y: 0 }),\n velocity: () => ({ x: util_1.rnd(-1, 2) * 5, y: 50 + util_1.rnd(3) }),\n color: () => Fire_1.steamImage,\n size: () => util_1.rndInt(12, 18),\n gravity: { x: 0, y: 8 },\n lifetime: () => util_1.rnd(1, 3),\n alpha: () => util_1.rnd(0.5, 0.8),\n angleSpeed: () => util_1.rnd(-1, 1) * 3,\n blendMode: \"source-over\",\n alphaCurve: Particles_1.valueCurves.cos(0.1, 0.5),\n renderingLayer: Renderer_1.RenderingLayer.ENTITIES,\n zIndex: 1,\n breakFactor: 0.5\n });\n this.sparkEmitter = this.scene.particles.createEmitter({\n position: { x: this.x, y: this.y },\n velocity: () => ({ x: util_1.rnd(-1, 1) * 30, y: util_1.rnd(50, 100) }),\n color: () => FireGfx_1.FireGfx.gradient.getCss(Math.pow(util_1.rnd(), 0.5)),\n size: 2,\n gravity: { x: 0, y: -100 },\n lifetime: () => util_1.rnd(1, 1.5),\n blendMode: \"screen\",\n alpha: () => util_1.rnd(0.3, 1),\n alphaCurve: Particles_1.valueCurves.trapeze(0.05, 0.2)\n });\n this.face = new Face_1.Face(scene, this, Face_1.EyeType.STANDARD, 0, 6);\n }\n showDialoguePrompt() {\n if (!super.showDialoguePrompt()) {\n return false;\n }\n return (this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).getHighestTriggerIndex() === Quests_1.QuestATrigger.JUST_ARRIVED ||\n (this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).getHighestTriggerIndex() >= Quests_1.QuestATrigger.GOT_WOOD &&\n this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).getHighestTriggerIndex() < Quests_1.QuestATrigger.TALKED_TO_FIRE_WITH_WOOD) ||\n this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).getHighestTriggerIndex() === Quests_1.QuestATrigger.THROWN_WOOD_INTO_FIRE ||\n this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).getHighestTriggerIndex() === Quests_1.QuestATrigger.BEAT_FIRE);\n }\n isRendered() {\n return this.isVisible;\n }\n isAngry() {\n return this.state === FireState.ANGRY;\n }\n isBeingPutOut() {\n return this.state === FireState.BEING_PUT_OUT;\n }\n isPutOut() {\n return this.state === FireState.PUT_OUT;\n }\n setState(state) {\n this.state = state;\n if (state === FireState.BEING_PUT_OUT || state === FireState.PUT_OUT) {\n Fire_1.fireAmbience.stop();\n }\n }\n drawToCanvas(ctx) {\n ctx.save();\n ctx.translate(this.x, -this.y);\n ctx.scale(this.intensity / 5, this.intensity / 5);\n this.fireGfx.draw(ctx, 0, 0);\n ctx.restore();\n }\n draw(ctx) {\n if (!this.isVisible) {\n return;\n }\n this.scene.renderer.add({ type: Renderer_1.RenderingType.FIRE, layer: Renderer_1.RenderingLayer.ENTITIES, entity: this });\n this.drawFace(ctx);\n if (this.showDialoguePrompt()) {\n this.drawDialoguePrompt();\n }\n if (this.thinkBubble) {\n this.thinkBubble.draw(ctx);\n }\n this.speechBubble.draw(ctx);\n if (this.scene.showBounds) {\n this.drawBounds();\n }\n }\n update(dt) {\n var _a, _b;\n if (this.state === FireState.ANGRY && !this.beingPutOut) {\n (_a = this.face) === null || _a === void 0 ? void 0 : _a.setMode(Face_1.FaceModes.ANGRY);\n }\n else if (this.state === FireState.BEING_PUT_OUT) {\n (_b = this.face) === null || _b === void 0 ? void 0 : _b.setMode(Face_1.FaceModes.DISGUSTED);\n }\n if (this.intensity !== this.growthTarget) {\n this.intensity = util_1.shiftValue(this.intensity, this.growthTarget, this.growth * dt);\n }\n if (this.scene.friendshipCutscene\n && this.scene.shiba.getState() === Shiba_1.ShibaState.KILLING_FIRE\n && this.intensity <= exports.SHRINK_SIZE) {\n this.scene.shiba.nextState();\n }\n if (!this.scene.camera.isPointVisible(this.x, this.y, 200)) {\n this.isVisible = false;\n return;\n }\n this.isVisible = true;\n if (!this.isBeingPutOut() && !this.isPutOut()) {\n let particleChance = dt - util_1.rnd() * this.averageParticleDelay;\n while (particleChance > 0) {\n if (util_1.rnd() < 0.5) {\n this.sparkEmitter.emit();\n }\n if (util_1.rnd() < 0.32) {\n this.smokeEmitter.emit();\n }\n particleChance -= util_1.rnd() * this.averageParticleDelay;\n }\n this.soundEmitter.update();\n }\n if (this.isBeingPutOut()) {\n let steamParticleChance = dt - util_1.rnd() * this.averageSteamDelay;\n while (steamParticleChance > 0) {\n this.steamEmitter.emit();\n steamParticleChance -= util_1.rnd() * this.averageSteamDelay;\n }\n }\n if (this.isVisible) {\n this.fireGfx.update();\n }\n if (this.showDialoguePrompt()) {\n this.dialoguePrompt.update(dt, this.x, this.y + 32);\n }\n this.speechBubble.update(this.x, this.y);\n }\n feed(wood) {\n wood.remove();\n // Handle end of the world\n this.state = FireState.ANGRY;\n this.growthTarget = 14;\n this.scene.startApocalypseMusic();\n // Disable remaining dialogs\n this.conversation = null;\n // Remove any reachable NPCs\n for (const npc of [this.scene.shadowPresence]) {\n if (npc) {\n this.scene.removeGameObject(npc);\n }\n }\n // Player thoughts\n [\n [\"What…\", 2, 2],\n [\"What have I done?\", 6, 3],\n [\"I trusted you! I helped you!\", 10, 3]\n ].forEach(line => setTimeout(() => {\n this.scene.player.think(line[0], line[2] * 1000);\n }, line[1] * 1000));\n // Give fire new dialog\n setTimeout(() => {\n this.scene.game.campaign.runAction(\"enable\", null, [\"fire\", \"fire2\"]);\n }, 13500);\n }\n};\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/smoke.png\"),\n tslib_1.__metadata(\"design:type\", HTMLImageElement)\n], Fire, \"smokeImage\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/steam.png\"),\n tslib_1.__metadata(\"design:type\", HTMLImageElement)\n], Fire, \"steamImage\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/fire/fire.ogg\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], Fire, \"fireAmbience\", void 0);\nFire = Fire_1 = tslib_1.__decorate([\n Entity_1.entity(\"fire\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number])\n], Fire);\nexports.Fire = Fire;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvRmlyZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9lbnRpdGllcy9GaXJlLnRzPzA2NWEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXNzZXQgfSBmcm9tIFwiLi4vQXNzZXRzXCI7XHJcbmltcG9ydCB7IGVudGl0eSB9IGZyb20gXCIuLi9FbnRpdHlcIjtcclxuaW1wb3J0IHsgRXllVHlwZSwgRmFjZSwgRmFjZU1vZGVzIH0gZnJvbSBcIi4uL0ZhY2VcIjtcclxuaW1wb3J0IHsgRmlyZUdmeCB9IGZyb20gXCIuLi9GaXJlR2Z4XCI7XHJcbmltcG9ydCB7IEdhbWVTY2VuZSB9IGZyb20gXCIuLi9zY2VuZXMvR2FtZVNjZW5lXCI7XHJcbmltcG9ydCB7IE5QQyB9IGZyb20gXCIuL05QQ1wiO1xyXG5pbXBvcnQgeyBQYXJ0aWNsZUVtaXR0ZXIsIHZhbHVlQ3VydmVzIH0gZnJvbSBcIi4uL1BhcnRpY2xlc1wiO1xyXG5pbXBvcnQgeyBQSVhFTF9QRVJfTUVURVIgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IFF1ZXN0QVRyaWdnZXIsIFF1ZXN0S2V5IH0gZnJvbSBcIi4uL1F1ZXN0c1wiO1xyXG5pbXBvcnQgeyBSZW5kZXJpbmdMYXllciwgUmVuZGVyaW5nVHlwZSB9IGZyb20gXCIuLi9SZW5kZXJlclwiO1xyXG5pbXBvcnQgeyBybmQsIHJuZEludCwgc2hpZnRWYWx1ZSB9IGZyb20gXCIuLi91dGlsXCI7XHJcbmltcG9ydCB7IFNoaWJhU3RhdGUgfSBmcm9tIFwiLi9TaGliYVwiO1xyXG5pbXBvcnQgeyBTb3VuZCB9IGZyb20gXCIuLi9Tb3VuZFwiO1xyXG5pbXBvcnQgeyBTb3VuZEVtaXR0ZXIgfSBmcm9tIFwiLi4vU291bmRFbWl0dGVyXCI7XHJcbmltcG9ydCB7IFdvb2QgfSBmcm9tIFwiLi9Xb29kXCI7XHJcblxyXG5leHBvcnQgY29uc3QgU0hSSU5LX1NJWkUgPSAyO1xyXG5cclxuZXhwb3J0IGVudW0gRmlyZVN0YXRlIHtcclxuICAgIElETEUsXHJcbiAgICBBTkdSWSxcclxuICAgIEJFSU5HX1BVVF9PVVQsXHJcbiAgICBQVVRfT1VUXHJcbn1cclxuXHJcbkBlbnRpdHkoXCJmaXJlXCIpXHJcbmV4cG9ydCBjbGFzcyBGaXJlIGV4dGVuZHMgTlBDIHtcclxuICAgIEBhc3NldChcInNwcml0ZXMvc21va2UucG5nXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBzbW9rZUltYWdlOiBIVE1MSW1hZ2VFbGVtZW50O1xyXG5cclxuICAgIEBhc3NldChcInNwcml0ZXMvc3RlYW0ucG5nXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBzdGVhbUltYWdlOiBIVE1MSW1hZ2VFbGVtZW50O1xyXG5cclxuICAgIEBhc3NldChcInNvdW5kcy9maXJlL2ZpcmUub2dnXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBmaXJlQW1iaWVuY2U6IFNvdW5kO1xyXG4gICAgcHJpdmF0ZSBzb3VuZEVtaXR0ZXI6IFNvdW5kRW1pdHRlcjtcclxuXHJcbiAgICBwdWJsaWMgaW50ZW5zaXR5ID0gNTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGUgPSBGaXJlU3RhdGUuSURMRTtcclxuXHJcbiAgICBwdWJsaWMgYW5ncnkgPSBmYWxzZTsgLy8gZmlyZSB3aWxsIGJlIGFuZ3J5IG9uY2Ugd29vZCB3YXMgZmVkXHJcblxyXG4gICAgcHVibGljIGJlaW5nUHV0T3V0ID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGdyb3d0aFRhcmdldCA9IDU7XHJcblxyXG4gICAgcHVibGljIGdyb3d0aCA9IDE7XHJcblxyXG4gICAgcHJpdmF0ZSBhdmVyYWdlUGFydGljbGVEZWxheSA9IDAuMTtcclxuICAgIHByaXZhdGUgYXZlcmFnZVN0ZWFtRGVsYXkgPSAwLjA1O1xyXG5cclxuICAgIHByaXZhdGUgaXNWaXNpYmxlID0gdHJ1ZTtcclxuXHJcbiAgICBwcml2YXRlIGZpcmVHZnggPSBuZXcgRmlyZUdmeCgpO1xyXG5cclxuICAgIHByaXZhdGUgc3BhcmtFbWl0dGVyOiBQYXJ0aWNsZUVtaXR0ZXI7XHJcbiAgICBwcml2YXRlIHNtb2tlRW1pdHRlcjogUGFydGljbGVFbWl0dGVyO1xyXG4gICAgcHJpdmF0ZSBzdGVhbUVtaXR0ZXI6IFBhcnRpY2xlRW1pdHRlcjtcclxuXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioc2NlbmU6IEdhbWVTY2VuZSwgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcclxuICAgICAgICBzdXBlcihzY2VuZSwgeCwgeSwgMS41ICogUElYRUxfUEVSX01FVEVSLCAxLjg1ICogUElYRUxfUEVSX01FVEVSKTtcclxuXHJcbiAgICAgICAgdGhpcy5zb3VuZEVtaXR0ZXIgPSBuZXcgU291bmRFbWl0dGVyKHRoaXMuc2NlbmUsIHRoaXMueCwgdGhpcy55LCBGaXJlLmZpcmVBbWJpZW5jZSwgMC43LCAwLjIpO1xyXG5cclxuICAgICAgICB0aGlzLnNtb2tlRW1pdHRlciA9IHRoaXMuc2NlbmUucGFydGljbGVzLmNyZWF0ZUVtaXR0ZXIoe1xyXG4gICAgICAgICAgICBwb3NpdGlvbjoge3g6IHRoaXMueCwgeTogdGhpcy55fSxcclxuICAgICAgICAgICAgb2Zmc2V0OiAoKSA9PiAoeyB4OiBybmQoLTEsIDEpICogMyAqIHRoaXMuaW50ZW5zaXR5LCB5OiBybmQoMikgKiB0aGlzLmludGVuc2l0eSB9KSxcclxuICAgICAgICAgICAgdmVsb2NpdHk6ICgpID0+ICh7IHg6IHJuZCgtMSwgMSkgKiAxNSwgeTogNCArIHJuZCgzKSB9KSxcclxuICAgICAgICAgICAgY29sb3I6ICgpID0+IEZpcmUuc21va2VJbWFnZSxcclxuICAgICAgICAgICAgc2l6ZTogKCkgPT4gcm5kSW50KDI0LCAzMiksXHJcbiAgICAgICAgICAgIGdyYXZpdHk6IHt4OiAwLCB5OiA4fSxcclxuICAgICAgICAgICAgbGlmZXRpbWU6ICgpID0+IHJuZCg1LCA4KSxcclxuICAgICAgICAgICAgYWxwaGE6ICgpID0+IHJuZCgwLjIsIDAuNDUpLFxyXG4gICAgICAgICAgICBhbmdsZVNwZWVkOiAoKSA9PiBybmQoLTEsIDEpICogMS41LFxyXG4gICAgICAgICAgICBibGVuZE1vZGU6IFwic291cmNlLW92ZXJcIixcclxuICAgICAgICAgICAgYWxwaGFDdXJ2ZTogdmFsdWVDdXJ2ZXMuY29zKDAuMSwgMC41KSxcclxuICAgICAgICAgICAgYnJlYWtGYWN0b3I6IDAuODVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGVhbUVtaXR0ZXIgPSB0aGlzLnNjZW5lLnBhcnRpY2xlcy5jcmVhdGVFbWl0dGVyKHtcclxuICAgICAgICAgICAgcG9zaXRpb246IHt4OiB0aGlzLnggKyAxMCwgeTogdGhpcy55fSxcclxuICAgICAgICAgICAgb2Zmc2V0OiAoKSA9PiAoeyB4OiBybmQoLTEsIDEpICogMywgeTogMCB9KSxcclxuICAgICAgICAgICAgdmVsb2NpdHk6ICgpID0+ICh7IHg6IHJuZCgtMSwgMikgKiA1LCB5OiA1MCArIHJuZCgzKSB9KSxcclxuICAgICAgICAgICAgY29sb3I6ICgpID0+IEZpcmUuc3RlYW1JbWFnZSxcclxuICAgICAgICAgICAgc2l6ZTogKCkgPT4gcm5kSW50KDEyLCAxOCksXHJcbiAgICAgICAgICAgIGdyYXZpdHk6IHt4OiAwLCB5OiA4fSxcclxuICAgICAgICAgICAgbGlmZXRpbWU6ICgpID0+IHJuZCgxLCAzKSxcclxuICAgICAgICAgICAgYWxwaGE6ICgpID0+IHJuZCgwLjUsIDAuOCksXHJcbiAgICAgICAgICAgIGFuZ2xlU3BlZWQ6ICgpID0+IHJuZCgtMSwgMSkgKiAzLFxyXG4gICAgICAgICAgICBibGVuZE1vZGU6IFwic291cmNlLW92ZXJcIixcclxuICAgICAgICAgICAgYWxwaGFDdXJ2ZTogdmFsdWVDdXJ2ZXMuY29zKDAuMSwgMC41KSxcclxuICAgICAgICAgICAgcmVuZGVyaW5nTGF5ZXI6IFJlbmRlcmluZ0xheWVyLkVOVElUSUVTLFxyXG4gICAgICAgICAgICB6SW5kZXg6IDEsXHJcbiAgICAgICAgICAgIGJyZWFrRmFjdG9yOiAwLjVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zcGFya0VtaXR0ZXIgPSB0aGlzLnNjZW5lLnBhcnRpY2xlcy5jcmVhdGVFbWl0dGVyKHtcclxuICAgICAgICAgICAgcG9zaXRpb246IHt4OiB0aGlzLngsIHk6IHRoaXMueX0sXHJcbiAgICAgICAgICAgIHZlbG9jaXR5OiAoKSA9PiAoeyB4OiBybmQoLTEsIDEpICogMzAsIHk6IHJuZCg1MCwgMTAwKSB9KSxcclxuICAgICAgICAgICAgY29sb3I6ICgpID0+IEZpcmVHZnguZ3JhZGllbnQuZ2V0Q3NzKHJuZCgpICoqIDAuNSksXHJcbiAgICAgICAgICAgIHNpemU6IDIsXHJcbiAgICAgICAgICAgIGdyYXZpdHk6IHt4OiAwLCB5OiAtMTAwfSxcclxuICAgICAgICAgICAgbGlmZXRpbWU6ICgpID0+IHJuZCgxLCAxLjUpLFxyXG4gICAgICAgICAgICBibGVuZE1vZGU6IFwic2NyZWVuXCIsXHJcbiAgICAgICAgICAgIGFscGhhOiAoKSA9PiBybmQoMC4zLCAxKSxcclxuICAgICAgICAgICAgYWxwaGFDdXJ2ZTogdmFsdWVDdXJ2ZXMudHJhcGV6ZSgwLjA1LCAwLjIpXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZmFjZSA9IG5ldyBGYWNlKHNjZW5lLCB0aGlzLCBFeWVUeXBlLlNUQU5EQVJELCAwLCA2KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0RpYWxvZ3VlUHJvbXB0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghc3VwZXIuc2hvd0RpYWxvZ3VlUHJvbXB0KCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdGhpcy5zY2VuZS5nYW1lLmNhbXBhaWduLmdldFF1ZXN0KFF1ZXN0S2V5LkEpLmdldEhpZ2hlc3RUcmlnZ2VySW5kZXgoKSA9PT0gUXVlc3RBVHJpZ2dlci5KVVNUX0FSUklWRUQgfHxcclxuICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5nYW1lLmNhbXBhaWduLmdldFF1ZXN0KFF1ZXN0S2V5LkEpLmdldEhpZ2hlc3RUcmlnZ2VySW5kZXgoKSA+PSBRdWVzdEFUcmlnZ2VyLkdPVF9XT09EICYmXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLmdhbWUuY2FtcGFpZ24uZ2V0UXVlc3QoUXVlc3RLZXkuQSkuZ2V0SGlnaGVzdFRyaWdnZXJJbmRleCgpIDwgUXVlc3RBVHJpZ2dlci5UQUxLRURfVE9fRklSRV9XSVRIX1dPT0RcclxuICAgICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICB0aGlzLnNjZW5lLmdhbWUuY2FtcGFpZ24uZ2V0UXVlc3QoUXVlc3RLZXkuQSkuZ2V0SGlnaGVzdFRyaWdnZXJJbmRleCgpID09PSBRdWVzdEFUcmlnZ2VyLlRIUk9XTl9XT09EX0lOVE9fRklSRSB8fFxyXG4gICAgICAgICAgICB0aGlzLnNjZW5lLmdhbWUuY2FtcGFpZ24uZ2V0UXVlc3QoUXVlc3RLZXkuQSkuZ2V0SGlnaGVzdFRyaWdnZXJJbmRleCgpID09PSBRdWVzdEFUcmlnZ2VyLkJFQVRfRklSRVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzUmVuZGVyZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWaXNpYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0FuZ3J5KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlID09PSBGaXJlU3RhdGUuQU5HUlk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzQmVpbmdQdXRPdXQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUgPT09IEZpcmVTdGF0ZS5CRUlOR19QVVRfT1VUO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1B1dE91dCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gRmlyZVN0YXRlLlBVVF9PVVQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFN0YXRlKHN0YXRlOiBGaXJlU3RhdGUpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XHJcbiAgICAgICAgaWYgKHN0YXRlID09PSBGaXJlU3RhdGUuQkVJTkdfUFVUX09VVCB8fCBzdGF0ZSA9PT0gRmlyZVN0YXRlLlBVVF9PVVQpIHtcclxuICAgICAgICAgICAgRmlyZS5maXJlQW1iaWVuY2Uuc3RvcCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZHJhd1RvQ2FudmFzKGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTogdm9pZCB7XHJcbiAgICAgICAgY3R4LnNhdmUoKTtcclxuICAgICAgICBjdHgudHJhbnNsYXRlKHRoaXMueCwgLXRoaXMueSk7XHJcbiAgICAgICAgY3R4LnNjYWxlKHRoaXMuaW50ZW5zaXR5IC8gNSwgdGhpcy5pbnRlbnNpdHkgLyA1KTtcclxuICAgICAgICB0aGlzLmZpcmVHZnguZHJhdyhjdHgsIDAsIDApO1xyXG5cclxuICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkcmF3KGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzVmlzaWJsZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNjZW5lLnJlbmRlcmVyLmFkZCh7IHR5cGU6IFJlbmRlcmluZ1R5cGUuRklSRSwgbGF5ZXI6IFJlbmRlcmluZ0xheWVyLkVOVElUSUVTLCBlbnRpdHk6IHRoaXMgfSk7XHJcbiAgICAgICAgdGhpcy5kcmF3RmFjZShjdHgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zaG93RGlhbG9ndWVQcm9tcHQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmRyYXdEaWFsb2d1ZVByb21wdCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGhpbmtCdWJibGUpIHtcclxuICAgICAgICAgICAgdGhpcy50aGlua0J1YmJsZS5kcmF3KGN0eCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNwZWVjaEJ1YmJsZS5kcmF3KGN0eCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lLnNob3dCb3VuZHMpIHtcclxuICAgICAgICAgICAgdGhpcy5kcmF3Qm91bmRzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGUoZHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBGaXJlU3RhdGUuQU5HUlkgJiYgIXRoaXMuYmVpbmdQdXRPdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5mYWNlPy5zZXRNb2RlKEZhY2VNb2Rlcy5BTkdSWSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlID09PSBGaXJlU3RhdGUuQkVJTkdfUFVUX09VVCkge1xyXG4gICAgICAgICAgICB0aGlzLmZhY2U/LnNldE1vZGUoRmFjZU1vZGVzLkRJU0dVU1RFRCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pbnRlbnNpdHkgIT09IHRoaXMuZ3Jvd3RoVGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW50ZW5zaXR5ID0gc2hpZnRWYWx1ZSh0aGlzLmludGVuc2l0eSwgdGhpcy5ncm93dGhUYXJnZXQsIHRoaXMuZ3Jvd3RoICogZHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnNjZW5lLmZyaWVuZHNoaXBDdXRzY2VuZVxyXG4gICAgICAgICAgICAmJiB0aGlzLnNjZW5lLnNoaWJhLmdldFN0YXRlKCkgPT09IFNoaWJhU3RhdGUuS0lMTElOR19GSVJFXHJcbiAgICAgICAgICAgICYmIHRoaXMuaW50ZW5zaXR5IDw9IFNIUklOS19TSVpFXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuc2hpYmEubmV4dFN0YXRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuc2NlbmUuY2FtZXJhLmlzUG9pbnRWaXNpYmxlKHRoaXMueCwgdGhpcy55LCAyMDApKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNWaXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzQmVpbmdQdXRPdXQoKSAmJiAhdGhpcy5pc1B1dE91dCgpKSB7XHJcbiAgICAgICAgICAgIGxldCBwYXJ0aWNsZUNoYW5jZSA9IGR0IC0gcm5kKCkgKiB0aGlzLmF2ZXJhZ2VQYXJ0aWNsZURlbGF5O1xyXG5cclxuICAgICAgICAgICAgd2hpbGUgKHBhcnRpY2xlQ2hhbmNlID4gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJuZCgpIDwgMC41KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGFya0VtaXR0ZXIuZW1pdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChybmQoKSA8IDAuMzIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNtb2tlRW1pdHRlci5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcGFydGljbGVDaGFuY2UgLT0gcm5kKCkgKiB0aGlzLmF2ZXJhZ2VQYXJ0aWNsZURlbGF5O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNvdW5kRW1pdHRlci51cGRhdGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzQmVpbmdQdXRPdXQoKSkge1xyXG4gICAgICAgICAgICBsZXQgc3RlYW1QYXJ0aWNsZUNoYW5jZSA9IGR0IC0gcm5kKCkgKiB0aGlzLmF2ZXJhZ2VTdGVhbURlbGF5O1xyXG5cclxuICAgICAgICAgICAgd2hpbGUgKHN0ZWFtUGFydGljbGVDaGFuY2UgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZWFtRW1pdHRlci5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgICBzdGVhbVBhcnRpY2xlQ2hhbmNlIC09IHJuZCgpICogdGhpcy5hdmVyYWdlU3RlYW1EZWxheTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNWaXNpYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZUdmeC51cGRhdGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNob3dEaWFsb2d1ZVByb21wdCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9ndWVQcm9tcHQudXBkYXRlKGR0LCB0aGlzLngsIHRoaXMueSArIDMyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3BlZWNoQnViYmxlLnVwZGF0ZSh0aGlzLngsIHRoaXMueSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGZlZWQod29vZDogV29vZCk6IHZvaWQge1xyXG4gICAgICAgIHdvb2QucmVtb3ZlKCk7XHJcblxyXG4gICAgICAgIC8vIEhhbmRsZSBlbmQgb2YgdGhlIHdvcmxkXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEZpcmVTdGF0ZS5BTkdSWTtcclxuICAgICAgICB0aGlzLmdyb3d0aFRhcmdldCA9IDE0O1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lLnN0YXJ0QXBvY2FseXBzZU11c2ljKCk7XHJcblxyXG4gICAgICAgIC8vIERpc2FibGUgcmVtYWluaW5nIGRpYWxvZ3NcclxuICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbiA9IG51bGw7XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSBhbnkgcmVhY2hhYmxlIE5QQ3NcclxuICAgICAgICBmb3IgKGNvbnN0IG5wYyBvZiBbdGhpcy5zY2VuZS5zaGFkb3dQcmVzZW5jZV0pIHtcclxuICAgICAgICAgICAgaWYgKG5wYykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5yZW1vdmVHYW1lT2JqZWN0KG5wYyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFBsYXllciB0aG91Z2h0c1xyXG4gICAgICAgIFtcclxuICAgICAgICAgICAgW1wiV2hhdOKAplwiLCAyLCAyXSxcclxuICAgICAgICAgICAgW1wiV2hhdCBoYXZlIEkgZG9uZT9cIiwgNiwgM10sXHJcbiAgICAgICAgICAgIFtcIkkgdHJ1c3RlZCB5b3UhIEkgaGVscGVkIHlvdSFcIiwgMTAsIDNdXHJcbiAgICAgICAgXS5mb3JFYWNoKGxpbmUgPT4gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUucGxheWVyLnRoaW5rKGxpbmVbMF0gYXMgc3RyaW5nLCBsaW5lWzJdIGFzIG51bWJlciAqIDEwMDApO1xyXG4gICAgICAgIH0sIChsaW5lWzFdIGFzIG51bWJlcikgKiAxMDAwKSk7XHJcblxyXG4gICAgICAgIC8vIEdpdmUgZmlyZSBuZXcgZGlhbG9nXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuZ2FtZS5jYW1wYWlnbi5ydW5BY3Rpb24oXCJlbmFibGVcIiwgbnVsbCwgW1wiZmlyZVwiLCBcImZpcmUyXCJdKTtcclxuICAgICAgICB9LCAxMzUwMCk7XHJcbiAgICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFrQ0E7QUFDQTtBQXhCQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQVNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTVQQTtBQURBO0FBQ0E7QUFBQTtBQUdBO0FBREE7QUFDQTtBQUFBO0FBR0E7QUFEQTtBQUNBO0FBQUE7QUFSQTtBQURBO0FBbUNBO0FBbENBO0FBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/entities/Fire.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/FlameBoy.js":
|
|
/*!**********************************!*\
|
|
!*** ./lib/entities/FlameBoy.js ***!
|
|
\**********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar FlameBoy_1;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FlameBoy = exports.FlameBoyState = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst Face_1 = __webpack_require__(/*! ../Face */ \"./lib/Face.js\");\nconst GameScene_1 = __webpack_require__(/*! ../scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst Quests_1 = __webpack_require__(/*! ../Quests */ \"./lib/Quests.js\");\nconst Renderer_1 = __webpack_require__(/*! ../Renderer */ \"./lib/Renderer.js\");\nconst Sound_1 = __webpack_require__(/*! ../Sound */ \"./lib/Sound.js\");\nconst SoundEmitter_1 = __webpack_require__(/*! ../SoundEmitter */ \"./lib/SoundEmitter.js\");\nconst ScriptableNPC_1 = __webpack_require__(/*! ./ScriptableNPC */ \"./lib/entities/ScriptableNPC.js\");\nconst util_1 = __webpack_require__(/*! ../util */ \"./lib/util.js\");\nvar FlameBoyState;\n(function (FlameBoyState) {\n FlameBoyState[FlameBoyState[\"VENDOR\"] = 0] = \"VENDOR\";\n FlameBoyState[FlameBoyState[\"WAITING_FOR_DIALOG\"] = 1] = \"WAITING_FOR_DIALOG\";\n FlameBoyState[FlameBoyState[\"IDLE\"] = 2] = \"IDLE\";\n})(FlameBoyState = exports.FlameBoyState || (exports.FlameBoyState = {}));\nconst IDLE_DURATION = [2, 3, 4];\nconst WALK_DURATION = [1, 1.5, 2];\nconst ACCELERATION = 15;\nlet FlameBoy = FlameBoy_1 = class FlameBoy extends ScriptableNPC_1.ScriptableNPC {\n constructor(scene, x, y) {\n super(scene, x, y, 26, 54);\n this.state = FlameBoyState.VENDOR;\n this.idleTimer = util_1.rndItem(IDLE_DURATION);\n this.walkTimer = null;\n this.autoMoveDirection = 1;\n this.setMaxVelocity(3);\n this.face = new Face_1.Face(scene, this, Face_1.EyeType.FLAMEBOY, 0, 5);\n this.defaultFaceMode = Face_1.FaceModes.BORED;\n this.face.setMode(this.defaultFaceMode);\n this.soundEmitter = new SoundEmitter_1.SoundEmitter(this.scene, this.x, this.y, FlameBoy_1.fireAmbience, 0.7, 0.2);\n }\n setState(state) {\n this.state = state;\n }\n getState() {\n return this.state;\n }\n feed(wood) {\n wood.remove();\n this.scene.game.campaign.runAction(\"giveWoodToFlameboy\");\n this.think(\"Well, that was unexpected…\", 2000);\n this.nextState();\n }\n nextState() {\n this.state++;\n if (this.state === FlameBoyState.WAITING_FOR_DIALOG) {\n this.defaultFaceMode = Face_1.FaceModes.NEUTRAL;\n this.face = new Face_1.Face(this.scene, this, Face_1.EyeType.FLAMEBOY2, 0, 2);\n }\n }\n showDialoguePrompt() {\n if (!super.showDialoguePrompt()) {\n return false;\n }\n const thrownStoneIntoWater = (this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).getHighestTriggerIndex() >= Quests_1.QuestATrigger.THROWN_STONE_INTO_WATER\n && this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).getHighestTriggerIndex() < Quests_1.QuestATrigger.GOT_MULTIJUMP);\n const waitingForWoodDialog = this.state === FlameBoyState.WAITING_FOR_DIALOG;\n return thrownStoneIntoWater || waitingForWoodDialog;\n }\n getAnimationTag() {\n switch (this.state) {\n case FlameBoyState.VENDOR: return \"idle\";\n default: return \"idle2\";\n }\n }\n walkRandomly(triggerCollisions, dt) {\n if (triggerCollisions.length > 0) {\n const event = triggerCollisions.find(t => t.name === \"flameboy_action\");\n if (event && event.properties.velocity) {\n this.autoMoveDirection = event.properties.velocity > 0 ? 1 : -1;\n this.move = this.autoMoveDirection;\n }\n }\n if (this.idleTimer !== null && this.idleTimer >= 0) {\n this.idleTimer -= dt;\n }\n if (this.walkTimer !== null && this.walkTimer >= 0) {\n this.walkTimer -= dt;\n }\n if (this.idleTimer && this.idleTimer <= 0 && this.walkTimer === null) {\n this.walkTimer = util_1.rndItem(WALK_DURATION);\n this.idleTimer = null;\n this.move = this.autoMoveDirection;\n }\n if (this.walkTimer && this.walkTimer <= 0 && this.idleTimer === null) {\n this.idleTimer = util_1.rndItem(IDLE_DURATION);\n this.walkTimer = null;\n this.move = 0;\n }\n }\n draw(ctx) {\n if (this.move === 0) {\n this.scene.renderer.addAseprite(FlameBoy_1.sprite, this.getAnimationTag(), this.x, this.y, Renderer_1.RenderingLayer.ENTITIES, this.direction);\n }\n else {\n this.scene.renderer.addAseprite(FlameBoy_1.sprite, \"walk\", this.x, this.y, Renderer_1.RenderingLayer.ENTITIES, this.direction);\n }\n if (this.scene.showBounds) {\n this.drawBounds();\n }\n this.drawFace(ctx, false);\n if (this.thinkBubble) {\n this.thinkBubble.draw(ctx);\n }\n if (this.showDialoguePrompt()) {\n this.drawDialoguePrompt();\n }\n this.speechBubble.draw(ctx);\n }\n update(dt) {\n super.update(dt);\n // Triggers\n const triggerCollisions = this.scene.world.getTriggerCollisions(this);\n if (this.hasActiveConversation()) {\n this.move = 0;\n }\n else {\n if (this.state === FlameBoyState.IDLE) {\n this.walkRandomly(triggerCollisions, dt);\n }\n }\n if (this.move !== 0) {\n this.direction = this.move;\n this.accelerateX(ACCELERATION * dt * this.move);\n }\n else {\n if (this.getVelocityX() > 0) {\n this.decelerateX(ACCELERATION * dt);\n }\n else {\n this.decelerateX(-ACCELERATION * dt);\n }\n }\n if (this.thinkBubble) {\n this.thinkBubble.update(this.x, this.y);\n }\n this.dialoguePrompt.update(dt, this.x, this.y + 32);\n this.speechBubble.update(this.x, this.y);\n this.soundEmitter.update();\n }\n};\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/flameboy.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], FlameBoy, \"sprite\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/fire/fire2.ogg\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], FlameBoy, \"fireAmbience\", void 0);\nFlameBoy = FlameBoy_1 = tslib_1.__decorate([\n Entity_1.entity(\"flameboy\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number])\n], FlameBoy);\nexports.FlameBoy = FlameBoy;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvRmxhbWVCb3kuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZW50aXRpZXMvRmxhbWVCb3kudHM/OTc4ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc2Vwcml0ZSB9IGZyb20gXCIuLi9Bc2Vwcml0ZVwiO1xyXG5pbXBvcnQgeyBhc3NldCB9IGZyb20gXCIuLi9Bc3NldHNcIjtcclxuaW1wb3J0IHsgZW50aXR5IH0gZnJvbSBcIi4uL0VudGl0eVwiO1xyXG5pbXBvcnQgeyBFeWVUeXBlLCBGYWNlLCBGYWNlTW9kZXMgfSBmcm9tIFwiLi4vRmFjZVwiO1xyXG5pbXBvcnQgeyBHYW1lU2NlbmUgfSBmcm9tIFwiLi4vc2NlbmVzL0dhbWVTY2VuZVwiO1xyXG5pbXBvcnQgeyBRdWVzdEFUcmlnZ2VyLCBRdWVzdEtleSB9IGZyb20gXCIuLi9RdWVzdHNcIjtcclxuaW1wb3J0IHsgUmVuZGVyaW5nTGF5ZXIgfSBmcm9tIFwiLi4vUmVuZGVyZXJcIjtcclxuaW1wb3J0IHsgU291bmQgfSBmcm9tIFwiLi4vU291bmRcIjtcclxuaW1wb3J0IHsgU291bmRFbWl0dGVyIH0gZnJvbSBcIi4uL1NvdW5kRW1pdHRlclwiO1xyXG5pbXBvcnQgeyBTY3JpcHRhYmxlTlBDIH0gZnJvbSBcIi4vU2NyaXB0YWJsZU5QQ1wiO1xyXG5pbXBvcnQgeyBybmRJdGVtIH0gZnJvbSBcIi4uL3V0aWxcIjtcclxuaW1wb3J0IHsgR2FtZU9iamVjdEluZm8gfSBmcm9tIFwiLi4vTWFwSW5mb1wiO1xyXG5pbXBvcnQgeyBXb29kIH0gZnJvbSBcIi4vV29vZFwiO1xyXG5cclxuZXhwb3J0IGVudW0gRmxhbWVCb3lTdGF0ZSB7XHJcbiAgICBWRU5ET1IsXHJcbiAgICBXQUlUSU5HX0ZPUl9ESUFMT0csXHJcbiAgICBJRExFXHJcbn1cclxuXHJcbmNvbnN0IElETEVfRFVSQVRJT04gPSBbMiwgMywgNF07XHJcbmNvbnN0IFdBTEtfRFVSQVRJT04gPSBbMSwgMS41LCAyXTtcclxuY29uc3QgQUNDRUxFUkFUSU9OID0gMTU7XHJcblxyXG5AZW50aXR5KFwiZmxhbWVib3lcIilcclxuZXhwb3J0IGNsYXNzIEZsYW1lQm95IGV4dGVuZHMgU2NyaXB0YWJsZU5QQyB7XHJcbiAgICBAYXNzZXQoXCJzcHJpdGVzL2ZsYW1lYm95LmFzZXByaXRlLmpzb25cIilcclxuICAgIHByaXZhdGUgc3RhdGljIHNwcml0ZTogQXNlcHJpdGU7XHJcblxyXG4gICAgQGFzc2V0KFwic291bmRzL2ZpcmUvZmlyZTIub2dnXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBmaXJlQW1iaWVuY2U6IFNvdW5kO1xyXG4gICAgcHJpdmF0ZSBzb3VuZEVtaXR0ZXI6IFNvdW5kRW1pdHRlcjtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRlID0gRmxhbWVCb3lTdGF0ZS5WRU5ET1I7XHJcbiAgICBwcml2YXRlIGlkbGVUaW1lcjogbnVtYmVyIHwgbnVsbCA9IHJuZEl0ZW0oSURMRV9EVVJBVElPTik7XHJcbiAgICBwcml2YXRlIHdhbGtUaW1lcjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICBwcml2YXRlIGF1dG9Nb3ZlRGlyZWN0aW9uOiAxIHwgLTEgPSAxO1xyXG5cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihzY2VuZTogR2FtZVNjZW5lLCB4OiBudW1iZXIsIHk6IG51bWJlcikge1xyXG4gICAgICAgIHN1cGVyKHNjZW5lLCB4LCB5LCAyNiwgNTQpO1xyXG4gICAgICAgIHRoaXMuc2V0TWF4VmVsb2NpdHkoMyk7XHJcbiAgICAgICAgdGhpcy5mYWNlID0gbmV3IEZhY2Uoc2NlbmUsIHRoaXMsIEV5ZVR5cGUuRkxBTUVCT1ksIDAsIDUpO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEZhY2VNb2RlID0gRmFjZU1vZGVzLkJPUkVEO1xyXG4gICAgICAgIHRoaXMuZmFjZS5zZXRNb2RlKHRoaXMuZGVmYXVsdEZhY2VNb2RlKTtcclxuICAgICAgICB0aGlzLnNvdW5kRW1pdHRlciA9IG5ldyBTb3VuZEVtaXR0ZXIodGhpcy5zY2VuZSwgdGhpcy54LCB0aGlzLnksIEZsYW1lQm95LmZpcmVBbWJpZW5jZSwgMC43LCAwLjIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRTdGF0ZShzdGF0ZTogRmxhbWVCb3lTdGF0ZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U3RhdGUoKTogRmxhbWVCb3lTdGF0ZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGZlZWQod29vZDogV29vZCk6IHZvaWQge1xyXG4gICAgICAgIHdvb2QucmVtb3ZlKCk7XHJcbiAgICAgICAgdGhpcy5zY2VuZS5nYW1lLmNhbXBhaWduLnJ1bkFjdGlvbihcImdpdmVXb29kVG9GbGFtZWJveVwiKTtcclxuICAgICAgICB0aGlzLnRoaW5rKFwiV2VsbCwgdGhhdCB3YXMgdW5leHBlY3RlZOKAplwiLCAyMDAwKTtcclxuICAgICAgICB0aGlzLm5leHRTdGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZXh0U3RhdGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSsrO1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBGbGFtZUJveVN0YXRlLldBSVRJTkdfRk9SX0RJQUxPRykge1xyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRGYWNlTW9kZSA9IEZhY2VNb2Rlcy5ORVVUUkFMO1xyXG4gICAgICAgICAgICB0aGlzLmZhY2UgPSBuZXcgRmFjZSh0aGlzLnNjZW5lLCB0aGlzLCBFeWVUeXBlLkZMQU1FQk9ZMiwgMCwgMik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzaG93RGlhbG9ndWVQcm9tcHQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFzdXBlci5zaG93RGlhbG9ndWVQcm9tcHQoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0aHJvd25TdG9uZUludG9XYXRlciA9IChcclxuICAgICAgICAgICAgdGhpcy5zY2VuZS5nYW1lLmNhbXBhaWduLmdldFF1ZXN0KFF1ZXN0S2V5LkEpLmdldEhpZ2hlc3RUcmlnZ2VySW5kZXgoKSA+PSBRdWVzdEFUcmlnZ2VyLlRIUk9XTl9TVE9ORV9JTlRPX1dBVEVSXHJcbiAgICAgICAgICAgICYmIHRoaXMuc2NlbmUuZ2FtZS5jYW1wYWlnbi5nZXRRdWVzdChRdWVzdEtleS5BKS5nZXRIaWdoZXN0VHJpZ2dlckluZGV4KCkgPCBRdWVzdEFUcmlnZ2VyLkdPVF9NVUxUSUpVTVBcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHdhaXRpbmdGb3JXb29kRGlhbG9nID0gdGhpcy5zdGF0ZSA9PT0gRmxhbWVCb3lTdGF0ZS5XQUlUSU5HX0ZPUl9ESUFMT0c7XHJcblxyXG4gICAgICAgIHJldHVybiB0aHJvd25TdG9uZUludG9XYXRlciB8fCB3YWl0aW5nRm9yV29vZERpYWxvZztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEFuaW1hdGlvblRhZyAoKTogc3RyaW5nIHtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuc3RhdGUpIHtcclxuICAgICAgICAgICAgY2FzZSBGbGFtZUJveVN0YXRlLlZFTkRPUjogcmV0dXJuIFwiaWRsZVwiO1xyXG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gXCJpZGxlMlwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHdhbGtSYW5kb21seSh0cmlnZ2VyQ29sbGlzaW9uczogR2FtZU9iamVjdEluZm9bXSwgZHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmICh0cmlnZ2VyQ29sbGlzaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gdHJpZ2dlckNvbGxpc2lvbnMuZmluZCh0ID0+IHQubmFtZSA9PT0gXCJmbGFtZWJveV9hY3Rpb25cIik7XHJcblxyXG4gICAgICAgICAgICBpZiAoZXZlbnQgJiYgZXZlbnQucHJvcGVydGllcy52ZWxvY2l0eSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvTW92ZURpcmVjdGlvbiA9IGV2ZW50LnByb3BlcnRpZXMudmVsb2NpdHkgPiAwID8gMSA6IC0xO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlID0gdGhpcy5hdXRvTW92ZURpcmVjdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaWRsZVRpbWVyICE9PSBudWxsICYmIHRoaXMuaWRsZVRpbWVyID49IDApIHtcclxuICAgICAgICAgICAgdGhpcy5pZGxlVGltZXIgLT0gZHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy53YWxrVGltZXIgIT09IG51bGwgJiYgdGhpcy53YWxrVGltZXIgPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLndhbGtUaW1lciAtPSBkdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlkbGVUaW1lciAmJiB0aGlzLmlkbGVUaW1lciA8PSAwICYmIHRoaXMud2Fsa1RpbWVyID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMud2Fsa1RpbWVyID0gcm5kSXRlbShXQUxLX0RVUkFUSU9OKTtcclxuICAgICAgICAgICAgdGhpcy5pZGxlVGltZXIgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLm1vdmUgPSB0aGlzLmF1dG9Nb3ZlRGlyZWN0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMud2Fsa1RpbWVyICYmIHRoaXMud2Fsa1RpbWVyIDw9IDAgJiYgdGhpcy5pZGxlVGltZXIgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5pZGxlVGltZXIgPSBybmRJdGVtKElETEVfRFVSQVRJT04pO1xyXG4gICAgICAgICAgICB0aGlzLndhbGtUaW1lciA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMubW92ZSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgZHJhdyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLm1vdmUgPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5zY2VuZS5yZW5kZXJlci5hZGRBc2Vwcml0ZShcclxuICAgICAgICAgICAgICAgIEZsYW1lQm95LnNwcml0ZSwgdGhpcy5nZXRBbmltYXRpb25UYWcoKSwgdGhpcy54LCB0aGlzLnksIFJlbmRlcmluZ0xheWVyLkVOVElUSUVTLCB0aGlzLmRpcmVjdGlvblxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUucmVuZGVyZXIuYWRkQXNlcHJpdGUoXHJcbiAgICAgICAgICAgICAgICBGbGFtZUJveS5zcHJpdGUsIFwid2Fsa1wiLCB0aGlzLngsIHRoaXMueSwgUmVuZGVyaW5nTGF5ZXIuRU5USVRJRVMsIHRoaXMuZGlyZWN0aW9uXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zY2VuZS5zaG93Qm91bmRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhd0JvdW5kcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kcmF3RmFjZShjdHgsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGhpbmtCdWJibGUpIHtcclxuICAgICAgICAgICAgdGhpcy50aGlua0J1YmJsZS5kcmF3KGN0eCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zaG93RGlhbG9ndWVQcm9tcHQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmRyYXdEaWFsb2d1ZVByb21wdCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zcGVlY2hCdWJibGUuZHJhdyhjdHgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGUoZHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLnVwZGF0ZShkdCk7XHJcblxyXG4gICAgICAgIC8vIFRyaWdnZXJzXHJcbiAgICAgICAgY29uc3QgdHJpZ2dlckNvbGxpc2lvbnMgPSB0aGlzLnNjZW5lLndvcmxkLmdldFRyaWdnZXJDb2xsaXNpb25zKHRoaXMpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5oYXNBY3RpdmVDb252ZXJzYXRpb24oKSkge1xyXG4gICAgICAgICAgICB0aGlzLm1vdmUgPSAwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBGbGFtZUJveVN0YXRlLklETEUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMud2Fsa1JhbmRvbWx5KHRyaWdnZXJDb2xsaXNpb25zLCBkdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm1vdmUgIT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSB0aGlzLm1vdmU7XHJcbiAgICAgICAgICAgIHRoaXMuYWNjZWxlcmF0ZVgoQUNDRUxFUkFUSU9OICogZHQgKiB0aGlzLm1vdmUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdldFZlbG9jaXR5WCgpID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWNlbGVyYXRlWChBQ0NFTEVSQVRJT04gKiBkdCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlY2VsZXJhdGVYKC1BQ0NFTEVSQVRJT04gKiBkdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRoaW5rQnViYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGhpbmtCdWJibGUudXBkYXRlKHRoaXMueCwgdGhpcy55KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGlhbG9ndWVQcm9tcHQudXBkYXRlKGR0LCB0aGlzLngsIHRoaXMueSArIDMyKTtcclxuICAgICAgICB0aGlzLnNwZWVjaEJ1YmJsZS51cGRhdGUodGhpcy54LCB0aGlzLnkpO1xyXG4gICAgICAgIHRoaXMuc291bmRFbWl0dGVyLnVwZGF0ZSgpO1xyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFhQTtBQUNBO0FBTkE7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFBQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBN0pBO0FBREE7QUFDQTtBQUFBO0FBR0E7QUFEQTtBQUNBO0FBQUE7QUFMQTtBQURBO0FBY0E7QUFiQTtBQUFBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/entities/FlameBoy.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/Mimic.js":
|
|
/*!*******************************!*\
|
|
!*** ./lib/entities/Mimic.js ***!
|
|
\*******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar Mimic_1;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Mimic = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst Conversation_1 = __webpack_require__(/*! ../Conversation */ \"./lib/Conversation.js\");\nconst mimic_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../../assets/dialog/mimic.dialog.json */ \"./assets/dialog/mimic.dialog.json\"));\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst GameScene_1 = __webpack_require__(/*! ../scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst NPC_1 = __webpack_require__(/*! ./NPC */ \"./lib/entities/NPC.js\");\nconst Sound_1 = __webpack_require__(/*! ../Sound */ \"./lib/Sound.js\");\nvar MimicState;\n(function (MimicState) {\n MimicState[MimicState[\"SLEEPING\"] = 0] = \"SLEEPING\";\n MimicState[MimicState[\"OPEN_UP\"] = 1] = \"OPEN_UP\";\n MimicState[MimicState[\"IDLE\"] = 2] = \"IDLE\";\n})(MimicState || (MimicState = {}));\nlet Mimic = Mimic_1 = class Mimic extends NPC_1.NPC {\n constructor(scene, x, y) {\n super(scene, x, y, 46, 24);\n this.state = MimicState.SLEEPING;\n this.lookAtPlayer = false;\n this.direction = 1;\n this.conversation = new Conversation_1.Conversation(mimic_dialog_json_1.default, this);\n this.animator.assignSprite(Mimic_1.sprite);\n }\n nextState() {\n this.state++;\n if (this.state === MimicState.OPEN_UP) {\n Mimic_1.openingSound.play();\n }\n }\n getInteractionText() {\n if (!this.met) {\n return \"Open\";\n }\n else {\n return \"Talk\";\n }\n }\n draw(ctx) {\n if (this.scene.showBounds) {\n this.drawBounds();\n }\n switch (this.state) {\n case MimicState.SLEEPING:\n this.animator.play(\"sleeping\", this.direction);\n break;\n case MimicState.OPEN_UP:\n this.animator.play(\"open\", this.direction, { loop: false, callback: this.nextState.bind(this) });\n break;\n case MimicState.IDLE:\n this.animator.play(\"idle\", this.direction);\n break;\n }\n this.speechBubble.draw(ctx);\n }\n update(dt) {\n super.update(dt);\n this.speechBubble.update(this.x, this.y);\n }\n};\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/mimic.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], Mimic, \"sprite\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/item/chest.ogg\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], Mimic, \"openingSound\", void 0);\nMimic = Mimic_1 = tslib_1.__decorate([\n Entity_1.entity(\"mimic\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number])\n], Mimic);\nexports.Mimic = Mimic;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvTWltaWMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZW50aXRpZXMvTWltaWMudHM/MmZhNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc2Vwcml0ZSB9IGZyb20gXCIuLi9Bc2Vwcml0ZVwiO1xyXG5pbXBvcnQgeyBhc3NldCB9IGZyb20gXCIuLi9Bc3NldHNcIjtcclxuaW1wb3J0IHsgQ29udmVyc2F0aW9uIH0gZnJvbSBcIi4uL0NvbnZlcnNhdGlvblwiO1xyXG5pbXBvcnQgY29udmVyc2F0aW9uIGZyb20gXCIuLi8uLi9hc3NldHMvZGlhbG9nL21pbWljLmRpYWxvZy5qc29uXCI7XHJcbmltcG9ydCB7IGVudGl0eSB9IGZyb20gXCIuLi9FbnRpdHlcIjtcclxuaW1wb3J0IHsgR2FtZVNjZW5lIH0gZnJvbSBcIi4uL3NjZW5lcy9HYW1lU2NlbmVcIjtcclxuaW1wb3J0IHsgTlBDIH0gZnJvbSBcIi4vTlBDXCI7XHJcbmltcG9ydCB7IFNvdW5kIH0gZnJvbSBcIi4uL1NvdW5kXCI7XHJcblxyXG5lbnVtIE1pbWljU3RhdGUgeyBTTEVFUElORywgT1BFTl9VUCwgSURMRSB9XHJcblxyXG5AZW50aXR5KFwibWltaWNcIilcclxuZXhwb3J0IGNsYXNzIE1pbWljIGV4dGVuZHMgTlBDIHtcclxuICAgIEBhc3NldChcInNwcml0ZXMvbWltaWMuYXNlcHJpdGUuanNvblwiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgc3ByaXRlOiBBc2Vwcml0ZTtcclxuXHJcbiAgICBAYXNzZXQoXCJzb3VuZHMvaXRlbS9jaGVzdC5vZ2dcIilcclxuICAgIHByaXZhdGUgc3RhdGljIG9wZW5pbmdTb3VuZDogU291bmQ7XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0ZSA9IE1pbWljU3RhdGUuU0xFRVBJTkc7XHJcblxyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHNjZW5lOiBHYW1lU2NlbmUsIHg6IG51bWJlciwgeTogbnVtYmVyKSB7XHJcbiAgICAgICAgc3VwZXIoc2NlbmUsIHgsIHksIDQ2LCAyNCk7XHJcbiAgICAgICAgdGhpcy5sb29rQXRQbGF5ZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IDE7XHJcbiAgICAgICAgdGhpcy5jb252ZXJzYXRpb24gPSBuZXcgQ29udmVyc2F0aW9uKGNvbnZlcnNhdGlvbiwgdGhpcyk7XHJcbiAgICAgICAgdGhpcy5hbmltYXRvci5hc3NpZ25TcHJpdGUoTWltaWMuc3ByaXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmV4dFN0YXRlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3RhdGUrKztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IE1pbWljU3RhdGUuT1BFTl9VUCkge1xyXG4gICAgICAgICAgICBNaW1pYy5vcGVuaW5nU291bmQucGxheSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SW50ZXJhY3Rpb25UZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm1ldCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJPcGVuXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiVGFsa1wiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZHJhdyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lLnNob3dCb3VuZHMpIHtcclxuICAgICAgICAgICAgdGhpcy5kcmF3Qm91bmRzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2ggKHRoaXMuc3RhdGUpIHtcclxuICAgICAgICAgICAgY2FzZSBNaW1pY1N0YXRlLlNMRUVQSU5HOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmltYXRvci5wbGF5KFwic2xlZXBpbmdcIiwgdGhpcy5kaXJlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgTWltaWNTdGF0ZS5PUEVOX1VQOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmltYXRvci5wbGF5KFwib3BlblwiLCB0aGlzLmRpcmVjdGlvbiwgeyBsb29wOiBmYWxzZSwgY2FsbGJhY2s6IHRoaXMubmV4dFN0YXRlLmJpbmQodGhpcykgfSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBNaW1pY1N0YXRlLklETEU6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdG9yLnBsYXkoXCJpZGxlXCIsIHRoaXMuZGlyZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zcGVlY2hCdWJibGUuZHJhdyhjdHgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGUoZHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLnVwZGF0ZShkdCk7XHJcbiAgICAgICAgdGhpcy5zcGVlY2hCdWJibGUudXBkYXRlKHRoaXMueCwgdGhpcy55KTtcclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBU0E7QUFDQTtBQUhBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXZEQTtBQURBO0FBQ0E7QUFBQTtBQUdBO0FBREE7QUFDQTtBQUFBO0FBTEE7QUFEQTtBQVVBO0FBVEE7QUFBQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/entities/Mimic.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/MovingPlatform.js":
|
|
/*!****************************************!*\
|
|
!*** ./lib/entities/MovingPlatform.js ***!
|
|
\****************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar MovingPlatform_1;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MovingPlatform = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst GameScene_1 = __webpack_require__(/*! ../scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst World_1 = __webpack_require__(/*! ../World */ \"./lib/World.js\");\nconst PhysicsEntity_1 = __webpack_require__(/*! ./PhysicsEntity */ \"./lib/entities/PhysicsEntity.js\");\nconst constants_1 = __webpack_require__(/*! ../constants */ \"./lib/constants.js\");\nconst Renderer_1 = __webpack_require__(/*! ../Renderer */ \"./lib/Renderer.js\");\nlet MovingPlatform = MovingPlatform_1 = class MovingPlatform extends PhysicsEntity_1.PhysicsEntity {\n constructor(scene, x, y, properties) {\n super(scene, x, y, 68, 12);\n this.setFloating(true);\n this.startX = this.targetX = x;\n this.startY = this.targetY = y;\n this.velocity = properties.velocity / constants_1.PIXEL_PER_METER;\n if (properties.direction === \"right\") {\n this.targetX = x + properties.distance;\n this.setVelocityX(this.velocity);\n }\n else if (properties.direction === \"left\") {\n this.targetX = x - properties.distance;\n this.setVelocityX(-this.velocity);\n }\n else if (properties.direction === \"up\") {\n this.targetY = y + properties.distance;\n this.setVelocityY(this.velocity);\n }\n else if (properties.direction === \"down\") {\n this.targetY = y - properties.distance;\n this.setVelocityY(-this.velocity);\n }\n }\n draw() {\n this.scene.renderer.addAseprite(MovingPlatform_1.sprite, \"idle\", this.x, this.y, Renderer_1.RenderingLayer.PLATFORMS);\n if (this.scene.showBounds) {\n this.drawBounds();\n }\n }\n update(dt) {\n super.update(dt);\n if (this.getVelocityY() > 0) {\n if (this.y >= Math.max(this.startY, this.targetY)) {\n this.y = Math.max(this.startY, this.targetY);\n this.setVelocityY(-this.velocity);\n }\n }\n else if (this.getVelocityY() < 0) {\n if (this.y <= Math.min(this.startY, this.targetY)) {\n this.y = Math.min(this.startY, this.targetY);\n this.setVelocityY(this.velocity);\n }\n }\n if (this.getVelocityX() > 0) {\n if (this.x >= Math.max(this.targetX, this.startX)) {\n this.x = Math.max(this.targetX, this.startX);\n this.setVelocityX(-this.velocity);\n }\n }\n else if (this.getVelocityX() < 0) {\n if (this.x <= Math.min(this.startX, this.targetX)) {\n this.x = Math.min(this.startX, this.targetX);\n this.setVelocityX(this.velocity);\n }\n }\n }\n collidesWith(x, y) {\n if (x >= this.x - this.width / 2\n && x <= this.x + this.width / 2\n && y >= this.y\n && y <= this.y + this.height) {\n return World_1.Environment.PLATFORM;\n }\n return World_1.Environment.AIR;\n }\n};\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/stoneplatform.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], MovingPlatform, \"sprite\", void 0);\nMovingPlatform = MovingPlatform_1 = tslib_1.__decorate([\n Entity_1.entity(\"movingplatform\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number, Object])\n], MovingPlatform);\nexports.MovingPlatform = MovingPlatform;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvTW92aW5nUGxhdGZvcm0uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZW50aXRpZXMvTW92aW5nUGxhdGZvcm0udHM/MjYzMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc2Vwcml0ZSB9IGZyb20gXCIuLi9Bc2Vwcml0ZVwiO1xyXG5pbXBvcnQgeyBhc3NldCB9IGZyb20gXCIuLi9Bc3NldHNcIjtcclxuaW1wb3J0IHsgQ29sbGlkYWJsZUdhbWVPYmplY3QsIEdhbWVTY2VuZSB9IGZyb20gXCIuLi9zY2VuZXMvR2FtZVNjZW5lXCI7XHJcbmltcG9ydCB7IGVudGl0eSB9IGZyb20gXCIuLi9FbnRpdHlcIjtcclxuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tIFwiLi4vV29ybGRcIjtcclxuaW1wb3J0IHsgR2FtZU9iamVjdFByb3BlcnRpZXMgfSBmcm9tIFwiLi4vTWFwSW5mb1wiO1xyXG5pbXBvcnQgeyBQaHlzaWNzRW50aXR5IH0gZnJvbSBcIi4vUGh5c2ljc0VudGl0eVwiO1xyXG5pbXBvcnQgeyBQSVhFTF9QRVJfTUVURVIgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IFJlbmRlcmluZ0xheWVyIH0gZnJvbSBcIi4uL1JlbmRlcmVyXCI7XHJcblxyXG5AZW50aXR5KFwibW92aW5ncGxhdGZvcm1cIilcclxuZXhwb3J0IGNsYXNzIE1vdmluZ1BsYXRmb3JtIGV4dGVuZHMgUGh5c2ljc0VudGl0eSBpbXBsZW1lbnRzIENvbGxpZGFibGVHYW1lT2JqZWN0IHtcclxuICAgIEBhc3NldChcInNwcml0ZXMvc3RvbmVwbGF0Zm9ybS5hc2Vwcml0ZS5qc29uXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBzcHJpdGU6IEFzZXByaXRlO1xyXG5cclxuICAgIHByaXZhdGUgc3RhcnRYOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIHN0YXJ0WTogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSB0YXJnZXRYOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIHRhcmdldFk6IG51bWJlcjtcclxuICAgIHByaXZhdGUgdmVsb2NpdHk6IG51bWJlcjtcclxuXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioc2NlbmU6IEdhbWVTY2VuZSwgeDogbnVtYmVyLCB5OiBudW1iZXIsIHByb3BlcnRpZXM6IEdhbWVPYmplY3RQcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgc3VwZXIoc2NlbmUsIHgsIHksIDY4LCAxMik7XHJcbiAgICAgICAgdGhpcy5zZXRGbG9hdGluZyh0cnVlKTtcclxuICAgICAgICB0aGlzLnN0YXJ0WCA9IHRoaXMudGFyZ2V0WCA9IHg7XHJcbiAgICAgICAgdGhpcy5zdGFydFkgPSB0aGlzLnRhcmdldFkgPSB5O1xyXG4gICAgICAgIHRoaXMudmVsb2NpdHkgPSBwcm9wZXJ0aWVzLnZlbG9jaXR5IC8gUElYRUxfUEVSX01FVEVSO1xyXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLmRpcmVjdGlvbiA9PT0gXCJyaWdodFwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0WCA9IHggKyBwcm9wZXJ0aWVzLmRpc3RhbmNlO1xyXG4gICAgICAgICAgICB0aGlzLnNldFZlbG9jaXR5WCh0aGlzLnZlbG9jaXR5KTtcclxuICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnRpZXMuZGlyZWN0aW9uID09PSBcImxlZnRcIikge1xyXG4gICAgICAgICAgICB0aGlzLnRhcmdldFggPSB4IC0gcHJvcGVydGllcy5kaXN0YW5jZTtcclxuICAgICAgICAgICAgdGhpcy5zZXRWZWxvY2l0eVgoLXRoaXMudmVsb2NpdHkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocHJvcGVydGllcy5kaXJlY3Rpb24gPT09IFwidXBcIikge1xyXG4gICAgICAgICAgICB0aGlzLnRhcmdldFkgPSB5ICsgcHJvcGVydGllcy5kaXN0YW5jZTtcclxuICAgICAgICAgICAgdGhpcy5zZXRWZWxvY2l0eVkodGhpcy52ZWxvY2l0eSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0aWVzLmRpcmVjdGlvbiA9PT0gXCJkb3duXCIpIHtcclxuICAgICAgICAgICAgdGhpcy50YXJnZXRZID0geSAtIHByb3BlcnRpZXMuZGlzdGFuY2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmVsb2NpdHlZKC10aGlzLnZlbG9jaXR5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRyYXcoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zY2VuZS5yZW5kZXJlci5hZGRBc2Vwcml0ZShNb3ZpbmdQbGF0Zm9ybS5zcHJpdGUsIFwiaWRsZVwiLCB0aGlzLngsIHRoaXMueSwgUmVuZGVyaW5nTGF5ZXIuUExBVEZPUk1TKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmUuc2hvd0JvdW5kcykge1xyXG4gICAgICAgICAgICB0aGlzLmRyYXdCb3VuZHMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZShkdDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIudXBkYXRlKGR0KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0VmVsb2NpdHlZKCkgPiAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnkgPj0gTWF0aC5tYXgodGhpcy5zdGFydFksIHRoaXMudGFyZ2V0WSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMueSA9IE1hdGgubWF4KHRoaXMuc3RhcnRZLCB0aGlzLnRhcmdldFkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWZWxvY2l0eVkoLXRoaXMudmVsb2NpdHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldFZlbG9jaXR5WSgpIDwgMCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy55IDw9IE1hdGgubWluKHRoaXMuc3RhcnRZLCB0aGlzLnRhcmdldFkpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnkgPSBNYXRoLm1pbih0aGlzLnN0YXJ0WSwgdGhpcy50YXJnZXRZKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmVsb2NpdHlZKHRoaXMudmVsb2NpdHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5nZXRWZWxvY2l0eVgoKSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMueCA+PSBNYXRoLm1heCh0aGlzLnRhcmdldFgsIHRoaXMuc3RhcnRYKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy54ID0gTWF0aC5tYXgodGhpcy50YXJnZXRYLCB0aGlzLnN0YXJ0WCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZlbG9jaXR5WCgtdGhpcy52ZWxvY2l0eSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0VmVsb2NpdHlYKCkgPCAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnggPD0gTWF0aC5taW4odGhpcy5zdGFydFgsIHRoaXMudGFyZ2V0WCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMueCA9IE1hdGgubWluKHRoaXMuc3RhcnRYLCB0aGlzLnRhcmdldFgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWZWxvY2l0eVgodGhpcy52ZWxvY2l0eSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbGxpZGVzV2l0aCh4OiBudW1iZXIsIHk6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB4ID49IHRoaXMueCAtIHRoaXMud2lkdGggLyAyXHJcbiAgICAgICAgICAgICYmIHggPD0gdGhpcy54ICsgdGhpcy53aWR0aCAvIDJcclxuICAgICAgICAgICAgJiYgeSA+PSB0aGlzLnlcclxuICAgICAgICAgICAgJiYgeSA8PSB0aGlzLnkgKyB0aGlzLmhlaWdodFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuUExBVEZPUk07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuQUlSO1xyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUE3RUE7QUFEQTtBQUNBO0FBQUE7QUFGQTtBQURBO0FBV0E7QUFWQTtBQUFBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/entities/MovingPlatform.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/NPC.js":
|
|
/*!*****************************!*\
|
|
!*** ./lib/entities/NPC.js ***!
|
|
\*****************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NPC = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst DialoguePrompt_1 = __webpack_require__(/*! ../DialoguePrompt */ \"./lib/DialoguePrompt.js\");\nconst Face_1 = __webpack_require__(/*! ../Face */ \"./lib/Face.js\");\nconst PhysicsEntity_1 = __webpack_require__(/*! ./PhysicsEntity */ \"./lib/entities/PhysicsEntity.js\");\nconst util_1 = __webpack_require__(/*! ../util */ \"./lib/util.js\");\nconst SpeechBubble_1 = __webpack_require__(/*! ../SpeechBubble */ \"./lib/SpeechBubble.js\");\n// Seconds NPC can't be talked to after a conversation has ended\nconst PAUSE_AFTER_CONVERSATION = 1.5;\nclass NPC extends PhysicsEntity_1.PhysicsEntity {\n constructor() {\n super(...arguments);\n this.direction = 1;\n this.face = null;\n this.defaultFaceMode = Face_1.FaceModes.NEUTRAL;\n this.greeting = null;\n this.conversation = null;\n this.thinkBubble = null;\n this.speechBubble = new SpeechBubble_1.SpeechBubble(this.scene, this.x, this.y);\n this.lookAtPlayer = true;\n this.dialoguePrompt = new DialoguePrompt_1.DialoguePrompt(this.scene, this.x, this.y);\n this.lastEndedConversation = -Infinity;\n this.met = false;\n }\n drawFace(ctx, lookAtPlayer = true) {\n if (this.face) {\n // Look at player\n if (lookAtPlayer) {\n const dx = this.scene.player.x - this.x;\n this.face.toggleDirection((dx > 0) ? 1 : -1);\n this.face.draw(ctx);\n }\n else {\n this.face.setDirection(this.direction);\n this.face.draw(ctx);\n }\n }\n }\n think(message, time) {\n return tslib_1.__awaiter(this, void 0, void 0, function* () {\n if (this.thinkBubble) {\n this.thinkBubble.hide();\n this.thinkBubble = null;\n }\n const thinkBubble = this.thinkBubble = new SpeechBubble_1.SpeechBubble(this.scene, this.x, this.y);\n thinkBubble.setMessage(message);\n thinkBubble.show();\n yield util_1.sleep(time);\n if (this.thinkBubble === thinkBubble) {\n thinkBubble.hide();\n this.thinkBubble = null;\n }\n });\n }\n hasMet() {\n return false;\n }\n meet() {\n this.met = true;\n }\n getInteractionText() {\n return \"Talk\";\n }\n showDialoguePrompt() {\n if (this.hasActiveConversation() || !this.scene.player.isControllable) {\n return false;\n }\n return true;\n }\n drawDialoguePrompt() {\n this.dialoguePrompt.draw();\n }\n drawGreeting(ctx) {\n var _a;\n (_a = this.greeting) === null || _a === void 0 ? void 0 : _a.draw(ctx);\n }\n updateGreeting() {\n var _a;\n (_a = this.greeting) === null || _a === void 0 ? void 0 : _a.update();\n }\n registerEndedConversation() {\n this.lastEndedConversation = this.scene.gameTime;\n }\n isReadyForConversation() {\n return (this.conversation\n && !this.scene.player.isCarrying(this)\n && this.scene.gameTime - this.lastEndedConversation > PAUSE_AFTER_CONVERSATION);\n }\n hasActiveConversation() {\n return (this.scene.player.playerConversation !== null && this.scene.player.playerConversation.npc === this);\n }\n toggleDirection(direction = this.direction > 0 ? -1 : 1) {\n if (direction !== this.direction) {\n this.direction = direction;\n }\n }\n update(dt) {\n if (this.lookAtPlayer) {\n const dx = this.scene.player.x - this.x;\n this.toggleDirection((dx > 0) ? 1 : -1);\n }\n super.update(dt);\n }\n}\nexports.NPC = NPC;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvTlBDLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2VudGl0aWVzL05QQy50cz80NTcwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnZlcnNhdGlvbiB9IGZyb20gXCIuLi9Db252ZXJzYXRpb25cIjtcclxuaW1wb3J0IHsgRGlhbG9ndWVQcm9tcHQgfSBmcm9tIFwiLi4vRGlhbG9ndWVQcm9tcHRcIjtcclxuaW1wb3J0IHsgRmFjZSwgRmFjZU1vZGVzIH0gZnJvbSBcIi4uL0ZhY2VcIjtcclxuaW1wb3J0IHsgR3JlZXRpbmcgfSBmcm9tIFwiLi4vR3JlZXRpbmdcIjtcclxuaW1wb3J0IHsgUGh5c2ljc0VudGl0eSB9IGZyb20gXCIuL1BoeXNpY3NFbnRpdHlcIjtcclxuaW1wb3J0IHsgc2xlZXAgfSBmcm9tIFwiLi4vdXRpbFwiO1xyXG5pbXBvcnQgeyBTcGVlY2hCdWJibGUgfSBmcm9tIFwiLi4vU3BlZWNoQnViYmxlXCI7XHJcblxyXG4vLyBTZWNvbmRzIE5QQyBjYW4ndCBiZSB0YWxrZWQgdG8gYWZ0ZXIgYSBjb252ZXJzYXRpb24gaGFzIGVuZGVkXHJcbmNvbnN0IFBBVVNFX0FGVEVSX0NPTlZFUlNBVElPTiA9IDEuNTtcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOUEMgZXh0ZW5kcyBQaHlzaWNzRW50aXR5IHtcclxuICAgIHB1YmxpYyBkaXJlY3Rpb24gPSAxO1xyXG4gICAgcHVibGljIGZhY2U6IEZhY2UgfCBudWxsID0gbnVsbDtcclxuICAgIHB1YmxpYyBkZWZhdWx0RmFjZU1vZGUgPSBGYWNlTW9kZXMuTkVVVFJBTDtcclxuICAgIHB1YmxpYyBncmVldGluZzogR3JlZXRpbmcgfCBudWxsID0gbnVsbDtcclxuICAgIHB1YmxpYyBjb252ZXJzYXRpb246IENvbnZlcnNhdGlvbiB8IG51bGwgPSBudWxsO1xyXG4gICAgcHVibGljIHRoaW5rQnViYmxlOiBTcGVlY2hCdWJibGUgfCBudWxsID0gbnVsbDtcclxuICAgIHB1YmxpYyBzcGVlY2hCdWJibGUgPSBuZXcgU3BlZWNoQnViYmxlKHRoaXMuc2NlbmUsIHRoaXMueCwgdGhpcy55KTtcclxuICAgIHB1YmxpYyBsb29rQXRQbGF5ZXIgPSB0cnVlO1xyXG4gICAgcHVibGljIGRpYWxvZ3VlUHJvbXB0ID0gbmV3IERpYWxvZ3VlUHJvbXB0KHRoaXMuc2NlbmUsIHRoaXMueCwgdGhpcy55KTtcclxuICAgIHByaXZhdGUgbGFzdEVuZGVkQ29udmVyc2F0aW9uID0gLUluZmluaXR5O1xyXG4gICAgcHJvdGVjdGVkIG1ldCA9IGZhbHNlO1xyXG5cclxuICAgIHByb3RlY3RlZCBkcmF3RmFjZShjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgbG9va0F0UGxheWVyID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmZhY2UpIHtcclxuICAgICAgICAgICAgLy8gTG9vayBhdCBwbGF5ZXJcclxuICAgICAgICAgICAgaWYgKGxvb2tBdFBsYXllcikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZHggPSB0aGlzLnNjZW5lLnBsYXllci54IC0gdGhpcy54O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mYWNlLnRvZ2dsZURpcmVjdGlvbigoZHggPiAwKSA/IDEgOiAtMSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZhY2UuZHJhdyhjdHgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mYWNlLnNldERpcmVjdGlvbih0aGlzLmRpcmVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZhY2UuZHJhdyhjdHgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyB0aGluayhtZXNzYWdlOiBzdHJpbmcsIHRpbWU6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGlmICh0aGlzLnRoaW5rQnViYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGhpbmtCdWJibGUuaGlkZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnRoaW5rQnViYmxlID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRoaW5rQnViYmxlID0gdGhpcy50aGlua0J1YmJsZSA9IG5ldyBTcGVlY2hCdWJibGUodGhpcy5zY2VuZSwgdGhpcy54LCB0aGlzLnkpO1xyXG4gICAgICAgIHRoaW5rQnViYmxlLnNldE1lc3NhZ2UobWVzc2FnZSk7XHJcbiAgICAgICAgdGhpbmtCdWJibGUuc2hvdygpO1xyXG5cclxuICAgICAgICBhd2FpdCBzbGVlcCh0aW1lKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGhpbmtCdWJibGUgPT09IHRoaW5rQnViYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaW5rQnViYmxlLmhpZGUoKTtcclxuICAgICAgICAgICAgdGhpcy50aGlua0J1YmJsZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoYXNNZXQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtZWV0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubWV0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SW50ZXJhY3Rpb25UZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwiVGFsa1wiO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzaG93RGlhbG9ndWVQcm9tcHQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQWN0aXZlQ29udmVyc2F0aW9uKCkgfHwgIXRoaXMuc2NlbmUucGxheWVyLmlzQ29udHJvbGxhYmxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBkcmF3RGlhbG9ndWVQcm9tcHQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kaWFsb2d1ZVByb21wdC5kcmF3KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGRyYXdHcmVldGluZyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZ3JlZXRpbmc/LmRyYXcoY3R4KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlR3JlZXRpbmcoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ncmVldGluZz8udXBkYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZ2lzdGVyRW5kZWRDb252ZXJzYXRpb24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5sYXN0RW5kZWRDb252ZXJzYXRpb24gPSB0aGlzLnNjZW5lLmdhbWVUaW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1JlYWR5Rm9yQ29udmVyc2F0aW9uKCk6IGJvb2xlYW4gfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLmNvbnZlcnNhdGlvblxyXG4gICAgICAgICAgICAmJiAhdGhpcy5zY2VuZS5wbGF5ZXIuaXNDYXJyeWluZyh0aGlzKVxyXG4gICAgICAgICAgICAmJiB0aGlzLnNjZW5lLmdhbWVUaW1lIC0gdGhpcy5sYXN0RW5kZWRDb252ZXJzYXRpb24gPiBQQVVTRV9BRlRFUl9DT05WRVJTQVRJT05cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoYXNBY3RpdmVDb252ZXJzYXRpb24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLnNjZW5lLnBsYXllci5wbGF5ZXJDb252ZXJzYXRpb24gIT09IG51bGwgJiYgdGhpcy5zY2VuZS5wbGF5ZXIucGxheWVyQ29udmVyc2F0aW9uLm5wYyA9PT0gdGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvZ2dsZURpcmVjdGlvbihkaXJlY3Rpb24gPSB0aGlzLmRpcmVjdGlvbiA+IDAgPyAtMSA6IDEpOiB2b2lkIHtcclxuICAgICAgICBpZiAoZGlyZWN0aW9uICE9PSB0aGlzLmRpcmVjdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZShkdDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMubG9va0F0UGxheWVyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGR4ID0gdGhpcy5zY2VuZS5wbGF5ZXIueCAtIHRoaXMueDtcclxuICAgICAgICAgICAgdGhpcy50b2dnbGVEaXJlY3Rpb24oKGR4ID4gMCkgPyAxIDogLTEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3VwZXIudXBkYXRlKGR0KTtcclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQUE7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWdHQTtBQTlGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBOztBQUNBO0FBQ0E7QUFFQTs7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBM0dBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/entities/NPC.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/PhysicsEntity.js":
|
|
/*!***************************************!*\
|
|
!*** ./lib/entities/PhysicsEntity.js ***!
|
|
\***************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PhysicsEntity = void 0;\nconst constants_1 = __webpack_require__(/*! ../constants */ \"./lib/constants.js\");\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst World_1 = __webpack_require__(/*! ../World */ \"./lib/World.js\");\nconst Player_1 = __webpack_require__(/*! ./Player */ \"./lib/entities/Player.js\");\nclass PhysicsEntity extends Entity_1.Entity {\n constructor() {\n super(...arguments);\n this.velocityX = 0;\n this.velocityY = 0;\n this.maxVelocityX = Infinity;\n this.maxVelocityY = Infinity;\n this.floating = false;\n this.ground = null;\n // This property describes how much the player hitbox grows when\n // this entity is carried. Defaults to the entities own height.\n this.carryHeight = this.height;\n this.lastGroundPosition = { x: 0, y: 0 };\n }\n setFloating(floating) {\n this.floating = floating;\n if (floating) {\n this.setVelocity(0, 0);\n }\n }\n isFloating() {\n return this.floating;\n }\n setMaxVelocity(maxVelocityX, maxVelocityY = maxVelocityX) {\n this.maxVelocityX = maxVelocityX;\n this.maxVelocityY = maxVelocityY;\n }\n accelerate(x, y) {\n this.accelerateX(x);\n this.accelerateY(y);\n }\n accelerateX(x) {\n if (x > 0) {\n this.velocityX = Math.min(this.maxVelocityX, this.velocityX + x);\n }\n else {\n this.velocityX = Math.max(-this.maxVelocityX, this.velocityX + x);\n }\n }\n accelerateY(y) {\n this.velocityY = Math.min(this.maxVelocityY, this.velocityY + y);\n }\n decelerate(x, y) {\n this.decelerateX(x);\n this.decelerateY(y);\n }\n decelerateX(x) {\n if (x > 0) {\n this.velocityX = Math.max(0, this.velocityX - x);\n }\n else {\n this.velocityX = Math.min(0, this.velocityX - x);\n }\n }\n decelerateY(y) {\n this.velocityY = Math.max(0, this.velocityY - y);\n }\n setVelocity(x, y) {\n this.velocityX = x;\n this.velocityY = y;\n }\n setVelocityX(x) {\n this.velocityX = x;\n }\n setVelocityY(y) {\n this.velocityY = y;\n }\n getVelocityX() {\n return this.velocityX;\n }\n getVelocityY() {\n return this.velocityY;\n }\n checkCollision(x, y, ignore) {\n return this.scene.world.collidesWith(x, y, [this], ignore);\n }\n checkCollisionBox(x, y, ignore) {\n for (let i = -this.width / 2; i < this.width / 2; i++) {\n let env = this.checkCollision(x + i, y, ignore);\n if (env !== World_1.Environment.AIR) {\n return env;\n }\n env = this.checkCollision(x + i, y + this.height, ignore);\n if (env !== World_1.Environment.AIR) {\n return env;\n }\n }\n for (let i = 0; i < this.height; i++) {\n let env = this.checkCollision(x - this.width / 2, y + i, ignore);\n if (env !== World_1.Environment.AIR) {\n return env;\n }\n env = this.checkCollision(x + this.width / 2, y + i, ignore);\n if (env !== World_1.Environment.AIR) {\n return env;\n }\n }\n return World_1.Environment.AIR;\n }\n updatePosition(newX, newY) {\n if (this.floating) {\n this.x = newX;\n this.y = newY;\n }\n else {\n const env = this.checkCollisionBox(newX, newY, newY > this.y ? [World_1.Environment.PLATFORM] : []);\n if (env === World_1.Environment.AIR || env === World_1.Environment.WATER) {\n this.x = newX;\n this.y = newY;\n }\n else {\n this.setVelocity(0, 0);\n }\n }\n }\n update(dt) {\n super.update(dt);\n const world = this.scene.world;\n const ground = world.getObjectAt(this.x, this.y - 5, [this]);\n if (ground instanceof PhysicsEntity) {\n this.x += ground.getVelocityX() * constants_1.PIXEL_PER_METER * dt;\n this.y += ground.getVelocityY() * constants_1.PIXEL_PER_METER * dt;\n }\n this.ground = ground;\n this.updatePosition(this.x + this.velocityX * constants_1.PIXEL_PER_METER * dt, this.y + this.velocityY * constants_1.PIXEL_PER_METER * dt);\n // Object dropping down when there is no ground below\n if (!this.floating) {\n const environment = world.collidesWith(this.x, this.y - 1, [this], this instanceof Player_1.Player && this.jumpDown ? [World_1.Environment.PLATFORM] : []);\n if (environment === World_1.Environment.AIR) {\n this.velocityY -= this.getGravity() * dt;\n // Apply terminal velocity to falling entities\n if (this.velocityY < 0) {\n this.velocityY = Math.max(this.velocityY, constants_1.TERMINAL_VELOCITY);\n }\n }\n else if (environment === World_1.Environment.WATER) {\n this.velocityY = constants_1.DROWNING_VELOCITY;\n this.velocityX = 0;\n }\n else if (this.velocityY < 0) {\n this.velocityY = 0;\n if (!(this instanceof Player_1.Player)) {\n this.velocityX = 0;\n }\n this.x = Math.round(this.x);\n this.y = Math.round(this.y);\n }\n else {\n // is on ground\n this.lastGroundPosition.x = this.x;\n this.lastGroundPosition.y = this.y;\n }\n }\n }\n getGravity() {\n return constants_1.GRAVITY;\n }\n getGround() {\n return this.ground;\n }\n}\nexports.PhysicsEntity = PhysicsEntity;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvUGh5c2ljc0VudGl0eS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9lbnRpdGllcy9QaHlzaWNzRW50aXR5LnRzPzRlZjQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRFJPV05JTkdfVkVMT0NJVFksIEdSQVZJVFksIFBJWEVMX1BFUl9NRVRFUiwgVEVSTUlOQUxfVkVMT0NJVFkgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gXCIuLi9FbnRpdHlcIjtcclxuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tIFwiLi4vV29ybGRcIjtcclxuaW1wb3J0IHsgR2FtZU9iamVjdCB9IGZyb20gXCIuLi9zY2VuZXMvR2FtZVNjZW5lXCI7XHJcbmltcG9ydCB7IFBsYXllciB9IGZyb20gXCIuL1BsYXllclwiO1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBoeXNpY3NFbnRpdHkgZXh0ZW5kcyBFbnRpdHkge1xyXG4gICAgcHJpdmF0ZSB2ZWxvY2l0eVggPSAwO1xyXG4gICAgcHJpdmF0ZSB2ZWxvY2l0eVkgPSAwO1xyXG4gICAgcHJpdmF0ZSBtYXhWZWxvY2l0eVggPSBJbmZpbml0eTtcclxuICAgIHByaXZhdGUgbWF4VmVsb2NpdHlZID0gSW5maW5pdHk7XHJcbiAgICBwcml2YXRlIGZsb2F0aW5nID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGdyb3VuZDogR2FtZU9iamVjdCB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIC8vIFRoaXMgcHJvcGVydHkgZGVzY3JpYmVzIGhvdyBtdWNoIHRoZSBwbGF5ZXIgaGl0Ym94IGdyb3dzIHdoZW5cclxuICAgIC8vIHRoaXMgZW50aXR5IGlzIGNhcnJpZWQuIERlZmF1bHRzIHRvIHRoZSBlbnRpdGllcyBvd24gaGVpZ2h0LlxyXG4gICAgcHVibGljIGNhcnJ5SGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcblxyXG4gICAgcHJvdGVjdGVkIGxhc3RHcm91bmRQb3NpdGlvbiA9IHsgeDogMCwgeTogMCB9O1xyXG5cclxuICAgIHB1YmxpYyBzZXRGbG9hdGluZyhmbG9hdGluZzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZmxvYXRpbmcgPSBmbG9hdGluZztcclxuXHJcbiAgICAgICAgaWYgKGZsb2F0aW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmVsb2NpdHkoMCwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0Zsb2F0aW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZsb2F0aW5nO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRNYXhWZWxvY2l0eShtYXhWZWxvY2l0eVg6IG51bWJlciwgbWF4VmVsb2NpdHlZID0gbWF4VmVsb2NpdHlYKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tYXhWZWxvY2l0eVggPSBtYXhWZWxvY2l0eVg7XHJcbiAgICAgICAgdGhpcy5tYXhWZWxvY2l0eVkgPSBtYXhWZWxvY2l0eVk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFjY2VsZXJhdGUoeDogbnVtYmVyLCB5OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFjY2VsZXJhdGVYKHgpO1xyXG4gICAgICAgIHRoaXMuYWNjZWxlcmF0ZVkoeSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFjY2VsZXJhdGVYKHg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmICh4ID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnZlbG9jaXR5WCA9IE1hdGgubWluKHRoaXMubWF4VmVsb2NpdHlYLCB0aGlzLnZlbG9jaXR5WCArIHgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudmVsb2NpdHlYID0gTWF0aC5tYXgoLXRoaXMubWF4VmVsb2NpdHlYLCB0aGlzLnZlbG9jaXR5WCArIHgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWNjZWxlcmF0ZVkoeTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52ZWxvY2l0eVkgPSBNYXRoLm1pbih0aGlzLm1heFZlbG9jaXR5WSwgdGhpcy52ZWxvY2l0eVkgKyB5KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVjZWxlcmF0ZSh4OiBudW1iZXIsIHk6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGVjZWxlcmF0ZVgoeCk7XHJcbiAgICAgICAgdGhpcy5kZWNlbGVyYXRlWSh5KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVjZWxlcmF0ZVgoeDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmVsb2NpdHlYID0gTWF0aC5tYXgoMCwgdGhpcy52ZWxvY2l0eVggLSB4KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZlbG9jaXR5WCA9IE1hdGgubWluKDAsIHRoaXMudmVsb2NpdHlYIC0geCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWNlbGVyYXRlWSh5OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZlbG9jaXR5WSA9IE1hdGgubWF4KDAsIHRoaXMudmVsb2NpdHlZIC0geSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFZlbG9jaXR5KHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52ZWxvY2l0eVggPSB4O1xyXG4gICAgICAgIHRoaXMudmVsb2NpdHlZID0geTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0VmVsb2NpdHlYKHg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmVsb2NpdHlYID0geDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0VmVsb2NpdHlZKHk6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmVsb2NpdHlZID0geTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VmVsb2NpdHlYKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmVsb2NpdHlYO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRWZWxvY2l0eVkoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52ZWxvY2l0eVk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja0NvbGxpc2lvbih4OiBudW1iZXIsIHk6IG51bWJlciwgaWdub3JlPzogRW52aXJvbm1lbnRbXSk6IEVudmlyb25tZW50IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zY2VuZS53b3JsZC5jb2xsaWRlc1dpdGgoeCwgeSwgWyB0aGlzIF0sIGlnbm9yZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja0NvbGxpc2lvbkJveCh4OiBudW1iZXIsIHk6IG51bWJlciwgaWdub3JlPzogRW52aXJvbm1lbnRbXSk6IEVudmlyb25tZW50IHtcclxuICAgICAgICBmb3IgKGxldCBpID0gLXRoaXMud2lkdGggLyAyOyBpIDwgdGhpcy53aWR0aCAvIDI7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgZW52ID0gdGhpcy5jaGVja0NvbGxpc2lvbih4ICsgaSwgeSwgaWdub3JlKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChlbnYgIT09IEVudmlyb25tZW50LkFJUikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVudjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZW52ID0gdGhpcy5jaGVja0NvbGxpc2lvbih4ICsgaSwgeSArIHRoaXMuaGVpZ2h0LCBpZ25vcmUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVudiAhPT0gRW52aXJvbm1lbnQuQUlSKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW52O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaGVpZ2h0OyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGVudiA9IHRoaXMuY2hlY2tDb2xsaXNpb24oeCAtIHRoaXMud2lkdGggLyAyLCB5ICsgaSwgaWdub3JlKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChlbnYgIT09IEVudmlyb25tZW50LkFJUikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVudjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZW52ID0gdGhpcy5jaGVja0NvbGxpc2lvbih4ICsgdGhpcy53aWR0aCAvIDIsIHkgKyBpLCBpZ25vcmUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVudiAhPT0gRW52aXJvbm1lbnQuQUlSKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW52O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuQUlSO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB1cGRhdGVQb3NpdGlvbihuZXdYOiBudW1iZXIsIG5ld1k6IG51bWJlcik6IHZvaWQge1xyXG5cclxuICAgICAgICBpZiAodGhpcy5mbG9hdGluZykge1xyXG4gICAgICAgICAgICB0aGlzLnggPSBuZXdYO1xyXG4gICAgICAgICAgICB0aGlzLnkgPSBuZXdZO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVudiA9IHRoaXMuY2hlY2tDb2xsaXNpb25Cb3goXHJcbiAgICAgICAgICAgICAgICBuZXdYLCBuZXdZLCBuZXdZID4gdGhpcy55ID8gWyBFbnZpcm9ubWVudC5QTEFURk9STSBdIDogW11cclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChlbnYgPT09IEVudmlyb25tZW50LkFJUiB8fCBlbnYgPT09IEVudmlyb25tZW50LldBVEVSKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnggPSBuZXdYO1xyXG4gICAgICAgICAgICAgICAgdGhpcy55ID0gbmV3WTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmVsb2NpdHkoMCwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZShkdDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIudXBkYXRlKGR0KTtcclxuXHJcbiAgICAgICAgY29uc3Qgd29ybGQgPSB0aGlzLnNjZW5lLndvcmxkO1xyXG4gICAgICAgIGNvbnN0IGdyb3VuZCA9IHdvcmxkLmdldE9iamVjdEF0KHRoaXMueCwgdGhpcy55IC0gNSwgWyB0aGlzIF0pO1xyXG5cclxuICAgICAgICBpZiAoZ3JvdW5kIGluc3RhbmNlb2YgUGh5c2ljc0VudGl0eSkge1xyXG4gICAgICAgICAgICB0aGlzLnggKz0gZ3JvdW5kLmdldFZlbG9jaXR5WCgpICogUElYRUxfUEVSX01FVEVSICogZHQ7XHJcbiAgICAgICAgICAgIHRoaXMueSArPSBncm91bmQuZ2V0VmVsb2NpdHlZKCkgKiBQSVhFTF9QRVJfTUVURVIgKiBkdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZ3JvdW5kID0gZ3JvdW5kO1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKFxyXG4gICAgICAgICAgICB0aGlzLnggKyB0aGlzLnZlbG9jaXR5WCAqIFBJWEVMX1BFUl9NRVRFUiAqIGR0LFxyXG4gICAgICAgICAgICB0aGlzLnkgKyB0aGlzLnZlbG9jaXR5WSAqIFBJWEVMX1BFUl9NRVRFUiAqIGR0XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8gT2JqZWN0IGRyb3BwaW5nIGRvd24gd2hlbiB0aGVyZSBpcyBubyBncm91bmQgYmVsb3dcclxuICAgICAgICBpZiAoIXRoaXMuZmxvYXRpbmcpIHtcclxuICAgICAgICAgICAgY29uc3QgZW52aXJvbm1lbnQgPSB3b3JsZC5jb2xsaWRlc1dpdGgoXHJcbiAgICAgICAgICAgICAgICB0aGlzLngsIHRoaXMueSAtIDEsXHJcbiAgICAgICAgICAgICAgICBbIHRoaXMgXSxcclxuICAgICAgICAgICAgICAgIHRoaXMgaW5zdGFuY2VvZiBQbGF5ZXIgJiYgdGhpcy5qdW1wRG93biA/IFsgRW52aXJvbm1lbnQuUExBVEZPUk0gXSA6IFtdXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZW52aXJvbm1lbnQgPT09IEVudmlyb25tZW50LkFJUikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52ZWxvY2l0eVkgLT0gdGhpcy5nZXRHcmF2aXR5KCkgKiBkdDtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBBcHBseSB0ZXJtaW5hbCB2ZWxvY2l0eSB0byBmYWxsaW5nIGVudGl0aWVzXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52ZWxvY2l0eVkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52ZWxvY2l0eVkgPSBNYXRoLm1heCh0aGlzLnZlbG9jaXR5WSwgVEVSTUlOQUxfVkVMT0NJVFkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVudmlyb25tZW50ID09PSBFbnZpcm9ubWVudC5XQVRFUikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52ZWxvY2l0eVkgPSBEUk9XTklOR19WRUxPQ0lUWTtcclxuICAgICAgICAgICAgICAgIHRoaXMudmVsb2NpdHlYID0gMDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZlbG9jaXR5WSA8IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmVsb2NpdHlZID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUGxheWVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmVsb2NpdHlYID0gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMueCA9IE1hdGgucm91bmQodGhpcy54KTtcclxuICAgICAgICAgICAgICAgIHRoaXMueSA9IE1hdGgucm91bmQodGhpcy55KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGlzIG9uIGdyb3VuZFxyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0R3JvdW5kUG9zaXRpb24ueCA9IHRoaXMueDtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEdyb3VuZFBvc2l0aW9uLnkgPSB0aGlzLnk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldEdyYXZpdHkoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gR1JBVklUWTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0R3JvdW5kKCk6IEdhbWVPYmplY3QgfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ncm91bmQ7XHJcbiAgICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQUE7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUE0TEE7QUExTEE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBS0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBeE1BOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/entities/PhysicsEntity.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/Player.js":
|
|
/*!********************************!*\
|
|
!*** ./lib/entities/Player.js ***!
|
|
\********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar Player_1;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Player = exports.Gender = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst GameScene_1 = __webpack_require__(/*! ../scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst BitmapFont_1 = __webpack_require__(/*! ../BitmapFont */ \"./lib/BitmapFont.js\");\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst util_1 = __webpack_require__(/*! ../util */ \"./lib/util.js\");\nconst Campaign_1 = __webpack_require__(/*! ../Campaign */ \"./lib/Campaign.js\");\nconst Cloud_1 = __webpack_require__(/*! ./Cloud */ \"./lib/entities/Cloud.js\");\nconst ControllerFamily_1 = __webpack_require__(/*! ../input/ControllerFamily */ \"./lib/input/ControllerFamily.js\");\nconst ControllerManager_1 = __webpack_require__(/*! ../input/ControllerManager */ \"./lib/input/ControllerManager.js\");\nconst Conversation_1 = __webpack_require__(/*! ../Conversation */ \"./lib/Conversation.js\");\nconst ConversationProxy_1 = __webpack_require__(/*! ../ConversationProxy */ \"./lib/ConversationProxy.js\");\nconst Dance_1 = __webpack_require__(/*! ../Dance */ \"./lib/Dance.js\");\nconst constants_1 = __webpack_require__(/*! ../constants */ \"./lib/constants.js\");\nconst World_1 = __webpack_require__(/*! ../World */ \"./lib/World.js\");\nconst GotItemScene_1 = __webpack_require__(/*! ../scenes/GotItemScene */ \"./lib/scenes/GotItemScene.js\");\nconst NPC_1 = __webpack_require__(/*! ./NPC */ \"./lib/entities/NPC.js\");\nconst Particles_1 = __webpack_require__(/*! ../Particles */ \"./lib/Particles.js\");\nconst PhysicsEntity_1 = __webpack_require__(/*! ./PhysicsEntity */ \"./lib/entities/PhysicsEntity.js\");\nconst PlayerConversation_1 = __webpack_require__(/*! ../PlayerConversation */ \"./lib/PlayerConversation.js\");\nconst Quests_1 = __webpack_require__(/*! ../Quests */ \"./lib/Quests.js\");\nconst Renderer_1 = __webpack_require__(/*! ../Renderer */ \"./lib/Renderer.js\");\nconst Seed_1 = __webpack_require__(/*! ./Seed */ \"./lib/entities/Seed.js\");\nconst Sign_1 = __webpack_require__(/*! ./Sign */ \"./lib/entities/Sign.js\");\nconst Snowball_1 = __webpack_require__(/*! ./Snowball */ \"./lib/entities/Snowball.js\");\nconst Sound_1 = __webpack_require__(/*! ../Sound */ \"./lib/Sound.js\");\nconst SpeechBubble_1 = __webpack_require__(/*! ../SpeechBubble */ \"./lib/SpeechBubble.js\");\nconst Stone_1 = __webpack_require__(/*! ./Stone */ \"./lib/entities/Stone.js\");\nconst Wall_1 = __webpack_require__(/*! ./Wall */ \"./lib/entities/Wall.js\");\nconst Wood_1 = __webpack_require__(/*! ./Wood */ \"./lib/entities/Wood.js\");\nconst groundColors = [\n \"#806057\",\n \"#504336\",\n \"#3C8376\",\n \"#908784\"\n];\nconst bounceColors = [\n \"#f06060\",\n \"#e87f7f\",\n \"#ff7070\"\n];\nconst drownThoughts = [\n { message: \"OK, I'm not Jesus. Noted!\", duration: 4000 },\n { message: \"Looks like I can't swim… But I can respawn, nice!\", duration: 5000 },\n { message: \"Well, that was strange… And wet.\", duration: 4000 }\n];\nconst drowningThoughts = [\n { message: \"Waah!\", duration: 1000 },\n { message: \"Help!\", duration: 1000 },\n { message: \"Mama!\", duration: 1000 },\n { message: \"Ieeh!\", duration: 1000 },\n { message: \"Argh!\", duration: 1000 }\n];\nvar Gender;\n(function (Gender) {\n Gender[Gender[\"FEMALE\"] = 0] = \"FEMALE\";\n Gender[Gender[\"MALE\"] = 1] = \"MALE\";\n})(Gender = exports.Gender || (exports.Gender = {}));\n/** The number of seconds until player gets a hint. */\nconst HINT_TIMEOUT = 90;\nlet Player = Player_1 = class Player extends PhysicsEntity_1.PhysicsEntity {\n constructor(scene, x, y) {\n super(scene, x, y, constants_1.PLAYER_WIDTH, constants_1.PLAYER_HEIGHT);\n this.controllerSpriteMapRecords = {\n [ControllerFamily_1.ControllerSpriteMap.KEYBOARD]: Player_1.buttons[0],\n [ControllerFamily_1.ControllerSpriteMap.XBOX]: Player_1.buttons[1],\n [ControllerFamily_1.ControllerSpriteMap.PLAYSTATION]: Player_1.buttons[2]\n };\n this.lastHint = Date.now();\n this.flying = false;\n this.direction = 1;\n this.playerSpriteMetadata = null;\n this.animation = \"idle\";\n this.moveLeft = false;\n this.moveRight = false;\n this.visible = false;\n this.running = false;\n this.jumpThresholdTimer = constants_1.PLAYER_JUMP_TIMING_THRESHOLD;\n this.jumpDown = false;\n this.jumpKeyPressed = false;\n this.drowning = 0;\n this.dance = null;\n this.currentFailAnimation = 1;\n this.carrying = null;\n this.canRun = false;\n this.canRainDance = false;\n this.doubleJump = false;\n this.multiJump = false;\n this.hasFriendship = false;\n this.usedJump = false;\n this.usedDoubleJump = false;\n this.autoMove = null;\n this.isControllable = true;\n this.showHints = false;\n this.isPettingDog = false;\n this.playerConversation = null;\n this.speechBubble = new SpeechBubble_1.SpeechBubble(this.scene, this.x, this.y, undefined, undefined, undefined, undefined, undefined, undefined, true);\n this.thinkBubble = null;\n this.closestNPC = null;\n this.disableParticles = false;\n this.isControllable = false;\n this.setFloating(true);\n // Apply selected character traits\n this.characterAsset = this.scene.game.campaign.selectedCharacter;\n this.voiceAsset = this.scene.game.campaign.selectedVoice;\n Conversation_1.Conversation.setGlobal(\"ismale\", this.characterAsset === Campaign_1.CharacterAsset.MALE ? \"true\" : \"false\");\n setTimeout(() => {\n this.isControllable = true;\n this.visible = true;\n this.setFloating(false);\n }, 2200);\n document.addEventListener(\"keydown\", event => this.handleKeyDown(event));\n if (util_1.isDev()) {\n console.log(\"Dev mode, press “C” to dance anywhere, “P” to spawn the stone, “O” to spawn the \"\n + \"seed, “I” to spawn wood, “T” to throw useless snowball, “K” to learn all \"\n + \"abilities, “M” to show bounds of entities and triggers.\");\n }\n this.setMaxVelocity(constants_1.MAX_PLAYER_RUNNING_SPEED);\n this.dustEmitter = this.scene.particles.createEmitter({\n position: { x: this.x, y: this.y },\n velocity: () => ({ x: util_1.rnd(-1, 1) * 26, y: util_1.rnd(0.7, 1) * 45 }),\n color: () => util_1.rndItem(groundColors),\n size: util_1.rnd(1, 2),\n gravity: { x: 0, y: -100 },\n lifetime: () => util_1.rnd(0.5, 0.8),\n alphaCurve: Particles_1.valueCurves.trapeze(0.05, 0.2)\n });\n this.bounceEmitter = this.scene.particles.createEmitter({\n position: { x: this.x, y: this.y },\n velocity: () => ({ x: util_1.rnd(-1, 1) * 90, y: util_1.rnd(0.7, 1) * 60 }),\n color: () => util_1.rndItem(bounceColors),\n size: util_1.rnd(1.5, 3),\n gravity: { x: 0, y: -120 },\n lifetime: () => util_1.rnd(0.4, 0.6),\n alphaCurve: Particles_1.valueCurves.trapeze(0.05, 0.2)\n });\n this.doubleJumpEmitter = this.scene.particles.createEmitter({\n position: { x: this.x, y: this.y },\n velocity: () => ({ x: util_1.rnd(-1, 1) * 90, y: util_1.rnd(-1, 0) * 100 }),\n color: () => util_1.rndItem(constants_1.DOUBLE_JUMP_COLORS),\n size: util_1.rnd(1.5, 3),\n gravity: { x: 0, y: -120 },\n lifetime: () => util_1.rnd(0.4, 0.6),\n alphaCurve: Particles_1.valueCurves.trapeze(0.05, 0.2)\n });\n }\n getControllable() {\n return this.isControllable;\n }\n setControllable(isControllable) {\n this.isControllable = isControllable;\n }\n startAutoMove(x, turnAround) {\n if (!this.autoMove) {\n this.autoMove = {\n destinationX: x,\n lastX: this.x,\n turnAround\n };\n }\n // Failsafe to stop automove after 1 second.\n setTimeout(() => {\n if (this.autoMove)\n this.stopAutoMove();\n }, 1000);\n }\n stopAutoMove() {\n var _a;\n if ((_a = this.autoMove) === null || _a === void 0 ? void 0 : _a.turnAround) {\n this.direction = this.direction * -1;\n }\n this.autoMove = null;\n this.moveRight = false;\n this.moveLeft = false;\n }\n startPettingDog() {\n this.isPettingDog = true;\n this.x = this.scene.shiba.direction > 0 ? this.scene.shiba.x + 18 : this.scene.shiba.x - 18;\n }\n stopPettingDog() {\n this.isPettingDog = false;\n }\n enableRunning() {\n this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).trigger(Quests_1.QuestATrigger.GOT_RUNNING_ABILITY);\n if (!this.canRun) {\n this.scene.scenes.pushScene(GotItemScene_1.GotItemScene, GotItemScene_1.Item.RUNNING);\n this.canRun = true;\n }\n }\n enableRainDance() {\n this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).trigger(Quests_1.QuestATrigger.LEARNED_RAIN_DANCE);\n if (!this.canRainDance) {\n this.scene.scenes.pushScene(GotItemScene_1.GotItemScene, GotItemScene_1.Item.RAINDANCE);\n this.canRainDance = true;\n }\n }\n enableDoubleJump() {\n Conversation_1.Conversation.setGlobal(\"hasDoubleJump\", \"true\");\n this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).trigger(Quests_1.QuestATrigger.GOT_QUEST_FROM_TREE);\n if (!this.doubleJump) {\n this.scene.scenes.pushScene(GotItemScene_1.GotItemScene, GotItemScene_1.Item.DOUBLEJUMP);\n this.doubleJump = true;\n }\n }\n enableMultiJump() {\n this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).trigger(Quests_1.QuestATrigger.GOT_MULTIJUMP);\n if (!this.multiJump) {\n this.scene.scenes.pushScene(GotItemScene_1.GotItemScene, GotItemScene_1.Item.MULTIJUMP);\n this.multiJump = true;\n }\n }\n disableMultiJump() {\n this.multiJump = false;\n }\n enableFriendship() {\n if (!this.hasFriendship) {\n this.scene.scenes.pushScene(GotItemScene_1.GotItemScene, GotItemScene_1.Item.FRIENDSHIP);\n this.hasFriendship = true;\n Conversation_1.Conversation.setGlobal(\"hasFriendship\", \"true\");\n this.scene.removeGameObject(this.scene.powerShiba);\n }\n }\n removePowerUps() {\n this.multiJump = false;\n this.doubleJump = false;\n this.canRun = false;\n }\n removeMultiJump() {\n this.multiJump = false;\n }\n switchToReality() {\n this.canRun = false;\n this.multiJump = false;\n this.characterAsset = Campaign_1.CharacterAsset.PATIENT;\n this.direction = -1;\n }\n getDance() {\n return this.dance;\n }\n cancelDance() {\n this.dance = null;\n }\n handleButtonDown(event) {\n return tslib_1.__awaiter(this, void 0, void 0, function* () {\n if (this.scene.paused || !this.isControllable || this.autoMove) {\n return;\n }\n if (this.isPettingDog) {\n if (event.isPlayerMoveLeft || event.isPlayerMoveRight || event.isPlayerAction) {\n this.scene.cancelPatEnding();\n }\n return;\n }\n if (this.dance) {\n this.dance.handleButtonDown(event);\n return;\n }\n if (!this.scene.camera.isOnTarget() || event.repeat) {\n return;\n }\n if (this.playerConversation) {\n this.playerConversation.handleButton(event);\n return;\n }\n if (this.canRun && event.isPlayerRun) {\n this.running = true;\n }\n if (event.isPlayerMoveRight) {\n this.moveRight = true;\n this.moveLeft = false;\n }\n else if (event.isPlayerMoveLeft) {\n this.moveLeft = true;\n this.moveRight = false;\n }\n else if (event.isPlayerEnterDoor) {\n if (!this.canEnterDoor())\n return;\n const gate = this.scene.world.getGateCollisions(this)[0];\n this.enterGate(gate);\n }\n else if (event.isPlayerInteract) {\n // Check for gates / doors\n if (!this.flying) {\n if (this.closestNPC\n && this.closestNPC.isReadyForConversation()\n && this.closestNPC.conversation) {\n const conversation = this.closestNPC.conversation;\n // Disable auto movement to a safe talking distance for the stone in the river\n const autoMove = (this.closestNPC instanceof Sign_1.Sign\n || (this.closestNPC instanceof Stone_1.Stone\n && this.closestNPC.state !== Stone_1.StoneState.DEFAULT) ? false : true);\n this.playerConversation = new PlayerConversation_1.PlayerConversation(this, this.closestNPC, conversation, autoMove);\n }\n else if (this.readableTrigger) {\n const proxy = new ConversationProxy_1.ConversationProxy(this.scene, this.x, this.y, this.readableTrigger.properties);\n this.playerConversation = new PlayerConversation_1.PlayerConversation(this, proxy, proxy.conversation, false);\n }\n else if (this.canDanceToMakeRain()) {\n this.startDance(this.scene.apocalypse ? 3 : 2);\n this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).trigger(Quests_1.QuestATrigger.MADE_RAIN);\n }\n }\n }\n else if (event.isPlayerAction) {\n if (this.isCarrying())\n this.throw();\n }\n else if (event.isPlayerJump && this.canJump()) {\n this.jumpKeyPressed = true;\n this.jump();\n }\n else if (event.isPlayerDrop) {\n this.jumpDown = true;\n }\n });\n }\n throw() {\n if (!this.carrying || (this.carrying instanceof Stone_1.Stone && !this.canThrowStoneIntoWater())) {\n return;\n }\n if (this.carrying instanceof Stone_1.Stone) {\n this.carrying.setVelocity(10 * this.direction, 10);\n }\n else {\n this.carrying.setVelocity(5 * this.direction, 5);\n }\n this.height = constants_1.PLAYER_HEIGHT;\n this.carrying = null;\n Player_1.throwingSound.stop();\n Player_1.throwingSound.play();\n }\n // Used in dev mode to enable some special keys that can only be triggered by using a keyboard.\n handleKeyDown(event) {\n if (this.scene.paused) {\n return;\n }\n if (!this.scene.camera.isOnTarget() || event.repeat) {\n return;\n }\n if (util_1.isDev()) {\n if (event.key === \"c\") {\n // TODO Just for debugging. Real dancing is with action key on rain cloud\n this.startDance(3);\n }\n else if (event.key === \"p\" && !this.carrying) {\n // TODO Just for debugging, this must be removed later\n this.carry(this.scene.stone);\n }\n else if (event.key === \"o\" && !this.carrying) {\n this.carry(this.scene.tree.spawnSeed());\n }\n else if (event.key === \"u\" && !this.carrying) {\n this.carry(this.scene.bone);\n }\n else if (event.key === \"i\" && !this.carrying) {\n this.carry(this.scene.tree.seed.spawnWood());\n }\n else if (event.key === \"t\") {\n this.scene.gameObjects.push(new Snowball_1.Snowball(this.scene, this.x, this.y + this.height * 0.75, 20 * this.direction, 10));\n Player_1.throwingSound.stop();\n Player_1.throwingSound.play();\n }\n else if (event.key === \"k\") {\n this.multiJump = true;\n this.doubleJump = true;\n this.canRun = true;\n this.canRainDance = true;\n this.think(\"I can do everything now.\", 1500);\n }\n else if (event.key === \"m\") {\n this.scene.showBounds = !this.scene.showBounds;\n this.think(\"Toggling bounds.\", 1500);\n }\n }\n }\n think(message, time) {\n return tslib_1.__awaiter(this, void 0, void 0, function* () {\n if (this.thinkBubble) {\n this.thinkBubble.hide();\n this.thinkBubble = null;\n }\n const thinkBubble = this.thinkBubble = new SpeechBubble_1.SpeechBubble(this.scene, this.x, this.y);\n thinkBubble.setMessage(message);\n thinkBubble.show();\n yield util_1.sleep(time);\n if (this.thinkBubble === thinkBubble) {\n thinkBubble.hide();\n this.thinkBubble = null;\n }\n });\n }\n startDance(difficulty = 1) {\n if (!this.dance) {\n switch (difficulty) {\n case 1:\n this.dance = new Dance_1.Dance(this.scene, this.x, this.y - 25, 100, \" 1 1 2 2 1 2 1 3\", undefined, 1, undefined, true, 0);\n break;\n case 2:\n this.dance = new Dance_1.Dance(this.scene, this.x, this.y - 25, 192, \"1 2 1 1 2 2 121 212 121 212 3 \", undefined, 3);\n break;\n case 3:\n this.dance = new Dance_1.Dance(this.scene, this.x, this.y - 25, 192, \"112 221 312 123 2121121 111 222 3 \", undefined, 4);\n break;\n default:\n this.dance = new Dance_1.Dance(this.scene, this.x, this.y - 25, 192, \"3\");\n }\n }\n }\n /**\n * Teleport the player from the source gate to it's corresponding target gate.\n * The teleport is not instant but accompanied by a fade to black to obscure the teleportation.\n * Also sets the camera bounds to the target position\n * @param gate the source the player enters\n */\n enterGate(gate) {\n return tslib_1.__awaiter(this, void 0, void 0, function* () {\n if (gate && gate.properties.target) {\n this.isControllable = false;\n this.moveRight = false;\n this.moveLeft = false;\n const targetGate = this.scene.gateObjects.find(target => target.name === gate.properties.target);\n const targetBgmId = gate.properties.bgm;\n if (targetGate) {\n if (gate.properties.enterSound) {\n if (gate.properties.enterSound === \"portal\") {\n Player_1.enterPortalSound.stop();\n Player_1.enterPortalSound.play();\n }\n }\n else {\n Player_1.enterGateSound.stop();\n Player_1.enterGateSound.play();\n }\n this.scene.fadeToBlack(0.8, GameScene_1.FadeDirection.FADE_OUT)\n .then(() => tslib_1.__awaiter(this, void 0, void 0, function* () {\n if (targetBgmId) {\n this.scene.setActiveBgmTrack(targetBgmId);\n }\n if (targetGate.properties.exitSound) {\n if (targetGate.properties.exitSound === \"portal\") {\n Player_1.enterPortalSound.stop();\n Player_1.enterPortalSound.play();\n }\n }\n else {\n Player_1.leaveGateSound.stop();\n Player_1.leaveGateSound.play();\n }\n this.x = targetGate.x + (targetGate.width / 2);\n this.y = targetGate.y - targetGate.height;\n this.scene.camera.setBounds(this.getCurrentMapBounds());\n if (targetGate.name === \"exitportaldoor_2\") {\n this.switchToReality();\n }\n if (targetGate.properties.exitSleepTime) {\n yield util_1.sleep(targetGate.properties.exitSleepTime * 1000);\n }\n const fadeInTime = targetGate.properties.exitFadeTime ? targetGate.properties.exitFadeTime : 0.8;\n this.scene.fadeToBlack(fadeInTime, GameScene_1.FadeDirection.FADE_IN).then(() => {\n this.isControllable = true;\n });\n }));\n }\n }\n });\n }\n canJump() {\n if (this.characterAsset === Campaign_1.CharacterAsset.PATIENT)\n return false;\n if (this.multiJump) {\n return true;\n }\n else if (!this.usedJump && this.jumpThresholdTimer > 0) {\n return true;\n }\n else if (this.doubleJump) {\n return !this.usedDoubleJump;\n }\n return !this.flying;\n }\n jump() {\n if (this.drowning > 0)\n return;\n this.setVelocityY(Math.sqrt(2 * constants_1.PLAYER_JUMP_HEIGHT * constants_1.GRAVITY));\n Player_1.jumpingSounds[this.voiceAsset].stop();\n Player_1.jumpingSounds[this.voiceAsset].play();\n if (this.flying && this.usedJump) {\n this.usedDoubleJump = true;\n if (!this.disableParticles && this.visible) {\n this.doubleJumpEmitter.setPosition(this.x, this.y + 20);\n this.doubleJumpEmitter.emit(20);\n }\n }\n this.usedJump = true;\n }\n handleButtonUp(event) {\n if (this.scene.paused || !this.isControllable || this.autoMove) {\n return;\n }\n if (event.isPlayerMoveRight) {\n this.moveRight = false;\n }\n else if (event.isPlayerMoveLeft) {\n this.moveLeft = false;\n }\n else if (event.isPlayerJump) {\n this.jumpKeyPressed = false;\n }\n else if (event.isPlayerDrop) {\n this.jumpDown = false;\n }\n else if (event.isPlayerRun) {\n this.running = false;\n }\n }\n drawTooltip(text, buttonTag = ControllerFamily_1.ControllerAnimationTags.ACTION) {\n if (!this.isControllable)\n return;\n const controllerSprite = ControllerManager_1.ControllerManager.getInstance().controllerSprite;\n const measure = Player_1.font.measureText(text);\n const gap = 6;\n const offsetY = 12;\n const textPositionX = Math.round(Math.round(this.x) - ((measure.width - this.controllerSpriteMapRecords[controllerSprite].width + gap) / 2));\n const textPositionY = -this.y + offsetY;\n this.scene.renderer.add({\n type: Renderer_1.RenderingType.ASEPRITE,\n layer: Renderer_1.RenderingLayer.UI,\n position: {\n x: textPositionX - this.controllerSpriteMapRecords[controllerSprite].width - gap,\n y: textPositionY\n },\n asset: this.controllerSpriteMapRecords[controllerSprite],\n animationTag: buttonTag,\n });\n this.scene.renderer.add({\n type: Renderer_1.RenderingType.TEXT,\n layer: Renderer_1.RenderingLayer.UI,\n text,\n textColor: \"white\",\n outlineColor: \"black\",\n position: {\n x: textPositionX,\n y: textPositionY\n },\n asset: Player_1.font,\n });\n }\n draw(ctx) {\n if (!this.visible) {\n return;\n }\n const sprite = Player_1.playerSprites[this.characterAsset];\n let animation = this.animation;\n // TODO: Implement animation state concept instead of `animation === \"idle\" || animation === \"walk\" || …`\n if (this.carrying\n && (animation === \"idle\" || animation === \"walk\" || animation === \"jump\" || animation === \"fall\")) {\n animation = animation + \"-carry\";\n }\n this.scene.renderer.addAseprite(sprite, animation, this.x, this.y - 1, Renderer_1.RenderingLayer.PLAYER, this.direction);\n if (this.scene.showBounds) {\n this.drawBounds();\n }\n if (this.closestNPC\n && !this.dance\n && !this.playerConversation\n && this.closestNPC.isReadyForConversation()) {\n this.drawTooltip(this.closestNPC.getInteractionText(), ControllerFamily_1.ControllerAnimationTags.INTERACT);\n }\n else if (this.readableTrigger) {\n this.drawTooltip(\"Examine\", ControllerFamily_1.ControllerAnimationTags.INTERACT);\n }\n else if (this.canEnterDoor()) {\n this.drawTooltip(\"Enter\", ControllerFamily_1.ControllerAnimationTags.OPEN_DOOR);\n }\n else if (this.canThrowStoneIntoWater()) {\n this.drawTooltip(\"Throw stone\", ControllerFamily_1.ControllerAnimationTags.ACTION);\n }\n else if (this.canThrowSeedIntoSoil()) {\n this.drawTooltip(\"Plant seed\", ControllerFamily_1.ControllerAnimationTags.ACTION);\n }\n else if (this.canDanceToMakeRain()) {\n this.drawTooltip(\"Dance\", ControllerFamily_1.ControllerAnimationTags.INTERACT);\n }\n if (this.dance) {\n this.dance.addDanceToRenderQueue();\n }\n this.speechBubble.draw(ctx);\n if (this.thinkBubble) {\n this.thinkBubble.draw(ctx);\n }\n }\n canThrowStoneIntoWater() {\n return (this.carrying instanceof Stone_1.Stone\n && (this.direction === -1\n && this.scene.world.collidesWith(this.x - 30, this.y - 20) === World_1.Environment.WATER));\n }\n canThrowSeedIntoSoil() {\n return (this.carrying instanceof Seed_1.Seed\n && (this.direction === -1\n && this.scene.world.collidesWith(this.x - 30, this.y + 2) === World_1.Environment.SOIL));\n }\n debugCollisions() {\n console.log(\"Entities: \", this.scene.world.getEntityCollisions(this));\n console.log(\"Triggers: \", this.scene.world.getTriggerCollisions(this));\n console.log(\"Gates: \", this.scene.world.getGateCollisions(this));\n }\n getReadableTrigger() {\n const triggers = this.scene.world.getTriggerCollisions(this);\n if (triggers.length === 0)\n return undefined;\n return triggers.find(t => t.name === \"readable\");\n }\n canDanceToMakeRain() {\n if (!this.canRainDance)\n return false;\n const ground = this.getGround();\n return ((this.isCollidingWithTrigger(\"raincloud_sky\")\n && !this.scene.world.isRaining()\n && this.carrying === null\n && !this.scene.apocalypse) || (ground instanceof Cloud_1.Cloud\n && this.scene.apocalypse\n && !ground.isRaining()\n && ground.canRain()));\n }\n canEnterDoor() {\n return !this.flying && !this.carrying && this.scene.world.getGateCollisions(this).length > 0;\n }\n /**\n * Returns the bounds of the map area the player currently resides in\n */\n getCurrentMapBounds() {\n const collisions = this.scene.world.getCameraBounds(this);\n if (collisions.length === 0)\n return undefined;\n return util_1.boundsFromMapObject(collisions[0]);\n }\n respawn() {\n this.x = this.lastGroundPosition.x;\n this.y = this.lastGroundPosition.y + 10;\n this.setVelocity(0, 0);\n }\n getPlayerSpriteMetadata() {\n if (this.playerSpriteMetadata == null) {\n this.playerSpriteMetadata = Player_1.playerSprites.map(sprite => {\n var _a;\n const metaDataJSON = (_a = sprite.getLayer(\"Meta\")) === null || _a === void 0 ? void 0 : _a.data;\n return metaDataJSON ? JSON.parse(metaDataJSON) : {};\n });\n }\n return this.playerSpriteMetadata;\n }\n resetJumps() {\n this.usedJump = false;\n this.usedDoubleJump = false;\n this.jumpThresholdTimer = constants_1.PLAYER_JUMP_TIMING_THRESHOLD;\n }\n isOutOfBounds() {\n if (!this.isControllable)\n return false;\n const mapBounds = this.scene.camera.getBounds();\n if (!mapBounds)\n return false;\n return !this.scene.world.boundingBoxesCollide(this.getBounds(), {\n x: mapBounds.x + 4,\n y: mapBounds.y - 4,\n width: mapBounds.width - 8,\n height: mapBounds.height - 8\n });\n }\n update(dt) {\n var _a;\n super.update(dt);\n const triggerCollisions = this.scene.world.getTriggerCollisions(this);\n // Check if the player left the current map bounds and teleport him back to a valid position.\n if (this.isOutOfBounds()) {\n const pos = this.scene.apocalypse ?\n this.scene.pointsOfInterest.find(poi => poi.name === \"boss_spawn\") :\n this.scene.pointsOfInterest.find(poi => poi.name === \"player_reset_position\");\n if (pos) {\n this.x = pos.x;\n this.y = pos.y;\n this.scene.camera.setBounds(this.getCurrentMapBounds());\n }\n }\n this.speechBubble.update(this.x, this.y);\n if (this.thinkBubble) {\n this.thinkBubble.update(this.x, this.y);\n }\n if (this.playerConversation) {\n this.playerConversation.update();\n }\n if (this.showHints) {\n if ((Date.now() - this.lastHint) / 1000 > HINT_TIMEOUT) {\n this.showHint();\n }\n }\n if (this.carrying) {\n if (this.running) {\n this.running = false;\n this.animation = \"walk\";\n }\n this.carrying.x = this.x;\n const currentFrameIndex = Player_1.playerSprites[this.characterAsset].getTaggedFrameIndex(this.animation + \"-carry\", this.scene.gameTime * 1000);\n const carryOffsetFrames = (_a = this.getPlayerSpriteMetadata()[this.characterAsset].carryOffsetFrames) !== null && _a !== void 0 ? _a : [];\n const offset = carryOffsetFrames.includes(currentFrameIndex + 1) ? 0 : -1;\n this.carrying.y = this.y + (this.height - this.carrying.carryHeight) - offset;\n if (this.carrying instanceof Stone_1.Stone) {\n this.carrying.direction = this.direction;\n }\n }\n const isDrowning = this.scene.world.collidesWith(this.x, this.y) === World_1.Environment.WATER;\n if (isDrowning) {\n if (!this.thinkBubble) {\n const thought = drowningThoughts[util_1.rndInt(0, drowningThoughts.length)];\n this.think(thought.message, thought.duration);\n }\n if (this.carrying instanceof Stone_1.Stone) {\n this.carrying.setVelocity(-2, 10);\n this.carrying = null;\n }\n if (this.drowning === 0) {\n Player_1.drowningSound.play();\n }\n this.setVelocityX(0);\n this.drowning += dt;\n if (this.drowning > 3) {\n Player_1.drowningSound.stop();\n this.respawn();\n const thought = drownThoughts[util_1.rndInt(0, drownThoughts.length)];\n this.think(thought.message, thought.duration);\n }\n }\n else {\n this.drowning = 0;\n }\n const world = this.scene.world;\n const wasFlying = this.flying;\n const prevVelocity = this.getVelocityY();\n // Apply auto movement\n if (this.autoMove) {\n if ((this.autoMove.lastX - this.autoMove.destinationX) * (this.x - this.autoMove.destinationX) <= 0) {\n // Reached or overreached destination\n this.stopAutoMove();\n }\n else {\n // Not yet reached, keep going\n this.autoMove.lastX = this.x;\n if (this.x < this.autoMove.destinationX) {\n this.moveRight = true;\n this.moveLeft = false;\n }\n else {\n this.moveRight = false;\n this.moveLeft = true;\n }\n }\n }\n // Player movement\n if (!this.scene.camera.isOnTarget()) {\n this.moveRight = false;\n this.moveLeft = false;\n }\n const acceleration = this.flying ? constants_1.PLAYER_ACCELERATION_AIR : constants_1.PLAYER_ACCELERATION;\n if (!isDrowning) {\n if (this.running) {\n this.setMaxVelocity(constants_1.MAX_PLAYER_RUNNING_SPEED);\n }\n else {\n this.setMaxVelocity(this.characterAsset === Campaign_1.CharacterAsset.PATIENT ? 3 : constants_1.MAX_PLAYER_SPEED);\n }\n if (this.moveRight) {\n this.direction = 1;\n if (!this.flying) {\n Player_1.walkingSound.play();\n }\n this.accelerateX(acceleration * dt);\n }\n else if (this.moveLeft) {\n this.direction = -1;\n if (!this.flying) {\n Player_1.walkingSound.play();\n }\n this.accelerateX(-acceleration * dt);\n }\n else {\n Player_1.walkingSound.stop();\n if (this.getVelocityX() > 0) {\n this.decelerateX(acceleration * dt);\n }\n else {\n this.decelerateX(-acceleration * dt);\n }\n }\n }\n // Set sprite index depending on movement\n if (this.getVelocityX() === 0 && this.getVelocityY() === 0) {\n this.animation = \"idle\";\n this.flying = false;\n this.resetJumps();\n }\n else {\n if (this.getVelocityY() > 0) {\n this.animation = \"jump\";\n this.flying = true;\n }\n else if (isDrowning\n || (this.getVelocityY() < 0\n && this.y - world.getGround(this.x, this.y) > 10)) {\n if (this.jumpThresholdTimer < 0 || this.usedJump) {\n this.animation = \"fall\";\n }\n this.flying = true;\n }\n else {\n this.animation = (this.running && !this.carrying) ? \"run\" : \"walk\";\n this.flying = false;\n this.resetJumps();\n }\n }\n if (wasFlying && !this.flying) {\n Player_1.landingSound.stop();\n Player_1.landingSound.play();\n }\n // Reduce jump threshold timer when player did not jump yet when falling off an edge\n if (this.flying && !this.usedJump && this.jumpThresholdTimer > 0) {\n this.jumpThresholdTimer -= dt;\n }\n // Check for NPC's that can be interacted with. Reset closestNPC and get all entities that\n // collide with the player with an added 5 px of margin. If there are multiple NPCs\n // colliding, the closest one will be chosen.\n this.closestNPC = null;\n const entities = this.scene.world.getEntityCollisions(this, 5);\n if (entities.length > 0) {\n const closestEntity = entities.length > 1 ? this.getClosestEntity() : entities[0];\n if (closestEntity instanceof NPC_1.NPC) {\n this.closestNPC = closestEntity;\n }\n }\n // Check for readables in player trigger collisions\n this.readableTrigger = this.getReadableTrigger();\n // Spawn random dust particles while walking\n if (!this.disableParticles && this.visible) {\n if (!this.flying && (Math.abs(this.getVelocityX()) > 1 || wasFlying)) {\n if (util_1.timedRnd(dt, 0.2) || wasFlying) {\n this.dustEmitter.setPosition(this.x, this.y);\n const count = wasFlying ? Math.ceil(Math.abs(prevVelocity) / 5) : 1;\n this.dustEmitter.emit(count);\n }\n }\n }\n // Reset jump key state when on ground\n if (!this.flying && this.jumpKeyPressed != null) {\n this.jumpKeyPressed = null;\n }\n // Bounce\n if (this.scene.world.collidesWith(this.x, this.y - 2, [this]) === World_1.Environment.BOUNCE) {\n this.bounce();\n }\n // Dance\n if (this.dance) {\n if (this.dance.hasStarted()) {\n // Basic dancing or error?\n const err = this.dance.getTimeSinceLastMistake();\n const suc = this.dance.getTimeSinceLastSuccess();\n if (err < 1 || suc < 3) {\n if (err <= suc) {\n if (err === 0) {\n this.currentFailAnimation = util_1.rndInt(1, 3);\n }\n this.animation = \"dance-fluke-\" + this.currentFailAnimation;\n }\n else {\n this.animation = \"dance\";\n }\n }\n }\n this.dance.setPosition(this.x, this.y - 16);\n const done = this.dance.update();\n if (done) {\n // On cloud -> make it rain\n if (this.dance.wasSuccessful()) {\n // (Useless because wrong cloud but hey…)\n const ground = this.getGround();\n if (ground && ground instanceof Cloud_1.Cloud) {\n ground.startRain(this.scene.apocalypse ? Infinity : 15);\n // Camera focus to boss for each triggered rain cloud\n const bossPointer = this.scene.pointsOfInterest.find(poi => poi.name === \"boss_spawn\");\n if (bossPointer) {\n this.scene.camera.focusOn(3, bossPointer.x, bossPointer.y + 60, 1, 0, Particles_1.valueCurves.cos(0.35));\n }\n // Remove a single boss fight barrier\n const rainingCloudCount = this.scene.gameObjects.filter(o => o instanceof Cloud_1.Cloud && o.isRaining()).length;\n const wallIdentifier = `wall${rainingCloudCount - 1}`;\n const targetWall = this.scene.gameObjects.find(o => o instanceof Wall_1.Wall && o.identifier === wallIdentifier);\n if (targetWall) {\n targetWall.crumble();\n }\n }\n if (this.isCollidingWithTrigger(\"raincloud_sky\")) {\n this.scene.world.startRain();\n }\n }\n this.dance = null;\n }\n }\n this.disableParticles = false;\n // Pet Dog Animation\n if (this.isPettingDog) {\n this.animation = \"petting\";\n }\n // Logic from triggers\n if (triggerCollisions.length > 0) {\n triggerCollisions.forEach(trigger => {\n // Handle MountainRiddle logic\n if (trigger.name === \"reset_mountain\") {\n this.scene.mountainRiddle.resetRiddle();\n }\n if (trigger.name === \"mountaingate\") {\n const row = trigger.properties.row;\n const col = trigger.properties.col;\n if (col != null && row != null) {\n this.scene.mountainRiddle.checkGate(col, row);\n }\n }\n if (trigger.name === \"teleporter\"\n && this.scene.mountainRiddle.isFailed()\n && !this.scene.mountainRiddle.isCleared()) {\n const teleportY = trigger.properties.teleportY;\n if (teleportY) {\n this.y -= teleportY;\n }\n }\n if (trigger.name === \"finish_mountain_riddle\") {\n this.scene.mountainRiddle.clearRiddle();\n }\n // Disable particle effects while in trigger\n const disableParticles = trigger.properties.disableParticles;\n if (disableParticles) {\n this.disableParticles = true;\n }\n // Set Global Conversation Variables from map triggers\n const globalConversationProps = {\n key: trigger.properties.setGlobalKey,\n value: trigger.properties.setGlobalVal\n };\n if (globalConversationProps.key && globalConversationProps.value) {\n Conversation_1.Conversation.setGlobal(globalConversationProps.key, globalConversationProps.value);\n }\n // Enable Conversion Trees from map triggers\n const enableConversationProps = {\n key: trigger.properties.setDialogEntity,\n value: trigger.properties.setDialogValue\n };\n if (enableConversationProps.key && enableConversationProps.value) {\n this.scene.game.campaign.runAction(\"enable\", null, [enableConversationProps.key, enableConversationProps.value]);\n }\n });\n }\n }\n /**\n * If given coordinate collides with the world then the first free y coordinate above is\n * returned. This can be used to unstuck an object after a new position was set.\n *\n * @param x - X coordinate of current position.\n * @param y - Y coordinate of current position.\n * @return The Y coordinate of the ground below the given coordinate.\n */\n pullOutOfGround() {\n let pulled = 0, col = 0;\n if (this.getVelocityY() <= 0) {\n const world = this.scene.world;\n const height = world.getHeight();\n col = world.collidesWith(this.x, this.y, [this], this.jumpDown ? [World_1.Environment.PLATFORM, World_1.Environment.WATER] : [World_1.Environment.WATER]);\n while (this.y < height && col) {\n pulled++;\n this.y++;\n col = world.collidesWith(this.x, this.y);\n }\n }\n return pulled;\n }\n bounce() {\n this.setVelocityY(Math.sqrt(2 * constants_1.PLAYER_BOUNCE_HEIGHT * constants_1.GRAVITY));\n // Nice bouncy particles\n this.bounceEmitter.setPosition(this.x, this.y - 12);\n this.bounceEmitter.emit(20);\n this.dustEmitter.clear();\n Player_1.bouncingSound.stop();\n Player_1.bouncingSound.play();\n }\n /**\n * If given coordinate collides with the world then the first free y coordinate above is\n * returned. This can be used to unstuck an object after a new position was set.\n *\n * @param x - X coordinate of current position.\n * @param y - Y coordinate of current position.\n * @return The Y coordinate of the ground below the given coordinate.\n */\n pullOutOfCeiling() {\n let pulled = 0;\n const world = this.scene.world;\n while (this.y > 0\n && world.collidesWith(this.x, this.y + this.height, [this], [World_1.Environment.PLATFORM, World_1.Environment.WATER])) {\n pulled++;\n this.y--;\n }\n return pulled;\n }\n pullOutOfWall() {\n let pulled = 0;\n const world = this.scene.world;\n if (this.getVelocityX() > 0) {\n while (world.collidesWithVerticalLine(this.x + this.width / 2, this.y + this.height * 3 / 4, this.height / 2, [this], [World_1.Environment.PLATFORM, World_1.Environment.WATER])) {\n this.x--;\n pulled++;\n }\n }\n else {\n while (world.collidesWithVerticalLine(this.x - this.width / 2, this.y + this.height * 3 / 4, this.height / 2, [this], [World_1.Environment.PLATFORM, World_1.Environment.WATER])) {\n this.x++;\n pulled++;\n }\n }\n return pulled;\n }\n updatePosition(newX, newY) {\n this.x = newX;\n this.y = newY;\n // Check collision with the environment and correct player position and movement\n if (this.pullOutOfGround() !== 0 || this.pullOutOfCeiling() !== 0) {\n this.setVelocityY(0);\n }\n if (this.pullOutOfWall() !== 0) {\n this.setVelocityX(0);\n }\n }\n getGravity() {\n if (this.flying && this.jumpKeyPressed === false && this.getVelocityY() > 0) {\n return constants_1.SHORT_JUMP_GRAVITY;\n }\n else {\n return constants_1.GRAVITY;\n }\n }\n carry(object) {\n if (!this.carrying) {\n this.height = constants_1.PLAYER_HEIGHT + object.carryHeight + constants_1.PLAYER_CARRY_HEIGHT;\n if (object instanceof Seed_1.Seed\n && this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).getHighestTriggerIndex() < Quests_1.QuestATrigger.GOT_SEED) {\n this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).trigger(Quests_1.QuestATrigger.GOT_SEED);\n }\n if (object instanceof Wood_1.Wood\n && this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).getHighestTriggerIndex() < Quests_1.QuestATrigger.GOT_WOOD) {\n this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).trigger(Quests_1.QuestATrigger.GOT_WOOD);\n this.scene.game.campaign.runAction(\"enable\", null, [\"fire\", \"fire1\"]);\n }\n if (object instanceof Stone_1.Stone\n && this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).getHighestTriggerIndex() < Quests_1.QuestATrigger.GOT_STONE) {\n this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).trigger(Quests_1.QuestATrigger.GOT_STONE);\n }\n this.carrying = object;\n object.setFloating(false);\n if (object instanceof Stone_1.Stone) {\n object.state = Stone_1.StoneState.DEFAULT;\n }\n if (object instanceof Seed_1.Seed) {\n object.state = Seed_1.SeedState.FREE;\n }\n if (object instanceof Wood_1.Wood) {\n object.state = Wood_1.WoodState.FREE;\n }\n object.x = this.x;\n object.y = this.y + this.height;\n object.setVelocity(0, 0);\n }\n }\n isCarrying(object) {\n if (object) {\n return this.carrying === object;\n }\n else {\n return this.carrying != null;\n }\n }\n showHint() {\n if (this.playerConversation === null) {\n switch (this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).getHighestTriggerIndex()) {\n case Quests_1.QuestATrigger.JUST_ARRIVED:\n this.think(\"I should talk to someone.\", 3000);\n break;\n case Quests_1.QuestATrigger.TALKED_TO_FIRE:\n this.think(\"I think the fire needs my help.\", 3000);\n break;\n case Quests_1.QuestATrigger.GOT_QUEST_FROM_FIRE:\n this.think(\"The fire told me to visit the tree in the east.\", 3000);\n break;\n case Quests_1.QuestATrigger.TALKED_TO_TREE:\n this.think(\"Maybe I should talk to the tree again.\", 3000);\n break;\n case Quests_1.QuestATrigger.GOT_QUEST_FROM_TREE:\n this.think(\"I need to pick up the seed by the tree.\", 3000);\n break;\n case Quests_1.QuestATrigger.GOT_SEED:\n this.think(\"I should check the mountains for a good place for the seed.\", 3000);\n break;\n case Quests_1.QuestATrigger.PLANTED_SEED:\n this.think(\"The seed needs something to grow, I think.\", 3000);\n break;\n case Quests_1.QuestATrigger.TALKED_TO_STONE:\n this.think(\"I should talk to that crazy stone again.\", 3000);\n break;\n case Quests_1.QuestATrigger.GOT_STONE:\n this.think(\"My arms get heavy. I really should throw that thing in the river.\", 3000);\n break;\n case Quests_1.QuestATrigger.THROWN_STONE_INTO_WATER:\n this.think(\"There must be something interesting west of the river.\", 3000);\n break;\n case Quests_1.QuestATrigger.GOT_MULTIJUMP:\n this.think(\"I should check the clouds. The seed still needs something to grow.\", 3000);\n break;\n case Quests_1.QuestATrigger.MADE_RAIN:\n this.think(\"I should talk to that singing tree again.\", 3000);\n break;\n case Quests_1.QuestATrigger.GOT_WOOD:\n this.think(\"Quick! The fire needs wood!\", 3000);\n break;\n }\n }\n this.lastHint = Date.now();\n }\n};\ntslib_1.__decorate([\n Assets_1.asset([\n \"sprites/pc/female.aseprite.json\",\n \"sprites/pc/male.aseprite.json\",\n \"sprites/pc/patient.aseprite.json\"\n ]),\n tslib_1.__metadata(\"design:type\", Array)\n], Player, \"playerSprites\", void 0);\ntslib_1.__decorate([\n Assets_1.asset([\n \"sprites/buttons_keyboard.aseprite.json\",\n \"sprites/buttons_xbox.aseprite.json\",\n \"sprites/buttons_playstation.aseprite.json\"\n ]),\n tslib_1.__metadata(\"design:type\", Array)\n], Player, \"buttons\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/drowning/drowning.mp3\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], Player, \"drowningSound\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/feet-walking/steps_single.mp3\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], Player, \"walkingSound\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/throwing/throwing.mp3\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], Player, \"throwingSound\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/gate/door_open.mp3\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], Player, \"enterGateSound\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/portal/enter-portal.ogg\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], Player, \"enterPortalSound\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/gate/door_close.mp3\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], Player, \"leaveGateSound\", void 0);\ntslib_1.__decorate([\n Assets_1.asset([\n \"sounds/jumping/jumping_female.mp3\",\n \"sounds/jumping/jumping.mp3\"\n ]),\n tslib_1.__metadata(\"design:type\", Array)\n], Player, \"jumpingSounds\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/jumping/landing.mp3\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], Player, \"landingSound\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/jumping/squish.mp3\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], Player, \"bouncingSound\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(constants_1.DIALOG_FONT),\n tslib_1.__metadata(\"design:type\", BitmapFont_1.BitmapFont)\n], Player, \"font\", void 0);\nPlayer = Player_1 = tslib_1.__decorate([\n Entity_1.entity(\"player\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number])\n], Player);\nexports.Player = Player;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvUGxheWVyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2VudGl0aWVzL1BsYXllci50cz8xY2RlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzZXByaXRlIH0gZnJvbSBcIi4uL0FzZXByaXRlXCI7XHJcbmltcG9ydCB7IGFzc2V0IH0gZnJvbSBcIi4uL0Fzc2V0c1wiO1xyXG5pbXBvcnQgeyBCZ21JZCwgRmFkZURpcmVjdGlvbiwgR2FtZVNjZW5lIH0gZnJvbSBcIi4uL3NjZW5lcy9HYW1lU2NlbmVcIjtcclxuaW1wb3J0IHsgQml0bWFwRm9udCB9IGZyb20gXCIuLi9CaXRtYXBGb250XCI7XHJcbmltcG9ydCB7IEJvdW5kcywgZW50aXR5IH0gZnJvbSBcIi4uL0VudGl0eVwiO1xyXG5pbXBvcnQgeyBib3VuZHNGcm9tTWFwT2JqZWN0LCBpc0Rldiwgcm5kLCBybmRJbnQsIHJuZEl0ZW0sIHNsZWVwLCB0aW1lZFJuZCB9IGZyb20gXCIuLi91dGlsXCI7XHJcbmltcG9ydCB7IENoYXJhY3RlckFzc2V0LCBWb2ljZUFzc2V0IH0gZnJvbSBcIi4uL0NhbXBhaWduXCI7XHJcbmltcG9ydCB7IENsb3VkIH0gZnJvbSBcIi4vQ2xvdWRcIjtcclxuaW1wb3J0IHsgQ29udHJvbGxlckFuaW1hdGlvblRhZ3MsIENvbnRyb2xsZXJTcHJpdGVNYXAgfSBmcm9tIFwiLi4vaW5wdXQvQ29udHJvbGxlckZhbWlseVwiO1xyXG5pbXBvcnQgeyBDb250cm9sbGVyRXZlbnQgfSBmcm9tIFwiLi4vaW5wdXQvQ29udHJvbGxlckV2ZW50XCI7XHJcbmltcG9ydCB7IENvbnRyb2xsZXJNYW5hZ2VyIH0gZnJvbSBcIi4uL2lucHV0L0NvbnRyb2xsZXJNYW5hZ2VyXCI7XHJcbmltcG9ydCB7IENvbnZlcnNhdGlvbiB9IGZyb20gXCIuLi9Db252ZXJzYXRpb25cIjtcclxuaW1wb3J0IHsgQ29udmVyc2F0aW9uUHJveHkgfSBmcm9tIFwiLi4vQ29udmVyc2F0aW9uUHJveHlcIjtcclxuaW1wb3J0IHsgRGFuY2UgfSBmcm9tIFwiLi4vRGFuY2VcIjtcclxuaW1wb3J0IHtcclxuICAgIERJQUxPR19GT05ULCBET1VCTEVfSlVNUF9DT0xPUlMsIEdSQVZJVFksIE1BWF9QTEFZRVJfUlVOTklOR19TUEVFRCwgTUFYX1BMQVlFUl9TUEVFRCxcclxuICAgIFBMQVlFUl9BQ0NFTEVSQVRJT04sIFBMQVlFUl9BQ0NFTEVSQVRJT05fQUlSLCBQTEFZRVJfQk9VTkNFX0hFSUdIVCwgUExBWUVSX0NBUlJZX0hFSUdIVCxcclxuICAgIFBMQVlFUl9IRUlHSFQsIFBMQVlFUl9KVU1QX0hFSUdIVCwgUExBWUVSX0pVTVBfVElNSU5HX1RIUkVTSE9MRCwgUExBWUVSX1dJRFRILFxyXG4gICAgU0hPUlRfSlVNUF9HUkFWSVRZXHJcbn0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gXCIuLi9Xb3JsZFwiO1xyXG5pbXBvcnQgeyBHYW1lT2JqZWN0SW5mbyB9IGZyb20gXCIuLi9NYXBJbmZvXCI7XHJcbmltcG9ydCB7IEdvdEl0ZW1TY2VuZSwgSXRlbSB9IGZyb20gXCIuLi9zY2VuZXMvR290SXRlbVNjZW5lXCI7XHJcbmltcG9ydCB7IE5QQyB9IGZyb20gXCIuL05QQ1wiO1xyXG5pbXBvcnQgeyBQYXJ0aWNsZUVtaXR0ZXIsIHZhbHVlQ3VydmVzIH0gZnJvbSBcIi4uL1BhcnRpY2xlc1wiO1xyXG5pbXBvcnQgeyBQaHlzaWNzRW50aXR5IH0gZnJvbSBcIi4vUGh5c2ljc0VudGl0eVwiO1xyXG5pbXBvcnQgeyBQbGF5ZXJDb252ZXJzYXRpb24gfSBmcm9tIFwiLi4vUGxheWVyQ29udmVyc2F0aW9uXCI7XHJcbmltcG9ydCB7IFF1ZXN0QVRyaWdnZXIsIFF1ZXN0S2V5IH0gZnJvbSBcIi4uL1F1ZXN0c1wiO1xyXG5pbXBvcnQgeyBSZW5kZXJpbmdMYXllciwgUmVuZGVyaW5nVHlwZSB9IGZyb20gXCIuLi9SZW5kZXJlclwiO1xyXG5pbXBvcnQgeyBTZWVkLCBTZWVkU3RhdGUgfSBmcm9tIFwiLi9TZWVkXCI7XHJcbmltcG9ydCB7IFNpZ24gfSBmcm9tIFwiLi9TaWduXCI7XHJcbmltcG9ydCB7IFNub3diYWxsIH0gZnJvbSBcIi4vU25vd2JhbGxcIjtcclxuaW1wb3J0IHsgU291bmQgfSBmcm9tIFwiLi4vU291bmRcIjtcclxuaW1wb3J0IHsgU3BlZWNoQnViYmxlIH0gZnJvbSBcIi4uL1NwZWVjaEJ1YmJsZVwiO1xyXG5pbXBvcnQgeyBTdG9uZSwgU3RvbmVTdGF0ZSB9IGZyb20gXCIuL1N0b25lXCI7XHJcbmltcG9ydCB7IFdhbGwgfSBmcm9tIFwiLi9XYWxsXCI7XHJcbmltcG9ydCB7IFdvb2QsIFdvb2RTdGF0ZSB9IGZyb20gXCIuL1dvb2RcIjtcclxuXHJcbmNvbnN0IGdyb3VuZENvbG9ycyA9IFtcclxuICAgIFwiIzgwNjA1N1wiLFxyXG4gICAgXCIjNTA0MzM2XCIsXHJcbiAgICBcIiMzQzgzNzZcIixcclxuICAgIFwiIzkwODc4NFwiXHJcbl07XHJcblxyXG5jb25zdCBib3VuY2VDb2xvcnMgPSBbXHJcbiAgICBcIiNmMDYwNjBcIixcclxuICAgIFwiI2U4N2Y3ZlwiLFxyXG4gICAgXCIjZmY3MDcwXCJcclxuXTtcclxuXHJcbmNvbnN0IGRyb3duVGhvdWdodHMgPSBbXHJcbiAgICB7IG1lc3NhZ2U6IFwiT0ssIEknbSBub3QgSmVzdXMuIE5vdGVkIVwiLCBkdXJhdGlvbjogNDAwMCB9LFxyXG4gICAgeyBtZXNzYWdlOiBcIkxvb2tzIGxpa2UgSSBjYW4ndCBzd2lt4oCmIEJ1dCBJIGNhbiByZXNwYXduLCBuaWNlIVwiLCBkdXJhdGlvbjogNTAwMCB9LFxyXG4gICAgeyBtZXNzYWdlOiBcIldlbGwsIHRoYXQgd2FzIHN0cmFuZ2XigKYgQW5kIHdldC5cIiwgZHVyYXRpb246IDQwMDAgfVxyXG5dO1xyXG5cclxuY29uc3QgZHJvd25pbmdUaG91Z2h0cyA9IFtcclxuICAgIHsgbWVzc2FnZTogXCJXYWFoIVwiLCBkdXJhdGlvbjogMTAwMCB9LFxyXG4gICAgeyBtZXNzYWdlOiBcIkhlbHAhXCIsIGR1cmF0aW9uOiAxMDAwIH0sXHJcbiAgICB7IG1lc3NhZ2U6IFwiTWFtYSFcIiwgZHVyYXRpb246IDEwMDAgfSxcclxuICAgIHsgbWVzc2FnZTogXCJJZWVoIVwiLCBkdXJhdGlvbjogMTAwMCB9LFxyXG4gICAgeyBtZXNzYWdlOiBcIkFyZ2ghXCIsIGR1cmF0aW9uOiAxMDAwIH1cclxuXTtcclxuXHJcbmV4cG9ydCBlbnVtIEdlbmRlciB7XHJcbiAgICBGRU1BTEUgPSAwLFxyXG4gICAgTUFMRSA9IDFcclxufVxyXG5cclxuLyoqIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB1bnRpbCBwbGF5ZXIgZ2V0cyBhIGhpbnQuICovXHJcbmNvbnN0IEhJTlRfVElNRU9VVCA9IDkwO1xyXG5cclxuaW50ZXJmYWNlIFBsYXllclNwcml0ZU1ldGFkYXRhIHtcclxuICAgIGNhcnJ5T2Zmc2V0RnJhbWVzPzogbnVtYmVyW107XHJcbn1cclxuXHJcbnR5cGUgQXV0b01vdmUgPSB7XHJcbiAgICBkZXN0aW5hdGlvblg6IG51bWJlcjtcclxuICAgIGxhc3RYOiBudW1iZXI7XHJcbiAgICB0dXJuQXJvdW5kOiBib29sZWFuO1xyXG59O1xyXG5cclxuQGVudGl0eShcInBsYXllclwiKVxyXG5leHBvcnQgY2xhc3MgUGxheWVyIGV4dGVuZHMgUGh5c2ljc0VudGl0eSB7XHJcbiAgICBAYXNzZXQoW1xyXG4gICAgICAgIFwic3ByaXRlcy9wYy9mZW1hbGUuYXNlcHJpdGUuanNvblwiLFxyXG4gICAgICAgIFwic3ByaXRlcy9wYy9tYWxlLmFzZXByaXRlLmpzb25cIixcclxuICAgICAgICBcInNwcml0ZXMvcGMvcGF0aWVudC5hc2Vwcml0ZS5qc29uXCJcclxuICAgIF0pXHJcbiAgICBwdWJsaWMgc3RhdGljIHBsYXllclNwcml0ZXM6IEFzZXByaXRlW107XHJcblxyXG4gICAgQGFzc2V0KFtcclxuICAgICAgICBcInNwcml0ZXMvYnV0dG9uc19rZXlib2FyZC5hc2Vwcml0ZS5qc29uXCIsXHJcbiAgICAgICAgXCJzcHJpdGVzL2J1dHRvbnNfeGJveC5hc2Vwcml0ZS5qc29uXCIsXHJcbiAgICAgICAgXCJzcHJpdGVzL2J1dHRvbnNfcGxheXN0YXRpb24uYXNlcHJpdGUuanNvblwiXHJcbiAgICBdKVxyXG4gICAgcHVibGljIHN0YXRpYyBidXR0b25zOiBBc2Vwcml0ZVtdO1xyXG5cclxuICAgIHB1YmxpYyBjb250cm9sbGVyU3ByaXRlTWFwUmVjb3JkczogUmVjb3JkPENvbnRyb2xsZXJTcHJpdGVNYXAsIEFzZXByaXRlPiA9IHtcclxuICAgICAgICBbQ29udHJvbGxlclNwcml0ZU1hcC5LRVlCT0FSRF06IFBsYXllci5idXR0b25zWzBdLFxyXG4gICAgICAgIFtDb250cm9sbGVyU3ByaXRlTWFwLlhCT1hdOiBQbGF5ZXIuYnV0dG9uc1sxXSxcclxuICAgICAgICBbQ29udHJvbGxlclNwcml0ZU1hcC5QTEFZU1RBVElPTl06IFBsYXllci5idXR0b25zWzJdXHJcbiAgICB9O1xyXG5cclxuICAgIEBhc3NldChcInNvdW5kcy9kcm93bmluZy9kcm93bmluZy5tcDNcIilcclxuICAgIHByaXZhdGUgc3RhdGljIGRyb3duaW5nU291bmQ6IFNvdW5kO1xyXG5cclxuICAgIEBhc3NldChcInNvdW5kcy9mZWV0LXdhbGtpbmcvc3RlcHNfc2luZ2xlLm1wM1wiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgd2Fsa2luZ1NvdW5kOiBTb3VuZDtcclxuXHJcbiAgICBAYXNzZXQoXCJzb3VuZHMvdGhyb3dpbmcvdGhyb3dpbmcubXAzXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyB0aHJvd2luZ1NvdW5kOiBTb3VuZDtcclxuXHJcbiAgICBAYXNzZXQoXCJzb3VuZHMvZ2F0ZS9kb29yX29wZW4ubXAzXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBlbnRlckdhdGVTb3VuZDogU291bmQ7XHJcblxyXG4gICAgQGFzc2V0KFwic291bmRzL3BvcnRhbC9lbnRlci1wb3J0YWwub2dnXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBlbnRlclBvcnRhbFNvdW5kOiBTb3VuZDtcclxuXHJcbiAgICBAYXNzZXQoXCJzb3VuZHMvZ2F0ZS9kb29yX2Nsb3NlLm1wM1wiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgbGVhdmVHYXRlU291bmQ6IFNvdW5kO1xyXG5cclxuICAgIEBhc3NldChbXHJcbiAgICAgICAgXCJzb3VuZHMvanVtcGluZy9qdW1waW5nX2ZlbWFsZS5tcDNcIixcclxuICAgICAgICBcInNvdW5kcy9qdW1waW5nL2p1bXBpbmcubXAzXCJcclxuICAgIF0pXHJcbiAgICBwcml2YXRlIHN0YXRpYyBqdW1waW5nU291bmRzOiBTb3VuZFtdO1xyXG5cclxuICAgIEBhc3NldChcInNvdW5kcy9qdW1waW5nL2xhbmRpbmcubXAzXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBsYW5kaW5nU291bmQ6IFNvdW5kO1xyXG5cclxuICAgIEBhc3NldChcInNvdW5kcy9qdW1waW5nL3NxdWlzaC5tcDNcIilcclxuICAgIHByaXZhdGUgc3RhdGljIGJvdW5jaW5nU291bmQ6IFNvdW5kO1xyXG5cclxuICAgIEBhc3NldChESUFMT0dfRk9OVClcclxuICAgIHByaXZhdGUgc3RhdGljIGZvbnQ6IEJpdG1hcEZvbnQ7XHJcblxyXG4gICAgcHJpdmF0ZSBsYXN0SGludCA9IERhdGUubm93KCk7XHJcbiAgICBwcml2YXRlIGZseWluZyA9IGZhbHNlO1xyXG4gICAgcHVibGljIGRpcmVjdGlvbiA9IDE7XHJcbiAgICBwcml2YXRlIHBsYXllclNwcml0ZU1ldGFkYXRhOiBQbGF5ZXJTcHJpdGVNZXRhZGF0YVtdIHwgbnVsbCA9IG51bGw7XHJcbiAgICBwdWJsaWMgYW5pbWF0aW9uID0gXCJpZGxlXCI7XHJcbiAgICBwcml2YXRlIG1vdmVMZWZ0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIG1vdmVSaWdodDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSB2aXNpYmxlID0gZmFsc2U7XHJcblxyXG4gICAgcHJpdmF0ZSBydW5uaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHJpdmF0ZSBqdW1wVGhyZXNob2xkVGltZXIgPSBQTEFZRVJfSlVNUF9USU1JTkdfVEhSRVNIT0xEO1xyXG5cclxuICAgIHB1YmxpYyBqdW1wRG93bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBqdW1wS2V5UHJlc3NlZDogYm9vbGVhbiB8IG51bGwgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgZHJvd25pbmcgPSAwO1xyXG4gICAgcHJpdmF0ZSBkYW5jZTogRGFuY2UgfCBudWxsID0gbnVsbDtcclxuICAgIHByaXZhdGUgY3VycmVudEZhaWxBbmltYXRpb24gPSAxO1xyXG4gICAgcHJpdmF0ZSBjYXJyeWluZzogUGh5c2ljc0VudGl0eSB8IG51bGwgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBjYW5SdW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgY2FuUmFpbkRhbmNlID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGRvdWJsZUp1bXAgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgbXVsdGlKdW1wID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGhhc0ZyaWVuZHNoaXAgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgdXNlZEp1bXAgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgdXNlZERvdWJsZUp1bXAgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgYXV0b01vdmU6IEF1dG9Nb3ZlIHwgbnVsbCA9IG51bGw7XHJcbiAgICBwdWJsaWMgaXNDb250cm9sbGFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHJpdmF0ZSBzaG93SGludHMgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgaXNQZXR0aW5nRG9nID0gZmFsc2U7XHJcblxyXG4gICAgcHJpdmF0ZSBjaGFyYWN0ZXJBc3NldDogQ2hhcmFjdGVyQXNzZXQ7XHJcbiAgICBwcml2YXRlIHZvaWNlQXNzZXQ6IFZvaWNlQXNzZXQ7XHJcblxyXG4gICAgcHVibGljIHBsYXllckNvbnZlcnNhdGlvbjogUGxheWVyQ29udmVyc2F0aW9uIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgcHVibGljIHNwZWVjaEJ1YmJsZSA9IG5ldyBTcGVlY2hCdWJibGUoXHJcbiAgICAgICAgdGhpcy5zY2VuZSxcclxuICAgICAgICB0aGlzLngsIHRoaXMueSxcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICB0cnVlXHJcbiAgICApO1xyXG5cclxuICAgIHB1YmxpYyB0aGlua0J1YmJsZTogU3BlZWNoQnViYmxlIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgcHJpdmF0ZSBjbG9zZXN0TlBDOiBOUEMgfCBudWxsID0gbnVsbDtcclxuICAgIHByaXZhdGUgcmVhZGFibGVUcmlnZ2VyPzogR2FtZU9iamVjdEluZm87XHJcbiAgICBwcml2YXRlIGR1c3RFbWl0dGVyOiBQYXJ0aWNsZUVtaXR0ZXI7XHJcbiAgICBwcml2YXRlIGJvdW5jZUVtaXR0ZXI6IFBhcnRpY2xlRW1pdHRlcjtcclxuICAgIHByaXZhdGUgZG91YmxlSnVtcEVtaXR0ZXI6IFBhcnRpY2xlRW1pdHRlcjtcclxuICAgIHByaXZhdGUgZGlzYWJsZVBhcnRpY2xlcyA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihzY2VuZTogR2FtZVNjZW5lLCB4OiBudW1iZXIsIHk6IG51bWJlcikge1xyXG4gICAgICAgIHN1cGVyKHNjZW5lLCB4LCB5LCBQTEFZRVJfV0lEVEgsIFBMQVlFUl9IRUlHSFQpO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ29udHJvbGxhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZXRGbG9hdGluZyh0cnVlKTtcclxuXHJcbiAgICAgICAgLy8gQXBwbHkgc2VsZWN0ZWQgY2hhcmFjdGVyIHRyYWl0c1xyXG4gICAgICAgIHRoaXMuY2hhcmFjdGVyQXNzZXQgPSB0aGlzLnNjZW5lLmdhbWUuY2FtcGFpZ24uc2VsZWN0ZWRDaGFyYWN0ZXI7XHJcbiAgICAgICAgdGhpcy52b2ljZUFzc2V0ID0gdGhpcy5zY2VuZS5nYW1lLmNhbXBhaWduLnNlbGVjdGVkVm9pY2U7XHJcbiAgICAgICAgQ29udmVyc2F0aW9uLnNldEdsb2JhbChcImlzbWFsZVwiLCB0aGlzLmNoYXJhY3RlckFzc2V0ID09PSBDaGFyYWN0ZXJBc3NldC5NQUxFID8gXCJ0cnVlXCIgOiBcImZhbHNlXCIpO1xyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc0NvbnRyb2xsYWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RmxvYXRpbmcoZmFsc2UpO1xyXG4gICAgICAgIH0sIDIyMDApO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBldmVudCA9PiB0aGlzLmhhbmRsZUtleURvd24oZXZlbnQpKTtcclxuXHJcbiAgICAgICAgaWYgKGlzRGV2KCkpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICBcIkRldiBtb2RlLCBwcmVzcyDigJxD4oCdIHRvIGRhbmNlIGFueXdoZXJlLCDigJxQ4oCdIHRvIHNwYXduIHRoZSBzdG9uZSwg4oCcT+KAnSB0byBzcGF3biB0aGUgXCJcclxuICAgICAgICAgICAgICAgICsgXCJzZWVkLCDigJxJ4oCdIHRvIHNwYXduIHdvb2QsIOKAnFTigJ0gdG8gdGhyb3cgdXNlbGVzcyBzbm93YmFsbCwg4oCcS+KAnSB0byBsZWFybiBhbGwgXCJcclxuICAgICAgICAgICAgICAgICsgXCJhYmlsaXRpZXMsIOKAnE3igJ0gdG8gc2hvdyBib3VuZHMgb2YgZW50aXRpZXMgYW5kIHRyaWdnZXJzLlwiXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldE1heFZlbG9jaXR5KE1BWF9QTEFZRVJfUlVOTklOR19TUEVFRCk7XHJcblxyXG4gICAgICAgIHRoaXMuZHVzdEVtaXR0ZXIgPSB0aGlzLnNjZW5lLnBhcnRpY2xlcy5jcmVhdGVFbWl0dGVyKHtcclxuICAgICAgICAgICAgcG9zaXRpb246IHt4OiB0aGlzLngsIHk6IHRoaXMueX0sXHJcbiAgICAgICAgICAgIHZlbG9jaXR5OiAoKSA9PiAoeyB4OiBybmQoLTEsIDEpICogMjYsIHk6IHJuZCgwLjcsIDEpICogNDUgfSksXHJcbiAgICAgICAgICAgIGNvbG9yOiAoKSA9PiBybmRJdGVtKGdyb3VuZENvbG9ycyksXHJcbiAgICAgICAgICAgIHNpemU6IHJuZCgxLCAyKSxcclxuICAgICAgICAgICAgZ3Jhdml0eToge3g6IDAsIHk6IC0xMDB9LFxyXG4gICAgICAgICAgICBsaWZldGltZTogKCkgPT4gcm5kKDAuNSwgMC44KSxcclxuICAgICAgICAgICAgYWxwaGFDdXJ2ZTogdmFsdWVDdXJ2ZXMudHJhcGV6ZSgwLjA1LCAwLjIpXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuYm91bmNlRW1pdHRlciA9IHRoaXMuc2NlbmUucGFydGljbGVzLmNyZWF0ZUVtaXR0ZXIoe1xyXG4gICAgICAgICAgICBwb3NpdGlvbjoge3g6IHRoaXMueCwgeTogdGhpcy55fSxcclxuICAgICAgICAgICAgdmVsb2NpdHk6ICgpID0+ICh7IHg6IHJuZCgtMSwgMSkgKiA5MCwgeTogcm5kKDAuNywgMSkgKiA2MCB9KSxcclxuICAgICAgICAgICAgY29sb3I6ICgpID0+IHJuZEl0ZW0oYm91bmNlQ29sb3JzKSxcclxuICAgICAgICAgICAgc2l6ZTogcm5kKDEuNSwgMyksXHJcbiAgICAgICAgICAgIGdyYXZpdHk6IHt4OiAwLCB5OiAtMTIwfSxcclxuICAgICAgICAgICAgbGlmZXRpbWU6ICgpID0+IHJuZCgwLjQsIDAuNiksXHJcbiAgICAgICAgICAgIGFscGhhQ3VydmU6IHZhbHVlQ3VydmVzLnRyYXBlemUoMC4wNSwgMC4yKVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmRvdWJsZUp1bXBFbWl0dGVyID0gdGhpcy5zY2VuZS5wYXJ0aWNsZXMuY3JlYXRlRW1pdHRlcih7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7eDogdGhpcy54LCB5OiB0aGlzLnl9LFxyXG4gICAgICAgICAgICB2ZWxvY2l0eTogKCkgPT4gKHsgeDogcm5kKC0xLCAxKSAqIDkwLCB5OiBybmQoLTEsIDApICogMTAwIH0pLFxyXG4gICAgICAgICAgICBjb2xvcjogKCkgPT4gcm5kSXRlbShET1VCTEVfSlVNUF9DT0xPUlMpLFxyXG4gICAgICAgICAgICBzaXplOiBybmQoMS41LCAzKSxcclxuICAgICAgICAgICAgZ3Jhdml0eToge3g6IDAsIHk6IC0xMjB9LFxyXG4gICAgICAgICAgICBsaWZldGltZTogKCkgPT4gcm5kKDAuNCwgMC42KSxcclxuICAgICAgICAgICAgYWxwaGFDdXJ2ZTogdmFsdWVDdXJ2ZXMudHJhcGV6ZSgwLjA1LCAwLjIpXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvbnRyb2xsYWJsZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc0NvbnRyb2xsYWJsZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0Q29udHJvbGxhYmxlKGlzQ29udHJvbGxhYmxlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0NvbnRyb2xsYWJsZSA9IGlzQ29udHJvbGxhYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydEF1dG9Nb3ZlKHg6IG51bWJlciwgdHVybkFyb3VuZDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICghdGhpcy5hdXRvTW92ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmF1dG9Nb3ZlID0ge1xyXG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb25YOiB4LFxyXG4gICAgICAgICAgICAgICAgbGFzdFg6IHRoaXMueCxcclxuICAgICAgICAgICAgICAgIHR1cm5Bcm91bmRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEZhaWxzYWZlIHRvIHN0b3AgYXV0b21vdmUgYWZ0ZXIgMSBzZWNvbmQuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmF1dG9Nb3ZlKSB0aGlzLnN0b3BBdXRvTW92ZSgpO1xyXG4gICAgICAgIH0sIDEwMDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdG9wQXV0b01vdmUoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0b01vdmU/LnR1cm5Bcm91bmQpIHtcclxuICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSB0aGlzLmRpcmVjdGlvbiAqIC0xO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hdXRvTW92ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5tb3ZlUmlnaHQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vdmVMZWZ0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0UGV0dGluZ0RvZygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzUGV0dGluZ0RvZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy54ID0gdGhpcy5zY2VuZS5zaGliYS5kaXJlY3Rpb24gPiAwID8gdGhpcy5zY2VuZS5zaGliYS54ICsgMTggOiB0aGlzLnNjZW5lLnNoaWJhLnggLSAxODtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RvcFBldHRpbmdEb2coKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc1BldHRpbmdEb2cgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZW5hYmxlUnVubmluZygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNjZW5lLmdhbWUuY2FtcGFpZ24uZ2V0UXVlc3QoUXVlc3RLZXkuQSkudHJpZ2dlcihRdWVzdEFUcmlnZ2VyLkdPVF9SVU5OSU5HX0FCSUxJVFkpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY2FuUnVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuc2NlbmVzLnB1c2hTY2VuZShHb3RJdGVtU2NlbmUsIEl0ZW0uUlVOTklORyk7XHJcbiAgICAgICAgICAgIHRoaXMuY2FuUnVuID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVuYWJsZVJhaW5EYW5jZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNjZW5lLmdhbWUuY2FtcGFpZ24uZ2V0UXVlc3QoUXVlc3RLZXkuQSkudHJpZ2dlcihRdWVzdEFUcmlnZ2VyLkxFQVJORURfUkFJTl9EQU5DRSk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5jYW5SYWluRGFuY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5zY2VuZS5zY2VuZXMucHVzaFNjZW5lKEdvdEl0ZW1TY2VuZSwgSXRlbS5SQUlOREFOQ0UpO1xyXG4gICAgICAgICAgICB0aGlzLmNhblJhaW5EYW5jZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlbmFibGVEb3VibGVKdW1wKCk6IHZvaWQge1xyXG4gICAgICAgIENvbnZlcnNhdGlvbi5zZXRHbG9iYWwoXCJoYXNEb3VibGVKdW1wXCIsIFwidHJ1ZVwiKTtcclxuICAgICAgICB0aGlzLnNjZW5lLmdhbWUuY2FtcGFpZ24uZ2V0UXVlc3QoUXVlc3RLZXkuQSkudHJpZ2dlcihRdWVzdEFUcmlnZ2VyLkdPVF9RVUVTVF9GUk9NX1RSRUUpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZG91YmxlSnVtcCkge1xyXG4gICAgICAgICAgICB0aGlzLnNjZW5lLnNjZW5lcy5wdXNoU2NlbmUoR290SXRlbVNjZW5lLCBJdGVtLkRPVUJMRUpVTVApO1xyXG4gICAgICAgICAgICB0aGlzLmRvdWJsZUp1bXAgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZW5hYmxlTXVsdGlKdW1wKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2NlbmUuZ2FtZS5jYW1wYWlnbi5nZXRRdWVzdChRdWVzdEtleS5BKS50cmlnZ2VyKFF1ZXN0QVRyaWdnZXIuR09UX01VTFRJSlVNUCk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5tdWx0aUp1bXApIHtcclxuICAgICAgICAgICAgdGhpcy5zY2VuZS5zY2VuZXMucHVzaFNjZW5lKEdvdEl0ZW1TY2VuZSwgSXRlbS5NVUxUSUpVTVApO1xyXG4gICAgICAgICAgICB0aGlzLm11bHRpSnVtcCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkaXNhYmxlTXVsdGlKdW1wKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubXVsdGlKdW1wID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVuYWJsZUZyaWVuZHNoaXAoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc0ZyaWVuZHNoaXApIHtcclxuICAgICAgICAgICAgdGhpcy5zY2VuZS5zY2VuZXMucHVzaFNjZW5lKEdvdEl0ZW1TY2VuZSwgSXRlbS5GUklFTkRTSElQKTtcclxuICAgICAgICAgICAgdGhpcy5oYXNGcmllbmRzaGlwID0gdHJ1ZTtcclxuICAgICAgICAgICAgQ29udmVyc2F0aW9uLnNldEdsb2JhbChcImhhc0ZyaWVuZHNoaXBcIiwgXCJ0cnVlXCIpO1xyXG4gICAgICAgICAgICB0aGlzLnNjZW5lLnJlbW92ZUdhbWVPYmplY3QodGhpcy5zY2VuZS5wb3dlclNoaWJhKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZVBvd2VyVXBzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubXVsdGlKdW1wID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kb3VibGVKdW1wID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jYW5SdW4gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlTXVsdGlKdW1wKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubXVsdGlKdW1wID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN3aXRjaFRvUmVhbGl0eSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNhblJ1biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubXVsdGlKdW1wID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jaGFyYWN0ZXJBc3NldCA9IENoYXJhY3RlckFzc2V0LlBBVElFTlQ7XHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSAtMTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RGFuY2UoKTogRGFuY2UgfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYW5jZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FuY2VsRGFuY2UoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kYW5jZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGhhbmRsZUJ1dHRvbkRvd24oZXZlbnQ6IENvbnRyb2xsZXJFdmVudCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lLnBhdXNlZCB8fCAhdGhpcy5pc0NvbnRyb2xsYWJsZSB8fCB0aGlzLmF1dG9Nb3ZlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzUGV0dGluZ0RvZykge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQuaXNQbGF5ZXJNb3ZlTGVmdCB8fCBldmVudC5pc1BsYXllck1vdmVSaWdodCB8fCBldmVudC5pc1BsYXllckFjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5jYW5jZWxQYXRFbmRpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5kYW5jZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRhbmNlLmhhbmRsZUJ1dHRvbkRvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuc2NlbmUuY2FtZXJhLmlzT25UYXJnZXQoKSB8fCBldmVudC5yZXBlYXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucGxheWVyQ29udmVyc2F0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGxheWVyQ29udmVyc2F0aW9uLmhhbmRsZUJ1dHRvbihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNhblJ1biAmJiBldmVudC5pc1BsYXllclJ1bikge1xyXG4gICAgICAgICAgICB0aGlzLnJ1bm5pbmcgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGV2ZW50LmlzUGxheWVyTW92ZVJpZ2h0KSB7XHJcbiAgICAgICAgICAgIHRoaXMubW92ZVJpZ2h0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3ZlTGVmdCA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuaXNQbGF5ZXJNb3ZlTGVmdCkge1xyXG4gICAgICAgICAgICB0aGlzLm1vdmVMZWZ0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3ZlUmlnaHQgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmlzUGxheWVyRW50ZXJEb29yKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jYW5FbnRlckRvb3IoKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBnYXRlID0gdGhpcy5zY2VuZS53b3JsZC5nZXRHYXRlQ29sbGlzaW9ucyh0aGlzKVswXTtcclxuICAgICAgICAgICAgdGhpcy5lbnRlckdhdGUoZ2F0ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5pc1BsYXllckludGVyYWN0KSB7XHJcbiAgICAgICAgICAgIC8vIENoZWNrIGZvciBnYXRlcyAvIGRvb3JzXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5mbHlpbmcpIHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3Nlc3ROUENcclxuICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmNsb3Nlc3ROUEMuaXNSZWFkeUZvckNvbnZlcnNhdGlvbigpXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5jbG9zZXN0TlBDLmNvbnZlcnNhdGlvblxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udmVyc2F0aW9uID0gdGhpcy5jbG9zZXN0TlBDLmNvbnZlcnNhdGlvbjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRGlzYWJsZSBhdXRvIG1vdmVtZW50IHRvIGEgc2FmZSB0YWxraW5nIGRpc3RhbmNlIGZvciB0aGUgc3RvbmUgaW4gdGhlIHJpdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0b01vdmUgPSAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VzdE5QQyBpbnN0YW5jZW9mIFNpZ25cclxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZXN0TlBDIGluc3RhbmNlb2YgU3RvbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMuY2xvc2VzdE5QQy5zdGF0ZSAhPT0gU3RvbmVTdGF0ZS5ERUZBVUxUXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkgPyBmYWxzZSA6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYXllckNvbnZlcnNhdGlvbiA9IG5ldyBQbGF5ZXJDb252ZXJzYXRpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsIHRoaXMuY2xvc2VzdE5QQywgY29udmVyc2F0aW9uLCBhdXRvTW92ZVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVhZGFibGVUcmlnZ2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJveHkgPSBuZXcgQ29udmVyc2F0aW9uUHJveHkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUsIHRoaXMueCwgdGhpcy55LCB0aGlzLnJlYWRhYmxlVHJpZ2dlci5wcm9wZXJ0aWVzXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGF5ZXJDb252ZXJzYXRpb24gPSBuZXcgUGxheWVyQ29udmVyc2F0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLCBwcm94eSwgcHJveHkuY29udmVyc2F0aW9uLCBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2FuRGFuY2VUb01ha2VSYWluKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0RGFuY2UodGhpcy5zY2VuZS5hcG9jYWx5cHNlID8gMyA6IDIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUuZ2FtZS5jYW1wYWlnbi5nZXRRdWVzdChRdWVzdEtleS5BKS50cmlnZ2VyKFF1ZXN0QVRyaWdnZXIuTUFERV9SQUlOKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuaXNQbGF5ZXJBY3Rpb24pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNDYXJyeWluZygpKSB0aGlzLnRocm93KCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5pc1BsYXllckp1bXAgJiYgdGhpcy5jYW5KdW1wKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5qdW1wS2V5UHJlc3NlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuanVtcCgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuaXNQbGF5ZXJEcm9wKSB7XHJcbiAgICAgICAgICAgIHRoaXMuanVtcERvd24gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdGhyb3coKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNhcnJ5aW5nIHx8ICh0aGlzLmNhcnJ5aW5nIGluc3RhbmNlb2YgU3RvbmUgJiYgIXRoaXMuY2FuVGhyb3dTdG9uZUludG9XYXRlcigpKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jYXJyeWluZyBpbnN0YW5jZW9mIFN0b25lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2Fycnlpbmcuc2V0VmVsb2NpdHkoMTAgKiB0aGlzLmRpcmVjdGlvbiwgMTApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2Fycnlpbmcuc2V0VmVsb2NpdHkoNSAqIHRoaXMuZGlyZWN0aW9uLCA1KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gUExBWUVSX0hFSUdIVDtcclxuICAgICAgICB0aGlzLmNhcnJ5aW5nID0gbnVsbDtcclxuXHJcbiAgICAgICAgUGxheWVyLnRocm93aW5nU291bmQuc3RvcCgpO1xyXG4gICAgICAgIFBsYXllci50aHJvd2luZ1NvdW5kLnBsYXkoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVc2VkIGluIGRldiBtb2RlIHRvIGVuYWJsZSBzb21lIHNwZWNpYWwga2V5cyB0aGF0IGNhbiBvbmx5IGJlIHRyaWdnZXJlZCBieSB1c2luZyBhIGtleWJvYXJkLlxyXG4gICAgcHVibGljIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5zY2VuZS5wYXVzZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnNjZW5lLmNhbWVyYS5pc09uVGFyZ2V0KCkgfHwgZXZlbnQucmVwZWF0KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc0RldigpKSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09IFwiY1wiKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUT0RPIEp1c3QgZm9yIGRlYnVnZ2luZy4gUmVhbCBkYW5jaW5nIGlzIHdpdGggYWN0aW9uIGtleSBvbiByYWluIGNsb3VkXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0RGFuY2UoMyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSBcInBcIiAmJiAhdGhpcy5jYXJyeWluZykge1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBKdXN0IGZvciBkZWJ1Z2dpbmcsIHRoaXMgbXVzdCBiZSByZW1vdmVkIGxhdGVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnJ5KHRoaXMuc2NlbmUuc3RvbmUpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gXCJvXCIgJiYgIXRoaXMuY2FycnlpbmcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FycnkodGhpcy5zY2VuZS50cmVlLnNwYXduU2VlZCgpKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09IFwidVwiICYmICF0aGlzLmNhcnJ5aW5nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnJ5KHRoaXMuc2NlbmUuYm9uZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSBcImlcIiAmJiAhdGhpcy5jYXJyeWluZykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJyeSh0aGlzLnNjZW5lLnRyZWUuc2VlZC5zcGF3bldvb2QoKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSBcInRcIikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5nYW1lT2JqZWN0cy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIG5ldyBTbm93YmFsbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2VuZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy54LCB0aGlzLnkgKyB0aGlzLmhlaWdodCAqIDAuNzUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDIwICogdGhpcy5kaXJlY3Rpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDEwXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBQbGF5ZXIudGhyb3dpbmdTb3VuZC5zdG9wKCk7XHJcbiAgICAgICAgICAgICAgICBQbGF5ZXIudGhyb3dpbmdTb3VuZC5wbGF5KCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSBcImtcIikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tdWx0aUp1bXAgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kb3VibGVKdW1wID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FuUnVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FuUmFpbkRhbmNlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGhpbmsoXCJJIGNhbiBkbyBldmVyeXRoaW5nIG5vdy5cIiwgMTUwMCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSBcIm1cIikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5zaG93Qm91bmRzID0gIXRoaXMuc2NlbmUuc2hvd0JvdW5kcztcclxuICAgICAgICAgICAgICAgIHRoaXMudGhpbmsoXCJUb2dnbGluZyBib3VuZHMuXCIsIDE1MDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyB0aGluayhtZXNzYWdlOiBzdHJpbmcsIHRpbWU6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGlmICh0aGlzLnRoaW5rQnViYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGhpbmtCdWJibGUuaGlkZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnRoaW5rQnViYmxlID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRoaW5rQnViYmxlID0gdGhpcy50aGlua0J1YmJsZSA9IG5ldyBTcGVlY2hCdWJibGUoXHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUsIHRoaXMueCwgdGhpcy55XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpbmtCdWJibGUuc2V0TWVzc2FnZShtZXNzYWdlKTtcclxuICAgICAgICB0aGlua0J1YmJsZS5zaG93KCk7XHJcblxyXG4gICAgICAgIGF3YWl0IHNsZWVwKHRpbWUpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50aGlua0J1YmJsZSA9PT0gdGhpbmtCdWJibGUpIHtcclxuICAgICAgICAgICAgdGhpbmtCdWJibGUuaGlkZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnRoaW5rQnViYmxlID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0RGFuY2UoZGlmZmljdWx0eTogbnVtYmVyID0gMSk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5kYW5jZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGRpZmZpY3VsdHkpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhbmNlID0gbmV3IERhbmNlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLngsIHRoaXMueSAtIDI1LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAxMDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiICAxIDEgMiAyIDEgMiAxIDNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDBcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGFuY2UgPSBuZXcgRGFuY2UoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueCwgdGhpcy55IC0gMjUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDE5MixcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCIxICAgMiAgIDEgMSAyIDIgMTIxIDIxMiAxMjEgMjEyIDMgICAgXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgM1xyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYW5jZSA9IG5ldyBEYW5jZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2VuZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy54LCB0aGlzLnkgLSAyNSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgMTkyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIjExMiAyMjEgMzEyIDEyMyAyMTIxMTIxIDExMSAyMjIgMyAgICBcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA0XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYW5jZSA9IG5ldyBEYW5jZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2VuZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy54LCB0aGlzLnkgLSAyNSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgMTkyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIjNcIlxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZWxlcG9ydCB0aGUgcGxheWVyIGZyb20gdGhlIHNvdXJjZSBnYXRlIHRvIGl0J3MgY29ycmVzcG9uZGluZyB0YXJnZXQgZ2F0ZS5cclxuICAgICAqIFRoZSB0ZWxlcG9ydCBpcyBub3QgaW5zdGFudCBidXQgYWNjb21wYW5pZWQgYnkgYSBmYWRlIHRvIGJsYWNrIHRvIG9ic2N1cmUgdGhlIHRlbGVwb3J0YXRpb24uXHJcbiAgICAgKiBBbHNvIHNldHMgdGhlIGNhbWVyYSBib3VuZHMgdG8gdGhlIHRhcmdldCBwb3NpdGlvblxyXG4gICAgICogQHBhcmFtIGdhdGUgdGhlIHNvdXJjZSB0aGUgcGxheWVyIGVudGVyc1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGFzeW5jIGVudGVyR2F0ZShnYXRlOiBHYW1lT2JqZWN0SW5mbyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGlmIChnYXRlICYmIGdhdGUucHJvcGVydGllcy50YXJnZXQpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0NvbnRyb2xsYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdmVSaWdodCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdmVMZWZ0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0YXJnZXRHYXRlID0gdGhpcy5zY2VuZS5nYXRlT2JqZWN0cy5maW5kKFxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0+IHRhcmdldC5uYW1lID09PSBnYXRlLnByb3BlcnRpZXMudGFyZ2V0XHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0YXJnZXRCZ21JZCA9IGdhdGUucHJvcGVydGllcy5iZ207XHJcblxyXG4gICAgICAgICAgICBpZiAodGFyZ2V0R2F0ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGdhdGUucHJvcGVydGllcy5lbnRlclNvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdhdGUucHJvcGVydGllcy5lbnRlclNvdW5kID09PSBcInBvcnRhbFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFBsYXllci5lbnRlclBvcnRhbFNvdW5kLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgUGxheWVyLmVudGVyUG9ydGFsU291bmQucGxheSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgUGxheWVyLmVudGVyR2F0ZVNvdW5kLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBQbGF5ZXIuZW50ZXJHYXRlU291bmQucGxheSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLmZhZGVUb0JsYWNrKDAuOCwgRmFkZURpcmVjdGlvbi5GQURFX09VVClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRCZ21JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5zZXRBY3RpdmVCZ21UcmFjayh0YXJnZXRCZ21JZCBhcyBCZ21JZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRHYXRlLnByb3BlcnRpZXMuZXhpdFNvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0R2F0ZS5wcm9wZXJ0aWVzLmV4aXRTb3VuZCA9PT0gXCJwb3J0YWxcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXllci5lbnRlclBvcnRhbFNvdW5kLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF5ZXIuZW50ZXJQb3J0YWxTb3VuZC5wbGF5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF5ZXIubGVhdmVHYXRlU291bmQuc3RvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxheWVyLmxlYXZlR2F0ZVNvdW5kLnBsYXkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueCA9IHRhcmdldEdhdGUueCArICh0YXJnZXRHYXRlLndpZHRoIC8gMik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueSA9IHRhcmdldEdhdGUueSAtIHRhcmdldEdhdGUuaGVpZ2h0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5jYW1lcmEuc2V0Qm91bmRzKHRoaXMuZ2V0Q3VycmVudE1hcEJvdW5kcygpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRHYXRlLm5hbWUgPT09IFwiZXhpdHBvcnRhbGRvb3JfMlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN3aXRjaFRvUmVhbGl0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0R2F0ZS5wcm9wZXJ0aWVzLmV4aXRTbGVlcFRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHNsZWVwKHRhcmdldEdhdGUucHJvcGVydGllcy5leGl0U2xlZXBUaW1lICogMTAwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZhZGVJblRpbWUgPSB0YXJnZXRHYXRlLnByb3BlcnRpZXMuZXhpdEZhZGVUaW1lID8gdGFyZ2V0R2F0ZS5wcm9wZXJ0aWVzLmV4aXRGYWRlVGltZSA6IDAuODtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5mYWRlVG9CbGFjayhmYWRlSW5UaW1lLCBGYWRlRGlyZWN0aW9uLkZBREVfSU4pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NvbnRyb2xsYWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FuSnVtcCgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5jaGFyYWN0ZXJBc3NldCA9PT0gQ2hhcmFjdGVyQXNzZXQuUEFUSUVOVCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLm11bHRpSnVtcCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLnVzZWRKdW1wICYmIHRoaXMuanVtcFRocmVzaG9sZFRpbWVyID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZG91YmxlSnVtcCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIXRoaXMudXNlZERvdWJsZUp1bXA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gIXRoaXMuZmx5aW5nO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUganVtcCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5kcm93bmluZyA+IDApIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRWZWxvY2l0eVkoTWF0aC5zcXJ0KDIgKiBQTEFZRVJfSlVNUF9IRUlHSFQgKiBHUkFWSVRZKSk7XHJcbiAgICAgICAgUGxheWVyLmp1bXBpbmdTb3VuZHNbdGhpcy52b2ljZUFzc2V0XS5zdG9wKCk7XHJcbiAgICAgICAgUGxheWVyLmp1bXBpbmdTb3VuZHNbdGhpcy52b2ljZUFzc2V0XS5wbGF5KCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmZseWluZyAmJiB0aGlzLnVzZWRKdW1wKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlZERvdWJsZUp1bXAgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZVBhcnRpY2xlcyAmJiB0aGlzLnZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZG91YmxlSnVtcEVtaXR0ZXIuc2V0UG9zaXRpb24odGhpcy54LCB0aGlzLnkgKyAyMCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRvdWJsZUp1bXBFbWl0dGVyLmVtaXQoMjApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVzZWRKdW1wID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFuZGxlQnV0dG9uVXAoZXZlbnQ6IENvbnRyb2xsZXJFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lLnBhdXNlZCB8fCAhdGhpcy5pc0NvbnRyb2xsYWJsZSB8fCB0aGlzLmF1dG9Nb3ZlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChldmVudC5pc1BsYXllck1vdmVSaWdodCkge1xyXG4gICAgICAgICAgICB0aGlzLm1vdmVSaWdodCA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuaXNQbGF5ZXJNb3ZlTGVmdCkge1xyXG4gICAgICAgICAgICB0aGlzLm1vdmVMZWZ0ID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5pc1BsYXllckp1bXApIHtcclxuICAgICAgICAgICAgdGhpcy5qdW1wS2V5UHJlc3NlZCA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuaXNQbGF5ZXJEcm9wKSB7XHJcbiAgICAgICAgICAgIHRoaXMuanVtcERvd24gPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmlzUGxheWVyUnVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRyYXdUb29sdGlwKFxyXG4gICAgICAgIHRleHQ6IHN0cmluZywgYnV0dG9uVGFnOiBDb250cm9sbGVyQW5pbWF0aW9uVGFncyA9IENvbnRyb2xsZXJBbmltYXRpb25UYWdzLkFDVElPTlxyXG4gICAgKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29udHJvbGxhYmxlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXJTcHJpdGUgPSBDb250cm9sbGVyTWFuYWdlci5nZXRJbnN0YW5jZSgpLmNvbnRyb2xsZXJTcHJpdGU7XHJcbiAgICAgICAgY29uc3QgbWVhc3VyZSA9IFBsYXllci5mb250Lm1lYXN1cmVUZXh0KHRleHQpO1xyXG4gICAgICAgIGNvbnN0IGdhcCA9IDY7XHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0WSA9IDEyO1xyXG4gICAgICAgIGNvbnN0IHRleHRQb3NpdGlvblggPSBNYXRoLnJvdW5kKE1hdGgucm91bmQodGhpcy54KSAtICgobWVhc3VyZS53aWR0aCAtIHRoaXMuY29udHJvbGxlclNwcml0ZU1hcFJlY29yZHNbY29udHJvbGxlclNwcml0ZV0ud2lkdGggKyBnYXApIC8gMikpO1xyXG4gICAgICAgIGNvbnN0IHRleHRQb3NpdGlvblkgPSAtdGhpcy55ICsgb2Zmc2V0WTtcclxuXHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUucmVuZGVyZXIuYWRkKHtcclxuICAgICAgICAgICAgdHlwZTogUmVuZGVyaW5nVHlwZS5BU0VQUklURSxcclxuICAgICAgICAgICAgbGF5ZXI6IFJlbmRlcmluZ0xheWVyLlVJLFxyXG4gICAgICAgICAgICBwb3NpdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgeDogdGV4dFBvc2l0aW9uWCAtIHRoaXMuY29udHJvbGxlclNwcml0ZU1hcFJlY29yZHNbY29udHJvbGxlclNwcml0ZV0ud2lkdGggLSBnYXAsXHJcbiAgICAgICAgICAgICAgICB5OiB0ZXh0UG9zaXRpb25ZXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFzc2V0OiB0aGlzLmNvbnRyb2xsZXJTcHJpdGVNYXBSZWNvcmRzW2NvbnRyb2xsZXJTcHJpdGVdLFxyXG4gICAgICAgICAgICBhbmltYXRpb25UYWc6IGJ1dHRvblRhZyxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zY2VuZS5yZW5kZXJlci5hZGQoe1xyXG4gICAgICAgICAgICB0eXBlOiBSZW5kZXJpbmdUeXBlLlRFWFQsXHJcbiAgICAgICAgICAgIGxheWVyOiBSZW5kZXJpbmdMYXllci5VSSxcclxuICAgICAgICAgICAgdGV4dCxcclxuICAgICAgICAgICAgdGV4dENvbG9yOiBcIndoaXRlXCIsXHJcbiAgICAgICAgICAgIG91dGxpbmVDb2xvcjogXCJibGFja1wiLFxyXG4gICAgICAgICAgICBwb3NpdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgeDogdGV4dFBvc2l0aW9uWCxcclxuICAgICAgICAgICAgICAgIHk6IHRleHRQb3NpdGlvbllcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYXNzZXQ6IFBsYXllci5mb250LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkcmF3KGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZpc2libGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc3ByaXRlID0gUGxheWVyLnBsYXllclNwcml0ZXNbdGhpcy5jaGFyYWN0ZXJBc3NldF07XHJcbiAgICAgICAgbGV0IGFuaW1hdGlvbiA9IHRoaXMuYW5pbWF0aW9uO1xyXG5cclxuICAgICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgYW5pbWF0aW9uIHN0YXRlIGNvbmNlcHQgaW5zdGVhZCBvZiBgYW5pbWF0aW9uID09PSBcImlkbGVcIiB8fCBhbmltYXRpb24gPT09IFwid2Fsa1wiIHx8IOKApmBcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuY2FycnlpbmdcclxuICAgICAgICAgICAgJiYgKGFuaW1hdGlvbiA9PT0gXCJpZGxlXCIgfHwgYW5pbWF0aW9uID09PSBcIndhbGtcIiB8fCBhbmltYXRpb24gPT09IFwianVtcFwiIHx8IGFuaW1hdGlvbiA9PT0gXCJmYWxsXCIpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGFuaW1hdGlvbiA9IGFuaW1hdGlvbiArIFwiLWNhcnJ5XCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNjZW5lLnJlbmRlcmVyLmFkZEFzZXByaXRlKFxyXG4gICAgICAgICAgICBzcHJpdGUsXHJcbiAgICAgICAgICAgIGFuaW1hdGlvbixcclxuICAgICAgICAgICAgdGhpcy54LCB0aGlzLnkgLSAxLFxyXG4gICAgICAgICAgICBSZW5kZXJpbmdMYXllci5QTEFZRVIsXHJcbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmUuc2hvd0JvdW5kcykge1xyXG4gICAgICAgICAgICB0aGlzLmRyYXdCb3VuZHMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5jbG9zZXN0TlBDXHJcbiAgICAgICAgICAgICYmICF0aGlzLmRhbmNlXHJcbiAgICAgICAgICAgICYmICF0aGlzLnBsYXllckNvbnZlcnNhdGlvblxyXG4gICAgICAgICAgICAmJiB0aGlzLmNsb3Nlc3ROUEMuaXNSZWFkeUZvckNvbnZlcnNhdGlvbigpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhd1Rvb2x0aXAodGhpcy5jbG9zZXN0TlBDLmdldEludGVyYWN0aW9uVGV4dCgpLCBDb250cm9sbGVyQW5pbWF0aW9uVGFncy5JTlRFUkFDVCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlYWRhYmxlVHJpZ2dlcikge1xyXG4gICAgICAgICAgICB0aGlzLmRyYXdUb29sdGlwKFwiRXhhbWluZVwiLCBDb250cm9sbGVyQW5pbWF0aW9uVGFncy5JTlRFUkFDVCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhbkVudGVyRG9vcigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhd1Rvb2x0aXAoXCJFbnRlclwiLCBDb250cm9sbGVyQW5pbWF0aW9uVGFncy5PUEVOX0RPT1IpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYW5UaHJvd1N0b25lSW50b1dhdGVyKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5kcmF3VG9vbHRpcChcIlRocm93IHN0b25lXCIsIENvbnRyb2xsZXJBbmltYXRpb25UYWdzLkFDVElPTik7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhblRocm93U2VlZEludG9Tb2lsKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5kcmF3VG9vbHRpcChcIlBsYW50IHNlZWRcIiwgQ29udHJvbGxlckFuaW1hdGlvblRhZ3MuQUNUSU9OKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2FuRGFuY2VUb01ha2VSYWluKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5kcmF3VG9vbHRpcChcIkRhbmNlXCIsIENvbnRyb2xsZXJBbmltYXRpb25UYWdzLklOVEVSQUNUKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRhbmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGFuY2UuYWRkRGFuY2VUb1JlbmRlclF1ZXVlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNwZWVjaEJ1YmJsZS5kcmF3KGN0eCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRoaW5rQnViYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGhpbmtCdWJibGUuZHJhdyhjdHgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNhblRocm93U3RvbmVJbnRvV2F0ZXIoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdGhpcy5jYXJyeWluZyBpbnN0YW5jZW9mIFN0b25lXHJcbiAgICAgICAgICAgICYmIChcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uID09PSAtMVxyXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5zY2VuZS53b3JsZC5jb2xsaWRlc1dpdGgoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy54IC0gMzAsIHRoaXMueSAtIDIwXHJcbiAgICAgICAgICAgICAgICApID09PSBFbnZpcm9ubWVudC5XQVRFUlxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNhblRocm93U2VlZEludG9Tb2lsKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRoaXMuY2FycnlpbmcgaW5zdGFuY2VvZiBTZWVkXHJcbiAgICAgICAgICAgICYmIChcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uID09PSAtMVxyXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5zY2VuZS53b3JsZC5jb2xsaWRlc1dpdGgodGhpcy54IC0gMzAsIHRoaXMueSArIDIpID09PSBFbnZpcm9ubWVudC5TT0lMXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWJ1Z0NvbGxpc2lvbnMoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJFbnRpdGllczogXCIsdGhpcy5zY2VuZS53b3JsZC5nZXRFbnRpdHlDb2xsaXNpb25zKHRoaXMpKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlRyaWdnZXJzOiBcIix0aGlzLnNjZW5lLndvcmxkLmdldFRyaWdnZXJDb2xsaXNpb25zKHRoaXMpKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkdhdGVzOiBcIix0aGlzLnNjZW5lLndvcmxkLmdldEdhdGVDb2xsaXNpb25zKHRoaXMpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFJlYWRhYmxlVHJpZ2dlcigpOiBHYW1lT2JqZWN0SW5mbyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgY29uc3QgdHJpZ2dlcnMgPSB0aGlzLnNjZW5lLndvcmxkLmdldFRyaWdnZXJDb2xsaXNpb25zKHRoaXMpO1xyXG4gICAgICAgIGlmICh0cmlnZ2Vycy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIHJldHVybiB0cmlnZ2Vycy5maW5kKHQgPT4gdC5uYW1lID09PSBcInJlYWRhYmxlXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FuRGFuY2VUb01ha2VSYWluKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5jYW5SYWluRGFuY2UpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdW5kID0gdGhpcy5nZXRHcm91bmQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0NvbGxpZGluZ1dpdGhUcmlnZ2VyKFwicmFpbmNsb3VkX3NreVwiKVxyXG4gICAgICAgICAgICAgICAgJiYgIXRoaXMuc2NlbmUud29ybGQuaXNSYWluaW5nKClcclxuICAgICAgICAgICAgICAgICYmIHRoaXMuY2FycnlpbmcgPT09IG51bGxcclxuICAgICAgICAgICAgICAgICYmICF0aGlzLnNjZW5lLmFwb2NhbHlwc2VcclxuICAgICAgICAgICAgKSB8fCAoXHJcbiAgICAgICAgICAgICAgICBncm91bmQgaW5zdGFuY2VvZiBDbG91ZFxyXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5zY2VuZS5hcG9jYWx5cHNlXHJcbiAgICAgICAgICAgICAgICAmJiAhZ3JvdW5kLmlzUmFpbmluZygpXHJcbiAgICAgICAgICAgICAgICAmJiBncm91bmQuY2FuUmFpbigpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FuRW50ZXJEb29yKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5mbHlpbmcgJiYgIXRoaXMuY2FycnlpbmcgJiYgdGhpcy5zY2VuZS53b3JsZC5nZXRHYXRlQ29sbGlzaW9ucyh0aGlzKS5sZW5ndGggPiAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgYm91bmRzIG9mIHRoZSBtYXAgYXJlYSB0aGUgcGxheWVyIGN1cnJlbnRseSByZXNpZGVzIGluXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDdXJyZW50TWFwQm91bmRzKCk6IEJvdW5kcyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgY29uc3QgY29sbGlzaW9ucyA9IHRoaXMuc2NlbmUud29ybGQuZ2V0Q2FtZXJhQm91bmRzKHRoaXMpO1xyXG4gICAgICAgIGlmIChjb2xsaXNpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICByZXR1cm4gYm91bmRzRnJvbU1hcE9iamVjdChjb2xsaXNpb25zWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlc3Bhd24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy54ID0gdGhpcy5sYXN0R3JvdW5kUG9zaXRpb24ueDtcclxuICAgICAgICB0aGlzLnkgPSB0aGlzLmxhc3RHcm91bmRQb3NpdGlvbi55ICsgMTA7XHJcbiAgICAgICAgdGhpcy5zZXRWZWxvY2l0eSgwLCAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFBsYXllclNwcml0ZU1ldGFkYXRhKCk6IFBsYXllclNwcml0ZU1ldGFkYXRhW10ge1xyXG4gICAgICAgIGlmICh0aGlzLnBsYXllclNwcml0ZU1ldGFkYXRhID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5wbGF5ZXJTcHJpdGVNZXRhZGF0YSA9IFBsYXllci5wbGF5ZXJTcHJpdGVzLm1hcChzcHJpdGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWV0YURhdGFKU09OID0gc3ByaXRlLmdldExheWVyKFwiTWV0YVwiKT8uZGF0YTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtZXRhRGF0YUpTT04gPyBKU09OLnBhcnNlKG1ldGFEYXRhSlNPTikgOiB7fTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wbGF5ZXJTcHJpdGVNZXRhZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlc2V0SnVtcHMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51c2VkSnVtcCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudXNlZERvdWJsZUp1bXAgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmp1bXBUaHJlc2hvbGRUaW1lciA9IFBMQVlFUl9KVU1QX1RJTUlOR19USFJFU0hPTEQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc091dE9mQm91bmRzICgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNDb250cm9sbGFibGUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBjb25zdCBtYXBCb3VuZHMgPSB0aGlzLnNjZW5lLmNhbWVyYS5nZXRCb3VuZHMoKTtcclxuICAgICAgICBpZiAoIW1hcEJvdW5kcykgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICByZXR1cm4gIXRoaXMuc2NlbmUud29ybGQuYm91bmRpbmdCb3hlc0NvbGxpZGUodGhpcy5nZXRCb3VuZHMoKSwge1xyXG4gICAgICAgICAgICB4OiBtYXBCb3VuZHMueCArIDQsXHJcbiAgICAgICAgICAgIHk6IG1hcEJvdW5kcy55IC0gNCxcclxuICAgICAgICAgICAgd2lkdGg6IG1hcEJvdW5kcy53aWR0aCAtIDgsXHJcbiAgICAgICAgICAgIGhlaWdodDogbWFwQm91bmRzLmhlaWdodCAtIDhcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlKGR0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci51cGRhdGUoZHQpO1xyXG4gICAgICAgIGNvbnN0IHRyaWdnZXJDb2xsaXNpb25zID0gdGhpcy5zY2VuZS53b3JsZC5nZXRUcmlnZ2VyQ29sbGlzaW9ucyh0aGlzKTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHBsYXllciBsZWZ0IHRoZSBjdXJyZW50IG1hcCBib3VuZHMgYW5kIHRlbGVwb3J0IGhpbSBiYWNrIHRvIGEgdmFsaWQgcG9zaXRpb24uXHJcbiAgICAgICAgaWYgKHRoaXMuaXNPdXRPZkJvdW5kcygpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuc2NlbmUuYXBvY2FseXBzZSA/XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLnBvaW50c09mSW50ZXJlc3QuZmluZChwb2kgPT4gcG9pLm5hbWUgPT09IFwiYm9zc19zcGF3blwiKSA6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLnBvaW50c09mSW50ZXJlc3QuZmluZChwb2kgPT4gcG9pLm5hbWUgPT09IFwicGxheWVyX3Jlc2V0X3Bvc2l0aW9uXCIpO1xyXG4gICAgICAgICAgICBpZiAocG9zKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnggPSBwb3MueDtcclxuICAgICAgICAgICAgICAgIHRoaXMueSA9IHBvcy55O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5jYW1lcmEuc2V0Qm91bmRzKHRoaXMuZ2V0Q3VycmVudE1hcEJvdW5kcygpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zcGVlY2hCdWJibGUudXBkYXRlKHRoaXMueCwgdGhpcy55KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGhpbmtCdWJibGUpIHtcclxuICAgICAgICAgICAgdGhpcy50aGlua0J1YmJsZS51cGRhdGUodGhpcy54LCB0aGlzLnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucGxheWVyQ29udmVyc2F0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGxheWVyQ29udmVyc2F0aW9uLnVwZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd0hpbnRzKSB7XHJcbiAgICAgICAgICAgIGlmICgoRGF0ZS5ub3coKSAtIHRoaXMubGFzdEhpbnQpIC8gMTAwMCA+IEhJTlRfVElNRU9VVCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93SGludCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jYXJyeWluZykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5ydW5uaW5nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uID0gXCJ3YWxrXCI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2FycnlpbmcueCA9IHRoaXMueDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRGcmFtZUluZGV4ID0gUGxheWVyLnBsYXllclNwcml0ZXNbdGhpcy5jaGFyYWN0ZXJBc3NldF0uZ2V0VGFnZ2VkRnJhbWVJbmRleChcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uICsgXCItY2FycnlcIixcclxuICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUuZ2FtZVRpbWUgKiAxMDAwXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjYXJyeU9mZnNldEZyYW1lcyA9IHRoaXMuZ2V0UGxheWVyU3ByaXRlTWV0YWRhdGEoKVt0aGlzLmNoYXJhY3RlckFzc2V0XS5jYXJyeU9mZnNldEZyYW1lcyA/PyBbXTtcclxuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gY2FycnlPZmZzZXRGcmFtZXMuaW5jbHVkZXMoY3VycmVudEZyYW1lSW5kZXggKyAxKSA/IDAgOiAtMTtcclxuICAgICAgICAgICAgdGhpcy5jYXJyeWluZy55ID0gdGhpcy55ICsgKHRoaXMuaGVpZ2h0IC0gdGhpcy5jYXJyeWluZy5jYXJyeUhlaWdodCkgLSBvZmZzZXQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYXJyeWluZyBpbnN0YW5jZW9mIFN0b25lKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnJ5aW5nLmRpcmVjdGlvbiA9IHRoaXMuZGlyZWN0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBpc0Ryb3duaW5nID0gdGhpcy5zY2VuZS53b3JsZC5jb2xsaWRlc1dpdGgodGhpcy54LCB0aGlzLnkpID09PSBFbnZpcm9ubWVudC5XQVRFUjtcclxuXHJcbiAgICAgICAgaWYgKGlzRHJvd25pbmcpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnRoaW5rQnViYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0aG91Z2h0ID0gZHJvd25pbmdUaG91Z2h0c1tybmRJbnQoMCwgZHJvd25pbmdUaG91Z2h0cy5sZW5ndGgpXTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGhpbmsodGhvdWdodC5tZXNzYWdlLCB0aG91Z2h0LmR1cmF0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FycnlpbmcgaW5zdGFuY2VvZiBTdG9uZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJyeWluZy5zZXRWZWxvY2l0eSgtMiwgMTApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJyeWluZyA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRyb3duaW5nID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBQbGF5ZXIuZHJvd25pbmdTb3VuZC5wbGF5KCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmVsb2NpdHlYKDApO1xyXG4gICAgICAgICAgICB0aGlzLmRyb3duaW5nICs9IGR0O1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZHJvd25pbmcgPiAzKSB7XHJcbiAgICAgICAgICAgICAgICBQbGF5ZXIuZHJvd25pbmdTb3VuZC5zdG9wKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3Bhd24oKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRob3VnaHQgPSBkcm93blRob3VnaHRzW3JuZEludCgwLCBkcm93blRob3VnaHRzLmxlbmd0aCldO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aGluayh0aG91Z2h0Lm1lc3NhZ2UsIHRob3VnaHQuZHVyYXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kcm93bmluZyA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB3b3JsZCA9IHRoaXMuc2NlbmUud29ybGQ7XHJcbiAgICAgICAgY29uc3Qgd2FzRmx5aW5nID0gdGhpcy5mbHlpbmc7XHJcbiAgICAgICAgY29uc3QgcHJldlZlbG9jaXR5ID0gdGhpcy5nZXRWZWxvY2l0eVkoKTtcclxuXHJcbiAgICAgICAgLy8gQXBwbHkgYXV0byBtb3ZlbWVudFxyXG4gICAgICAgIGlmICh0aGlzLmF1dG9Nb3ZlKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICh0aGlzLmF1dG9Nb3ZlLmxhc3RYIC0gdGhpcy5hdXRvTW92ZS5kZXN0aW5hdGlvblgpICogKHRoaXMueCAtIHRoaXMuYXV0b01vdmUuZGVzdGluYXRpb25YKSA8PSAwXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgLy8gUmVhY2hlZCBvciBvdmVycmVhY2hlZCBkZXN0aW5hdGlvblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wQXV0b01vdmUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIE5vdCB5ZXQgcmVhY2hlZCwga2VlcCBnb2luZ1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvTW92ZS5sYXN0WCA9IHRoaXMueDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy54IDwgdGhpcy5hdXRvTW92ZS5kZXN0aW5hdGlvblgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVSaWdodCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlTGVmdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVSaWdodCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZUxlZnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBQbGF5ZXIgbW92ZW1lbnRcclxuICAgICAgICBpZiAoIXRoaXMuc2NlbmUuY2FtZXJhLmlzT25UYXJnZXQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLm1vdmVSaWdodCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm1vdmVMZWZ0ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhY2NlbGVyYXRpb24gPSB0aGlzLmZseWluZyA/IFBMQVlFUl9BQ0NFTEVSQVRJT05fQUlSIDogUExBWUVSX0FDQ0VMRVJBVElPTjtcclxuXHJcbiAgICAgICAgaWYgKCFpc0Ryb3duaW5nKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJ1bm5pbmcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0TWF4VmVsb2NpdHkoTUFYX1BMQVlFUl9SVU5OSU5HX1NQRUVEKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0TWF4VmVsb2NpdHkodGhpcy5jaGFyYWN0ZXJBc3NldCA9PT0gQ2hhcmFjdGVyQXNzZXQuUEFUSUVOVCA/IDMgOiBNQVhfUExBWUVSX1NQRUVEKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMubW92ZVJpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IDE7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZseWluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIFBsYXllci53YWxraW5nU291bmQucGxheSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuYWNjZWxlcmF0ZVgoYWNjZWxlcmF0aW9uICogZHQpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW92ZUxlZnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uID0gLTE7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZseWluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIFBsYXllci53YWxraW5nU291bmQucGxheSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuYWNjZWxlcmF0ZVgoLWFjY2VsZXJhdGlvbiAqIGR0KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIFBsYXllci53YWxraW5nU291bmQuc3RvcCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldFZlbG9jaXR5WCgpID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVjZWxlcmF0ZVgoYWNjZWxlcmF0aW9uICogZHQpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlY2VsZXJhdGVYKC1hY2NlbGVyYXRpb24gKiBkdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNldCBzcHJpdGUgaW5kZXggZGVwZW5kaW5nIG9uIG1vdmVtZW50XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0VmVsb2NpdHlYKCkgPT09IDAgJiYgdGhpcy5nZXRWZWxvY2l0eVkoKSA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmFuaW1hdGlvbiA9IFwiaWRsZVwiO1xyXG4gICAgICAgICAgICB0aGlzLmZseWluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnJlc2V0SnVtcHMoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5nZXRWZWxvY2l0eVkoKSA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uID0gXCJqdW1wXCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZseWluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICBpc0Ryb3duaW5nXHJcbiAgICAgICAgICAgICAgICB8fCAoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRWZWxvY2l0eVkoKSA8IDBcclxuICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLnkgLSB3b3JsZC5nZXRHcm91bmQodGhpcy54LCB0aGlzLnkpID4gMTBcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5qdW1wVGhyZXNob2xkVGltZXIgPCAwIHx8IHRoaXMudXNlZEp1bXApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdGlvbiA9IFwiZmFsbFwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZmx5aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uID0gKHRoaXMucnVubmluZyAmJiAhdGhpcy5jYXJyeWluZykgPyBcInJ1blwiIDogXCJ3YWxrXCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZseWluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldEp1bXBzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh3YXNGbHlpbmcgJiYgIXRoaXMuZmx5aW5nKSB7XHJcbiAgICAgICAgICAgIFBsYXllci5sYW5kaW5nU291bmQuc3RvcCgpO1xyXG4gICAgICAgICAgICBQbGF5ZXIubGFuZGluZ1NvdW5kLnBsYXkoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlZHVjZSBqdW1wIHRocmVzaG9sZCB0aW1lciB3aGVuIHBsYXllciBkaWQgbm90IGp1bXAgeWV0IHdoZW4gZmFsbGluZyBvZmYgYW4gZWRnZVxyXG4gICAgICAgIGlmICh0aGlzLmZseWluZyAmJiAhdGhpcy51c2VkSnVtcCAmJiB0aGlzLmp1bXBUaHJlc2hvbGRUaW1lciA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5qdW1wVGhyZXNob2xkVGltZXIgLT0gZHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDaGVjayBmb3IgTlBDJ3MgdGhhdCBjYW4gYmUgaW50ZXJhY3RlZCB3aXRoLiBSZXNldCBjbG9zZXN0TlBDIGFuZCBnZXQgYWxsIGVudGl0aWVzIHRoYXRcclxuICAgICAgICAvLyBjb2xsaWRlIHdpdGggdGhlIHBsYXllciB3aXRoIGFuIGFkZGVkIDUgcHggb2YgbWFyZ2luLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgTlBDc1xyXG4gICAgICAgIC8vIGNvbGxpZGluZywgdGhlIGNsb3Nlc3Qgb25lIHdpbGwgYmUgY2hvc2VuLlxyXG4gICAgICAgIHRoaXMuY2xvc2VzdE5QQyA9IG51bGw7XHJcbiAgICAgICAgY29uc3QgZW50aXRpZXMgPSB0aGlzLnNjZW5lLndvcmxkLmdldEVudGl0eUNvbGxpc2lvbnModGhpcywgNSk7XHJcblxyXG4gICAgICAgIGlmIChlbnRpdGllcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsb3Nlc3RFbnRpdHkgPSBlbnRpdGllcy5sZW5ndGggPiAxID8gdGhpcy5nZXRDbG9zZXN0RW50aXR5KCkgOiBlbnRpdGllc1swXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjbG9zZXN0RW50aXR5IGluc3RhbmNlb2YgTlBDKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3Nlc3ROUEMgPSBjbG9zZXN0RW50aXR5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDaGVjayBmb3IgcmVhZGFibGVzIGluIHBsYXllciB0cmlnZ2VyIGNvbGxpc2lvbnNcclxuICAgICAgICB0aGlzLnJlYWRhYmxlVHJpZ2dlciA9IHRoaXMuZ2V0UmVhZGFibGVUcmlnZ2VyKCk7XHJcblxyXG4gICAgICAgIC8vIFNwYXduIHJhbmRvbSBkdXN0IHBhcnRpY2xlcyB3aGlsZSB3YWxraW5nXHJcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVQYXJ0aWNsZXMgJiYgdGhpcy52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5mbHlpbmcgJiYgKE1hdGguYWJzKHRoaXMuZ2V0VmVsb2NpdHlYKCkpID4gMSB8fCB3YXNGbHlpbmcpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGltZWRSbmQoZHQsIDAuMikgfHwgd2FzRmx5aW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kdXN0RW1pdHRlci5zZXRQb3NpdGlvbih0aGlzLngsIHRoaXMueSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSB3YXNGbHlpbmcgPyBNYXRoLmNlaWwoTWF0aC5hYnMocHJldlZlbG9jaXR5KSAvIDUpIDogMTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmR1c3RFbWl0dGVyLmVtaXQoY291bnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZXNldCBqdW1wIGtleSBzdGF0ZSB3aGVuIG9uIGdyb3VuZFxyXG4gICAgICAgIGlmICghdGhpcy5mbHlpbmcgJiYgdGhpcy5qdW1wS2V5UHJlc3NlZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuanVtcEtleVByZXNzZWQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQm91bmNlXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnNjZW5lLndvcmxkLmNvbGxpZGVzV2l0aChcclxuICAgICAgICAgICAgICAgIHRoaXMueCwgdGhpcy55IC0gMixcclxuICAgICAgICAgICAgICAgIFsgdGhpcyBdXHJcbiAgICAgICAgICAgICkgPT09IEVudmlyb25tZW50LkJPVU5DRVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmJvdW5jZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRGFuY2VcclxuICAgICAgICBpZiAodGhpcy5kYW5jZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kYW5jZS5oYXNTdGFydGVkKCkpIHtcclxuICAgICAgICAgICAgICAgIC8vIEJhc2ljIGRhbmNpbmcgb3IgZXJyb3I/XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSB0aGlzLmRhbmNlLmdldFRpbWVTaW5jZUxhc3RNaXN0YWtlKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdWMgPSB0aGlzLmRhbmNlLmdldFRpbWVTaW5jZUxhc3RTdWNjZXNzKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGVyciA8IDEgfHwgc3VjIDwgMykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIgPD0gc3VjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZhaWxBbmltYXRpb24gPSBybmRJbnQoMSwgMyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uID0gXCJkYW5jZS1mbHVrZS1cIiArIHRoaXMuY3VycmVudEZhaWxBbmltYXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbmltYXRpb24gPSBcImRhbmNlXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRhbmNlLnNldFBvc2l0aW9uKHRoaXMueCwgdGhpcy55IC0gMTYpO1xyXG4gICAgICAgICAgICBjb25zdCBkb25lID0gdGhpcy5kYW5jZS51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkb25lKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBPbiBjbG91ZCAtPiBtYWtlIGl0IHJhaW5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhbmNlLndhc1N1Y2Nlc3NmdWwoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIChVc2VsZXNzIGJlY2F1c2Ugd3JvbmcgY2xvdWQgYnV0IGhleeKApilcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91bmQgPSB0aGlzLmdldEdyb3VuZCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdW5kICYmIGdyb3VuZCBpbnN0YW5jZW9mIENsb3VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VuZC5zdGFydFJhaW4odGhpcy5zY2VuZS5hcG9jYWx5cHNlID8gSW5maW5pdHkgOiAxNSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYW1lcmEgZm9jdXMgdG8gYm9zcyBmb3IgZWFjaCB0cmlnZ2VyZWQgcmFpbiBjbG91ZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib3NzUG9pbnRlciA9IHRoaXMuc2NlbmUucG9pbnRzT2ZJbnRlcmVzdC5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pID0+IHBvaS5uYW1lID09PSBcImJvc3Nfc3Bhd25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvc3NQb2ludGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLmNhbWVyYS5mb2N1c09uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9zc1BvaW50ZXIueCwgYm9zc1BvaW50ZXIueSArIDYwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUN1cnZlcy5jb3MoMC4zNSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBhIHNpbmdsZSBib3NzIGZpZ2h0IGJhcnJpZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmFpbmluZ0Nsb3VkQ291bnQgPSB0aGlzLnNjZW5lLmdhbWVPYmplY3RzLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gPT4gbyBpbnN0YW5jZW9mIENsb3VkICYmIG8uaXNSYWluaW5nKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKS5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YWxsSWRlbnRpZmllciA9IGB3YWxsJHtyYWluaW5nQ2xvdWRDb3VudCAtIDF9YDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldFdhbGwgPSB0aGlzLnNjZW5lLmdhbWVPYmplY3RzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0+IG8gaW5zdGFuY2VvZiBXYWxsICYmIG8uaWRlbnRpZmllciA9PT0gd2FsbElkZW50aWZpZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBXYWxsIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldFdhbGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFdhbGwuY3J1bWJsZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0NvbGxpZGluZ1dpdGhUcmlnZ2VyKFwicmFpbmNsb3VkX3NreVwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLndvcmxkLnN0YXJ0UmFpbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZGFuY2UgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRpc2FibGVQYXJ0aWNsZXMgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gUGV0IERvZyBBbmltYXRpb25cclxuICAgICAgICBpZiAodGhpcy5pc1BldHRpbmdEb2cpIHtcclxuICAgICAgICAgICAgdGhpcy5hbmltYXRpb24gPSBcInBldHRpbmdcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIExvZ2ljIGZyb20gdHJpZ2dlcnNcclxuICAgICAgICBpZiAodHJpZ2dlckNvbGxpc2lvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyQ29sbGlzaW9ucy5mb3JFYWNoKHRyaWdnZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gSGFuZGxlIE1vdW50YWluUmlkZGxlIGxvZ2ljXHJcbiAgICAgICAgICAgICAgICBpZiAodHJpZ2dlci5uYW1lID09PSBcInJlc2V0X21vdW50YWluXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLm1vdW50YWluUmlkZGxlLnJlc2V0UmlkZGxlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRyaWdnZXIubmFtZSA9PT0gXCJtb3VudGFpbmdhdGVcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRyaWdnZXIucHJvcGVydGllcy5yb3c7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sID0gdHJpZ2dlci5wcm9wZXJ0aWVzLmNvbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbCAhPSBudWxsICYmIHJvdyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUubW91bnRhaW5SaWRkbGUuY2hlY2tHYXRlKGNvbCwgcm93KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIubmFtZSA9PT0gXCJ0ZWxlcG9ydGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLnNjZW5lLm1vdW50YWluUmlkZGxlLmlzRmFpbGVkKClcclxuICAgICAgICAgICAgICAgICAgICAmJiAhdGhpcy5zY2VuZS5tb3VudGFpblJpZGRsZS5pc0NsZWFyZWQoKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGVsZXBvcnRZID0gdHJpZ2dlci5wcm9wZXJ0aWVzLnRlbGVwb3J0WTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlbGVwb3J0WSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnkgLT0gdGVsZXBvcnRZO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodHJpZ2dlci5uYW1lID09PSBcImZpbmlzaF9tb3VudGFpbl9yaWRkbGVcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUubW91bnRhaW5SaWRkbGUuY2xlYXJSaWRkbGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBEaXNhYmxlIHBhcnRpY2xlIGVmZmVjdHMgd2hpbGUgaW4gdHJpZ2dlclxyXG4gICAgICAgICAgICAgICAgY29uc3QgZGlzYWJsZVBhcnRpY2xlcyA9IHRyaWdnZXIucHJvcGVydGllcy5kaXNhYmxlUGFydGljbGVzO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkaXNhYmxlUGFydGljbGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlUGFydGljbGVzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBTZXQgR2xvYmFsIENvbnZlcnNhdGlvbiBWYXJpYWJsZXMgZnJvbSBtYXAgdHJpZ2dlcnNcclxuICAgICAgICAgICAgICAgIGNvbnN0IGdsb2JhbENvbnZlcnNhdGlvblByb3BzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleTogdHJpZ2dlci5wcm9wZXJ0aWVzLnNldEdsb2JhbEtleSxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJpZ2dlci5wcm9wZXJ0aWVzLnNldEdsb2JhbFZhbFxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsQ29udmVyc2F0aW9uUHJvcHMua2V5ICYmIGdsb2JhbENvbnZlcnNhdGlvblByb3BzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgQ29udmVyc2F0aW9uLnNldEdsb2JhbChnbG9iYWxDb252ZXJzYXRpb25Qcm9wcy5rZXksIGdsb2JhbENvbnZlcnNhdGlvblByb3BzLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBFbmFibGUgQ29udmVyc2lvbiBUcmVlcyBmcm9tIG1hcCB0cmlnZ2Vyc1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZW5hYmxlQ29udmVyc2F0aW9uUHJvcHMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5OiB0cmlnZ2VyLnByb3BlcnRpZXMuc2V0RGlhbG9nRW50aXR5LFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cmlnZ2VyLnByb3BlcnRpZXMuc2V0RGlhbG9nVmFsdWVcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGVuYWJsZUNvbnZlcnNhdGlvblByb3BzLmtleSAmJiBlbmFibGVDb252ZXJzYXRpb25Qcm9wcy52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUuZ2FtZS5jYW1wYWlnbi5ydW5BY3Rpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZW5hYmxlXCIsIG51bGwsIFtlbmFibGVDb252ZXJzYXRpb25Qcm9wcy5rZXksIGVuYWJsZUNvbnZlcnNhdGlvblByb3BzLnZhbHVlXVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBnaXZlbiBjb29yZGluYXRlIGNvbGxpZGVzIHdpdGggdGhlIHdvcmxkIHRoZW4gdGhlIGZpcnN0IGZyZWUgeSBjb29yZGluYXRlIGFib3ZlIGlzXHJcbiAgICAgKiByZXR1cm5lZC4gVGhpcyBjYW4gYmUgdXNlZCB0byB1bnN0dWNrIGFuIG9iamVjdCBhZnRlciBhIG5ldyBwb3NpdGlvbiB3YXMgc2V0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB4IC0gWCBjb29yZGluYXRlIG9mIGN1cnJlbnQgcG9zaXRpb24uXHJcbiAgICAgKiBAcGFyYW0geSAtIFkgY29vcmRpbmF0ZSBvZiBjdXJyZW50IHBvc2l0aW9uLlxyXG4gICAgICogQHJldHVybiBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBncm91bmQgYmVsb3cgdGhlIGdpdmVuIGNvb3JkaW5hdGUuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcHVsbE91dE9mR3JvdW5kKCk6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IHB1bGxlZCA9IDAsIGNvbCA9IDA7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdldFZlbG9jaXR5WSgpIDw9IDApIHtcclxuICAgICAgICAgICAgY29uc3Qgd29ybGQgPSB0aGlzLnNjZW5lLndvcmxkO1xyXG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSB3b3JsZC5nZXRIZWlnaHQoKTtcclxuXHJcbiAgICAgICAgICAgIGNvbCA9IHdvcmxkLmNvbGxpZGVzV2l0aChcclxuICAgICAgICAgICAgICAgIHRoaXMueCwgdGhpcy55LFxyXG4gICAgICAgICAgICAgICAgWyB0aGlzIF0sXHJcbiAgICAgICAgICAgICAgICB0aGlzLmp1bXBEb3duID8gWyBFbnZpcm9ubWVudC5QTEFURk9STSwgRW52aXJvbm1lbnQuV0FURVIgXSA6IFsgRW52aXJvbm1lbnQuV0FURVIgXVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgd2hpbGUgKHRoaXMueSA8IGhlaWdodCAmJiBjb2wpIHtcclxuICAgICAgICAgICAgICAgIHB1bGxlZCsrO1xyXG4gICAgICAgICAgICAgICAgdGhpcy55Kys7XHJcbiAgICAgICAgICAgICAgICBjb2wgPSB3b3JsZC5jb2xsaWRlc1dpdGgodGhpcy54LCB0aGlzLnkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcHVsbGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYm91bmNlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0VmVsb2NpdHlZKE1hdGguc3FydCgyICogUExBWUVSX0JPVU5DRV9IRUlHSFQgKiBHUkFWSVRZKSk7XHJcbiAgICAgICAgLy8gTmljZSBib3VuY3kgcGFydGljbGVzXHJcbiAgICAgICAgdGhpcy5ib3VuY2VFbWl0dGVyLnNldFBvc2l0aW9uKHRoaXMueCwgdGhpcy55IC0gMTIpO1xyXG4gICAgICAgIHRoaXMuYm91bmNlRW1pdHRlci5lbWl0KDIwKTtcclxuICAgICAgICB0aGlzLmR1c3RFbWl0dGVyLmNsZWFyKCk7XHJcblxyXG4gICAgICAgIFBsYXllci5ib3VuY2luZ1NvdW5kLnN0b3AoKTtcclxuICAgICAgICBQbGF5ZXIuYm91bmNpbmdTb3VuZC5wbGF5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBnaXZlbiBjb29yZGluYXRlIGNvbGxpZGVzIHdpdGggdGhlIHdvcmxkIHRoZW4gdGhlIGZpcnN0IGZyZWUgeSBjb29yZGluYXRlIGFib3ZlIGlzXHJcbiAgICAgKiByZXR1cm5lZC4gVGhpcyBjYW4gYmUgdXNlZCB0byB1bnN0dWNrIGFuIG9iamVjdCBhZnRlciBhIG5ldyBwb3NpdGlvbiB3YXMgc2V0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB4IC0gWCBjb29yZGluYXRlIG9mIGN1cnJlbnQgcG9zaXRpb24uXHJcbiAgICAgKiBAcGFyYW0geSAtIFkgY29vcmRpbmF0ZSBvZiBjdXJyZW50IHBvc2l0aW9uLlxyXG4gICAgICogQHJldHVybiBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBncm91bmQgYmVsb3cgdGhlIGdpdmVuIGNvb3JkaW5hdGUuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcHVsbE91dE9mQ2VpbGluZygpOiBudW1iZXIge1xyXG4gICAgICAgIGxldCBwdWxsZWQgPSAwO1xyXG4gICAgICAgIGNvbnN0IHdvcmxkID0gdGhpcy5zY2VuZS53b3JsZDtcclxuXHJcbiAgICAgICAgd2hpbGUgKFxyXG4gICAgICAgICAgICB0aGlzLnkgPiAwXHJcbiAgICAgICAgICAgICYmIHdvcmxkLmNvbGxpZGVzV2l0aChcclxuICAgICAgICAgICAgICAgIHRoaXMueCwgdGhpcy55ICsgdGhpcy5oZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBbIHRoaXMgXSxcclxuICAgICAgICAgICAgICAgIFsgRW52aXJvbm1lbnQuUExBVEZPUk0sIEVudmlyb25tZW50LldBVEVSIF1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBwdWxsZWQrKztcclxuICAgICAgICAgICAgdGhpcy55LS07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcHVsbGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHVsbE91dE9mV2FsbCgpOiBudW1iZXIge1xyXG4gICAgICAgIGxldCBwdWxsZWQgPSAwO1xyXG4gICAgICAgIGNvbnN0IHdvcmxkID0gdGhpcy5zY2VuZS53b3JsZDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0VmVsb2NpdHlYKCkgPiAwKSB7XHJcbiAgICAgICAgICAgIHdoaWxlIChcclxuICAgICAgICAgICAgICAgIHdvcmxkLmNvbGxpZGVzV2l0aFZlcnRpY2FsTGluZShcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnggKyB0aGlzLndpZHRoIC8gMiwgdGhpcy55ICsgdGhpcy5oZWlnaHQgKiAzIC8gNCxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgWyB0aGlzIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgWyBFbnZpcm9ubWVudC5QTEFURk9STSwgRW52aXJvbm1lbnQuV0FURVIgXVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMueC0tO1xyXG4gICAgICAgICAgICAgICAgcHVsbGVkKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB3aGlsZSAoXHJcbiAgICAgICAgICAgICAgICB3b3JsZC5jb2xsaWRlc1dpdGhWZXJ0aWNhbExpbmUoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy54IC0gdGhpcy53aWR0aCAvIDIsIHRoaXMueSArIHRoaXMuaGVpZ2h0ICogMyAvIDQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIFsgdGhpcyBdLFxyXG4gICAgICAgICAgICAgICAgICAgIFsgRW52aXJvbm1lbnQuUExBVEZPUk0sIEVudmlyb25tZW50LldBVEVSIF1cclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLngrKztcclxuICAgICAgICAgICAgICAgIHB1bGxlZCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcHVsbGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB1cGRhdGVQb3NpdGlvbihuZXdYOiBudW1iZXIsIG5ld1k6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMueCA9IG5ld1g7XHJcbiAgICAgICAgdGhpcy55ID0gbmV3WTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgY29sbGlzaW9uIHdpdGggdGhlIGVudmlyb25tZW50IGFuZCBjb3JyZWN0IHBsYXllciBwb3NpdGlvbiBhbmQgbW92ZW1lbnRcclxuICAgICAgICBpZiAodGhpcy5wdWxsT3V0T2ZHcm91bmQoKSAhPT0gMCB8fCB0aGlzLnB1bGxPdXRPZkNlaWxpbmcoKSAhPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFZlbG9jaXR5WSgwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnB1bGxPdXRPZldhbGwoKSAhPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFZlbG9jaXR5WCgwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldEdyYXZpdHkoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5mbHlpbmcgJiYgdGhpcy5qdW1wS2V5UHJlc3NlZCA9PT0gZmFsc2UgJiYgdGhpcy5nZXRWZWxvY2l0eVkoKSA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIFNIT1JUX0pVTVBfR1JBVklUWTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gR1JBVklUWTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhcnJ5KG9iamVjdDogUGh5c2ljc0VudGl0eSk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5jYXJyeWluZykge1xyXG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IFBMQVlFUl9IRUlHSFQgKyBvYmplY3QuY2FycnlIZWlnaHQgKyBQTEFZRVJfQ0FSUllfSEVJR0hUO1xyXG5cclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgb2JqZWN0IGluc3RhbmNlb2YgU2VlZFxyXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5zY2VuZS5nYW1lLmNhbXBhaWduLmdldFF1ZXN0KFF1ZXN0S2V5LkEpLmdldEhpZ2hlc3RUcmlnZ2VySW5kZXgoKSA8IFF1ZXN0QVRyaWdnZXIuR09UX1NFRURcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLmdhbWUuY2FtcGFpZ24uZ2V0UXVlc3QoUXVlc3RLZXkuQSkudHJpZ2dlcihRdWVzdEFUcmlnZ2VyLkdPVF9TRUVEKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgb2JqZWN0IGluc3RhbmNlb2YgV29vZFxyXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5zY2VuZS5nYW1lLmNhbXBhaWduLmdldFF1ZXN0KFF1ZXN0S2V5LkEpLmdldEhpZ2hlc3RUcmlnZ2VySW5kZXgoKSA8IFF1ZXN0QVRyaWdnZXIuR09UX1dPT0RcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLmdhbWUuY2FtcGFpZ24uZ2V0UXVlc3QoUXVlc3RLZXkuQSkudHJpZ2dlcihRdWVzdEFUcmlnZ2VyLkdPVF9XT09EKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUuZ2FtZS5jYW1wYWlnbi5ydW5BY3Rpb24oXCJlbmFibGVcIiwgbnVsbCwgW1wiZmlyZVwiLCBcImZpcmUxXCJdKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgb2JqZWN0IGluc3RhbmNlb2YgU3RvbmVcclxuICAgICAgICAgICAgICAgICYmIHRoaXMuc2NlbmUuZ2FtZS5jYW1wYWlnbi5nZXRRdWVzdChRdWVzdEtleS5BKS5nZXRIaWdoZXN0VHJpZ2dlckluZGV4KCkgPCBRdWVzdEFUcmlnZ2VyLkdPVF9TVE9ORVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUuZ2FtZS5jYW1wYWlnbi5nZXRRdWVzdChRdWVzdEtleS5BKS50cmlnZ2VyKFF1ZXN0QVRyaWdnZXIuR09UX1NUT05FKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jYXJyeWluZyA9IG9iamVjdDtcclxuICAgICAgICAgICAgb2JqZWN0LnNldEZsb2F0aW5nKGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTdG9uZSkge1xyXG4gICAgICAgICAgICAgICAgb2JqZWN0LnN0YXRlID0gU3RvbmVTdGF0ZS5ERUZBVUxUO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgU2VlZCkge1xyXG4gICAgICAgICAgICAgICAgb2JqZWN0LnN0YXRlID0gU2VlZFN0YXRlLkZSRUU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBXb29kKSB7XHJcbiAgICAgICAgICAgICAgICBvYmplY3Quc3RhdGUgPSBXb29kU3RhdGUuRlJFRTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvYmplY3QueCA9IHRoaXMueDtcclxuICAgICAgICAgICAgb2JqZWN0LnkgPSB0aGlzLnkgKyB0aGlzLmhlaWdodDtcclxuICAgICAgICAgICAgb2JqZWN0LnNldFZlbG9jaXR5KDAsIDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNDYXJyeWluZyhvYmplY3Q/OiBQaHlzaWNzRW50aXR5KTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKG9iamVjdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYXJyeWluZyA9PT0gb2JqZWN0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhcnJ5aW5nICE9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93SGludCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5wbGF5ZXJDb252ZXJzYXRpb24gPT09IG51bGwpIHtcclxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLnNjZW5lLmdhbWUuY2FtcGFpZ24uZ2V0UXVlc3QoUXVlc3RLZXkuQSkuZ2V0SGlnaGVzdFRyaWdnZXJJbmRleCgpKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFF1ZXN0QVRyaWdnZXIuSlVTVF9BUlJJVkVEOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGhpbmsoXCJJIHNob3VsZCB0YWxrIHRvIHNvbWVvbmUuXCIsIDMwMDApO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBRdWVzdEFUcmlnZ2VyLlRBTEtFRF9UT19GSVJFOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGhpbmsoXCJJIHRoaW5rIHRoZSBmaXJlIG5lZWRzIG15IGhlbHAuXCIsIDMwMDApO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBRdWVzdEFUcmlnZ2VyLkdPVF9RVUVTVF9GUk9NX0ZJUkU6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aGluayhcIlRoZSBmaXJlIHRvbGQgbWUgdG8gdmlzaXQgdGhlIHRyZWUgaW4gdGhlIGVhc3QuXCIsIDMwMDApO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBRdWVzdEFUcmlnZ2VyLlRBTEtFRF9UT19UUkVFOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGhpbmsoXCJNYXliZSBJIHNob3VsZCB0YWxrIHRvIHRoZSB0cmVlIGFnYWluLlwiLCAzMDAwKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgUXVlc3RBVHJpZ2dlci5HT1RfUVVFU1RfRlJPTV9UUkVFOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGhpbmsoXCJJIG5lZWQgdG8gcGljayB1cCB0aGUgc2VlZCBieSB0aGUgdHJlZS5cIiwgMzAwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFF1ZXN0QVRyaWdnZXIuR09UX1NFRUQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aGluayhcIkkgc2hvdWxkIGNoZWNrIHRoZSBtb3VudGFpbnMgZm9yIGEgZ29vZCBwbGFjZSBmb3IgdGhlIHNlZWQuXCIsIDMwMDApO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBRdWVzdEFUcmlnZ2VyLlBMQU5URURfU0VFRDpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRoaW5rKFwiVGhlIHNlZWQgbmVlZHMgc29tZXRoaW5nIHRvIGdyb3csIEkgdGhpbmsuXCIsIDMwMDApO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBRdWVzdEFUcmlnZ2VyLlRBTEtFRF9UT19TVE9ORTpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRoaW5rKFwiSSBzaG91bGQgdGFsayB0byB0aGF0IGNyYXp5IHN0b25lIGFnYWluLlwiLCAzMDAwKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgUXVlc3RBVHJpZ2dlci5HT1RfU1RPTkU6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aGluayhcIk15IGFybXMgZ2V0IGhlYXZ5LiBJIHJlYWxseSBzaG91bGQgdGhyb3cgdGhhdCB0aGluZyBpbiB0aGUgcml2ZXIuXCIsIDMwMDApO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBRdWVzdEFUcmlnZ2VyLlRIUk9XTl9TVE9ORV9JTlRPX1dBVEVSOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGhpbmsoXCJUaGVyZSBtdXN0IGJlIHNvbWV0aGluZyBpbnRlcmVzdGluZyB3ZXN0IG9mIHRoZSByaXZlci5cIiwgMzAwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFF1ZXN0QVRyaWdnZXIuR09UX01VTFRJSlVNUDpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRoaW5rKFwiSSBzaG91bGQgY2hlY2sgdGhlIGNsb3Vkcy4gVGhlIHNlZWQgc3RpbGwgbmVlZHMgc29tZXRoaW5nIHRvIGdyb3cuXCIsIDMwMDApO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBRdWVzdEFUcmlnZ2VyLk1BREVfUkFJTjpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRoaW5rKFwiSSBzaG91bGQgdGFsayB0byB0aGF0IHNpbmdpbmcgdHJlZSBhZ2Fpbi5cIiwgMzAwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFF1ZXN0QVRyaWdnZXIuR09UX1dPT0Q6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aGluayhcIlF1aWNrISBUaGUgZmlyZSBuZWVkcyB3b29kIVwiLCAzMDAwKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sYXN0SGludCA9IERhdGUubm93KCk7XHJcbiAgICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFhQTtBQTRHQTtBQUNBO0FBOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFtQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFFQTtBQVNBO0FBRUE7QUFLQTtBQUtBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBOztBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTs7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFJQTtBQUdBO0FBQUE7QUFDQTtBQUlBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUtBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUlBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQVFBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUtBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFFQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUtBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQU1BO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBSUE7QUFDQTtBQU9BO0FBRUE7QUFDQTtBQUlBO0FBRUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQU1BO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUF6NENBO0FBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQU9BO0FBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQVNBO0FBREE7QUFDQTtBQUFBO0FBR0E7QUFEQTtBQUNBO0FBQUE7QUFHQTtBQURBO0FBQ0E7QUFBQTtBQUdBO0FBREE7QUFDQTtBQUFBO0FBR0E7QUFEQTtBQUNBO0FBQUE7QUFHQTtBQURBO0FBQ0E7QUFBQTtBQU1BO0FBSkE7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFHQTtBQURBO0FBQ0E7QUFBQTtBQUdBO0FBREE7QUFDQTtBQUFBO0FBR0E7QUFEQTtBQUNBO0FBQUE7QUFwREE7QUFEQTtBQTZHQTtBQTVHQTtBQUFBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/entities/Player.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/Portal.js":
|
|
/*!********************************!*\
|
|
!*** ./lib/entities/Portal.js ***!
|
|
\********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar Portal_1;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Portal = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst GameScene_1 = __webpack_require__(/*! ../scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst Sound_1 = __webpack_require__(/*! ../Sound */ \"./lib/Sound.js\");\nvar PortalAnimationState;\n(function (PortalAnimationState) {\n PortalAnimationState[PortalAnimationState[\"WAITING\"] = 0] = \"WAITING\";\n PortalAnimationState[PortalAnimationState[\"FADEIN\"] = 1] = \"FADEIN\";\n PortalAnimationState[PortalAnimationState[\"IDLE\"] = 2] = \"IDLE\";\n PortalAnimationState[PortalAnimationState[\"FADEOUT\"] = 3] = \"FADEOUT\";\n PortalAnimationState[PortalAnimationState[\"GONE\"] = 4] = \"GONE\";\n})(PortalAnimationState || (PortalAnimationState = {}));\nlet Portal = Portal_1 = class Portal extends Entity_1.Entity {\n constructor(scene, x, y) {\n super(scene, x, y, 32, 50, false);\n this.animationState = PortalAnimationState.WAITING;\n this.animator.assignSprite(Portal_1.sprite);\n }\n nextAnimationState() {\n this.animationState++;\n }\n draw() {\n switch (this.animationState) {\n case PortalAnimationState.WAITING:\n this.animator.play(\"empty\", 1);\n break;\n case PortalAnimationState.FADEIN:\n this.animator.play(\"fadein\", 1, { loop: false, callback: this.nextAnimationState.bind(this) });\n break;\n case PortalAnimationState.IDLE:\n this.animator.play(\"idle\", 1);\n break;\n case PortalAnimationState.FADEOUT:\n this.animator.play(\"fadeout\", 1, { loop: false, callback: this.nextAnimationState.bind(this) });\n break;\n case PortalAnimationState.GONE:\n this.animator.play(\"empty\", 1);\n break;\n }\n if (this.scene.showBounds) {\n this.drawBounds();\n }\n }\n update(dt) {\n super.update(dt);\n if (this.animationState === PortalAnimationState.WAITING) {\n if (this.timeAlive >= 1) {\n this.nextAnimationState();\n Portal_1.sound.play();\n }\n }\n else if (this.animationState === PortalAnimationState.IDLE) {\n if (this.timeAlive >= 4) {\n this.nextAnimationState();\n }\n }\n else if (this.animationState === PortalAnimationState.GONE) {\n this.scene.removeGameObject(this);\n }\n }\n};\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/portal.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], Portal, \"sprite\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/portal/portal.ogg\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], Portal, \"sound\", void 0);\nPortal = Portal_1 = tslib_1.__decorate([\n Entity_1.entity(\"portal\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number])\n], Portal);\nexports.Portal = Portal;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvUG9ydGFsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2VudGl0aWVzL1BvcnRhbC50cz9hYzFhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzZXByaXRlIH0gZnJvbSBcIi4uL0FzZXByaXRlXCI7XHJcbmltcG9ydCB7IGFzc2V0IH0gZnJvbSBcIi4uL0Fzc2V0c1wiO1xyXG5pbXBvcnQgeyBlbnRpdHksIEVudGl0eSB9IGZyb20gXCIuLi9FbnRpdHlcIjtcclxuaW1wb3J0IHsgR2FtZVNjZW5lIH0gZnJvbSBcIi4uL3NjZW5lcy9HYW1lU2NlbmVcIjtcclxuaW1wb3J0IHsgU291bmQgfSBmcm9tIFwiLi4vU291bmRcIjtcclxuXHJcbmVudW0gUG9ydGFsQW5pbWF0aW9uU3RhdGUgeyBXQUlUSU5HLCBGQURFSU4sIElETEUsIEZBREVPVVQsIEdPTkUgfVxyXG5cclxuQGVudGl0eShcInBvcnRhbFwiKVxyXG5leHBvcnQgY2xhc3MgUG9ydGFsIGV4dGVuZHMgRW50aXR5IHtcclxuICAgIEBhc3NldChcInNwcml0ZXMvcG9ydGFsLmFzZXByaXRlLmpzb25cIilcclxuICAgIHByaXZhdGUgc3RhdGljIHNwcml0ZTogQXNlcHJpdGU7XHJcblxyXG4gICAgQGFzc2V0KFwic291bmRzL3BvcnRhbC9wb3J0YWwub2dnXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBzb3VuZDogU291bmQ7XHJcblxyXG4gICAgcHJpdmF0ZSBhbmltYXRpb25TdGF0ZSA9IFBvcnRhbEFuaW1hdGlvblN0YXRlLldBSVRJTkc7XHJcblxyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHNjZW5lOiBHYW1lU2NlbmUsIHg6IG51bWJlciwgeTogbnVtYmVyKSB7XHJcbiAgICAgICAgc3VwZXIoc2NlbmUsIHgsIHksIDMyLCA1MCwgZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuYW5pbWF0b3IuYXNzaWduU3ByaXRlKFBvcnRhbC5zcHJpdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbmV4dEFuaW1hdGlvblN0YXRlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYW5pbWF0aW9uU3RhdGUrKztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZHJhdygpOiB2b2lkIHtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuYW5pbWF0aW9uU3RhdGUpIHtcclxuICAgICAgICAgICAgY2FzZSBQb3J0YWxBbmltYXRpb25TdGF0ZS5XQUlUSU5HOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmltYXRvci5wbGF5KFwiZW1wdHlcIiwgMSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBQb3J0YWxBbmltYXRpb25TdGF0ZS5GQURFSU46XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdG9yLnBsYXkoXCJmYWRlaW5cIiwgMSwgeyBsb29wOiBmYWxzZSwgY2FsbGJhY2s6IHRoaXMubmV4dEFuaW1hdGlvblN0YXRlLmJpbmQodGhpcykgfSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBQb3J0YWxBbmltYXRpb25TdGF0ZS5JRExFOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmltYXRvci5wbGF5KFwiaWRsZVwiLCAxKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFBvcnRhbEFuaW1hdGlvblN0YXRlLkZBREVPVVQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdG9yLnBsYXkoXCJmYWRlb3V0XCIsIDEsIHsgbG9vcDogZmFsc2UsIGNhbGxiYWNrOiB0aGlzLm5leHRBbmltYXRpb25TdGF0ZS5iaW5kKHRoaXMpIH0pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgUG9ydGFsQW5pbWF0aW9uU3RhdGUuR09ORTpcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5pbWF0b3IucGxheShcImVtcHR5XCIsIDEpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zY2VuZS5zaG93Qm91bmRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhd0JvdW5kcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlKGR0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci51cGRhdGUoZHQpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hbmltYXRpb25TdGF0ZSA9PT0gUG9ydGFsQW5pbWF0aW9uU3RhdGUuV0FJVElORykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy50aW1lQWxpdmUgPj0gMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0QW5pbWF0aW9uU3RhdGUoKTtcclxuICAgICAgICAgICAgICAgIFBvcnRhbC5zb3VuZC5wbGF5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYW5pbWF0aW9uU3RhdGUgPT09IFBvcnRhbEFuaW1hdGlvblN0YXRlLklETEUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGltZUFsaXZlID49IDQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV4dEFuaW1hdGlvblN0YXRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYW5pbWF0aW9uU3RhdGUgPT09IFBvcnRhbEFuaW1hdGlvblN0YXRlLkdPTkUpIHtcclxuICAgICAgICAgICAgdGhpcy5zY2VuZS5yZW1vdmVHYW1lT2JqZWN0KHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQVNBO0FBQ0E7QUFIQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXhEQTtBQURBO0FBQ0E7QUFBQTtBQUdBO0FBREE7QUFDQTtBQUFBO0FBTEE7QUFEQTtBQVVBO0FBVEE7QUFBQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/entities/Portal.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/Radio.js":
|
|
/*!*******************************!*\
|
|
!*** ./lib/entities/Radio.js ***!
|
|
\*******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar Radio_1;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Radio = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst GameScene_1 = __webpack_require__(/*! ../scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst Renderer_1 = __webpack_require__(/*! ../Renderer */ \"./lib/Renderer.js\");\nlet Radio = Radio_1 = class Radio extends Entity_1.Entity {\n constructor(scene, x, y) {\n super(scene, x, y, 24, 24, false);\n }\n draw() {\n this.scene.renderer.addAseprite(Radio_1.sprite, \"idle\", this.x, this.y, Renderer_1.RenderingLayer.ENTITIES);\n if (this.scene.showBounds) {\n this.drawBounds();\n }\n }\n update() { }\n};\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/radio.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], Radio, \"sprite\", void 0);\nRadio = Radio_1 = tslib_1.__decorate([\n Entity_1.entity(\"radio\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number])\n], Radio);\nexports.Radio = Radio;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvUmFkaW8uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZW50aXRpZXMvUmFkaW8udHM/ZjE0YiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc2Vwcml0ZSB9IGZyb20gXCIuLi9Bc2Vwcml0ZVwiO1xyXG5pbXBvcnQgeyBhc3NldCB9IGZyb20gXCIuLi9Bc3NldHNcIjtcclxuaW1wb3J0IHsgZW50aXR5LCBFbnRpdHkgfSBmcm9tIFwiLi4vRW50aXR5XCI7XHJcbmltcG9ydCB7IEdhbWVTY2VuZSB9IGZyb20gXCIuLi9zY2VuZXMvR2FtZVNjZW5lXCI7XHJcbmltcG9ydCB7IFJlbmRlcmluZ0xheWVyIH0gZnJvbSBcIi4uL1JlbmRlcmVyXCI7XHJcblxyXG5AZW50aXR5KFwicmFkaW9cIilcclxuZXhwb3J0IGNsYXNzIFJhZGlvIGV4dGVuZHMgRW50aXR5IHtcclxuICAgIEBhc3NldChcInNwcml0ZXMvcmFkaW8uYXNlcHJpdGUuanNvblwiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgc3ByaXRlOiBBc2Vwcml0ZTtcclxuXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioc2NlbmU6IEdhbWVTY2VuZSwgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcclxuICAgICAgICBzdXBlcihzY2VuZSwgeCwgeSwgMjQsIDI0LCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRyYXcoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zY2VuZS5yZW5kZXJlci5hZGRBc2Vwcml0ZShSYWRpby5zcHJpdGUsIFwiaWRsZVwiLCB0aGlzLngsIHRoaXMueSwgUmVuZGVyaW5nTGF5ZXIuRU5USVRJRVMpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zY2VuZS5zaG93Qm91bmRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhd0JvdW5kcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlKCk6IHZvaWQge31cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBSUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQWZBO0FBREE7QUFDQTtBQUFBO0FBRkE7QUFEQTtBQUtBO0FBSkE7QUFBQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/entities/Radio.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/RiddleStone.js":
|
|
/*!*************************************!*\
|
|
!*** ./lib/entities/RiddleStone.js ***!
|
|
\*************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RiddleStone = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst Renderer_1 = __webpack_require__(/*! ../Renderer */ \"./lib/Renderer.js\");\nclass RiddleStone extends Entity_1.Entity {\n constructor(scene, x, y, properties) {\n super(scene, x, y, 16, 16, false);\n this.col = properties.col || 0;\n this.row = properties.row || 0;\n }\n draw() {\n if (this.scene.mountainRiddle.isCorrectGate(this.col, this.row)) {\n this.scene.renderer.addAseprite(RiddleStone.sprite, \"idle\", this.x, this.y, Renderer_1.RenderingLayer.ENTITIES);\n if (this.scene.showBounds) {\n this.drawBounds();\n }\n }\n }\n update() { }\n}\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/riddlestone.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], RiddleStone, \"sprite\", void 0);\nexports.RiddleStone = RiddleStone;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvUmlkZGxlU3RvbmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZW50aXRpZXMvUmlkZGxlU3RvbmUudHM/YjI2YyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc2Vwcml0ZSB9IGZyb20gXCIuLi9Bc2Vwcml0ZVwiO1xyXG5pbXBvcnQgeyBhc3NldCB9IGZyb20gXCIuLi9Bc3NldHNcIjtcclxuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSBcIi4uL0VudGl0eVwiO1xyXG5pbXBvcnQgeyBHYW1lT2JqZWN0UHJvcGVydGllcyB9IGZyb20gXCIuLi9NYXBJbmZvXCI7XHJcbmltcG9ydCB7IEdhbWVTY2VuZSB9IGZyb20gXCIuLi9zY2VuZXMvR2FtZVNjZW5lXCI7XHJcbmltcG9ydCB7IFJlbmRlcmluZ0xheWVyIH0gZnJvbSBcIi4uL1JlbmRlcmVyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUmlkZGxlU3RvbmUgZXh0ZW5kcyBFbnRpdHkge1xyXG4gICAgQGFzc2V0KFwic3ByaXRlcy9yaWRkbGVzdG9uZS5hc2Vwcml0ZS5qc29uXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBzcHJpdGU6IEFzZXByaXRlO1xyXG4gICAgcHJpdmF0ZSBjb2w6IG51bWJlcjtcclxuICAgIHByaXZhdGUgcm93OiBudW1iZXI7XHJcblxyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHNjZW5lOiBHYW1lU2NlbmUsIHg6IG51bWJlciwgeTogbnVtYmVyLCBwcm9wZXJ0aWVzOiBHYW1lT2JqZWN0UHJvcGVydGllcykge1xyXG4gICAgICAgIHN1cGVyKHNjZW5lLCB4LCB5LCAxNiwgMTYsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgdGhpcy5jb2wgPSBwcm9wZXJ0aWVzLmNvbCB8fCAwO1xyXG4gICAgICAgIHRoaXMucm93ID0gcHJvcGVydGllcy5yb3cgfHwgMDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZHJhdygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5zY2VuZS5tb3VudGFpblJpZGRsZS5pc0NvcnJlY3RHYXRlKHRoaXMuY29sLCB0aGlzLnJvdykpIHtcclxuICAgICAgICAgICAgdGhpcy5zY2VuZS5yZW5kZXJlci5hZGRBc2Vwcml0ZShSaWRkbGVTdG9uZS5zcHJpdGUsIFwiaWRsZVwiLCB0aGlzLngsIHRoaXMueSwgUmVuZGVyaW5nTGF5ZXIuRU5USVRJRVMpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2NlbmUuc2hvd0JvdW5kcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcmF3Qm91bmRzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZSgpOiB2b2lkIHt9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBR0E7QUFFQTtBQU1BO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQXRCQTtBQURBO0FBQ0E7QUFBQTtBQUZBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/entities/RiddleStone.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/ScriptableNPC.js":
|
|
/*!***************************************!*\
|
|
!*** ./lib/entities/ScriptableNPC.js ***!
|
|
\***************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ScriptableNPC = void 0;\nconst World_1 = __webpack_require__(/*! ../World */ \"./lib/World.js\");\nconst NPC_1 = __webpack_require__(/*! ./NPC */ \"./lib/entities/NPC.js\");\nclass ScriptableNPC extends NPC_1.NPC {\n constructor() {\n super(...arguments);\n this.move = 0;\n }\n updatePosition(newX, newY) {\n this.x = newX;\n this.y = newY;\n // Check collision with the environment and correct player position and movement\n if (this.pullOutOfGround() !== 0 || this.pullOutOfCeiling() !== 0) {\n this.setVelocityY(0);\n }\n if (this.pullOutOfWall() !== 0) {\n this.setVelocityX(0);\n }\n }\n pullOutOfGround() {\n let pulled = 0, col = 0;\n if (this.getVelocityY() <= 0) {\n const world = this.scene.world;\n const height = world.getHeight();\n col = world.collidesWith(this.x, this.y, [this], [World_1.Environment.WATER]);\n while (this.y < height && col) {\n pulled++;\n this.y++;\n col = world.collidesWith(this.x, this.y);\n }\n }\n return pulled;\n }\n pullOutOfCeiling() {\n let pulled = 0;\n const world = this.scene.world;\n while (this.y > 0\n && world.collidesWith(this.x, this.y + this.height, [this], [World_1.Environment.PLATFORM, World_1.Environment.WATER])) {\n pulled++;\n this.y--;\n }\n return pulled;\n }\n pullOutOfWall() {\n let pulled = 0;\n const world = this.scene.world;\n if (this.getVelocityX() > 0) {\n while (world.collidesWithVerticalLine(this.x + this.width / 2, this.y + this.height * 3 / 4, this.height / 2, [this], [World_1.Environment.PLATFORM, World_1.Environment.WATER])) {\n this.x--;\n pulled++;\n }\n }\n else {\n while (world.collidesWithVerticalLine(this.x - this.width / 2, this.y + this.height * 3 / 4, this.height / 2, [this], [World_1.Environment.PLATFORM, World_1.Environment.WATER])) {\n this.x++;\n pulled++;\n }\n }\n return pulled;\n }\n update(dt) {\n super.update(dt);\n }\n}\nexports.ScriptableNPC = ScriptableNPC;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvU2NyaXB0YWJsZU5QQy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9lbnRpdGllcy9TY3JpcHRhYmxlTlBDLnRzPzA5MWYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tIFwiLi4vV29ybGRcIjtcclxuaW1wb3J0IHsgTlBDIH0gZnJvbSBcIi4vTlBDXCI7XHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2NyaXB0YWJsZU5QQyBleHRlbmRzIE5QQyB7XHJcbiAgICBwcm90ZWN0ZWQgbW92ZTogMCB8IDEgfCAtMSAgPSAwO1xyXG5cclxuICAgIHByb3RlY3RlZCB1cGRhdGVQb3NpdGlvbihuZXdYOiBudW1iZXIsIG5ld1k6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMueCA9IG5ld1g7XHJcbiAgICAgICAgdGhpcy55ID0gbmV3WTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgY29sbGlzaW9uIHdpdGggdGhlIGVudmlyb25tZW50IGFuZCBjb3JyZWN0IHBsYXllciBwb3NpdGlvbiBhbmQgbW92ZW1lbnRcclxuICAgICAgICBpZiAodGhpcy5wdWxsT3V0T2ZHcm91bmQoKSAhPT0gMCB8fCB0aGlzLnB1bGxPdXRPZkNlaWxpbmcoKSAhPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFZlbG9jaXR5WSgwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnB1bGxPdXRPZldhbGwoKSAhPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFZlbG9jaXR5WCgwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwdWxsT3V0T2ZHcm91bmQoKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgcHVsbGVkID0gMCwgY29sID0gMDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0VmVsb2NpdHlZKCkgPD0gMCkge1xyXG4gICAgICAgICAgICBjb25zdCB3b3JsZCA9IHRoaXMuc2NlbmUud29ybGQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IHdvcmxkLmdldEhlaWdodCgpO1xyXG4gICAgICAgICAgICBjb2wgPSB3b3JsZC5jb2xsaWRlc1dpdGgodGhpcy54LCB0aGlzLnksIFsgdGhpcyBdLCBbIEVudmlyb25tZW50LldBVEVSIF0pO1xyXG5cclxuICAgICAgICAgICAgd2hpbGUgKHRoaXMueSA8IGhlaWdodCAmJiBjb2wpIHtcclxuICAgICAgICAgICAgICAgIHB1bGxlZCsrO1xyXG4gICAgICAgICAgICAgICAgdGhpcy55Kys7XHJcbiAgICAgICAgICAgICAgICBjb2wgPSB3b3JsZC5jb2xsaWRlc1dpdGgodGhpcy54LCB0aGlzLnkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcHVsbGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHVsbE91dE9mQ2VpbGluZygpOiBudW1iZXIge1xyXG4gICAgICAgIGxldCBwdWxsZWQgPSAwO1xyXG4gICAgICAgIGNvbnN0IHdvcmxkID0gdGhpcy5zY2VuZS53b3JsZDtcclxuXHJcbiAgICAgICAgd2hpbGUgKFxyXG4gICAgICAgICAgICB0aGlzLnkgPiAwXHJcbiAgICAgICAgICAgICYmIHdvcmxkLmNvbGxpZGVzV2l0aChcclxuICAgICAgICAgICAgICAgIHRoaXMueCwgdGhpcy55ICsgdGhpcy5oZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBbIHRoaXMgXSxcclxuICAgICAgICAgICAgICAgIFsgRW52aXJvbm1lbnQuUExBVEZPUk0sIEVudmlyb25tZW50LldBVEVSIF1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBwdWxsZWQrKztcclxuICAgICAgICAgICAgdGhpcy55LS07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcHVsbGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHVsbE91dE9mV2FsbCgpOiBudW1iZXIge1xyXG4gICAgICAgIGxldCBwdWxsZWQgPSAwO1xyXG4gICAgICAgIGNvbnN0IHdvcmxkID0gdGhpcy5zY2VuZS53b3JsZDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0VmVsb2NpdHlYKCkgPiAwKSB7XHJcbiAgICAgICAgICAgIHdoaWxlIChcclxuICAgICAgICAgICAgICAgIHdvcmxkLmNvbGxpZGVzV2l0aFZlcnRpY2FsTGluZShcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnggKyB0aGlzLndpZHRoIC8gMiwgdGhpcy55ICsgdGhpcy5oZWlnaHQgKiAzIC8gNCxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgWyB0aGlzIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgWyBFbnZpcm9ubWVudC5QTEFURk9STSwgRW52aXJvbm1lbnQuV0FURVIgXVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMueC0tO1xyXG4gICAgICAgICAgICAgICAgcHVsbGVkKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB3aGlsZSAoXHJcbiAgICAgICAgICAgICAgICB3b3JsZC5jb2xsaWRlc1dpdGhWZXJ0aWNhbExpbmUoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy54IC0gdGhpcy53aWR0aCAvIDIsIHRoaXMueSArIHRoaXMuaGVpZ2h0ICogMyAvIDQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIFsgdGhpcyBdLFxyXG4gICAgICAgICAgICAgICAgICAgIFsgRW52aXJvbm1lbnQuUExBVEZPUk0sIEVudmlyb25tZW50LldBVEVSIF1cclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLngrKztcclxuICAgICAgICAgICAgICAgIHB1bGxlZCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcHVsbGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGUoZHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLnVwZGF0ZShkdCk7XHJcbiAgICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBRUE7QUFBQTs7QUFDQTtBQXlGQTtBQXZGQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFNQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBMUZBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/entities/ScriptableNPC.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/Seed.js":
|
|
/*!******************************!*\
|
|
!*** ./lib/entities/Seed.js ***!
|
|
\******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar Seed_1;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Seed = exports.SeedState = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst Conversation_1 = __webpack_require__(/*! ../Conversation */ \"./lib/Conversation.js\");\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst World_1 = __webpack_require__(/*! ../World */ \"./lib/World.js\");\nconst Face_1 = __webpack_require__(/*! ../Face */ \"./lib/Face.js\");\nconst GameScene_1 = __webpack_require__(/*! ../scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst util_1 = __webpack_require__(/*! ../util */ \"./lib/util.js\");\nconst NPC_1 = __webpack_require__(/*! ./NPC */ \"./lib/entities/NPC.js\");\nconst Quests_1 = __webpack_require__(/*! ../Quests */ \"./lib/Quests.js\");\nconst Renderer_1 = __webpack_require__(/*! ../Renderer */ \"./lib/Renderer.js\");\nconst Sound_1 = __webpack_require__(/*! ../Sound */ \"./lib/Sound.js\");\nconst Wood_1 = __webpack_require__(/*! ./Wood */ \"./lib/entities/Wood.js\");\nvar SeedState;\n(function (SeedState) {\n SeedState[SeedState[\"FREE\"] = 0] = \"FREE\";\n SeedState[SeedState[\"PLANTED\"] = 1] = \"PLANTED\";\n SeedState[SeedState[\"SWIMMING\"] = 2] = \"SWIMMING\";\n SeedState[SeedState[\"GROWN\"] = 3] = \"GROWN\";\n})(SeedState = exports.SeedState || (exports.SeedState = {}));\nlet Seed = Seed_1 = class Seed extends NPC_1.NPC {\n constructor(scene, x, y) {\n super(scene, x, y, 24, 24);\n this.state = SeedState.FREE;\n this.wood = new Wood_1.Wood(scene, x, y);\n this.face = new Face_1.Face(scene, this, Face_1.EyeType.STANDARD, 0, 8);\n const floatingPosition = this.scene.pointsOfInterest.find(poi => poi.name === \"recover_floating_position\");\n if (!floatingPosition) {\n throw new Error(\"Could not find “recover_floating_position” point of interest in game scene.\");\n }\n this.floatingPosition = floatingPosition;\n }\n resetState() {\n this.setFloating(false);\n this.state = SeedState.FREE;\n }\n getSpriteTag() {\n switch (this.state) {\n case SeedState.PLANTED:\n return \"planted\";\n case SeedState.GROWN:\n return \"grown\";\n default:\n return \"free\";\n }\n }\n draw(ctx) {\n this.scene.renderer.addAseprite(Seed_1.sprite, this.getSpriteTag(), this.x, this.y - 1, Renderer_1.RenderingLayer.ENTITIES, undefined);\n if (this.scene.showBounds) {\n this.drawBounds();\n }\n if (this.state === SeedState.GROWN) {\n this.drawFace(ctx);\n }\n this.speechBubble.draw(ctx);\n }\n isCarried() {\n return this.scene.player.isCarrying(this);\n }\n grow() {\n if (this.state === SeedState.PLANTED) {\n this.state = SeedState.GROWN;\n this.scene.seed = this;\n Conversation_1.Conversation.setGlobal(\"seedgrown\", \"true\");\n this.scene.game.campaign.runAction(\"enable\", null, [\"tree\", \"tree2\"]);\n this.scene.game.campaign.runAction(\"enable\", null, [\"seed\", \"seed1\"]);\n }\n }\n update(dt) {\n super.update(dt);\n if (this.state === SeedState.SWIMMING) {\n const diffX = this.floatingPosition.x - this.x;\n const moveX = Math.min(20, Math.abs(diffX)) * Math.sign(diffX);\n this.x += moveX * dt;\n this.setVelocityY(Math.abs(((util_1.now() % 2000) - 1000) / 1000) - 0.5);\n }\n if (this.state === SeedState.FREE || this.state === SeedState.SWIMMING) {\n const player = this.scene.player;\n if (!this.isCarried() && this.distanceTo(player) < 20) {\n player.carry(this);\n }\n if (!this.isCarried()\n && this.scene.world.collidesWith(this.x, this.y - 8) === World_1.Environment.SOIL) {\n const seedPosition = this.scene.pointsOfInterest.find(poi => poi.name === \"seedposition\");\n if (!seedPosition)\n throw new Error(\"Seed position is missing in points of interest array\");\n this.state = SeedState.PLANTED;\n this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).trigger(Quests_1.QuestATrigger.PLANTED_SEED);\n this.setFloating(true);\n this.x = seedPosition.x;\n this.y = seedPosition.y;\n Seed_1.successSound.play();\n Conversation_1.Conversation.setGlobal(\"seedplanted\", \"true\");\n }\n if (!this.isCarried()\n && this.state !== SeedState.SWIMMING\n && this.scene.world.collidesWith(this.x, this.y - 5) === World_1.Environment.WATER) {\n this.state = SeedState.SWIMMING;\n this.setVelocity(0, 0);\n this.setFloating(true);\n this.y = this.floatingPosition.y;\n }\n }\n else if (this.state === SeedState.PLANTED) {\n if (this.scene.world.isRaining()) {\n this.grow();\n }\n }\n else if (this.state === SeedState.GROWN) {\n // TODO Special update behavior when grown\n }\n this.speechBubble.update(this.x, this.y);\n }\n spawnWood() {\n if (!this.scene.gameObjects.includes(this.wood)) {\n this.scene.addGameObject(this.wood);\n }\n this.wood.x = this.x;\n this.wood.y = this.y + this.height / 2;\n this.wood.setVelocity(-5, 0);\n return this.wood;\n }\n startDialog() { }\n};\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/seed.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], Seed, \"sprite\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/throwing/success.mp3\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], Seed, \"successSound\", void 0);\nSeed = Seed_1 = tslib_1.__decorate([\n Entity_1.entity(\"seed\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number])\n], Seed);\nexports.Seed = Seed;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvU2VlZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9lbnRpdGllcy9TZWVkLnRzPzg4MjciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNlcHJpdGUgfSBmcm9tIFwiLi4vQXNlcHJpdGVcIjtcclxuaW1wb3J0IHsgYXNzZXQgfSBmcm9tIFwiLi4vQXNzZXRzXCI7XHJcbmltcG9ydCB7IENvbnZlcnNhdGlvbiB9IGZyb20gXCIuLi9Db252ZXJzYXRpb25cIjtcclxuaW1wb3J0IHsgZW50aXR5IH0gZnJvbSBcIi4uL0VudGl0eVwiO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gXCIuLi9Xb3JsZFwiO1xyXG5pbXBvcnQgeyBFeWVUeXBlLCBGYWNlIH0gZnJvbSBcIi4uL0ZhY2VcIjtcclxuaW1wb3J0IHsgR2FtZU9iamVjdEluZm8gfSBmcm9tIFwiLi4vTWFwSW5mb1wiO1xyXG5pbXBvcnQgeyBHYW1lU2NlbmUgfSBmcm9tIFwiLi4vc2NlbmVzL0dhbWVTY2VuZVwiO1xyXG5pbXBvcnQgeyBub3cgfSBmcm9tIFwiLi4vdXRpbFwiO1xyXG5pbXBvcnQgeyBOUEMgfSBmcm9tIFwiLi9OUENcIjtcclxuaW1wb3J0IHsgUXVlc3RBVHJpZ2dlciwgUXVlc3RLZXkgfSBmcm9tIFwiLi4vUXVlc3RzXCI7XHJcbmltcG9ydCB7IFJlbmRlcmluZ0xheWVyIH0gZnJvbSBcIi4uL1JlbmRlcmVyXCI7XHJcbmltcG9ydCB7IFNvdW5kIH0gZnJvbSBcIi4uL1NvdW5kXCI7XHJcbmltcG9ydCB7IFdvb2QgfSBmcm9tIFwiLi9Xb29kXCI7XHJcblxyXG5leHBvcnQgZW51bSBTZWVkU3RhdGUge1xyXG4gICAgRlJFRSA9IDAsXHJcbiAgICBQTEFOVEVEID0gMSxcclxuICAgIFNXSU1NSU5HID0gMixcclxuICAgIEdST1dOID0gM1xyXG59XHJcblxyXG5AZW50aXR5KFwic2VlZFwiKVxyXG5leHBvcnQgY2xhc3MgU2VlZCBleHRlbmRzIE5QQyB7XHJcbiAgICBAYXNzZXQoXCJzcHJpdGVzL3NlZWQuYXNlcHJpdGUuanNvblwiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgc3ByaXRlOiBBc2Vwcml0ZTtcclxuXHJcbiAgICBAYXNzZXQoXCJzb3VuZHMvdGhyb3dpbmcvc3VjY2Vzcy5tcDNcIilcclxuICAgIHByaXZhdGUgc3RhdGljIHN1Y2Nlc3NTb3VuZDogU291bmQ7XHJcblxyXG4gICAgcHVibGljIHN0YXRlID0gU2VlZFN0YXRlLkZSRUU7XHJcbiAgICBwcml2YXRlIHdvb2Q6IFdvb2Q7XHJcbiAgICBwcml2YXRlIGZsb2F0aW5nUG9zaXRpb246IEdhbWVPYmplY3RJbmZvO1xyXG5cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihzY2VuZTogR2FtZVNjZW5lLCB4OiBudW1iZXIsIHk6IG51bWJlcikge1xyXG4gICAgICAgIHN1cGVyKHNjZW5lLCB4LCB5LCAyNCwgMjQpO1xyXG4gICAgICAgIHRoaXMud29vZCA9IG5ldyBXb29kKHNjZW5lLCB4LCB5KTtcclxuICAgICAgICB0aGlzLmZhY2UgPSBuZXcgRmFjZShzY2VuZSwgdGhpcywgRXllVHlwZS5TVEFOREFSRCwgMCwgOCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZsb2F0aW5nUG9zaXRpb24gPSB0aGlzLnNjZW5lLnBvaW50c09mSW50ZXJlc3QuZmluZChwb2kgPT4gcG9pLm5hbWUgPT09IFwicmVjb3Zlcl9mbG9hdGluZ19wb3NpdGlvblwiKTtcclxuXHJcbiAgICAgICAgaWYgKCFmbG9hdGluZ1Bvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvciAoXCJDb3VsZCBub3QgZmluZCDigJxyZWNvdmVyX2Zsb2F0aW5nX3Bvc2l0aW9u4oCdIHBvaW50IG9mIGludGVyZXN0IGluIGdhbWUgc2NlbmUuXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5mbG9hdGluZ1Bvc2l0aW9uID0gZmxvYXRpbmdQb3NpdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzZXRTdGF0ZSAoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZXRGbG9hdGluZyhmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNlZWRTdGF0ZS5GUkVFO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0U3ByaXRlVGFnKCk6IHN0cmluZyB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnN0YXRlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgU2VlZFN0YXRlLlBMQU5URUQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJwbGFudGVkXCI7XHJcbiAgICAgICAgICAgIGNhc2UgU2VlZFN0YXRlLkdST1dOOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiZ3Jvd25cIjtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImZyZWVcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRyYXcoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNjZW5lLnJlbmRlcmVyLmFkZEFzZXByaXRlKFxyXG4gICAgICAgICAgICBTZWVkLnNwcml0ZSxcclxuICAgICAgICAgICAgdGhpcy5nZXRTcHJpdGVUYWcoKSxcclxuICAgICAgICAgICAgdGhpcy54LCB0aGlzLnkgLSAxLFxyXG4gICAgICAgICAgICBSZW5kZXJpbmdMYXllci5FTlRJVElFUyxcclxuICAgICAgICAgICAgdW5kZWZpbmVkXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmUuc2hvd0JvdW5kcykge1xyXG4gICAgICAgICAgICB0aGlzLmRyYXdCb3VuZHMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBTZWVkU3RhdGUuR1JPV04pIHtcclxuICAgICAgICAgICAgdGhpcy5kcmF3RmFjZShjdHgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zcGVlY2hCdWJibGUuZHJhdyhjdHgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0NhcnJpZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NlbmUucGxheWVyLmlzQ2FycnlpbmcodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdyb3coKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFNlZWRTdGF0ZS5QTEFOVEVEKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTZWVkU3RhdGUuR1JPV047XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuc2VlZCA9IHRoaXM7XHJcbiAgICAgICAgICAgIENvbnZlcnNhdGlvbi5zZXRHbG9iYWwoXCJzZWVkZ3Jvd25cIiwgXCJ0cnVlXCIpO1xyXG4gICAgICAgICAgICB0aGlzLnNjZW5lLmdhbWUuY2FtcGFpZ24ucnVuQWN0aW9uKFwiZW5hYmxlXCIsIG51bGwsIFtcInRyZWVcIiwgXCJ0cmVlMlwiXSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuZ2FtZS5jYW1wYWlnbi5ydW5BY3Rpb24oXCJlbmFibGVcIiwgbnVsbCwgW1wic2VlZFwiLCBcInNlZWQxXCJdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZShkdDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIudXBkYXRlKGR0KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFNlZWRTdGF0ZS5TV0lNTUlORykge1xyXG4gICAgICAgICAgICBjb25zdCBkaWZmWCA9IHRoaXMuZmxvYXRpbmdQb3NpdGlvbi54IC0gdGhpcy54O1xyXG4gICAgICAgICAgICBjb25zdCBtb3ZlWCA9IE1hdGgubWluKDIwLCBNYXRoLmFicyhkaWZmWCkpICogTWF0aC5zaWduKGRpZmZYKTtcclxuICAgICAgICAgICAgdGhpcy54ICs9IG1vdmVYICogZHQ7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmVsb2NpdHlZKE1hdGguYWJzKCgobm93KCkgJSAyMDAwKSAtIDEwMDApIC8gMTAwMCkgLSAwLjUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFNlZWRTdGF0ZS5GUkVFIHx8IHRoaXMuc3RhdGUgPT09IFNlZWRTdGF0ZS5TV0lNTUlORykge1xyXG4gICAgICAgICAgICBjb25zdCBwbGF5ZXIgPSB0aGlzLnNjZW5lLnBsYXllcjtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0NhcnJpZWQoKSAmJiB0aGlzLmRpc3RhbmNlVG8ocGxheWVyKSA8IDIwKSB7XHJcbiAgICAgICAgICAgICAgICBwbGF5ZXIuY2FycnkodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgIXRoaXMuaXNDYXJyaWVkKClcclxuICAgICAgICAgICAgICAgICYmIHRoaXMuc2NlbmUud29ybGQuY29sbGlkZXNXaXRoKHRoaXMueCwgdGhpcy55IC0gOCkgPT09IEVudmlyb25tZW50LlNPSUxcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZWVkUG9zaXRpb24gPSB0aGlzLnNjZW5lLnBvaW50c09mSW50ZXJlc3QuZmluZChwb2kgPT4gcG9pLm5hbWUgPT09IFwic2VlZHBvc2l0aW9uXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghc2VlZFBvc2l0aW9uKSB0aHJvdyBuZXcgRXJyb3IoXCJTZWVkIHBvc2l0aW9uIGlzIG1pc3NpbmcgaW4gcG9pbnRzIG9mIGludGVyZXN0IGFycmF5XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTZWVkU3RhdGUuUExBTlRFRDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUuZ2FtZS5jYW1wYWlnbi5nZXRRdWVzdChRdWVzdEtleS5BKS50cmlnZ2VyKFF1ZXN0QVRyaWdnZXIuUExBTlRFRF9TRUVEKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RmxvYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnggPSBzZWVkUG9zaXRpb24ueDtcclxuICAgICAgICAgICAgICAgIHRoaXMueSA9IHNlZWRQb3NpdGlvbi55O1xyXG5cclxuICAgICAgICAgICAgICAgIFNlZWQuc3VjY2Vzc1NvdW5kLnBsYXkoKTtcclxuICAgICAgICAgICAgICAgIENvbnZlcnNhdGlvbi5zZXRHbG9iYWwoXCJzZWVkcGxhbnRlZFwiLCBcInRydWVcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICF0aGlzLmlzQ2FycmllZCgpXHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLnN0YXRlICE9PSBTZWVkU3RhdGUuU1dJTU1JTkdcclxuICAgICAgICAgICAgICAgICYmIHRoaXMuc2NlbmUud29ybGQuY29sbGlkZXNXaXRoKHRoaXMueCwgdGhpcy55IC0gNSkgPT09IEVudmlyb25tZW50LldBVEVSXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNlZWRTdGF0ZS5TV0lNTUlORztcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmVsb2NpdHkoMCwgMCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZsb2F0aW5nKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy55ID0gdGhpcy5mbG9hdGluZ1Bvc2l0aW9uLnk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUgPT09IFNlZWRTdGF0ZS5QTEFOVEVEKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNjZW5lLndvcmxkLmlzUmFpbmluZygpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3coKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZSA9PT0gU2VlZFN0YXRlLkdST1dOKSB7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gU3BlY2lhbCB1cGRhdGUgYmVoYXZpb3Igd2hlbiBncm93blxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zcGVlY2hCdWJibGUudXBkYXRlKHRoaXMueCwgdGhpcy55KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3Bhd25Xb29kKCk6IFdvb2Qge1xyXG4gICAgICAgIGlmICghdGhpcy5zY2VuZS5nYW1lT2JqZWN0cy5pbmNsdWRlcyh0aGlzLndvb2QpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuYWRkR2FtZU9iamVjdCh0aGlzLndvb2QpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLndvb2QueCA9IHRoaXMueDtcclxuICAgICAgICB0aGlzLndvb2QueSA9IHRoaXMueSArIHRoaXMuaGVpZ2h0IC8gMjtcclxuICAgICAgICB0aGlzLndvb2Quc2V0VmVsb2NpdHkoLTUsIDApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy53b29kO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydERpYWxvZygpOiB2b2lkIHt9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQVdBO0FBQ0E7QUFMQTtBQU1BO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBNUlBO0FBREE7QUFDQTtBQUFBO0FBR0E7QUFEQTtBQUNBO0FBQUE7QUFMQTtBQURBO0FBWUE7QUFYQTtBQUFBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/entities/Seed.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/ShadowPresence.js":
|
|
/*!****************************************!*\
|
|
!*** ./lib/entities/ShadowPresence.js ***!
|
|
\****************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar ShadowPresence_1;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ShadowPresence = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst GameScene_1 = __webpack_require__(/*! ../scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst NPC_1 = __webpack_require__(/*! ./NPC */ \"./lib/entities/NPC.js\");\nconst Quests_1 = __webpack_require__(/*! ../Quests */ \"./lib/Quests.js\");\nconst Renderer_1 = __webpack_require__(/*! ../Renderer */ \"./lib/Renderer.js\");\nconst Sound_1 = __webpack_require__(/*! ../Sound */ \"./lib/Sound.js\");\nconst SoundEmitter_1 = __webpack_require__(/*! ../SoundEmitter */ \"./lib/SoundEmitter.js\");\nvar AnimationTag;\n(function (AnimationTag) {\n AnimationTag[\"INVISIBLE\"] = \"invisible\";\n AnimationTag[\"IDLE\"] = \"idle\";\n})(AnimationTag || (AnimationTag = {}));\nlet ShadowPresence = ShadowPresence_1 = class ShadowPresence extends NPC_1.NPC {\n constructor(scene, x, y) {\n super(scene, x, y, 12, 46);\n this.isNearPlayer = false;\n this.direction = -1;\n this.lookAtPlayer = false;\n this.soundEmitter = new SoundEmitter_1.SoundEmitter(this.scene, this.x, this.y, ShadowPresence_1.caveAmbience, 0.3, 1);\n }\n showDialoguePrompt() {\n if (!super.showDialoguePrompt()) {\n return false;\n }\n return (this.isNearPlayer\n && this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).isTriggered(Quests_1.QuestATrigger.TALKED_TO_FIRE)\n && !this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).isTriggered(Quests_1.QuestATrigger.GOT_RUNNING_ABILITY));\n }\n draw(ctx) {\n const scale = this.direction < 0 ? { x: -1, y: 1 } : undefined;\n const animationTag = this.isNearPlayer ? AnimationTag.IDLE : AnimationTag.INVISIBLE;\n this.scene.renderer.add({\n type: Renderer_1.RenderingType.ASEPRITE,\n layer: Renderer_1.RenderingLayer.ENTITIES,\n translation: { x: this.x, y: -this.y },\n position: {\n x: -ShadowPresence_1.sprite.width >> 1,\n y: -ShadowPresence_1.sprite.height\n },\n scale,\n asset: ShadowPresence_1.sprite,\n animationTag,\n time: this.scene.gameTime * 1000\n });\n if (this.scene.showBounds) {\n this.drawBounds();\n }\n if (this.showDialoguePrompt()) {\n this.drawDialoguePrompt();\n }\n this.speechBubble.draw(ctx);\n }\n checkPlayerDistance() {\n this.isNearPlayer = false;\n if (this.distanceTo(this.scene.player) < 60) {\n this.isNearPlayer = true;\n }\n }\n update(dt) {\n super.update(dt);\n this.checkPlayerDistance();\n this.dialoguePrompt.update(dt, this.x, this.y + 48);\n this.speechBubble.update(this.x, this.y + 12);\n this.soundEmitter.update();\n }\n};\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/shadowpresence.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], ShadowPresence, \"sprite\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/ambient/cave.ogg\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], ShadowPresence, \"caveAmbience\", void 0);\nShadowPresence = ShadowPresence_1 = tslib_1.__decorate([\n Entity_1.entity(\"shadowpresence\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number])\n], ShadowPresence);\nexports.ShadowPresence = ShadowPresence;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvU2hhZG93UHJlc2VuY2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZW50aXRpZXMvU2hhZG93UHJlc2VuY2UudHM/YTJmMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc2Vwcml0ZSB9IGZyb20gXCIuLi9Bc2Vwcml0ZVwiO1xyXG5pbXBvcnQgeyBhc3NldCB9IGZyb20gXCIuLi9Bc3NldHNcIjtcclxuaW1wb3J0IHsgZW50aXR5IH0gZnJvbSBcIi4uL0VudGl0eVwiO1xyXG5pbXBvcnQgeyBHYW1lU2NlbmUgfSBmcm9tIFwiLi4vc2NlbmVzL0dhbWVTY2VuZVwiO1xyXG5pbXBvcnQgeyBOUEMgfSBmcm9tIFwiLi9OUENcIjtcclxuaW1wb3J0IHsgUXVlc3RBVHJpZ2dlciwgUXVlc3RLZXkgfSBmcm9tIFwiLi4vUXVlc3RzXCI7XHJcbmltcG9ydCB7IFJlbmRlcmluZ0xheWVyLCBSZW5kZXJpbmdUeXBlIH0gZnJvbSBcIi4uL1JlbmRlcmVyXCI7XHJcbmltcG9ydCB7IFNvdW5kIH0gZnJvbSBcIi4uL1NvdW5kXCI7XHJcbmltcG9ydCB7IFNvdW5kRW1pdHRlciB9IGZyb20gXCIuLi9Tb3VuZEVtaXR0ZXJcIjtcclxuXHJcbmVudW0gQW5pbWF0aW9uVGFnIHtcclxuICAgIElOVklTSUJMRSA9IFwiaW52aXNpYmxlXCIsXHJcbiAgICBJRExFID0gXCJpZGxlXCJcclxufVxyXG5cclxuQGVudGl0eShcInNoYWRvd3ByZXNlbmNlXCIpXHJcbmV4cG9ydCBjbGFzcyBTaGFkb3dQcmVzZW5jZSBleHRlbmRzIE5QQyB7XHJcbiAgICBAYXNzZXQoXCJzcHJpdGVzL3NoYWRvd3ByZXNlbmNlLmFzZXByaXRlLmpzb25cIilcclxuICAgIHByaXZhdGUgc3RhdGljIHNwcml0ZTogQXNlcHJpdGU7XHJcblxyXG4gICAgQGFzc2V0KFwic291bmRzL2FtYmllbnQvY2F2ZS5vZ2dcIilcclxuICAgIHByaXZhdGUgc3RhdGljIGNhdmVBbWJpZW5jZTogU291bmQ7XHJcbiAgICBwcml2YXRlIHNvdW5kRW1pdHRlcjogU291bmRFbWl0dGVyO1xyXG5cclxuICAgIHByaXZhdGUgaXNOZWFyUGxheWVyID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHNjZW5lOiBHYW1lU2NlbmUsIHg6IG51bWJlciwgeTogbnVtYmVyKSB7XHJcbiAgICAgICAgc3VwZXIoc2NlbmUsIHgsIHksIDEyLCA0Nik7XHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSAtMTtcclxuICAgICAgICB0aGlzLmxvb2tBdFBsYXllciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc291bmRFbWl0dGVyID0gbmV3IFNvdW5kRW1pdHRlcih0aGlzLnNjZW5lLCB0aGlzLngsIHRoaXMueSwgU2hhZG93UHJlc2VuY2UuY2F2ZUFtYmllbmNlLCAwLjMsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzaG93RGlhbG9ndWVQcm9tcHQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFzdXBlci5zaG93RGlhbG9ndWVQcm9tcHQoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLmlzTmVhclBsYXllclxyXG4gICAgICAgICAgICAmJiB0aGlzLnNjZW5lLmdhbWUuY2FtcGFpZ24uZ2V0UXVlc3QoUXVlc3RLZXkuQSkuaXNUcmlnZ2VyZWQoUXVlc3RBVHJpZ2dlci5UQUxLRURfVE9fRklSRSlcclxuICAgICAgICAgICAgJiYgIXRoaXMuc2NlbmUuZ2FtZS5jYW1wYWlnbi5nZXRRdWVzdChRdWVzdEtleS5BKS5pc1RyaWdnZXJlZChRdWVzdEFUcmlnZ2VyLkdPVF9SVU5OSU5HX0FCSUxJVFkpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZHJhdyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy5kaXJlY3Rpb24gPCAwID8geyB4OiAtMSwgeTogMSB9IDogdW5kZWZpbmVkO1xyXG4gICAgICAgIGNvbnN0IGFuaW1hdGlvblRhZyA9IHRoaXMuaXNOZWFyUGxheWVyID8gQW5pbWF0aW9uVGFnLklETEUgOiBBbmltYXRpb25UYWcuSU5WSVNJQkxFO1xyXG5cclxuICAgICAgICB0aGlzLnNjZW5lLnJlbmRlcmVyLmFkZCh7XHJcbiAgICAgICAgICAgIHR5cGU6IFJlbmRlcmluZ1R5cGUuQVNFUFJJVEUsXHJcbiAgICAgICAgICAgIGxheWVyOiBSZW5kZXJpbmdMYXllci5FTlRJVElFUyxcclxuICAgICAgICAgICAgdHJhbnNsYXRpb246IHsgeDogdGhpcy54LCB5OiAtdGhpcy55IH0sXHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICB4OiAtU2hhZG93UHJlc2VuY2Uuc3ByaXRlLndpZHRoID4+IDEsXHJcbiAgICAgICAgICAgICAgICB5OiAtU2hhZG93UHJlc2VuY2Uuc3ByaXRlLmhlaWdodFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzY2FsZSxcclxuICAgICAgICAgICAgYXNzZXQ6IFNoYWRvd1ByZXNlbmNlLnNwcml0ZSxcclxuICAgICAgICAgICAgYW5pbWF0aW9uVGFnLFxyXG4gICAgICAgICAgICB0aW1lOiB0aGlzLnNjZW5lLmdhbWVUaW1lICogMTAwMFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zY2VuZS5zaG93Qm91bmRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhd0JvdW5kcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd0RpYWxvZ3VlUHJvbXB0KCkpIHtcclxuICAgICAgICAgICAgdGhpcy5kcmF3RGlhbG9ndWVQcm9tcHQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3BlZWNoQnViYmxlLmRyYXcoY3R4KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hlY2tQbGF5ZXJEaXN0YW5jZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzTmVhclBsYXllciA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmRpc3RhbmNlVG8odGhpcy5zY2VuZS5wbGF5ZXIpIDwgNjApIHtcclxuICAgICAgICAgICAgdGhpcy5pc05lYXJQbGF5ZXIgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlKGR0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci51cGRhdGUoZHQpO1xyXG5cclxuICAgICAgICB0aGlzLmNoZWNrUGxheWVyRGlzdGFuY2UoKTtcclxuICAgICAgICB0aGlzLmRpYWxvZ3VlUHJvbXB0LnVwZGF0ZShkdCwgdGhpcy54LCB0aGlzLnkgKyA0OCk7XHJcbiAgICAgICAgdGhpcy5zcGVlY2hCdWJibGUudXBkYXRlKHRoaXMueCwgdGhpcy55ICsgMTIpO1xyXG4gICAgICAgIHRoaXMuc291bmRFbWl0dGVyLnVwZGF0ZSgpO1xyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFVQTtBQUNBO0FBSEE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdkVBO0FBREE7QUFDQTtBQUFBO0FBR0E7QUFEQTtBQUNBO0FBQUE7QUFMQTtBQURBO0FBV0E7QUFWQTtBQUFBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/entities/ShadowPresence.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/Shiba.js":
|
|
/*!*******************************!*\
|
|
!*** ./lib/entities/Shiba.js ***!
|
|
\*******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar Shiba_1;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Shiba = exports.ShibaState = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst util_1 = __webpack_require__(/*! ../util */ \"./lib/util.js\");\nconst Conversation_1 = __webpack_require__(/*! ../Conversation */ \"./lib/Conversation.js\");\nconst bird_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../../assets/dialog/bird.dialog.json */ \"./assets/dialog/bird.dialog.json\"));\nconst constants_1 = __webpack_require__(/*! ../constants */ \"./lib/constants.js\");\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst World_1 = __webpack_require__(/*! ../World */ \"./lib/World.js\");\nconst Face_1 = __webpack_require__(/*! ../Face */ \"./lib/Face.js\");\nconst Fire_1 = __webpack_require__(/*! ./Fire */ \"./lib/entities/Fire.js\");\nconst GameScene_1 = __webpack_require__(/*! ../scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst Particles_1 = __webpack_require__(/*! ../Particles */ \"./lib/Particles.js\");\nconst Quests_1 = __webpack_require__(/*! ../Quests */ \"./lib/Quests.js\");\nconst Renderer_1 = __webpack_require__(/*! ../Renderer */ \"./lib/Renderer.js\");\nconst ScriptableNPC_1 = __webpack_require__(/*! ./ScriptableNPC */ \"./lib/entities/ScriptableNPC.js\");\nconst shiba1_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../../assets/dialog/shiba1.dialog.json */ \"./assets/dialog/shiba1.dialog.json\"));\nconst Sound_1 = __webpack_require__(/*! ../Sound */ \"./lib/Sound.js\");\nconst IDLE_DURATION = [2, 3, 4];\nconst WALK_DURATION = [0.5, 1, 1.2, 1.5];\nconst ACCELERATION = 15;\nvar ShibaState;\n(function (ShibaState) {\n ShibaState[ShibaState[\"ON_TREE\"] = 0] = \"ON_TREE\";\n ShibaState[ShibaState[\"FLYING_AWAY\"] = 1] = \"FLYING_AWAY\";\n ShibaState[ShibaState[\"ON_MOUNTAIN\"] = 2] = \"ON_MOUNTAIN\";\n ShibaState[ShibaState[\"GOING_TO_FIRE\"] = 3] = \"GOING_TO_FIRE\";\n ShibaState[ShibaState[\"KILLING_FIRE\"] = 4] = \"KILLING_FIRE\";\n ShibaState[ShibaState[\"FIRE_KILLED\"] = 5] = \"FIRE_KILLED\";\n})(ShibaState = exports.ShibaState || (exports.ShibaState = {}));\nconst FLYING_DURATION = 8;\nconst JUMP_INTERVAL = 0.3;\nconst HEART_PARTICLE_DELAY = 0.5;\nlet Shiba = Shiba_1 = class Shiba extends ScriptableNPC_1.ScriptableNPC {\n constructor(scene, x, y) {\n super(scene, x, y, 28, 24);\n this.state = ShibaState.ON_TREE;\n this.idleTimer = util_1.rndItem(IDLE_DURATION);\n this.walkTimer = null;\n this.autoMoveDirection = 1;\n this.jumpHeight = 1.5;\n this.jumpTimer = 0;\n this.flyingTime = 0;\n this.saidFarewell = false;\n this.peeing = false;\n this.isBeingPetted = false;\n this.nextHeartParticle = HEART_PARTICLE_DELAY;\n this.minAltitude = y;\n this.conversation = new Conversation_1.Conversation(bird_dialog_json_1.default, this);\n this.setMaxVelocity(2);\n this.conversation = new Conversation_1.Conversation(shiba1_dialog_json_1.default, this);\n this.doubleJumpEmitter = this.scene.particles.createEmitter({\n position: { x: this.x, y: this.y },\n velocity: () => ({ x: util_1.rnd(-1, 1) * 90, y: util_1.rnd(-1, 0) * 100 }),\n color: () => util_1.rndItem(constants_1.DOUBLE_JUMP_COLORS),\n size: util_1.rnd(1, 2),\n gravity: { x: 0, y: -120 },\n lifetime: () => util_1.rnd(0.4, 0.6),\n alphaCurve: Particles_1.valueCurves.trapeze(0.05, 0.2)\n });\n this.heartEmitter = this.scene.particles.createEmitter({\n position: { x: this.x, y: this.y },\n offset: () => ({ x: util_1.rnd(-8, 8), y: 18 }),\n velocity: () => ({ x: 0, y: 5 }),\n color: () => Shiba_1.heartImage,\n size: 3,\n gravity: { x: 0, y: 0 },\n lifetime: () => util_1.rnd(1.5, 3),\n blendMode: \"source-over\",\n alphaCurve: Particles_1.valueCurves.cos(0.1, 0.5),\n });\n }\n setState(state) {\n this.state = state;\n }\n getState() {\n return this.state;\n }\n nextState() {\n this.state++;\n if (this.state === ShibaState.FLYING_AWAY) {\n this.lookAtPlayer = false;\n this.scene.player.disableMultiJump();\n this.setMaxVelocity(3);\n }\n else if (this.state === ShibaState.ON_MOUNTAIN) {\n this.move = 0;\n const spawn = this.scene.pointsOfInterest.find(poi => poi.name === \"shiba_mountain_spawn\");\n if (!spawn)\n throw new Error(\"Shiba mountain spawn missing\");\n this.x = spawn.x;\n this.y = spawn.y;\n this.scene.game.campaign.runAction(\"enable\", null, [\"shiba\", \"shiba4\"]);\n this.scene.powerShiba.nextState();\n }\n else if (this.state === ShibaState.GOING_TO_FIRE) {\n this.scene.camera.setCinematicBar(1);\n const shibaSpawnPos = this.scene.pointsOfInterest.find(poi => poi.name === \"friendship_shiba_spawn\");\n this.lookAtPlayer = false;\n this.setMaxVelocity(2);\n this.scene.startFriendshipMusic();\n if (!shibaSpawnPos)\n throw new Error(\"'friendship_shiba_spawn' point in map is missing\");\n this.x = shibaSpawnPos.x;\n this.y = shibaSpawnPos.y;\n }\n else if (this.state === ShibaState.KILLING_FIRE) {\n this.move = 0;\n setTimeout(() => this.think(\"Wow!\", 1500), 500);\n setTimeout(() => (this.direction = 1), 1000);\n setTimeout(() => {\n this.think(\"Bad fire!\", 2000);\n this.scene.fire.setState(Fire_1.FireState.BEING_PUT_OUT);\n this.scene.fire.growthTarget = Fire_1.SHRINK_SIZE;\n this.peeing = true;\n Shiba_1.putOutSound.setVolume(.3);\n Shiba_1.putOutSound.play();\n }, 2000);\n setTimeout(() => this.scene.fire.think(\"Oh God…\", 2000), 4500);\n setTimeout(() => this.scene.fire.think(\"Disgusting…\", 3000), 8000);\n }\n else if (this.state === ShibaState.FIRE_KILLED) {\n this.peeing = false;\n this.scene.fire.state = Fire_1.FireState.PUT_OUT;\n Shiba_1.putOutSound.stop();\n setTimeout(() => (this.direction = -1), 1000);\n setTimeout(() => this.think(\"I help friend!\", 1500), 1500);\n setTimeout(() => {\n var _a;\n this.scene.fire.think(\"Yeah, great.\", 2000);\n (_a = this.scene.fire.face) === null || _a === void 0 ? void 0 : _a.setMode(Face_1.FaceModes.BORED);\n this.scene.player.isControllable = true;\n this.scene.friendshipCutscene = false;\n this.lookAtPlayer = true;\n this.scene.game.campaign.runAction(\"enable\", null, [\"fire\", \"fire4\"]);\n this.scene.game.campaign.runAction(\"enable\", null, [\"shiba\", \"shiba5\"]);\n this.scene.game.campaign.getQuest(Quests_1.QuestKey.B).finish();\n }, 3500);\n }\n }\n jump() {\n this.jumpTimer = JUMP_INTERVAL;\n this.setVelocityY(Math.sqrt(2 * this.jumpHeight * constants_1.GRAVITY));\n this.doubleJumpEmitter.setPosition(this.x, this.y + 20);\n this.doubleJumpEmitter.emit(20);\n const vol = util_1.calculateVolume(this.distanceToPlayer, 0.4);\n if (vol > 0) {\n Shiba_1.jumpSound.setVolume(vol);\n Shiba_1.jumpSound.stop();\n Shiba_1.jumpSound.play();\n }\n }\n canJump() {\n return this.jumpTimer === 0;\n }\n startBeingPetted() {\n this.isBeingPetted = true;\n const x = this.direction > 0 ? this.x + 5 : this.x - 5;\n this.heartEmitter.setPosition(x, this.y);\n }\n stopBeingPetted() {\n this.isBeingPetted = false;\n }\n getAnimationTag() {\n if (this.peeing)\n return \"peeing\";\n if (this.isBeingPetted)\n return \"petted\";\n return \"idle\";\n }\n draw(ctx) {\n if (this.move === 0) {\n this.scene.renderer.addAseprite(Shiba_1.sprite, this.getAnimationTag(), this.x, this.y, Renderer_1.RenderingLayer.ENTITIES, this.direction);\n }\n else {\n this.scene.renderer.addAseprite(Shiba_1.sprite, \"walk\", this.x, this.y, Renderer_1.RenderingLayer.ENTITIES, this.direction);\n }\n if (this.scene.showBounds)\n this.drawBounds();\n if (this.showDialoguePrompt()) {\n this.drawDialoguePrompt();\n }\n if (this.thinkBubble) {\n this.thinkBubble.draw(ctx);\n }\n this.speechBubble.draw(ctx);\n }\n showDialoguePrompt() {\n if (!super.showDialoguePrompt())\n return false;\n return false;\n }\n update(dt) {\n super.update(dt);\n // Heart Emitter\n if (this.isBeingPetted) {\n this.nextHeartParticle -= dt;\n if (this.nextHeartParticle < 0) {\n this.heartEmitter.emit(1);\n this.nextHeartParticle = HEART_PARTICLE_DELAY;\n }\n this.heartEmitter.update(dt);\n }\n // Triggers\n const triggerCollisions = this.scene.world.getTriggerCollisions(this);\n if (this.hasActiveConversation() || this.isBeingPetted) {\n this.move = 0;\n }\n else {\n if (this.state === ShibaState.ON_TREE) {\n this.onTreeUpdateLogic(triggerCollisions, dt);\n }\n else if (this.state === ShibaState.FLYING_AWAY) {\n this.flyingAwayUpdateLogic(dt);\n }\n else if (this.state === ShibaState.GOING_TO_FIRE) {\n this.walkToFireLogic(triggerCollisions);\n }\n }\n if (this.move !== 0) {\n this.direction = this.move;\n this.accelerateX(ACCELERATION * dt * this.move);\n }\n else {\n if (this.getVelocityX() > 0) {\n this.decelerateX(ACCELERATION * dt);\n }\n else {\n this.decelerateX(-ACCELERATION * dt);\n }\n }\n this.dialoguePrompt.update(dt, this.x, this.y + 20);\n this.speechBubble.update(this.x, this.y);\n if (this.thinkBubble) {\n this.thinkBubble.update(this.x, this.y);\n }\n }\n isReadyForConversation() {\n const superResult = super.isReadyForConversation();\n return (superResult && this.state !== ShibaState.FLYING_AWAY && !this.isBeingPetted);\n }\n walkToFireLogic(triggerCollisions) {\n this.move = -1;\n if (this.scene.world.collidesWithVerticalLine(this.x - (this.width / 2), this.y + this.height, this.height, [this], [World_1.Environment.PLATFORM, World_1.Environment.WATER])) {\n this.jump();\n }\n if (triggerCollisions.length > 0) {\n const event = triggerCollisions.find(t => t.name === \"shiba_stop\");\n if (event) {\n this.nextState();\n }\n }\n }\n onTreeUpdateLogic(triggerCollisions, dt) {\n if (triggerCollisions.length > 0) {\n const event = triggerCollisions.find(t => t.name === \"shiba_action\");\n if (event && event.properties.velocity) {\n this.autoMoveDirection = event.properties.velocity > 0 ? 1 : -1;\n this.move = this.autoMoveDirection;\n }\n }\n if (this.idleTimer !== null && this.idleTimer >= 0) {\n this.idleTimer -= dt;\n }\n if (this.walkTimer !== null && this.walkTimer >= 0) {\n this.walkTimer -= dt;\n }\n if (this.idleTimer && this.idleTimer <= 0 && this.walkTimer === null) {\n this.walkTimer = util_1.rndItem(WALK_DURATION);\n this.idleTimer = null;\n this.move = this.autoMoveDirection;\n }\n if (this.walkTimer && this.walkTimer <= 0 && this.idleTimer === null) {\n this.idleTimer = util_1.rndItem(IDLE_DURATION);\n this.walkTimer = null;\n this.move = 0;\n }\n // Check if bone is near\n if (Conversation_1.Conversation.getGlobals()[\"$gotBoneQuest\"]\n && !Conversation_1.Conversation.getGlobals()[\"$broughtBone\"]\n && this.distanceTo(this.scene.bone) < 100) {\n Conversation_1.Conversation.setGlobal(\"broughtBone\", \"true\");\n this.think(\"Wow! Bone!!!\", 2000);\n this.scene.game.campaign.runAction(\"enable\", null, [\"shiba\", \"shiba2\"]);\n }\n }\n flyingAwayUpdateLogic(dt) {\n this.move = 1;\n this.minAltitude += 20 * dt;\n if (this.jumpTimer > 0) {\n this.jumpTimer -= dt;\n if (this.jumpTimer < 0) {\n this.jumpTimer = 0;\n }\n }\n if (this.y < this.minAltitude && this.canJump()) {\n this.jump();\n }\n this.flyingTime += dt;\n if (!this.saidFarewell && this.flyingTime > 2) {\n this.saidFarewell = true;\n this.think(\"See you on the mountain!\", 3000);\n }\n if (this.flyingTime >= FLYING_DURATION) {\n this.nextState();\n }\n }\n};\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/shiba.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], Shiba, \"sprite\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/ending/putout.mp3\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], Shiba, \"putOutSound\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/jumping/jump_neutral.ogg\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], Shiba, \"jumpSound\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/heart.png\"),\n tslib_1.__metadata(\"design:type\", HTMLImageElement)\n], Shiba, \"heartImage\", void 0);\nShiba = Shiba_1 = tslib_1.__decorate([\n Entity_1.entity(\"shiba\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number])\n], Shiba);\nexports.Shiba = Shiba;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvU2hpYmEuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZW50aXRpZXMvU2hpYmEudHM/N2E3MiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc2Vwcml0ZSB9IGZyb20gXCIuLi9Bc2Vwcml0ZVwiO1xyXG5pbXBvcnQgeyBhc3NldCB9IGZyb20gXCIuLi9Bc3NldHNcIjtcclxuaW1wb3J0IHsgY2FsY3VsYXRlVm9sdW1lLCBybmQsIHJuZEl0ZW0gfSBmcm9tIFwiLi4vdXRpbFwiO1xyXG5pbXBvcnQgeyBDb252ZXJzYXRpb24gfSBmcm9tIFwiLi4vQ29udmVyc2F0aW9uXCI7XHJcbmltcG9ydCBjb252ZXJzYXRpb24gZnJvbSBcIi4uLy4uL2Fzc2V0cy9kaWFsb2cvYmlyZC5kaWFsb2cuanNvblwiO1xyXG5pbXBvcnQgeyBET1VCTEVfSlVNUF9DT0xPUlMsIEdSQVZJVFkgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IGVudGl0eSB9IGZyb20gXCIuLi9FbnRpdHlcIjtcclxuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tIFwiLi4vV29ybGRcIjtcclxuaW1wb3J0IHsgRmFjZU1vZGVzIH0gZnJvbSBcIi4uL0ZhY2VcIjtcclxuaW1wb3J0IHsgRmlyZVN0YXRlLCBTSFJJTktfU0laRSB9IGZyb20gXCIuL0ZpcmVcIjtcclxuaW1wb3J0IHsgR2FtZU9iamVjdEluZm8gfSBmcm9tIFwiLi4vTWFwSW5mb1wiO1xyXG5pbXBvcnQgeyBHYW1lU2NlbmUgfSBmcm9tIFwiLi4vc2NlbmVzL0dhbWVTY2VuZVwiO1xyXG5pbXBvcnQgeyBQYXJ0aWNsZUVtaXR0ZXIsIHZhbHVlQ3VydmVzIH0gZnJvbSBcIi4uL1BhcnRpY2xlc1wiO1xyXG5pbXBvcnQgeyBRdWVzdEtleSB9IGZyb20gXCIuLi9RdWVzdHNcIjtcclxuaW1wb3J0IHsgUmVuZGVyaW5nTGF5ZXIgfSBmcm9tIFwiLi4vUmVuZGVyZXJcIjtcclxuaW1wb3J0IHsgU2NyaXB0YWJsZU5QQyB9IGZyb20gXCIuL1NjcmlwdGFibGVOUENcIjtcclxuaW1wb3J0IHNoaWJhMSBmcm9tIFwiLi4vLi4vYXNzZXRzL2RpYWxvZy9zaGliYTEuZGlhbG9nLmpzb25cIjtcclxuaW1wb3J0IHsgU291bmQgfSBmcm9tIFwiLi4vU291bmRcIjtcclxuXHJcbmNvbnN0IElETEVfRFVSQVRJT04gPSBbMiwgMywgNF07XHJcbmNvbnN0IFdBTEtfRFVSQVRJT04gPSBbMC41LCAxLCAxLjIsIDEuNV07XHJcbmNvbnN0IEFDQ0VMRVJBVElPTiA9IDE1O1xyXG5cclxuZXhwb3J0IGVudW0gU2hpYmFTdGF0ZSB7XHJcbiAgICBPTl9UUkVFLFxyXG4gICAgRkxZSU5HX0FXQVksXHJcbiAgICBPTl9NT1VOVEFJTixcclxuICAgIEdPSU5HX1RPX0ZJUkUsXHJcbiAgICBLSUxMSU5HX0ZJUkUsXHJcbiAgICBGSVJFX0tJTExFRFxyXG59XHJcblxyXG5jb25zdCBGTFlJTkdfRFVSQVRJT04gPSA4O1xyXG5jb25zdCBKVU1QX0lOVEVSVkFMID0gMC4zO1xyXG5jb25zdCBIRUFSVF9QQVJUSUNMRV9ERUxBWSA9IDAuNTtcclxuXHJcbkBlbnRpdHkoXCJzaGliYVwiKVxyXG5leHBvcnQgY2xhc3MgU2hpYmEgZXh0ZW5kcyBTY3JpcHRhYmxlTlBDIHtcclxuICAgIEBhc3NldChcInNwcml0ZXMvc2hpYmEuYXNlcHJpdGUuanNvblwiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgc3ByaXRlOiBBc2Vwcml0ZTtcclxuXHJcbiAgICBAYXNzZXQoXCJzb3VuZHMvZW5kaW5nL3B1dG91dC5tcDNcIilcclxuICAgIHByaXZhdGUgc3RhdGljIHB1dE91dFNvdW5kOiBTb3VuZDtcclxuXHJcbiAgICBAYXNzZXQoXCJzb3VuZHMvanVtcGluZy9qdW1wX25ldXRyYWwub2dnXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBqdW1wU291bmQ6IFNvdW5kO1xyXG5cclxuICAgIEBhc3NldChcInNwcml0ZXMvaGVhcnQucG5nXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBoZWFydEltYWdlOiBIVE1MSW1hZ2VFbGVtZW50O1xyXG5cclxuICAgIHByaXZhdGUgc3RhdGUgPSBTaGliYVN0YXRlLk9OX1RSRUU7XHJcbiAgICBwcml2YXRlIGlkbGVUaW1lcjogbnVtYmVyIHwgbnVsbCA9IHJuZEl0ZW0oSURMRV9EVVJBVElPTik7XHJcbiAgICBwcml2YXRlIHdhbGtUaW1lcjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICBwcml2YXRlIGF1dG9Nb3ZlRGlyZWN0aW9uOiAxIHwgLTEgPSAxO1xyXG5cclxuICAgIHByaXZhdGUgZG91YmxlSnVtcEVtaXR0ZXI6IFBhcnRpY2xlRW1pdHRlcjtcclxuICAgIHByaXZhdGUgaGVhcnRFbWl0dGVyOiBQYXJ0aWNsZUVtaXR0ZXI7XHJcbiAgICBwcml2YXRlIG1pbkFsdGl0dWRlOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIGp1bXBIZWlnaHQgPSAxLjU7XHJcbiAgICBwcml2YXRlIGp1bXBUaW1lciA9IDA7XHJcbiAgICBwcml2YXRlIGZseWluZ1RpbWUgPSAwO1xyXG4gICAgcHJpdmF0ZSBzYWlkRmFyZXdlbGwgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBwZWVpbmcgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc0JlaW5nUGV0dGVkID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIG5leHRIZWFydFBhcnRpY2xlID0gSEVBUlRfUEFSVElDTEVfREVMQVk7XHJcblxyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHNjZW5lOiBHYW1lU2NlbmUsIHg6IG51bWJlciwgeTogbnVtYmVyKSB7XHJcbiAgICAgICAgc3VwZXIoc2NlbmUsIHgsIHksIDI4LCAyNCk7XHJcblxyXG4gICAgICAgIHRoaXMubWluQWx0aXR1ZGUgPSB5O1xyXG4gICAgICAgIHRoaXMuY29udmVyc2F0aW9uID0gbmV3IENvbnZlcnNhdGlvbihjb252ZXJzYXRpb24sIHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2V0TWF4VmVsb2NpdHkoMik7XHJcbiAgICAgICAgdGhpcy5jb252ZXJzYXRpb24gPSBuZXcgQ29udmVyc2F0aW9uKHNoaWJhMSwgdGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuZG91YmxlSnVtcEVtaXR0ZXIgPSB0aGlzLnNjZW5lLnBhcnRpY2xlcy5jcmVhdGVFbWl0dGVyKHtcclxuICAgICAgICAgICAgcG9zaXRpb246IHt4OiB0aGlzLngsIHk6IHRoaXMueX0sXHJcbiAgICAgICAgICAgIHZlbG9jaXR5OiAoKSA9PiAoeyB4OiBybmQoLTEsIDEpICogOTAsIHk6IHJuZCgtMSwgMCkgKiAxMDAgfSksXHJcbiAgICAgICAgICAgIGNvbG9yOiAoKSA9PiBybmRJdGVtKERPVUJMRV9KVU1QX0NPTE9SUyksXHJcbiAgICAgICAgICAgIHNpemU6IHJuZCgxLCAyKSxcclxuICAgICAgICAgICAgZ3Jhdml0eToge3g6IDAsIHk6IC0xMjB9LFxyXG4gICAgICAgICAgICBsaWZldGltZTogKCkgPT4gcm5kKDAuNCwgMC42KSxcclxuICAgICAgICAgICAgYWxwaGFDdXJ2ZTogdmFsdWVDdXJ2ZXMudHJhcGV6ZSgwLjA1LCAwLjIpXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuaGVhcnRFbWl0dGVyID0gdGhpcy5zY2VuZS5wYXJ0aWNsZXMuY3JlYXRlRW1pdHRlcih7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7eDogdGhpcy54LCB5OiB0aGlzLnl9LFxyXG4gICAgICAgICAgICBvZmZzZXQ6ICgpID0+ICh7eDogcm5kKC04LCA4KSwgeTogMTh9KSxcclxuICAgICAgICAgICAgdmVsb2NpdHk6ICgpID0+ICh7IHg6IDAsIHk6IDUgfSksXHJcbiAgICAgICAgICAgIGNvbG9yOiAoKSA9PiBTaGliYS5oZWFydEltYWdlLFxyXG4gICAgICAgICAgICBzaXplOiAzLFxyXG4gICAgICAgICAgICBncmF2aXR5OiB7eDogMCwgeTogMH0sXHJcbiAgICAgICAgICAgIGxpZmV0aW1lOiAoKSA9PiBybmQoMS41LCAzKSxcclxuICAgICAgICAgICAgYmxlbmRNb2RlOiBcInNvdXJjZS1vdmVyXCIsXHJcbiAgICAgICAgICAgIGFscGhhQ3VydmU6IHZhbHVlQ3VydmVzLmNvcygwLjEsIDAuNSksXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFN0YXRlKHN0YXRlOiBTaGliYVN0YXRlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTdGF0ZSgpOiBTaGliYVN0YXRlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmV4dFN0YXRlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3RhdGUrKztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFNoaWJhU3RhdGUuRkxZSU5HX0FXQVkpIHtcclxuICAgICAgICAgICAgdGhpcy5sb29rQXRQbGF5ZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zY2VuZS5wbGF5ZXIuZGlzYWJsZU11bHRpSnVtcCgpO1xyXG4gICAgICAgICAgICB0aGlzLnNldE1heFZlbG9jaXR5KDMpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZSA9PT0gU2hpYmFTdGF0ZS5PTl9NT1VOVEFJTikge1xyXG4gICAgICAgICAgICB0aGlzLm1vdmUgPSAwO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc3Bhd24gPSB0aGlzLnNjZW5lLnBvaW50c09mSW50ZXJlc3QuZmluZChcclxuICAgICAgICAgICAgICAgIHBvaSA9PiBwb2kubmFtZSA9PT0gXCJzaGliYV9tb3VudGFpbl9zcGF3blwiXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXNwYXduKSB0aHJvdyBuZXcgRXJyb3IoXCJTaGliYSBtb3VudGFpbiBzcGF3biBtaXNzaW5nXCIpO1xyXG4gICAgICAgICAgICB0aGlzLnggPSBzcGF3bi54O1xyXG4gICAgICAgICAgICB0aGlzLnkgPSBzcGF3bi55O1xyXG4gICAgICAgICAgICB0aGlzLnNjZW5lLmdhbWUuY2FtcGFpZ24ucnVuQWN0aW9uKFwiZW5hYmxlXCIsIG51bGwsIFtcInNoaWJhXCIsIFwic2hpYmE0XCJdKTtcclxuICAgICAgICAgICAgdGhpcy5zY2VuZS5wb3dlclNoaWJhLm5leHRTdGF0ZSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZSA9PT0gU2hpYmFTdGF0ZS5HT0lOR19UT19GSVJFKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuY2FtZXJhLnNldENpbmVtYXRpY0JhcigxKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNoaWJhU3Bhd25Qb3MgPSB0aGlzLnNjZW5lLnBvaW50c09mSW50ZXJlc3QuZmluZChcclxuICAgICAgICAgICAgICAgIHBvaSA9PiBwb2kubmFtZSA9PT0gXCJmcmllbmRzaGlwX3NoaWJhX3NwYXduXCJcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubG9va0F0UGxheWVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0TWF4VmVsb2NpdHkoMik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNjZW5lLnN0YXJ0RnJpZW5kc2hpcE11c2ljKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXNoaWJhU3Bhd25Qb3MpIHRocm93IG5ldyBFcnJvcihcIidmcmllbmRzaGlwX3NoaWJhX3NwYXduJyBwb2ludCBpbiBtYXAgaXMgbWlzc2luZ1wiKTtcclxuICAgICAgICAgICAgdGhpcy54ID0gc2hpYmFTcGF3blBvcy54O1xyXG4gICAgICAgICAgICB0aGlzLnkgPSBzaGliYVNwYXduUG9zLnk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlID09PSBTaGliYVN0YXRlLktJTExJTkdfRklSRSkge1xyXG4gICAgICAgICAgICB0aGlzLm1vdmUgPSAwO1xyXG5cclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnRoaW5rKFwiV293IVwiLCAxNTAwKSwgNTAwKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiAodGhpcy5kaXJlY3Rpb24gPSAxKSwgMTAwMCk7XHJcblxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGhpbmsoXCJCYWQgZmlyZSFcIiwgMjAwMCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLmZpcmUuc2V0U3RhdGUoRmlyZVN0YXRlLkJFSU5HX1BVVF9PVVQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5maXJlLmdyb3d0aFRhcmdldCA9IFNIUklOS19TSVpFO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wZWVpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgU2hpYmEucHV0T3V0U291bmQuc2V0Vm9sdW1lKC4zKTtcclxuICAgICAgICAgICAgICAgIFNoaWJhLnB1dE91dFNvdW5kLnBsYXkoKTtcclxuICAgICAgICAgICAgfSwgMjAwMCk7XHJcblxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2NlbmUuZmlyZS50aGluayhcIk9oIEdvZOKAplwiLCAyMDAwKSwgNDUwMCk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zY2VuZS5maXJlLnRoaW5rKFwiRGlzZ3VzdGluZ+KAplwiLCAzMDAwKSwgODAwMCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlID09PSBTaGliYVN0YXRlLkZJUkVfS0lMTEVEKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGVlaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuZmlyZS5zdGF0ZSA9IEZpcmVTdGF0ZS5QVVRfT1VUO1xyXG4gICAgICAgICAgICBTaGliYS5wdXRPdXRTb3VuZC5zdG9wKCk7XHJcblxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+ICh0aGlzLmRpcmVjdGlvbiA9IC0xKSwgMTAwMCk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy50aGluayhcIkkgaGVscCBmcmllbmQhXCIsIDE1MDApLCAxNTAwKTtcclxuXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5maXJlLnRoaW5rKFwiWWVhaCwgZ3JlYXQuXCIsIDIwMDApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5maXJlLmZhY2U/LnNldE1vZGUoRmFjZU1vZGVzLkJPUkVEKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUucGxheWVyLmlzQ29udHJvbGxhYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUuZnJpZW5kc2hpcEN1dHNjZW5lID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvb2tBdFBsYXllciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLmdhbWUuY2FtcGFpZ24ucnVuQWN0aW9uKFwiZW5hYmxlXCIsIG51bGwsIFtcImZpcmVcIiwgXCJmaXJlNFwiXSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLmdhbWUuY2FtcGFpZ24ucnVuQWN0aW9uKFwiZW5hYmxlXCIsIG51bGwsIFtcInNoaWJhXCIsIFwic2hpYmE1XCJdKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUuZ2FtZS5jYW1wYWlnbi5nZXRRdWVzdChRdWVzdEtleS5CKS5maW5pc2goKTtcclxuICAgICAgICAgICAgfSwgMzUwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBqdW1wKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuanVtcFRpbWVyID0gSlVNUF9JTlRFUlZBTDtcclxuICAgICAgICB0aGlzLnNldFZlbG9jaXR5WShNYXRoLnNxcnQoMiAqIHRoaXMuanVtcEhlaWdodCAqIEdSQVZJVFkpKTtcclxuICAgICAgICB0aGlzLmRvdWJsZUp1bXBFbWl0dGVyLnNldFBvc2l0aW9uKHRoaXMueCwgdGhpcy55ICsgMjApO1xyXG4gICAgICAgIHRoaXMuZG91YmxlSnVtcEVtaXR0ZXIuZW1pdCgyMCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHZvbCA9IGNhbGN1bGF0ZVZvbHVtZSh0aGlzLmRpc3RhbmNlVG9QbGF5ZXIsIDAuNCk7XHJcblxyXG4gICAgICAgIGlmICh2b2wgPiAwKSB7XHJcbiAgICAgICAgICAgIFNoaWJhLmp1bXBTb3VuZC5zZXRWb2x1bWUodm9sKTtcclxuICAgICAgICAgICAgU2hpYmEuanVtcFNvdW5kLnN0b3AoKTtcclxuICAgICAgICAgICAgU2hpYmEuanVtcFNvdW5kLnBsYXkoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGNhbkp1bXAoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuanVtcFRpbWVyID09PSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydEJlaW5nUGV0dGVkICgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzQmVpbmdQZXR0ZWQgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IHggPSB0aGlzLmRpcmVjdGlvbiA+IDAgPyB0aGlzLnggKyA1IDogdGhpcy54IC0gNTtcclxuICAgICAgICB0aGlzLmhlYXJ0RW1pdHRlci5zZXRQb3NpdGlvbih4LCB0aGlzLnkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdG9wQmVpbmdQZXR0ZWQgKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNCZWluZ1BldHRlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBbmltYXRpb25UYWcgKCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMucGVlaW5nKSByZXR1cm4gXCJwZWVpbmdcIjtcclxuICAgICAgICBpZiAodGhpcy5pc0JlaW5nUGV0dGVkKSByZXR1cm4gXCJwZXR0ZWRcIjtcclxuICAgICAgICByZXR1cm4gXCJpZGxlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRyYXcoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5tb3ZlID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUucmVuZGVyZXIuYWRkQXNlcHJpdGUoXHJcbiAgICAgICAgICAgICAgICBTaGliYS5zcHJpdGUsIHRoaXMuZ2V0QW5pbWF0aW9uVGFnKCksIHRoaXMueCwgdGhpcy55LCBSZW5kZXJpbmdMYXllci5FTlRJVElFUywgdGhpcy5kaXJlY3Rpb25cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjZW5lLnJlbmRlcmVyLmFkZEFzZXByaXRlKFxyXG4gICAgICAgICAgICAgICAgU2hpYmEuc3ByaXRlLCBcIndhbGtcIiwgdGhpcy54LCB0aGlzLnksIFJlbmRlcmluZ0xheWVyLkVOVElUSUVTLCB0aGlzLmRpcmVjdGlvblxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmUuc2hvd0JvdW5kcykgdGhpcy5kcmF3Qm91bmRzKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNob3dEaWFsb2d1ZVByb21wdCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhd0RpYWxvZ3VlUHJvbXB0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy50aGlua0J1YmJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRoaW5rQnViYmxlLmRyYXcoY3R4KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3BlZWNoQnViYmxlLmRyYXcoY3R4KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0RpYWxvZ3VlUHJvbXB0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghc3VwZXIuc2hvd0RpYWxvZ3VlUHJvbXB0KCkpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGUoZHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLnVwZGF0ZShkdCk7XHJcblxyXG4gICAgICAgIC8vIEhlYXJ0IEVtaXR0ZXJcclxuICAgICAgICBpZiAodGhpcy5pc0JlaW5nUGV0dGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmV4dEhlYXJ0UGFydGljbGUgLT0gZHQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5uZXh0SGVhcnRQYXJ0aWNsZSA8IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGVhcnRFbWl0dGVyLmVtaXQoMSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5leHRIZWFydFBhcnRpY2xlID0gSEVBUlRfUEFSVElDTEVfREVMQVk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5oZWFydEVtaXR0ZXIudXBkYXRlKGR0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFRyaWdnZXJzXHJcbiAgICAgICAgY29uc3QgdHJpZ2dlckNvbGxpc2lvbnMgPSB0aGlzLnNjZW5lLndvcmxkLmdldFRyaWdnZXJDb2xsaXNpb25zKHRoaXMpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5oYXNBY3RpdmVDb252ZXJzYXRpb24oKSB8fCB0aGlzLmlzQmVpbmdQZXR0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5tb3ZlID0gMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gU2hpYmFTdGF0ZS5PTl9UUkVFKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uVHJlZVVwZGF0ZUxvZ2ljKHRyaWdnZXJDb2xsaXNpb25zLCBkdCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZSA9PT0gU2hpYmFTdGF0ZS5GTFlJTkdfQVdBWSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mbHlpbmdBd2F5VXBkYXRlTG9naWMoZHQpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUgPT09IFNoaWJhU3RhdGUuR09JTkdfVE9fRklSRSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy53YWxrVG9GaXJlTG9naWModHJpZ2dlckNvbGxpc2lvbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5tb3ZlICE9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uID0gdGhpcy5tb3ZlO1xyXG4gICAgICAgICAgICB0aGlzLmFjY2VsZXJhdGVYKEFDQ0VMRVJBVElPTiAqIGR0ICogdGhpcy5tb3ZlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5nZXRWZWxvY2l0eVgoKSA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVjZWxlcmF0ZVgoQUNDRUxFUkFUSU9OICogZHQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWNlbGVyYXRlWCgtQUNDRUxFUkFUSU9OICogZHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRpYWxvZ3VlUHJvbXB0LnVwZGF0ZShkdCwgdGhpcy54LCB0aGlzLnkgKyAyMCk7XHJcbiAgICAgICAgdGhpcy5zcGVlY2hCdWJibGUudXBkYXRlKHRoaXMueCwgdGhpcy55KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGhpbmtCdWJibGUpIHtcclxuICAgICAgICAgICAgdGhpcy50aGlua0J1YmJsZS51cGRhdGUodGhpcy54LCB0aGlzLnkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNSZWFkeUZvckNvbnZlcnNhdGlvbigpOiBib29sZWFuIHwgbnVsbCB7XHJcbiAgICAgICAgY29uc3Qgc3VwZXJSZXN1bHQgPSBzdXBlci5pc1JlYWR5Rm9yQ29udmVyc2F0aW9uKCk7XHJcbiAgICAgICAgcmV0dXJuIChzdXBlclJlc3VsdCAmJiB0aGlzLnN0YXRlICE9PSBTaGliYVN0YXRlLkZMWUlOR19BV0FZICYmICF0aGlzLmlzQmVpbmdQZXR0ZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgd2Fsa1RvRmlyZUxvZ2ljKHRyaWdnZXJDb2xsaXNpb25zOiBHYW1lT2JqZWN0SW5mb1tdKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tb3ZlID0gLTE7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5zY2VuZS53b3JsZC5jb2xsaWRlc1dpdGhWZXJ0aWNhbExpbmUoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnggLSAodGhpcy53aWR0aCAvIDIpLCB0aGlzLnkgKyB0aGlzLmhlaWdodCxcclxuICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgWyB0aGlzIF0sXHJcbiAgICAgICAgICAgICAgICBbIEVudmlyb25tZW50LlBMQVRGT1JNLCBFbnZpcm9ubWVudC5XQVRFUiBdXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5qdW1wKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHJpZ2dlckNvbGxpc2lvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBldmVudCA9IHRyaWdnZXJDb2xsaXNpb25zLmZpbmQodCA9PiB0Lm5hbWUgPT09IFwic2hpYmFfc3RvcFwiKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0U3RhdGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uVHJlZVVwZGF0ZUxvZ2ljKHRyaWdnZXJDb2xsaXNpb25zOiBHYW1lT2JqZWN0SW5mb1tdLCBkdDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRyaWdnZXJDb2xsaXNpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSB0cmlnZ2VyQ29sbGlzaW9ucy5maW5kKHQgPT4gdC5uYW1lID09PSBcInNoaWJhX2FjdGlvblwiKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChldmVudCAmJiBldmVudC5wcm9wZXJ0aWVzLnZlbG9jaXR5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9Nb3ZlRGlyZWN0aW9uID0gZXZlbnQucHJvcGVydGllcy52ZWxvY2l0eSA+IDAgPyAxIDogLTE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmUgPSB0aGlzLmF1dG9Nb3ZlRGlyZWN0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pZGxlVGltZXIgIT09IG51bGwgJiYgdGhpcy5pZGxlVGltZXIgPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmlkbGVUaW1lciAtPSBkdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLndhbGtUaW1lciAhPT0gbnVsbCAmJiB0aGlzLndhbGtUaW1lciA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMud2Fsa1RpbWVyIC09IGR0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaWRsZVRpbWVyICYmIHRoaXMuaWRsZVRpbWVyIDw9IDAgJiYgdGhpcy53YWxrVGltZXIgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy53YWxrVGltZXIgPSBybmRJdGVtKFdBTEtfRFVSQVRJT04pO1xyXG4gICAgICAgICAgICB0aGlzLmlkbGVUaW1lciA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMubW92ZSA9IHRoaXMuYXV0b01vdmVEaXJlY3Rpb247XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy53YWxrVGltZXIgJiYgdGhpcy53YWxrVGltZXIgPD0gMCAmJiB0aGlzLmlkbGVUaW1lciA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmlkbGVUaW1lciA9IHJuZEl0ZW0oSURMRV9EVVJBVElPTik7XHJcbiAgICAgICAgICAgIHRoaXMud2Fsa1RpbWVyID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5tb3ZlID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGlmIGJvbmUgaXMgbmVhclxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgQ29udmVyc2F0aW9uLmdldEdsb2JhbHMoKVtcIiRnb3RCb25lUXVlc3RcIl1cclxuICAgICAgICAgICAgJiYgIUNvbnZlcnNhdGlvbi5nZXRHbG9iYWxzKClbXCIkYnJvdWdodEJvbmVcIl1cclxuICAgICAgICAgICAgJiYgdGhpcy5kaXN0YW5jZVRvKHRoaXMuc2NlbmUuYm9uZSkgPCAxMDBcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgQ29udmVyc2F0aW9uLnNldEdsb2JhbChcImJyb3VnaHRCb25lXCIsIFwidHJ1ZVwiKTtcclxuICAgICAgICAgICAgdGhpcy50aGluayhcIldvdyEgQm9uZSEhIVwiLCAyMDAwKTtcclxuICAgICAgICAgICAgdGhpcy5zY2VuZS5nYW1lLmNhbXBhaWduLnJ1bkFjdGlvbihcImVuYWJsZVwiLCBudWxsLCBbXCJzaGliYVwiLCBcInNoaWJhMlwiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmx5aW5nQXdheVVwZGF0ZUxvZ2ljKGR0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm1vdmUgPSAxO1xyXG4gICAgICAgIHRoaXMubWluQWx0aXR1ZGUgKz0gMjAgKiBkdDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuanVtcFRpbWVyID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmp1bXBUaW1lciAtPSBkdDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuanVtcFRpbWVyIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5qdW1wVGltZXIgPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy55IDwgdGhpcy5taW5BbHRpdHVkZSAmJiB0aGlzLmNhbkp1bXAoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmp1bXAoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmx5aW5nVGltZSArPSBkdDtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnNhaWRGYXJld2VsbCAmJiB0aGlzLmZseWluZ1RpbWUgPiAyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2FpZEZhcmV3ZWxsID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy50aGluayhcIlNlZSB5b3Ugb24gdGhlIG1vdW50YWluIVwiLCAzMDAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmZseWluZ1RpbWUgPj0gRkxZSU5HX0RVUkFUSU9OKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmV4dFN0YXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUE2QkE7QUFDQTtBQWpCQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUlBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUVBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUFBO0FBQ0E7QUFHQTtBQUVBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBUUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUEzVkE7QUFEQTtBQUNBO0FBQUE7QUFHQTtBQURBO0FBQ0E7QUFBQTtBQUdBO0FBREE7QUFDQTtBQUFBO0FBR0E7QUFEQTtBQUNBO0FBQUE7QUFYQTtBQURBO0FBOEJBO0FBN0JBO0FBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/entities/Shiba.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/Sign.js":
|
|
/*!******************************!*\
|
|
!*** ./lib/entities/Sign.js ***!
|
|
\******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar Sign_1;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Sign = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst Conversation_1 = __webpack_require__(/*! ../Conversation */ \"./lib/Conversation.js\");\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst GameScene_1 = __webpack_require__(/*! ../scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst NPC_1 = __webpack_require__(/*! ./NPC */ \"./lib/entities/NPC.js\");\nconst Renderer_1 = __webpack_require__(/*! ../Renderer */ \"./lib/Renderer.js\");\nlet Sign = Sign_1 = class Sign extends NPC_1.NPC {\n constructor(scene, x, y, properties) {\n super(scene, x, y, 16, 16);\n this.conversation = this.generateConversation(this.prepareContent(properties.content));\n }\n prepareContent(content) {\n if (!content) {\n return [\"The sign is empty.\"];\n }\n return content.split(\":::\");\n }\n getInteractionText() {\n return \"Read sign\";\n }\n generateConversation(lines) {\n const json = { \"entry\": [] };\n lines.forEach((line, index) => {\n if (index === lines.length - 1) {\n line += \" @entry !end\";\n }\n json.entry.push(line);\n });\n return new Conversation_1.Conversation(json, this);\n }\n draw(ctx) {\n this.scene.renderer.add({\n type: Renderer_1.RenderingType.ASEPRITE,\n layer: Renderer_1.RenderingLayer.ENTITIES,\n translation: { x: this.x, y: -this.y },\n position: {\n x: -Sign_1.sprite.width >> 1,\n y: -Sign_1.sprite.height\n },\n asset: Sign_1.sprite,\n animationTag: \"idle\",\n time: this.scene.gameTime * 1000\n });\n if (this.scene.showBounds) {\n this.drawBounds();\n }\n this.speechBubble.draw(ctx);\n }\n update() { }\n};\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/sign.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], Sign, \"sprite\", void 0);\nSign = Sign_1 = tslib_1.__decorate([\n Entity_1.entity(\"sign\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number, Object])\n], Sign);\nexports.Sign = Sign;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvU2lnbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9lbnRpdGllcy9TaWduLnRzP2Y0ZjMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNlcHJpdGUgfSBmcm9tIFwiLi4vQXNlcHJpdGVcIjtcclxuaW1wb3J0IHsgYXNzZXQgfSBmcm9tIFwiLi4vQXNzZXRzXCI7XHJcbmltcG9ydCB7IENvbnZlcnNhdGlvbiB9IGZyb20gXCIuLi9Db252ZXJzYXRpb25cIjtcclxuaW1wb3J0IHsgZW50aXR5IH0gZnJvbSBcIi4uL0VudGl0eVwiO1xyXG5pbXBvcnQgeyBHYW1lT2JqZWN0UHJvcGVydGllcyB9IGZyb20gXCIuLi9NYXBJbmZvXCI7XHJcbmltcG9ydCB7IEdhbWVTY2VuZSB9IGZyb20gXCIuLi9zY2VuZXMvR2FtZVNjZW5lXCI7XHJcbmltcG9ydCB7IE5QQyB9IGZyb20gXCIuL05QQ1wiO1xyXG5pbXBvcnQgeyBSZW5kZXJpbmdMYXllciwgUmVuZGVyaW5nVHlwZSB9IGZyb20gXCIuLi9SZW5kZXJlclwiO1xyXG5cclxuQGVudGl0eShcInNpZ25cIilcclxuZXhwb3J0IGNsYXNzIFNpZ24gZXh0ZW5kcyBOUEMge1xyXG4gICAgQGFzc2V0KFwic3ByaXRlcy9zaWduLmFzZXByaXRlLmpzb25cIilcclxuICAgIHByaXZhdGUgc3RhdGljIHNwcml0ZTogQXNlcHJpdGU7XHJcbiAgICBwdWJsaWMgY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb247XHJcblxyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHNjZW5lOiBHYW1lU2NlbmUsIHg6IG51bWJlciwgeTogbnVtYmVyLCBwcm9wZXJ0aWVzOiBHYW1lT2JqZWN0UHJvcGVydGllcykge1xyXG4gICAgICAgIHN1cGVyKHNjZW5lLCB4LCB5LCAxNiwgMTYpO1xyXG4gICAgICAgIHRoaXMuY29udmVyc2F0aW9uID0gdGhpcy5nZW5lcmF0ZUNvbnZlcnNhdGlvbih0aGlzLnByZXBhcmVDb250ZW50KHByb3BlcnRpZXMuY29udGVudCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHJlcGFyZUNvbnRlbnQoY29udGVudD86IHN0cmluZyApOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgaWYgKCFjb250ZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXCJUaGUgc2lnbiBpcyBlbXB0eS5cIl07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY29udGVudC5zcGxpdChcIjo6OlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SW50ZXJhY3Rpb25UZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwiUmVhZCBzaWduXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUNvbnZlcnNhdGlvbihsaW5lczogc3RyaW5nW10pOiBDb252ZXJzYXRpb24ge1xyXG4gICAgICAgIGNvbnN0IGpzb246IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHsgXCJlbnRyeVwiOiBbXSB9O1xyXG5cclxuICAgICAgICBsaW5lcy5mb3JFYWNoKChsaW5lLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IGxpbmVzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIGxpbmUgKz0gXCIgQGVudHJ5ICFlbmRcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBqc29uLmVudHJ5LnB1c2gobGluZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgQ29udmVyc2F0aW9uKGpzb24sIHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkcmF3KGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zY2VuZS5yZW5kZXJlci5hZGQoe1xyXG4gICAgICAgICAgICB0eXBlOiBSZW5kZXJpbmdUeXBlLkFTRVBSSVRFLFxyXG4gICAgICAgICAgICBsYXllcjogUmVuZGVyaW5nTGF5ZXIuRU5USVRJRVMsXHJcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uOiB7IHg6IHRoaXMueCwgeTogLXRoaXMueSB9LFxyXG4gICAgICAgICAgICBwb3NpdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgeDogLVNpZ24uc3ByaXRlLndpZHRoID4+IDEsXHJcbiAgICAgICAgICAgICAgICB5OiAtU2lnbi5zcHJpdGUuaGVpZ2h0XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFzc2V0OiBTaWduLnNwcml0ZSxcclxuICAgICAgICAgICAgYW5pbWF0aW9uVGFnOiBcImlkbGVcIixcclxuICAgICAgICAgICAgdGltZTogdGhpcy5zY2VuZS5nYW1lVGltZSAqIDEwMDBcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmUuc2hvd0JvdW5kcykge1xyXG4gICAgICAgICAgICB0aGlzLmRyYXdCb3VuZHMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3BlZWNoQnViYmxlLmRyYXcoY3R4KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlKCk6IHZvaWQge31cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBdkRBO0FBREE7QUFDQTtBQUFBO0FBRkE7QUFEQTtBQU1BO0FBTEE7QUFBQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/entities/Sign.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/Skull.js":
|
|
/*!*******************************!*\
|
|
!*** ./lib/entities/Skull.js ***!
|
|
\*******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar Skull_1;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Skull = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst GameScene_1 = __webpack_require__(/*! ../scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst PhysicsEntity_1 = __webpack_require__(/*! ./PhysicsEntity */ \"./lib/entities/PhysicsEntity.js\");\nconst Renderer_1 = __webpack_require__(/*! ../Renderer */ \"./lib/Renderer.js\");\nlet Skull = Skull_1 = class Skull extends PhysicsEntity_1.PhysicsEntity {\n constructor(scene, x, y) {\n super(scene, x, y, 16, 16);\n }\n draw() {\n this.scene.renderer.addAseprite(Skull_1.sprite, \"idle\", this.x, this.y, Renderer_1.RenderingLayer.ENTITIES);\n if (this.scene.showBounds) {\n this.drawBounds();\n }\n }\n isCarried() {\n return this.scene.player.isCarrying(this);\n }\n update(dt) {\n super.update(dt);\n const player = this.scene.player;\n if (!this.isCarried() && this.distanceTo(player) < 20) {\n player.carry(this);\n }\n }\n};\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/skull.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], Skull, \"sprite\", void 0);\nSkull = Skull_1 = tslib_1.__decorate([\n Entity_1.entity(\"skull\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number])\n], Skull);\nexports.Skull = Skull;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvU2t1bGwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZW50aXRpZXMvU2t1bGwudHM/ODI0YyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc2Vwcml0ZSB9IGZyb20gXCIuLi9Bc2Vwcml0ZVwiO1xyXG5pbXBvcnQgeyBhc3NldCB9IGZyb20gXCIuLi9Bc3NldHNcIjtcclxuaW1wb3J0IHsgZW50aXR5IH0gZnJvbSBcIi4uL0VudGl0eVwiO1xyXG5pbXBvcnQgeyBHYW1lU2NlbmUgfSBmcm9tIFwiLi4vc2NlbmVzL0dhbWVTY2VuZVwiO1xyXG5pbXBvcnQgeyBQaHlzaWNzRW50aXR5IH0gZnJvbSBcIi4vUGh5c2ljc0VudGl0eVwiO1xyXG5pbXBvcnQgeyBSZW5kZXJpbmdMYXllciB9IGZyb20gXCIuLi9SZW5kZXJlclwiO1xyXG5cclxuQGVudGl0eShcInNrdWxsXCIpXHJcbmV4cG9ydCBjbGFzcyBTa3VsbCBleHRlbmRzIFBoeXNpY3NFbnRpdHkge1xyXG4gICAgQGFzc2V0KFwic3ByaXRlcy9za3VsbC5hc2Vwcml0ZS5qc29uXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBzcHJpdGU6IEFzZXByaXRlO1xyXG5cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihzY2VuZTogR2FtZVNjZW5lLCB4OiBudW1iZXIsIHk6IG51bWJlcikge1xyXG4gICAgICAgIHN1cGVyKHNjZW5lLCB4LCB5LCAxNiwgMTYpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkcmF3KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2NlbmUucmVuZGVyZXIuYWRkQXNlcHJpdGUoU2t1bGwuc3ByaXRlLCBcImlkbGVcIiwgdGhpcy54LCB0aGlzLnksIFJlbmRlcmluZ0xheWVyLkVOVElUSUVTKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmUuc2hvd0JvdW5kcykge1xyXG4gICAgICAgICAgICB0aGlzLmRyYXdCb3VuZHMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzQ2FycmllZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zY2VuZS5wbGF5ZXIuaXNDYXJyeWluZyh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlKGR0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci51cGRhdGUoZHQpO1xyXG5cclxuICAgICAgICBjb25zdCBwbGF5ZXIgPSB0aGlzLnNjZW5lLnBsYXllcjtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzQ2FycmllZCgpICYmIHRoaXMuZGlzdGFuY2VUbyhwbGF5ZXIpIDwgMjApIHtcclxuICAgICAgICAgICAgcGxheWVyLmNhcnJ5KHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFJQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBM0JBO0FBREE7QUFDQTtBQUFBO0FBRkE7QUFEQTtBQUtBO0FBSkE7QUFBQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/entities/Skull.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/Snowball.js":
|
|
/*!**********************************!*\
|
|
!*** ./lib/entities/Snowball.js ***!
|
|
\**********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Snowball = void 0;\nconst PhysicsEntity_1 = __webpack_require__(/*! ./PhysicsEntity */ \"./lib/entities/PhysicsEntity.js\");\nconst constants_1 = __webpack_require__(/*! ../constants */ \"./lib/constants.js\");\nclass Snowball extends PhysicsEntity_1.PhysicsEntity {\n constructor(scene, x, y, velocityX, velocityY) {\n super(scene, x, y, 0.25 * constants_1.PIXEL_PER_METER, 0.25 * constants_1.PIXEL_PER_METER);\n this.setVelocity(velocityX, velocityY);\n }\n draw(ctx) {\n ctx.save();\n ctx.beginPath();\n ctx.translate(this.x, -this.y);\n ctx.strokeStyle = \"black\";\n ctx.fillStyle = \"white\";\n ctx.beginPath();\n ctx.arc(0, -this.height / 2, this.width / 2, 0, Math.PI * 2, false);\n ctx.fill();\n ctx.stroke();\n ctx.restore();\n }\n}\nexports.Snowball = Snowball;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvU25vd2JhbGwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZW50aXRpZXMvU25vd2JhbGwudHM/ZDQzOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHYW1lU2NlbmUgfSBmcm9tIFwiLi4vc2NlbmVzL0dhbWVTY2VuZVwiO1xyXG5pbXBvcnQgeyBQaHlzaWNzRW50aXR5IH0gZnJvbSBcIi4vUGh5c2ljc0VudGl0eVwiO1xyXG5pbXBvcnQgeyBQSVhFTF9QRVJfTUVURVIgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU25vd2JhbGwgZXh0ZW5kcyBQaHlzaWNzRW50aXR5IHtcclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihzY2VuZTogR2FtZVNjZW5lLCB4OiBudW1iZXIsIHk6IG51bWJlciwgdmVsb2NpdHlYOiBudW1iZXIsIHZlbG9jaXR5WTogbnVtYmVyKSB7XHJcbiAgICAgICAgc3VwZXIoc2NlbmUsIHgsIHksIDAuMjUgKiBQSVhFTF9QRVJfTUVURVIsIDAuMjUgKiBQSVhFTF9QRVJfTUVURVIpO1xyXG5cclxuICAgICAgICB0aGlzLnNldFZlbG9jaXR5KHZlbG9jaXR5WCwgdmVsb2NpdHlZKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZHJhdyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6IHZvaWQge1xyXG4gICAgICAgIGN0eC5zYXZlKCk7XHJcbiAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xyXG4gICAgICAgIGN0eC50cmFuc2xhdGUodGhpcy54LCAtdGhpcy55KTtcclxuICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBcImJsYWNrXCI7XHJcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IFwid2hpdGVcIjtcclxuICAgICAgICBjdHguYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgY3R4LmFyYygwLCAtdGhpcy5oZWlnaHQgLyAyLCB0aGlzLndpZHRoIC8gMiwgMCwgTWF0aC5QSSAqIDIsIGZhbHNlKTtcclxuICAgICAgICBjdHguZmlsbCgpO1xyXG4gICAgICAgIGN0eC5zdHJva2UoKTtcclxuICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW5CQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/entities/Snowball.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/Stone.js":
|
|
/*!*******************************!*\
|
|
!*** ./lib/entities/Stone.js ***!
|
|
\*******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar Stone_1;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Stone = exports.StoneState = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst GameScene_1 = __webpack_require__(/*! ../scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst World_1 = __webpack_require__(/*! ../World */ \"./lib/World.js\");\nconst Face_1 = __webpack_require__(/*! ../Face */ \"./lib/Face.js\");\nconst util_1 = __webpack_require__(/*! ../util */ \"./lib/util.js\");\nconst NPC_1 = __webpack_require__(/*! ./NPC */ \"./lib/entities/NPC.js\");\nconst Quests_1 = __webpack_require__(/*! ../Quests */ \"./lib/Quests.js\");\nconst Renderer_1 = __webpack_require__(/*! ../Renderer */ \"./lib/Renderer.js\");\nconst Sound_1 = __webpack_require__(/*! ../Sound */ \"./lib/Sound.js\");\nvar StoneState;\n(function (StoneState) {\n StoneState[StoneState[\"DEFAULT\"] = 0] = \"DEFAULT\";\n StoneState[StoneState[\"SWIMMING\"] = 1] = \"SWIMMING\";\n StoneState[StoneState[\"FLOATING\"] = 2] = \"FLOATING\";\n})(StoneState = exports.StoneState || (exports.StoneState = {}));\nlet Stone = Stone_1 = class Stone extends NPC_1.NPC {\n constructor(scene, x, y) {\n super(scene, x, y, 26, 50);\n this.state = StoneState.DEFAULT;\n this.direction = -1;\n this.face = new Face_1.Face(scene, this, Face_1.EyeType.STONE, 0, 21);\n this.lookAtPlayer = false;\n this.carryHeight = 16;\n const floatingPosition = this.scene.pointsOfInterest.find(poi => poi.name === \"stone_floating_position\");\n if (!floatingPosition) {\n throw new Error(\"Could not find \\\"stone_floating_position\\\" point of interest in game scene\");\n }\n this.floatingPosition = floatingPosition;\n }\n showDialoguePrompt() {\n if (!super.showDialoguePrompt()) {\n return false;\n }\n return (this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).getHighestTriggerIndex() >= Quests_1.QuestATrigger.PLANTED_SEED &&\n this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).getHighestTriggerIndex() < Quests_1.QuestATrigger.GOT_STONE);\n }\n draw(ctx) {\n this.scene.renderer.addAseprite(Stone_1.sprite, \"idle\", this.x, this.y - 1, Renderer_1.RenderingLayer.ENTITIES, this.direction);\n if (this.scene.showBounds) {\n this.drawBounds();\n }\n this.drawFace(ctx, false);\n if (this.showDialoguePrompt()) {\n this.drawDialoguePrompt();\n }\n this.speechBubble.draw(ctx);\n }\n update(dt) {\n super.update(dt);\n if (this.state === StoneState.DEFAULT) {\n if (this.scene.world.collidesWith(this.x, this.y - 5) === World_1.Environment.WATER) {\n this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).trigger(Quests_1.QuestATrigger.THROWN_STONE_INTO_WATER);\n this.state = StoneState.SWIMMING;\n this.setVelocity(0, 0);\n this.setFloating(true);\n this.y = this.floatingPosition.y;\n Stone_1.successSound.play();\n this.scene.game.campaign.runAction(\"enable\", null, [\"stone\", \"stone2\"]);\n this.scene.game.campaign.runAction(\"enable\", null, [\"flameboy\", \"flameboy2\"]);\n this.scene.game.campaign.runAction(\"enable\", null, [\"caveman\", \"caveman2\"]);\n }\n }\n else if (this.state === StoneState.SWIMMING) {\n const diffX = this.floatingPosition.x - this.x;\n this.direction = Math.sign(diffX);\n const moveX = Math.min(20, Math.abs(diffX)) * Math.sign(diffX);\n this.x += moveX * dt;\n if (Math.abs(moveX) < 2) {\n this.state = StoneState.FLOATING;\n }\n this.setVelocityY(Math.abs(((util_1.now() % 2000) - 1000) / 1000) - 0.5);\n }\n else if (this.state === StoneState.FLOATING) {\n this.x = this.floatingPosition.x;\n this.direction = -1;\n this.setVelocityY(Math.abs(((util_1.now() % 2000) - 1000) / 1000) - 0.5);\n }\n this.dialoguePrompt.update(dt, this.x, this.y + 48);\n this.speechBubble.update(this.x, this.y);\n }\n collidesWith(x, y) {\n if (this.state === StoneState.FLOATING || this.state === StoneState.SWIMMING) {\n if (x >= this.x - this.width / 2\n && x <= this.x + this.width / 2\n && y >= this.y\n && y <= this.y + this.height) {\n return World_1.Environment.SOLID;\n }\n }\n return World_1.Environment.AIR;\n }\n isCarried() {\n return this.scene.player.isCarrying(this);\n }\n pickUp() {\n var _a;\n (_a = this.face) === null || _a === void 0 ? void 0 : _a.setMode(Face_1.FaceModes.AMUSED);\n this.scene.player.carry(this);\n this.scene.game.campaign.runAction(\"enable\", null, [\"flameboy\", \"flameboy4\"]);\n }\n};\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/stone.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], Stone, \"sprite\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/throwing/success.mp3\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], Stone, \"successSound\", void 0);\nStone = Stone_1 = tslib_1.__decorate([\n Entity_1.entity(\"stone\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number])\n], Stone);\nexports.Stone = Stone;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvU3RvbmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZW50aXRpZXMvU3RvbmUudHM/ZTA5OCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc2Vwcml0ZSB9IGZyb20gXCIuLi9Bc2Vwcml0ZVwiO1xyXG5pbXBvcnQgeyBhc3NldCB9IGZyb20gXCIuLi9Bc3NldHNcIjtcclxuaW1wb3J0IHsgQ29sbGlkYWJsZUdhbWVPYmplY3QsIEdhbWVTY2VuZSB9IGZyb20gXCIuLi9zY2VuZXMvR2FtZVNjZW5lXCI7XHJcbmltcG9ydCB7IGVudGl0eSB9IGZyb20gXCIuLi9FbnRpdHlcIjtcclxuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tIFwiLi4vV29ybGRcIjtcclxuaW1wb3J0IHsgRXllVHlwZSwgRmFjZSwgRmFjZU1vZGVzIH0gZnJvbSBcIi4uL0ZhY2VcIjtcclxuaW1wb3J0IHsgR2FtZU9iamVjdEluZm8gfSBmcm9tIFwiLi4vTWFwSW5mb1wiO1xyXG5pbXBvcnQgeyBub3cgfSBmcm9tIFwiLi4vdXRpbFwiO1xyXG5pbXBvcnQgeyBOUEMgfSBmcm9tIFwiLi9OUENcIjtcclxuaW1wb3J0IHsgUXVlc3RBVHJpZ2dlciwgUXVlc3RLZXkgfSBmcm9tIFwiLi4vUXVlc3RzXCI7XHJcbmltcG9ydCB7IFJlbmRlcmluZ0xheWVyIH0gZnJvbSBcIi4uL1JlbmRlcmVyXCI7XHJcbmltcG9ydCB7IFNvdW5kIH0gZnJvbSBcIi4uL1NvdW5kXCI7XHJcblxyXG5leHBvcnQgZW51bSBTdG9uZVN0YXRlIHtcclxuICAgIERFRkFVTFQgPSAwLFxyXG4gICAgU1dJTU1JTkcgPSAxLFxyXG4gICAgRkxPQVRJTkcgPSAyXHJcbn1cclxuXHJcbkBlbnRpdHkoXCJzdG9uZVwiKVxyXG5leHBvcnQgY2xhc3MgU3RvbmUgZXh0ZW5kcyBOUEMgaW1wbGVtZW50cyBDb2xsaWRhYmxlR2FtZU9iamVjdCB7XHJcbiAgICBAYXNzZXQoXCJzcHJpdGVzL3N0b25lLmFzZXByaXRlLmpzb25cIilcclxuICAgIHByaXZhdGUgc3RhdGljIHNwcml0ZTogQXNlcHJpdGU7XHJcblxyXG4gICAgQGFzc2V0KFwic291bmRzL3Rocm93aW5nL3N1Y2Nlc3MubXAzXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBzdWNjZXNzU291bmQ6IFNvdW5kO1xyXG5cclxuICAgIHByaXZhdGUgZmxvYXRpbmdQb3NpdGlvbjogR2FtZU9iamVjdEluZm87XHJcblxyXG4gICAgcHVibGljIHN0YXRlOiBTdG9uZVN0YXRlID0gU3RvbmVTdGF0ZS5ERUZBVUxUO1xyXG5cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihzY2VuZTogR2FtZVNjZW5lLCB4OiBudW1iZXIsIHk6IG51bWJlcikge1xyXG4gICAgICAgIHN1cGVyKHNjZW5lLCB4LCB5LCAyNiwgNTApO1xyXG5cclxuICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IC0xO1xyXG4gICAgICAgIHRoaXMuZmFjZSA9IG5ldyBGYWNlKHNjZW5lLCB0aGlzLCBFeWVUeXBlLlNUT05FLCAwLCAyMSk7XHJcbiAgICAgICAgdGhpcy5sb29rQXRQbGF5ZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNhcnJ5SGVpZ2h0ID0gMTY7XHJcblxyXG4gICAgICAgIGNvbnN0IGZsb2F0aW5nUG9zaXRpb24gPSB0aGlzLnNjZW5lLnBvaW50c09mSW50ZXJlc3QuZmluZChcclxuICAgICAgICAgICAgcG9pID0+IHBvaS5uYW1lID09PSBcInN0b25lX2Zsb2F0aW5nX3Bvc2l0aW9uXCJcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoIWZsb2F0aW5nUG9zaXRpb24pIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yIChcIkNvdWxkIG5vdCBmaW5kIFxcXCJzdG9uZV9mbG9hdGluZ19wb3NpdGlvblxcXCIgcG9pbnQgb2YgaW50ZXJlc3QgaW4gZ2FtZSBzY2VuZVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmxvYXRpbmdQb3NpdGlvbiA9IGZsb2F0aW5nUG9zaXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHNob3dEaWFsb2d1ZVByb21wdCgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXN1cGVyLnNob3dEaWFsb2d1ZVByb21wdCgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuZ2FtZS5jYW1wYWlnbi5nZXRRdWVzdChRdWVzdEtleS5BKS5nZXRIaWdoZXN0VHJpZ2dlckluZGV4KCkgPj0gUXVlc3RBVHJpZ2dlci5QTEFOVEVEX1NFRUQgJiZcclxuICAgICAgICAgICAgdGhpcy5zY2VuZS5nYW1lLmNhbXBhaWduLmdldFF1ZXN0KFF1ZXN0S2V5LkEpLmdldEhpZ2hlc3RUcmlnZ2VySW5kZXgoKSA8IFF1ZXN0QVRyaWdnZXIuR09UX1NUT05FXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZHJhdyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2NlbmUucmVuZGVyZXIuYWRkQXNlcHJpdGUoXHJcbiAgICAgICAgICAgIFN0b25lLnNwcml0ZSxcclxuICAgICAgICAgICAgXCJpZGxlXCIsXHJcbiAgICAgICAgICAgIHRoaXMueCwgdGhpcy55IC0gMSxcclxuICAgICAgICAgICAgUmVuZGVyaW5nTGF5ZXIuRU5USVRJRVMsXHJcbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmUuc2hvd0JvdW5kcykge1xyXG4gICAgICAgICAgICB0aGlzLmRyYXdCb3VuZHMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZHJhd0ZhY2UoY3R4LCBmYWxzZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNob3dEaWFsb2d1ZVByb21wdCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhd0RpYWxvZ3VlUHJvbXB0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNwZWVjaEJ1YmJsZS5kcmF3KGN0eCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZShkdDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIudXBkYXRlKGR0KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFN0b25lU3RhdGUuREVGQVVMVCkge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLndvcmxkLmNvbGxpZGVzV2l0aCh0aGlzLngsIHRoaXMueSAtIDUpID09PSBFbnZpcm9ubWVudC5XQVRFUlxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUuZ2FtZS5jYW1wYWlnbi5nZXRRdWVzdChRdWVzdEtleS5BKS50cmlnZ2VyKFxyXG4gICAgICAgICAgICAgICAgICAgIFF1ZXN0QVRyaWdnZXIuVEhST1dOX1NUT05FX0lOVE9fV0FURVJcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0b25lU3RhdGUuU1dJTU1JTkc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZlbG9jaXR5KDAsIDApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGbG9hdGluZyh0cnVlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMueSA9IHRoaXMuZmxvYXRpbmdQb3NpdGlvbi55O1xyXG4gICAgICAgICAgICAgICAgU3RvbmUuc3VjY2Vzc1NvdW5kLnBsYXkoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2NlbmUuZ2FtZS5jYW1wYWlnbi5ydW5BY3Rpb24oXCJlbmFibGVcIiwgbnVsbCwgW1wic3RvbmVcIiwgXCJzdG9uZTJcIl0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2VuZS5nYW1lLmNhbXBhaWduLnJ1bkFjdGlvbihcImVuYWJsZVwiLCBudWxsLCBbXCJmbGFtZWJveVwiLCBcImZsYW1lYm95MlwiXSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjZW5lLmdhbWUuY2FtcGFpZ24ucnVuQWN0aW9uKFwiZW5hYmxlXCIsIG51bGwsIFtcImNhdmVtYW5cIiwgXCJjYXZlbWFuMlwiXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUgPT09IFN0b25lU3RhdGUuU1dJTU1JTkcpIHtcclxuICAgICAgICAgICAgY29uc3QgZGlmZlggPSB0aGlzLmZsb2F0aW5nUG9zaXRpb24ueCAtIHRoaXMueDtcclxuICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBNYXRoLnNpZ24oZGlmZlgpO1xyXG4gICAgICAgICAgICBjb25zdCBtb3ZlWCA9IE1hdGgubWluKDIwLCBNYXRoLmFicyhkaWZmWCkpICogTWF0aC5zaWduKGRpZmZYKTtcclxuICAgICAgICAgICAgdGhpcy54ICs9IG1vdmVYICogZHQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMobW92ZVgpIDwgMikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0b25lU3RhdGUuRkxPQVRJTkc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmVsb2NpdHlZKE1hdGguYWJzKCgobm93KCkgJSAyMDAwKSAtIDEwMDApIC8gMTAwMCkgLSAwLjUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZSA9PT0gU3RvbmVTdGF0ZS5GTE9BVElORykge1xyXG4gICAgICAgICAgICB0aGlzLnggPSB0aGlzLmZsb2F0aW5nUG9zaXRpb24ueDtcclxuICAgICAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSAtMTtcclxuICAgICAgICAgICAgdGhpcy5zZXRWZWxvY2l0eVkoTWF0aC5hYnMoKChub3coKSAlIDIwMDApIC0gMTAwMCkgLyAxMDAwKSAtIDAuNSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRpYWxvZ3VlUHJvbXB0LnVwZGF0ZShkdCwgdGhpcy54LCB0aGlzLnkgKyA0OCk7XHJcbiAgICAgICAgdGhpcy5zcGVlY2hCdWJibGUudXBkYXRlKHRoaXMueCwgdGhpcy55KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29sbGlkZXNXaXRoKHg6IG51bWJlciwgeTogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gU3RvbmVTdGF0ZS5GTE9BVElORyB8fCB0aGlzLnN0YXRlID09PSBTdG9uZVN0YXRlLlNXSU1NSU5HKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIHggPj0gdGhpcy54IC0gdGhpcy53aWR0aCAvIDJcclxuICAgICAgICAgICAgICAgICYmIHggPD0gdGhpcy54ICsgdGhpcy53aWR0aCAvIDJcclxuICAgICAgICAgICAgICAgICYmIHkgPj0gdGhpcy55XHJcbiAgICAgICAgICAgICAgICAmJiB5IDw9IHRoaXMueSArIHRoaXMuaGVpZ2h0XHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEVudmlyb25tZW50LlNPTElEO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuQUlSO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0NhcnJpZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NlbmUucGxheWVyLmlzQ2FycnlpbmcodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHBpY2tVcCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZhY2U/LnNldE1vZGUoRmFjZU1vZGVzLkFNVVNFRCk7XHJcbiAgICAgICAgdGhpcy5zY2VuZS5wbGF5ZXIuY2FycnkodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zY2VuZS5nYW1lLmNhbXBhaWduLnJ1bkFjdGlvbihcImVuYWJsZVwiLCBudWxsLCBbXCJmbGFtZWJveVwiLCBcImZsYW1lYm95NFwiXSk7XHJcbiAgICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQVdBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE5SEE7QUFEQTtBQUNBO0FBQUE7QUFHQTtBQURBO0FBQ0E7QUFBQTtBQUxBO0FBREE7QUFZQTtBQVhBO0FBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/entities/Stone.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/StoneDisciple.js":
|
|
/*!***************************************!*\
|
|
!*** ./lib/entities/StoneDisciple.js ***!
|
|
\***************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar StoneDisciple_1;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StoneDisciple = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst Conversation_1 = __webpack_require__(/*! ../Conversation */ \"./lib/Conversation.js\");\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst Face_1 = __webpack_require__(/*! ../Face */ \"./lib/Face.js\");\nconst GameScene_1 = __webpack_require__(/*! ../scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst NPC_1 = __webpack_require__(/*! ./NPC */ \"./lib/entities/NPC.js\");\nconst Renderer_1 = __webpack_require__(/*! ../Renderer */ \"./lib/Renderer.js\");\nlet StoneDisciple = StoneDisciple_1 = class StoneDisciple extends NPC_1.NPC {\n constructor(scene, x, y) {\n super(scene, x, y, 32, 26);\n this.direction = -1;\n this.lookAtPlayer = true;\n this.face = new Face_1.Face(scene, this, Face_1.EyeType.STONEDISCIPLE, 0, 0);\n }\n showDialoguePrompt() {\n if (!super.showDialoguePrompt()) {\n return false;\n }\n const talkedToStoneDisciple = Conversation_1.Conversation.getGlobals()[\"$talkedToStoneDisciple\"];\n const talkedToStoneDiscipleAgain = Conversation_1.Conversation.getGlobals()[\"$talkedToStoneDiscipleAgain\"];\n const gotTeleported = Conversation_1.Conversation.getGlobals()[\"$gotTeleported\"];\n return (talkedToStoneDisciple === undefined\n || (gotTeleported !== undefined && talkedToStoneDiscipleAgain === undefined));\n }\n draw(ctx) {\n this.scene.renderer.addAseprite(StoneDisciple_1.sprite, \"idle\", this.x, this.y, Renderer_1.RenderingLayer.ENTITIES, this.direction);\n this.drawFace(ctx, false);\n if (this.scene.showBounds) {\n this.drawBounds();\n }\n if (this.showDialoguePrompt()) {\n this.drawDialoguePrompt();\n }\n this.speechBubble.draw(ctx);\n }\n update(dt) {\n super.update(dt);\n this.dialoguePrompt.update(dt, this.x, this.y + this.height);\n this.speechBubble.update(this.x, this.y);\n }\n};\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/stonedisciple.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], StoneDisciple, \"sprite\", void 0);\nStoneDisciple = StoneDisciple_1 = tslib_1.__decorate([\n Entity_1.entity(\"stonedisciple\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number])\n], StoneDisciple);\nexports.StoneDisciple = StoneDisciple;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvU3RvbmVEaXNjaXBsZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9lbnRpdGllcy9TdG9uZURpc2NpcGxlLnRzPzFlY2UiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNlcHJpdGUgfSBmcm9tIFwiLi4vQXNlcHJpdGVcIjtcclxuaW1wb3J0IHsgYXNzZXQgfSBmcm9tIFwiLi4vQXNzZXRzXCI7XHJcbmltcG9ydCB7IENvbnZlcnNhdGlvbiB9IGZyb20gXCIuLi9Db252ZXJzYXRpb25cIjtcclxuaW1wb3J0IHsgZW50aXR5IH0gZnJvbSBcIi4uL0VudGl0eVwiO1xyXG5pbXBvcnQgeyBFeWVUeXBlLCBGYWNlIH0gZnJvbSBcIi4uL0ZhY2VcIjtcclxuaW1wb3J0IHsgR2FtZVNjZW5lIH0gZnJvbSBcIi4uL3NjZW5lcy9HYW1lU2NlbmVcIjtcclxuaW1wb3J0IHsgTlBDIH0gZnJvbSBcIi4vTlBDXCI7XHJcbmltcG9ydCB7IFJlbmRlcmluZ0xheWVyIH0gZnJvbSBcIi4uL1JlbmRlcmVyXCI7XHJcblxyXG5AZW50aXR5KFwic3RvbmVkaXNjaXBsZVwiKVxyXG5leHBvcnQgY2xhc3MgU3RvbmVEaXNjaXBsZSBleHRlbmRzIE5QQyB7XHJcbiAgICBAYXNzZXQoXCJzcHJpdGVzL3N0b25lZGlzY2lwbGUuYXNlcHJpdGUuanNvblwiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgc3ByaXRlOiBBc2Vwcml0ZTtcclxuXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioc2NlbmU6IEdhbWVTY2VuZSwgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcclxuICAgICAgICBzdXBlcihzY2VuZSwgeCwgeSwgMzIsIDI2KTtcclxuICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IC0xO1xyXG4gICAgICAgIHRoaXMubG9va0F0UGxheWVyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZhY2UgPSBuZXcgRmFjZShzY2VuZSwgdGhpcywgRXllVHlwZS5TVE9ORURJU0NJUExFLCAwLCAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2hvd0RpYWxvZ3VlUHJvbXB0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghc3VwZXIuc2hvd0RpYWxvZ3VlUHJvbXB0KCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdGFsa2VkVG9TdG9uZURpc2NpcGxlID0gQ29udmVyc2F0aW9uLmdldEdsb2JhbHMoKVtcIiR0YWxrZWRUb1N0b25lRGlzY2lwbGVcIl07XHJcbiAgICAgICAgY29uc3QgdGFsa2VkVG9TdG9uZURpc2NpcGxlQWdhaW4gPSBDb252ZXJzYXRpb24uZ2V0R2xvYmFscygpW1wiJHRhbGtlZFRvU3RvbmVEaXNjaXBsZUFnYWluXCJdO1xyXG4gICAgICAgIGNvbnN0IGdvdFRlbGVwb3J0ZWQgPSBDb252ZXJzYXRpb24uZ2V0R2xvYmFscygpW1wiJGdvdFRlbGVwb3J0ZWRcIl07XHJcblxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRhbGtlZFRvU3RvbmVEaXNjaXBsZSA9PT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgIHx8IChnb3RUZWxlcG9ydGVkICE9PSB1bmRlZmluZWQgJiYgdGFsa2VkVG9TdG9uZURpc2NpcGxlQWdhaW4gPT09IHVuZGVmaW5lZClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkcmF3KGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zY2VuZS5yZW5kZXJlci5hZGRBc2Vwcml0ZShcclxuICAgICAgICAgICAgU3RvbmVEaXNjaXBsZS5zcHJpdGUsIFwiaWRsZVwiLCB0aGlzLngsIHRoaXMueSwgUmVuZGVyaW5nTGF5ZXIuRU5USVRJRVMsIHRoaXMuZGlyZWN0aW9uXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3RmFjZShjdHgsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmUuc2hvd0JvdW5kcykge1xyXG4gICAgICAgICAgICB0aGlzLmRyYXdCb3VuZHMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNob3dEaWFsb2d1ZVByb21wdCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhd0RpYWxvZ3VlUHJvbXB0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNwZWVjaEJ1YmJsZS5kcmF3KGN0eCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZShkdDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIudXBkYXRlKGR0KTtcclxuXHJcbiAgICAgICAgdGhpcy5kaWFsb2d1ZVByb21wdC51cGRhdGUoZHQsIHRoaXMueCwgdGhpcy55ICsgdGhpcy5oZWlnaHQpO1xyXG4gICAgICAgIHRoaXMuc3BlZWNoQnViYmxlLnVwZGF0ZSh0aGlzLngsIHRoaXMueSk7XHJcbiAgICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUlBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQWhEQTtBQURBO0FBQ0E7QUFBQTtBQUZBO0FBREE7QUFLQTtBQUpBO0FBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/entities/StoneDisciple.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/SuperThrow.js":
|
|
/*!************************************!*\
|
|
!*** ./lib/entities/SuperThrow.js ***!
|
|
\************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar SuperThrow_1;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SuperThrow = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst Conversation_1 = __webpack_require__(/*! ../Conversation */ \"./lib/Conversation.js\");\nconst superthrow_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../../assets/dialog/superthrow.dialog.json */ \"./assets/dialog/superthrow.dialog.json\"));\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst GameScene_1 = __webpack_require__(/*! ../scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst NPC_1 = __webpack_require__(/*! ./NPC */ \"./lib/entities/NPC.js\");\nconst Renderer_1 = __webpack_require__(/*! ../Renderer */ \"./lib/Renderer.js\");\nlet SuperThrow = SuperThrow_1 = class SuperThrow extends NPC_1.NPC {\n constructor(scene, x, y) {\n super(scene, x, y, 18, 22);\n this.floatAmount = 4;\n this.floatSpeed = 2;\n this.lookAtPlayer = false;\n this.conversation = new Conversation_1.Conversation(superthrow_dialog_json_1.default, this);\n }\n getInteractionText() {\n if (!this.met) {\n return \"Touch\";\n }\n else {\n return \"Talk\";\n }\n }\n draw(ctx) {\n const floatOffsetY = Math.sin(this.timeAlive * this.floatSpeed) * this.floatAmount;\n this.scene.renderer.addAseprite(SuperThrow_1.sprite, \"idle\", this.x, this.y - floatOffsetY, Renderer_1.RenderingLayer.ENTITIES, this.direction);\n if (this.scene.showBounds) {\n this.drawBounds();\n }\n this.speechBubble.draw(ctx);\n }\n update(dt) {\n super.update(dt);\n this.speechBubble.update(this.x, this.y);\n }\n};\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/superthrow.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], SuperThrow, \"sprite\", void 0);\nSuperThrow = SuperThrow_1 = tslib_1.__decorate([\n Entity_1.entity(\"superthrow\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number])\n], SuperThrow);\nexports.SuperThrow = SuperThrow;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvU3VwZXJUaHJvdy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9lbnRpdGllcy9TdXBlclRocm93LnRzPzI0ZjIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNlcHJpdGUgfSBmcm9tIFwiLi4vQXNlcHJpdGVcIjtcclxuaW1wb3J0IHsgYXNzZXQgfSBmcm9tIFwiLi4vQXNzZXRzXCI7XHJcbmltcG9ydCB7IENvbnZlcnNhdGlvbiB9IGZyb20gXCIuLi9Db252ZXJzYXRpb25cIjtcclxuaW1wb3J0IGNvbnZlcnNhdGlvbiBmcm9tIFwiLi4vLi4vYXNzZXRzL2RpYWxvZy9zdXBlcnRocm93LmRpYWxvZy5qc29uXCI7XHJcbmltcG9ydCB7IGVudGl0eSB9IGZyb20gXCIuLi9FbnRpdHlcIjtcclxuaW1wb3J0IHsgR2FtZVNjZW5lIH0gZnJvbSBcIi4uL3NjZW5lcy9HYW1lU2NlbmVcIjtcclxuaW1wb3J0IHsgTlBDIH0gZnJvbSBcIi4vTlBDXCI7XHJcbmltcG9ydCB7IFJlbmRlcmluZ0xheWVyIH0gZnJvbSBcIi4uL1JlbmRlcmVyXCI7XHJcblxyXG5AZW50aXR5KFwic3VwZXJ0aHJvd1wiKVxyXG5leHBvcnQgY2xhc3MgU3VwZXJUaHJvdyBleHRlbmRzIE5QQyB7XHJcbiAgICBAYXNzZXQoXCJzcHJpdGVzL3N1cGVydGhyb3cuYXNlcHJpdGUuanNvblwiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgc3ByaXRlOiBBc2Vwcml0ZTtcclxuICAgIHByaXZhdGUgZmxvYXRBbW91bnQgPSA0O1xyXG4gICAgcHJpdmF0ZSBmbG9hdFNwZWVkID0gMjtcclxuXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioc2NlbmU6IEdhbWVTY2VuZSwgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcclxuICAgICAgICBzdXBlcihzY2VuZSwgeCwgeSwgMTgsIDIyKTtcclxuICAgICAgICB0aGlzLmxvb2tBdFBsYXllciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY29udmVyc2F0aW9uID0gbmV3IENvbnZlcnNhdGlvbihjb252ZXJzYXRpb24sIHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJbnRlcmFjdGlvblRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIXRoaXMubWV0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIlRvdWNoXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiVGFsa1wiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZHJhdyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGZsb2F0T2Zmc2V0WSA9IE1hdGguc2luKHRoaXMudGltZUFsaXZlICogdGhpcy5mbG9hdFNwZWVkKSAqIHRoaXMuZmxvYXRBbW91bnQ7XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUucmVuZGVyZXIuYWRkQXNlcHJpdGUoXHJcbiAgICAgICAgICAgIFN1cGVyVGhyb3cuc3ByaXRlLFxyXG4gICAgICAgICAgICBcImlkbGVcIixcclxuICAgICAgICAgICAgdGhpcy54LCB0aGlzLnkgLSBmbG9hdE9mZnNldFksXHJcbiAgICAgICAgICAgIFJlbmRlcmluZ0xheWVyLkVOVElUSUVTLFxyXG4gICAgICAgICAgICB0aGlzLmRpcmVjdGlvblxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lLnNob3dCb3VuZHMpIHtcclxuICAgICAgICAgICAgdGhpcy5kcmF3Qm91bmRzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNwZWVjaEJ1YmJsZS5kcmF3KGN0eCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZShkdDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIudXBkYXRlKGR0KTtcclxuXHJcbiAgICAgICAgdGhpcy5zcGVlY2hCdWJibGUudXBkYXRlKHRoaXMueCwgdGhpcy55KTtcclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBTUE7QUFDQTtBQUpBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBUUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUF6Q0E7QUFEQTtBQUNBO0FBQUE7QUFGQTtBQURBO0FBT0E7QUFOQTtBQUFBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/entities/SuperThrow.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/Tree.js":
|
|
/*!******************************!*\
|
|
!*** ./lib/entities/Tree.js ***!
|
|
\******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar Tree_1;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Tree = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst Face_1 = __webpack_require__(/*! ../Face */ \"./lib/Face.js\");\nconst GameScene_1 = __webpack_require__(/*! ../scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst NPC_1 = __webpack_require__(/*! ./NPC */ \"./lib/entities/NPC.js\");\nconst Quests_1 = __webpack_require__(/*! ../Quests */ \"./lib/Quests.js\");\nconst Renderer_1 = __webpack_require__(/*! ../Renderer */ \"./lib/Renderer.js\");\nconst Seed_1 = __webpack_require__(/*! ./Seed */ \"./lib/entities/Seed.js\");\nconst Wood_1 = __webpack_require__(/*! ./Wood */ \"./lib/entities/Wood.js\");\nlet Tree = Tree_1 = class Tree extends NPC_1.NPC {\n constructor(scene, x, y) {\n super(scene, x, y, 78, 140);\n this.face = new Face_1.Face(scene, this, Face_1.EyeType.TREE, 5, 94);\n this.seed = new Seed_1.Seed(scene, x, y);\n this.wood = new Wood_1.Wood(scene, x, y);\n this.startDialog();\n }\n showDialoguePrompt() {\n if (!super.showDialoguePrompt()) {\n return false;\n }\n return (this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).getHighestTriggerIndex() >= Quests_1.QuestATrigger.GOT_QUEST_FROM_FIRE\n && this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).getHighestTriggerIndex() < Quests_1.QuestATrigger.GOT_QUEST_FROM_TREE) || (this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).getHighestTriggerIndex() >= Quests_1.QuestATrigger.MADE_RAIN\n && this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).getHighestTriggerIndex() < Quests_1.QuestATrigger.TREE_DROPPED_WOOD);\n }\n draw(ctx) {\n this.scene.renderer.addAseprite(Tree_1.sprite, \"idle\", this.x, this.y, Renderer_1.RenderingLayer.ENTITIES);\n if (this.scene.showBounds) {\n this.drawBounds();\n }\n this.drawFace(ctx);\n if (this.showDialoguePrompt()) {\n this.drawDialoguePrompt();\n }\n this.speechBubble.draw(ctx);\n }\n update(dt) {\n super.update(dt);\n if (this.showDialoguePrompt()) {\n this.dialoguePrompt.update(dt, this.x + 4, this.y + 128);\n }\n }\n startDialog() {\n this.speechBubble.update(this.x, this.y);\n }\n spawnSeed() {\n if (!this.scene.gameObjects.includes(this.seed)) {\n this.scene.addGameObject(this.seed);\n }\n this.seed.resetState();\n this.seed.x = this.x;\n this.seed.y = this.y + this.height / 2;\n this.seed.setVelocity(5, 0);\n return this.seed;\n }\n spawnWood() {\n if (!this.scene.gameObjects.includes(this.wood)) {\n this.scene.addGameObject(this.wood);\n }\n this.wood.resetState();\n this.wood.x = this.x;\n this.wood.y = this.y + this.height / 2;\n this.wood.setVelocity(5, 0);\n return this.wood;\n }\n};\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/tree.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], Tree, \"sprite\", void 0);\nTree = Tree_1 = tslib_1.__decorate([\n Entity_1.entity(\"tree\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number])\n], Tree);\nexports.Tree = Tree;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvVHJlZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9lbnRpdGllcy9UcmVlLnRzPzliMzAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNlcHJpdGUgfSBmcm9tIFwiLi4vQXNlcHJpdGVcIjtcclxuaW1wb3J0IHsgYXNzZXQgfSBmcm9tIFwiLi4vQXNzZXRzXCI7XHJcbmltcG9ydCB7IGVudGl0eSB9IGZyb20gXCIuLi9FbnRpdHlcIjtcclxuaW1wb3J0IHsgRXllVHlwZSwgRmFjZSB9IGZyb20gXCIuLi9GYWNlXCI7XHJcbmltcG9ydCB7IEdhbWVTY2VuZSB9IGZyb20gXCIuLi9zY2VuZXMvR2FtZVNjZW5lXCI7XHJcbmltcG9ydCB7IE5QQyB9IGZyb20gXCIuL05QQ1wiO1xyXG5pbXBvcnQgeyBRdWVzdEFUcmlnZ2VyLCBRdWVzdEtleSB9IGZyb20gXCIuLi9RdWVzdHNcIjtcclxuaW1wb3J0IHsgUmVuZGVyaW5nTGF5ZXIgfSBmcm9tIFwiLi4vUmVuZGVyZXJcIjtcclxuaW1wb3J0IHsgU2VlZCB9IGZyb20gXCIuL1NlZWRcIjtcclxuaW1wb3J0IHsgV29vZCB9IGZyb20gXCIuL1dvb2RcIjtcclxuXHJcbkBlbnRpdHkoXCJ0cmVlXCIpXHJcbmV4cG9ydCBjbGFzcyBUcmVlIGV4dGVuZHMgTlBDIHtcclxuICAgIEBhc3NldChcInNwcml0ZXMvdHJlZS5hc2Vwcml0ZS5qc29uXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBzcHJpdGU6IEFzZXByaXRlO1xyXG5cclxuICAgIHB1YmxpYyBzZWVkOiBTZWVkO1xyXG4gICAgcHJpdmF0ZSB3b29kOiBXb29kO1xyXG5cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihzY2VuZTogR2FtZVNjZW5lLCB4OiBudW1iZXIsIHk6IG51bWJlcikge1xyXG4gICAgICAgIHN1cGVyKHNjZW5lLCB4LCB5LCA3OCwgMTQwKTtcclxuXHJcbiAgICAgICAgdGhpcy5mYWNlID0gbmV3IEZhY2Uoc2NlbmUsIHRoaXMsIEV5ZVR5cGUuVFJFRSwgNSwgOTQpO1xyXG4gICAgICAgIHRoaXMuc2VlZCA9IG5ldyBTZWVkKHNjZW5lLCB4LCB5KTtcclxuICAgICAgICB0aGlzLndvb2QgPSBuZXcgV29vZChzY2VuZSwgeCwgeSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnREaWFsb2coKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0RpYWxvZ3VlUHJvbXB0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghc3VwZXIuc2hvd0RpYWxvZ3VlUHJvbXB0KCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdGhpcy5zY2VuZS5nYW1lLmNhbXBhaWduLmdldFF1ZXN0KFF1ZXN0S2V5LkEpLmdldEhpZ2hlc3RUcmlnZ2VySW5kZXgoKSA+PSBRdWVzdEFUcmlnZ2VyLkdPVF9RVUVTVF9GUk9NX0ZJUkVcclxuICAgICAgICAgICAgJiYgdGhpcy5zY2VuZS5nYW1lLmNhbXBhaWduLmdldFF1ZXN0KFF1ZXN0S2V5LkEpLmdldEhpZ2hlc3RUcmlnZ2VySW5kZXgoKSA8IFF1ZXN0QVRyaWdnZXIuR09UX1FVRVNUX0ZST01fVFJFRVxyXG4gICAgICAgICkgfHwgKFxyXG4gICAgICAgICAgICB0aGlzLnNjZW5lLmdhbWUuY2FtcGFpZ24uZ2V0UXVlc3QoUXVlc3RLZXkuQSkuZ2V0SGlnaGVzdFRyaWdnZXJJbmRleCgpID49IFF1ZXN0QVRyaWdnZXIuTUFERV9SQUlOXHJcbiAgICAgICAgICAgICYmIHRoaXMuc2NlbmUuZ2FtZS5jYW1wYWlnbi5nZXRRdWVzdChRdWVzdEtleS5BKS5nZXRIaWdoZXN0VHJpZ2dlckluZGV4KCkgPCBRdWVzdEFUcmlnZ2VyLlRSRUVfRFJPUFBFRF9XT09EXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZHJhdyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2NlbmUucmVuZGVyZXIuYWRkQXNlcHJpdGUoVHJlZS5zcHJpdGUsIFwiaWRsZVwiLCB0aGlzLngsIHRoaXMueSwgUmVuZGVyaW5nTGF5ZXIuRU5USVRJRVMpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zY2VuZS5zaG93Qm91bmRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhd0JvdW5kcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kcmF3RmFjZShjdHgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zaG93RGlhbG9ndWVQcm9tcHQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmRyYXdEaWFsb2d1ZVByb21wdCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zcGVlY2hCdWJibGUuZHJhdyhjdHgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGUoZHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLnVwZGF0ZShkdCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNob3dEaWFsb2d1ZVByb21wdCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9ndWVQcm9tcHQudXBkYXRlKGR0LCB0aGlzLnggKyA0LCB0aGlzLnkgKyAxMjgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnREaWFsb2coKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zcGVlY2hCdWJibGUudXBkYXRlKHRoaXMueCwgdGhpcy55KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3Bhd25TZWVkKCk6IFNlZWQge1xyXG4gICAgICAgIGlmICghdGhpcy5zY2VuZS5nYW1lT2JqZWN0cy5pbmNsdWRlcyh0aGlzLnNlZWQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuYWRkR2FtZU9iamVjdCh0aGlzLnNlZWQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZWVkLnJlc2V0U3RhdGUoKTtcclxuICAgICAgICB0aGlzLnNlZWQueCA9IHRoaXMueDtcclxuICAgICAgICB0aGlzLnNlZWQueSA9IHRoaXMueSArIHRoaXMuaGVpZ2h0IC8gMjtcclxuICAgICAgICB0aGlzLnNlZWQuc2V0VmVsb2NpdHkoNSwgMCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnNlZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNwYXduV29vZCgpOiBXb29kIHtcclxuICAgICAgICBpZiAoIXRoaXMuc2NlbmUuZ2FtZU9iamVjdHMuaW5jbHVkZXModGhpcy53b29kKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNjZW5lLmFkZEdhbWVPYmplY3QodGhpcy53b29kKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMud29vZC5yZXNldFN0YXRlKCk7XHJcbiAgICAgICAgdGhpcy53b29kLnggPSB0aGlzLng7XHJcbiAgICAgICAgdGhpcy53b29kLnkgPSB0aGlzLnkgKyB0aGlzLmhlaWdodCAvIDI7XHJcbiAgICAgICAgdGhpcy53b29kLnNldFZlbG9jaXR5KDUsIDApO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy53b29kO1xyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBT0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFHQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQWxGQTtBQURBO0FBQ0E7QUFBQTtBQUZBO0FBREE7QUFRQTtBQVBBO0FBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/entities/Tree.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/Wall.js":
|
|
/*!******************************!*\
|
|
!*** ./lib/entities/Wall.js ***!
|
|
\******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar Wall_1;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Wall = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst GameScene_1 = __webpack_require__(/*! ../scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst World_1 = __webpack_require__(/*! ../World */ \"./lib/World.js\");\nconst Renderer_1 = __webpack_require__(/*! ../Renderer */ \"./lib/Renderer.js\");\nvar WallState;\n(function (WallState) {\n WallState[WallState[\"SOLID\"] = 0] = \"SOLID\";\n WallState[WallState[\"CRUMBLED\"] = 1] = \"CRUMBLED\";\n})(WallState || (WallState = {}));\nlet Wall = Wall_1 = class Wall extends Entity_1.Entity {\n constructor(scene, x, y, properties) {\n super(scene, x, y, 24, 72, false);\n this.state = WallState.SOLID;\n if (!properties.identifier) {\n throw new Error(\"Cannot create Wall entity with no identifier property\");\n }\n this.identifier = properties.identifier;\n }\n draw() {\n const animationTag = this.state === WallState.SOLID ? \"solid\" : \"crumbled\";\n this.scene.renderer.addAseprite(Wall_1.sprite, animationTag, this.x, this.y, Renderer_1.RenderingLayer.ENTITIES);\n if (this.scene.showBounds) {\n this.drawBounds();\n }\n }\n update() { }\n crumble() {\n this.state = WallState.CRUMBLED;\n }\n collidesWith(x, y) {\n if (this.state === WallState.SOLID\n && x >= this.x - this.width / 2\n && x <= this.x + this.width / 2\n && y >= this.y\n && y <= this.y + this.height) {\n return World_1.Environment.SOLID;\n }\n return World_1.Environment.AIR;\n }\n};\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/wall.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], Wall, \"sprite\", void 0);\nWall = Wall_1 = tslib_1.__decorate([\n Entity_1.entity(\"wall\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number, Object])\n], Wall);\nexports.Wall = Wall;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvV2FsbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9lbnRpdGllcy9XYWxsLnRzPzA4MmQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNlcHJpdGUgfSBmcm9tIFwiLi4vQXNlcHJpdGVcIjtcclxuaW1wb3J0IHsgYXNzZXQgfSBmcm9tIFwiLi4vQXNzZXRzXCI7XHJcbmltcG9ydCB7IENvbGxpZGFibGVHYW1lT2JqZWN0LCBHYW1lU2NlbmUgfSBmcm9tIFwiLi4vc2NlbmVzL0dhbWVTY2VuZVwiO1xyXG5pbXBvcnQgeyBlbnRpdHksIEVudGl0eSB9IGZyb20gXCIuLi9FbnRpdHlcIjtcclxuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tIFwiLi4vV29ybGRcIjtcclxuaW1wb3J0IHsgR2FtZU9iamVjdFByb3BlcnRpZXMgfSBmcm9tIFwiLi4vTWFwSW5mb1wiO1xyXG5pbXBvcnQgeyBSZW5kZXJpbmdMYXllciB9IGZyb20gXCIuLi9SZW5kZXJlclwiO1xyXG5cclxuZW51bSBXYWxsU3RhdGUgeyBTT0xJRCwgQ1JVTUJMRUQgfVxyXG5cclxuQGVudGl0eShcIndhbGxcIilcclxuZXhwb3J0IGNsYXNzIFdhbGwgZXh0ZW5kcyBFbnRpdHkgaW1wbGVtZW50cyBDb2xsaWRhYmxlR2FtZU9iamVjdCB7XHJcbiAgICBAYXNzZXQoXCJzcHJpdGVzL3dhbGwuYXNlcHJpdGUuanNvblwiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgc3ByaXRlOiBBc2Vwcml0ZTtcclxuICAgIHB1YmxpYyByZWFkb25seSBpZGVudGlmaWVyOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIHN0YXRlID0gV2FsbFN0YXRlLlNPTElEO1xyXG5cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihzY2VuZTogR2FtZVNjZW5lLCB4OiBudW1iZXIsIHk6IG51bWJlciwgcHJvcGVydGllczogR2FtZU9iamVjdFByb3BlcnRpZXMpIHtcclxuICAgICAgICBzdXBlcihzY2VuZSwgeCwgeSwgMjQsIDcyLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIGlmICghcHJvcGVydGllcy5pZGVudGlmaWVyKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvciAoXCJDYW5ub3QgY3JlYXRlIFdhbGwgZW50aXR5IHdpdGggbm8gaWRlbnRpZmllciBwcm9wZXJ0eVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaWRlbnRpZmllciA9IHByb3BlcnRpZXMuaWRlbnRpZmllcjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZHJhdygpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBhbmltYXRpb25UYWcgPSB0aGlzLnN0YXRlID09PSBXYWxsU3RhdGUuU09MSUQgPyBcInNvbGlkXCIgOiBcImNydW1ibGVkXCI7XHJcbiAgICAgICAgdGhpcy5zY2VuZS5yZW5kZXJlci5hZGRBc2Vwcml0ZShXYWxsLnNwcml0ZSwgYW5pbWF0aW9uVGFnLCB0aGlzLngsIHRoaXMueSwgUmVuZGVyaW5nTGF5ZXIuRU5USVRJRVMpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zY2VuZS5zaG93Qm91bmRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhd0JvdW5kcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlKCk6IHZvaWQge31cclxuXHJcbiAgICBwdWJsaWMgY3J1bWJsZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gV2FsbFN0YXRlLkNSVU1CTEVEO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbGxpZGVzV2l0aCh4OiBudW1iZXIsIHk6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID09PSBXYWxsU3RhdGUuU09MSURcclxuICAgICAgICAgICAgJiYgeCA+PSB0aGlzLnggLSB0aGlzLndpZHRoIC8gMlxyXG4gICAgICAgICAgICAmJiB4IDw9IHRoaXMueCArIHRoaXMud2lkdGggLyAyXHJcbiAgICAgICAgICAgICYmIHkgPj0gdGhpcy55XHJcbiAgICAgICAgICAgICYmIHkgPD0gdGhpcy55ICsgdGhpcy5oZWlnaHRcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuIEVudmlyb25tZW50LlNPTElEO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIEVudmlyb25tZW50LkFJUjtcclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUdBO0FBTUE7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBMUNBO0FBREE7QUFDQTtBQUFBO0FBRkE7QUFEQTtBQU9BO0FBTkE7QUFBQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/entities/Wall.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/Window.js":
|
|
/*!********************************!*\
|
|
!*** ./lib/entities/Window.js ***!
|
|
\********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Window = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Conversation_1 = __webpack_require__(/*! ../Conversation */ \"./lib/Conversation.js\");\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst GameScene_1 = __webpack_require__(/*! ../scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst NPC_1 = __webpack_require__(/*! ./NPC */ \"./lib/entities/NPC.js\");\nconst window_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ./../../assets/dialog/window.dialog.json */ \"./assets/dialog/window.dialog.json\"));\nlet Window = class Window extends NPC_1.NPC {\n constructor(scene, x, y) {\n super(scene, x, y, 16, 16);\n this.conversation = new Conversation_1.Conversation(window_dialog_json_1.default, this);\n }\n getInteractionText() {\n return \"Check window\";\n }\n draw(ctx) {\n if (this.scene.showBounds) {\n this.drawBounds();\n }\n this.speechBubble.draw(ctx);\n }\n update() { }\n};\nWindow = tslib_1.__decorate([\n Entity_1.entity(\"window\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number])\n], Window);\nexports.Window = Window;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvV2luZG93LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2VudGl0aWVzL1dpbmRvdy50cz85MjE2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnZlcnNhdGlvbiB9IGZyb20gXCIuLi9Db252ZXJzYXRpb25cIjtcclxuaW1wb3J0IHsgZW50aXR5IH0gZnJvbSBcIi4uL0VudGl0eVwiO1xyXG5pbXBvcnQgeyBHYW1lU2NlbmUgfSBmcm9tIFwiLi4vc2NlbmVzL0dhbWVTY2VuZVwiO1xyXG5pbXBvcnQgeyBOUEMgfSBmcm9tIFwiLi9OUENcIjtcclxuaW1wb3J0IGNvbnZlcnNhdGlvbiBmcm9tIFwiLi8uLi8uLi9hc3NldHMvZGlhbG9nL3dpbmRvdy5kaWFsb2cuanNvblwiO1xyXG5cclxuQGVudGl0eShcIndpbmRvd1wiKVxyXG5leHBvcnQgY2xhc3MgV2luZG93IGV4dGVuZHMgTlBDIHtcclxuICAgIHB1YmxpYyBjb252ZXJzYXRpb246IENvbnZlcnNhdGlvbjtcclxuXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioc2NlbmU6IEdhbWVTY2VuZSwgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcclxuICAgICAgICBzdXBlcihzY2VuZSwgeCwgeSwgMTYsIDE2KTtcclxuICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbiA9IG5ldyBDb252ZXJzYXRpb24oY29udmVyc2F0aW9uLCB0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SW50ZXJhY3Rpb25UZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIFwiQ2hlY2sgd2luZG93XCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRyYXcoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5zY2VuZS5zaG93Qm91bmRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhd0JvdW5kcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNwZWVjaEJ1YmJsZS5kcmF3KGN0eCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZSgpOiB2b2lkIHt9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBcEJBO0FBREE7QUFJQTtBQUhBO0FBQUE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/entities/Window.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/Wing.js":
|
|
/*!******************************!*\
|
|
!*** ./lib/entities/Wing.js ***!
|
|
\******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar Wing_1;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Wing = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst GameScene_1 = __webpack_require__(/*! ../scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst NPC_1 = __webpack_require__(/*! ./NPC */ \"./lib/entities/NPC.js\");\nconst Quests_1 = __webpack_require__(/*! ../Quests */ \"./lib/Quests.js\");\nconst Renderer_1 = __webpack_require__(/*! ../Renderer */ \"./lib/Renderer.js\");\nlet Wing = Wing_1 = class Wing extends NPC_1.NPC {\n constructor(scene, x, y) {\n super(scene, x, y, 24, 24);\n this.floatAmount = 4;\n this.floatSpeed = 2;\n }\n showDialoguePrompt() {\n if (!super.showDialoguePrompt()) {\n return false;\n }\n return (this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).isTriggered(Quests_1.QuestATrigger.PLANTED_SEED)\n && !this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).isTriggered(Quests_1.QuestATrigger.LEARNED_RAIN_DANCE));\n }\n draw(ctx) {\n const floatOffsetY = Math.sin(this.timeAlive * this.floatSpeed) * this.floatAmount;\n this.scene.renderer.addAseprite(Wing_1.sprite, \"idle\", this.x, this.y - floatOffsetY, Renderer_1.RenderingLayer.ENTITIES);\n if (this.scene.showBounds) {\n this.drawBounds();\n }\n if (this.showDialoguePrompt()) {\n this.drawDialoguePrompt();\n }\n this.speechBubble.draw(ctx);\n }\n update(dt) {\n super.update(dt);\n this.dialoguePrompt.update(dt, this.x, this.y + 16);\n this.speechBubble.update(this.x, this.y);\n }\n};\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/wing.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], Wing, \"sprite\", void 0);\nWing = Wing_1 = tslib_1.__decorate([\n Entity_1.entity(\"wing\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number])\n], Wing);\nexports.Wing = Wing;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvV2luZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9lbnRpdGllcy9XaW5nLnRzP2MxMDciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNlcHJpdGUgfSBmcm9tIFwiLi4vQXNlcHJpdGVcIjtcclxuaW1wb3J0IHsgYXNzZXQgfSBmcm9tIFwiLi4vQXNzZXRzXCI7XHJcbmltcG9ydCB7IGVudGl0eSB9IGZyb20gXCIuLi9FbnRpdHlcIjtcclxuaW1wb3J0IHsgR2FtZVNjZW5lIH0gZnJvbSBcIi4uL3NjZW5lcy9HYW1lU2NlbmVcIjtcclxuaW1wb3J0IHsgTlBDIH0gZnJvbSBcIi4vTlBDXCI7XHJcbmltcG9ydCB7IFF1ZXN0QVRyaWdnZXIsIFF1ZXN0S2V5IH0gZnJvbSBcIi4uL1F1ZXN0c1wiO1xyXG5pbXBvcnQgeyBSZW5kZXJpbmdMYXllciB9IGZyb20gXCIuLi9SZW5kZXJlclwiO1xyXG5cclxuQGVudGl0eShcIndpbmdcIilcclxuZXhwb3J0IGNsYXNzIFdpbmcgZXh0ZW5kcyBOUEMge1xyXG4gICAgQGFzc2V0KFwic3ByaXRlcy93aW5nLmFzZXByaXRlLmpzb25cIilcclxuICAgIHByaXZhdGUgc3RhdGljIHNwcml0ZTogQXNlcHJpdGU7XHJcblxyXG4gICAgcHJpdmF0ZSBmbG9hdEFtb3VudCA9IDQ7XHJcbiAgICBwcml2YXRlIGZsb2F0U3BlZWQgPSAyO1xyXG5cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihzY2VuZTogR2FtZVNjZW5lLCB4OiBudW1iZXIsIHk6IG51bWJlcikge1xyXG4gICAgICAgIHN1cGVyKHNjZW5lLCB4LCB5LCAyNCwgMjQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzaG93RGlhbG9ndWVQcm9tcHQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFzdXBlci5zaG93RGlhbG9ndWVQcm9tcHQoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLnNjZW5lLmdhbWUuY2FtcGFpZ24uZ2V0UXVlc3QoUXVlc3RLZXkuQSkuaXNUcmlnZ2VyZWQoUXVlc3RBVHJpZ2dlci5QTEFOVEVEX1NFRUQpXHJcbiAgICAgICAgICAgICYmICF0aGlzLnNjZW5lLmdhbWUuY2FtcGFpZ24uZ2V0UXVlc3QoUXVlc3RLZXkuQSkuaXNUcmlnZ2VyZWQoUXVlc3RBVHJpZ2dlci5MRUFSTkVEX1JBSU5fREFOQ0UpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZHJhdyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGZsb2F0T2Zmc2V0WSA9IE1hdGguc2luKHRoaXMudGltZUFsaXZlICogdGhpcy5mbG9hdFNwZWVkKSAqIHRoaXMuZmxvYXRBbW91bnQ7XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUucmVuZGVyZXIuYWRkQXNlcHJpdGUoXHJcbiAgICAgICAgICAgIFdpbmcuc3ByaXRlLFxyXG4gICAgICAgICAgICBcImlkbGVcIixcclxuICAgICAgICAgICAgdGhpcy54LCB0aGlzLnkgLSBmbG9hdE9mZnNldFksXHJcbiAgICAgICAgICAgIFJlbmRlcmluZ0xheWVyLkVOVElUSUVTXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmUuc2hvd0JvdW5kcykge1xyXG4gICAgICAgICAgICB0aGlzLmRyYXdCb3VuZHMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNob3dEaWFsb2d1ZVByb21wdCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhd0RpYWxvZ3VlUHJvbXB0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNwZWVjaEJ1YmJsZS5kcmF3KGN0eCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZShkdDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIudXBkYXRlKGR0KTtcclxuXHJcbiAgICAgICAgdGhpcy5kaWFsb2d1ZVByb21wdC51cGRhdGUoZHQsIHRoaXMueCwgdGhpcy55ICsgMTYpO1xyXG4gICAgICAgIHRoaXMuc3BlZWNoQnViYmxlLnVwZGF0ZSh0aGlzLngsIHRoaXMueSk7XHJcbiAgICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFPQTtBQUNBO0FBSkE7QUFDQTtBQUlBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFPQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBL0NBO0FBREE7QUFDQTtBQUFBO0FBRkE7QUFEQTtBQVFBO0FBUEE7QUFBQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/entities/Wing.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/entities/Wood.js":
|
|
/*!******************************!*\
|
|
!*** ./lib/entities/Wood.js ***!
|
|
\******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar Wood_1;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Wood = exports.WoodState = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst World_1 = __webpack_require__(/*! ../World */ \"./lib/World.js\");\nconst GameScene_1 = __webpack_require__(/*! ../scenes/GameScene */ \"./lib/scenes/GameScene.js\");\nconst util_1 = __webpack_require__(/*! ../util */ \"./lib/util.js\");\nconst PhysicsEntity_1 = __webpack_require__(/*! ./PhysicsEntity */ \"./lib/entities/PhysicsEntity.js\");\nconst Quests_1 = __webpack_require__(/*! ../Quests */ \"./lib/Quests.js\");\nconst Renderer_1 = __webpack_require__(/*! ../Renderer */ \"./lib/Renderer.js\");\nconst Sound_1 = __webpack_require__(/*! ../Sound */ \"./lib/Sound.js\");\nvar WoodState;\n(function (WoodState) {\n WoodState[WoodState[\"FREE\"] = 0] = \"FREE\";\n WoodState[WoodState[\"SWIMMING\"] = 1] = \"SWIMMING\";\n})(WoodState = exports.WoodState || (exports.WoodState = {}));\nlet Wood = Wood_1 = class Wood extends PhysicsEntity_1.PhysicsEntity {\n constructor(scene, x, y) {\n super(scene, x, y, 26, 16);\n this.state = WoodState.FREE;\n const floatingPosition = this.scene.pointsOfInterest.find(poi => poi.name === \"recover_floating_position\");\n if (!floatingPosition) {\n throw new Error(\"Could not find \\\"recover_floating_position\\\" point of interest in game scene.\");\n }\n this.floatingPosition = floatingPosition;\n }\n resetState() {\n this.setFloating(false);\n this.state = WoodState.FREE;\n }\n draw() {\n this.scene.renderer.addAseprite(Wood_1.sprite, \"idle\", this.x, this.y, Renderer_1.RenderingLayer.ENTITIES);\n if (this.scene.showBounds)\n this.drawBounds();\n }\n isCarried() {\n return this.scene.player.isCarrying(this);\n }\n update(dt) {\n super.update(dt);\n if (this.state === WoodState.SWIMMING) {\n const diffX = this.floatingPosition.x - this.x;\n const moveX = Math.min(20, Math.abs(diffX)) * Math.sign(diffX);\n this.x += moveX * dt;\n this.setVelocityY(Math.abs(((util_1.now() % 2000) - 1000) / 1000) - 0.5);\n }\n if (this.state === WoodState.FREE || this.state === WoodState.SWIMMING) {\n const player = this.scene.player;\n if (!this.isCarried() && this.distanceTo(player) < 20) {\n player.carry(this);\n }\n if (!this.isCarried()\n && this.state !== WoodState.SWIMMING\n && this.scene.world.collidesWith(this.x, this.y - 5) === World_1.Environment.WATER) {\n this.state = WoodState.SWIMMING;\n this.setVelocity(0, 0);\n this.setFloating(true);\n this.y = this.floatingPosition.y + 8;\n }\n }\n if (!this.isCarried() && this.distanceTo(this.scene.fire) < 20) {\n this.scene.fire.feed(this);\n this.scene.game.campaign.getQuest(Quests_1.QuestKey.A).trigger(Quests_1.QuestATrigger.THROWN_WOOD_INTO_FIRE);\n Wood_1.successSound.play();\n }\n if (!this.isCarried() && this.distanceTo(this.scene.flameboy) < 20) {\n this.scene.flameboy.feed(this);\n Wood_1.successSound.play();\n }\n }\n};\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/wood.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], Wood, \"sprite\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/throwing/success.mp3\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], Wood, \"successSound\", void 0);\nWood = Wood_1 = tslib_1.__decorate([\n Entity_1.entity(\"wood\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number])\n], Wood);\nexports.Wood = Wood;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZW50aXRpZXMvV29vZC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9lbnRpdGllcy9Xb29kLnRzP2JiNjUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNlcHJpdGUgfSBmcm9tIFwiLi4vQXNlcHJpdGVcIjtcclxuaW1wb3J0IHsgYXNzZXQgfSBmcm9tIFwiLi4vQXNzZXRzXCI7XHJcbmltcG9ydCB7IGVudGl0eSB9IGZyb20gXCIuLi9FbnRpdHlcIjtcclxuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tIFwiLi4vV29ybGRcIjtcclxuaW1wb3J0IHsgR2FtZU9iamVjdEluZm8gfSBmcm9tIFwiLi4vTWFwSW5mb1wiO1xyXG5pbXBvcnQgeyBHYW1lU2NlbmUgfSBmcm9tIFwiLi4vc2NlbmVzL0dhbWVTY2VuZVwiO1xyXG5pbXBvcnQgeyBub3cgfSBmcm9tIFwiLi4vdXRpbFwiO1xyXG5pbXBvcnQgeyBQaHlzaWNzRW50aXR5IH0gZnJvbSBcIi4vUGh5c2ljc0VudGl0eVwiO1xyXG5pbXBvcnQgeyBRdWVzdEFUcmlnZ2VyLCBRdWVzdEtleSB9IGZyb20gXCIuLi9RdWVzdHNcIjtcclxuaW1wb3J0IHsgUmVuZGVyaW5nTGF5ZXIgfSBmcm9tIFwiLi4vUmVuZGVyZXJcIjtcclxuaW1wb3J0IHsgU291bmQgfSBmcm9tIFwiLi4vU291bmRcIjtcclxuXHJcbmV4cG9ydCBlbnVtIFdvb2RTdGF0ZSB7XHJcbiAgICBGUkVFID0gMCxcclxuICAgIFNXSU1NSU5HID0gMVxyXG59XHJcblxyXG5AZW50aXR5KFwid29vZFwiKVxyXG5leHBvcnQgY2xhc3MgV29vZCBleHRlbmRzIFBoeXNpY3NFbnRpdHkge1xyXG4gICAgQGFzc2V0KFwic3ByaXRlcy93b29kLmFzZXByaXRlLmpzb25cIilcclxuICAgIHByaXZhdGUgc3RhdGljIHNwcml0ZTogQXNlcHJpdGU7XHJcblxyXG4gICAgQGFzc2V0KFwic291bmRzL3Rocm93aW5nL3N1Y2Nlc3MubXAzXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBzdWNjZXNzU291bmQ6IFNvdW5kO1xyXG4gICAgcHJpdmF0ZSBmbG9hdGluZ1Bvc2l0aW9uOiBHYW1lT2JqZWN0SW5mbztcclxuXHJcbiAgICBwdWJsaWMgc3RhdGUgPSBXb29kU3RhdGUuRlJFRTtcclxuXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioc2NlbmU6IEdhbWVTY2VuZSwgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcclxuICAgICAgICBzdXBlcihzY2VuZSwgeCwgeSwgMjYsIDE2KTtcclxuXHJcbiAgICAgICAgY29uc3QgZmxvYXRpbmdQb3NpdGlvbiA9IHRoaXMuc2NlbmUucG9pbnRzT2ZJbnRlcmVzdC5maW5kKFxyXG4gICAgICAgICAgICBwb2kgPT4gcG9pLm5hbWUgPT09IFwicmVjb3Zlcl9mbG9hdGluZ19wb3NpdGlvblwiXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKCFmbG9hdGluZ1Bvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvciAoXCJDb3VsZCBub3QgZmluZCBcXFwicmVjb3Zlcl9mbG9hdGluZ19wb3NpdGlvblxcXCIgcG9pbnQgb2YgaW50ZXJlc3QgaW4gZ2FtZSBzY2VuZS5cIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZsb2F0aW5nUG9zaXRpb24gPSBmbG9hdGluZ1Bvc2l0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXNldFN0YXRlICgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNldEZsb2F0aW5nKGZhbHNlKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gV29vZFN0YXRlLkZSRUU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRyYXcoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zY2VuZS5yZW5kZXJlci5hZGRBc2Vwcml0ZShXb29kLnNwcml0ZSwgXCJpZGxlXCIsIHRoaXMueCwgdGhpcy55LCBSZW5kZXJpbmdMYXllci5FTlRJVElFUyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNjZW5lLnNob3dCb3VuZHMpIHRoaXMuZHJhd0JvdW5kcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0NhcnJpZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NlbmUucGxheWVyLmlzQ2FycnlpbmcodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZShkdDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIudXBkYXRlKGR0KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFdvb2RTdGF0ZS5TV0lNTUlORykge1xyXG4gICAgICAgICAgICBjb25zdCBkaWZmWCA9IHRoaXMuZmxvYXRpbmdQb3NpdGlvbi54IC0gdGhpcy54O1xyXG4gICAgICAgICAgICBjb25zdCBtb3ZlWCA9IE1hdGgubWluKDIwLCBNYXRoLmFicyhkaWZmWCkpICogTWF0aC5zaWduKGRpZmZYKTtcclxuICAgICAgICAgICAgdGhpcy54ICs9IG1vdmVYICogZHQ7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmVsb2NpdHlZKE1hdGguYWJzKCgobm93KCkgJSAyMDAwKSAtIDEwMDApIC8gMTAwMCkgLSAwLjUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IFdvb2RTdGF0ZS5GUkVFIHx8IHRoaXMuc3RhdGUgPT09IFdvb2RTdGF0ZS5TV0lNTUlORykge1xyXG4gICAgICAgICAgICBjb25zdCBwbGF5ZXIgPSB0aGlzLnNjZW5lLnBsYXllcjtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0NhcnJpZWQoKSAmJiB0aGlzLmRpc3RhbmNlVG8ocGxheWVyKSA8IDIwKSB7XHJcbiAgICAgICAgICAgICAgICBwbGF5ZXIuY2FycnkodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICF0aGlzLmlzQ2FycmllZCgpXHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLnN0YXRlICE9PSBXb29kU3RhdGUuU1dJTU1JTkdcclxuICAgICAgICAgICAgICAgICYmIHRoaXMuc2NlbmUud29ybGQuY29sbGlkZXNXaXRoKHRoaXMueCwgdGhpcy55IC0gNSkgPT09IEVudmlyb25tZW50LldBVEVSXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFdvb2RTdGF0ZS5TV0lNTUlORztcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmVsb2NpdHkoMCwgMCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZsb2F0aW5nKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy55ID0gdGhpcy5mbG9hdGluZ1Bvc2l0aW9uLnkgKyA4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNDYXJyaWVkKCkgJiYgdGhpcy5kaXN0YW5jZVRvKHRoaXMuc2NlbmUuZmlyZSkgPCAyMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNjZW5lLmZpcmUuZmVlZCh0aGlzKTtcclxuICAgICAgICAgICAgdGhpcy5zY2VuZS5nYW1lLmNhbXBhaWduLmdldFF1ZXN0KFF1ZXN0S2V5LkEpLnRyaWdnZXIoUXVlc3RBVHJpZ2dlci5USFJPV05fV09PRF9JTlRPX0ZJUkUpO1xyXG4gICAgICAgICAgICBXb29kLnN1Y2Nlc3NTb3VuZC5wbGF5KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNDYXJyaWVkKCkgJiYgdGhpcy5kaXN0YW5jZVRvKHRoaXMuc2NlbmUuZmxhbWVib3kpIDwgMjApIHtcclxuICAgICAgICAgICAgdGhpcy5zY2VuZS5mbGFtZWJveS5mZWVkKHRoaXMpO1xyXG4gICAgICAgICAgICBXb29kLnN1Y2Nlc3NTb3VuZC5wbGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQVVBO0FBQ0E7QUFIQTtBQUtBO0FBSUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTdFQTtBQURBO0FBQ0E7QUFBQTtBQUdBO0FBREE7QUFDQTtBQUFBO0FBTEE7QUFEQTtBQVdBO0FBVkE7QUFBQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/entities/Wood.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/geom/Direction.js":
|
|
/*!*******************************!*\
|
|
!*** ./lib/geom/Direction.js ***!
|
|
\*******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Direction = void 0;\nvar Direction;\n(function (Direction) {\n Direction[Direction[\"CENTER\"] = 0] = \"CENTER\";\n Direction[Direction[\"LEFT\"] = 1] = \"LEFT\";\n Direction[Direction[\"RIGHT\"] = 2] = \"RIGHT\";\n Direction[Direction[\"TOP\"] = 4] = \"TOP\";\n Direction[Direction[\"BOTTOM\"] = 8] = \"BOTTOM\";\n Direction[Direction[\"TOP_LEFT\"] = 5] = \"TOP_LEFT\";\n Direction[Direction[\"BOTTOM_LEFT\"] = 9] = \"BOTTOM_LEFT\";\n Direction[Direction[\"TOP_RIGHT\"] = 6] = \"TOP_RIGHT\";\n Direction[Direction[\"BOTTOM_RIGHT\"] = 10] = \"BOTTOM_RIGHT\";\n})(Direction = exports.Direction || (exports.Direction = {}));\n(function (Direction) {\n function isLeft(direction) {\n return (direction & Direction.LEFT) !== 0;\n }\n Direction.isLeft = isLeft;\n function isRight(direction) {\n return (direction & Direction.RIGHT) !== 0;\n }\n Direction.isRight = isRight;\n function isTop(direction) {\n return (direction & Direction.TOP) !== 0;\n }\n Direction.isTop = isTop;\n function isBottom(direction) {\n return (direction & Direction.BOTTOM) !== 0;\n }\n Direction.isBottom = isBottom;\n function isHorizontal(direction) {\n return isLeft(direction) || isRight(direction);\n }\n Direction.isHorizontal = isHorizontal;\n function isVertical(direction) {\n return isLeft(direction) || isRight(direction);\n }\n Direction.isVertical = isVertical;\n function isEdge(direction) {\n return direction === Direction.LEFT\n || direction === Direction.RIGHT\n || direction === Direction.TOP\n || direction === Direction.BOTTOM;\n }\n Direction.isEdge = isEdge;\n function isCorner(direction) {\n return direction === Direction.TOP_LEFT\n || direction === Direction.TOP_RIGHT\n || direction === Direction.BOTTOM_LEFT\n || direction === Direction.BOTTOM_RIGHT;\n }\n Direction.isCorner = isCorner;\n function getX(direction) {\n return isLeft(direction) ? -1 : isRight(direction) ? 1 : 0;\n }\n Direction.getX = getX;\n function getY(direction) {\n return isTop(direction) ? -1 : isBottom(direction) ? 1 : 0;\n }\n Direction.getY = getY;\n})(Direction = exports.Direction || (exports.Direction = {}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZ2VvbS9EaXJlY3Rpb24uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZ2VvbS9EaXJlY3Rpb24udHM/YzE1ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBEaXJlY3Rpb24ge1xyXG4gICAgQ0VOVEVSID0gMCxcclxuICAgIExFRlQgPSAxLFxyXG4gICAgUklHSFQgPSAyLFxyXG4gICAgVE9QID0gNCxcclxuICAgIEJPVFRPTSA9IDgsXHJcbiAgICBUT1BfTEVGVCA9IFRPUCB8IExFRlQsXHJcbiAgICBCT1RUT01fTEVGVCA9IEJPVFRPTSB8IExFRlQsXHJcbiAgICBUT1BfUklHSFQgPSBUT1AgfCBSSUdIVCxcclxuICAgIEJPVFRPTV9SSUdIVCA9IEJPVFRPTSB8IFJJR0hUXHJcbn1cclxuXHJcbmV4cG9ydCBuYW1lc3BhY2UgRGlyZWN0aW9uIHtcclxuICAgIGV4cG9ydCBmdW5jdGlvbiBpc0xlZnQoZGlyZWN0aW9uOiBEaXJlY3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKGRpcmVjdGlvbiAmIERpcmVjdGlvbi5MRUZUKSAhPT0gMDtcclxuICAgIH1cclxuXHJcbiAgICBleHBvcnQgZnVuY3Rpb24gaXNSaWdodChkaXJlY3Rpb246IERpcmVjdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoZGlyZWN0aW9uICYgRGlyZWN0aW9uLlJJR0hUKSAhPT0gMDtcclxuICAgIH1cclxuXHJcbiAgICBleHBvcnQgZnVuY3Rpb24gaXNUb3AoZGlyZWN0aW9uOiBEaXJlY3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKGRpcmVjdGlvbiAmIERpcmVjdGlvbi5UT1ApICE9PSAwO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydCBmdW5jdGlvbiBpc0JvdHRvbShkaXJlY3Rpb246IERpcmVjdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoZGlyZWN0aW9uICYgRGlyZWN0aW9uLkJPVFRPTSkgIT09IDA7XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzSG9yaXpvbnRhbChkaXJlY3Rpb246IERpcmVjdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBpc0xlZnQoZGlyZWN0aW9uKSB8fCBpc1JpZ2h0KGRpcmVjdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGlzVmVydGljYWwoZGlyZWN0aW9uOiBEaXJlY3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gaXNMZWZ0KGRpcmVjdGlvbikgfHwgaXNSaWdodChkaXJlY3Rpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydCBmdW5jdGlvbiBpc0VkZ2UoZGlyZWN0aW9uOiBEaXJlY3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gZGlyZWN0aW9uID09PSBEaXJlY3Rpb24uTEVGVFxyXG4gICAgICAgICAgICB8fCBkaXJlY3Rpb24gPT09IERpcmVjdGlvbi5SSUdIVFxyXG4gICAgICAgICAgICB8fCBkaXJlY3Rpb24gPT09IERpcmVjdGlvbi5UT1BcclxuICAgICAgICAgICAgfHwgZGlyZWN0aW9uID09PSBEaXJlY3Rpb24uQk9UVE9NO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydCBmdW5jdGlvbiBpc0Nvcm5lcihkaXJlY3Rpb246IERpcmVjdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBkaXJlY3Rpb24gPT09IERpcmVjdGlvbi5UT1BfTEVGVFxyXG4gICAgICAgICAgICB8fCBkaXJlY3Rpb24gPT09IERpcmVjdGlvbi5UT1BfUklHSFRcclxuICAgICAgICAgICAgfHwgZGlyZWN0aW9uID09PSBEaXJlY3Rpb24uQk9UVE9NX0xFRlRcclxuICAgICAgICAgICAgfHwgZGlyZWN0aW9uID09PSBEaXJlY3Rpb24uQk9UVE9NX1JJR0hUO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydCBmdW5jdGlvbiBnZXRYKGRpcmVjdGlvbjogRGlyZWN0aW9uKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gaXNMZWZ0KGRpcmVjdGlvbikgPyAtMSA6IGlzUmlnaHQoZGlyZWN0aW9uKSA/IDEgOiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydCBmdW5jdGlvbiBnZXRZKGRpcmVjdGlvbjogRGlyZWN0aW9uKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gaXNUb3AoZGlyZWN0aW9uKSA/IC0xIDogaXNCb3R0b20oZGlyZWN0aW9uKSA/IDEgOiAwO1xyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUdBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/geom/Direction.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/graphics.js":
|
|
/*!*************************!*\
|
|
!*** ./lib/graphics.js ***!
|
|
\*************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getImageData = exports.createContext2D = exports.getRenderingContext = exports.createCanvas = exports.loadImage = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nfunction loadImage(source) {\n return tslib_1.__awaiter(this, void 0, void 0, function* () {\n const img = new Image();\n return new Promise((resolve, reject) => {\n img.onload = () => {\n resolve(img);\n };\n img.onerror = () => {\n reject(new Error(`Unable to load image '${source}'`));\n };\n img.src = source instanceof URL ? source.href : `assets/${source}`;\n });\n });\n}\nexports.loadImage = loadImage;\nfunction createCanvas(width, height) {\n const canvas = document.createElement(\"canvas\");\n canvas.width = width;\n canvas.height = height;\n return canvas;\n}\nexports.createCanvas = createCanvas;\nfunction getRenderingContext(canvas, contextId, options) {\n const ctx = canvas.getContext(contextId, options);\n if (ctx == null) {\n throw new Error(`Canvas doesn't support context with id '${contextId}'`);\n }\n return ctx;\n}\nexports.getRenderingContext = getRenderingContext;\nfunction createContext2D(width, height) {\n return getRenderingContext(createCanvas(width, height), \"2d\");\n}\nexports.createContext2D = createContext2D;\nfunction getImageData(image) {\n const ctx = createContext2D(image.width, image.height);\n ctx.drawImage(image, 0, 0, image.width, image.height);\n return ctx.getImageData(0, 0, image.width, image.height);\n}\nexports.getImageData = getImageData;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZ3JhcGhpY3MuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZ3JhcGhpY3MudHM/MzZlOSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZEltYWdlKHNvdXJjZTogc3RyaW5nIHwgVVJMKTogUHJvbWlzZTxIVE1MSW1hZ2VFbGVtZW50PiB7XHJcbiAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxIVE1MSW1hZ2VFbGVtZW50PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgcmVzb2x2ZShpbWcpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaW1nLm9uZXJyb3IgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2FkIGltYWdlICcke3NvdXJjZX0nYCkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaW1nLnNyYyA9IHNvdXJjZSBpbnN0YW5jZW9mIFVSTCA/IHNvdXJjZS5ocmVmIDogYGFzc2V0cy8ke3NvdXJjZX1gO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYW52YXMod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBIVE1MQ2FudmFzRWxlbWVudCB7XHJcbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpITtcclxuXHJcbiAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcclxuICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgcmV0dXJuIGNhbnZhcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlbmRlcmluZ0NvbnRleHQoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCwgY29udGV4dElkOiBcIjJkXCIsXHJcbiAgICBvcHRpb25zPzogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEU2V0dGluZ3MpOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSZW5kZXJpbmdDb250ZXh0KGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsIGNvbnRleHRJZDogc3RyaW5nLCBvcHRpb25zPzogdW5rbm93bik6IFJlbmRlcmluZ0NvbnRleHQge1xyXG4gICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoY29udGV4dElkLCBvcHRpb25zKTtcclxuICAgIGlmIChjdHggPT0gbnVsbCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FudmFzIGRvZXNuJ3Qgc3VwcG9ydCBjb250ZXh0IHdpdGggaWQgJyR7Y29udGV4dElkfSdgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjdHg7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb250ZXh0MkQod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQge1xyXG4gICAgcmV0dXJuIGdldFJlbmRlcmluZ0NvbnRleHQoY3JlYXRlQ2FudmFzKHdpZHRoLCBoZWlnaHQpLCBcIjJkXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW1hZ2VEYXRhKGltYWdlOiBIVE1MSW1hZ2VFbGVtZW50KTogSW1hZ2VEYXRhIHtcclxuICAgIGNvbnN0IGN0eCA9IGNyZWF0ZUNvbnRleHQyRChpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0KTtcclxuICAgIGN0eC5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDAsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQpO1xyXG5cclxuICAgIHJldHVybiBjdHguZ2V0SW1hZ2VEYXRhKDAsIDAsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQpO1xyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVhBO0FBYUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBUEE7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBTEE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/graphics.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/graphics/AffineTransform.js":
|
|
/*!*****************************************!*\
|
|
!*** ./lib/graphics/AffineTransform.js ***!
|
|
\*****************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AffineTransform = void 0;\n/**\n * Affine transformation matrix. It behaves like a 3x3 matrix where the third row is always assumed to be 0 0 1.\n * This matrix is useful for 2D transformations and is compatible to the transformations done in a Canvas for example.\n */\nclass AffineTransform {\n constructor(m11 = 1, m12 = 0, m21 = 0, m22 = 1, dx = 0, dy = 0) {\n this.m11 = m11;\n this.m12 = m12;\n this.m21 = m21;\n this.m22 = m22;\n this.dx = dx;\n this.dy = dy;\n }\n /**\n * Creates a new affine transformation from the given DOM matrix object.\n *\n * @aram domMatrix - The DOM matrix object. Must be a 2D matrix.\n * @return The created affine transformation.\n */\n static fromDOMMatrix(domMatrix) {\n if (!domMatrix.is2D) {\n throw new Error(\"Can only create Matrix3 from 2D DOMMatrix\");\n }\n return new AffineTransform(domMatrix.a, domMatrix.b, domMatrix.c, domMatrix.d, domMatrix.e, domMatrix.f);\n }\n /**\n * Returns a clone of this matrix.\n *\n * @return The cloned matrix.\n */\n clone() {\n return new AffineTransform(this.m11, this.m12, this.m21, this.m22, this.dx, this.dy);\n }\n /**\n * Converts this matrix into a DOM matrix.\n *\n * @return The created DOM matrix.\n */\n toDOMMatrix() {\n return new DOMMatrix([this.m11, this.m12, this.m21, this.m22, this.dx, this.dy]);\n }\n /**\n * Returns a human-readable string representation of the matrix.\n *\n * @return The human-readable string representation of the matrix.\n */\n toString() {\n return `[ ${this.m11}, ${this.m12}, ${this.m21}, ${this.m22}, ${this.dx}, ${this.dy} ]`;\n }\n /**\n * Sets the matrix component values.\n *\n * @param m11 - The horizontal scaling. A value of 1 results in no scaling.\n * @param m12 - The vertical skewing.\n * @param m21 - The horizontal skewing.\n * @param m22 - The vertical scaling. A value of 1 results in no scaling.\n * @param dx - The horizontal translation (moving).\n * @param dy - The vertical translation (moving).\n */\n setComponents(m11, m12, m21, m22, dx, dy) {\n this.m11 = m11;\n this.m12 = m12;\n this.m21 = m21;\n this.m22 = m22;\n this.dx = dx;\n this.dy = dy;\n return this;\n }\n /**\n * Sets the matrix component values from another matrix.\n *\n * @param matrix - The matrix to copy the component values from.\n */\n setMatrix(matrix) {\n this.m11 = matrix.m11;\n this.m12 = matrix.m12;\n this.m21 = matrix.m21;\n this.m22 = matrix.m22;\n this.dx = matrix.dx;\n this.dy = matrix.dy;\n return this;\n }\n /**\n * Checks if matrix is identity.\n *\n * @return True if identity, false if not.\n */\n isIdentity() {\n return this.m11 === 1\n && this.m12 === 0\n && this.m21 === 0\n && this.m22 === 1\n && this.dx === 0\n && this.dy === 0;\n }\n /**\n * Resets this matrix to identity.\n */\n reset() {\n this.m11 = 1;\n this.m12 = 0;\n this.m21 = 0;\n this.m22 = 1;\n this.dx = 0;\n this.dy = 0;\n return this;\n }\n /**\n * Multiplies this matrix with the specified matrix (`this = this * other`).\n *\n * @param other - The other matrix to multiply this one with.\n */\n mul(other) {\n const a11 = this.m11, a12 = this.m12;\n const a21 = this.m21, a22 = this.m22;\n const a31 = this.dx, a32 = this.dy;\n const b11 = other.m11, b12 = other.m12;\n const b21 = other.m21, b22 = other.m22;\n const b31 = other.dx, b32 = other.dy;\n this.m11 = a11 * b11 + a21 * b12;\n this.m12 = a12 * b11 + a22 * b12;\n this.m21 = a11 * b21 + a21 * b22;\n this.m22 = a12 * b21 + a22 * b22;\n this.dx = a11 * b31 + a21 * b32 + a31;\n this.dy = a12 * b31 + a22 * b32 + a32;\n return this;\n }\n /**\n * Divides this matrix by the specified matrix (`this = this / other` which is the same as\n * `this = this * inverse(other)`).\n *\n * @param other - The other matrix to divide this one by.\n */\n div(other) {\n // a = this, b = other\n const a11 = this.m11, a12 = this.m12;\n const a21 = this.m21, a22 = this.m22;\n const a31 = this.dx, a32 = this.dy;\n const b11 = other.m11, b12 = other.m12;\n const b21 = other.m21, b22 = other.m22;\n const b31 = other.dx, b32 = other.dy;\n // d = determinant(b)\n const d = b11 * b22 - b21 * b12;\n // c = invert(b)\n const c11 = b22 / d;\n const c12 = -b12 / d;\n const c21 = -b21 / d;\n const c22 = b11 / d;\n const c31 = (b21 * b32 - b31 * b22) / d;\n const c32 = (b31 * b12 - b11 * b32) / d;\n // this = this * c\n this.m11 = a11 * c11 + a21 * c12;\n this.m12 = a12 * c11 + a22 * c12;\n this.m21 = a11 * c21 + a21 * c22;\n this.m22 = a12 * c21 + a22 * c22;\n this.dx = a11 * c31 + a21 * c32 + a31;\n this.dy = a12 * c31 + a22 * c32 + a32;\n return this;\n }\n /**\n * Returns the determinant of this matrix.\n *\n * @return The determinant of this matrix.\n */\n getDeterminant() {\n return this.m11 * this.m22 - this.m21 * this.m12;\n }\n /**\n * Inverts this matrix.\n */\n invert() {\n const m11 = this.m11, m12 = this.m12;\n const m21 = this.m21, m22 = this.m22;\n const m31 = this.dx, m32 = this.dy;\n const d = m11 * m22 - m21 * m12;\n this.m11 = m22 / d;\n this.m12 = -m12 / d;\n this.m21 = -m21 / d;\n this.m22 = m11 / d;\n this.dx = (m21 * m32 - m31 * m22) / d;\n this.dy = (m31 * m12 - m11 * m32) / d;\n return this;\n }\n /**\n * Translates this matrix by the specified values.\n *\n * @param dx - The X translation.\n * @param dy - The Y translation.\n */\n translate(dx, dy) {\n this.dx += dx * this.m11 + dy * this.m21;\n this.dy += dx * this.m12 + dy * this.m22;\n return this;\n }\n /**\n * Translates this matrix by the specified X delta.\n *\n * @param d - The X translation delta.\n */\n translateX(d) {\n this.dx += d * this.m11;\n this.dy += d * this.m12;\n return this;\n }\n /**\n * Returns the X translation of the matrix.\n *\n * @return The X translation.\n */\n getTranslationX() {\n return this.dx;\n }\n /**\n * Translates this matrix by the specified Y delta.\n *\n * @param d - The Y translation delta.\n */\n translateY(d) {\n this.dx += d * this.m21;\n this.dy += d * this.m22;\n return this;\n }\n /**\n * Returns the Y translation of the matrix.\n *\n * @return The Y translation.\n */\n getTranslationY() {\n return this.dy;\n }\n /**\n * Sets matrix to a translation matrix.\n *\n * @param dx - The X translation.\n * @param dy - The Y translation.\n */\n setTranslation(dx, dy) {\n this.m11 = 1;\n this.m12 = 0;\n this.m21 = 0;\n this.m22 = 1;\n this.dx = dx;\n this.dy = dy;\n return this;\n }\n /**\n * Creates matrix initialized to a translation matrix.\n *\n * @param dx - The X translation.\n * @param dy - The Y translation.\n */\n static createTranslation(dx, dy) {\n return new AffineTransform().setTranslation(dx, dy);\n }\n /**\n * Scales this matrix by the specified factor.\n *\n * @param sx - The X scale factor.\n * @param sy - The Y scale factor. Defaults to X scale factor.\n */\n scale(sx, sy = sx) {\n this.m11 *= sx;\n this.m12 *= sx;\n this.m21 *= sy;\n this.m22 *= sy;\n return this;\n }\n /**\n * Sets matrix to a scale matrix.\n *\n * @param sx - The X scale factor.\n * @param sy - The Y scale factor. Defaults to X scale factor.\n */\n setScale(sx, sy = sx) {\n this.m11 = sx;\n this.m12 = 0;\n this.m21 = 0;\n this.m22 = sy;\n this.dx = 0;\n this.dy = 0;\n return this;\n }\n /**\n * Scales this matrix by the specified factor along the X axis.\n *\n * @param s - The scale factor.\n */\n scaleX(s) {\n this.m11 *= s;\n this.m12 *= s;\n return this;\n }\n /**\n * Returns the X scale factor of the matrix.\n *\n * @return The X scale factor of the matrix.\n */\n getScaleX() {\n return Math.hypot(this.m11, this.m21);\n }\n /**\n * Scales this matrix by the specified factor along the Y axis.\n *\n * @param s - The scale factor.\n */\n scaleY(s) {\n this.m21 *= s;\n this.m22 *= s;\n return this;\n }\n /**\n * Returns the Y scale factor of the matrix.\n *\n * @return The Y scale factor of the matrix.\n */\n getScaleY() {\n return Math.hypot(this.m12, this.m22);\n }\n /**\n * Creates matrix initialized to a scale matrix.\n *\n * @param sx - The X scale factor.\n * @param sy - The Y scale factor. Defaults to X scale factor.\n */\n static createScale(sx, sy) {\n return new AffineTransform().setScale(sx, sy);\n }\n /**\n * Rotates this matrix by the given angle.\n *\n * @param angle - The rotation angle in RAD.\n */\n rotate(angle) {\n const m11 = this.m11, m12 = this.m12;\n const m21 = this.m21, m22 = this.m22;\n const s = Math.sin(angle), c = Math.cos(angle);\n this.m11 = c * m11 + s * m21;\n this.m12 = c * m12 + s * m22;\n this.m21 = c * m21 - s * m11;\n this.m22 = c * m22 - s * m12;\n return this;\n }\n /**\n * Returns the rotation of this matrix in radians.\n *\n * @return The rotation angle in radians.\n */\n getRotation() {\n const m11 = this.m11, m12 = this.m12;\n const m21 = this.m21, m22 = this.m22;\n if (m11 !== 0 || m21 !== 0) {\n const acos = Math.acos(m11 / Math.hypot(m11, m21));\n return m21 > 0 ? -acos : acos;\n }\n else if (m12 !== 0 || m22 !== 0) {\n const acos = Math.acos(m12 / Math.hypot(m12, m22));\n return Math.PI / 2 + (m22 > 0 ? -acos : acos);\n }\n else {\n return 0;\n }\n }\n /**\n * Sets matrix to a rotation matrix.\n *\n * @param angle - The rotation angle in RAD.\n */\n setRotation(angle) {\n const s = Math.sin(angle), c = Math.cos(angle);\n this.m11 = c;\n this.m12 = s;\n this.m21 = -s;\n this.m22 = c;\n this.dx = 0;\n this.dy = 0;\n return this;\n }\n /**\n * Create new matrix initialized to a rotation matrix.\n *\n * @param angle - The rotation angle in RAD.\n */\n static createRotation(angle) {\n return new AffineTransform().setRotation(angle);\n }\n /**\n * Transforms the given 2D canvas rendering context.\n *\n * @param ctx - The 2D canvas rendering context to transform.\n */\n transformCanvas(ctx) {\n ctx.transform(this.m11, this.m12, this.m21, this.m22, this.dx, this.dy);\n return this;\n }\n /**\n * Sets the transformation of the given 2D canvas rendering context.\n *\n * @param ctx - The 2D canvas rendering context to set the transformation on.\n */\n setCanvasTransform(ctx) {\n ctx.setTransform(this.m11, this.m12, this.m21, this.m22, this.dx, this.dy);\n return this;\n }\n}\nexports.AffineTransform = AffineTransform;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZ3JhcGhpY3MvQWZmaW5lVHJhbnNmb3JtLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2dyYXBoaWNzL0FmZmluZVRyYW5zZm9ybS50cz8wZThmIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBBZmZpbmUgdHJhbnNmb3JtYXRpb24gbWF0cml4LiBJdCBiZWhhdmVzIGxpa2UgYSAzeDMgbWF0cml4IHdoZXJlIHRoZSB0aGlyZCByb3cgaXMgYWx3YXlzIGFzc3VtZWQgdG8gYmUgMCAwIDEuXHJcbiAqIFRoaXMgbWF0cml4IGlzIHVzZWZ1bCBmb3IgMkQgdHJhbnNmb3JtYXRpb25zIGFuZCBpcyBjb21wYXRpYmxlIHRvIHRoZSB0cmFuc2Zvcm1hdGlvbnMgZG9uZSBpbiBhIENhbnZhcyBmb3IgZXhhbXBsZS5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBBZmZpbmVUcmFuc2Zvcm0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbWF0cml4IGluaXRpYWxpemVkIHRvIGFuIGlkZW50aXR5IG1hdHJpeC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IG1hdHJpeCBpbml0aWFsaXplZCB0byB0aGUgZ2l2ZW4gY29tcG9uZW50IHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gbTExIC0gVGhlIGhvcml6b250YWwgc2NhbGluZy4gQSB2YWx1ZSBvZiAxIHJlc3VsdHMgaW4gbm8gc2NhbGluZy5cclxuICAgICAqIEBwYXJhbSBtMTIgLSBUaGUgdmVydGljYWwgc2tld2luZy5cclxuICAgICAqIEBwYXJhbSBtMjEgLSBUaGUgaG9yaXpvbnRhbCBza2V3aW5nLlxyXG4gICAgICogQHBhcmFtIG0yMiAtIFRoZSB2ZXJ0aWNhbCBzY2FsaW5nLiBBIHZhbHVlIG9mIDEgcmVzdWx0cyBpbiBubyBzY2FsaW5nLlxyXG4gICAgICogQHBhcmFtIGR4ICAtIFRoZSBob3Jpem9udGFsIHRyYW5zbGF0aW9uIChtb3ZpbmcpLlxyXG4gICAgICogQHBhcmFtIGR5ICAtIFRoZSB2ZXJ0aWNhbCB0cmFuc2xhdGlvbiAobW92aW5nKS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG0xMTogbnVtYmVyLCBtMTI6IG51bWJlciwgbTIxOiBudW1iZXIsIG0yMjogbnVtYmVyLCBkeDogbnVtYmVyLCBkeTogbnVtYmVyKTtcclxuXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIG0xMTogbnVtYmVyID0gMSxcclxuICAgICAgICBwdWJsaWMgbTEyOiBudW1iZXIgPSAwLFxyXG4gICAgICAgIHB1YmxpYyBtMjE6IG51bWJlciA9IDAsXHJcbiAgICAgICAgcHVibGljIG0yMjogbnVtYmVyID0gMSxcclxuICAgICAgICBwdWJsaWMgZHg6IG51bWJlciA9IDAsXHJcbiAgICAgICAgcHVibGljIGR5OiBudW1iZXIgPSAwLFxyXG4gICAgKSB7fVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBhZmZpbmUgdHJhbnNmb3JtYXRpb24gZnJvbSB0aGUgZ2l2ZW4gRE9NIG1hdHJpeCBvYmplY3QuXHJcbiAgICAgKlxyXG4gICAgICogQGFyYW0gZG9tTWF0cml4IC0gVGhlIERPTSBtYXRyaXggb2JqZWN0LiBNdXN0IGJlIGEgMkQgbWF0cml4LlxyXG4gICAgICogQHJldHVybiBUaGUgY3JlYXRlZCBhZmZpbmUgdHJhbnNmb3JtYXRpb24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbURPTU1hdHJpeChkb21NYXRyaXg6IERPTU1hdHJpeCk6IEFmZmluZVRyYW5zZm9ybSB7XHJcbiAgICAgICAgaWYgKCFkb21NYXRyaXguaXMyRCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4gb25seSBjcmVhdGUgTWF0cml4MyBmcm9tIDJEIERPTU1hdHJpeFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBBZmZpbmVUcmFuc2Zvcm0oXHJcbiAgICAgICAgICAgIGRvbU1hdHJpeC5hLCBkb21NYXRyaXguYixcclxuICAgICAgICAgICAgZG9tTWF0cml4LmMsIGRvbU1hdHJpeC5kLFxyXG4gICAgICAgICAgICBkb21NYXRyaXguZSwgZG9tTWF0cml4LmZcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIGNsb25lIG9mIHRoaXMgbWF0cml4LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gVGhlIGNsb25lZCBtYXRyaXguXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjbG9uZSgpOiBBZmZpbmVUcmFuc2Zvcm0ge1xyXG4gICAgICAgIHJldHVybiBuZXcgQWZmaW5lVHJhbnNmb3JtKHRoaXMubTExLCB0aGlzLm0xMiwgdGhpcy5tMjEsIHRoaXMubTIyLCB0aGlzLmR4LCB0aGlzLmR5KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnZlcnRzIHRoaXMgbWF0cml4IGludG8gYSBET00gbWF0cml4LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gVGhlIGNyZWF0ZWQgRE9NIG1hdHJpeC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHRvRE9NTWF0cml4KCk6IERPTU1hdHJpeCB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBET01NYXRyaXgoWyB0aGlzLm0xMSwgdGhpcy5tMTIsIHRoaXMubTIxLCB0aGlzLm0yMiwgdGhpcy5keCwgdGhpcy5keSBdKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGBbICR7dGhpcy5tMTF9LCAke3RoaXMubTEyfSwgJHt0aGlzLm0yMX0sICR7dGhpcy5tMjJ9LCAke3RoaXMuZHh9LCAke3RoaXMuZHl9IF1gO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgbWF0cml4IGNvbXBvbmVudCB2YWx1ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG0xMSAtIFRoZSBob3Jpem9udGFsIHNjYWxpbmcuIEEgdmFsdWUgb2YgMSByZXN1bHRzIGluIG5vIHNjYWxpbmcuXHJcbiAgICAgKiBAcGFyYW0gbTEyIC0gVGhlIHZlcnRpY2FsIHNrZXdpbmcuXHJcbiAgICAgKiBAcGFyYW0gbTIxIC0gVGhlIGhvcml6b250YWwgc2tld2luZy5cclxuICAgICAqIEBwYXJhbSBtMjIgLSBUaGUgdmVydGljYWwgc2NhbGluZy4gQSB2YWx1ZSBvZiAxIHJlc3VsdHMgaW4gbm8gc2NhbGluZy5cclxuICAgICAqIEBwYXJhbSBkeCAgLSBUaGUgaG9yaXpvbnRhbCB0cmFuc2xhdGlvbiAobW92aW5nKS5cclxuICAgICAqIEBwYXJhbSBkeSAgLSBUaGUgdmVydGljYWwgdHJhbnNsYXRpb24gKG1vdmluZykuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRDb21wb25lbnRzKG0xMTogbnVtYmVyLCBtMTI6IG51bWJlciwgbTIxOiBudW1iZXIsIG0yMjogbnVtYmVyLCBkeDogbnVtYmVyLCBkeTogbnVtYmVyKTogdGhpcyB7XHJcbiAgICAgICAgdGhpcy5tMTEgPSBtMTE7XHJcbiAgICAgICAgdGhpcy5tMTIgPSBtMTI7XHJcbiAgICAgICAgdGhpcy5tMjEgPSBtMjE7XHJcbiAgICAgICAgdGhpcy5tMjIgPSBtMjI7XHJcbiAgICAgICAgdGhpcy5keCA9IGR4O1xyXG4gICAgICAgIHRoaXMuZHkgPSBkeTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIG1hdHJpeCBjb21wb25lbnQgdmFsdWVzIGZyb20gYW5vdGhlciBtYXRyaXguXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG1hdHJpeCAtIFRoZSBtYXRyaXggdG8gY29weSB0aGUgY29tcG9uZW50IHZhbHVlcyBmcm9tLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0TWF0cml4KG1hdHJpeDogQWZmaW5lVHJhbnNmb3JtKTogdGhpcyB7XHJcbiAgICAgICAgdGhpcy5tMTEgPSBtYXRyaXgubTExO1xyXG4gICAgICAgIHRoaXMubTEyID0gbWF0cml4Lm0xMjtcclxuICAgICAgICB0aGlzLm0yMSA9IG1hdHJpeC5tMjE7XHJcbiAgICAgICAgdGhpcy5tMjIgPSBtYXRyaXgubTIyO1xyXG4gICAgICAgIHRoaXMuZHggPSBtYXRyaXguZHg7XHJcbiAgICAgICAgdGhpcy5keSA9IG1hdHJpeC5keTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBtYXRyaXggaXMgaWRlbnRpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBUcnVlIGlmIGlkZW50aXR5LCBmYWxzZSBpZiBub3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc0lkZW50aXR5KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm0xMSA9PT0gMVxyXG4gICAgICAgICAgICAmJiB0aGlzLm0xMiA9PT0gMFxyXG4gICAgICAgICAgICAmJiB0aGlzLm0yMSA9PT0gMFxyXG4gICAgICAgICAgICAmJiB0aGlzLm0yMiA9PT0gMVxyXG4gICAgICAgICAgICAmJiB0aGlzLmR4ID09PSAwXHJcbiAgICAgICAgICAgICYmIHRoaXMuZHkgPT09IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNldHMgdGhpcyBtYXRyaXggdG8gaWRlbnRpdHkuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZXNldCgpOiB0aGlzIHtcclxuICAgICAgICB0aGlzLm0xMSA9IDE7XHJcbiAgICAgICAgdGhpcy5tMTIgPSAwO1xyXG4gICAgICAgIHRoaXMubTIxID0gMDtcclxuICAgICAgICB0aGlzLm0yMiA9IDE7XHJcbiAgICAgICAgdGhpcy5keCA9IDA7XHJcbiAgICAgICAgdGhpcy5keSA9IDA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNdWx0aXBsaWVzIHRoaXMgbWF0cml4IHdpdGggdGhlIHNwZWNpZmllZCBtYXRyaXggKGB0aGlzID0gdGhpcyAqIG90aGVyYCkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG90aGVyIC0gVGhlIG90aGVyIG1hdHJpeCB0byBtdWx0aXBseSB0aGlzIG9uZSB3aXRoLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbXVsKG90aGVyOiBBZmZpbmVUcmFuc2Zvcm0pOiB0aGlzIHtcclxuICAgICAgICBjb25zdCBhMTEgPSB0aGlzLm0xMSwgYTEyID0gdGhpcy5tMTI7XHJcbiAgICAgICAgY29uc3QgYTIxID0gdGhpcy5tMjEsIGEyMiA9IHRoaXMubTIyO1xyXG4gICAgICAgIGNvbnN0IGEzMSA9IHRoaXMuZHgsIGEzMiA9IHRoaXMuZHk7XHJcbiAgICAgICAgY29uc3QgYjExID0gb3RoZXIubTExLCBiMTIgPSBvdGhlci5tMTI7XHJcbiAgICAgICAgY29uc3QgYjIxID0gb3RoZXIubTIxLCBiMjIgPSBvdGhlci5tMjI7XHJcbiAgICAgICAgY29uc3QgYjMxID0gb3RoZXIuZHgsIGIzMiA9IG90aGVyLmR5O1xyXG4gICAgICAgIHRoaXMubTExID0gYTExICogYjExICsgYTIxICogYjEyO1xyXG4gICAgICAgIHRoaXMubTEyID0gYTEyICogYjExICsgYTIyICogYjEyO1xyXG4gICAgICAgIHRoaXMubTIxID0gYTExICogYjIxICsgYTIxICogYjIyO1xyXG4gICAgICAgIHRoaXMubTIyID0gYTEyICogYjIxICsgYTIyICogYjIyO1xyXG4gICAgICAgIHRoaXMuZHggPSBhMTEgKiBiMzEgKyBhMjEgKiBiMzIgKyBhMzE7XHJcbiAgICAgICAgdGhpcy5keSA9IGExMiAqIGIzMSArIGEyMiAqIGIzMiArIGEzMjtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERpdmlkZXMgdGhpcyBtYXRyaXggYnkgdGhlIHNwZWNpZmllZCBtYXRyaXggKGB0aGlzID0gdGhpcyAvIG90aGVyYCB3aGljaCBpcyB0aGUgc2FtZSBhc1xyXG4gICAgICogYHRoaXMgPSB0aGlzICogaW52ZXJzZShvdGhlcilgKS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3RoZXIgLSBUaGUgb3RoZXIgbWF0cml4IHRvIGRpdmlkZSB0aGlzIG9uZSBieS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGRpdihvdGhlcjogQWZmaW5lVHJhbnNmb3JtKTogdGhpcyB7XHJcbiAgICAgICAgLy8gYSA9IHRoaXMsIGIgPSBvdGhlclxyXG4gICAgICAgIGNvbnN0IGExMSA9IHRoaXMubTExLCBhMTIgPSB0aGlzLm0xMjtcclxuICAgICAgICBjb25zdCBhMjEgPSB0aGlzLm0yMSwgYTIyID0gdGhpcy5tMjI7XHJcbiAgICAgICAgY29uc3QgYTMxID0gdGhpcy5keCwgYTMyID0gdGhpcy5keTtcclxuICAgICAgICBjb25zdCBiMTEgPSBvdGhlci5tMTEsIGIxMiA9IG90aGVyLm0xMjtcclxuICAgICAgICBjb25zdCBiMjEgPSBvdGhlci5tMjEsIGIyMiA9IG90aGVyLm0yMjtcclxuICAgICAgICBjb25zdCBiMzEgPSBvdGhlci5keCwgYjMyID0gb3RoZXIuZHk7XHJcblxyXG4gICAgICAgIC8vIGQgPSBkZXRlcm1pbmFudChiKVxyXG4gICAgICAgIGNvbnN0IGQgPSBiMTEgKiBiMjIgLSBiMjEgKiBiMTI7XHJcblxyXG4gICAgICAgIC8vIGMgPSBpbnZlcnQoYilcclxuICAgICAgICBjb25zdCBjMTEgPSBiMjIgLyBkO1xyXG4gICAgICAgIGNvbnN0IGMxMiA9IC1iMTIgLyBkO1xyXG4gICAgICAgIGNvbnN0IGMyMSA9IC1iMjEgLyBkO1xyXG4gICAgICAgIGNvbnN0IGMyMiA9IGIxMSAvIGQ7XHJcbiAgICAgICAgY29uc3QgYzMxID0gKGIyMSAqIGIzMiAtIGIzMSAqIGIyMikgLyBkO1xyXG4gICAgICAgIGNvbnN0IGMzMiA9IChiMzEgKiBiMTIgLSBiMTEgKiBiMzIpIC8gZDtcclxuXHJcbiAgICAgICAgLy8gdGhpcyA9IHRoaXMgKiBjXHJcbiAgICAgICAgdGhpcy5tMTEgPSBhMTEgKiBjMTEgKyBhMjEgKiBjMTI7XHJcbiAgICAgICAgdGhpcy5tMTIgPSBhMTIgKiBjMTEgKyBhMjIgKiBjMTI7XHJcbiAgICAgICAgdGhpcy5tMjEgPSBhMTEgKiBjMjEgKyBhMjEgKiBjMjI7XHJcbiAgICAgICAgdGhpcy5tMjIgPSBhMTIgKiBjMjEgKyBhMjIgKiBjMjI7XHJcbiAgICAgICAgdGhpcy5keCA9IGExMSAqIGMzMSArIGEyMSAqIGMzMiArIGEzMTtcclxuICAgICAgICB0aGlzLmR5ID0gYTEyICogYzMxICsgYTIyICogYzMyICsgYTMyO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGRldGVybWluYW50IG9mIHRoaXMgbWF0cml4LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gVGhlIGRldGVybWluYW50IG9mIHRoaXMgbWF0cml4LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0RGV0ZXJtaW5hbnQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tMTEgKiB0aGlzLm0yMiAtIHRoaXMubTIxICogdGhpcy5tMTI7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnZlcnRzIHRoaXMgbWF0cml4LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaW52ZXJ0KCk6IHRoaXMge1xyXG4gICAgICAgIGNvbnN0IG0xMSA9IHRoaXMubTExLCBtMTIgPSB0aGlzLm0xMjtcclxuICAgICAgICBjb25zdCBtMjEgPSB0aGlzLm0yMSwgbTIyID0gdGhpcy5tMjI7XHJcbiAgICAgICAgY29uc3QgbTMxID0gdGhpcy5keCwgbTMyID0gdGhpcy5keTtcclxuXHJcbiAgICAgICAgY29uc3QgZCA9IG0xMSAqIG0yMiAtIG0yMSAqIG0xMjtcclxuXHJcbiAgICAgICAgdGhpcy5tMTEgPSBtMjIgLyBkO1xyXG4gICAgICAgIHRoaXMubTEyID0gLW0xMiAvIGQ7XHJcbiAgICAgICAgdGhpcy5tMjEgPSAtbTIxIC8gZDtcclxuICAgICAgICB0aGlzLm0yMiA9IG0xMSAvIGQ7XHJcbiAgICAgICAgdGhpcy5keCA9IChtMjEgKiBtMzIgLSBtMzEgKiBtMjIpIC8gZDtcclxuICAgICAgICB0aGlzLmR5ID0gKG0zMSAqIG0xMiAtIG0xMSAqIG0zMikgLyBkO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYW5zbGF0ZXMgdGhpcyBtYXRyaXggYnkgdGhlIHNwZWNpZmllZCB2YWx1ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGR4IC0gVGhlIFggdHJhbnNsYXRpb24uXHJcbiAgICAgKiBAcGFyYW0gZHkgLSBUaGUgWSB0cmFuc2xhdGlvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHRyYW5zbGF0ZShkeDogbnVtYmVyLCBkeTogbnVtYmVyKTogdGhpcyB7XHJcbiAgICAgICAgdGhpcy5keCArPSBkeCAqIHRoaXMubTExICsgZHkgKiB0aGlzLm0yMTtcclxuICAgICAgICB0aGlzLmR5ICs9IGR4ICogdGhpcy5tMTIgKyBkeSAqIHRoaXMubTIyO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNsYXRlcyB0aGlzIG1hdHJpeCBieSB0aGUgc3BlY2lmaWVkIFggZGVsdGEuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGQgLSBUaGUgWCB0cmFuc2xhdGlvbiBkZWx0YS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHRyYW5zbGF0ZVgoZDogbnVtYmVyKTogdGhpcyB7XHJcbiAgICAgICAgdGhpcy5keCArPSBkICogdGhpcy5tMTE7XHJcbiAgICAgICAgdGhpcy5keSArPSBkICogdGhpcy5tMTI7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBYIHRyYW5zbGF0aW9uIG9mIHRoZSBtYXRyaXguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBUaGUgWCB0cmFuc2xhdGlvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFRyYW5zbGF0aW9uWCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmR4O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNsYXRlcyB0aGlzIG1hdHJpeCBieSB0aGUgc3BlY2lmaWVkIFkgZGVsdGEuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGQgLSBUaGUgWSB0cmFuc2xhdGlvbiBkZWx0YS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHRyYW5zbGF0ZVkoZDogbnVtYmVyKTogdGhpcyB7XHJcbiAgICAgICAgdGhpcy5keCArPSBkICogdGhpcy5tMjE7XHJcbiAgICAgICAgdGhpcy5keSArPSBkICogdGhpcy5tMjI7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBZIHRyYW5zbGF0aW9uIG9mIHRoZSBtYXRyaXguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBUaGUgWSB0cmFuc2xhdGlvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFRyYW5zbGF0aW9uWSgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmR5O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBtYXRyaXggdG8gYSB0cmFuc2xhdGlvbiBtYXRyaXguXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGR4IC0gVGhlIFggdHJhbnNsYXRpb24uXHJcbiAgICAgKiBAcGFyYW0gZHkgLSBUaGUgWSB0cmFuc2xhdGlvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldFRyYW5zbGF0aW9uKGR4OiBudW1iZXIsIGR5OiBudW1iZXIpOiB0aGlzIHtcclxuICAgICAgICB0aGlzLm0xMSA9ICAxOyB0aGlzLm0xMiA9ICAwO1xyXG4gICAgICAgIHRoaXMubTIxID0gIDA7IHRoaXMubTIyID0gIDE7XHJcbiAgICAgICAgdGhpcy5keCA9IGR4OyB0aGlzLmR5ID0gZHk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIG1hdHJpeCBpbml0aWFsaXplZCB0byBhIHRyYW5zbGF0aW9uIG1hdHJpeC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZHggLSBUaGUgWCB0cmFuc2xhdGlvbi5cclxuICAgICAqIEBwYXJhbSBkeSAtIFRoZSBZIHRyYW5zbGF0aW9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZVRyYW5zbGF0aW9uKGR4OiBudW1iZXIsIGR5OiBudW1iZXIpOiBBZmZpbmVUcmFuc2Zvcm0ge1xyXG4gICAgICAgIHJldHVybiBuZXcgQWZmaW5lVHJhbnNmb3JtKCkuc2V0VHJhbnNsYXRpb24oZHgsIGR5KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlcyB0aGlzIG1hdHJpeCBieSB0aGUgc3BlY2lmaWVkIGZhY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gc3ggLSBUaGUgWCBzY2FsZSBmYWN0b3IuXHJcbiAgICAgKiBAcGFyYW0gc3kgLSBUaGUgWSBzY2FsZSBmYWN0b3IuIERlZmF1bHRzIHRvIFggc2NhbGUgZmFjdG9yLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2NhbGUoc3g6IG51bWJlciwgc3kgPSBzeCk6IHRoaXMge1xyXG4gICAgICAgIHRoaXMubTExICo9IHN4O1xyXG4gICAgICAgIHRoaXMubTEyICo9IHN4O1xyXG4gICAgICAgIHRoaXMubTIxICo9IHN5O1xyXG4gICAgICAgIHRoaXMubTIyICo9IHN5O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBtYXRyaXggdG8gYSBzY2FsZSBtYXRyaXguXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHN4IC0gVGhlIFggc2NhbGUgZmFjdG9yLlxyXG4gICAgICogQHBhcmFtIHN5IC0gVGhlIFkgc2NhbGUgZmFjdG9yLiBEZWZhdWx0cyB0byBYIHNjYWxlIGZhY3Rvci5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldFNjYWxlKHN4OiBudW1iZXIsIHN5ID0gc3gpOiB0aGlzIHtcclxuICAgICAgICB0aGlzLm0xMSA9IHN4OyB0aGlzLm0xMiA9ICAwO1xyXG4gICAgICAgIHRoaXMubTIxID0gIDA7IHRoaXMubTIyID0gc3k7XHJcbiAgICAgICAgdGhpcy5keCA9ICAwOyB0aGlzLmR5ID0gIDA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY2FsZXMgdGhpcyBtYXRyaXggYnkgdGhlIHNwZWNpZmllZCBmYWN0b3IgYWxvbmcgdGhlIFggYXhpcy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gcyAtIFRoZSBzY2FsZSBmYWN0b3IuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzY2FsZVgoczogbnVtYmVyKTogdGhpcyB7XHJcbiAgICAgICAgdGhpcy5tMTEgKj0gcztcclxuICAgICAgICB0aGlzLm0xMiAqPSBzO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgWCBzY2FsZSBmYWN0b3Igb2YgdGhlIG1hdHJpeC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBYIHNjYWxlIGZhY3RvciBvZiB0aGUgbWF0cml4LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0U2NhbGVYKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguaHlwb3QodGhpcy5tMTEsIHRoaXMubTIxKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNjYWxlcyB0aGlzIG1hdHJpeCBieSB0aGUgc3BlY2lmaWVkIGZhY3RvciBhbG9uZyB0aGUgWSBheGlzLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzIC0gVGhlIHNjYWxlIGZhY3Rvci5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNjYWxlWShzOiBudW1iZXIpOiB0aGlzIHtcclxuICAgICAgICB0aGlzLm0yMSAqPSBzO1xyXG4gICAgICAgIHRoaXMubTIyICo9IHM7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBZIHNjYWxlIGZhY3RvciBvZiB0aGUgbWF0cml4LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gVGhlIFkgc2NhbGUgZmFjdG9yIG9mIHRoZSBtYXRyaXguXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTY2FsZVkoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5oeXBvdCh0aGlzLm0xMiwgdGhpcy5tMjIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBtYXRyaXggaW5pdGlhbGl6ZWQgdG8gYSBzY2FsZSBtYXRyaXguXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHN4IC0gVGhlIFggc2NhbGUgZmFjdG9yLlxyXG4gICAgICogQHBhcmFtIHN5IC0gVGhlIFkgc2NhbGUgZmFjdG9yLiBEZWZhdWx0cyB0byBYIHNjYWxlIGZhY3Rvci5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVTY2FsZShzeDogbnVtYmVyLCBzeT86IG51bWJlcik6IEFmZmluZVRyYW5zZm9ybSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBBZmZpbmVUcmFuc2Zvcm0oKS5zZXRTY2FsZShzeCwgc3kpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUm90YXRlcyB0aGlzIG1hdHJpeCBieSB0aGUgZ2l2ZW4gYW5nbGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGFuZ2xlIC0gVGhlIHJvdGF0aW9uIGFuZ2xlIGluIFJBRC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHJvdGF0ZShhbmdsZTogbnVtYmVyKTogdGhpcyB7XHJcbiAgICAgICAgY29uc3QgbTExID0gdGhpcy5tMTEsIG0xMiA9IHRoaXMubTEyO1xyXG4gICAgICAgIGNvbnN0IG0yMSA9IHRoaXMubTIxLCBtMjIgPSB0aGlzLm0yMjtcclxuICAgICAgICBjb25zdCBzID0gTWF0aC5zaW4oYW5nbGUpLCBjID0gTWF0aC5jb3MoYW5nbGUpO1xyXG4gICAgICAgIHRoaXMubTExID0gYyAqIG0xMSArIHMgKiBtMjE7XHJcbiAgICAgICAgdGhpcy5tMTIgPSBjICogbTEyICsgcyAqIG0yMjtcclxuICAgICAgICB0aGlzLm0yMSA9IGMgKiBtMjEgLSBzICogbTExO1xyXG4gICAgICAgIHRoaXMubTIyID0gYyAqIG0yMiAtIHMgKiBtMTI7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSByb3RhdGlvbiBvZiB0aGlzIG1hdHJpeCBpbiByYWRpYW5zLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gVGhlIHJvdGF0aW9uIGFuZ2xlIGluIHJhZGlhbnMuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRSb3RhdGlvbigpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IG0xMSA9IHRoaXMubTExLCBtMTIgPSB0aGlzLm0xMjtcclxuICAgICAgICBjb25zdCBtMjEgPSB0aGlzLm0yMSwgbTIyID0gdGhpcy5tMjI7XHJcbiAgICAgICAgaWYgKG0xMSAhPT0gMCB8fCBtMjEgIT09IDApIHtcclxuICAgICAgICAgICAgY29uc3QgYWNvcyA9IE1hdGguYWNvcyhtMTEgLyBNYXRoLmh5cG90KG0xMSwgbTIxKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBtMjEgPiAwID8gLWFjb3MgOiBhY29zO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobTEyICE9PSAwIHx8IG0yMiAhPT0gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBhY29zID0gTWF0aC5hY29zKG0xMiAvIE1hdGguaHlwb3QobTEyLCBtMjIpKTtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGguUEkgLyAyICsgKG0yMiA+IDAgPyAtYWNvcyA6IGFjb3MpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgbWF0cml4IHRvIGEgcm90YXRpb24gbWF0cml4LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBhbmdsZSAtIFRoZSByb3RhdGlvbiBhbmdsZSBpbiBSQUQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRSb3RhdGlvbihhbmdsZTogbnVtYmVyKTogdGhpcyB7XHJcbiAgICAgICAgY29uc3QgcyA9IE1hdGguc2luKGFuZ2xlKSwgYyA9IE1hdGguY29zKGFuZ2xlKTtcclxuICAgICAgICB0aGlzLm0xMSA9ICBjOyB0aGlzLm0xMiA9IHM7XHJcbiAgICAgICAgdGhpcy5tMjEgPSAtczsgdGhpcy5tMjIgPSBjO1xyXG4gICAgICAgIHRoaXMuZHggPSAgMDsgdGhpcy5keSA9IDA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgbmV3IG1hdHJpeCBpbml0aWFsaXplZCB0byBhIHJvdGF0aW9uIG1hdHJpeC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gYW5nbGUgLSBUaGUgcm90YXRpb24gYW5nbGUgaW4gUkFELlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZVJvdGF0aW9uKGFuZ2xlOiBudW1iZXIpOiBBZmZpbmVUcmFuc2Zvcm0ge1xyXG4gICAgICAgIHJldHVybiBuZXcgQWZmaW5lVHJhbnNmb3JtKCkuc2V0Um90YXRpb24oYW5nbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhbnNmb3JtcyB0aGUgZ2l2ZW4gMkQgY2FudmFzIHJlbmRlcmluZyBjb250ZXh0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjdHggLSBUaGUgMkQgY2FudmFzIHJlbmRlcmluZyBjb250ZXh0IHRvIHRyYW5zZm9ybS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHRyYW5zZm9ybUNhbnZhcyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6IHRoaXMge1xyXG4gICAgICAgIGN0eC50cmFuc2Zvcm0odGhpcy5tMTEsIHRoaXMubTEyLCB0aGlzLm0yMSwgdGhpcy5tMjIsIHRoaXMuZHgsIHRoaXMuZHkpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdHJhbnNmb3JtYXRpb24gb2YgdGhlIGdpdmVuIDJEIGNhbnZhcyByZW5kZXJpbmcgY29udGV4dC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY3R4IC0gVGhlIDJEIGNhbnZhcyByZW5kZXJpbmcgY29udGV4dCB0byBzZXQgdGhlIHRyYW5zZm9ybWF0aW9uIG9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0Q2FudmFzVHJhbnNmb3JtKGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTogdGhpcyB7XHJcbiAgICAgICAgY3R4LnNldFRyYW5zZm9ybSh0aGlzLm0xMSwgdGhpcy5tMTIsIHRoaXMubTIxLCB0aGlzLm0yMiwgdGhpcy5keCwgdGhpcy5keSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQTs7O0FBR0E7QUFDQTtBQWtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFoY0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/graphics/AffineTransform.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/graphics/Line2.js":
|
|
/*!*******************************!*\
|
|
!*** ./lib/graphics/Line2.js ***!
|
|
\*******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Line2 = void 0;\nconst Vector2_1 = __webpack_require__(/*! ./Vector2 */ \"./lib/graphics/Vector2.js\");\n/**\n * A line connecting two vertices.\n */\nclass Line2 {\n /**\n * Creates a new line from vertex a to vertex b.\n *\n * @param start - The start of the line.\n * @param end - The end of the line.\n */\n constructor(start, end) {\n this.start = start;\n this.end = end;\n this.normal = null;\n this.center = null;\n }\n /**\n * Returns the normal of the line. For a line in a clock-wise polygon this normal points to the outside of the\n * polygon.\n *\n * @return The line normal. Normalized to a unit vector.\n */\n getNormal() {\n var _a;\n return ((_a = this.normal) !== null && _a !== void 0 ? _a : (this.normal = new Vector2_1.Vector2())).setComponents(this.end.y - this.start.y, this.start.x - this.end.x).normalize();\n }\n /**\n * Returns the center of the line.\n *\n * @return The center of the line.\n */\n getCenter() {\n var _a;\n return ((_a = this.center) !== null && _a !== void 0 ? _a : (this.center = new Vector2_1.Vector2())).setComponents((this.start.x + this.end.x) / 2, (this.start.y + this.end.y) / 2);\n }\n /**\n * Draws the line to the given 2D canvas rendering context. This only applies the line geometry,\n * you have to stroke it yourself.\n *\n * @param ctx - The canvas rendering context.\n */\n draw(ctx) {\n const { start: a, end: b } = this;\n ctx.moveTo(a.x, a.x);\n ctx.lineTo(b.x, a.y);\n return this;\n }\n /**\n * Draws the line normal to the given 2D canvas rendering context. This only applies the line geometry,\n * you have to stroke it yourself.\n *\n * @param ctx - The canvas rendering context.\n * @param len - Optional custom normal line length.\n */\n drawNormal(ctx, len = 25) {\n const normal = this.getNormal();\n const center = this.getCenter();\n ctx.moveTo(center.x, center.y);\n ctx.lineTo(center.x + normal.x * len, center.y + normal.y * len);\n return this;\n }\n}\nexports.Line2 = Line2;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZ3JhcGhpY3MvTGluZTIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZ3JhcGhpY3MvTGluZTIudHM/Y2ZhMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWFkb25seVZlY3RvcjIsIFZlY3RvcjIgfSBmcm9tIFwiLi9WZWN0b3IyXCI7XHJcblxyXG4vKipcclxuICogQSBsaW5lIGNvbm5lY3RpbmcgdHdvIHZlcnRpY2VzLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIExpbmUyIHtcclxuICAgIHByaXZhdGUgbm9ybWFsOiBWZWN0b3IyIHwgbnVsbCA9IG51bGw7XHJcbiAgICBwcml2YXRlIGNlbnRlcjogVmVjdG9yMiB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBsaW5lIGZyb20gdmVydGV4IGEgdG8gdmVydGV4IGIuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHN0YXJ0IC0gVGhlIHN0YXJ0IG9mIHRoZSBsaW5lLlxyXG4gICAgICogQHBhcmFtIGVuZCAgIC0gVGhlIGVuZCBvZiB0aGUgbGluZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBzdGFydDogVmVjdG9yMixcclxuICAgICAgICBwdWJsaWMgZW5kOiBWZWN0b3IyXHJcbiAgICApIHt9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBub3JtYWwgb2YgdGhlIGxpbmUuIEZvciBhIGxpbmUgaW4gYSBjbG9jay13aXNlIHBvbHlnb24gdGhpcyBub3JtYWwgcG9pbnRzIHRvIHRoZSBvdXRzaWRlIG9mIHRoZVxyXG4gICAgICogcG9seWdvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBsaW5lIG5vcm1hbC4gTm9ybWFsaXplZCB0byBhIHVuaXQgdmVjdG9yLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Tm9ybWFsKCk6IFJlYWRvbmx5VmVjdG9yMiB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLm5vcm1hbCA/PyAodGhpcy5ub3JtYWwgPSBuZXcgVmVjdG9yMigpKSkuc2V0Q29tcG9uZW50cyhcclxuICAgICAgICAgICAgdGhpcy5lbmQueSAtIHRoaXMuc3RhcnQueSxcclxuICAgICAgICAgICAgdGhpcy5zdGFydC54IC0gdGhpcy5lbmQueFxyXG4gICAgICAgICkubm9ybWFsaXplKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBjZW50ZXIgb2YgdGhlIGxpbmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBUaGUgY2VudGVyIG9mIHRoZSBsaW5lLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q2VudGVyKCk6IFJlYWRvbmx5VmVjdG9yMiB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmNlbnRlciA/PyAodGhpcy5jZW50ZXIgPSBuZXcgVmVjdG9yMigpKSkuc2V0Q29tcG9uZW50cyhcclxuICAgICAgICAgICAgKHRoaXMuc3RhcnQueCArIHRoaXMuZW5kLngpIC8gMixcclxuICAgICAgICAgICAgKHRoaXMuc3RhcnQueSArIHRoaXMuZW5kLnkpIC8gMlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEcmF3cyB0aGUgbGluZSB0byB0aGUgZ2l2ZW4gMkQgY2FudmFzIHJlbmRlcmluZyBjb250ZXh0LiBUaGlzIG9ubHkgYXBwbGllcyB0aGUgbGluZSBnZW9tZXRyeSxcclxuICAgICAqIHlvdSBoYXZlIHRvIHN0cm9rZSBpdCB5b3Vyc2VsZi5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY3R4IC0gVGhlIGNhbnZhcyByZW5kZXJpbmcgY29udGV4dC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGRyYXcoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOiB0aGlzIHtcclxuICAgICAgICBjb25zdCB7IHN0YXJ0OiBhLCBlbmQ6IGIgfSA9IHRoaXM7XHJcbiAgICAgICAgY3R4Lm1vdmVUbyhhLngsIGEueCk7XHJcbiAgICAgICAgY3R4LmxpbmVUbyhiLngsIGEueSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEcmF3cyB0aGUgbGluZSBub3JtYWwgdG8gdGhlIGdpdmVuIDJEIGNhbnZhcyByZW5kZXJpbmcgY29udGV4dC4gVGhpcyBvbmx5IGFwcGxpZXMgdGhlIGxpbmUgZ2VvbWV0cnksXHJcbiAgICAgKiB5b3UgaGF2ZSB0byBzdHJva2UgaXQgeW91cnNlbGYuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGN0eCAtIFRoZSBjYW52YXMgcmVuZGVyaW5nIGNvbnRleHQuXHJcbiAgICAgKiBAcGFyYW0gbGVuIC0gT3B0aW9uYWwgY3VzdG9tIG5vcm1hbCBsaW5lIGxlbmd0aC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGRyYXdOb3JtYWwoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIGxlbiA9IDI1KTogdGhpcyB7XHJcbiAgICAgICAgY29uc3Qgbm9ybWFsID0gdGhpcy5nZXROb3JtYWwoKTtcclxuICAgICAgICBjb25zdCBjZW50ZXIgPSB0aGlzLmdldENlbnRlcigpO1xyXG4gICAgICAgIGN0eC5tb3ZlVG8oY2VudGVyLngsIGNlbnRlci55KTtcclxuICAgICAgICBjdHgubGluZVRvKGNlbnRlci54ICsgbm9ybWFsLnggKiBsZW4sIGNlbnRlci55ICsgbm9ybWFsLnkgKiBsZW4pO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFFQTs7QUFFQTtBQUNBO0FBSUE7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFYQTtBQUNBO0FBV0E7QUFFQTs7Ozs7QUFLQTtBQUNBOztBQUNBO0FBSUE7QUFFQTs7OztBQUlBO0FBQ0E7O0FBQ0E7QUFJQTtBQUVBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW5FQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/graphics/Line2.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/graphics/Polygon2.js":
|
|
/*!**********************************!*\
|
|
!*** ./lib/graphics/Polygon2.js ***!
|
|
\**********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Polygon2 = void 0;\nconst Line2_1 = __webpack_require__(/*! ./Line2 */ \"./lib/graphics/Line2.js\");\nconst Vector2_1 = __webpack_require__(/*! ./Vector2 */ \"./lib/graphics/Vector2.js\");\n/**\n * A polygon with any number of vertices.\n */\nclass Polygon2 {\n /**\n * Creates a polygon with the given initial vertices.\n *\n * @param vertices - The polygon vertices.\n */\n constructor(...vertices) {\n var _a;\n this.edges = [];\n this.normals = [];\n this.vertices = vertices;\n for (let i = 0, max = vertices.length; i < max; ++i) {\n this.edges.push(new Line2_1.Line2(vertices[i], (_a = vertices[i + 1]) !== null && _a !== void 0 ? _a : vertices[0]));\n }\n }\n /**\n * Checks if polygon has at least one vertex.\n *\n * @return True if polygon has at least on vertex, false if not.\n */\n hasVertices() {\n return this.vertices.length > 0;\n }\n /**\n * Adds the given vertex at the given index. Polygon edges are automatically corrected.\n *\n * @param vertex - The vertex to add.\n * @param index - Optional insertion index. If not specified then vertex is added at the end of the polygon.\n */\n addVertex(vertex, index = this.vertices.length) {\n const edge = new Line2_1.Line2(vertex, vertex);\n this.vertices.splice(index, 0, vertex);\n const previousEdge = this.edges[index - 1];\n this.edges.splice(index, 0, edge);\n if (previousEdge != null) {\n edge.end = previousEdge.end;\n previousEdge.end = vertex;\n }\n else {\n edge.end = this.vertices[0];\n }\n return this;\n }\n /**\n * Removes the vertex at the given index. Polygon edges are automatically corrected.\n *\n * @param index - The index of the vertex to remove.\n */\n removeVertex(index) {\n var _a, _b;\n const edges = this.edges;\n const edge = edges[index];\n if (edge != null) {\n const previousEdge = (_a = edges[index - 1]) !== null && _a !== void 0 ? _a : edges[edges.length - 1];\n const nextEdge = (_b = edges[index + 1]) !== null && _b !== void 0 ? _b : edges[0];\n if (previousEdge !== edge && nextEdge !== edge) {\n nextEdge.start = edge.end;\n previousEdge.end = edge.end;\n }\n this.vertices.splice(index, 1);\n this.edges.splice(index, 1);\n }\n return this;\n }\n /**\n * Removes all vertices from the polygon.\n */\n clear() {\n this.vertices.length = 0;\n this.edges.length = 0;\n this.normals.length = 0;\n return this;\n }\n /**\n * Returns the vertex normal for the vertex with the given index.\n *\n * @param index - The vertex index.\n * @return The vertex normal.\n */\n getVertexNormal(index) {\n var _a, _b, _c;\n const normal = (_b = (_a = this.normals[index]) === null || _a === void 0 ? void 0 : _a.reset()) !== null && _b !== void 0 ? _b : (this.normals[index] = new Vector2_1.Vector2());\n const edges = this.edges;\n const edge = edges[index];\n if (edge != null) {\n normal.add(edge.getNormal());\n const previousEdge = (_c = edges[index - 1]) !== null && _c !== void 0 ? _c : edges[edges.length - 1];\n if (previousEdge != null) {\n normal.add(previousEdge.getNormal());\n }\n }\n return normal.normalize();\n }\n /**\n * Draws the polygon to the given 2D canvas rendering context. This only applies the closed geometry, you have to\n * fill/stroke/clip it yourself.\n *\n * @param ctx - The 2D canvas rendering context to render to.\n */\n draw(ctx) {\n const vertices = this.vertices;\n if (vertices.length > 0) {\n const first = vertices[0];\n ctx.moveTo(first.x, first.y);\n for (let i = 1, max = vertices.length; i < max; ++i) {\n const next = vertices[i];\n ctx.lineTo(next.x, next.y);\n }\n }\n ctx.closePath();\n return this;\n }\n /**\n * Draws the polygon edge normals to the given 2D canvas rendering context. This only applies the line geometries,\n * you have to stroke it yourself.\n *\n * @param ctx - The canvas rendering context.\n * @param len - Optional custom normal line length.\n */\n drawNormals(ctx, len) {\n for (const edge of this.edges) {\n edge.drawNormal(ctx, len);\n }\n return this;\n }\n /**\n * Draws the vertex normals to the given 2D canvas rendering context. This only applies the line geometries,\n * you have to stroke it yourself.\n *\n * @param ctx - The canvas rendering context.\n * @param len - Optional custom normal line length.\n */\n drawVertexNormals(ctx, len = 25) {\n this.vertices.forEach((vertex, index) => {\n ctx.moveTo(vertex.x, vertex.y);\n const normal = this.getVertexNormal(index);\n ctx.lineTo(vertex.x + normal.x * len, vertex.y + normal.y * len);\n });\n return this;\n }\n}\nexports.Polygon2 = Polygon2;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZ3JhcGhpY3MvUG9seWdvbjIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZ3JhcGhpY3MvUG9seWdvbjIudHM/YzdmMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMaW5lMiB9IGZyb20gXCIuL0xpbmUyXCI7XHJcbmltcG9ydCB7IFJlYWRvbmx5VmVjdG9yMiwgVmVjdG9yMiB9IGZyb20gXCIuL1ZlY3RvcjJcIjtcclxuXHJcbi8qKlxyXG4gKiBBIHBvbHlnb24gd2l0aCBhbnkgbnVtYmVyIG9mIHZlcnRpY2VzLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFBvbHlnb24yIHtcclxuICAgIHB1YmxpYyByZWFkb25seSB2ZXJ0aWNlczogVmVjdG9yMltdO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IGVkZ2VzOiBMaW5lMltdID0gW107XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5vcm1hbHM6IFZlY3RvcjJbXSA9IFtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIHBvbHlnb24gd2l0aCB0aGUgZ2l2ZW4gaW5pdGlhbCB2ZXJ0aWNlcy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmVydGljZXMgLSBUaGUgcG9seWdvbiB2ZXJ0aWNlcy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKC4uLnZlcnRpY2VzOiBWZWN0b3IyW10pIHtcclxuICAgICAgICB0aGlzLnZlcnRpY2VzID0gdmVydGljZXM7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIG1heCA9IHZlcnRpY2VzLmxlbmd0aDsgaSA8IG1heDsgKytpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWRnZXMucHVzaChuZXcgTGluZTIodmVydGljZXNbaV0sIHZlcnRpY2VzW2kgKyAxXSA/PyB2ZXJ0aWNlc1swXSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBwb2x5Z29uIGhhcyBhdCBsZWFzdCBvbmUgdmVydGV4LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gVHJ1ZSBpZiBwb2x5Z29uIGhhcyBhdCBsZWFzdCBvbiB2ZXJ0ZXgsIGZhbHNlIGlmIG5vdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGhhc1ZlcnRpY2VzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZlcnRpY2VzLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIHRoZSBnaXZlbiB2ZXJ0ZXggYXQgdGhlIGdpdmVuIGluZGV4LiBQb2x5Z29uIGVkZ2VzIGFyZSBhdXRvbWF0aWNhbGx5IGNvcnJlY3RlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmVydGV4IC0gVGhlIHZlcnRleCB0byBhZGQuXHJcbiAgICAgKiBAcGFyYW0gaW5kZXggIC0gT3B0aW9uYWwgaW5zZXJ0aW9uIGluZGV4LiBJZiBub3Qgc3BlY2lmaWVkIHRoZW4gdmVydGV4IGlzIGFkZGVkIGF0IHRoZSBlbmQgb2YgdGhlIHBvbHlnb24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhZGRWZXJ0ZXgodmVydGV4OiBWZWN0b3IyLCBpbmRleDogbnVtYmVyID0gdGhpcy52ZXJ0aWNlcy5sZW5ndGgpOiB0aGlzIHtcclxuICAgICAgICBjb25zdCBlZGdlID0gbmV3IExpbmUyKHZlcnRleCwgdmVydGV4KTtcclxuICAgICAgICB0aGlzLnZlcnRpY2VzLnNwbGljZShpbmRleCwgMCwgdmVydGV4KTtcclxuICAgICAgICBjb25zdCBwcmV2aW91c0VkZ2UgPSB0aGlzLmVkZ2VzW2luZGV4IC0gMV07XHJcbiAgICAgICAgdGhpcy5lZGdlcy5zcGxpY2UoaW5kZXgsIDAsIGVkZ2UpO1xyXG4gICAgICAgIGlmIChwcmV2aW91c0VkZ2UgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBlZGdlLmVuZCA9IHByZXZpb3VzRWRnZS5lbmQ7XHJcbiAgICAgICAgICAgIHByZXZpb3VzRWRnZS5lbmQgPSB2ZXJ0ZXg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZWRnZS5lbmQgPSB0aGlzLnZlcnRpY2VzWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgdGhlIHZlcnRleCBhdCB0aGUgZ2l2ZW4gaW5kZXguIFBvbHlnb24gZWRnZXMgYXJlIGF1dG9tYXRpY2FsbHkgY29ycmVjdGVkLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgdmVydGV4IHRvIHJlbW92ZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlbW92ZVZlcnRleChpbmRleDogbnVtYmVyKTogdGhpcyB7XHJcbiAgICAgICAgY29uc3QgZWRnZXMgPSB0aGlzLmVkZ2VzO1xyXG4gICAgICAgIGNvbnN0IGVkZ2UgPSBlZGdlc1tpbmRleF07XHJcbiAgICAgICAgaWYgKGVkZ2UgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c0VkZ2UgPSBlZGdlc1tpbmRleCAtIDFdID8/IGVkZ2VzW2VkZ2VzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0RWRnZSA9IGVkZ2VzW2luZGV4ICsgMV0gPz8gZWRnZXNbMF07XHJcbiAgICAgICAgICAgIGlmIChwcmV2aW91c0VkZ2UgIT09IGVkZ2UgJiYgbmV4dEVkZ2UgIT09IGVkZ2UpIHtcclxuICAgICAgICAgICAgICAgIG5leHRFZGdlLnN0YXJ0ID0gZWRnZS5lbmQ7XHJcbiAgICAgICAgICAgICAgICBwcmV2aW91c0VkZ2UuZW5kID0gZWRnZS5lbmQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy52ZXJ0aWNlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLmVkZ2VzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhbGwgdmVydGljZXMgZnJvbSB0aGUgcG9seWdvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNsZWFyKCk6IHRoaXMge1xyXG4gICAgICAgIHRoaXMudmVydGljZXMubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLmVkZ2VzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5ub3JtYWxzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB2ZXJ0ZXggbm9ybWFsIGZvciB0aGUgdmVydGV4IHdpdGggdGhlIGdpdmVuIGluZGV4LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBpbmRleCAtIFRoZSB2ZXJ0ZXggaW5kZXguXHJcbiAgICAgKiBAcmV0dXJuIFRoZSB2ZXJ0ZXggbm9ybWFsLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0VmVydGV4Tm9ybWFsKGluZGV4OiBudW1iZXIpOiBSZWFkb25seVZlY3RvcjIge1xyXG4gICAgICAgIGNvbnN0IG5vcm1hbCA9IHRoaXMubm9ybWFsc1tpbmRleF0/LnJlc2V0KCkgPz8gKHRoaXMubm9ybWFsc1tpbmRleF0gPSBuZXcgVmVjdG9yMigpKTtcclxuICAgICAgICBjb25zdCBlZGdlcyA9IHRoaXMuZWRnZXM7XHJcbiAgICAgICAgY29uc3QgZWRnZSA9IGVkZ2VzW2luZGV4XTtcclxuICAgICAgICBpZiAoZWRnZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG5vcm1hbC5hZGQoZWRnZS5nZXROb3JtYWwoKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzRWRnZSA9IGVkZ2VzW2luZGV4IC0gMV0gPz8gZWRnZXNbZWRnZXMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgIGlmIChwcmV2aW91c0VkZ2UgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgbm9ybWFsLmFkZChwcmV2aW91c0VkZ2UuZ2V0Tm9ybWFsKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBub3JtYWwubm9ybWFsaXplKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEcmF3cyB0aGUgcG9seWdvbiB0byB0aGUgZ2l2ZW4gMkQgY2FudmFzIHJlbmRlcmluZyBjb250ZXh0LiBUaGlzIG9ubHkgYXBwbGllcyB0aGUgY2xvc2VkIGdlb21ldHJ5LCB5b3UgaGF2ZSB0b1xyXG4gICAgICogZmlsbC9zdHJva2UvY2xpcCBpdCB5b3Vyc2VsZi5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY3R4IC0gVGhlIDJEIGNhbnZhcyByZW5kZXJpbmcgY29udGV4dCB0byByZW5kZXIgdG8uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkcmF3KGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTogdGhpcyB7XHJcbiAgICAgICAgY29uc3QgdmVydGljZXMgPSB0aGlzLnZlcnRpY2VzO1xyXG4gICAgICAgIGlmICh2ZXJ0aWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gdmVydGljZXNbMF07XHJcbiAgICAgICAgICAgIGN0eC5tb3ZlVG8oZmlyc3QueCwgZmlyc3QueSk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxLCBtYXggPSB2ZXJ0aWNlcy5sZW5ndGg7IGkgPCBtYXg7ICsraSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IHZlcnRpY2VzW2ldO1xyXG4gICAgICAgICAgICAgICAgY3R4LmxpbmVUbyhuZXh0LngsIG5leHQueSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY3R4LmNsb3NlUGF0aCgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRHJhd3MgdGhlIHBvbHlnb24gZWRnZSBub3JtYWxzIHRvIHRoZSBnaXZlbiAyRCBjYW52YXMgcmVuZGVyaW5nIGNvbnRleHQuIFRoaXMgb25seSBhcHBsaWVzIHRoZSBsaW5lIGdlb21ldHJpZXMsXHJcbiAgICAgKiB5b3UgaGF2ZSB0byBzdHJva2UgaXQgeW91cnNlbGYuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGN0eCAtIFRoZSBjYW52YXMgcmVuZGVyaW5nIGNvbnRleHQuXHJcbiAgICAgKiBAcGFyYW0gbGVuIC0gT3B0aW9uYWwgY3VzdG9tIG5vcm1hbCBsaW5lIGxlbmd0aC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGRyYXdOb3JtYWxzKGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCBsZW4/OiBudW1iZXIpOiB0aGlzIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGVkZ2Ugb2YgdGhpcy5lZGdlcykge1xyXG4gICAgICAgICAgICBlZGdlLmRyYXdOb3JtYWwoY3R4LCBsZW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERyYXdzIHRoZSB2ZXJ0ZXggbm9ybWFscyB0byB0aGUgZ2l2ZW4gMkQgY2FudmFzIHJlbmRlcmluZyBjb250ZXh0LiBUaGlzIG9ubHkgYXBwbGllcyB0aGUgbGluZSBnZW9tZXRyaWVzLFxyXG4gICAgICogeW91IGhhdmUgdG8gc3Ryb2tlIGl0IHlvdXJzZWxmLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjdHggLSBUaGUgY2FudmFzIHJlbmRlcmluZyBjb250ZXh0LlxyXG4gICAgICogQHBhcmFtIGxlbiAtIE9wdGlvbmFsIGN1c3RvbSBub3JtYWwgbGluZSBsZW5ndGguXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkcmF3VmVydGV4Tm9ybWFscyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgbGVuOiBudW1iZXIgPSAyNSk6IHRoaXMge1xyXG4gICAgICAgIHRoaXMudmVydGljZXMuZm9yRWFjaCgodmVydGV4LCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBjdHgubW92ZVRvKHZlcnRleC54LCB2ZXJ0ZXgueSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbCA9IHRoaXMuZ2V0VmVydGV4Tm9ybWFsKGluZGV4KTtcclxuICAgICAgICAgICAgY3R4LmxpbmVUbyh2ZXJ0ZXgueCArIG5vcm1hbC54ICogbGVuLCB2ZXJ0ZXgueSArIG5vcm1hbC55ICogbGVuKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7OztBQUFBO0FBQ0E7QUFFQTs7QUFFQTtBQUNBO0FBS0E7Ozs7QUFJQTtBQUNBOztBQVJBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFLQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFsSkE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/graphics/Polygon2.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/graphics/Vector2.js":
|
|
/*!*********************************!*\
|
|
!*** ./lib/graphics/Vector2.js ***!
|
|
\*********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Vector2 = void 0;\n/**\n * Vector with two floating point components.\n */\nclass Vector2 {\n constructor(x = 0, y = 0) {\n this.x = x;\n this.y = y;\n }\n /** @inheritDoc */\n toString() {\n return `[ ${this.x}, ${this.y} ]`;\n }\n /**\n * Sets the vector component values.\n *\n * @param x - The X component value to set.\n * @param y - The Y component value to set.\n */\n setComponents(x, y) {\n this.x = x;\n this.y = y;\n return this;\n }\n /**\n * Sets the vector component values by copying them from the given vector.\n *\n * @param vector - The vector to copy the X and Y component values from.\n */\n setVector(vector) {\n this.x = vector.x;\n this.y = vector.y;\n return this;\n }\n /** @inheritDoc */\n clone() {\n return new Vector2(this.x, this.y);\n }\n /** @inheritDoc */\n getSquareLength() {\n return Math.pow(this.x, 2) + Math.pow(this.y, 2);\n }\n /** @inheritDoc */\n getLength() {\n return Math.sqrt(this.getSquareLength());\n }\n /** @inheritDoc */\n getSquareDistance(v) {\n return Math.pow((this.x - v.x), 2) + Math.pow((this.y - v.y), 2);\n }\n /** @inheritDoc */\n getDistance(v) {\n return Math.sqrt(this.getSquareDistance(v));\n }\n /** @inheritDoc */\n dot(v) {\n return this.x * v.x + this.y * v.y;\n }\n /**\n * Negates this vector.\n */\n negate() {\n this.x = -this.x;\n this.y = -this.y;\n return this;\n }\n /**\n * Resets all components of this vector to 0.\n */\n reset() {\n this.x = this.y = 0;\n return this;\n }\n /**\n * Translates the vector by the given deltas.\n *\n * @param x - The x delta.\n * @param y - The y delta.\n */\n translate(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /**\n * Adds the given vector to this vector.\n *\n * @param summand - The vector to add.\n */\n add(summand) {\n this.x += summand.x;\n this.y += summand.y;\n return this;\n }\n /**\n * Subtracts the given vector from this vector.\n *\n * @param subtrahend - The vector to subtract from this vector.\n */\n sub(subtrahend) {\n this.x -= subtrahend.x;\n this.y -= subtrahend.y;\n return this;\n }\n /**\n * Multiplies this vector with the specified matrix (In GLSL: `this = matrix * this`).\n *\n * @param matrix - The matrix to multiply this vector with.\n */\n mul(arg) {\n const x = this.x;\n const y = this.y;\n this.x = x * arg.m11 + y * arg.m21 + arg.dx;\n this.y = x * arg.m12 + y * arg.m22 + arg.dy;\n return this;\n }\n /**\n * Multiplies this vector with the inverse of the specified matrix (In GLSL: `this = matrix / this`).\n *\n * @param matrix - The matrix to divide this vector by.\n */\n div(arg) {\n const b11 = arg.m11, b12 = arg.m12;\n const b21 = arg.m21, b22 = arg.m22;\n const x = this.x;\n const y = this.y;\n const d = b11 * b22 - b12 * b21;\n const c11 = b22 / d;\n const c12 = -b12 / d;\n const c21 = -b21 / d;\n const c22 = b11 / d;\n const b31 = arg.dx, b32 = arg.dy;\n this.x = x * c11 + y * c21 + (b21 * b32 - b31 * b22) / d;\n this.y = x * c12 + y * c22 + (b31 * b12 - b11 * b32) / d;\n return this;\n }\n /**\n * Normalizes this vector to a length of 1.\n */\n normalize() {\n const len = this.getLength();\n this.x /= len;\n this.y /= len;\n return this;\n }\n}\nexports.Vector2 = Vector2;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvZ3JhcGhpY3MvVmVjdG9yMi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9ncmFwaGljcy9WZWN0b3IyLnRzPzM0YmIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZmaW5lVHJhbnNmb3JtIH0gZnJvbSBcIi4vQWZmaW5lVHJhbnNmb3JtXCI7XHJcblxyXG4vKipcclxuICogTWluaW1hbCBpbnRlcmZhY2Ugb2YgYSAyRCB2ZWN0b3IuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFZlY3RvcjJMaWtlIHtcclxuICAgIHg6IG51bWJlcjtcclxuICAgIHk6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZWFkb25seVZlY3RvcjJMaWtlIHtcclxuICAgIHJlYWRvbmx5IHg6IG51bWJlcjtcclxuICAgIHJlYWRvbmx5IHk6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZWFkb25seVZlY3RvcjIgZXh0ZW5kcyBSZWFkb25seVZlY3RvcjJMaWtlIHtcclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSB2ZWN0b3IuIElmIHlvdSBvbmx5IG5lZWQgdG8gY29tcGFyZSB2ZWN0b3IgbGVuZ3RocyBzbyB0aGUgcmVhbCBsZW5ndGggZG9lc24ndCBtYXR0ZXJcclxuICAgICAqIHRoZW4gY29uc2lkZXIgdXNpbmcgdGhlIGZhc3RlciBbW2dldFNxdWFyZUxlbmd0aF1dIG1ldGhvZCB3aGljaCBvbWl0cyB0aGUgZXhwZW5zaXZlIHNxdWFyZSByb290IGNhbGN1bGF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gVGhlIHZlY3RvciBsZW5ndGguXHJcbiAgICAgKi9cclxuICAgIGdldExlbmd0aCgpOiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiB0aGUgdmVjdG9yLiBJbiBzb21lIGNhc2VzIChMaWtlIGNvbXBhcmluZyB2ZWN0b3IgbGVuZ3RocykgaXQgaXMgbm90IG5lY2Vzc2FyeSB0b1xyXG4gICAgICogY29tcGFyZSB0aGUgcmVhbCBsZW5ndGgsIGl0IGlzIGVub3VnaCB0byBjb21wYXJlIHRoZSBzcXVhcmVkIGxlbmd0aC4gVGhpcyBpcyBmYXN0ZXIgYmVjYXVzZSBpdCBvbmx5IGRvZXNcclxuICAgICAqIGFkZGl0aW9uIGFuZCBtdWx0aXBsaWNhdGlvbiB3aXRob3V0IGEgc3F1YXJlIHJvb3QuIElmIHlvdSBuZWVkIHRoZSByZWFsIHZlY3RvciBsZW5ndGggdGhlbiB1c2UgdGhlXHJcbiAgICAgKiBbW2dldExlbmd0aF1dIG1ldGhvZCBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gVGhlIHNxdWFyZWQgdmVjdG9yIGxlbmd0aC5cclxuICAgICAqL1xyXG4gICAgZ2V0U3F1YXJlTGVuZ3RoKCk6IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhpcyB2ZWN0b3IgYW5kIHRoZSBzcGVjaWZpZWQgb25lLiBJZiB5b3Ugb25seSBuZWVkIHRvIGNvbXBhcmUgdmVjdG9yIGRpc3RhbmNlcyBzb1xyXG4gICAgICogdGhlIHJlYWwgZGlzdGFuY2UgZG9lc24ndCBtYXR0ZXIgdGhlbiBjb25zaWRlciB1c2luZyB0aGUgZmFzdGVyIFtbZ2V0U3F1YXJlRGlzdGFuY2VdXSBtZXRob2Qgd2hpY2ggb21pdHMgdGhlXHJcbiAgICAgKiBleHBlbnNpdmUgc3F1YXJlIHJvb3QgY2FsY3VsYXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHYgLSBUaGUgb3RoZXIgdmVjdG9yLlxyXG4gICAgICogQHJldHVybiBUaGUgZGlzdGFuY2UgYmV0d2VlbiB0aGlzIHZlY3RvciBhbmQgdGhlIHNwZWNpZmllZCBvbmUuXHJcbiAgICAgKi9cclxuICAgIGdldERpc3RhbmNlKHY6IFJlYWRvbmx5VmVjdG9yMkxpa2UpOiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gdGhpcyB2ZWN0b3IgYW5kIHRoZSBzcGVjaWZpZWQgb25lLiBJbiBzb21lIGNhc2VzIChMaWtlIGNvbXBhcmluZ1xyXG4gICAgICogdmVjdG9yIGRpc3RhbmNlcykgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjb21wYXJlIHRoZSByZWFsIGRpc3RhbmNlLCBpdCBpcyBlbm91Z2ggdG8gY29tcGFyZSB0aGUgc3F1YXJlZFxyXG4gICAgICogZGlzdGFuY2UuIFRoaXMgaXMgZmFzdGVyIGJlY2F1c2UgaXQgb25seSBkb2VzIGFkZGl0aW9uIGFuZCBtdWx0aXBsaWNhdGlvbiB3aXRob3V0IGEgc3F1YXJlIHJvb3QuIElmIHlvdSBuZWVkXHJcbiAgICAgKiB0aGUgcmVhbCB2ZWN0b3IgZGlzdGFuY2UgdGhlbiB1c2UgdGhlIFtbZ2V0RGlzdGFuY2VdXSBtZXRob2QgaW5zdGVhZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdiAtIFRoZSBvdGhlciB2ZWN0b3IuXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gdGhlIHR3byB2ZWN0b3JzLlxyXG4gICAgICovXHJcbiAgICBnZXRTcXVhcmVEaXN0YW5jZSh2OiBSZWFkb25seVZlY3RvcjJMaWtlKTogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgZG90IHByb2R1Y3Qgb2YgdGhpcyB2ZWN0b3IgYW5kIHRoZSBzcGVjaWZpZWQgb25lLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2IC0gVGhlIG90aGVyIHZlY3Rvci5cclxuICAgICAqIEByZXR1cm4gVGhlIGRvdCBwcm9kdWN0LlxyXG4gICAgICovXHJcbiAgICBkb3QodjogUmVhZG9ubHlWZWN0b3IyTGlrZSk6IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZlY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gbWF4RnJhY3Rpb25EaWdpdHMgLSBPcHRpb25hbCBudW1iZXIgb2YgbWF4aW11bSBmcmFjdGlvbiBkaWdpdHMgdG8gdXNlIGluIHRoZSBzdHJpbmcuIERlZmF1bHRzIHRvIDUuXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZlY3Rvci5cclxuICAgICAqL1xyXG4gICAgdG9TdHJpbmcobWF4RnJhY3Rpb25EaWdpdHM/OiBudW1iZXIpOiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBWZWN0b3Igd2l0aCB0d28gZmxvYXRpbmcgcG9pbnQgY29tcG9uZW50cy5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBWZWN0b3IyIGltcGxlbWVudHMgUmVhZG9ubHlWZWN0b3IyTGlrZSwgVmVjdG9yMkxpa2Uge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHZlY3RvciB3aXRoIGFsbCBjb21wb25lbnRzIHNldCB0byAwLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgdmVjdG9yIHdpdGggdGhlIGdpdmVuIGNvbXBvbmVudCB2YWx1ZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHggLSBUaGUgaW5pdGlhbCBYIGNvbXBvbmVudCB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB5IC0gVGhlIGluaXRpYWwgWSBjb21wb25lbnQgdmFsdWUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcih4OiBudW1iZXIsIHk6IG51bWJlcik7XHJcblxyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyB4OiBudW1iZXIgPSAwLFxyXG4gICAgICAgIHB1YmxpYyB5OiBudW1iZXIgPSAwXHJcbiAgICApIHt9XHJcblxyXG4gICAgLyoqIEBpbmhlcml0RG9jICovXHJcbiAgICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gYFsgJHt0aGlzLnh9LCAke3RoaXMueX0gXWA7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB2ZWN0b3IgY29tcG9uZW50IHZhbHVlcy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geCAtIFRoZSBYIGNvbXBvbmVudCB2YWx1ZSB0byBzZXQuXHJcbiAgICAgKiBAcGFyYW0geSAtIFRoZSBZIGNvbXBvbmVudCB2YWx1ZSB0byBzZXQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRDb21wb25lbnRzKHg6IG51bWJlciwgeTogbnVtYmVyKTogdGhpcyB7XHJcbiAgICAgICAgdGhpcy54ID0geDtcclxuICAgICAgICB0aGlzLnkgPSB5O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdmVjdG9yIGNvbXBvbmVudCB2YWx1ZXMgYnkgY29weWluZyB0aGVtIGZyb20gdGhlIGdpdmVuIHZlY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmVjdG9yIC0gVGhlIHZlY3RvciB0byBjb3B5IHRoZSBYIGFuZCBZIGNvbXBvbmVudCB2YWx1ZXMgZnJvbS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldFZlY3Rvcih2ZWN0b3I6IFZlY3RvcjJMaWtlKTogdGhpcyB7XHJcbiAgICAgICAgdGhpcy54ID0gdmVjdG9yLng7XHJcbiAgICAgICAgdGhpcy55ID0gdmVjdG9yLnk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpbmhlcml0RG9jICovXHJcbiAgICBwdWJsaWMgY2xvbmUoKTogVmVjdG9yMiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IyKHRoaXMueCwgdGhpcy55KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGluaGVyaXREb2MgKi9cclxuICAgIHB1YmxpYyBnZXRTcXVhcmVMZW5ndGgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy54ICoqIDIgKyB0aGlzLnkgKiogMjtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGluaGVyaXREb2MgKi9cclxuICAgIHB1YmxpYyBnZXRMZW5ndGgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZ2V0U3F1YXJlTGVuZ3RoKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaW5oZXJpdERvYyAqL1xyXG4gICAgcHVibGljIGdldFNxdWFyZURpc3RhbmNlKHY6IFZlY3RvcjJMaWtlKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMueCAtIHYueCkgKiogMiArICh0aGlzLnkgLSB2LnkpICoqIDI7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpbmhlcml0RG9jICovXHJcbiAgICBwdWJsaWMgZ2V0RGlzdGFuY2UodjogVmVjdG9yMkxpa2UpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQodGhpcy5nZXRTcXVhcmVEaXN0YW5jZSh2KSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpbmhlcml0RG9jICovXHJcbiAgICBwdWJsaWMgZG90KHY6IFZlY3RvcjJMaWtlKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy54ICogdi54ICsgdGhpcy55ICogdi55O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTmVnYXRlcyB0aGlzIHZlY3Rvci5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG5lZ2F0ZSgpOiB0aGlzIHtcclxuICAgICAgICB0aGlzLnggPSAtdGhpcy54O1xyXG4gICAgICAgIHRoaXMueSA9IC10aGlzLnk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNldHMgYWxsIGNvbXBvbmVudHMgb2YgdGhpcyB2ZWN0b3IgdG8gMC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlc2V0KCk6IHRoaXMge1xyXG4gICAgICAgIHRoaXMueCA9IHRoaXMueSA9IDA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFuc2xhdGVzIHRoZSB2ZWN0b3IgYnkgdGhlIGdpdmVuIGRlbHRhcy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geCAtIFRoZSB4IGRlbHRhLlxyXG4gICAgICogQHBhcmFtIHkgLSBUaGUgeSBkZWx0YS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHRyYW5zbGF0ZSh4OiBudW1iZXIsIHk6IG51bWJlcik6IHRoaXMge1xyXG4gICAgICAgIHRoaXMueCArPSB4O1xyXG4gICAgICAgIHRoaXMueSArPSB5O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyB0aGUgZ2l2ZW4gdmVjdG9yIHRvIHRoaXMgdmVjdG9yLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzdW1tYW5kIC0gVGhlIHZlY3RvciB0byBhZGQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhZGQoc3VtbWFuZDogVmVjdG9yMkxpa2UpOiB0aGlzIHtcclxuICAgICAgICB0aGlzLnggKz0gc3VtbWFuZC54O1xyXG4gICAgICAgIHRoaXMueSArPSBzdW1tYW5kLnk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdWJ0cmFjdHMgdGhlIGdpdmVuIHZlY3RvciBmcm9tIHRoaXMgdmVjdG9yLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzdWJ0cmFoZW5kIC0gVGhlIHZlY3RvciB0byBzdWJ0cmFjdCBmcm9tIHRoaXMgdmVjdG9yLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3ViKHN1YnRyYWhlbmQ6IFZlY3RvcjJMaWtlKTogdGhpcyB7XHJcbiAgICAgICAgdGhpcy54IC09IHN1YnRyYWhlbmQueDtcclxuICAgICAgICB0aGlzLnkgLT0gc3VidHJhaGVuZC55O1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTXVsdGlwbGllcyB0aGlzIHZlY3RvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWF0cml4IChJbiBHTFNMOiBgdGhpcyA9IG1hdHJpeCAqIHRoaXNgKS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gbWF0cml4IC0gVGhlIG1hdHJpeCB0byBtdWx0aXBseSB0aGlzIHZlY3RvciB3aXRoLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbXVsKGFyZzogQWZmaW5lVHJhbnNmb3JtKTogdGhpcyB7XHJcbiAgICAgICAgY29uc3QgeCA9IHRoaXMueDtcclxuICAgICAgICBjb25zdCB5ID0gdGhpcy55O1xyXG4gICAgICAgIHRoaXMueCA9IHggKiBhcmcubTExICsgeSAqIGFyZy5tMjEgKyBhcmcuZHg7XHJcbiAgICAgICAgdGhpcy55ID0geCAqIGFyZy5tMTIgKyB5ICogYXJnLm0yMiArIGFyZy5keTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE11bHRpcGxpZXMgdGhpcyB2ZWN0b3Igd2l0aCB0aGUgaW52ZXJzZSBvZiB0aGUgc3BlY2lmaWVkIG1hdHJpeCAoSW4gR0xTTDogYHRoaXMgPSBtYXRyaXggLyB0aGlzYCkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG1hdHJpeCAtIFRoZSBtYXRyaXggdG8gZGl2aWRlIHRoaXMgdmVjdG9yIGJ5LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGl2KGFyZzogQWZmaW5lVHJhbnNmb3JtKTogdGhpcyB7XHJcbiAgICAgICAgY29uc3QgYjExID0gYXJnLm0xMSwgYjEyID0gYXJnLm0xMjtcclxuICAgICAgICBjb25zdCBiMjEgPSBhcmcubTIxLCBiMjIgPSBhcmcubTIyO1xyXG4gICAgICAgIGNvbnN0IHggPSB0aGlzLng7XHJcbiAgICAgICAgY29uc3QgeSA9IHRoaXMueTtcclxuICAgICAgICBjb25zdCBkID0gYjExICogYjIyIC0gYjEyICogYjIxO1xyXG4gICAgICAgIGNvbnN0IGMxMSA9IGIyMiAvIGQ7XHJcbiAgICAgICAgY29uc3QgYzEyID0gLWIxMiAvIGQ7XHJcbiAgICAgICAgY29uc3QgYzIxID0gLWIyMSAvIGQ7XHJcbiAgICAgICAgY29uc3QgYzIyID0gYjExIC8gZDtcclxuICAgICAgICBjb25zdCBiMzEgPSBhcmcuZHgsIGIzMiA9IGFyZy5keTtcclxuICAgICAgICB0aGlzLnggPSB4ICogYzExICsgeSAqIGMyMSArIChiMjEgKiBiMzIgLSBiMzEgKiBiMjIpIC8gZDtcclxuICAgICAgICB0aGlzLnkgPSB4ICogYzEyICsgeSAqIGMyMiArIChiMzEgKiBiMTIgLSBiMTEgKiBiMzIpIC8gZDtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE5vcm1hbGl6ZXMgdGhpcyB2ZWN0b3IgdG8gYSBsZW5ndGggb2YgMS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG5vcm1hbGl6ZSgpOiB0aGlzIHtcclxuICAgICAgICBjb25zdCBsZW4gPSB0aGlzLmdldExlbmd0aCgpO1xyXG4gICAgICAgIHRoaXMueCAvPSBsZW47XHJcbiAgICAgICAgdGhpcy55IC89IGxlbjtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7OztBQXdFQTs7QUFFQTtBQUNBO0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTNLQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/graphics/Vector2.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/input/ControllerEvent.js":
|
|
/*!**************************************!*\
|
|
!*** ./lib/input/ControllerEvent.js ***!
|
|
\**************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GamepadControllerEvent = exports.ControllerEvent = void 0;\nconst ControllerFamily_1 = __webpack_require__(/*! ./ControllerFamily */ \"./lib/input/ControllerFamily.js\");\nconst ControllerIntent_1 = __webpack_require__(/*! ./ControllerIntent */ \"./lib/input/ControllerIntent.js\");\nconst controllerFamilySymbol = Symbol(\"controllerFamily\");\nconst intentsSymbol = Symbol(\"intent\");\nconst eventTypeSymbol = Symbol(\"eventType\");\nconst repeatSymbol = Symbol(\"repeat\");\nclass ControllerEvent extends Object {\n constructor(controllerFamily, eventType, intents, repeat = false) {\n super();\n this[controllerFamilySymbol] = controllerFamily;\n this[intentsSymbol] = intents.reduce((prev, curr) => prev | curr);\n this[eventTypeSymbol] = eventType;\n this[repeatSymbol] = repeat;\n }\n get controllerFamily() {\n return this[controllerFamilySymbol];\n }\n get eventType() {\n return this[eventTypeSymbol];\n }\n get repeat() {\n return this[repeatSymbol];\n }\n get isMenuLeft() {\n return (this[intentsSymbol] & ControllerIntent_1.ControllerIntent.MENU_LEFT) === ControllerIntent_1.ControllerIntent.MENU_LEFT;\n }\n get isMenuRight() {\n return (this[intentsSymbol] & ControllerIntent_1.ControllerIntent.MENU_RIGHT) === ControllerIntent_1.ControllerIntent.MENU_RIGHT;\n }\n get isMenuUp() {\n return (this[intentsSymbol] & ControllerIntent_1.ControllerIntent.MENU_UP) === ControllerIntent_1.ControllerIntent.MENU_UP;\n }\n get isMenuDown() {\n return (this[intentsSymbol] & ControllerIntent_1.ControllerIntent.MENU_DOWN) === ControllerIntent_1.ControllerIntent.MENU_DOWN;\n }\n get isPlayerMoveLeft() {\n return (this[intentsSymbol] & ControllerIntent_1.ControllerIntent.PLAYER_MOVE_LEFT) === ControllerIntent_1.ControllerIntent.PLAYER_MOVE_LEFT;\n }\n get isPlayerMoveRight() {\n return (this[intentsSymbol] & ControllerIntent_1.ControllerIntent.PLAYER_MOVE_RIGHT) === ControllerIntent_1.ControllerIntent.PLAYER_MOVE_RIGHT;\n }\n get isPlayerJump() {\n return (this[intentsSymbol] & ControllerIntent_1.ControllerIntent.PLAYER_JUMP) === ControllerIntent_1.ControllerIntent.PLAYER_JUMP;\n }\n get isPlayerDrop() {\n return (this[intentsSymbol] & ControllerIntent_1.ControllerIntent.PLAYER_DROP) === ControllerIntent_1.ControllerIntent.PLAYER_DROP;\n }\n get isPlayerEnterDoor() {\n return (this[intentsSymbol] & ControllerIntent_1.ControllerIntent.PLAYER_ENTER_DOOR) === ControllerIntent_1.ControllerIntent.PLAYER_ENTER_DOOR;\n }\n get isPlayerInteract() {\n return (this[intentsSymbol] & ControllerIntent_1.ControllerIntent.PLAYER_INTERACT) === ControllerIntent_1.ControllerIntent.PLAYER_INTERACT;\n }\n get isPlayerAction() {\n return (this[intentsSymbol] & ControllerIntent_1.ControllerIntent.PLAYER_ACTION) === ControllerIntent_1.ControllerIntent.PLAYER_ACTION;\n }\n get isPlayerRun() {\n return (this[intentsSymbol] & ControllerIntent_1.ControllerIntent.PLAYER_RUN) === ControllerIntent_1.ControllerIntent.PLAYER_RUN;\n }\n get isPlayerDance1() {\n return (this[intentsSymbol] & ControllerIntent_1.ControllerIntent.PLAYER_DANCE_1) === ControllerIntent_1.ControllerIntent.PLAYER_DANCE_1;\n }\n get isPlayerDance2() {\n return (this[intentsSymbol] & ControllerIntent_1.ControllerIntent.PLAYER_DANCE_2) === ControllerIntent_1.ControllerIntent.PLAYER_DANCE_2;\n }\n get isPause() {\n return (this[intentsSymbol] & ControllerIntent_1.ControllerIntent.PAUSE) === ControllerIntent_1.ControllerIntent.PAUSE;\n }\n get isConfirm() {\n return (this[intentsSymbol] & ControllerIntent_1.ControllerIntent.CONFIRM) === ControllerIntent_1.ControllerIntent.CONFIRM;\n }\n get isAbort() {\n return (this[intentsSymbol] & ControllerIntent_1.ControllerIntent.ABORT) === ControllerIntent_1.ControllerIntent.ABORT;\n }\n}\nexports.ControllerEvent = ControllerEvent;\nconst gamepadModelSymbol = Symbol(\"gamepadModel\");\nclass GamepadControllerEvent extends ControllerEvent {\n constructor(gamepadModel, eventType, intents, repeat = false) {\n super(ControllerFamily_1.ControllerFamily.GAMEPAD, eventType, intents, repeat);\n this[gamepadModelSymbol] = gamepadModel;\n }\n get gamepadModel() {\n return this[gamepadModelSymbol];\n }\n}\nexports.GamepadControllerEvent = GamepadControllerEvent;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvaW5wdXQvQ29udHJvbGxlckV2ZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2lucHV0L0NvbnRyb2xsZXJFdmVudC50cz80MmM3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRyb2xsZXJFdmVudFR5cGUgfSBmcm9tIFwiLi9Db250cm9sbGVyRXZlbnRUeXBlXCI7XHJcbmltcG9ydCB7IENvbnRyb2xsZXJGYW1pbHkgfSBmcm9tIFwiLi9Db250cm9sbGVyRmFtaWx5XCI7XHJcbmltcG9ydCB7IENvbnRyb2xsZXJJbnRlbnQgfSBmcm9tIFwiLi9Db250cm9sbGVySW50ZW50XCI7XHJcbmltcG9ydCB7IEdhbWVwYWRNb2RlbCB9IGZyb20gXCIuL0dhbWVwYWRNb2RlbFwiO1xyXG5cclxuY29uc3QgY29udHJvbGxlckZhbWlseVN5bWJvbCA9IFN5bWJvbChcImNvbnRyb2xsZXJGYW1pbHlcIik7XHJcbmNvbnN0IGludGVudHNTeW1ib2wgPSBTeW1ib2woXCJpbnRlbnRcIik7XHJcbmNvbnN0IGV2ZW50VHlwZVN5bWJvbCA9IFN5bWJvbChcImV2ZW50VHlwZVwiKTtcclxuY29uc3QgcmVwZWF0U3ltYm9sID0gU3ltYm9sKFwicmVwZWF0XCIpO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbnRyb2xsZXJFdmVudCBleHRlbmRzIE9iamVjdCB7XHJcbiAgICBwcml2YXRlIFtjb250cm9sbGVyRmFtaWx5U3ltYm9sXTogQ29udHJvbGxlckZhbWlseTtcclxuICAgIHByaXZhdGUgW2ludGVudHNTeW1ib2xdOiBDb250cm9sbGVySW50ZW50O1xyXG4gICAgcHJpdmF0ZSBbZXZlbnRUeXBlU3ltYm9sXTogQ29udHJvbGxlckV2ZW50VHlwZTtcclxuICAgIHByaXZhdGUgW3JlcGVhdFN5bWJvbF06IGJvb2xlYW47XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgY29udHJvbGxlckZhbWlseTogQ29udHJvbGxlckZhbWlseSwgZXZlbnRUeXBlOiBDb250cm9sbGVyRXZlbnRUeXBlLFxyXG4gICAgICAgIGludGVudHM6IENvbnRyb2xsZXJJbnRlbnRbXSwgcmVwZWF0OiBib29sZWFuID0gZmFsc2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcblxyXG4gICAgICAgIHRoaXNbY29udHJvbGxlckZhbWlseVN5bWJvbF0gPSBjb250cm9sbGVyRmFtaWx5O1xyXG4gICAgICAgIHRoaXNbaW50ZW50c1N5bWJvbF0gPSBpbnRlbnRzLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiB8IGN1cnIpO1xyXG4gICAgICAgIHRoaXNbZXZlbnRUeXBlU3ltYm9sXSA9IGV2ZW50VHlwZTtcclxuICAgICAgICB0aGlzW3JlcGVhdFN5bWJvbF0gPSByZXBlYXQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbnRyb2xsZXJGYW1pbHkoKTogQ29udHJvbGxlckZhbWlseSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNbY29udHJvbGxlckZhbWlseVN5bWJvbF07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGV2ZW50VHlwZSgpOiBDb250cm9sbGVyRXZlbnRUeXBlIHtcclxuICAgICAgICByZXR1cm4gdGhpc1tldmVudFR5cGVTeW1ib2xdO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCByZXBlYXQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNbcmVwZWF0U3ltYm9sXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNNZW51TGVmdCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXNbaW50ZW50c1N5bWJvbF0gJiBDb250cm9sbGVySW50ZW50Lk1FTlVfTEVGVCkgPT09IENvbnRyb2xsZXJJbnRlbnQuTUVOVV9MRUZUO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc01lbnVSaWdodCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXNbaW50ZW50c1N5bWJvbF0gJiBDb250cm9sbGVySW50ZW50Lk1FTlVfUklHSFQpID09PSBDb250cm9sbGVySW50ZW50Lk1FTlVfUklHSFQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzTWVudVVwKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAodGhpc1tpbnRlbnRzU3ltYm9sXSAmIENvbnRyb2xsZXJJbnRlbnQuTUVOVV9VUCkgPT09IENvbnRyb2xsZXJJbnRlbnQuTUVOVV9VUDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNNZW51RG93bigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXNbaW50ZW50c1N5bWJvbF0gJiBDb250cm9sbGVySW50ZW50Lk1FTlVfRE9XTikgPT09IENvbnRyb2xsZXJJbnRlbnQuTUVOVV9ET1dOO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc1BsYXllck1vdmVMZWZ0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAodGhpc1tpbnRlbnRzU3ltYm9sXSAmIENvbnRyb2xsZXJJbnRlbnQuUExBWUVSX01PVkVfTEVGVCkgPT09IENvbnRyb2xsZXJJbnRlbnQuUExBWUVSX01PVkVfTEVGVDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNQbGF5ZXJNb3ZlUmlnaHQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzW2ludGVudHNTeW1ib2xdICYgQ29udHJvbGxlckludGVudC5QTEFZRVJfTU9WRV9SSUdIVCkgPT09IENvbnRyb2xsZXJJbnRlbnQuUExBWUVSX01PVkVfUklHSFQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzUGxheWVySnVtcCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXNbaW50ZW50c1N5bWJvbF0gJiBDb250cm9sbGVySW50ZW50LlBMQVlFUl9KVU1QKSA9PT0gQ29udHJvbGxlckludGVudC5QTEFZRVJfSlVNUDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNQbGF5ZXJEcm9wKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAodGhpc1tpbnRlbnRzU3ltYm9sXSAmIENvbnRyb2xsZXJJbnRlbnQuUExBWUVSX0RST1ApID09PSBDb250cm9sbGVySW50ZW50LlBMQVlFUl9EUk9QO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc1BsYXllckVudGVyRG9vcigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXNbaW50ZW50c1N5bWJvbF0gJiBDb250cm9sbGVySW50ZW50LlBMQVlFUl9FTlRFUl9ET09SKSA9PT0gQ29udHJvbGxlckludGVudC5QTEFZRVJfRU5URVJfRE9PUjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNQbGF5ZXJJbnRlcmFjdCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXNbaW50ZW50c1N5bWJvbF0gJiBDb250cm9sbGVySW50ZW50LlBMQVlFUl9JTlRFUkFDVCkgPT09IENvbnRyb2xsZXJJbnRlbnQuUExBWUVSX0lOVEVSQUNUO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc1BsYXllckFjdGlvbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXNbaW50ZW50c1N5bWJvbF0gJiBDb250cm9sbGVySW50ZW50LlBMQVlFUl9BQ1RJT04pID09PSBDb250cm9sbGVySW50ZW50LlBMQVlFUl9BQ1RJT047XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzUGxheWVyUnVuKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAodGhpc1tpbnRlbnRzU3ltYm9sXSAmIENvbnRyb2xsZXJJbnRlbnQuUExBWUVSX1JVTikgPT09IENvbnRyb2xsZXJJbnRlbnQuUExBWUVSX1JVTjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNQbGF5ZXJEYW5jZTEoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzW2ludGVudHNTeW1ib2xdICYgQ29udHJvbGxlckludGVudC5QTEFZRVJfREFOQ0VfMSkgPT09IENvbnRyb2xsZXJJbnRlbnQuUExBWUVSX0RBTkNFXzE7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzUGxheWVyRGFuY2UyKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAodGhpc1tpbnRlbnRzU3ltYm9sXSAmIENvbnRyb2xsZXJJbnRlbnQuUExBWUVSX0RBTkNFXzIpID09PSBDb250cm9sbGVySW50ZW50LlBMQVlFUl9EQU5DRV8yO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc1BhdXNlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAodGhpc1tpbnRlbnRzU3ltYm9sXSAmIENvbnRyb2xsZXJJbnRlbnQuUEFVU0UpID09PSBDb250cm9sbGVySW50ZW50LlBBVVNFO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc0NvbmZpcm0oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzW2ludGVudHNTeW1ib2xdICYgQ29udHJvbGxlckludGVudC5DT05GSVJNKSA9PT0gQ29udHJvbGxlckludGVudC5DT05GSVJNO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc0Fib3J0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAodGhpc1tpbnRlbnRzU3ltYm9sXSAmIENvbnRyb2xsZXJJbnRlbnQuQUJPUlQpID09PSBDb250cm9sbGVySW50ZW50LkFCT1JUO1xyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBnYW1lcGFkTW9kZWxTeW1ib2wgPSBTeW1ib2woXCJnYW1lcGFkTW9kZWxcIik7XHJcblxyXG5leHBvcnQgY2xhc3MgR2FtZXBhZENvbnRyb2xsZXJFdmVudCBleHRlbmRzIENvbnRyb2xsZXJFdmVudCB7XHJcbiAgICBwcml2YXRlIFtnYW1lcGFkTW9kZWxTeW1ib2xdOiBHYW1lcGFkTW9kZWw7XHJcbiAgICBjb25zdHJ1Y3RvcihnYW1lcGFkTW9kZWw6IEdhbWVwYWRNb2RlbCwgZXZlbnRUeXBlOiBDb250cm9sbGVyRXZlbnRUeXBlLCBpbnRlbnRzOiBDb250cm9sbGVySW50ZW50W10sIHJlcGVhdDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgc3VwZXIoQ29udHJvbGxlckZhbWlseS5HQU1FUEFELCBldmVudFR5cGUsIGludGVudHMsIHJlcGVhdCk7XHJcbiAgICAgICAgdGhpc1tnYW1lcGFkTW9kZWxTeW1ib2xdID0gZ2FtZXBhZE1vZGVsO1xyXG4gICAgfVxyXG4gICAgZ2V0IGdhbWVwYWRNb2RlbCgpOiBHYW1lcGFkTW9kZWwge1xyXG4gICAgICAgIHJldHVybiB0aGlzW2dhbWVwYWRNb2RlbFN5bWJvbF07XHJcbiAgICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQU1BO0FBSUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFqR0E7QUFtR0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/input/ControllerEvent.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/input/ControllerEventType.js":
|
|
/*!******************************************!*\
|
|
!*** ./lib/input/ControllerEventType.js ***!
|
|
\******************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ControllerEventType = void 0;\nvar ControllerEventType;\n(function (ControllerEventType) {\n ControllerEventType[\"UP\"] = \"up\";\n ControllerEventType[\"DOWN\"] = \"down\";\n ControllerEventType[\"PRESS\"] = \"press\";\n})(ControllerEventType = exports.ControllerEventType || (exports.ControllerEventType = {}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvaW5wdXQvQ29udHJvbGxlckV2ZW50VHlwZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9pbnB1dC9Db250cm9sbGVyRXZlbnRUeXBlLnRzPzgwMzciXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gQ29udHJvbGxlckV2ZW50VHlwZSB7XHJcbiAgICBVUCA9IFwidXBcIixcclxuICAgIERPV04gPSBcImRvd25cIixcclxuICAgIFBSRVNTID0gXCJwcmVzc1wiXHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/input/ControllerEventType.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/input/ControllerFamily.js":
|
|
/*!***************************************!*\
|
|
!*** ./lib/input/ControllerFamily.js ***!
|
|
\***************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ControllerAnimationTags = exports.ControllerSpriteMap = exports.ControllerFamily = void 0;\n/**\n * This enumeration is used to classify the various known input methods.\n */\nvar ControllerFamily;\n(function (ControllerFamily) {\n ControllerFamily[\"KEYBOARD\"] = \"keyboard\";\n ControllerFamily[\"GAMEPAD\"] = \"gamepad\";\n})(ControllerFamily = exports.ControllerFamily || (exports.ControllerFamily = {}));\n/**\n * This enum consists of all supported button aseprite sheets\n */\nvar ControllerSpriteMap;\n(function (ControllerSpriteMap) {\n ControllerSpriteMap[\"KEYBOARD\"] = \"keyboard\";\n ControllerSpriteMap[\"XBOX\"] = \"xbox\";\n ControllerSpriteMap[\"PLAYSTATION\"] = \"playstation\";\n})(ControllerSpriteMap = exports.ControllerSpriteMap || (exports.ControllerSpriteMap = {}));\n/**\n * This enum consists of all available animation tags supported by the button aseprite sheets\n */\nvar ControllerAnimationTags;\n(function (ControllerAnimationTags) {\n ControllerAnimationTags[\"CONFIRM\"] = \"confirm\";\n ControllerAnimationTags[\"JUMP\"] = \"jump\";\n ControllerAnimationTags[\"ACTION\"] = \"action\";\n ControllerAnimationTags[\"INTERACT\"] = \"interact\";\n ControllerAnimationTags[\"OPEN_DOOR\"] = \"up\";\n ControllerAnimationTags[\"BACK\"] = \"back\";\n})(ControllerAnimationTags = exports.ControllerAnimationTags || (exports.ControllerAnimationTags = {}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvaW5wdXQvQ29udHJvbGxlckZhbWlseS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9pbnB1dC9Db250cm9sbGVyRmFtaWx5LnRzP2I3YTMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFRoaXMgZW51bWVyYXRpb24gaXMgdXNlZCB0byBjbGFzc2lmeSB0aGUgdmFyaW91cyBrbm93biBpbnB1dCBtZXRob2RzLlxyXG4gKi9cclxuZXhwb3J0IGVudW0gQ29udHJvbGxlckZhbWlseSB7XHJcbiAgICBLRVlCT0FSRCA9IFwia2V5Ym9hcmRcIixcclxuICAgIEdBTUVQQUQgPSBcImdhbWVwYWRcIlxyXG59XHJcblxyXG4vKipcclxuICogVGhpcyBlbnVtIGNvbnNpc3RzIG9mIGFsbCBzdXBwb3J0ZWQgYnV0dG9uIGFzZXByaXRlIHNoZWV0c1xyXG4gKi9cclxuZXhwb3J0IGVudW0gQ29udHJvbGxlclNwcml0ZU1hcCB7XHJcbiAgICBLRVlCT0FSRCA9IFwia2V5Ym9hcmRcIixcclxuICAgIFhCT1ggPSBcInhib3hcIixcclxuICAgIFBMQVlTVEFUSU9OID0gXCJwbGF5c3RhdGlvblwiXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUaGlzIGVudW0gY29uc2lzdHMgb2YgYWxsIGF2YWlsYWJsZSBhbmltYXRpb24gdGFncyBzdXBwb3J0ZWQgYnkgdGhlIGJ1dHRvbiBhc2Vwcml0ZSBzaGVldHNcclxuICovXHJcbmV4cG9ydCBlbnVtIENvbnRyb2xsZXJBbmltYXRpb25UYWdzIHtcclxuICAgIENPTkZJUk0gPSBcImNvbmZpcm1cIixcclxuICAgIEpVTVAgPSBcImp1bXBcIixcclxuICAgIEFDVElPTiA9IFwiYWN0aW9uXCIsXHJcbiAgICBJTlRFUkFDVCA9IFwiaW50ZXJhY3RcIixcclxuICAgIE9QRU5fRE9PUiA9IFwidXBcIixcclxuICAgIEJBQ0sgPSBcImJhY2tcIlxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7O0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/input/ControllerFamily.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/input/ControllerIntent.js":
|
|
/*!***************************************!*\
|
|
!*** ./lib/input/ControllerIntent.js ***!
|
|
\***************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ControllerIntent = void 0;\n/**\n * Enumeration of the different intents that may be emitted by a single button,\n * whereas a button might either be a physical key on a keyboard, a mapped axis\n * on a gamepad or a touch screen event.\n *\n * Right now, these events are stored in a bit mask to be extra efficient, …\n * …maybe that's not really necessary and should be changed to improve\n * readability at some point…\n */\nvar ControllerIntent;\n(function (ControllerIntent) {\n /** Used for unknown / unmapped buttons. */\n ControllerIntent[ControllerIntent[\"NONE\"] = 0] = \"NONE\";\n /** Player movement: left */\n ControllerIntent[ControllerIntent[\"PLAYER_MOVE_LEFT\"] = 1] = \"PLAYER_MOVE_LEFT\";\n /** Player movement: right */\n ControllerIntent[ControllerIntent[\"PLAYER_MOVE_RIGHT\"] = 2] = \"PLAYER_MOVE_RIGHT\";\n /** Player movement: jump */\n ControllerIntent[ControllerIntent[\"PLAYER_JUMP\"] = 4] = \"PLAYER_JUMP\";\n /** Player movement: DROP (or: duck/crouch) */\n ControllerIntent[ControllerIntent[\"PLAYER_DROP\"] = 8] = \"PLAYER_DROP\";\n /** Talk to NPCs, read signs etc */\n ControllerIntent[ControllerIntent[\"PLAYER_INTERACT\"] = 16] = \"PLAYER_INTERACT\";\n /** Action, throw stuff */\n ControllerIntent[ControllerIntent[\"PLAYER_ACTION\"] = 32] = \"PLAYER_ACTION\";\n /** Dance move no. 1 */\n ControllerIntent[ControllerIntent[\"PLAYER_DANCE_1\"] = 64] = \"PLAYER_DANCE_1\";\n /** Dance move no. 2 */\n ControllerIntent[ControllerIntent[\"PLAYER_DANCE_2\"] = 128] = \"PLAYER_DANCE_2\";\n // Menu navigation\n ControllerIntent[ControllerIntent[\"MENU_LEFT\"] = 256] = \"MENU_LEFT\";\n ControllerIntent[ControllerIntent[\"MENU_RIGHT\"] = 512] = \"MENU_RIGHT\";\n ControllerIntent[ControllerIntent[\"MENU_UP\"] = 1024] = \"MENU_UP\";\n ControllerIntent[ControllerIntent[\"MENU_DOWN\"] = 2048] = \"MENU_DOWN\";\n /** The key usually known as \"enter\" or something alike. */\n ControllerIntent[ControllerIntent[\"CONFIRM\"] = 4096] = \"CONFIRM\";\n /** Go through doors */\n ControllerIntent[ControllerIntent[\"PLAYER_ENTER_DOOR\"] = 8192] = \"PLAYER_ENTER_DOOR\";\n /** Pause/unpause. */\n ControllerIntent[ControllerIntent[\"PAUSE\"] = 16384] = \"PAUSE\";\n /** Back / abort / get-me-the-hell-out-of-here. */\n ControllerIntent[ControllerIntent[\"ABORT\"] = 32768] = \"ABORT\";\n /** Run modifier */\n ControllerIntent[ControllerIntent[\"PLAYER_RUN\"] = 65536] = \"PLAYER_RUN\";\n ControllerIntent[ControllerIntent[\"UNUSED_1\"] = 131072] = \"UNUSED_1\";\n ControllerIntent[ControllerIntent[\"UNUSED_2\"] = 262144] = \"UNUSED_2\";\n ControllerIntent[ControllerIntent[\"UNUSED_3\"] = 524288] = \"UNUSED_3\";\n})(ControllerIntent = exports.ControllerIntent || (exports.ControllerIntent = {}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvaW5wdXQvQ29udHJvbGxlckludGVudC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9pbnB1dC9Db250cm9sbGVySW50ZW50LnRzP2NiM2QiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEVudW1lcmF0aW9uIG9mIHRoZSBkaWZmZXJlbnQgaW50ZW50cyB0aGF0IG1heSBiZSBlbWl0dGVkIGJ5IGEgc2luZ2xlIGJ1dHRvbixcclxuICogd2hlcmVhcyBhIGJ1dHRvbiBtaWdodCBlaXRoZXIgYmUgYSBwaHlzaWNhbCBrZXkgb24gYSBrZXlib2FyZCwgYSBtYXBwZWQgYXhpc1xyXG4gKiBvbiBhIGdhbWVwYWQgb3IgYSB0b3VjaCBzY3JlZW4gZXZlbnQuXHJcbiAqXHJcbiAqIFJpZ2h0IG5vdywgdGhlc2UgZXZlbnRzIGFyZSBzdG9yZWQgaW4gYSBiaXQgbWFzayB0byBiZSBleHRyYSBlZmZpY2llbnQsIOKAplxyXG4gKiDigKZtYXliZSB0aGF0J3Mgbm90IHJlYWxseSBuZWNlc3NhcnkgYW5kIHNob3VsZCBiZSBjaGFuZ2VkIHRvIGltcHJvdmVcclxuICogcmVhZGFiaWxpdHkgYXQgc29tZSBwb2ludOKAplxyXG4gKi9cclxuZXhwb3J0IGVudW0gQ29udHJvbGxlckludGVudCB7XHJcbiAgICAvKiogVXNlZCBmb3IgdW5rbm93biAvIHVubWFwcGVkIGJ1dHRvbnMuICovXHJcbiAgICBOT05FID0gMCxcclxuXHJcbiAgICAvKiogUGxheWVyIG1vdmVtZW50OiBsZWZ0ICovXHJcbiAgICBQTEFZRVJfTU9WRV9MRUZUID0gMGIwMDAwXzAwMDBfMDAwMF8wMDAwXzAwMDEsXHJcbiAgICAvKiogUGxheWVyIG1vdmVtZW50OiByaWdodCAqL1xyXG4gICAgUExBWUVSX01PVkVfUklHSFQgPSAwYjAwMDBfMDAwMF8wMDAwXzAwMDBfMDAxMCxcclxuICAgIC8qKiBQbGF5ZXIgbW92ZW1lbnQ6IGp1bXAgKi9cclxuICAgIFBMQVlFUl9KVU1QID0gMGIwMDAwXzAwMDBfMDAwMF8wMDAwXzAxMDAsXHJcbiAgICAvKiogUGxheWVyIG1vdmVtZW50OiBEUk9QIChvcjogZHVjay9jcm91Y2gpICovXHJcbiAgICBQTEFZRVJfRFJPUCA9IDBiMDAwMF8wMDAwXzAwMDBfMDAwMF8xMDAwLFxyXG5cclxuICAgIC8qKiBUYWxrIHRvIE5QQ3MsIHJlYWQgc2lnbnMgZXRjICovXHJcbiAgICBQTEFZRVJfSU5URVJBQ1QgPSAwYjAwMDBfMDAwMF8wMDAwXzAwMDFfMDAwMCxcclxuXHJcbiAgICAvKiogQWN0aW9uLCB0aHJvdyBzdHVmZiAqL1xyXG4gICAgUExBWUVSX0FDVElPTiA9IDBiMDAwMF8wMDAwXzAwMDBfMDAxMF8wMDAwLFxyXG5cclxuICAgIC8qKiBEYW5jZSBtb3ZlIG5vLiAxICovXHJcbiAgICBQTEFZRVJfREFOQ0VfMSA9IDBiMDAwMF8wMDAwXzAwMDBfMDEwMF8wMDAwLFxyXG5cclxuICAgIC8qKiBEYW5jZSBtb3ZlIG5vLiAyICovXHJcbiAgICBQTEFZRVJfREFOQ0VfMiA9IDBiMDAwMF8wMDAwXzAwMDBfMTAwMF8wMDAwLFxyXG5cclxuICAgIC8vIE1lbnUgbmF2aWdhdGlvblxyXG4gICAgTUVOVV9MRUZUID0gMGIwMDAwXzAwMDBfMDAwMV8wMDAwXzAwMDAsXHJcbiAgICBNRU5VX1JJR0hUID0gMGIwMDAwXzAwMDBfMDAxMF8wMDAwXzAwMDAsXHJcbiAgICBNRU5VX1VQID0gMGIwMDAwXzAwMDBfMDEwMF8wMDAwXzAwMDAsXHJcbiAgICBNRU5VX0RPV04gPSAwYjAwMDBfMDAwMF8xMDAwXzAwMDBfMDAwMCxcclxuXHJcbiAgICAvKiogVGhlIGtleSB1c3VhbGx5IGtub3duIGFzIFwiZW50ZXJcIiBvciBzb21ldGhpbmcgYWxpa2UuICovXHJcbiAgICBDT05GSVJNID0gMGIwMDAwXzAwMDFfMDAwMF8wMDAwXzAwMDAsXHJcblxyXG4gICAgLyoqIEdvIHRocm91Z2ggZG9vcnMgKi9cclxuICAgIFBMQVlFUl9FTlRFUl9ET09SID0gMGIwMDAwXzAwMTBfMDAwMF8wMDAwXzAwMDAsXHJcblxyXG4gICAgLyoqIFBhdXNlL3VucGF1c2UuICovXHJcbiAgICBQQVVTRSA9IDBiMDAwMF8wMTAwXzAwMDBfMDAwMF8wMDAwLFxyXG5cclxuICAgIC8qKiBCYWNrIC8gYWJvcnQgLyBnZXQtbWUtdGhlLWhlbGwtb3V0LW9mLWhlcmUuICovXHJcbiAgICBBQk9SVCA9IDBiMDAwMF8xMDAwXzAwMDBfMDAwMF8wMDAwLFxyXG5cclxuICAgIC8qKiBSdW4gbW9kaWZpZXIgKi9cclxuICAgIFBMQVlFUl9SVU4gPSAwYjAwMDFfMDAwMF8wMDAwXzAwMDBfMDAwMCxcclxuXHJcbiAgICBVTlVTRURfMSA9IDBiMDAxMF8wMDAwXzAwMDBfMDAwMF8wMDAwLFxyXG4gICAgVU5VU0VEXzIgPSAwYjAxMDBfMDAwMF8wMDAwXzAwMDBfMDAwMCxcclxuICAgIFVOVVNFRF8zID0gMGIxMDAwXzAwMDBfMDAwMF8wMDAwXzAwMDAsXHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/input/ControllerIntent.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/input/ControllerManager.js":
|
|
/*!****************************************!*\
|
|
!*** ./lib/input/ControllerManager.js ***!
|
|
\****************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ControllerManager = void 0;\nconst ControllerFamily_1 = __webpack_require__(/*! ./ControllerFamily */ \"./lib/input/ControllerFamily.js\");\nconst GamepadStyle_1 = __webpack_require__(/*! ./GamepadStyle */ \"./lib/input/GamepadStyle.js\");\nconst Signal_1 = __webpack_require__(/*! ../Signal */ \"./lib/Signal.js\");\n/** Symbol to identify the current/active controller family */\nconst currentControllerFamilySymbol = Symbol(\"currentControllerFamily\");\nclass ControllerManager {\n constructor(initialControllerFamily = ControllerFamily_1.ControllerFamily.KEYBOARD) {\n this.onButtonDown = new Signal_1.Signal();\n this.onButtonUp = new Signal_1.Signal();\n this.onButtonPress = new Signal_1.Signal();\n this.onControllerFamilyChange = new Signal_1.Signal();\n this.selectedGamepadStyle = GamepadStyle_1.GamepadStyle.XBOX;\n this.currentControllerFamily = initialControllerFamily;\n this.onButtonDown.connect(e => {\n if (this.currentControllerFamily !== e.controllerFamily) {\n this.currentControllerFamily = e.controllerFamily;\n }\n });\n }\n static getInstance() {\n return ControllerManager.INSTANCE;\n }\n set currentControllerFamily(controllerFamily) {\n if (controllerFamily !== this[currentControllerFamilySymbol]) {\n this[currentControllerFamilySymbol] = controllerFamily;\n this.onControllerFamilyChange.emit(controllerFamily);\n }\n }\n /**\n * Returns the current (a.k.a. most recently used!) controller family.\n * Can be used to determine which tooltips (gamepad buttons or keyboard indicators) to show.\n */\n get currentControllerFamily() {\n return this[currentControllerFamilySymbol];\n }\n toggleSelectedGamepadStyle() {\n this.selectedGamepadStyle = this.selectedGamepadStyle === GamepadStyle_1.GamepadStyle.XBOX ? GamepadStyle_1.GamepadStyle.PLAYSTATION : GamepadStyle_1.GamepadStyle.XBOX;\n }\n get controllerSprite() {\n if (this.currentControllerFamily === ControllerFamily_1.ControllerFamily.GAMEPAD) {\n switch (ControllerManager.getInstance().selectedGamepadStyle) {\n case GamepadStyle_1.GamepadStyle.PLAYSTATION:\n return ControllerFamily_1.ControllerSpriteMap.PLAYSTATION;\n case GamepadStyle_1.GamepadStyle.XBOX:\n return ControllerFamily_1.ControllerSpriteMap.XBOX;\n }\n }\n // Fallback to Keyboard\n return ControllerFamily_1.ControllerSpriteMap.KEYBOARD;\n }\n}\nexports.ControllerManager = ControllerManager;\nControllerManager.INSTANCE = new ControllerManager();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvaW5wdXQvQ29udHJvbGxlck1hbmFnZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvaW5wdXQvQ29udHJvbGxlck1hbmFnZXIudHM/OTJlYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb250cm9sbGVyRXZlbnQgfSBmcm9tIFwiLi9Db250cm9sbGVyRXZlbnRcIjtcclxuaW1wb3J0IHsgQ29udHJvbGxlckZhbWlseSwgQ29udHJvbGxlclNwcml0ZU1hcCB9IGZyb20gXCIuL0NvbnRyb2xsZXJGYW1pbHlcIjtcclxuaW1wb3J0IHsgR2FtZXBhZFN0eWxlIH0gZnJvbSBcIi4vR2FtZXBhZFN0eWxlXCI7XHJcbmltcG9ydCB7IFNpZ25hbCB9IGZyb20gXCIuLi9TaWduYWxcIjtcclxuXHJcbi8qKiBTeW1ib2wgdG8gaWRlbnRpZnkgdGhlIGN1cnJlbnQvYWN0aXZlIGNvbnRyb2xsZXIgZmFtaWx5ICovXHJcbmNvbnN0IGN1cnJlbnRDb250cm9sbGVyRmFtaWx5U3ltYm9sID0gU3ltYm9sKFwiY3VycmVudENvbnRyb2xsZXJGYW1pbHlcIik7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29udHJvbGxlck1hbmFnZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgSU5TVEFOQ0UgPSBuZXcgQ29udHJvbGxlck1hbmFnZXIoKTtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldEluc3RhbmNlKCk6IENvbnRyb2xsZXJNYW5hZ2VyIHtcclxuICAgICAgICByZXR1cm4gQ29udHJvbGxlck1hbmFnZXIuSU5TVEFOQ0U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlYWRvbmx5IG9uQnV0dG9uRG93biA9IG5ldyBTaWduYWw8Q29udHJvbGxlckV2ZW50PigpO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IG9uQnV0dG9uVXAgPSBuZXcgU2lnbmFsPENvbnRyb2xsZXJFdmVudD4oKTtcclxuICAgIHB1YmxpYyByZWFkb25seSBvbkJ1dHRvblByZXNzID0gbmV3IFNpZ25hbDxDb250cm9sbGVyRXZlbnQ+KCk7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgb25Db250cm9sbGVyRmFtaWx5Q2hhbmdlID0gbmV3IFNpZ25hbDxDb250cm9sbGVyRmFtaWx5PigpO1xyXG5cclxuICAgIHB1YmxpYyBzZWxlY3RlZEdhbWVwYWRTdHlsZSA9IEdhbWVwYWRTdHlsZS5YQk9YO1xyXG5cclxuICAgIHByaXZhdGUgW2N1cnJlbnRDb250cm9sbGVyRmFtaWx5U3ltYm9sXTogQ29udHJvbGxlckZhbWlseTtcclxuXHJcbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKGluaXRpYWxDb250cm9sbGVyRmFtaWx5OiBDb250cm9sbGVyRmFtaWx5ID0gQ29udHJvbGxlckZhbWlseS5LRVlCT0FSRCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudENvbnRyb2xsZXJGYW1pbHkgPSBpbml0aWFsQ29udHJvbGxlckZhbWlseTtcclxuXHJcbiAgICAgICAgdGhpcy5vbkJ1dHRvbkRvd24uY29ubmVjdChlID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudENvbnRyb2xsZXJGYW1pbHkgIT09IGUuY29udHJvbGxlckZhbWlseSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q29udHJvbGxlckZhbWlseSA9IGUuY29udHJvbGxlckZhbWlseTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXQgY3VycmVudENvbnRyb2xsZXJGYW1pbHkoY29udHJvbGxlckZhbWlseTogQ29udHJvbGxlckZhbWlseSkge1xyXG4gICAgICAgIGlmIChjb250cm9sbGVyRmFtaWx5ICE9PSB0aGlzW2N1cnJlbnRDb250cm9sbGVyRmFtaWx5U3ltYm9sXSkge1xyXG4gICAgICAgICAgICB0aGlzW2N1cnJlbnRDb250cm9sbGVyRmFtaWx5U3ltYm9sXSA9IGNvbnRyb2xsZXJGYW1pbHk7XHJcbiAgICAgICAgICAgIHRoaXMub25Db250cm9sbGVyRmFtaWx5Q2hhbmdlLmVtaXQoY29udHJvbGxlckZhbWlseSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCAoYS5rLmEuIG1vc3QgcmVjZW50bHkgdXNlZCEpIGNvbnRyb2xsZXIgZmFtaWx5LlxyXG4gICAgICogQ2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIHRvb2x0aXBzIChnYW1lcGFkIGJ1dHRvbnMgb3Iga2V5Ym9hcmQgaW5kaWNhdG9ycykgdG8gc2hvdy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBjdXJyZW50Q29udHJvbGxlckZhbWlseSgpOiBDb250cm9sbGVyRmFtaWx5IHtcclxuICAgICAgICByZXR1cm4gdGhpc1tjdXJyZW50Q29udHJvbGxlckZhbWlseVN5bWJvbF07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvZ2dsZVNlbGVjdGVkR2FtZXBhZFN0eWxlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHYW1lcGFkU3R5bGUgPSB0aGlzLnNlbGVjdGVkR2FtZXBhZFN0eWxlID09PSBHYW1lcGFkU3R5bGUuWEJPWCA/IEdhbWVwYWRTdHlsZS5QTEFZU1RBVElPTiA6IEdhbWVwYWRTdHlsZS5YQk9YO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgY29udHJvbGxlclNwcml0ZSgpOiBDb250cm9sbGVyU3ByaXRlTWFwIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50Q29udHJvbGxlckZhbWlseSA9PT0gQ29udHJvbGxlckZhbWlseS5HQU1FUEFEKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoQ29udHJvbGxlck1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5zZWxlY3RlZEdhbWVwYWRTdHlsZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBHYW1lcGFkU3R5bGUuUExBWVNUQVRJT046XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbnRyb2xsZXJTcHJpdGVNYXAuUExBWVNUQVRJT047XHJcbiAgICAgICAgICAgICAgICBjYXNlIEdhbWVwYWRTdHlsZS5YQk9YOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBDb250cm9sbGVyU3ByaXRlTWFwLlhCT1g7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEZhbGxiYWNrIHRvIEtleWJvYXJkXHJcbiAgICAgICAgcmV0dXJuIENvbnRyb2xsZXJTcHJpdGVNYXAuS0VZQk9BUkQ7XHJcbiAgICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFnQkE7QUFUQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFyQkE7QUFDQTtBQUNBO0FBcUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7QUF6REE7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/input/ControllerManager.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/input/GamepadInput.js":
|
|
/*!***********************************!*\
|
|
!*** ./lib/input/GamepadInput.js ***!
|
|
\***********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GamepadInput = void 0;\nconst ControllerManager_1 = __webpack_require__(/*! ./ControllerManager */ \"./lib/input/ControllerManager.js\");\nconst ControllerIntent_1 = __webpack_require__(/*! ./ControllerIntent */ \"./lib/input/ControllerIntent.js\");\nconst ControllerEventType_1 = __webpack_require__(/*! ./ControllerEventType */ \"./lib/input/ControllerEventType.js\");\nconst ControllerEvent_1 = __webpack_require__(/*! ./ControllerEvent */ \"./lib/input/ControllerEvent.js\");\nconst GamepadModel_1 = __webpack_require__(/*! ./GamepadModel */ \"./lib/input/GamepadModel.js\");\n/**\n * Game Pad Buttons\n */\nvar GamePadButtonId;\n(function (GamePadButtonId) {\n /** Button A / Cross*/\n GamePadButtonId[GamePadButtonId[\"BUTTON_1\"] = 0] = \"BUTTON_1\";\n /** Button B / Circle*/\n GamePadButtonId[GamePadButtonId[\"BUTTON_2\"] = 1] = \"BUTTON_2\";\n /** Button X / Square*/\n GamePadButtonId[GamePadButtonId[\"BUTTON_3\"] = 2] = \"BUTTON_3\";\n /** Button Y / Triangle */\n GamePadButtonId[GamePadButtonId[\"BUTTON_4\"] = 3] = \"BUTTON_4\";\n GamePadButtonId[GamePadButtonId[\"SHOULDER_TOP_LEFT\"] = 4] = \"SHOULDER_TOP_LEFT\";\n GamePadButtonId[GamePadButtonId[\"SHOULDER_TOP_RIGHT\"] = 5] = \"SHOULDER_TOP_RIGHT\";\n GamePadButtonId[GamePadButtonId[\"SHOULDER_BOTTOM_LEFT\"] = 6] = \"SHOULDER_BOTTOM_LEFT\";\n GamePadButtonId[GamePadButtonId[\"SHOULDER_BOTTOM_RIGHT\"] = 7] = \"SHOULDER_BOTTOM_RIGHT\";\n GamePadButtonId[GamePadButtonId[\"SELECT\"] = 8] = \"SELECT\";\n GamePadButtonId[GamePadButtonId[\"START\"] = 9] = \"START\";\n GamePadButtonId[GamePadButtonId[\"STICK_BUTTON_LEFT\"] = 10] = \"STICK_BUTTON_LEFT\";\n GamePadButtonId[GamePadButtonId[\"STICK_BUTTON_RIGHT\"] = 11] = \"STICK_BUTTON_RIGHT\";\n GamePadButtonId[GamePadButtonId[\"D_PAD_UP\"] = 12] = \"D_PAD_UP\";\n GamePadButtonId[GamePadButtonId[\"D_PAD_DOWN\"] = 13] = \"D_PAD_DOWN\";\n GamePadButtonId[GamePadButtonId[\"D_PAD_LEFT\"] = 14] = \"D_PAD_LEFT\";\n GamePadButtonId[GamePadButtonId[\"D_PAD_RIGHT\"] = 15] = \"D_PAD_RIGHT\";\n GamePadButtonId[GamePadButtonId[\"VENDOR\"] = 16] = \"VENDOR\";\n})(GamePadButtonId || (GamePadButtonId = {}));\nvar StickAxisId;\n(function (StickAxisId) {\n /** Left stick X axis */\n StickAxisId[StickAxisId[\"LEFT_LEFT_RIGHT\"] = 0] = \"LEFT_LEFT_RIGHT\";\n /** Left stick Y axis */\n StickAxisId[StickAxisId[\"LEFT_UP_DOWN\"] = 1] = \"LEFT_UP_DOWN\";\n /** Right stick X axis */\n StickAxisId[StickAxisId[\"RIGHT_LEFT_RIGHT\"] = 2] = \"RIGHT_LEFT_RIGHT\";\n /** Right stick Y axis */\n StickAxisId[StickAxisId[\"RIGHT_UP_DOWN\"] = 3] = \"RIGHT_UP_DOWN\";\n})(StickAxisId || (StickAxisId = {}));\nconst axisMapping = new Map();\naxisMapping.set(StickAxisId.LEFT_LEFT_RIGHT, { button1: GamePadButtonId.D_PAD_LEFT, button2: GamePadButtonId.D_PAD_RIGHT });\naxisMapping.set(StickAxisId.LEFT_UP_DOWN, { button1: GamePadButtonId.D_PAD_UP, button2: GamePadButtonId.D_PAD_DOWN });\nconst intentMappings = new Map();\nintentMappings.set(GamePadButtonId.D_PAD_UP, [ControllerIntent_1.ControllerIntent.PLAYER_ENTER_DOOR, ControllerIntent_1.ControllerIntent.MENU_UP]);\nintentMappings.set(GamePadButtonId.D_PAD_DOWN, [ControllerIntent_1.ControllerIntent.PLAYER_DROP, ControllerIntent_1.ControllerIntent.MENU_DOWN]);\nintentMappings.set(GamePadButtonId.D_PAD_LEFT, [ControllerIntent_1.ControllerIntent.PLAYER_MOVE_LEFT, ControllerIntent_1.ControllerIntent.MENU_LEFT]);\nintentMappings.set(GamePadButtonId.D_PAD_RIGHT, [ControllerIntent_1.ControllerIntent.PLAYER_MOVE_RIGHT, ControllerIntent_1.ControllerIntent.MENU_RIGHT]);\nintentMappings.set(GamePadButtonId.BUTTON_1, [ControllerIntent_1.ControllerIntent.PLAYER_JUMP, ControllerIntent_1.ControllerIntent.CONFIRM]);\nintentMappings.set(GamePadButtonId.BUTTON_2, [ControllerIntent_1.ControllerIntent.ABORT]);\nintentMappings.set(GamePadButtonId.BUTTON_3, [ControllerIntent_1.ControllerIntent.PLAYER_RUN]);\nintentMappings.set(GamePadButtonId.BUTTON_4, [ControllerIntent_1.ControllerIntent.PLAYER_INTERACT]);\nintentMappings.set(GamePadButtonId.SHOULDER_TOP_LEFT, [ControllerIntent_1.ControllerIntent.PLAYER_DANCE_1, ControllerIntent_1.ControllerIntent.PLAYER_ACTION]);\nintentMappings.set(GamePadButtonId.SHOULDER_TOP_RIGHT, [ControllerIntent_1.ControllerIntent.PLAYER_DANCE_2, ControllerIntent_1.ControllerIntent.PLAYER_ACTION]);\nintentMappings.set(GamePadButtonId.START, [ControllerIntent_1.ControllerIntent.PAUSE]);\nclass GamepadButtonWrapper {\n constructor(index, wrapped, gamepad) {\n this.index = index;\n this.pressed = wrapped.pressed;\n this.gamepad = gamepad;\n }\n setPressed(pressed) {\n const controllerManager = ControllerManager_1.ControllerManager.getInstance();\n const oldPressed = this.pressed;\n this.pressed = pressed;\n if (oldPressed !== pressed) {\n if (pressed) {\n controllerManager.onButtonDown.emit(new ControllerEvent_1.GamepadControllerEvent(this.gamepad.gamepadModel, ControllerEventType_1.ControllerEventType.DOWN, intentMappings.get(this.index) || [ControllerIntent_1.ControllerIntent.NONE]));\n }\n else {\n controllerManager.onButtonUp.emit(new ControllerEvent_1.GamepadControllerEvent(this.gamepad.gamepadModel, ControllerEventType_1.ControllerEventType.UP, intentMappings.get(this.index) || [ControllerIntent_1.ControllerIntent.NONE]));\n }\n }\n }\n}\nclass GamepadAxisWrapper {\n constructor(index, gamepad) {\n /**\n * Threshold to use to emulate virtual buttons.\n * Values between 0.1 (slight touches of the axis trigger button presses)\n * 0.9 (much force needed) can be used here.\n *\n * Avoid using 0.0 and 1.0 as they cannot be reached on some gamepads or\n * might lead to button flibber flubber...\n */\n this.threshold = 0.5;\n this.value = 0.0;\n this.index = index;\n this.gamepad = gamepad;\n }\n setValue(newValue) {\n var _a, _b, _c, _d;\n const controllerManager = ControllerManager_1.ControllerManager.getInstance();\n const oldValue = this.value;\n this.value = newValue;\n let emulatedButtonId = undefined;\n if (oldValue <= -this.threshold && newValue > -this.threshold) {\n // Virtual button 1 released\n emulatedButtonId = (_a = axisMapping.get(this.index)) === null || _a === void 0 ? void 0 : _a.button1;\n if (emulatedButtonId != null) {\n controllerManager.onButtonUp.emit(new ControllerEvent_1.GamepadControllerEvent(this.gamepad.gamepadModel, ControllerEventType_1.ControllerEventType.UP, intentMappings.get(emulatedButtonId) || [ControllerIntent_1.ControllerIntent.NONE]));\n }\n }\n else if (oldValue > -this.threshold && newValue <= -this.threshold) {\n // Virtual button 1 pressed\n emulatedButtonId = (_b = axisMapping.get(this.index)) === null || _b === void 0 ? void 0 : _b.button1;\n if (emulatedButtonId != null) {\n controllerManager.onButtonDown.emit(new ControllerEvent_1.GamepadControllerEvent(this.gamepad.gamepadModel, ControllerEventType_1.ControllerEventType.DOWN, intentMappings.get(emulatedButtonId) || [ControllerIntent_1.ControllerIntent.NONE]));\n }\n }\n if (oldValue > this.threshold && newValue <= this.threshold) {\n // Virtual button 2 released\n emulatedButtonId = (_c = axisMapping.get(this.index)) === null || _c === void 0 ? void 0 : _c.button2;\n if (emulatedButtonId != null) {\n controllerManager.onButtonUp.emit(new ControllerEvent_1.GamepadControllerEvent(this.gamepad.gamepadModel, ControllerEventType_1.ControllerEventType.UP, intentMappings.get(emulatedButtonId) || [ControllerIntent_1.ControllerIntent.NONE]));\n }\n }\n else if (oldValue < this.threshold && newValue >= this.threshold) {\n // Virtual button 2 pressed\n emulatedButtonId = (_d = axisMapping.get(this.index)) === null || _d === void 0 ? void 0 : _d.button2;\n if (emulatedButtonId != null) {\n controllerManager.onButtonDown.emit(new ControllerEvent_1.GamepadControllerEvent(this.gamepad.gamepadModel, ControllerEventType_1.ControllerEventType.DOWN, intentMappings.get(emulatedButtonId) || [ControllerIntent_1.ControllerIntent.NONE]));\n }\n }\n }\n}\n/**\n * Some obscure magic to make sure that gamepad buttons and axes are mapped onto unified controller\n * events.\n */\nclass GamepadWrapper {\n constructor(gamepad) {\n this.index = gamepad.index;\n this.id = gamepad.id;\n this.gamepadModel = GamepadModel_1.GamepadModel.fromString(this.id);\n this.buttons = new Array(gamepad.buttons.length);\n for (let i = 0; i < this.buttons.length; i++) {\n this.buttons[i] = new GamepadButtonWrapper(i, gamepad.buttons[i], this);\n }\n this.axes = new Array(gamepad.axes.length);\n for (let i = 0; i < this.axes.length; i++) {\n this.axes[i] = new GamepadAxisWrapper(i, this);\n }\n }\n update() {\n const gamepad = navigator.getGamepads()[this.index];\n if (gamepad != null) {\n this.buttons.forEach(button => button.setPressed(gamepad.buttons[button.index].pressed));\n this.axes.forEach(axis => axis.setValue(gamepad.axes[axis.index]));\n }\n }\n toString() {\n return `Gamepad (index: ${this.index}, id: ${this.id})`;\n }\n}\nclass GamepadInput {\n constructor() {\n this.gamepads = new Map();\n window.addEventListener(\"gamepadconnected\", (e) => {\n console.debug(\"Gamepad connected: \", e);\n const gamepad = e.gamepad;\n if (gamepad != null) {\n this.gamepads.set(gamepad.id, new GamepadWrapper(gamepad));\n }\n });\n window.addEventListener(\"gamepaddisconnected\", (e) => {\n console.debug(\"Gamepad disconnected: \", e);\n const gamepad = e.gamepad;\n if (gamepad != null) {\n this.gamepads.delete(gamepad.id);\n }\n });\n }\n update() {\n this.gamepads.forEach(gamepad => gamepad.update());\n }\n}\nexports.GamepadInput = GamepadInput;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvaW5wdXQvR2FtZXBhZElucHV0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2lucHV0L0dhbWVwYWRJbnB1dC50cz85ZjcxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRyb2xsZXJNYW5hZ2VyIH0gZnJvbSBcIi4vQ29udHJvbGxlck1hbmFnZXJcIjtcclxuaW1wb3J0IHsgQ29udHJvbGxlckludGVudCB9IGZyb20gXCIuL0NvbnRyb2xsZXJJbnRlbnRcIjtcclxuaW1wb3J0IHsgQ29udHJvbGxlckV2ZW50VHlwZSB9IGZyb20gXCIuL0NvbnRyb2xsZXJFdmVudFR5cGVcIjtcclxuaW1wb3J0IHsgR2FtZXBhZENvbnRyb2xsZXJFdmVudCB9IGZyb20gXCIuL0NvbnRyb2xsZXJFdmVudFwiO1xyXG5pbXBvcnQgeyBHYW1lcGFkTW9kZWwgfSBmcm9tIFwiLi9HYW1lcGFkTW9kZWxcIjtcclxuXHJcbi8qKlxyXG4gKiBHYW1lIFBhZCBCdXR0b25zXHJcbiAqL1xyXG5lbnVtIEdhbWVQYWRCdXR0b25JZCB7XHJcbiAgICAvKiogQnV0dG9uIEEgLyBDcm9zcyovXHJcbiAgICBCVVRUT05fMSA9IDAsXHJcbiAgICAvKiogQnV0dG9uIEIgLyBDaXJjbGUqL1xyXG4gICAgQlVUVE9OXzIgPSAxLFxyXG4gICAgLyoqIEJ1dHRvbiBYIC8gU3F1YXJlKi9cclxuICAgIEJVVFRPTl8zID0gMixcclxuICAgIC8qKiBCdXR0b24gWSAvIFRyaWFuZ2xlICovXHJcbiAgICBCVVRUT05fNCA9IDMsXHJcbiAgICBTSE9VTERFUl9UT1BfTEVGVCA9IDQsXHJcbiAgICBTSE9VTERFUl9UT1BfUklHSFQgPSA1LFxyXG4gICAgU0hPVUxERVJfQk9UVE9NX0xFRlQgPSA2LFxyXG4gICAgU0hPVUxERVJfQk9UVE9NX1JJR0hUID0gNyxcclxuICAgIFNFTEVDVCA9IDgsXHJcbiAgICBTVEFSVCA9IDksXHJcbiAgICBTVElDS19CVVRUT05fTEVGVCA9IDEwLFxyXG4gICAgU1RJQ0tfQlVUVE9OX1JJR0hUID0gMTEsXHJcbiAgICBEX1BBRF9VUCA9IDEyLFxyXG4gICAgRF9QQURfRE9XTiA9IDEzLFxyXG4gICAgRF9QQURfTEVGVCA9IDE0LFxyXG4gICAgRF9QQURfUklHSFQgPSAxNSxcclxuICAgIFZFTkRPUiA9IDE2XHJcbn1cclxuXHJcbmVudW0gU3RpY2tBeGlzSWQge1xyXG4gICAgLyoqIExlZnQgc3RpY2sgWCBheGlzICovXHJcbiAgICBMRUZUX0xFRlRfUklHSFQgPSAwLFxyXG4gICAgLyoqIExlZnQgc3RpY2sgWSBheGlzICovXHJcbiAgICBMRUZUX1VQX0RPV04gPSAxLFxyXG4gICAgLyoqIFJpZ2h0IHN0aWNrIFggYXhpcyAqL1xyXG4gICAgUklHSFRfTEVGVF9SSUdIVCA9IDIsXHJcbiAgICAvKiogUmlnaHQgc3RpY2sgWSBheGlzICovXHJcbiAgICBSSUdIVF9VUF9ET1dOID0gM1xyXG59XHJcblxyXG5jb25zdCBheGlzTWFwcGluZyA9IG5ldyBNYXA8bnVtYmVyLCB7YnV0dG9uMTogbnVtYmVyfHVuZGVmaW5lZCwgYnV0dG9uMjogbnVtYmVyfHVuZGVmaW5lZH0+KCk7XHJcbmF4aXNNYXBwaW5nLnNldChTdGlja0F4aXNJZC5MRUZUX0xFRlRfUklHSFQsIHsgYnV0dG9uMTogR2FtZVBhZEJ1dHRvbklkLkRfUEFEX0xFRlQsIGJ1dHRvbjI6IEdhbWVQYWRCdXR0b25JZC5EX1BBRF9SSUdIVCB9KTtcclxuYXhpc01hcHBpbmcuc2V0KFN0aWNrQXhpc0lkLkxFRlRfVVBfRE9XTiwgeyBidXR0b24xOiBHYW1lUGFkQnV0dG9uSWQuRF9QQURfVVAsIGJ1dHRvbjI6IEdhbWVQYWRCdXR0b25JZC5EX1BBRF9ET1dOIH0pO1xyXG5cclxuY29uc3QgaW50ZW50TWFwcGluZ3MgPSBuZXcgTWFwPG51bWJlciwgQ29udHJvbGxlckludGVudFtdPigpO1xyXG5pbnRlbnRNYXBwaW5ncy5zZXQoR2FtZVBhZEJ1dHRvbklkLkRfUEFEX1VQLCBbQ29udHJvbGxlckludGVudC5QTEFZRVJfRU5URVJfRE9PUiwgQ29udHJvbGxlckludGVudC5NRU5VX1VQXSk7XHJcbmludGVudE1hcHBpbmdzLnNldChHYW1lUGFkQnV0dG9uSWQuRF9QQURfRE9XTiwgW0NvbnRyb2xsZXJJbnRlbnQuUExBWUVSX0RST1AsIENvbnRyb2xsZXJJbnRlbnQuTUVOVV9ET1dOXSk7XHJcbmludGVudE1hcHBpbmdzLnNldChHYW1lUGFkQnV0dG9uSWQuRF9QQURfTEVGVCwgW0NvbnRyb2xsZXJJbnRlbnQuUExBWUVSX01PVkVfTEVGVCwgQ29udHJvbGxlckludGVudC5NRU5VX0xFRlRdKTtcclxuaW50ZW50TWFwcGluZ3Muc2V0KEdhbWVQYWRCdXR0b25JZC5EX1BBRF9SSUdIVCwgW0NvbnRyb2xsZXJJbnRlbnQuUExBWUVSX01PVkVfUklHSFQsIENvbnRyb2xsZXJJbnRlbnQuTUVOVV9SSUdIVF0pO1xyXG5pbnRlbnRNYXBwaW5ncy5zZXQoR2FtZVBhZEJ1dHRvbklkLkJVVFRPTl8xLCBbQ29udHJvbGxlckludGVudC5QTEFZRVJfSlVNUCwgQ29udHJvbGxlckludGVudC5DT05GSVJNXSk7XHJcbmludGVudE1hcHBpbmdzLnNldChHYW1lUGFkQnV0dG9uSWQuQlVUVE9OXzIsIFtDb250cm9sbGVySW50ZW50LkFCT1JUXSk7XHJcbmludGVudE1hcHBpbmdzLnNldChHYW1lUGFkQnV0dG9uSWQuQlVUVE9OXzMsIFtDb250cm9sbGVySW50ZW50LlBMQVlFUl9SVU5dKTtcclxuaW50ZW50TWFwcGluZ3Muc2V0KEdhbWVQYWRCdXR0b25JZC5CVVRUT05fNCwgW0NvbnRyb2xsZXJJbnRlbnQuUExBWUVSX0lOVEVSQUNUXSk7XHJcbmludGVudE1hcHBpbmdzLnNldChHYW1lUGFkQnV0dG9uSWQuU0hPVUxERVJfVE9QX0xFRlQsIFtDb250cm9sbGVySW50ZW50LlBMQVlFUl9EQU5DRV8xLCBDb250cm9sbGVySW50ZW50LlBMQVlFUl9BQ1RJT05dKTtcclxuaW50ZW50TWFwcGluZ3Muc2V0KEdhbWVQYWRCdXR0b25JZC5TSE9VTERFUl9UT1BfUklHSFQsIFtDb250cm9sbGVySW50ZW50LlBMQVlFUl9EQU5DRV8yLCBDb250cm9sbGVySW50ZW50LlBMQVlFUl9BQ1RJT05dKTtcclxuaW50ZW50TWFwcGluZ3Muc2V0KEdhbWVQYWRCdXR0b25JZC5TVEFSVCwgW0NvbnRyb2xsZXJJbnRlbnQuUEFVU0VdKTtcclxuXHJcbmNsYXNzIEdhbWVwYWRCdXR0b25XcmFwcGVyIHtcclxuICAgIHB1YmxpYyByZWFkb25seSBpbmRleDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBwcmVzc2VkOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBnYW1lcGFkOiBHYW1lcGFkV3JhcHBlcjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihpbmRleDogbnVtYmVyLCB3cmFwcGVkOiBHYW1lcGFkQnV0dG9uLCBnYW1lcGFkOiBHYW1lcGFkV3JhcHBlcikge1xyXG4gICAgICAgIHRoaXMuaW5kZXggPSBpbmRleDtcclxuICAgICAgICB0aGlzLnByZXNzZWQgPSB3cmFwcGVkLnByZXNzZWQ7XHJcbiAgICAgICAgdGhpcy5nYW1lcGFkID0gZ2FtZXBhZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0UHJlc3NlZChwcmVzc2VkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY29udHJvbGxlck1hbmFnZXIgPSBDb250cm9sbGVyTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xyXG4gICAgICAgIGNvbnN0IG9sZFByZXNzZWQgPSB0aGlzLnByZXNzZWQ7XHJcbiAgICAgICAgdGhpcy5wcmVzc2VkID0gcHJlc3NlZDtcclxuXHJcbiAgICAgICAgaWYgKG9sZFByZXNzZWQgIT09IHByZXNzZWQpIHtcclxuICAgICAgICAgICAgaWYgKHByZXNzZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJNYW5hZ2VyLm9uQnV0dG9uRG93bi5lbWl0KFxyXG4gICAgICAgICAgICAgICAgICAgIG5ldyBHYW1lcGFkQ29udHJvbGxlckV2ZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdhbWVwYWQuZ2FtZXBhZE1vZGVsLCBDb250cm9sbGVyRXZlbnRUeXBlLkRPV04sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGludGVudE1hcHBpbmdzLmdldCh0aGlzLmluZGV4KSB8fCBbQ29udHJvbGxlckludGVudC5OT05FXVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyTWFuYWdlci5vbkJ1dHRvblVwLmVtaXQoXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3IEdhbWVwYWRDb250cm9sbGVyRXZlbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FtZXBhZC5nYW1lcGFkTW9kZWwsIENvbnRyb2xsZXJFdmVudFR5cGUuVVAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGludGVudE1hcHBpbmdzLmdldCh0aGlzLmluZGV4KSB8fCBbQ29udHJvbGxlckludGVudC5OT05FXVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59XHJcblxyXG5jbGFzcyBHYW1lcGFkQXhpc1dyYXBwZXIge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaHJlc2hvbGQgdG8gdXNlIHRvIGVtdWxhdGUgdmlydHVhbCBidXR0b25zLlxyXG4gICAgICogVmFsdWVzIGJldHdlZW4gMC4xIChzbGlnaHQgdG91Y2hlcyBvZiB0aGUgYXhpcyB0cmlnZ2VyIGJ1dHRvbiBwcmVzc2VzKVxyXG4gICAgICogMC45IChtdWNoIGZvcmNlIG5lZWRlZCkgY2FuIGJlIHVzZWQgaGVyZS5cclxuICAgICAqXHJcbiAgICAgKiBBdm9pZCB1c2luZyAwLjAgYW5kIDEuMCBhcyB0aGV5IGNhbm5vdCBiZSByZWFjaGVkIG9uIHNvbWUgZ2FtZXBhZHMgb3JcclxuICAgICAqIG1pZ2h0IGxlYWQgdG8gYnV0dG9uIGZsaWJiZXIgZmx1YmJlci4uLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHRocmVzaG9sZCA9IDAuNTtcclxuXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgaW5kZXg6IG51bWJlcjtcclxuICAgIHByaXZhdGUgdmFsdWU6IG51bWJlciA9IDAuMDtcclxuICAgIHByaXZhdGUgZ2FtZXBhZDogR2FtZXBhZFdyYXBwZXI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoaW5kZXg6IG51bWJlciwgZ2FtZXBhZDogR2FtZXBhZFdyYXBwZXIpIHtcclxuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgdGhpcy5nYW1lcGFkID0gZ2FtZXBhZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0VmFsdWUobmV3VmFsdWU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXJNYW5hZ2VyID0gQ29udHJvbGxlck1hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcclxuICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgIGxldCBlbXVsYXRlZEJ1dHRvbklkOiBudW1iZXJ8dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICBpZiAob2xkVmFsdWUgPD0gLXRoaXMudGhyZXNob2xkICYmIG5ld1ZhbHVlID4gLXRoaXMudGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgIC8vIFZpcnR1YWwgYnV0dG9uIDEgcmVsZWFzZWRcclxuICAgICAgICAgICAgZW11bGF0ZWRCdXR0b25JZCA9IGF4aXNNYXBwaW5nLmdldCh0aGlzLmluZGV4KT8uYnV0dG9uMTtcclxuXHJcbiAgICAgICAgICAgIGlmIChlbXVsYXRlZEJ1dHRvbklkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJNYW5hZ2VyLm9uQnV0dG9uVXAuZW1pdChcclxuICAgICAgICAgICAgICAgICAgICBuZXcgR2FtZXBhZENvbnRyb2xsZXJFdmVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nYW1lcGFkLmdhbWVwYWRNb2RlbCwgQ29udHJvbGxlckV2ZW50VHlwZS5VUCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50TWFwcGluZ3MuZ2V0KGVtdWxhdGVkQnV0dG9uSWQpIHx8IFtDb250cm9sbGVySW50ZW50Lk5PTkVdXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAob2xkVmFsdWUgPiAtdGhpcy50aHJlc2hvbGQgJiYgbmV3VmFsdWUgPD0gLXRoaXMudGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgIC8vIFZpcnR1YWwgYnV0dG9uIDEgcHJlc3NlZFxyXG4gICAgICAgICAgICBlbXVsYXRlZEJ1dHRvbklkID0gYXhpc01hcHBpbmcuZ2V0KHRoaXMuaW5kZXgpPy5idXR0b24xO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVtdWxhdGVkQnV0dG9uSWQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbGxlck1hbmFnZXIub25CdXR0b25Eb3duLmVtaXQoXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3IEdhbWVwYWRDb250cm9sbGVyRXZlbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FtZXBhZC5nYW1lcGFkTW9kZWwsIENvbnRyb2xsZXJFdmVudFR5cGUuRE9XTixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50TWFwcGluZ3MuZ2V0KGVtdWxhdGVkQnV0dG9uSWQpIHx8IFtDb250cm9sbGVySW50ZW50Lk5PTkVdXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9sZFZhbHVlID4gdGhpcy50aHJlc2hvbGQgJiYgbmV3VmFsdWUgPD0gdGhpcy50aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgLy8gVmlydHVhbCBidXR0b24gMiByZWxlYXNlZFxyXG4gICAgICAgICAgICBlbXVsYXRlZEJ1dHRvbklkID0gYXhpc01hcHBpbmcuZ2V0KHRoaXMuaW5kZXgpPy5idXR0b24yO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVtdWxhdGVkQnV0dG9uSWQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbGxlck1hbmFnZXIub25CdXR0b25VcC5lbWl0KFxyXG4gICAgICAgICAgICAgICAgICAgIG5ldyBHYW1lcGFkQ29udHJvbGxlckV2ZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdhbWVwYWQuZ2FtZXBhZE1vZGVsLCBDb250cm9sbGVyRXZlbnRUeXBlLlVQLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnRNYXBwaW5ncy5nZXQoZW11bGF0ZWRCdXR0b25JZCkgfHwgW0NvbnRyb2xsZXJJbnRlbnQuTk9ORV1cclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChvbGRWYWx1ZSA8IHRoaXMudGhyZXNob2xkICYmIG5ld1ZhbHVlID49IHRoaXMudGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgIC8vIFZpcnR1YWwgYnV0dG9uIDIgcHJlc3NlZFxyXG4gICAgICAgICAgICBlbXVsYXRlZEJ1dHRvbklkID0gYXhpc01hcHBpbmcuZ2V0KHRoaXMuaW5kZXgpPy5idXR0b24yO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVtdWxhdGVkQnV0dG9uSWQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbGxlck1hbmFnZXIub25CdXR0b25Eb3duLmVtaXQoXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3IEdhbWVwYWRDb250cm9sbGVyRXZlbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2FtZXBhZC5nYW1lcGFkTW9kZWwsIENvbnRyb2xsZXJFdmVudFR5cGUuRE9XTixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50TWFwcGluZ3MuZ2V0KGVtdWxhdGVkQnV0dG9uSWQpIHx8IFtDb250cm9sbGVySW50ZW50Lk5PTkVdXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFNvbWUgb2JzY3VyZSBtYWdpYyB0byBtYWtlIHN1cmUgdGhhdCBnYW1lcGFkIGJ1dHRvbnMgYW5kIGF4ZXMgYXJlIG1hcHBlZCBvbnRvIHVuaWZpZWQgY29udHJvbGxlclxyXG4gKiBldmVudHMuXHJcbiAqL1xyXG5jbGFzcyBHYW1lcGFkV3JhcHBlciB7XHJcbiAgICBwcml2YXRlIGluZGV4OiBudW1iZXI7XHJcbiAgICBwcml2YXRlIGlkOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGJ1dHRvbnM6IEdhbWVwYWRCdXR0b25XcmFwcGVyW107XHJcbiAgICBwcml2YXRlIGF4ZXM6IEdhbWVwYWRBeGlzV3JhcHBlcltdO1xyXG4gICAgcHVibGljIGdhbWVwYWRNb2RlbDogR2FtZXBhZE1vZGVsO1xyXG4gICAgY29uc3RydWN0b3IoZ2FtZXBhZDogR2FtZXBhZCkge1xyXG4gICAgICAgIHRoaXMuaW5kZXggPSBnYW1lcGFkLmluZGV4O1xyXG4gICAgICAgIHRoaXMuaWQgPSBnYW1lcGFkLmlkO1xyXG4gICAgICAgIHRoaXMuZ2FtZXBhZE1vZGVsID0gR2FtZXBhZE1vZGVsLmZyb21TdHJpbmcodGhpcy5pZCk7XHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gbmV3IEFycmF5KGdhbWVwYWQuYnV0dG9ucy5sZW5ndGgpO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYnV0dG9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmJ1dHRvbnNbaV0gPSBuZXcgR2FtZXBhZEJ1dHRvbldyYXBwZXIoaSwgZ2FtZXBhZC5idXR0b25zW2ldLCB0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYXhlcyA9IG5ldyBBcnJheShnYW1lcGFkLmF4ZXMubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmF4ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5heGVzW2ldID0gbmV3IEdhbWVwYWRBeGlzV3JhcHBlcihpLCB0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBnYW1lcGFkID0gbmF2aWdhdG9yLmdldEdhbWVwYWRzKClbdGhpcy5pbmRleF07XHJcblxyXG4gICAgICAgIGlmIChnYW1lcGFkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5idXR0b25zLmZvckVhY2goYnV0dG9uID0+IGJ1dHRvbi5zZXRQcmVzc2VkKGdhbWVwYWQuYnV0dG9uc1tidXR0b24uaW5kZXhdLnByZXNzZWQpKTtcclxuICAgICAgICAgICAgdGhpcy5heGVzLmZvckVhY2goYXhpcyA9PiBheGlzLnNldFZhbHVlKGdhbWVwYWQuYXhlc1theGlzLmluZGV4XSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gYEdhbWVwYWQgKGluZGV4OiAke3RoaXMuaW5kZXh9LCBpZDogJHt0aGlzLmlkfSlgO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgR2FtZXBhZElucHV0IHtcclxuICAgIHByaXZhdGUgZ2FtZXBhZHM6IE1hcDxzdHJpbmcsIEdhbWVwYWRXcmFwcGVyPjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmdhbWVwYWRzID0gbmV3IE1hcCgpO1xyXG5cclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImdhbWVwYWRjb25uZWN0ZWRcIiwgKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKFwiR2FtZXBhZCBjb25uZWN0ZWQ6IFwiLCBlKTtcclxuICAgICAgICAgICAgY29uc3QgZ2FtZXBhZCA9IChlIGFzIEdhbWVwYWRFdmVudEluaXQpLmdhbWVwYWQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoZ2FtZXBhZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbWVwYWRzLnNldChnYW1lcGFkLmlkLCBuZXcgR2FtZXBhZFdyYXBwZXIoZ2FtZXBhZCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZ2FtZXBhZGRpc2Nvbm5lY3RlZFwiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKFwiR2FtZXBhZCBkaXNjb25uZWN0ZWQ6IFwiLCBlKTtcclxuICAgICAgICAgICAgY29uc3QgZ2FtZXBhZCA9IChlIGFzIGFueSBhcyBHYW1lcGFkRXZlbnRJbml0KS5nYW1lcGFkO1xyXG5cclxuICAgICAgICAgICAgaWYgKGdhbWVwYWQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nYW1lcGFkcy5kZWxldGUoZ2FtZXBhZC5pZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZ2FtZXBhZHMuZm9yRWFjaChnYW1lcGFkID0+IGdhbWVwYWQudXBkYXRlKCkpO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQU1BO0FBQUE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFlQTtBQWRBOzs7Ozs7O0FBT0E7QUFDQTtBQUdBO0FBSUE7QUFDQTtBQUNBO0FBRUE7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBTUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFNQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQU1BO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7O0FBR0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBN0JBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/input/GamepadInput.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/input/GamepadModel.js":
|
|
/*!***********************************!*\
|
|
!*** ./lib/input/GamepadModel.js ***!
|
|
\***********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\n// See https://gamepad-tester.com/controllers for a list of some possible controller IDs.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_GAMEPAD_MODEL = exports.GamepadModel = void 0;\nconst GamepadStyle_1 = __webpack_require__(/*! ./GamepadStyle */ \"./lib/input/GamepadStyle.js\");\nconst typemap = new Map();\n/* spell-checker: disable */\ntypemap.set(/^.*?[Xx][Ii][Nn][Pp][Uu][Tt].*$/, GamepadStyle_1.GamepadStyle.XBOX);\n// Vendor ID of Microsoft Corp.\ntypemap.set(/^.*045e.*$/, GamepadStyle_1.GamepadStyle.XBOX);\ntypemap.set(/^.*?[Ss]tadia\\ [Cc]ontroller.*$/, GamepadStyle_1.GamepadStyle.STADIA);\n// Anything with playstation in its name\ntypemap.set(/^.*?[Pp][Ll][Aa][Yy][Ss][Tt][Aa][Ii][Oo][Nn].*$/, GamepadStyle_1.GamepadStyle.XBOX);\n// Vendor ID of Sony Inc.\ntypemap.set(/^.*054c.*$/, GamepadStyle_1.GamepadStyle.PLAYSTATION);\n/**\n * Regular expression to extract vendor and product identifier.\n */\nconst productAndVendorMatcher = /^.*?[Vv]endor:?\\s*(?<vendorId>.{4}).*?[Pp]roduct:?\\s*(?<productId>.{4}).*?$/;\n/* spell-checker: enable */\nclass GamepadModel {\n constructor(style, vendorId, productId) {\n this.style = style;\n }\n /**\n * Parses a gamepad identifier string and returns an object that encapsulates\n * @param str\n * Gamepad identifier string as reported by the Gamepad API.\n */\n static fromString(str) {\n var _a, _b;\n for (const [key, value] of typemap) {\n if (key.exec(str)) {\n const productAndVendorMatch = productAndVendorMatcher.exec(str);\n let vendorId;\n let productId;\n if (productAndVendorMatch !== null) {\n vendorId = (_a = productAndVendorMatch.groups) === null || _a === void 0 ? void 0 : _a.vendorId;\n productId = (_b = productAndVendorMatch.groups) === null || _b === void 0 ? void 0 : _b.productId;\n }\n return new GamepadModel(value, parseInt(vendorId || \"-1\", 16), parseInt(productId || \"-1\"));\n }\n }\n // Nothing matches? Well,... that's bad luck...\n return exports.DEFAULT_GAMEPAD_MODEL;\n }\n}\nexports.GamepadModel = GamepadModel;\nexports.DEFAULT_GAMEPAD_MODEL = new GamepadModel(GamepadStyle_1.GamepadStyle.UNKNOWN);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvaW5wdXQvR2FtZXBhZE1vZGVsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2lucHV0L0dhbWVwYWRNb2RlbC50cz82MjI2Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNlZSBodHRwczovL2dhbWVwYWQtdGVzdGVyLmNvbS9jb250cm9sbGVycyBmb3IgYSBsaXN0IG9mIHNvbWUgcG9zc2libGUgY29udHJvbGxlciBJRHMuXHJcblxyXG5pbXBvcnQgeyBHYW1lcGFkU3R5bGUgfSBmcm9tIFwiLi9HYW1lcGFkU3R5bGVcIjtcclxuXHJcbmNvbnN0IHR5cGVtYXA6IE1hcDxSZWdFeHAsR2FtZXBhZFN0eWxlPiA9IG5ldyBNYXAoKTtcclxuXHJcbi8qIHNwZWxsLWNoZWNrZXI6IGRpc2FibGUgKi9cclxudHlwZW1hcC5zZXQoL14uKj9bWHhdW0lpXVtObl1bUHBdW1V1XVtUdF0uKiQvLCBHYW1lcGFkU3R5bGUuWEJPWCk7XHJcbi8vIFZlbmRvciBJRCBvZiBNaWNyb3NvZnQgQ29ycC5cclxudHlwZW1hcC5zZXQoL14uKjA0NWUuKiQvLCBHYW1lcGFkU3R5bGUuWEJPWCk7XHJcbnR5cGVtYXAuc2V0KC9eLio/W1NzXXRhZGlhXFwgW0NjXW9udHJvbGxlci4qJC8sIEdhbWVwYWRTdHlsZS5TVEFESUEpO1xyXG4vLyBBbnl0aGluZyB3aXRoIHBsYXlzdGF0aW9uIGluIGl0cyBuYW1lXHJcbnR5cGVtYXAuc2V0KC9eLio/W1BwXVtMbF1bQWFdW1l5XVtTc11bVHRdW0FhXVtJaV1bT29dW05uXS4qJC8sIEdhbWVwYWRTdHlsZS5YQk9YKTtcclxuLy8gVmVuZG9yIElEIG9mIFNvbnkgSW5jLlxyXG50eXBlbWFwLnNldCgvXi4qMDU0Yy4qJC8sIEdhbWVwYWRTdHlsZS5QTEFZU1RBVElPTik7XHJcblxyXG4vKipcclxuICogUmVndWxhciBleHByZXNzaW9uIHRvIGV4dHJhY3QgdmVuZG9yIGFuZCBwcm9kdWN0IGlkZW50aWZpZXIuXHJcbiAqL1xyXG5jb25zdCBwcm9kdWN0QW5kVmVuZG9yTWF0Y2hlciA9IC9eLio/W1Z2XWVuZG9yOj9cXHMqKD88dmVuZG9ySWQ+Lns0fSkuKj9bUHBdcm9kdWN0Oj9cXHMqKD88cHJvZHVjdElkPi57NH0pLio/JC87XHJcbi8qIHNwZWxsLWNoZWNrZXI6IGVuYWJsZSAqL1xyXG5cclxuZXhwb3J0IGNsYXNzIEdhbWVwYWRNb2RlbCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIHN0eWxlOiBHYW1lcGFkU3R5bGUsIHZlbmRvcklkPzogbnVtYmVyfHVuZGVmaW5lZCwgcHJvZHVjdElkPzogbnVtYmVyfHVuZGVmaW5lZCkge1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFyc2VzIGEgZ2FtZXBhZCBpZGVudGlmaWVyIHN0cmluZyBhbmQgcmV0dXJucyBhbiBvYmplY3QgdGhhdCBlbmNhcHN1bGF0ZXNcclxuICAgICAqIEBwYXJhbSBzdHJcclxuICAgICAqICAgR2FtZXBhZCBpZGVudGlmaWVyIHN0cmluZyBhcyByZXBvcnRlZCBieSB0aGUgR2FtZXBhZCBBUEkuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbVN0cmluZyhzdHI6IHN0cmluZyk6IEdhbWVwYWRNb2RlbCB7XHJcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdHlwZW1hcCkge1xyXG4gICAgICAgICAgICBpZiAoa2V5LmV4ZWMoc3RyKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvZHVjdEFuZFZlbmRvck1hdGNoID0gcHJvZHVjdEFuZFZlbmRvck1hdGNoZXIuZXhlYyhzdHIpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHZlbmRvcklkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICBsZXQgcHJvZHVjdElkO1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2R1Y3RBbmRWZW5kb3JNYXRjaCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZlbmRvcklkID0gcHJvZHVjdEFuZFZlbmRvck1hdGNoLmdyb3Vwcz8udmVuZG9ySWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdElkID0gcHJvZHVjdEFuZFZlbmRvck1hdGNoLmdyb3Vwcz8ucHJvZHVjdElkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBHYW1lcGFkTW9kZWwodmFsdWUsIHBhcnNlSW50KHZlbmRvcklkIHx8IFwiLTFcIiwgMTYpLCBwYXJzZUludChwcm9kdWN0SWQgfHwgXCItMVwiKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gTm90aGluZyBtYXRjaGVzPyBXZWxsLC4uLiB0aGF0J3MgYmFkIGx1Y2suLi5cclxuICAgICAgICByZXR1cm4gREVGQVVMVF9HQU1FUEFEX01PREVMO1xyXG4gICAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfR0FNRVBBRF9NT0RFTDogR2FtZXBhZE1vZGVsID0gbmV3IEdhbWVwYWRNb2RlbChHYW1lcGFkU3R5bGUuVU5LTk9XTik7XHJcbiJdLCJtYXBwaW5ncyI6IjtBQUFBOzs7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUFBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUEzQkE7QUE2QkE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/input/GamepadModel.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/input/GamepadStyle.js":
|
|
/*!***********************************!*\
|
|
!*** ./lib/input/GamepadStyle.js ***!
|
|
\***********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GamepadStyle = void 0;\n/**\n * Enumeration of the different gamepad styles.\n *\n * Mainly used to adjust button mappings to offer the best possible *expected* gaming\n * experience and to make sure that graphics are displayed in-game that match the\n * controller being used.\n */\nvar GamepadStyle;\n(function (GamepadStyle) {\n /** Default gamepad type if nothing else matches. */\n GamepadStyle[\"UNKNOWN\"] = \"unknown\";\n GamepadStyle[\"XBOX\"] = \"xbox\";\n GamepadStyle[\"PLAYSTATION\"] = \"playstation\";\n GamepadStyle[\"STADIA\"] = \"stadia\";\n})(GamepadStyle = exports.GamepadStyle || (exports.GamepadStyle = {}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvaW5wdXQvR2FtZXBhZFN0eWxlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL2lucHV0L0dhbWVwYWRTdHlsZS50cz8xOTk4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBFbnVtZXJhdGlvbiBvZiB0aGUgZGlmZmVyZW50IGdhbWVwYWQgc3R5bGVzLlxyXG4gKlxyXG4gKiBNYWlubHkgdXNlZCB0byBhZGp1c3QgYnV0dG9uIG1hcHBpbmdzIHRvIG9mZmVyIHRoZSBiZXN0IHBvc3NpYmxlICpleHBlY3RlZCogZ2FtaW5nXHJcbiAqIGV4cGVyaWVuY2UgYW5kIHRvIG1ha2Ugc3VyZSB0aGF0IGdyYXBoaWNzIGFyZSBkaXNwbGF5ZWQgaW4tZ2FtZSB0aGF0IG1hdGNoIHRoZVxyXG4gKiBjb250cm9sbGVyIGJlaW5nIHVzZWQuXHJcbiAqL1xyXG5leHBvcnQgZW51bSBHYW1lcGFkU3R5bGUge1xyXG5cclxuICAgIC8qKiBEZWZhdWx0IGdhbWVwYWQgdHlwZSBpZiBub3RoaW5nIGVsc2UgbWF0Y2hlcy4gKi9cclxuICAgIFVOS05PV04gPSBcInVua25vd25cIixcclxuXHJcbiAgICBYQk9YID0gXCJ4Ym94XCIsXHJcbiAgICBQTEFZU1RBVElPTiA9IFwicGxheXN0YXRpb25cIixcclxuICAgIFNUQURJQSA9IFwic3RhZGlhXCJcclxuXHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7O0FBTUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/input/GamepadStyle.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/input/Keyboard.js":
|
|
/*!*******************************!*\
|
|
!*** ./lib/input/Keyboard.js ***!
|
|
\*******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Keyboard = void 0;\nconst ControllerEvent_1 = __webpack_require__(/*! ./ControllerEvent */ \"./lib/input/ControllerEvent.js\");\nconst ControllerEventType_1 = __webpack_require__(/*! ./ControllerEventType */ \"./lib/input/ControllerEventType.js\");\nconst ControllerFamily_1 = __webpack_require__(/*! ./ControllerFamily */ \"./lib/input/ControllerFamily.js\");\nconst ControllerIntent_1 = __webpack_require__(/*! ./ControllerIntent */ \"./lib/input/ControllerIntent.js\");\nconst ControllerManager_1 = __webpack_require__(/*! ./ControllerManager */ \"./lib/input/ControllerManager.js\");\nconst Signal_1 = __webpack_require__(/*! ../Signal */ \"./lib/Signal.js\");\nconst preventDefaultKeyCodes = [\n \"ArrowUp\", \"ArrowDown\", \"ArrowRight\", \"ArrowLeft\", \"Space\"\n];\nconst keyToIntentMappings = new Map();\nkeyToIntentMappings.set(\"Space\", [ControllerIntent_1.ControllerIntent.PLAYER_JUMP]);\nkeyToIntentMappings.set(\"KeyW\", [ControllerIntent_1.ControllerIntent.PLAYER_ENTER_DOOR, ControllerIntent_1.ControllerIntent.MENU_UP]);\nkeyToIntentMappings.set(\"KeyA\", [ControllerIntent_1.ControllerIntent.PLAYER_MOVE_LEFT, ControllerIntent_1.ControllerIntent.MENU_LEFT]);\nkeyToIntentMappings.set(\"KeyS\", [ControllerIntent_1.ControllerIntent.PLAYER_DROP, ControllerIntent_1.ControllerIntent.MENU_DOWN]);\nkeyToIntentMappings.set(\"KeyD\", [ControllerIntent_1.ControllerIntent.PLAYER_MOVE_RIGHT, ControllerIntent_1.ControllerIntent.MENU_RIGHT]);\nkeyToIntentMappings.set(\"ArrowUp\", [ControllerIntent_1.ControllerIntent.PLAYER_ENTER_DOOR, ControllerIntent_1.ControllerIntent.MENU_UP]);\nkeyToIntentMappings.set(\"ArrowDown\", [ControllerIntent_1.ControllerIntent.PLAYER_DROP, ControllerIntent_1.ControllerIntent.MENU_DOWN]);\nkeyToIntentMappings.set(\"ArrowLeft\", [ControllerIntent_1.ControllerIntent.PLAYER_MOVE_LEFT, ControllerIntent_1.ControllerIntent.MENU_LEFT]);\nkeyToIntentMappings.set(\"ArrowRight\", [ControllerIntent_1.ControllerIntent.PLAYER_MOVE_RIGHT, ControllerIntent_1.ControllerIntent.MENU_RIGHT]);\nkeyToIntentMappings.set(\"Enter\", [ControllerIntent_1.ControllerIntent.PLAYER_INTERACT, ControllerIntent_1.ControllerIntent.CONFIRM]);\nkeyToIntentMappings.set(\"NumpadEnter\", [ControllerIntent_1.ControllerIntent.PLAYER_INTERACT, ControllerIntent_1.ControllerIntent.CONFIRM]);\nkeyToIntentMappings.set(\"Escape\", [ControllerIntent_1.ControllerIntent.ABORT, ControllerIntent_1.ControllerIntent.PAUSE]);\nkeyToIntentMappings.set(\"ShiftLeft\", [ControllerIntent_1.ControllerIntent.PLAYER_RUN]);\nkeyToIntentMappings.set(\"ShiftRight\", [ControllerIntent_1.ControllerIntent.PLAYER_RUN]);\nkeyToIntentMappings.set(\"KeyE\", [ControllerIntent_1.ControllerIntent.PLAYER_INTERACT, ControllerIntent_1.ControllerIntent.CONFIRM]);\nkeyToIntentMappings.set(\"KeyF\", [ControllerIntent_1.ControllerIntent.PLAYER_ACTION]);\nkeyToIntentMappings.set(\"Digit1\", [ControllerIntent_1.ControllerIntent.PLAYER_DANCE_1]);\nkeyToIntentMappings.set(\"Digit2\", [ControllerIntent_1.ControllerIntent.PLAYER_DANCE_2]);\nkeyToIntentMappings.set(\"Numpad1\", [ControllerIntent_1.ControllerIntent.PLAYER_DANCE_1]);\nkeyToIntentMappings.set(\"Numpad2\", [ControllerIntent_1.ControllerIntent.PLAYER_DANCE_2]);\nclass Keyboard {\n constructor() {\n this.onKeyDown = new Signal_1.Signal();\n this.onKeyUp = new Signal_1.Signal();\n this.onKeyPress = new Signal_1.Signal();\n this.pressed = new Set();\n this.controllerManager = ControllerManager_1.ControllerManager.getInstance();\n document.addEventListener(\"keypress\", event => this.handleKeyPress(event));\n document.addEventListener(\"keydown\", event => this.handleKeyDown(event));\n document.addEventListener(\"keyup\", event => this.handleKeyUp(event));\n }\n handleKeyPress(event) {\n this.onKeyPress.emit(event);\n // Quick workaround to make sure, that modifier keys never trigger a game-related\n // controller event. Especially necessary to make other non-game related actions\n // possible. (Shift is used as a modifier key to enable running and is therefore\n // excluded from the list below)\n if (event.altKey || event.ctrlKey || event.metaKey) {\n return;\n }\n this.controllerManager.onButtonPress.emit(new ControllerEvent_1.ControllerEvent(ControllerFamily_1.ControllerFamily.KEYBOARD, ControllerEventType_1.ControllerEventType.PRESS, keyToIntentMappings.get(event.code) || [ControllerIntent_1.ControllerIntent.NONE], event.repeat));\n }\n handleKeyDown(event) {\n if (preventDefaultKeyCodes.includes(event.code)) {\n event.preventDefault();\n }\n if (!event.repeat) {\n this.pressed.add(event.key);\n }\n this.onKeyDown.emit(event);\n if (event.altKey || event.ctrlKey || event.metaKey) {\n return;\n }\n this.controllerManager.onButtonDown.emit(new ControllerEvent_1.ControllerEvent(ControllerFamily_1.ControllerFamily.KEYBOARD, ControllerEventType_1.ControllerEventType.DOWN, keyToIntentMappings.get(event.code) || [ControllerIntent_1.ControllerIntent.NONE], event.repeat));\n }\n handleKeyUp(event) {\n if (!event.repeat) {\n this.pressed.delete(event.key);\n }\n this.onKeyUp.emit(event);\n if (event.altKey || event.ctrlKey || event.metaKey) {\n return;\n }\n this.controllerManager.onButtonUp.emit(new ControllerEvent_1.ControllerEvent(ControllerFamily_1.ControllerFamily.KEYBOARD, ControllerEventType_1.ControllerEventType.UP, keyToIntentMappings.get(event.code) || [ControllerIntent_1.ControllerIntent.NONE], event.repeat));\n }\n isPressed(key) {\n return this.pressed.has(key);\n }\n}\nexports.Keyboard = Keyboard;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvaW5wdXQvS2V5Ym9hcmQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvaW5wdXQvS2V5Ym9hcmQudHM/NzgyYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb250cm9sbGVyRXZlbnQgfSBmcm9tIFwiLi9Db250cm9sbGVyRXZlbnRcIjtcclxuaW1wb3J0IHsgQ29udHJvbGxlckV2ZW50VHlwZSB9IGZyb20gXCIuL0NvbnRyb2xsZXJFdmVudFR5cGVcIjtcclxuaW1wb3J0IHsgQ29udHJvbGxlckZhbWlseSB9IGZyb20gXCIuL0NvbnRyb2xsZXJGYW1pbHlcIjtcclxuaW1wb3J0IHsgQ29udHJvbGxlckludGVudCB9IGZyb20gXCIuL0NvbnRyb2xsZXJJbnRlbnRcIjtcclxuaW1wb3J0IHsgQ29udHJvbGxlck1hbmFnZXIgfSBmcm9tIFwiLi9Db250cm9sbGVyTWFuYWdlclwiO1xyXG5pbXBvcnQgeyBTaWduYWwgfSBmcm9tIFwiLi4vU2lnbmFsXCI7XHJcblxyXG5jb25zdCBwcmV2ZW50RGVmYXVsdEtleUNvZGVzOiBzdHJpbmdbXSA9IFtcclxuICAgIFwiQXJyb3dVcFwiLCBcIkFycm93RG93blwiLCBcIkFycm93UmlnaHRcIiwgXCJBcnJvd0xlZnRcIiwgXCJTcGFjZVwiXHJcbl07XHJcblxyXG5jb25zdCBrZXlUb0ludGVudE1hcHBpbmdzID0gbmV3IE1hcDxzdHJpbmcsIENvbnRyb2xsZXJJbnRlbnRbXT4oKTtcclxuXHJcbmtleVRvSW50ZW50TWFwcGluZ3Muc2V0KFwiU3BhY2VcIiwgW0NvbnRyb2xsZXJJbnRlbnQuUExBWUVSX0pVTVBdKTtcclxua2V5VG9JbnRlbnRNYXBwaW5ncy5zZXQoXCJLZXlXXCIsIFtDb250cm9sbGVySW50ZW50LlBMQVlFUl9FTlRFUl9ET09SLCBDb250cm9sbGVySW50ZW50Lk1FTlVfVVBdKTtcclxua2V5VG9JbnRlbnRNYXBwaW5ncy5zZXQoXCJLZXlBXCIsIFtDb250cm9sbGVySW50ZW50LlBMQVlFUl9NT1ZFX0xFRlQsIENvbnRyb2xsZXJJbnRlbnQuTUVOVV9MRUZUXSk7XHJcbmtleVRvSW50ZW50TWFwcGluZ3Muc2V0KFwiS2V5U1wiLCBbQ29udHJvbGxlckludGVudC5QTEFZRVJfRFJPUCwgQ29udHJvbGxlckludGVudC5NRU5VX0RPV05dKTtcclxua2V5VG9JbnRlbnRNYXBwaW5ncy5zZXQoXCJLZXlEXCIsIFtDb250cm9sbGVySW50ZW50LlBMQVlFUl9NT1ZFX1JJR0hULCBDb250cm9sbGVySW50ZW50Lk1FTlVfUklHSFRdKTtcclxua2V5VG9JbnRlbnRNYXBwaW5ncy5zZXQoXCJBcnJvd1VwXCIsIFtDb250cm9sbGVySW50ZW50LlBMQVlFUl9FTlRFUl9ET09SLCBDb250cm9sbGVySW50ZW50Lk1FTlVfVVBdKTtcclxua2V5VG9JbnRlbnRNYXBwaW5ncy5zZXQoXCJBcnJvd0Rvd25cIiwgW0NvbnRyb2xsZXJJbnRlbnQuUExBWUVSX0RST1AsIENvbnRyb2xsZXJJbnRlbnQuTUVOVV9ET1dOXSk7XHJcbmtleVRvSW50ZW50TWFwcGluZ3Muc2V0KFwiQXJyb3dMZWZ0XCIsIFtDb250cm9sbGVySW50ZW50LlBMQVlFUl9NT1ZFX0xFRlQsIENvbnRyb2xsZXJJbnRlbnQuTUVOVV9MRUZUXSk7XHJcbmtleVRvSW50ZW50TWFwcGluZ3Muc2V0KFwiQXJyb3dSaWdodFwiLCBbQ29udHJvbGxlckludGVudC5QTEFZRVJfTU9WRV9SSUdIVCwgQ29udHJvbGxlckludGVudC5NRU5VX1JJR0hUXSk7XHJcbmtleVRvSW50ZW50TWFwcGluZ3Muc2V0KFwiRW50ZXJcIiwgW0NvbnRyb2xsZXJJbnRlbnQuUExBWUVSX0lOVEVSQUNULCBDb250cm9sbGVySW50ZW50LkNPTkZJUk1dKTtcclxua2V5VG9JbnRlbnRNYXBwaW5ncy5zZXQoXCJOdW1wYWRFbnRlclwiLCBbQ29udHJvbGxlckludGVudC5QTEFZRVJfSU5URVJBQ1QsIENvbnRyb2xsZXJJbnRlbnQuQ09ORklSTV0pO1xyXG5rZXlUb0ludGVudE1hcHBpbmdzLnNldChcIkVzY2FwZVwiLCBbQ29udHJvbGxlckludGVudC5BQk9SVCwgQ29udHJvbGxlckludGVudC5QQVVTRV0pO1xyXG5rZXlUb0ludGVudE1hcHBpbmdzLnNldChcIlNoaWZ0TGVmdFwiLCBbQ29udHJvbGxlckludGVudC5QTEFZRVJfUlVOXSk7XHJcbmtleVRvSW50ZW50TWFwcGluZ3Muc2V0KFwiU2hpZnRSaWdodFwiLCBbQ29udHJvbGxlckludGVudC5QTEFZRVJfUlVOXSk7XHJcbmtleVRvSW50ZW50TWFwcGluZ3Muc2V0KFwiS2V5RVwiLCBbQ29udHJvbGxlckludGVudC5QTEFZRVJfSU5URVJBQ1QsIENvbnRyb2xsZXJJbnRlbnQuQ09ORklSTV0pO1xyXG5rZXlUb0ludGVudE1hcHBpbmdzLnNldChcIktleUZcIiwgW0NvbnRyb2xsZXJJbnRlbnQuUExBWUVSX0FDVElPTl0pO1xyXG5rZXlUb0ludGVudE1hcHBpbmdzLnNldChcIkRpZ2l0MVwiLCBbQ29udHJvbGxlckludGVudC5QTEFZRVJfREFOQ0VfMV0pO1xyXG5rZXlUb0ludGVudE1hcHBpbmdzLnNldChcIkRpZ2l0MlwiLCBbQ29udHJvbGxlckludGVudC5QTEFZRVJfREFOQ0VfMl0pO1xyXG5rZXlUb0ludGVudE1hcHBpbmdzLnNldChcIk51bXBhZDFcIiwgW0NvbnRyb2xsZXJJbnRlbnQuUExBWUVSX0RBTkNFXzFdKTtcclxua2V5VG9JbnRlbnRNYXBwaW5ncy5zZXQoXCJOdW1wYWQyXCIsIFtDb250cm9sbGVySW50ZW50LlBMQVlFUl9EQU5DRV8yXSk7XHJcblxyXG5leHBvcnQgY2xhc3MgS2V5Ym9hcmQge1xyXG4gICAgcHVibGljIHJlYWRvbmx5IG9uS2V5RG93biA9IG5ldyBTaWduYWw8S2V5Ym9hcmRFdmVudD4oKTtcclxuICAgIHB1YmxpYyByZWFkb25seSBvbktleVVwID0gbmV3IFNpZ25hbDxLZXlib2FyZEV2ZW50PigpO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IG9uS2V5UHJlc3MgPSBuZXcgU2lnbmFsPEtleWJvYXJkRXZlbnQ+KCk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByZXNzZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29udHJvbGxlck1hbmFnZXIgPSBDb250cm9sbGVyTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xyXG5cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5cHJlc3NcIiwgZXZlbnQgPT4gdGhpcy5oYW5kbGVLZXlQcmVzcyhldmVudCkpO1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGV2ZW50ID0+IHRoaXMuaGFuZGxlS2V5RG93bihldmVudCkpO1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCBldmVudCA9PiB0aGlzLmhhbmRsZUtleVVwKGV2ZW50KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVLZXlQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25LZXlQcmVzcy5lbWl0KGV2ZW50KTtcclxuXHJcbiAgICAgICAgLy8gUXVpY2sgd29ya2Fyb3VuZCB0byBtYWtlIHN1cmUsIHRoYXQgbW9kaWZpZXIga2V5cyBuZXZlciB0cmlnZ2VyIGEgZ2FtZS1yZWxhdGVkXHJcbiAgICAgICAgLy8gY29udHJvbGxlciBldmVudC4gRXNwZWNpYWxseSBuZWNlc3NhcnkgdG8gbWFrZSBvdGhlciBub24tZ2FtZSByZWxhdGVkIGFjdGlvbnNcclxuICAgICAgICAvLyBwb3NzaWJsZS4gKFNoaWZ0IGlzIHVzZWQgYXMgYSBtb2RpZmllciBrZXkgdG8gZW5hYmxlIHJ1bm5pbmcgYW5kIGlzIHRoZXJlZm9yZVxyXG4gICAgICAgIC8vIGV4Y2x1ZGVkIGZyb20gdGhlIGxpc3QgYmVsb3cpXHJcbiAgICAgICAgaWYgKGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jb250cm9sbGVyTWFuYWdlci5vbkJ1dHRvblByZXNzLmVtaXQoXHJcbiAgICAgICAgICAgIG5ldyBDb250cm9sbGVyRXZlbnQoXHJcbiAgICAgICAgICAgICAgICBDb250cm9sbGVyRmFtaWx5LktFWUJPQVJELCBDb250cm9sbGVyRXZlbnRUeXBlLlBSRVNTLFxyXG4gICAgICAgICAgICAgICAga2V5VG9JbnRlbnRNYXBwaW5ncy5nZXQoZXZlbnQuY29kZSkgfHwgW0NvbnRyb2xsZXJJbnRlbnQuTk9ORV0sIGV2ZW50LnJlcGVhdFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAocHJldmVudERlZmF1bHRLZXlDb2Rlcy5pbmNsdWRlcyhldmVudC5jb2RlKSkge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFldmVudC5yZXBlYXQpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmVzc2VkLmFkZChldmVudC5rZXkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5vbktleURvd24uZW1pdChldmVudCk7XHJcblxyXG4gICAgICAgIGlmIChldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY29udHJvbGxlck1hbmFnZXIub25CdXR0b25Eb3duLmVtaXQoXHJcbiAgICAgICAgICAgIG5ldyBDb250cm9sbGVyRXZlbnQoXHJcbiAgICAgICAgICAgICAgICBDb250cm9sbGVyRmFtaWx5LktFWUJPQVJELCBDb250cm9sbGVyRXZlbnRUeXBlLkRPV04sXHJcbiAgICAgICAgICAgICAgICBrZXlUb0ludGVudE1hcHBpbmdzLmdldChldmVudC5jb2RlKSB8fCBbQ29udHJvbGxlckludGVudC5OT05FXSwgZXZlbnQucmVwZWF0XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaGFuZGxlS2V5VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWV2ZW50LnJlcGVhdCkge1xyXG4gICAgICAgICAgICB0aGlzLnByZXNzZWQuZGVsZXRlKGV2ZW50LmtleSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm9uS2V5VXAuZW1pdChldmVudCk7XHJcblxyXG4gICAgICAgIGlmIChldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY29udHJvbGxlck1hbmFnZXIub25CdXR0b25VcC5lbWl0KFxyXG4gICAgICAgICAgICBuZXcgQ29udHJvbGxlckV2ZW50KFxyXG4gICAgICAgICAgICAgICAgQ29udHJvbGxlckZhbWlseS5LRVlCT0FSRCwgQ29udHJvbGxlckV2ZW50VHlwZS5VUCxcclxuICAgICAgICAgICAgICAgIGtleVRvSW50ZW50TWFwcGluZ3MuZ2V0KGV2ZW50LmNvZGUpIHx8IFtDb250cm9sbGVySW50ZW50Lk5PTkVdLCBldmVudC5yZXBlYXRcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzUHJlc3NlZChrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByZXNzZWQuaGFzKGtleSk7XHJcbiAgICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQU9BO0FBTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFNQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQU1BO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBTUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQTdFQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/input/Keyboard.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/scene/AsepriteNode.js":
|
|
/*!***********************************!*\
|
|
!*** ./lib/scene/AsepriteNode.js ***!
|
|
\***********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AsepriteNode = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst SceneNode_1 = __webpack_require__(/*! ./SceneNode */ \"./lib/scene/SceneNode.js\");\n/**\n * Scene node for displaying an [[Aseprite]].\n *\n * @param T - Optional owner game class.\n */\nclass AsepriteNode extends SceneNode_1.SceneNode {\n /**\n * Creates a new scene node displaying the given Aseprite.\n */\n constructor(_a) {\n var _b;\n var { aseprite } = _a, args = tslib_1.__rest(_a, [\"aseprite\"]);\n super(Object.assign({ width: aseprite.width, height: aseprite.height }, args));\n /** The current time index of the animation. */\n this.time = 0;\n this.aseprite = aseprite;\n this.tag = (_b = args.tag) !== null && _b !== void 0 ? _b : null;\n }\n /**\n * Returns the displayed Aseprite.\n *\n * @return The displayed Aseprite.\n */\n getAseprite() {\n return this.aseprite;\n }\n /**\n * Sets the Aseprite.\n *\n * @param aseprite - The Aseprite to draw.\n */\n setAseprite(aseprite) {\n if (aseprite !== this.aseprite) {\n this.aseprite = aseprite;\n this.resizeTo(aseprite.width, aseprite.height);\n this.invalidate();\n }\n return this;\n }\n /**\n * Returns the current animation tag. Null if whole animation is displayed.\n *\n * @return The current animation tag or null for whole animation.\n */\n getTag() {\n return this.tag;\n }\n /**\n * Sets the animation tag. Null to display whole animation.\n *\n * @param tag - The animation tag to set. Null to unset.\n */\n setTag(tag) {\n if (tag !== this.tag) {\n this.tag = tag;\n this.invalidate();\n }\n return this;\n }\n /** @inheritDoc */\n update(dt) {\n this.time += dt;\n }\n /** @inheritDoc */\n draw(ctx) {\n if (this.tag != null) {\n this.aseprite.drawTag(ctx, this.tag, 0, 0, this.time * 1000);\n }\n else {\n this.aseprite.draw(ctx, 0, 0, this.time * 1000);\n }\n }\n}\nexports.AsepriteNode = AsepriteNode;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvc2NlbmUvQXNlcHJpdGVOb2RlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL3NjZW5lL0FzZXByaXRlTm9kZS50cz9hMzQ5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdhbWUgfSBmcm9tIFwiLi4vR2FtZVwiO1xyXG5pbXBvcnQgeyBTY2VuZU5vZGUsIFNjZW5lTm9kZUFyZ3MgfSBmcm9tIFwiLi9TY2VuZU5vZGVcIjtcclxuaW1wb3J0IHsgQXNlcHJpdGUgfSBmcm9tIFwiLi4vQXNlcHJpdGVcIjtcclxuXHJcbi8qKlxyXG4gKiBDb25zdHJ1Y3RvciBhcmd1bWVudHMgZm9yIFtbQXNlcHJpdGVOb2RlXV0uXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEFzZXByaXRlTm9kZUFyZ3MgZXh0ZW5kcyBTY2VuZU5vZGVBcmdzIHtcclxuICAgIC8qKiBUaGUgQXNlcHJpdGUgdG8gZGlzcGxheS4gKi9cclxuICAgIGFzZXByaXRlOiBBc2Vwcml0ZTtcclxuXHJcbiAgICAvKiogT3B0aW9uYWwgYW5pbWF0aW9uIHRhZyB0byBkcmF3LiAqL1xyXG4gICAgdGFnPzogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogU2NlbmUgbm9kZSBmb3IgZGlzcGxheWluZyBhbiBbW0FzZXByaXRlXV0uXHJcbiAqXHJcbiAqIEBwYXJhbSBUIC0gT3B0aW9uYWwgb3duZXIgZ2FtZSBjbGFzcy5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBBc2Vwcml0ZU5vZGU8VCBleHRlbmRzIEdhbWUgPSBHYW1lPiBleHRlbmRzIFNjZW5lTm9kZTxUPiB7XHJcbiAgICAvKiogVGhlIGRpc3BsYXllZCBhc2Vwcml0ZS4gKi9cclxuICAgIHByaXZhdGUgYXNlcHJpdGU6IEFzZXByaXRlO1xyXG5cclxuICAgIC8qKiBUaGUgYW5pbWF0aW9uIHRhZyB0byBkcmF3LiBOdWxsIHRvIGRyYXcgd2hvbGUgYW5pbWF0aW9uLiAqL1xyXG4gICAgcHJpdmF0ZSB0YWc6IHN0cmluZyB8IG51bGw7XHJcblxyXG4gICAgLyoqIFRoZSBjdXJyZW50IHRpbWUgaW5kZXggb2YgdGhlIGFuaW1hdGlvbi4gKi9cclxuICAgIHByaXZhdGUgdGltZSA9IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHNjZW5lIG5vZGUgZGlzcGxheWluZyB0aGUgZ2l2ZW4gQXNlcHJpdGUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcih7IGFzZXByaXRlLCAuLi5hcmdzIH06IEFzZXByaXRlTm9kZUFyZ3MpIHtcclxuICAgICAgICBzdXBlcih7XHJcbiAgICAgICAgICAgIHdpZHRoOiBhc2Vwcml0ZS53aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBhc2Vwcml0ZS5oZWlnaHQsXHJcbiAgICAgICAgICAgIC4uLmFyZ3NcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmFzZXByaXRlID0gYXNlcHJpdGU7XHJcbiAgICAgICAgdGhpcy50YWcgPSBhcmdzLnRhZyA/PyBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgZGlzcGxheWVkIEFzZXByaXRlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gVGhlIGRpc3BsYXllZCBBc2Vwcml0ZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEFzZXByaXRlKCk6IEFzZXByaXRlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hc2Vwcml0ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIEFzZXByaXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBhc2Vwcml0ZSAtIFRoZSBBc2Vwcml0ZSB0byBkcmF3LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0QXNlcHJpdGUoYXNlcHJpdGU6IEFzZXByaXRlKTogdGhpcyB7XHJcbiAgICAgICAgaWYgKGFzZXByaXRlICE9PSB0aGlzLmFzZXByaXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXNlcHJpdGUgPSBhc2Vwcml0ZTtcclxuICAgICAgICAgICAgdGhpcy5yZXNpemVUbyhhc2Vwcml0ZS53aWR0aCwgYXNlcHJpdGUuaGVpZ2h0KTtcclxuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBhbmltYXRpb24gdGFnLiBOdWxsIGlmIHdob2xlIGFuaW1hdGlvbiBpcyBkaXNwbGF5ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBUaGUgY3VycmVudCBhbmltYXRpb24gdGFnIG9yIG51bGwgZm9yIHdob2xlIGFuaW1hdGlvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFRhZygpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50YWc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBhbmltYXRpb24gdGFnLiBOdWxsIHRvIGRpc3BsYXkgd2hvbGUgYW5pbWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0YWcgLSBUaGUgYW5pbWF0aW9uIHRhZyB0byBzZXQuIE51bGwgdG8gdW5zZXQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRUYWcodGFnOiBzdHJpbmcgfCBudWxsKTogdGhpcyB7XHJcbiAgICAgICAgaWYgKHRhZyAhPT0gdGhpcy50YWcpIHtcclxuICAgICAgICAgICAgdGhpcy50YWcgPSB0YWc7XHJcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGluaGVyaXREb2MgKi9cclxuICAgIHB1YmxpYyB1cGRhdGUoZHQ6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMudGltZSArPSBkdDtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGluaGVyaXREb2MgKi9cclxuICAgIHB1YmxpYyBkcmF3KGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMudGFnICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5hc2Vwcml0ZS5kcmF3VGFnKGN0eCwgdGhpcy50YWcsIDAsIDAsIHRoaXMudGltZSAqIDEwMDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXNlcHJpdGUuZHJhdyhjdHgsIDAsIDAsIHRoaXMudGltZSAqIDEwMDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFDQTtBQWNBOzs7O0FBSUE7QUFDQTtBQVVBOztBQUVBO0FBQ0E7O0FBQUE7QUFDQTtBQVBBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWpGQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/scene/AsepriteNode.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/scene/ControlTooltipNode.js":
|
|
/*!*****************************************!*\
|
|
!*** ./lib/scene/ControlTooltipNode.js ***!
|
|
\*****************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ControlTooltipNode = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst SceneNode_1 = __webpack_require__(/*! ./SceneNode */ \"./lib/scene/SceneNode.js\");\nconst ControllerFamily_1 = __webpack_require__(/*! ../input/ControllerFamily */ \"./lib/input/ControllerFamily.js\");\nconst ControllerManager_1 = __webpack_require__(/*! ../input/ControllerManager */ \"./lib/input/ControllerManager.js\");\nconst AsepriteNode_1 = __webpack_require__(/*! ./AsepriteNode */ \"./lib/scene/AsepriteNode.js\");\nconst TextNode_1 = __webpack_require__(/*! ./TextNode */ \"./lib/scene/TextNode.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst Direction_1 = __webpack_require__(/*! ../geom/Direction */ \"./lib/geom/Direction.js\");\nconst constants_1 = __webpack_require__(/*! ../constants */ \"./lib/constants.js\");\nconst BitmapFont_1 = __webpack_require__(/*! ../BitmapFont */ \"./lib/BitmapFont.js\");\nclass ControlTooltipNode extends SceneNode_1.SceneNode {\n constructor(_a) {\n var { control: key, label } = _a, args = tslib_1.__rest(_a, [\"control\", \"label\"]);\n super(Object.assign({ childAnchor: Direction_1.Direction.LEFT }, args));\n this.controllerSpriteMapRecords = {\n [ControllerFamily_1.ControllerSpriteMap.KEYBOARD]: ControlTooltipNode.buttons[0],\n [ControllerFamily_1.ControllerSpriteMap.XBOX]: ControlTooltipNode.buttons[1],\n [ControllerFamily_1.ControllerSpriteMap.PLAYSTATION]: ControlTooltipNode.buttons[2]\n };\n this.controllerManager = ControllerManager_1.ControllerManager.getInstance();\n this.gap = 6;\n this.icon = new AsepriteNode_1.AsepriteNode({\n aseprite: this.controllerSpriteMapRecords[this.controllerManager.controllerSprite],\n tag: key,\n anchor: Direction_1.Direction.LEFT\n }).appendTo(this);\n this.label = new TextNode_1.TextNode({\n font: ControlTooltipNode.font,\n anchor: Direction_1.Direction.LEFT,\n text: label,\n color: \"white\",\n outlineColor: \"black\",\n y: -1\n }).appendTo(this);\n this.updateLayout();\n }\n /** @inheritDoc */\n activate() {\n this.controllerManager.onControllerFamilyChange.connect(this.updateControllerFamily, this);\n }\n /** @inheritDoc */\n deactivate() {\n this.controllerManager.onControllerFamilyChange.disconnect(this.updateControllerFamily, this);\n }\n updateControllerFamily() {\n this.icon.setAseprite(this.controllerSpriteMapRecords[this.controllerManager.controllerSprite]);\n this.updateLayout();\n }\n updateLayout() {\n const iconWidth = this.icon.getWidth();\n this.label.setX(iconWidth + this.gap);\n this.resizeTo(iconWidth + this.gap + this.label.getWidth(), Math.max(this.icon.getHeight(), this.label.getHeight()));\n }\n}\ntslib_1.__decorate([\n Assets_1.asset(constants_1.DIALOG_FONT),\n tslib_1.__metadata(\"design:type\", BitmapFont_1.BitmapFont)\n], ControlTooltipNode, \"font\", void 0);\ntslib_1.__decorate([\n Assets_1.asset([\n \"sprites/buttons_keyboard.aseprite.json\",\n \"sprites/buttons_xbox.aseprite.json\",\n \"sprites/buttons_playstation.aseprite.json\"\n ]),\n tslib_1.__metadata(\"design:type\", Array)\n], ControlTooltipNode, \"buttons\", void 0);\nexports.ControlTooltipNode = ControlTooltipNode;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvc2NlbmUvQ29udHJvbFRvb2x0aXBOb2RlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL3NjZW5lL0NvbnRyb2xUb29sdGlwTm9kZS50cz85YzZlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjZW5lTm9kZSwgU2NlbmVOb2RlQXJncyB9IGZyb20gXCIuL1NjZW5lTm9kZVwiO1xyXG5pbXBvcnQgeyBGcmllbmRseUZpcmUgfSBmcm9tIFwiLi4vRnJpZW5kbHlGaXJlXCI7XHJcbmltcG9ydCB7IENvbnRyb2xsZXJBbmltYXRpb25UYWdzLCBDb250cm9sbGVyU3ByaXRlTWFwIH0gZnJvbSBcIi4uL2lucHV0L0NvbnRyb2xsZXJGYW1pbHlcIjtcclxuaW1wb3J0IHsgQ29udHJvbGxlck1hbmFnZXIgfSBmcm9tIFwiLi4vaW5wdXQvQ29udHJvbGxlck1hbmFnZXJcIjtcclxuaW1wb3J0IHsgQXNlcHJpdGVOb2RlIH0gZnJvbSBcIi4vQXNlcHJpdGVOb2RlXCI7XHJcbmltcG9ydCB7IFRleHROb2RlIH0gZnJvbSBcIi4vVGV4dE5vZGVcIjtcclxuaW1wb3J0IHsgYXNzZXQgfSBmcm9tIFwiLi4vQXNzZXRzXCI7XHJcbmltcG9ydCB7IEFzZXByaXRlIH0gZnJvbSBcIi4uL0FzZXByaXRlXCI7XHJcbmltcG9ydCB7IERpcmVjdGlvbiB9IGZyb20gXCIuLi9nZW9tL0RpcmVjdGlvblwiO1xyXG5pbXBvcnQgeyBESUFMT0dfRk9OVCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgQml0bWFwRm9udCB9IGZyb20gXCIuLi9CaXRtYXBGb250XCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbnRyb2xUb29sdGlwQXJncyBleHRlbmRzIFNjZW5lTm9kZUFyZ3Mge1xyXG4gICAgY29udHJvbDogQ29udHJvbGxlckFuaW1hdGlvblRhZ3MsXHJcbiAgICBsYWJlbDogc3RyaW5nXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDb250cm9sVG9vbHRpcE5vZGUgZXh0ZW5kcyBTY2VuZU5vZGU8RnJpZW5kbHlGaXJlPiB7XHJcbiAgICBAYXNzZXQoRElBTE9HX0ZPTlQpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBmb250OiBCaXRtYXBGb250O1xyXG5cclxuICAgIEBhc3NldChbXHJcbiAgICAgICAgXCJzcHJpdGVzL2J1dHRvbnNfa2V5Ym9hcmQuYXNlcHJpdGUuanNvblwiLFxyXG4gICAgICAgIFwic3ByaXRlcy9idXR0b25zX3hib3guYXNlcHJpdGUuanNvblwiLFxyXG4gICAgICAgIFwic3ByaXRlcy9idXR0b25zX3BsYXlzdGF0aW9uLmFzZXByaXRlLmpzb25cIlxyXG4gICAgXSlcclxuICAgIHByaXZhdGUgc3RhdGljIGJ1dHRvbnM6IEFzZXByaXRlW107XHJcbiAgICBwcml2YXRlIGNvbnRyb2xsZXJTcHJpdGVNYXBSZWNvcmRzOiBSZWNvcmQ8Q29udHJvbGxlclNwcml0ZU1hcCwgQXNlcHJpdGU+ID0ge1xyXG4gICAgICAgIFtDb250cm9sbGVyU3ByaXRlTWFwLktFWUJPQVJEXTogQ29udHJvbFRvb2x0aXBOb2RlLmJ1dHRvbnNbMF0sXHJcbiAgICAgICAgW0NvbnRyb2xsZXJTcHJpdGVNYXAuWEJPWF06IENvbnRyb2xUb29sdGlwTm9kZS5idXR0b25zWzFdLFxyXG4gICAgICAgIFtDb250cm9sbGVyU3ByaXRlTWFwLlBMQVlTVEFUSU9OXTogQ29udHJvbFRvb2x0aXBOb2RlLmJ1dHRvbnNbMl1cclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250cm9sbGVyTWFuYWdlciA9IENvbnRyb2xsZXJNYW5hZ2VyLmdldEluc3RhbmNlKCk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGljb246IEFzZXByaXRlTm9kZTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGFiZWw6IFRleHROb2RlO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBnYXAgPSA2O1xyXG5cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcih7IGNvbnRyb2w6IGtleSwgbGFiZWwsIC4uLmFyZ3MgfTogQ29udHJvbFRvb2x0aXBBcmdzKSB7XHJcbiAgICAgICAgc3VwZXIoe1xyXG4gICAgICAgICAgICBjaGlsZEFuY2hvcjogRGlyZWN0aW9uLkxFRlQsXHJcbiAgICAgICAgICAgIC4uLmFyZ3NcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmljb24gPSBuZXcgQXNlcHJpdGVOb2RlKHtcclxuICAgICAgICAgICAgYXNlcHJpdGU6IHRoaXMuY29udHJvbGxlclNwcml0ZU1hcFJlY29yZHNbdGhpcy5jb250cm9sbGVyTWFuYWdlci5jb250cm9sbGVyU3ByaXRlXSxcclxuICAgICAgICAgICAgdGFnOiBrZXksXHJcbiAgICAgICAgICAgIGFuY2hvcjogRGlyZWN0aW9uLkxFRlRcclxuICAgICAgICB9KS5hcHBlbmRUbyh0aGlzKTtcclxuICAgICAgICB0aGlzLmxhYmVsID0gbmV3IFRleHROb2RlKHtcclxuICAgICAgICAgICAgZm9udDogQ29udHJvbFRvb2x0aXBOb2RlLmZvbnQsXHJcbiAgICAgICAgICAgIGFuY2hvcjogRGlyZWN0aW9uLkxFRlQsXHJcbiAgICAgICAgICAgIHRleHQ6IGxhYmVsLFxyXG4gICAgICAgICAgICBjb2xvcjogXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgICBvdXRsaW5lQ29sb3I6IFwiYmxhY2tcIixcclxuICAgICAgICAgICAgeTogLTFcclxuICAgICAgICB9KS5hcHBlbmRUbyh0aGlzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxheW91dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaW5oZXJpdERvYyAqL1xyXG4gICAgcHJvdGVjdGVkIGFjdGl2YXRlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29udHJvbGxlck1hbmFnZXIub25Db250cm9sbGVyRmFtaWx5Q2hhbmdlLmNvbm5lY3QodGhpcy51cGRhdGVDb250cm9sbGVyRmFtaWx5LCB0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGluaGVyaXREb2MgKi9cclxuICAgIHByb3RlY3RlZCBkZWFjdGl2YXRlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29udHJvbGxlck1hbmFnZXIub25Db250cm9sbGVyRmFtaWx5Q2hhbmdlLmRpc2Nvbm5lY3QodGhpcy51cGRhdGVDb250cm9sbGVyRmFtaWx5LCB0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUNvbnRyb2xsZXJGYW1pbHkoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pY29uLnNldEFzZXByaXRlKHRoaXMuY29udHJvbGxlclNwcml0ZU1hcFJlY29yZHNbdGhpcy5jb250cm9sbGVyTWFuYWdlci5jb250cm9sbGVyU3ByaXRlXSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMYXlvdXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUxheW91dCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBpY29uV2lkdGggPSB0aGlzLmljb24uZ2V0V2lkdGgoKTtcclxuICAgICAgICB0aGlzLmxhYmVsLnNldFgoaWNvbldpZHRoICsgdGhpcy5nYXApO1xyXG4gICAgICAgIHRoaXMucmVzaXplVG8oXHJcbiAgICAgICAgICAgIGljb25XaWR0aCArIHRoaXMuZ2FwICsgdGhpcy5sYWJlbC5nZXRXaWR0aCgpLFxyXG4gICAgICAgICAgICBNYXRoLm1heCh0aGlzLmljb24uZ2V0SGVpZ2h0KCksIHRoaXMubGFiZWwuZ2V0SGVpZ2h0KCkpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFPQTtBQXFCQTtBQUFBO0FBQ0E7QUFaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQS9EQTtBQURBO0FBQ0E7QUFBQTtBQU9BO0FBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQVRBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/scene/ControlTooltipNode.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/scene/ImageNode.js":
|
|
/*!********************************!*\
|
|
!*** ./lib/scene/ImageNode.js ***!
|
|
\********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ImageNode = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst SceneNode_1 = __webpack_require__(/*! ./SceneNode */ \"./lib/scene/SceneNode.js\");\n/**\n * Scene node for displaying an HTMLImageElement.\n *\n * @param T - Optional owner game class.\n */\nclass ImageNode extends SceneNode_1.SceneNode {\n /**\n * Creates a new scene node displaying the given image.\n */\n constructor(_a) {\n var { image } = _a, args = tslib_1.__rest(_a, [\"image\"]);\n super(Object.assign({ width: image.width, height: image.height }, args));\n this.image = image;\n }\n /**\n * Returns the displayed image.\n *\n * @return The displayed image.\n */\n getImage() {\n return this.image;\n }\n /** @inheritDoc */\n draw(ctx) {\n ctx.drawImage(this.image, 0, 0);\n }\n}\nexports.ImageNode = ImageNode;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvc2NlbmUvSW1hZ2VOb2RlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL3NjZW5lL0ltYWdlTm9kZS50cz81Y2E2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdhbWUgfSBmcm9tIFwiLi4vR2FtZVwiO1xyXG5pbXBvcnQgeyBTY2VuZU5vZGUsIFNjZW5lTm9kZUFyZ3MgfSBmcm9tIFwiLi9TY2VuZU5vZGVcIjtcclxuXHJcbi8qKlxyXG4gKiBDb25zdHJ1Y3RvciBhcmd1bWVudHMgZm9yIFtbSW1hZ2VOb2RlXV0uXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlTm9kZUFyZ3MgZXh0ZW5kcyBTY2VuZU5vZGVBcmdzIHtcclxuICAgIC8qKiBUaGUgaW1hZ2UgdG8gYmUgZGlzcGxheWVkIGJ5IHRoZSBpbWFnZSBub2RlLiAqL1xyXG4gICAgaW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTY2VuZSBub2RlIGZvciBkaXNwbGF5aW5nIGFuIEhUTUxJbWFnZUVsZW1lbnQuXHJcbiAqXHJcbiAqIEBwYXJhbSBUIC0gT3B0aW9uYWwgb3duZXIgZ2FtZSBjbGFzcy5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBJbWFnZU5vZGU8VCBleHRlbmRzIEdhbWUgPSBHYW1lPiBleHRlbmRzIFNjZW5lTm9kZTxUPiB7XHJcbiAgICAvKiogVGhlIGltYWdlIHRvIGRpc3BsYXkuICovXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGltYWdlOiBIVE1MSW1hZ2VFbGVtZW50O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBzY2VuZSBub2RlIGRpc3BsYXlpbmcgdGhlIGdpdmVuIGltYWdlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoeyBpbWFnZSwgLi4uYXJncyB9OiBJbWFnZU5vZGVBcmdzKSB7XHJcbiAgICAgICAgc3VwZXIoe1xyXG4gICAgICAgICAgICB3aWR0aDogaW1hZ2Uud2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogaW1hZ2UuaGVpZ2h0LFxyXG4gICAgICAgICAgICAuLi5hcmdzXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5pbWFnZSA9IGltYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgZGlzcGxheWVkIGltYWdlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gVGhlIGRpc3BsYXllZCBpbWFnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEltYWdlKCk6IEhUTUxJbWFnZUVsZW1lbnQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmltYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaW5oZXJpdERvYyAqL1xyXG4gICAgcHVibGljIGRyYXcoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOiB2b2lkIHtcclxuICAgICAgICBjdHguZHJhd0ltYWdlKHRoaXMuaW1hZ2UsIDAsIDApO1xyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUNBO0FBVUE7Ozs7QUFJQTtBQUNBO0FBSUE7O0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFLQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE3QkE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/scene/ImageNode.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/scene/ProgressBarNode.js":
|
|
/*!**************************************!*\
|
|
!*** ./lib/scene/ProgressBarNode.js ***!
|
|
\**************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ProgressBarNode = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst SceneNode_1 = __webpack_require__(/*! ./SceneNode */ \"./lib/scene/SceneNode.js\");\nconst util_1 = __webpack_require__(/*! ../util */ \"./lib/util.js\");\nconst DEFAULT_BACKGROUND_STYLE = \"#111\";\nconst DEFAULT_BORDER_STYLE = \"#222\";\nconst DEFAULT_PROGRESS_STYLE = \"#888\";\nconst DEFAULT_WIDTH = 200;\nconst DEFAULT_HEIGHT = 8;\n/**\n * Scene node for displaying a progress bar.\n *\n * @param T - Optional owner game class.\n */\nclass ProgressBarNode extends SceneNode_1.SceneNode {\n /**\n * Creates a new scene node displaying the given image.\n */\n constructor(_a = {}) {\n var { backgroundStyle = DEFAULT_BACKGROUND_STYLE, borderStyle = DEFAULT_BORDER_STYLE, progressStyle = DEFAULT_PROGRESS_STYLE } = _a, args = tslib_1.__rest(_a, [\"backgroundStyle\", \"borderStyle\", \"progressStyle\"]);\n super(Object.assign({ width: DEFAULT_WIDTH, height: DEFAULT_HEIGHT }, args));\n this.progress = 0;\n this.backgroundStyle = backgroundStyle;\n this.borderStyle = borderStyle;\n this.progressStyle = progressStyle;\n }\n setProgress(progress) {\n progress = util_1.clamp(progress, 0, 1);\n if (progress !== this.progress) {\n this.progress = progress;\n this.invalidate();\n }\n return this;\n }\n getProgress() {\n return this.progress;\n }\n /** @inheritDoc */\n draw(ctx) {\n ctx.save();\n const width = this.getWidth();\n const height = this.getHeight();\n // Draw background\n ctx.fillStyle = this.backgroundStyle;\n ctx.fillRect(0, 0, width, height);\n // Draw progress bar\n ctx.fillStyle = this.progressStyle;\n ctx.fillRect(0, 0, width * this.progress, height);\n // Draw border\n ctx.save();\n ctx.strokeStyle = this.borderStyle;\n ctx.lineWidth = 2;\n ctx.rect(0, 0, width, height);\n ctx.clip();\n ctx.stroke();\n ctx.restore();\n ctx.restore();\n }\n}\nexports.ProgressBarNode = ProgressBarNode;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvc2NlbmUvUHJvZ3Jlc3NCYXJOb2RlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL3NjZW5lL1Byb2dyZXNzQmFyTm9kZS50cz8yNmFlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdhbWUgfSBmcm9tIFwiLi4vR2FtZVwiO1xyXG5pbXBvcnQgeyBTY2VuZU5vZGUsIFNjZW5lTm9kZUFyZ3MgfSBmcm9tIFwiLi9TY2VuZU5vZGVcIjtcclxuaW1wb3J0IHsgY2xhbXAgfSBmcm9tIFwiLi4vdXRpbFwiO1xyXG5cclxuY29uc3QgREVGQVVMVF9CQUNLR1JPVU5EX1NUWUxFID0gXCIjMTExXCI7XHJcbmNvbnN0IERFRkFVTFRfQk9SREVSX1NUWUxFID0gXCIjMjIyXCI7XHJcbmNvbnN0IERFRkFVTFRfUFJPR1JFU1NfU1RZTEUgPSBcIiM4ODhcIjtcclxuY29uc3QgREVGQVVMVF9XSURUSCA9IDIwMDtcclxuY29uc3QgREVGQVVMVF9IRUlHSFQgPSA4O1xyXG5cclxuLyoqXHJcbiAqIENvbnN0cnVjdG9yIGFyZ3VtZW50cyBmb3IgW1tQcm9ncmVzc0Jhck5vZGVdXS5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgUHJvZ3Jlc3NCYXJOb2RlQXJncyBleHRlbmRzIFNjZW5lTm9kZUFyZ3Mge1xyXG4gICAgYmFja2dyb3VuZFN0eWxlPzogc3RyaW5nO1xyXG4gICAgYm9yZGVyU3R5bGU/OiBzdHJpbmdcclxuICAgIHByb2dyZXNzU3R5bGU/OiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTY2VuZSBub2RlIGZvciBkaXNwbGF5aW5nIGEgcHJvZ3Jlc3MgYmFyLlxyXG4gKlxyXG4gKiBAcGFyYW0gVCAtIE9wdGlvbmFsIG93bmVyIGdhbWUgY2xhc3MuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgUHJvZ3Jlc3NCYXJOb2RlPFQgZXh0ZW5kcyBHYW1lID0gR2FtZT4gZXh0ZW5kcyBTY2VuZU5vZGU8VD4ge1xyXG4gICAgcHJpdmF0ZSBiYWNrZ3JvdW5kU3R5bGU6IHN0cmluZztcclxuICAgIHByaXZhdGUgYm9yZGVyU3R5bGU6IHN0cmluZztcclxuICAgIHByaXZhdGUgcHJvZ3Jlc3NTdHlsZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBwcm9ncmVzczogbnVtYmVyID0gMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgc2NlbmUgbm9kZSBkaXNwbGF5aW5nIHRoZSBnaXZlbiBpbWFnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHsgYmFja2dyb3VuZFN0eWxlID0gREVGQVVMVF9CQUNLR1JPVU5EX1NUWUxFLCBib3JkZXJTdHlsZSA9IERFRkFVTFRfQk9SREVSX1NUWUxFLFxyXG4gICAgICAgICAgICBwcm9ncmVzc1N0eWxlID0gREVGQVVMVF9QUk9HUkVTU19TVFlMRSwgLi4uYXJncyB9OiBQcm9ncmVzc0Jhck5vZGVBcmdzID0ge30pIHtcclxuICAgICAgICBzdXBlcih7XHJcbiAgICAgICAgICAgIHdpZHRoOiBERUZBVUxUX1dJRFRILFxyXG4gICAgICAgICAgICBoZWlnaHQ6IERFRkFVTFRfSEVJR0hULFxyXG4gICAgICAgICAgICAuLi5hcmdzXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kU3R5bGUgPSBiYWNrZ3JvdW5kU3R5bGU7XHJcbiAgICAgICAgdGhpcy5ib3JkZXJTdHlsZSA9IGJvcmRlclN0eWxlO1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3NTdHlsZSA9IHByb2dyZXNzU3R5bGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFByb2dyZXNzKHByb2dyZXNzOiBudW1iZXIpOiB0aGlzIHtcclxuICAgICAgICBwcm9ncmVzcyA9IGNsYW1wKHByb2dyZXNzLCAwLCAxKTtcclxuICAgICAgICBpZiAocHJvZ3Jlc3MgIT09IHRoaXMucHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IHByb2dyZXNzO1xyXG4gICAgICAgICAgICB0aGlzLmludmFsaWRhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFByb2dyZXNzKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvZ3Jlc3M7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpbmhlcml0RG9jICovXHJcbiAgICBwdWJsaWMgZHJhdyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6IHZvaWQge1xyXG4gICAgICAgIGN0eC5zYXZlKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5nZXRXaWR0aCgpO1xyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuZ2V0SGVpZ2h0KCk7XHJcblxyXG4gICAgICAgIC8vIERyYXcgYmFja2dyb3VuZFxyXG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSB0aGlzLmJhY2tncm91bmRTdHlsZTtcclxuICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgICAgIC8vIERyYXcgcHJvZ3Jlc3MgYmFyXHJcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHRoaXMucHJvZ3Jlc3NTdHlsZTtcclxuICAgICAgICBjdHguZmlsbFJlY3QoMCwgMCwgd2lkdGggKiB0aGlzLnByb2dyZXNzLCBoZWlnaHQpO1xyXG5cclxuICAgICAgICAvLyBEcmF3IGJvcmRlclxyXG4gICAgICAgIGN0eC5zYXZlKCk7XHJcbiAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gdGhpcy5ib3JkZXJTdHlsZTtcclxuICAgICAgICBjdHgubGluZVdpZHRoID0gMjtcclxuICAgICAgICBjdHgucmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAgICBjdHguY2xpcCgpO1xyXG4gICAgICAgIGN0eC5zdHJva2UoKTtcclxuICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG5cclxuICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBV0E7Ozs7QUFJQTtBQUNBO0FBTUE7O0FBRUE7QUFDQTtBQUFBO0FBRUE7QUFQQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBNURBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/scene/ProgressBarNode.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/scene/RootNode.js":
|
|
/*!*******************************!*\
|
|
!*** ./lib/scene/RootNode.js ***!
|
|
\*******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RootNode = void 0;\nconst SceneNode_1 = __webpack_require__(/*! ./SceneNode */ \"./lib/scene/SceneNode.js\");\nconst Direction_1 = __webpack_require__(/*! ../geom/Direction */ \"./lib/geom/Direction.js\");\n/**\n * The root node of a scene.\n *\n * @param T - Optional owner game class.\n */\nclass RootNode extends SceneNode_1.SceneNode {\n /**\n * Creates a new root scene node for the given scene. Functions for updating and drawing the root node (and its\n * child nodes) is exposed to the scene through the second parameter. Only the scene can use these exposed\n * functions, no one else can by accident.\n *\n * @param scene - The scene this root node is meant for.\n * @param expose - Callback for exposing the update/draw methods of the root node to the scene so the scene can\n * call it without making the methods public.\n */\n constructor(scene, expose) {\n super({ anchor: Direction_1.Direction.TOP_LEFT, childAnchor: Direction_1.Direction.TOP_LEFT });\n this.scene = scene;\n expose(this.updateAll.bind(this), this.drawAllWithBounds.bind(this));\n }\n /**\n * Draws this node and its child nodes recursively and then renders the node bounds when enabled.\n *\n * @param ctx - The rendering context.\n * @param width - The scene width.\n * @param height - The scene height.\n * @return Hints which suggests further actions after drawing.\n */\n drawAllWithBounds(ctx, layer, width, height) {\n const flags = this.drawAll(ctx, layer, width, height);\n if ((flags & SceneNode_1.PostDrawHints.DRAW_BOUNDS) !== 0) {\n this.drawBounds(ctx);\n }\n return flags;\n }\n}\nexports.RootNode = RootNode;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvc2NlbmUvUm9vdE5vZGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvc2NlbmUvUm9vdE5vZGUudHM/N2UxYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHYW1lIH0gZnJvbSBcIi4uL0dhbWVcIjtcclxuaW1wb3J0IHsgU2NlbmVOb2RlLCBQb3N0RHJhd0hpbnRzIH0gZnJvbSBcIi4vU2NlbmVOb2RlXCI7XHJcbmltcG9ydCB7IERpcmVjdGlvbiB9IGZyb20gXCIuLi9nZW9tL0RpcmVjdGlvblwiO1xyXG5pbXBvcnQgeyBTY2VuZSB9IGZyb20gXCIuLi9TY2VuZVwiO1xyXG5cclxuLyoqXHJcbiAqIEZ1bmN0aW9uIHNpZ25hdHVyZSBmb3IgdXBkYXRpbmcgdGhlIHJvb3Qgbm9kZS4gVGhpcyBmdW5jdGlvbiBpcyBleHBvc2VkIHRvIHRoZSBzY2VuZSB0aHJvdWdoIHRoZSBjb25zdHJ1Y3RvciBzb1xyXG4gKiB0aGUgc2NlbmUgY2FuIGNhbGwgaXQgYnV0IG5vIG9uZSBlbHNlIGNhbiBieSBhY2NpZGVudC5cclxuICovXHJcbmV4cG9ydCB0eXBlIFVwZGF0ZVJvb3ROb2RlID0gKGR0OiBudW1iZXIpID0+IG51bWJlcjtcclxuXHJcbi8qKlxyXG4gKiBGdW5jdGlvbiBzaWduYXR1cmUgZm9yIGRyYXdpbmcgdGhlIHJvb3Qgbm9kZS5cclxuICovXHJcbmV4cG9ydCB0eXBlIERyYXdSb290Tm9kZSA9IChjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgbGF5ZXI6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpXHJcbiAgICA9PiBQb3N0RHJhd0hpbnRzO1xyXG5cclxuLyoqXHJcbiAqIFRoZSByb290IG5vZGUgb2YgYSBzY2VuZS5cclxuICpcclxuICogQHBhcmFtIFQgLSBPcHRpb25hbCBvd25lciBnYW1lIGNsYXNzLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFJvb3ROb2RlPFQgZXh0ZW5kcyBHYW1lID0gR2FtZT4gZXh0ZW5kcyBTY2VuZU5vZGU8VD4ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHJvb3Qgc2NlbmUgbm9kZSBmb3IgdGhlIGdpdmVuIHNjZW5lLiBGdW5jdGlvbnMgZm9yIHVwZGF0aW5nIGFuZCBkcmF3aW5nIHRoZSByb290IG5vZGUgKGFuZCBpdHNcclxuICAgICAqIGNoaWxkIG5vZGVzKSBpcyBleHBvc2VkIHRvIHRoZSBzY2VuZSB0aHJvdWdoIHRoZSBzZWNvbmQgcGFyYW1ldGVyLiBPbmx5IHRoZSBzY2VuZSBjYW4gdXNlIHRoZXNlIGV4cG9zZWRcclxuICAgICAqIGZ1bmN0aW9ucywgbm8gb25lIGVsc2UgY2FuIGJ5IGFjY2lkZW50LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzY2VuZSAtIFRoZSBzY2VuZSB0aGlzIHJvb3Qgbm9kZSBpcyBtZWFudCBmb3IuXHJcbiAgICAgKiBAcGFyYW0gZXhwb3NlIC0gQ2FsbGJhY2sgZm9yIGV4cG9zaW5nIHRoZSB1cGRhdGUvZHJhdyBtZXRob2RzIG9mIHRoZSByb290IG5vZGUgdG8gdGhlIHNjZW5lIHNvIHRoZSBzY2VuZSBjYW5cclxuICAgICAqICAgICAgICAgICAgICAgICBjYWxsIGl0IHdpdGhvdXQgbWFraW5nIHRoZSBtZXRob2RzIHB1YmxpYy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHNjZW5lOiBTY2VuZTxULCB1bmtub3duPiwgZXhwb3NlOiAodXBkYXRlOiBVcGRhdGVSb290Tm9kZSwgZHJhdzogRHJhd1Jvb3ROb2RlKSA9PiB2b2lkKSB7XHJcbiAgICAgICAgc3VwZXIoeyBhbmNob3I6IERpcmVjdGlvbi5UT1BfTEVGVCwgY2hpbGRBbmNob3I6IERpcmVjdGlvbi5UT1BfTEVGVCB9KTtcclxuICAgICAgICB0aGlzLnNjZW5lID0gc2NlbmU7XHJcbiAgICAgICAgZXhwb3NlKHRoaXMudXBkYXRlQWxsLmJpbmQodGhpcyksIHRoaXMuZHJhd0FsbFdpdGhCb3VuZHMuYmluZCh0aGlzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEcmF3cyB0aGlzIG5vZGUgYW5kIGl0cyBjaGlsZCBub2RlcyByZWN1cnNpdmVseSBhbmQgdGhlbiByZW5kZXJzIHRoZSBub2RlIGJvdW5kcyB3aGVuIGVuYWJsZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGN0eCAgICAtIFRoZSByZW5kZXJpbmcgY29udGV4dC5cclxuICAgICAqIEBwYXJhbSB3aWR0aCAgLSBUaGUgc2NlbmUgd2lkdGguXHJcbiAgICAgKiBAcGFyYW0gaGVpZ2h0IC0gVGhlIHNjZW5lIGhlaWdodC5cclxuICAgICAqIEByZXR1cm4gSGludHMgd2hpY2ggc3VnZ2VzdHMgZnVydGhlciBhY3Rpb25zIGFmdGVyIGRyYXdpbmcuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZHJhd0FsbFdpdGhCb3VuZHMoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIGxheWVyOiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTpcclxuICAgICAgICAgICAgUG9zdERyYXdIaW50cyB7XHJcbiAgICAgICAgY29uc3QgZmxhZ3MgPSB0aGlzLmRyYXdBbGwoY3R4LCBsYXllciwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgaWYgKChmbGFncyAmIFBvc3REcmF3SGludHMuRFJBV19CT1VORFMpICE9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhd0JvdW5kcyhjdHgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmxhZ3M7XHJcbiAgICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFDQTtBQUNBO0FBZUE7Ozs7QUFJQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7QUFPQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFoQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/scene/RootNode.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/scene/SceneNode.js":
|
|
/*!********************************!*\
|
|
!*** ./lib/scene/SceneNode.js ***!
|
|
\********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SceneNode = exports.PostDrawHints = void 0;\nconst Direction_1 = __webpack_require__(/*! ../geom/Direction */ \"./lib/geom/Direction.js\");\nconst SceneNodeAnimation_1 = __webpack_require__(/*! ./SceneNodeAnimation */ \"./lib/scene/SceneNodeAnimation.js\");\nconst AffineTransform_1 = __webpack_require__(/*! ../graphics/AffineTransform */ \"./lib/graphics/AffineTransform.js\");\nconst Polygon2_1 = __webpack_require__(/*! ../graphics/Polygon2 */ \"./lib/graphics/Polygon2.js\");\nconst Vector2_1 = __webpack_require__(/*! ../graphics/Vector2 */ \"./lib/graphics/Vector2.js\");\n/**\n * Hints which are returned to the scene after drawing the scene graph. These hints can suggest further actions after\n * drawing like requesting continuous drawing because of running animations.\n */\nvar PostDrawHints;\n(function (PostDrawHints) {\n /** As long as this hint is present the scene must be continuously redrawn to keep animations running. */\n PostDrawHints[PostDrawHints[\"CONTINUE_DRAWING\"] = 1] = \"CONTINUE_DRAWING\";\n /**\n * When this flag is set then at least one node has the showBounds flag set to true. The root node already\n * handles this flag by drawing the bounds when this hint is present.\n */\n PostDrawHints[PostDrawHints[\"DRAW_BOUNDS\"] = 2] = \"DRAW_BOUNDS\";\n})(PostDrawHints = exports.PostDrawHints || (exports.PostDrawHints = {}));\n/**\n * Base scene node. Is used as base class for more specialized scene nodes but can also be used standalone as parent\n * node for other nodes (similar to a DIV element in HTML for example).\n *\n * TODO Implement scene invalidation properly.\n */\nclass SceneNode {\n /**\n * Creates a new scene node with the given initial settings.\n */\n constructor({ id = null, x = 0, y = 0, width = 0, height = 0, anchor = Direction_1.Direction.CENTER, childAnchor = Direction_1.Direction.CENTER, opacity = 1, showBounds = false, layer = 0 } = {}) {\n /** The parent node. Null if none. */\n this.parent = null;\n /** The next sibling node. Null if none. */\n this.nextSibling = null;\n /** The previous sibling node. Null if none. */\n this.previousSibling = null;\n /** The first child node. Null if none. */\n this.firstChild = null;\n /** The last child node. Null if none. */\n this.lastChild = null;\n /** The scene this node is connected to. Null if none. */\n this.scene = null;\n /**\n * The bounds polygon. This is updated on demand and automatically invalidated when node size changes. Node\n * has to call [[invalidateBounds]] manually when something else influences the bounds.\n */\n this.boundsPolygon = new Polygon2_1.Polygon2();\n /**\n * The transformation matrix of this node. This transformation is applied to the node before moving the node to\n * its position (X/Y coordinates). So in simple cases this transformation is not needed at all and its up to you\n * if you want to use the coordinates and/or the transformation matrix.\n */\n this.transformation = new AffineTransform_1.AffineTransform();\n /**\n * The transformation matrix combining the nodes transformation with all the parent transformations. This is\n * calculated on-the-fly when a scene node is updated.\n */\n this.sceneTransformation = new AffineTransform_1.AffineTransform();\n /** Array with currently active animations. Animations are automatically removed from the array when finished.*/\n this.animations = [];\n this.id = id;\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n this.opacity = opacity;\n this.anchor = anchor;\n this.childAnchor = childAnchor;\n this.showBounds = showBounds;\n this.layer = 1 << layer;\n }\n /**\n * Returns the node ID.\n *\n * @return The ID of the node or null if none.\n */\n getId() {\n return this.id;\n }\n /**\n * Sets (or removes) the node ID.\n *\n * @param id - The id to set or null to unset.\n */\n setId(id) {\n this.id = id;\n return this;\n }\n /**\n * Returns the X position of the node relative to the parent node.\n *\n * @return The X position.\n */\n getX() {\n return this.x;\n }\n /**\n * Sets the horizontal position relative to the parent node.\n *\n * @param x - The horizontal position to set.\n */\n setX(x) {\n if (x !== this.x) {\n this.x = x;\n this.invalidate();\n }\n return this;\n }\n /**\n * Returns the Y position of the node relative the parent node.\n *\n * @return The Y position.\n */\n getY() {\n return this.y;\n }\n /**\n * Sets the vertical position relative to the parent node.\n *\n * @param y - The vertical position to set.\n */\n setY(y) {\n if (y !== this.y) {\n this.y = y;\n this.invalidate();\n }\n return this;\n }\n /**\n * Moves the node by the given deltas.\n *\n * @param x - The horizontal delta to move the node by.\n * @param y - The vertical delta to move the node by.\n */\n moveBy(x, y) {\n if (x !== 0 || y !== 0) {\n this.x += x;\n this.y += y;\n this.invalidate();\n }\n return this;\n }\n /**\n * Moves the node to the given position relative to its parent node.\n *\n * @param x - The horizontal position to move to.\n * @param y - The vertical position to move to.\n */\n moveTo(x, y) {\n if (x !== this.x || y !== this.y) {\n this.x = x;\n this.y = y;\n this.invalidate();\n }\n return this;\n }\n /**\n * Returns the width of the node.\n *\n * @return The node width.\n */\n getWidth() {\n return this.width;\n }\n /**\n * Sets the width of the node.\n *\n * @param width - The width to set.\n */\n setWidth(width) {\n if (width !== this.width) {\n this.width = width;\n this.invalidate();\n this.invalidateBounds();\n }\n return this;\n }\n /**\n * Returns the width of the node.\n *\n * @return The node width.\n */\n getHeight() {\n return this.height;\n }\n /**\n * Sets the height of the node.\n *\n * @param height - The height to set.\n */\n setHeight(height) {\n if (height !== this.height) {\n this.height = height;\n this.invalidate();\n this.invalidateBounds();\n }\n return this;\n }\n /**\n * Resizes the node to the given width and height.\n *\n * @param width - The width to set.\n * @param height - The height to set.\n */\n resizeTo(width, height) {\n if (width !== this.width || height !== this.height) {\n this.width = width;\n this.height = height;\n this.invalidate();\n this.invalidateBounds();\n }\n return this;\n }\n /**\n * Returns the current opacity of the node.\n *\n * @return The opacity. 0.0 means fully transparent, 1.0 means fully opaque.\n */\n getOpacity() {\n return this.opacity;\n }\n /**\n * Sets the nodes opacity.\n *\n * @pram opacity - The opacity to set. 0.0 means fully transparent, 1.0 means fully opaque. Can be larger than 1.0\n * to compensate transparency of its parent.\n */\n setOpacity(opacity) {\n opacity = Math.max(0, opacity);\n if (opacity !== this.opacity) {\n this.opacity = opacity;\n this.invalidate();\n }\n return this;\n }\n /**\n * Returns the effective node opacity which is the nodes opacity multiplied by the parents effective opacity.\n *\n * @return The effective node opacity clamped to valid range of 0.0 to 1.0.\n */\n getEffectiveOpacity() {\n var _a, _b;\n if (this.opacity === Infinity) {\n return 1;\n }\n return Math.max(0, Math.min(1, ((_b = (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getEffectiveOpacity()) !== null && _b !== void 0 ? _b : 1) * this.opacity));\n }\n /**\n * Returns the node anchor which defines the meaning of the X/Y coordinates of the node. CENTER means the X/Y\n * coordinates define the center of the node. TOP_LEFT means the X/Y coordinates define the upper left corner of\n * the node.\n *\n * @return The node anchor.\n */\n getAnchor() {\n return this.anchor;\n }\n /**\n * Sets the node anchor which defines the meaning of the X/Y coordinates of the node. CENTER means the X/Y\n * coordinates define the center of the node. TOP_LEFT means the X/Y coordinates define the upper left corner of\n * the node.\n *\n * @param anchor - The node anchor to set.\n */\n setAnchor(anchor) {\n if (anchor !== this.anchor) {\n this.anchor = anchor;\n this.invalidate();\n }\n return this;\n }\n /**\n * Returns the child anchor which defines the origin of the local coordinate system to which the coordinates of\n * child nodes are relative to.\n *\n * @return The child anchor.\n */\n getChildAnchor() {\n return this.childAnchor;\n }\n /**\n * Sets the child anchor which defines the origin of the local coordinate system to which the coordinates of\n * child nodes are relative to.\n *\n * @param childAnchor - The child anchor to set.\n */\n setChildAnchor(childAnchor) {\n if (childAnchor !== this.childAnchor) {\n this.childAnchor = childAnchor;\n this.invalidate();\n }\n return this;\n }\n /**\n * Returns the custom transformation of this node which can be manipulated by the [[transform]] method. This\n * transformation is applied to the node before it is rendered at its intended position. Transformation and\n * node position can complement each other or you can only use one of them, that's up to you.\n *\n * @return The custom node transformation.\n */\n getTransformation() {\n return this.transformation;\n }\n /**\n * Modifies the custom transformation matrix of this node. Calls the given transformer function which can then\n * modify the given transformation matrix. After this the node is invalidated to recalculate bounds and redraw it.\n *\n * @param transformer - Function to call with transformation matrix as argument.\n */\n transform(transformer) {\n transformer(this.transformation);\n return this.invalidate();\n }\n /**\n * Returns the scene the node is currently attached to. Null if none.\n *\n * @return The current scene or null if none.\n */\n getScene() {\n return this.scene;\n }\n /**\n * Sets the scene this node and all its children belongs to. This is called internally when a node is added to\n * the scene.\n *\n * @param scene - The scene the node belongs to from now on. null to unset the current scene.\n */\n setScene(scene) {\n if (scene !== this.scene) {\n if (this.scene) {\n this.deactivate();\n }\n this.scene = scene;\n if (scene) {\n this.activate();\n }\n this.forEachChild(node => node.setScene(scene));\n }\n }\n /**\n * Called when node is added to scene. Can be overwritten to connect event handlers for example.\n */\n activate() { }\n /**\n * Called when node is removed from scene. Can be overwritten to disconnect event handlers for example.\n */\n deactivate() { }\n /**\n * Returns the parent node of this node or null if node is not attached to a parent or is the root node.\n *\n * @return The parent node or null if unattached or root element.\n */\n getParent() {\n return this.parent;\n }\n /**\n * Returns the next node at the same level.\n *\n * @return The next sibling or null if none.\n */\n getNextSibling() {\n return this.nextSibling;\n }\n /**\n * Returns the previous node at the same level.\n *\n * @return The previous sibling or null if none.\n */\n getPreviousSibling() {\n return this.previousSibling;\n }\n /**\n * Returns the first child node.\n *\n * @return The first child node or null if none.\n */\n getFirstChild() {\n return this.firstChild;\n }\n /**\n * Returns the last child node.\n *\n * @return The last child node or null if none.\n */\n getLastChild() {\n return this.lastChild;\n }\n /**\n * Checks if this node has child nodes.\n *\n * @return True if it child nodes are present, false if not.\n */\n hasChildNodes() {\n return this.firstChild != null;\n }\n /**\n * Appends the given child node so it becomes the last child of this node.\n *\n * @param node - The child node to append.\n */\n appendChild(node) {\n if (node === this) {\n throw new Error(\"Node can not be appended to itself\");\n }\n // Remove from old parent if there is one\n const oldParent = node.parent;\n if (oldParent) {\n oldParent.removeChild(node);\n }\n // Append the child\n node.previousSibling = this.lastChild;\n const oldLastChild = this.lastChild;\n if (oldLastChild) {\n oldLastChild.nextSibling = node;\n }\n this.lastChild = node;\n if (!this.firstChild) {\n this.firstChild = node;\n }\n node.parent = this;\n node.setScene(this.scene);\n node.invalidate();\n this.invalidate();\n return this;\n }\n /**\n * Prepends the given child node so it becomes the first child of this node.\n *\n * @param node - The child node to prepend.\n */\n prependChild(node) {\n if (this.firstChild != null) {\n return this.insertBefore(node, this.firstChild);\n }\n else {\n return this.appendChild(node);\n }\n }\n /**\n * Removes the given child node\n *\n * @param child - The child node to remove.\n */\n removeChild(node) {\n if (node.parent !== this) {\n throw new Error(\"Node must be a child node\");\n }\n // Remove node from linked list\n const next = node.nextSibling;\n const prev = node.previousSibling;\n if (next) {\n next.previousSibling = prev;\n }\n if (prev) {\n prev.nextSibling = next;\n }\n // Correct first/last reference\n if (node === this.firstChild) {\n this.firstChild = next;\n }\n if (node === this.lastChild) {\n this.lastChild = prev;\n }\n // Remove all references from node\n node.parent = null;\n node.nextSibling = null;\n node.previousSibling = null;\n node.setScene(null);\n node.invalidate();\n this.invalidate();\n return this;\n }\n /**\n * Removes this node from the scene. The node is then a detached node ready to be added to the scene (or some\n * other scene) again.\n */\n remove() {\n if (this.parent) {\n this.parent.removeChild(this);\n }\n return this;\n }\n /**\n * Removes all child nodes.\n */\n clear() {\n while (this.lastChild) {\n this.removeChild(this.lastChild);\n }\n return this;\n }\n /**\n * Inserts the given child node before the specified reference child node.\n *\n * @param newNode - The child node to insert.\n * @param refNode - The reference node. The child node is inserted before this one.\n */\n insertBefore(newNode, refNode) {\n if (newNode === this) {\n throw new Error(\"Node can not be inserted into itself\");\n }\n if (refNode.parent !== this) {\n throw new Error(\"Reference node must be a child node\");\n }\n // Remove from old parent if there is one\n const oldParent = newNode.parent;\n if (oldParent) {\n oldParent.removeChild(newNode);\n }\n // Insert the node\n const oldPrevious = refNode.previousSibling;\n if (!oldPrevious) {\n this.firstChild = newNode;\n }\n else {\n oldPrevious.nextSibling = newNode;\n }\n refNode.previousSibling = newNode;\n newNode.previousSibling = oldPrevious;\n newNode.nextSibling = refNode;\n newNode.parent = this;\n newNode.setScene(this.scene);\n return this.invalidate();\n }\n /**\n * Replaces the given child node with a new node.\n *\n * @param oldNode - The old child node to replace.\n * @param newNode - The new node to replace the old one with.\n */\n replaceChild(oldNode, newNode) {\n if (newNode === this) {\n throw new Error(\"newNode must not be the parent node\");\n }\n if (oldNode.parent !== this) {\n throw new Error(\"oldNode must be a child node\");\n }\n // If new node is the same as the old node then do nothing\n if (newNode === oldNode) {\n return this;\n }\n const next = oldNode.nextSibling;\n this.removeChild(oldNode);\n if (next) {\n this.insertBefore(newNode, next);\n }\n else {\n this.appendChild(newNode);\n }\n return this;\n }\n /**\n * Replace the given node with this one.\n *\n * @param node - The node to replace.\n */\n replace(node) {\n if (this.parent) {\n this.parent.replaceChild(this, node);\n }\n return this;\n }\n /**\n * Appends this node to the given parent node.\n *\n * @param node - The parent node to append this node to.\n */\n appendTo(node) {\n node.appendChild(this);\n return this;\n }\n /**\n * Prepends this node to the given parent node.\n *\n * @param node - The parent node to prepend this node to.\n */\n prependTo(node) {\n node.prependChild(this);\n return this;\n }\n /**\n * Iterates over all child nodes and calls the given callback with the currently iterated node as parameter.\n *\n * @param callback - The callback to call for each child node.\n * @param thisArg - Optional value to use as `this` when executing `callback`.\n */\n forEachChild(callback, thisArg = this) {\n let index = 0;\n let node = this.firstChild;\n while (node) {\n const next = node.nextSibling;\n callback.call(thisArg, node, index++);\n node = next;\n }\n return this;\n }\n /**\n * Iterates over all descendant nodes and calls the given callback with the currently iterated node as parameter.\n *\n * @param callback - The callback to call for each descendant node.\n * @param thisArg - Optional value to use as `this` when executing `callback`.\n */\n forEachDescendant(callback, thisArg = this) {\n var _a, _b;\n let node = this.firstChild;\n while (node != null && node !== this) {\n let next = node.firstChild;\n if (next == null) {\n next = node.nextSibling;\n }\n if (next == null) {\n next = (_b = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.nextSibling) !== null && _b !== void 0 ? _b : null;\n }\n callback.call(thisArg, node);\n node = next;\n }\n return this;\n }\n /**\n * Returns the first child node for which the given callback returns true.\n *\n * @param callback - The callback which checks if the iterated node is the one to look for.\n * @return The found matching child node or null if none.\n */\n findChild(callback, thisArg = this) {\n let index = 0;\n let node = this.firstChild;\n while (node) {\n const next = node.nextSibling;\n if (callback.call(thisArg, node, index++)) {\n return node;\n }\n node = next;\n }\n return null;\n }\n /**\n * Returns the first descendant node for which the given callback returns true.\n *\n * @param callback - The callback which checks if the iterated node is the one to look for.\n * @return The found matching descendant node or null if none.\n */\n findDescendant(callback, thisArg = this) {\n var _a, _b;\n let node = this.firstChild;\n while (node != null && node !== this) {\n let next = node.firstChild;\n if (next == null) {\n next = node.nextSibling;\n }\n if (next == null) {\n next = (_b = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.nextSibling) !== null && _b !== void 0 ? _b : null;\n }\n if (callback.call(thisArg, node)) {\n return node;\n }\n node = next;\n }\n return null;\n }\n /**\n * Tests whether at least one child node passes the test implemented by the provided function.\n *\n * @param callback - The callback to call for each child node returning a boolean.\n * @param thisArg - Optional value to use as `this` when executing `callback`.\n * @return True if at least one child node returned true in the given callback, false if none did.\n */\n someChildren(callback, thisArg = this) {\n let index = 0;\n let node = this.firstChild;\n while (node) {\n const next = node.nextSibling;\n if (callback.call(thisArg, node, index++)) {\n return true;\n }\n node = next;\n }\n return false;\n }\n /**\n * Returns a new array with all child nodes.\n *\n * @return All child nodes.\n */\n getChildren() {\n const children = [];\n let node = this.firstChild;\n while (node) {\n children.push(node);\n node = node.nextSibling;\n }\n return children;\n }\n /**\n * Returns the descendant node with the given id.\n *\n * @param id - The ID to look for.\n * @return The matching descendant node or null if none.\n */\n getDescendantById(id) {\n return this.findDescendant(node => node.getId() === id);\n }\n /**\n * Invalidates the bounds of the node. AUtomatically called when node size is changed. Must be called manually\n * when some other aspect of the node which may influence the bounds is changed.\n */\n invalidateBounds() {\n this.boundsPolygon.clear();\n return this;\n }\n /**\n * Updates the bounds polygon of the node. The default implementation simply sets a bounding box. Specialized nodes\n * can overwrite this method to define a more specific polygon.\n *\n * @param bounds - The empty bounds polygon to be filled with points by this method.\n */\n updateBoundsPolygon(bounds) {\n bounds.addVertex(new Vector2_1.Vector2(0, 0));\n bounds.addVertex(new Vector2_1.Vector2(this.width, 0));\n bounds.addVertex(new Vector2_1.Vector2(this.width, this.height));\n bounds.addVertex(new Vector2_1.Vector2(0, this.height));\n }\n /**\n * Returns the bounds polygon of the node.\n *\n * @return The bounds polygon.\n */\n getBoundsPolygon() {\n if (!this.boundsPolygon.hasVertices()) {\n this.updateBoundsPolygon(this.boundsPolygon);\n }\n return this.boundsPolygon;\n }\n /**\n * Marks this node, all parent nodes and the scene as invalid to trigger a scene revalidation. This must be\n * called every time when some aspect of the node is changed which requires a redraw of the scene node.\n *\n * TODO Not yet implemented, currently the scene is constantly redrawn.\n */\n invalidate() {\n /*\n if (this.valid) {\n this.valid = false;\n if (this.parent) {\n this.parent.invalidate();\n } else if (this.scene) {\n void this.scene.invalidate();\n }\n }\n */\n return this;\n }\n /**\n * Adds a new animation to the scene.\n *\n * @param animationArgs - The arguments defining the animation to add.\n */\n animate(animationArgs) {\n this.animations.push(new SceneNodeAnimation_1.SceneNodeAnimation(this, animationArgs));\n return this;\n }\n /**\n * Finishes all currently running animations. This calls all animator functions with their last animation index\n * (1.0) and then removes the animations.\n */\n finishAnimations() {\n for (const animation of this.animations) {\n animation.finish();\n }\n return this.forEachChild(child => child.finishAnimations());\n }\n /**\n * Checks if node has running animations.\n *\n * @return True if node has animations, false if not.\n */\n hasAnimations() {\n return this.animations.length > 0 || this.someChildren(child => child.hasAnimations());\n }\n /**\n * Enables or disables showing node bounds. This may be useful for debugging.\n *\n * @param showBounds - True to enable showing node bounds, false to disable it.\n */\n setShowBounds(showBounds) {\n if (showBounds !== this.showBounds) {\n this.showBounds = showBounds;\n this.invalidate();\n }\n return this;\n }\n /**\n * Returns true if node bounds are currently shown for debugging purposes.\n *\n * @return True if node bounds are shown, false if not.\n */\n isShowBounds() {\n return this.showBounds;\n }\n /**\n * Returns the layer of this node.\n *\n * @return The node's layer (0-31).\n */\n getLayer() {\n return Math.log2(this.layer);\n }\n /**\n * Sets the layer this node should appear on.\n *\n * @param layer - The layer to set (0-31).\n */\n setLayer(layer) {\n if (layer < 0 || layer > 31) {\n throw new Error(`Valid layer range is 0-31 but was ${layer}`);\n }\n layer = 1 << layer;\n if (layer !== this.layer) {\n this.layer = layer;\n this.invalidate();\n }\n return this;\n }\n /**\n * Updates the animations and removes finished animations.\n */\n updateAnimations(dt) {\n const animations = this.animations;\n let numAnimations = animations.length;\n let i = 0;\n while (i < numAnimations) {\n if (animations[i].update(dt)) {\n animations.splice(i, 1);\n numAnimations--;\n }\n else {\n i++;\n }\n }\n }\n /**\n * Updates this node and its child nodes recursively.\n *\n * @param dt - The time in seconds since the last update.\n * @return Bit mask with used layers.\n */\n updateAll(dt) {\n // Update this node and run animations\n const postUpdate = this.update(dt);\n this.updateAnimations(dt);\n // Update the scene transformation for this node\n const parent = this.parent;\n if (parent != null) {\n this.sceneTransformation.setMatrix(parent.sceneTransformation);\n this.sceneTransformation.translate((Direction_1.Direction.getX(parent.childAnchor) + 1) / 2 * parent.width, (Direction_1.Direction.getY(parent.childAnchor) + 1) / 2 * parent.height);\n }\n else {\n this.sceneTransformation.reset();\n }\n this.sceneTransformation.translate(this.x, this.y);\n this.sceneTransformation.mul(this.transformation);\n this.sceneTransformation.translate(-(Direction_1.Direction.getX(this.anchor) + 1) / 2 * this.width, -(Direction_1.Direction.getY(this.anchor) + 1) / 2 * this.height);\n // Update child nodes\n const layers = this.updateChildren(dt) | this.layer;\n // When update method returned a post-update function then call it now\n if (postUpdate != null) {\n postUpdate();\n }\n return layers;\n }\n /**\n * Updates the child nodes of this node recursively.\n *\n * @param dt - The time in seconds since the last update.\n * @return Bit mask with used layers.\n */\n updateChildren(dt) {\n let layers = 0;\n this.forEachChild(child => {\n layers |= child.updateAll(dt);\n });\n return layers;\n }\n /**\n * Updates this node. This is done before updating the child nodes of this node. The method can return an optional\n * function which is called after the child nodes are updated so this can be used for post-updating operations.\n *\n * @param dt - The time in seconds since the last update.\n * @return Optional post-update function which is called after updating the child nodes.\n */\n update(dt) { }\n /**\n * Recursively draws the bounds for this node and alls its child nodes as long as the [[showBounds]] for the node\n * is set to true.\n *\n * @param ctx - The rendering context.\n */\n drawBounds(ctx) {\n if (this.showBounds) {\n const bounds = this.getBoundsPolygon();\n ctx.save();\n this.sceneTransformation.setCanvasTransform(ctx);\n ctx.beginPath();\n bounds.draw(ctx);\n ctx.clip();\n ctx.save();\n ctx.lineWidth = 2;\n ctx.strokeStyle = \"red\";\n ctx.stroke();\n ctx.setLineDash([4, 4]);\n ctx.strokeStyle = \"white\";\n ctx.lineDashOffset = Math.round(Date.now() / 100) % 8;\n ctx.stroke();\n ctx.restore();\n ctx.restore();\n }\n return this.forEachChild(child => child.drawBounds(ctx));\n }\n /**\n * Draws this scene node and its child nodes recursively\n *\n * @param ctx - The rendering context.\n * @param layer - The layer to render. Nodes which doesn't belong to this layer are not drawn.\n * @param width - The scene width.\n * @param height - The scene height.\n * @return Hints which suggests further actions after drawing.\n */\n drawAll(ctx, layer, width, height) {\n ctx.save();\n ctx.globalAlpha *= this.getEffectiveOpacity();\n ctx.translate(this.x, this.y);\n this.transformation.transformCanvas(ctx);\n ctx.translate(-(Direction_1.Direction.getX(this.anchor) + 1) / 2 * this.width, -(Direction_1.Direction.getY(this.anchor) + 1) / 2 * this.height);\n const postDraw = layer === this.layer ? this.draw(ctx, width, height) : null;\n ctx.save();\n ctx.translate((Direction_1.Direction.getX(this.childAnchor) + 1) / 2 * this.width, (Direction_1.Direction.getY(this.childAnchor) + 1) / 2 * this.height);\n let flags = this.drawChildren(ctx, layer, width, height);\n ctx.restore();\n if (postDraw != null) {\n if (postDraw === true) {\n flags |= PostDrawHints.CONTINUE_DRAWING;\n }\n else if (postDraw !== false) {\n postDraw();\n }\n }\n ctx.restore();\n return this.showBounds ? flags | PostDrawHints.DRAW_BOUNDS | PostDrawHints.CONTINUE_DRAWING : flags;\n }\n /**\n * Draws all child nodes of this scene node recursively.\n *\n * @param ctx - The rendering context.\n * @param layer - The layer to render. Nodes which doesn't belong to this layer are not drawn.\n * @param width - The scene width.\n * @param height - The scene height.\n * @return Hints which suggests further actions after drawing.\n */\n drawChildren(ctx, layer, width, height) {\n let flags = 0;\n this.forEachChild(child => {\n flags |= child.drawAll(ctx, layer, width, height);\n });\n return flags;\n }\n /**\n * Draws this node. This is done before drawing the child nodes of this node. The method can return a boolean\n * which indicates if the scene is not finished yet and must be drawn continuously (for animations for example).\n * The method can also return an optional function which is called after the child nodes are drawn so this can be\n * used for post-drawing operations. This post-draw function then can again return an optional boolean which\n * indicates that scene must be continuously draw itself.\n *\n * @param ctx - The rendering context.\n * @param width - The scene width.\n * @param height - The scene height.\n * @return Optional boolean to indicate if scene must be redrawn continuously (Defaults to false) or a post-draw\n * function which is called after drawing the child nodes and which again can return a flag indicating\n * continuos redraw.\n */\n draw(ctx, width, height) { }\n}\nexports.SceneNode = SceneNode;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvc2NlbmUvU2NlbmVOb2RlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL3NjZW5lL1NjZW5lTm9kZS50cz9kY2I1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjZW5lIH0gZnJvbSBcIi4uL1NjZW5lXCI7XHJcbmltcG9ydCB7IEdhbWUgfSBmcm9tIFwiLi4vR2FtZVwiO1xyXG5pbXBvcnQgeyBEaXJlY3Rpb24gfSBmcm9tIFwiLi4vZ2VvbS9EaXJlY3Rpb25cIjtcclxuaW1wb3J0IHsgQW5pbWF0aW9uQXJncywgU2NlbmVOb2RlQW5pbWF0aW9uIH0gZnJvbSBcIi4vU2NlbmVOb2RlQW5pbWF0aW9uXCI7XHJcbmltcG9ydCB7IEFmZmluZVRyYW5zZm9ybSB9IGZyb20gXCIuLi9ncmFwaGljcy9BZmZpbmVUcmFuc2Zvcm1cIjtcclxuaW1wb3J0IHsgUG9seWdvbjIgfSBmcm9tIFwiLi4vZ3JhcGhpY3MvUG9seWdvbjJcIjtcclxuaW1wb3J0IHsgVmVjdG9yMiB9IGZyb20gXCIuLi9ncmFwaGljcy9WZWN0b3IyXCI7XHJcblxyXG4vKipcclxuICogSGludHMgd2hpY2ggYXJlIHJldHVybmVkIHRvIHRoZSBzY2VuZSBhZnRlciBkcmF3aW5nIHRoZSBzY2VuZSBncmFwaC4gVGhlc2UgaGludHMgY2FuIHN1Z2dlc3QgZnVydGhlciBhY3Rpb25zIGFmdGVyXHJcbiAqIGRyYXdpbmcgbGlrZSByZXF1ZXN0aW5nIGNvbnRpbnVvdXMgZHJhd2luZyBiZWNhdXNlIG9mIHJ1bm5pbmcgYW5pbWF0aW9ucy5cclxuICovXHJcbmV4cG9ydCBlbnVtIFBvc3REcmF3SGludHMge1xyXG4gICAgLyoqIEFzIGxvbmcgYXMgdGhpcyBoaW50IGlzIHByZXNlbnQgdGhlIHNjZW5lIG11c3QgYmUgY29udGludW91c2x5IHJlZHJhd24gdG8ga2VlcCBhbmltYXRpb25zIHJ1bm5pbmcuICovXHJcbiAgICBDT05USU5VRV9EUkFXSU5HID0gMSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZW4gdGhpcyBmbGFnIGlzIHNldCB0aGVuIGF0IGxlYXN0IG9uZSBub2RlIGhhcyB0aGUgc2hvd0JvdW5kcyBmbGFnIHNldCB0byB0cnVlLiBUaGUgcm9vdCBub2RlIGFscmVhZHlcclxuICAgICAqIGhhbmRsZXMgdGhpcyBmbGFnIGJ5IGRyYXdpbmcgdGhlIGJvdW5kcyB3aGVuIHRoaXMgaGludCBpcyBwcmVzZW50LlxyXG4gICAgICovXHJcbiAgICBEUkFXX0JPVU5EUyA9IDJcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbnN0cnVjdG9yIGFyZ3VtZW50cyBmb3IgW1tTY2VuZU5vZGVdXS5cclxuICpcclxuICogQHBhcmFtIFQgLSBPcHRpb25hbCBvd25lciBnYW1lIGNsYXNzLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBTY2VuZU5vZGVBcmdzIHtcclxuICAgIC8qKiBPcHRpb25hbCBpbml0aWFsIHNjZW5lIG5vZGUgSUQuICovXHJcbiAgICBpZD86IHN0cmluZyB8IG51bGw7XHJcblxyXG4gICAgLyoqIE9wdGlvbmFsIGluaXRpYWwgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgc2NlbmUgbm9kZS4gRGVmYXVsdHMgdG8gMC4gKi9cclxuICAgIHg/OiBudW1iZXI7XHJcblxyXG4gICAgLyoqIE9wdGlvbmFsIGluaXRpYWwgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHNjZW5lIG5vZGUuIERlZmF1bHRzIHRvIDAuICovXHJcbiAgICB5PzogbnVtYmVyO1xyXG5cclxuICAgIC8qKiBPcHRpb25hbCBpbml0aWFsIHdpZHRoIG9mIHRoZSBzY2VuZSBub2RlLiBEZWZhdWx0cyB0byAwLiAqL1xyXG4gICAgd2lkdGg/OiBudW1iZXI7XHJcblxyXG4gICAgLyoqIE9wdGlvbmFsIGluaXRpYWwgaGVpZ2h0IG9mIHRoZSBzY2VuZSBub2RlLiBEZWZhdWx0cyB0byAwLiAqL1xyXG4gICAgaGVpZ2h0PzogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3B0aW9uYWwgaW5pdGlhbCBub2RlIGFuY2hvci4gRGVmYXVsdHMgdG8gQ0VOVEVSIHdoaWNoIG1lYW5zIHRoZSBYL1kgY29vcmRpbmF0ZXMgb2YgdGhlIG5vZGUgZGVmaW5lIHdoZXJlXHJcbiAgICAgKiB0aGUgY2VudGVyIG9mIHRoaXMgc2NlbmUgbm9kZSBpcyBkaXNwbGF5ZWQgcmVsYXRpdmUgdG8gdGhlIHBhcmVudCBub2RlLlxyXG4gICAgICovXHJcbiAgICBhbmNob3I/OiBEaXJlY3Rpb247XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPcHRpb25hbCBpbml0aWFsIGNoaWxkIG5vZGUgYW5jaG9yLiBEZWZhdWx0cyB0byBDRU5URVIgd2hpY2ggbWVhbnMgdGhlIGNoaWxkIG5vZGVzIGFyZSBwb3NpdGlvbmVkIHJlbGF0aXZlIHRvXHJcbiAgICAgKiB0aGUgY2VudGVyIG9mIHRoaXMgc2NlbmUgbm9kZS5cclxuICAgICAqL1xyXG4gICAgY2hpbGRBbmNob3I/OiBEaXJlY3Rpb247XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPcHRpb25hbCBpbml0aWFsIG5vZGUgb3BhY2l0eS4gTXVzdCBiZSAwIG9yIGhpZ2hlci4gMC4wIG1lYW5zIGZ1bGx5IHRyYW5zcGFyZW50LiBEZWZhdWx0cyB0byAxLjAgd2hpY2ggbWVhbnNcclxuICAgICAqIGZ1bGx5IG9wYXF1ZS4gQ2FuIGJlIGxhcmdlciB0aGFuIDEuMCB0byBjb21wZW5zYXRlIHRyYW5zcGFyZW5jeSBvZiBpdHMgcGFyZW50LlxyXG4gICAgICovXHJcbiAgICBvcGFjaXR5PzogbnVtYmVyO1xyXG5cclxuICAgIC8qKiBPcHRpb25hbCBpbml0aWFsIGxheWVyICgwLTMxKSB0byBwdXQgdGhlIG5vZGUgb250by4gRGVmYXVsdHMgdG8gMC4gKi9cclxuICAgIGxheWVyPzogbnVtYmVyO1xyXG5cclxuICAgIC8qKiBPcHRpb25hbCBpbml0aWFsIHNob3dCb3VuZHMgZmxhZy4gU2V0IHRvIHRydWUgdG8gc2hvdyBib3VuZHMgYXJvdW5kIHRoZSBub2RlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuICovXHJcbiAgICBzaG93Qm91bmRzPzogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEJhc2Ugc2NlbmUgbm9kZS4gSXMgdXNlZCBhcyBiYXNlIGNsYXNzIGZvciBtb3JlIHNwZWNpYWxpemVkIHNjZW5lIG5vZGVzIGJ1dCBjYW4gYWxzbyBiZSB1c2VkIHN0YW5kYWxvbmUgYXMgcGFyZW50XHJcbiAqIG5vZGUgZm9yIG90aGVyIG5vZGVzIChzaW1pbGFyIHRvIGEgRElWIGVsZW1lbnQgaW4gSFRNTCBmb3IgZXhhbXBsZSkuXHJcbiAqXHJcbiAqIFRPRE8gSW1wbGVtZW50IHNjZW5lIGludmFsaWRhdGlvbiBwcm9wZXJseS5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBTY2VuZU5vZGU8VCBleHRlbmRzIEdhbWUgPSBHYW1lPiB7XHJcbiAgICAvKiogVGhlIHBhcmVudCBub2RlLiBOdWxsIGlmIG5vbmUuICovXHJcbiAgICBwcml2YXRlIHBhcmVudDogU2NlbmVOb2RlPFQ+IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgLyoqIFRoZSBuZXh0IHNpYmxpbmcgbm9kZS4gTnVsbCBpZiBub25lLiAqL1xyXG4gICAgcHJpdmF0ZSBuZXh0U2libGluZzogU2NlbmVOb2RlPFQ+IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgLyoqIFRoZSBwcmV2aW91cyBzaWJsaW5nIG5vZGUuIE51bGwgaWYgbm9uZS4gKi9cclxuICAgIHByaXZhdGUgcHJldmlvdXNTaWJsaW5nOiBTY2VuZU5vZGU8VD4gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAvKiogVGhlIGZpcnN0IGNoaWxkIG5vZGUuIE51bGwgaWYgbm9uZS4gKi9cclxuICAgIHByaXZhdGUgZmlyc3RDaGlsZDogU2NlbmVOb2RlPFQ+IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgLyoqIFRoZSBsYXN0IGNoaWxkIG5vZGUuIE51bGwgaWYgbm9uZS4gKi9cclxuICAgIHByaXZhdGUgbGFzdENoaWxkOiBTY2VuZU5vZGU8VD4gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAvKiogVGhlIHNjZW5lIHRoaXMgbm9kZSBpcyBjb25uZWN0ZWQgdG8uIE51bGwgaWYgbm9uZS4gKi9cclxuICAgIHByb3RlY3RlZCBzY2VuZTogU2NlbmU8VCwgdW5rbm93bj4gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAvKiogVGhlIElEIG9mIHRoZSBub2RlLiBOdWxsIGlmIG5vbmUuICovXHJcbiAgICBwcml2YXRlIGlkOiBzdHJpbmcgfCBudWxsO1xyXG5cclxuICAgIC8qKiBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiByZWxhdGl2ZSB0byBwYXJlbnQgbm9kZS4gKi9cclxuICAgIHByaXZhdGUgeDogbnVtYmVyO1xyXG5cclxuICAgIC8qKiBUaGUgdmVydGljYWwgcG9zaXRpb24gcmVsYXRpdmUgdG8gcGFyZW50IG5vZGUuICovXHJcbiAgICBwcml2YXRlIHk6IG51bWJlcjtcclxuXHJcbiAgICAvKiogVGhlIG5vZGUgd2lkdGguICovXHJcbiAgICBwcml2YXRlIHdpZHRoOiBudW1iZXI7XHJcblxyXG4gICAgLyoqIFRoZSBub2RlIGhlaWdodC4gKi9cclxuICAgIHByaXZhdGUgaGVpZ2h0OiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYW5jaG9yIGRlZmluaW5nIHRoZSBvcmlnaW4gb2YgdGhpcyBzY2VuZSBub2RlLiBXaGVuIHNldCB0byBUT1BfTEVGVCBmb3IgZXhhbXBsZSB0aGVuIHRoZSBYL1kgY29vcmRpbmF0ZXMgb2ZcclxuICAgICAqIHRoaXMgbm9kZSBkZWZpbmUgd2hlcmUgdG8gZGlzcGxheSB0aGUgdXBwZXIgbGVmdCBjb3JuZXIgb2YgaXQuIFdoZW4gc2V0IHRvIENFTlRFUiB0aGVuIHRoZSBub2RlIGlzIGNlbnRlcmVkIGF0XHJcbiAgICAgKiBpdHMgWC9ZIGNvb3JkaW5hdGVzLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGFuY2hvcjogRGlyZWN0aW9uO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFuY2hvciBvZiB0aGUgbG9jYWwgY29vcmRpbmF0ZSBzeXN0ZW0uIFdoZW4gc2V0IHRvIENFTlRFUiBmb3IgZXhhbXBsZSB0aGVuIHRoZSBYL1kgY29vcmRpbmF0ZXMgb3IgY2hpbGRcclxuICAgICAqIG5vZGVzIGFyZSByZWxhdGl2ZSB0byB0aGUgY2VudGVyIG9mIHRoaXMgbm9kZS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjaGlsZEFuY2hvcjogRGlyZWN0aW9uO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGJvdW5kcyBwb2x5Z29uLiBUaGlzIGlzIHVwZGF0ZWQgb24gZGVtYW5kIGFuZCBhdXRvbWF0aWNhbGx5IGludmFsaWRhdGVkIHdoZW4gbm9kZSBzaXplIGNoYW5nZXMuIE5vZGVcclxuICAgICAqIGhhcyB0byBjYWxsIFtbaW52YWxpZGF0ZUJvdW5kc11dIG1hbnVhbGx5IHdoZW4gc29tZXRoaW5nIGVsc2UgaW5mbHVlbmNlcyB0aGUgYm91bmRzLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGJvdW5kc1BvbHlnb246IFBvbHlnb24yID0gbmV3IFBvbHlnb24yKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoaXMgbm9kZS4gVGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyBhcHBsaWVkIHRvIHRoZSBub2RlIGJlZm9yZSBtb3ZpbmcgdGhlIG5vZGUgdG9cclxuICAgICAqIGl0cyBwb3NpdGlvbiAoWC9ZIGNvb3JkaW5hdGVzKS4gU28gaW4gc2ltcGxlIGNhc2VzIHRoaXMgdHJhbnNmb3JtYXRpb24gaXMgbm90IG5lZWRlZCBhdCBhbGwgYW5kIGl0cyB1cCB0byB5b3VcclxuICAgICAqIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgY29vcmRpbmF0ZXMgYW5kL29yIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXguXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNmb3JtYXRpb24gPSBuZXcgQWZmaW5lVHJhbnNmb3JtKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IGNvbWJpbmluZyB0aGUgbm9kZXMgdHJhbnNmb3JtYXRpb24gd2l0aCBhbGwgdGhlIHBhcmVudCB0cmFuc2Zvcm1hdGlvbnMuIFRoaXMgaXNcclxuICAgICAqIGNhbGN1bGF0ZWQgb24tdGhlLWZseSB3aGVuIGEgc2NlbmUgbm9kZSBpcyB1cGRhdGVkLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNjZW5lVHJhbnNmb3JtYXRpb24gPSBuZXcgQWZmaW5lVHJhbnNmb3JtKCk7XHJcblxyXG4gICAgLyoqIEFycmF5IHdpdGggY3VycmVudGx5IGFjdGl2ZSBhbmltYXRpb25zLiBBbmltYXRpb25zIGFyZSBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgZnJvbSB0aGUgYXJyYXkgd2hlbiBmaW5pc2hlZC4qL1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbmltYXRpb25zOiBTY2VuZU5vZGVBbmltYXRpb248VD5bXSA9IFtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGN1cnJlbnQgb3BhY2l0eSBvZiB0aGUgbm9kZS4gMC4wIG1lYW5zIGZ1bGx5IHRyYW5zcGFyZW50IGFuZCAxLjAgbWVhbnMgZnVsbHkgb3BhcXVlLiBDYW4gYmUgbGFyZ2VyXHJcbiAgICAgKiB0aGFuIDEuMCB0byBjb21wZW5zYXRlIHRyYW5zcGFyZW5jeSBvZiBpdHMgcGFyZW50LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG9wYWNpdHk6IG51bWJlcjtcclxuXHJcbiAgICAvKiogU2V0IHRvIHRydWUgdG8gc2hvdyBib3VuZHMuIFVzZWZ1bCBmb3IgZGVidWdnaW5nLiAqL1xyXG4gICAgcHJpdmF0ZSBzaG93Qm91bmRzOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGxheWVyIHRoaXMgbm9kZSBpcyBkcmF3biBvbi4gSW50ZXJuYWwgcmVwcmVzZW50YXRpb24gaXMgc3RvcmVkIGluIGAyXm5gIHdoaWxlIHNldHRlciBhbmQgZ2V0dGVyIHdvcmtzXHJcbiAgICAgKiB3aXRoIGBuYCBpbnN0ZWFkLiBUaGlzIGlzIGJlY2F1c2UgdGhlIGxheWVyaW5nIHN5c3RlbSBpbnRlcm5hbGx5IHdvcmtzIHdpdGggZmFzdCBiaXQgbWFza3MuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbGF5ZXI6IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgc2NlbmUgbm9kZSB3aXRoIHRoZSBnaXZlbiBpbml0aWFsIHNldHRpbmdzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoeyBpZCA9IG51bGwsIHggPSAwLCB5ID0gMCwgd2lkdGggPSAwLCBoZWlnaHQgPSAwLCBhbmNob3IgPSBEaXJlY3Rpb24uQ0VOVEVSLFxyXG4gICAgICAgICAgICBjaGlsZEFuY2hvciA9IERpcmVjdGlvbi5DRU5URVIsIG9wYWNpdHkgPSAxLCBzaG93Qm91bmRzID0gZmFsc2UsIGxheWVyID0gMCB9OiBTY2VuZU5vZGVBcmdzID0ge30pIHtcclxuICAgICAgICB0aGlzLmlkID0gaWQ7XHJcbiAgICAgICAgdGhpcy54ID0geDtcclxuICAgICAgICB0aGlzLnkgPSB5O1xyXG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuICAgICAgICB0aGlzLm9wYWNpdHkgPSBvcGFjaXR5O1xyXG4gICAgICAgIHRoaXMuYW5jaG9yID0gYW5jaG9yO1xyXG4gICAgICAgIHRoaXMuY2hpbGRBbmNob3IgPSBjaGlsZEFuY2hvcjtcclxuICAgICAgICB0aGlzLnNob3dCb3VuZHMgPSBzaG93Qm91bmRzO1xyXG4gICAgICAgIHRoaXMubGF5ZXIgPSAxIDw8IGxheWVyO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgbm9kZSBJRC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBJRCBvZiB0aGUgbm9kZSBvciBudWxsIGlmIG5vbmUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRJZCgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgKG9yIHJlbW92ZXMpIHRoZSBub2RlIElELlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBpZCAtIFRoZSBpZCB0byBzZXQgb3IgbnVsbCB0byB1bnNldC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldElkKGlkOiBzdHJpbmcgfCBudWxsKTogdGhpcyB7XHJcbiAgICAgICAgdGhpcy5pZCA9IGlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgWCBwb3NpdGlvbiBvZiB0aGUgbm9kZSByZWxhdGl2ZSB0byB0aGUgcGFyZW50IG5vZGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBUaGUgWCBwb3NpdGlvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy54O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgcGFyZW50IG5vZGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHggLSBUaGUgaG9yaXpvbnRhbCBwb3NpdGlvbiB0byBzZXQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRYKHg6IG51bWJlcik6IHRoaXMge1xyXG4gICAgICAgIGlmICh4ICE9PSB0aGlzLngpIHtcclxuICAgICAgICAgICAgdGhpcy54ID0geDtcclxuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgWSBwb3NpdGlvbiBvZiB0aGUgbm9kZSByZWxhdGl2ZSB0aGUgcGFyZW50IG5vZGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBUaGUgWSBwb3NpdGlvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFkoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy55O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdmVydGljYWwgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHBhcmVudCBub2RlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB5IC0gVGhlIHZlcnRpY2FsIHBvc2l0aW9uIHRvIHNldC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldFkoeTogbnVtYmVyKTogdGhpcyB7XHJcbiAgICAgICAgaWYgKHkgIT09IHRoaXMueSkge1xyXG4gICAgICAgICAgICB0aGlzLnkgPSB5O1xyXG4gICAgICAgICAgICB0aGlzLmludmFsaWRhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNb3ZlcyB0aGUgbm9kZSBieSB0aGUgZ2l2ZW4gZGVsdGFzLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB4IC0gVGhlIGhvcml6b250YWwgZGVsdGEgdG8gbW92ZSB0aGUgbm9kZSBieS5cclxuICAgICAqIEBwYXJhbSB5IC0gVGhlIHZlcnRpY2FsIGRlbHRhIHRvIG1vdmUgdGhlIG5vZGUgYnkuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBtb3ZlQnkoeDogbnVtYmVyLCB5OiBudW1iZXIpOiB0aGlzIHtcclxuICAgICAgICBpZiAoeCAhPT0gMCB8fCB5ICE9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMueCArPSB4O1xyXG4gICAgICAgICAgICB0aGlzLnkgKz0geTtcclxuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW92ZXMgdGhlIG5vZGUgdG8gdGhlIGdpdmVuIHBvc2l0aW9uIHJlbGF0aXZlIHRvIGl0cyBwYXJlbnQgbm9kZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0geCAtIFRoZSBob3Jpem9udGFsIHBvc2l0aW9uIHRvIG1vdmUgdG8uXHJcbiAgICAgKiBAcGFyYW0geSAtIFRoZSB2ZXJ0aWNhbCBwb3NpdGlvbiB0byBtb3ZlIHRvLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbW92ZVRvKHg6IG51bWJlciwgeTogbnVtYmVyKTogdGhpcyB7XHJcbiAgICAgICAgaWYgKHggIT09IHRoaXMueCB8fCB5ICE9PSB0aGlzLnkpIHtcclxuICAgICAgICAgICAgdGhpcy54ID0geDtcclxuICAgICAgICAgICAgdGhpcy55ID0geTtcclxuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgd2lkdGggb2YgdGhlIG5vZGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBUaGUgbm9kZSB3aWR0aC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFdpZHRoKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB3aWR0aCBvZiB0aGUgbm9kZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gd2lkdGggLSBUaGUgd2lkdGggdG8gc2V0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0V2lkdGgod2lkdGg6IG51bWJlcik6IHRoaXMge1xyXG4gICAgICAgIGlmICh3aWR0aCAhPT0gdGhpcy53aWR0aCkge1xyXG4gICAgICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7XHJcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmludmFsaWRhdGVCb3VuZHMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB3aWR0aCBvZiB0aGUgbm9kZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBub2RlIHdpZHRoLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0SGVpZ2h0KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaGVpZ2h0IG9mIHRoZSBub2RlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBoZWlnaHQgLSBUaGUgaGVpZ2h0IHRvIHNldC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldEhlaWdodChoZWlnaHQ6IG51bWJlcik6IHRoaXMge1xyXG4gICAgICAgIGlmIChoZWlnaHQgIT09IHRoaXMuaGVpZ2h0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgICAgICAgICB0aGlzLmludmFsaWRhdGUoKTtcclxuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlQm91bmRzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzaXplcyB0aGUgbm9kZSB0byB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gd2lkdGggIC0gVGhlIHdpZHRoIHRvIHNldC5cclxuICAgICAqIEBwYXJhbSBoZWlnaHQgLSBUaGUgaGVpZ2h0IHRvIHNldC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlc2l6ZVRvKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdGhpcyB7XHJcbiAgICAgICAgaWYgKHdpZHRoICE9PSB0aGlzLndpZHRoIHx8IGhlaWdodCAhPT0gdGhpcy5oZWlnaHQpIHtcclxuICAgICAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZUJvdW5kcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgb3BhY2l0eSBvZiB0aGUgbm9kZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBvcGFjaXR5LiAwLjAgbWVhbnMgZnVsbHkgdHJhbnNwYXJlbnQsIDEuMCBtZWFucyBmdWxseSBvcGFxdWUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRPcGFjaXR5KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3BhY2l0eTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIG5vZGVzIG9wYWNpdHkuXHJcbiAgICAgKlxyXG4gICAgICogQHByYW0gb3BhY2l0eSAtIFRoZSBvcGFjaXR5IHRvIHNldC4gMC4wIG1lYW5zIGZ1bGx5IHRyYW5zcGFyZW50LCAxLjAgbWVhbnMgZnVsbHkgb3BhcXVlLiBDYW4gYmUgbGFyZ2VyIHRoYW4gMS4wXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgdG8gY29tcGVuc2F0ZSB0cmFuc3BhcmVuY3kgb2YgaXRzIHBhcmVudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldE9wYWNpdHkob3BhY2l0eTogbnVtYmVyKTogdGhpcyB7XHJcbiAgICAgICAgb3BhY2l0eSA9IE1hdGgubWF4KDAsIG9wYWNpdHkpO1xyXG4gICAgICAgIGlmIChvcGFjaXR5ICE9PSB0aGlzLm9wYWNpdHkpIHtcclxuICAgICAgICAgICAgdGhpcy5vcGFjaXR5ID0gb3BhY2l0eTtcclxuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgZWZmZWN0aXZlIG5vZGUgb3BhY2l0eSB3aGljaCBpcyB0aGUgbm9kZXMgb3BhY2l0eSBtdWx0aXBsaWVkIGJ5IHRoZSBwYXJlbnRzIGVmZmVjdGl2ZSBvcGFjaXR5LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gVGhlIGVmZmVjdGl2ZSBub2RlIG9wYWNpdHkgY2xhbXBlZCB0byB2YWxpZCByYW5nZSBvZiAwLjAgdG8gMS4wLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0RWZmZWN0aXZlT3BhY2l0eSgpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh0aGlzLm9wYWNpdHkgPT09IEluZmluaXR5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgKHRoaXMucGFyZW50Py5nZXRFZmZlY3RpdmVPcGFjaXR5KCkgPz8gMSkgKiB0aGlzLm9wYWNpdHkpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIG5vZGUgYW5jaG9yIHdoaWNoIGRlZmluZXMgdGhlIG1lYW5pbmcgb2YgdGhlIFgvWSBjb29yZGluYXRlcyBvZiB0aGUgbm9kZS4gQ0VOVEVSIG1lYW5zIHRoZSBYL1lcclxuICAgICAqIGNvb3JkaW5hdGVzIGRlZmluZSB0aGUgY2VudGVyIG9mIHRoZSBub2RlLiBUT1BfTEVGVCBtZWFucyB0aGUgWC9ZIGNvb3JkaW5hdGVzIGRlZmluZSB0aGUgdXBwZXIgbGVmdCBjb3JuZXIgb2ZcclxuICAgICAqIHRoZSBub2RlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gVGhlIG5vZGUgYW5jaG9yLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QW5jaG9yKCk6IERpcmVjdGlvbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYW5jaG9yO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgbm9kZSBhbmNob3Igd2hpY2ggZGVmaW5lcyB0aGUgbWVhbmluZyBvZiB0aGUgWC9ZIGNvb3JkaW5hdGVzIG9mIHRoZSBub2RlLiBDRU5URVIgbWVhbnMgdGhlIFgvWVxyXG4gICAgICogY29vcmRpbmF0ZXMgZGVmaW5lIHRoZSBjZW50ZXIgb2YgdGhlIG5vZGUuIFRPUF9MRUZUIG1lYW5zIHRoZSBYL1kgY29vcmRpbmF0ZXMgZGVmaW5lIHRoZSB1cHBlciBsZWZ0IGNvcm5lciBvZlxyXG4gICAgICogdGhlIG5vZGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGFuY2hvciAtIFRoZSBub2RlIGFuY2hvciB0byBzZXQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRBbmNob3IoYW5jaG9yOiBEaXJlY3Rpb24pOiB0aGlzIHtcclxuICAgICAgICBpZiAoYW5jaG9yICE9PSB0aGlzLmFuY2hvcikge1xyXG4gICAgICAgICAgICB0aGlzLmFuY2hvciA9IGFuY2hvcjtcclxuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgY2hpbGQgYW5jaG9yIHdoaWNoIGRlZmluZXMgdGhlIG9yaWdpbiBvZiB0aGUgbG9jYWwgY29vcmRpbmF0ZSBzeXN0ZW0gdG8gd2hpY2ggdGhlIGNvb3JkaW5hdGVzIG9mXHJcbiAgICAgKiBjaGlsZCBub2RlcyBhcmUgcmVsYXRpdmUgdG8uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBUaGUgY2hpbGQgYW5jaG9yLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q2hpbGRBbmNob3IoKTogRGlyZWN0aW9uIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZEFuY2hvcjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGNoaWxkIGFuY2hvciB3aGljaCBkZWZpbmVzIHRoZSBvcmlnaW4gb2YgdGhlIGxvY2FsIGNvb3JkaW5hdGUgc3lzdGVtIHRvIHdoaWNoIHRoZSBjb29yZGluYXRlcyBvZlxyXG4gICAgICogY2hpbGQgbm9kZXMgYXJlIHJlbGF0aXZlIHRvLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjaGlsZEFuY2hvciAtIFRoZSBjaGlsZCBhbmNob3IgdG8gc2V0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0Q2hpbGRBbmNob3IoY2hpbGRBbmNob3I6IERpcmVjdGlvbik6IHRoaXMge1xyXG4gICAgICAgIGlmIChjaGlsZEFuY2hvciAhPT0gdGhpcy5jaGlsZEFuY2hvcikge1xyXG4gICAgICAgICAgICB0aGlzLmNoaWxkQW5jaG9yID0gY2hpbGRBbmNob3I7XHJcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGN1c3RvbSB0cmFuc2Zvcm1hdGlvbiBvZiB0aGlzIG5vZGUgd2hpY2ggY2FuIGJlIG1hbmlwdWxhdGVkIGJ5IHRoZSBbW3RyYW5zZm9ybV1dIG1ldGhvZC4gVGhpc1xyXG4gICAgICogdHJhbnNmb3JtYXRpb24gaXMgYXBwbGllZCB0byB0aGUgbm9kZSBiZWZvcmUgaXQgaXMgcmVuZGVyZWQgYXQgaXRzIGludGVuZGVkIHBvc2l0aW9uLiBUcmFuc2Zvcm1hdGlvbiBhbmRcclxuICAgICAqIG5vZGUgcG9zaXRpb24gY2FuIGNvbXBsZW1lbnQgZWFjaCBvdGhlciBvciB5b3UgY2FuIG9ubHkgdXNlIG9uZSBvZiB0aGVtLCB0aGF0J3MgdXAgdG8geW91LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gVGhlIGN1c3RvbSBub2RlIHRyYW5zZm9ybWF0aW9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0VHJhbnNmb3JtYXRpb24oKTogQWZmaW5lVHJhbnNmb3JtIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1hdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1vZGlmaWVzIHRoZSBjdXN0b20gdHJhbnNmb3JtYXRpb24gbWF0cml4IG9mIHRoaXMgbm9kZS4gQ2FsbHMgdGhlIGdpdmVuIHRyYW5zZm9ybWVyIGZ1bmN0aW9uIHdoaWNoIGNhbiB0aGVuXHJcbiAgICAgKiBtb2RpZnkgdGhlIGdpdmVuIHRyYW5zZm9ybWF0aW9uIG1hdHJpeC4gQWZ0ZXIgdGhpcyB0aGUgbm9kZSBpcyBpbnZhbGlkYXRlZCB0byByZWNhbGN1bGF0ZSBib3VuZHMgYW5kIHJlZHJhdyBpdC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdHJhbnNmb3JtZXIgLSBGdW5jdGlvbiB0byBjYWxsIHdpdGggdHJhbnNmb3JtYXRpb24gbWF0cml4IGFzIGFyZ3VtZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdHJhbnNmb3JtKHRyYW5zZm9ybWVyOiAodHJhbnNmb3JtYXRpb246IEFmZmluZVRyYW5zZm9ybSkgPT4gdm9pZCk6IHRoaXMge1xyXG4gICAgICAgIHRyYW5zZm9ybWVyKHRoaXMudHJhbnNmb3JtYXRpb24pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludmFsaWRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHNjZW5lIHRoZSBub2RlIGlzIGN1cnJlbnRseSBhdHRhY2hlZCB0by4gTnVsbCBpZiBub25lLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gVGhlIGN1cnJlbnQgc2NlbmUgb3IgbnVsbCBpZiBub25lLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0U2NlbmUoKTogU2NlbmU8VD4gfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zY2VuZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHNjZW5lIHRoaXMgbm9kZSBhbmQgYWxsIGl0cyBjaGlsZHJlbiBiZWxvbmdzIHRvLiBUaGlzIGlzIGNhbGxlZCBpbnRlcm5hbGx5IHdoZW4gYSBub2RlIGlzIGFkZGVkIHRvXHJcbiAgICAgKiB0aGUgc2NlbmUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHNjZW5lIC0gVGhlIHNjZW5lIHRoZSBub2RlIGJlbG9uZ3MgdG8gZnJvbSBub3cgb24uIG51bGwgdG8gdW5zZXQgdGhlIGN1cnJlbnQgc2NlbmUuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc2V0U2NlbmUoc2NlbmU6IFNjZW5lPFQ+IHwgbnVsbCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChzY2VuZSAhPT0gdGhpcy5zY2VuZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zY2VuZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWFjdGl2YXRlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xyXG4gICAgICAgICAgICBpZiAoc2NlbmUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZhdGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmZvckVhY2hDaGlsZChub2RlID0+IG5vZGUuc2V0U2NlbmUoc2NlbmUpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsZWQgd2hlbiBub2RlIGlzIGFkZGVkIHRvIHNjZW5lLiBDYW4gYmUgb3ZlcndyaXR0ZW4gdG8gY29ubmVjdCBldmVudCBoYW5kbGVycyBmb3IgZXhhbXBsZS5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGFjdGl2YXRlKCk6IHZvaWQge31cclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxlZCB3aGVuIG5vZGUgaXMgcmVtb3ZlZCBmcm9tIHNjZW5lLiBDYW4gYmUgb3ZlcndyaXR0ZW4gdG8gZGlzY29ubmVjdCBldmVudCBoYW5kbGVycyBmb3IgZXhhbXBsZS5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGRlYWN0aXZhdGUoKTogdm9pZCB7fVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgcGFyZW50IG5vZGUgb2YgdGhpcyBub2RlIG9yIG51bGwgaWYgbm9kZSBpcyBub3QgYXR0YWNoZWQgdG8gYSBwYXJlbnQgb3IgaXMgdGhlIHJvb3Qgbm9kZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBwYXJlbnQgbm9kZSBvciBudWxsIGlmIHVuYXR0YWNoZWQgb3Igcm9vdCBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0UGFyZW50KCk6IFNjZW5lTm9kZTxUPiB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIG5leHQgbm9kZSBhdCB0aGUgc2FtZSBsZXZlbC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBuZXh0IHNpYmxpbmcgb3IgbnVsbCBpZiBub25lLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0TmV4dFNpYmxpbmcoKTogU2NlbmVOb2RlPFQ+IHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dFNpYmxpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBwcmV2aW91cyBub2RlIGF0IHRoZSBzYW1lIGxldmVsLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gVGhlIHByZXZpb3VzIHNpYmxpbmcgb3IgbnVsbCBpZiBub25lLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0UHJldmlvdXNTaWJsaW5nKCk6IFNjZW5lTm9kZTxUPiB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByZXZpb3VzU2libGluZztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGZpcnN0IGNoaWxkIG5vZGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBUaGUgZmlyc3QgY2hpbGQgbm9kZSBvciBudWxsIGlmIG5vbmUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRGaXJzdENoaWxkKCk6IFNjZW5lTm9kZTxUPiB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZpcnN0Q2hpbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBsYXN0IGNoaWxkIG5vZGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBUaGUgbGFzdCBjaGlsZCBub2RlIG9yIG51bGwgaWYgbm9uZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldExhc3RDaGlsZCgpOiBTY2VuZU5vZGU8VD4gfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sYXN0Q2hpbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhpcyBub2RlIGhhcyBjaGlsZCBub2Rlcy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFRydWUgaWYgaXQgY2hpbGQgbm9kZXMgYXJlIHByZXNlbnQsIGZhbHNlIGlmIG5vdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGhhc0NoaWxkTm9kZXMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlyc3RDaGlsZCAhPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwZW5kcyB0aGUgZ2l2ZW4gY2hpbGQgbm9kZSBzbyBpdCBiZWNvbWVzIHRoZSBsYXN0IGNoaWxkIG9mIHRoaXMgbm9kZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gbm9kZSAtIFRoZSBjaGlsZCBub2RlIHRvIGFwcGVuZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFwcGVuZENoaWxkKG5vZGU6IFNjZW5lTm9kZTxUPik6IHRoaXMge1xyXG4gICAgICAgIGlmIChub2RlID09PSB0aGlzKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vZGUgY2FuIG5vdCBiZSBhcHBlbmRlZCB0byBpdHNlbGZcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZW1vdmUgZnJvbSBvbGQgcGFyZW50IGlmIHRoZXJlIGlzIG9uZVxyXG4gICAgICAgIGNvbnN0IG9sZFBhcmVudCA9IG5vZGUucGFyZW50O1xyXG4gICAgICAgIGlmIChvbGRQYXJlbnQpIHtcclxuICAgICAgICAgICAgb2xkUGFyZW50LnJlbW92ZUNoaWxkKG5vZGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQXBwZW5kIHRoZSBjaGlsZFxyXG4gICAgICAgIG5vZGUucHJldmlvdXNTaWJsaW5nID0gdGhpcy5sYXN0Q2hpbGQ7XHJcbiAgICAgICAgY29uc3Qgb2xkTGFzdENoaWxkID0gdGhpcy5sYXN0Q2hpbGQ7XHJcbiAgICAgICAgaWYgKG9sZExhc3RDaGlsZCkge1xyXG4gICAgICAgICAgICBvbGRMYXN0Q2hpbGQubmV4dFNpYmxpbmcgPSBub2RlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxhc3RDaGlsZCA9IG5vZGU7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgdGhpcy5maXJzdENoaWxkID0gbm9kZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbm9kZS5wYXJlbnQgPSB0aGlzO1xyXG4gICAgICAgIG5vZGUuc2V0U2NlbmUodGhpcy5zY2VuZSk7XHJcblxyXG4gICAgICAgIG5vZGUuaW52YWxpZGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJlcGVuZHMgdGhlIGdpdmVuIGNoaWxkIG5vZGUgc28gaXQgYmVjb21lcyB0aGUgZmlyc3QgY2hpbGQgb2YgdGhpcyBub2RlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBub2RlIC0gVGhlIGNoaWxkIG5vZGUgdG8gcHJlcGVuZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHByZXBlbmRDaGlsZChub2RlOiBTY2VuZU5vZGU8VD4pOiB0aGlzIHtcclxuICAgICAgICBpZiAodGhpcy5maXJzdENoaWxkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG5vZGUsIHRoaXMuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgZ2l2ZW4gY2hpbGQgbm9kZVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjaGlsZCAtIFRoZSBjaGlsZCBub2RlIHRvIHJlbW92ZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlbW92ZUNoaWxkKG5vZGU6IFNjZW5lTm9kZTxUPik6IHRoaXMge1xyXG4gICAgICAgIGlmIChub2RlLnBhcmVudCAhPT0gdGhpcykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb2RlIG11c3QgYmUgYSBjaGlsZCBub2RlXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVtb3ZlIG5vZGUgZnJvbSBsaW5rZWQgbGlzdFxyXG4gICAgICAgIGNvbnN0IG5leHQgPSBub2RlLm5leHRTaWJsaW5nO1xyXG4gICAgICAgIGNvbnN0IHByZXYgPSBub2RlLnByZXZpb3VzU2libGluZztcclxuICAgICAgICBpZiAobmV4dCkge1xyXG4gICAgICAgICAgICBuZXh0LnByZXZpb3VzU2libGluZyA9IHByZXY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwcmV2KSB7XHJcbiAgICAgICAgICAgIHByZXYubmV4dFNpYmxpbmcgPSBuZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ29ycmVjdCBmaXJzdC9sYXN0IHJlZmVyZW5jZVxyXG4gICAgICAgIGlmIChub2RlID09PSB0aGlzLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgdGhpcy5maXJzdENoaWxkID0gbmV4dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5vZGUgPT09IHRoaXMubGFzdENoaWxkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGFzdENoaWxkID0gcHJldjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSBhbGwgcmVmZXJlbmNlcyBmcm9tIG5vZGVcclxuICAgICAgICBub2RlLnBhcmVudCA9IG51bGw7XHJcbiAgICAgICAgbm9kZS5uZXh0U2libGluZyA9IG51bGw7XHJcbiAgICAgICAgbm9kZS5wcmV2aW91c1NpYmxpbmcgPSBudWxsO1xyXG4gICAgICAgIG5vZGUuc2V0U2NlbmUobnVsbCk7XHJcblxyXG4gICAgICAgIG5vZGUuaW52YWxpZGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgdGhpcyBub2RlIGZyb20gdGhlIHNjZW5lLiBUaGUgbm9kZSBpcyB0aGVuIGEgZGV0YWNoZWQgbm9kZSByZWFkeSB0byBiZSBhZGRlZCB0byB0aGUgc2NlbmUgKG9yIHNvbWVcclxuICAgICAqIG90aGVyIHNjZW5lKSBhZ2Fpbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlbW92ZSgpOiB0aGlzIHtcclxuICAgICAgICBpZiAodGhpcy5wYXJlbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnQucmVtb3ZlQ2hpbGQodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhbGwgY2hpbGQgbm9kZXMuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjbGVhcigpOiB0aGlzIHtcclxuICAgICAgICB3aGlsZSAodGhpcy5sYXN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZCh0aGlzLmxhc3RDaGlsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5zZXJ0cyB0aGUgZ2l2ZW4gY2hpbGQgbm9kZSBiZWZvcmUgdGhlIHNwZWNpZmllZCByZWZlcmVuY2UgY2hpbGQgbm9kZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gbmV3Tm9kZSAtIFRoZSBjaGlsZCBub2RlIHRvIGluc2VydC5cclxuICAgICAqIEBwYXJhbSByZWZOb2RlIC0gVGhlIHJlZmVyZW5jZSBub2RlLiBUaGUgY2hpbGQgbm9kZSBpcyBpbnNlcnRlZCBiZWZvcmUgdGhpcyBvbmUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpbnNlcnRCZWZvcmUobmV3Tm9kZTogU2NlbmVOb2RlPFQ+LCByZWZOb2RlOiBTY2VuZU5vZGU8VD4pOiB0aGlzIHtcclxuICAgICAgICBpZiAobmV3Tm9kZSA9PT0gdGhpcykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb2RlIGNhbiBub3QgYmUgaW5zZXJ0ZWQgaW50byBpdHNlbGZcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZWZOb2RlLnBhcmVudCAhPT0gdGhpcykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZWZlcmVuY2Ugbm9kZSBtdXN0IGJlIGEgY2hpbGQgbm9kZVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSBmcm9tIG9sZCBwYXJlbnQgaWYgdGhlcmUgaXMgb25lXHJcbiAgICAgICAgY29uc3Qgb2xkUGFyZW50ID0gbmV3Tm9kZS5wYXJlbnQ7XHJcbiAgICAgICAgaWYgKG9sZFBhcmVudCkge1xyXG4gICAgICAgICAgICBvbGRQYXJlbnQucmVtb3ZlQ2hpbGQobmV3Tm9kZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJbnNlcnQgdGhlIG5vZGVcclxuICAgICAgICBjb25zdCBvbGRQcmV2aW91cyA9IHJlZk5vZGUucHJldmlvdXNTaWJsaW5nO1xyXG4gICAgICAgIGlmICghb2xkUHJldmlvdXMpIHtcclxuICAgICAgICAgICAgdGhpcy5maXJzdENoaWxkID0gbmV3Tm9kZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvbGRQcmV2aW91cy5uZXh0U2libGluZyA9IG5ld05vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlZk5vZGUucHJldmlvdXNTaWJsaW5nID0gbmV3Tm9kZTtcclxuICAgICAgICBuZXdOb2RlLnByZXZpb3VzU2libGluZyA9IG9sZFByZXZpb3VzO1xyXG4gICAgICAgIG5ld05vZGUubmV4dFNpYmxpbmcgPSByZWZOb2RlO1xyXG4gICAgICAgIG5ld05vZGUucGFyZW50ID0gdGhpcztcclxuICAgICAgICBuZXdOb2RlLnNldFNjZW5lKHRoaXMuc2NlbmUpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5pbnZhbGlkYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXBsYWNlcyB0aGUgZ2l2ZW4gY2hpbGQgbm9kZSB3aXRoIGEgbmV3IG5vZGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9sZE5vZGUgLSBUaGUgb2xkIGNoaWxkIG5vZGUgdG8gcmVwbGFjZS5cclxuICAgICAqIEBwYXJhbSBuZXdOb2RlIC0gVGhlIG5ldyBub2RlIHRvIHJlcGxhY2UgdGhlIG9sZCBvbmUgd2l0aC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlcGxhY2VDaGlsZChvbGROb2RlOiBTY2VuZU5vZGU8VD4sIG5ld05vZGU6IFNjZW5lTm9kZTxUPik6IHRoaXMge1xyXG4gICAgICAgIGlmIChuZXdOb2RlID09PSB0aGlzKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5ld05vZGUgbXVzdCBub3QgYmUgdGhlIHBhcmVudCBub2RlXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob2xkTm9kZS5wYXJlbnQgIT09IHRoaXMpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwib2xkTm9kZSBtdXN0IGJlIGEgY2hpbGQgbm9kZVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIElmIG5ldyBub2RlIGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgbm9kZSB0aGVuIGRvIG5vdGhpbmdcclxuICAgICAgICBpZiAobmV3Tm9kZSA9PT0gb2xkTm9kZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG5leHQgPSBvbGROb2RlLm5leHRTaWJsaW5nO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGQob2xkTm9kZSk7XHJcbiAgICAgICAgaWYgKG5leHQpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgbmV4dCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChuZXdOb2RlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVwbGFjZSB0aGUgZ2l2ZW4gbm9kZSB3aXRoIHRoaXMgb25lLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBub2RlIC0gVGhlIG5vZGUgdG8gcmVwbGFjZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlcGxhY2Uobm9kZTogU2NlbmVOb2RlPFQ+KTogdGhpcyB7XHJcbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50LnJlcGxhY2VDaGlsZCh0aGlzLCBub2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBlbmRzIHRoaXMgbm9kZSB0byB0aGUgZ2l2ZW4gcGFyZW50IG5vZGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG5vZGUgLSBUaGUgcGFyZW50IG5vZGUgdG8gYXBwZW5kIHRoaXMgbm9kZSB0by5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFwcGVuZFRvKG5vZGU6IFNjZW5lTm9kZTxUPik6IHRoaXMge1xyXG4gICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQodGhpcyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcmVwZW5kcyB0aGlzIG5vZGUgdG8gdGhlIGdpdmVuIHBhcmVudCBub2RlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBub2RlIC0gVGhlIHBhcmVudCBub2RlIHRvIHByZXBlbmQgdGhpcyBub2RlIHRvLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcHJlcGVuZFRvKG5vZGU6IFNjZW5lTm9kZTxUPik6IHRoaXMge1xyXG4gICAgICAgIG5vZGUucHJlcGVuZENoaWxkKHRoaXMpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXRlcmF0ZXMgb3ZlciBhbGwgY2hpbGQgbm9kZXMgYW5kIGNhbGxzIHRoZSBnaXZlbiBjYWxsYmFjayB3aXRoIHRoZSBjdXJyZW50bHkgaXRlcmF0ZWQgbm9kZSBhcyBwYXJhbWV0ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgZm9yIGVhY2ggY2hpbGQgbm9kZS5cclxuICAgICAqIEBwYXJhbSB0aGlzQXJnICAtIE9wdGlvbmFsIHZhbHVlIHRvIHVzZSBhcyBgdGhpc2Agd2hlbiBleGVjdXRpbmcgYGNhbGxiYWNrYC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGZvckVhY2hDaGlsZChjYWxsYmFjazogKG5vZGU6IFNjZW5lTm9kZTxUPiwgaW5kZXg6IG51bWJlcikgPT4gdm9pZCwgdGhpc0FyZzogYW55ID0gdGhpcyk6IHRoaXMge1xyXG4gICAgICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV4dCA9IG5vZGUubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgbm9kZSwgaW5kZXgrKyk7XHJcbiAgICAgICAgICAgIG5vZGUgPSBuZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0ZXJhdGVzIG92ZXIgYWxsIGRlc2NlbmRhbnQgbm9kZXMgYW5kIGNhbGxzIHRoZSBnaXZlbiBjYWxsYmFjayB3aXRoIHRoZSBjdXJyZW50bHkgaXRlcmF0ZWQgbm9kZSBhcyBwYXJhbWV0ZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgZm9yIGVhY2ggZGVzY2VuZGFudCBub2RlLlxyXG4gICAgICogQHBhcmFtIHRoaXNBcmcgIC0gT3B0aW9uYWwgdmFsdWUgdG8gdXNlIGFzIGB0aGlzYCB3aGVuIGV4ZWN1dGluZyBgY2FsbGJhY2tgLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZm9yRWFjaERlc2NlbmRhbnQoY2FsbGJhY2s6IChub2RlOiBTY2VuZU5vZGU8VD4pID0+IHZvaWQsIHRoaXNBcmc6IGFueSA9IHRoaXMpOiB0aGlzIHtcclxuICAgICAgICBsZXQgbm9kZSA9IHRoaXMuZmlyc3RDaGlsZDtcclxuICAgICAgICB3aGlsZSAobm9kZSAhPSBudWxsICYmIG5vZGUgIT09IHRoaXMpIHtcclxuICAgICAgICAgICAgbGV0IG5leHQgPSBub2RlLmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgICAgIGlmIChuZXh0ID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIG5leHQgPSBub2RlLm5leHRTaWJsaW5nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChuZXh0ID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIG5leHQgPSBub2RlLnBhcmVudD8ubmV4dFNpYmxpbmcgPz8gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIG5vZGUpO1xyXG4gICAgICAgICAgICBub2RlID0gbmV4dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBub2RlIGZvciB3aGljaCB0aGUgZ2l2ZW4gY2FsbGJhY2sgcmV0dXJucyB0cnVlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB3aGljaCBjaGVja3MgaWYgdGhlIGl0ZXJhdGVkIG5vZGUgaXMgdGhlIG9uZSB0byBsb29rIGZvci5cclxuICAgICAqIEByZXR1cm4gVGhlIGZvdW5kIG1hdGNoaW5nIGNoaWxkIG5vZGUgb3IgbnVsbCBpZiBub25lLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmluZENoaWxkKGNhbGxiYWNrOiAobm9kZTogU2NlbmVOb2RlPFQ+LCBpbmRleDogbnVtYmVyKSA9PiBib29sZWFuLCB0aGlzQXJnOiB1bmtub3duID0gdGhpcyk6XHJcbiAgICAgICAgICAgIFNjZW5lTm9kZTxUPiB8IG51bGwge1xyXG4gICAgICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgd2hpbGUgKG5vZGUpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV4dCA9IG5vZGUubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgIGlmIChjYWxsYmFjay5jYWxsKHRoaXNBcmcsIG5vZGUsIGluZGV4KyspKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBub2RlID0gbmV4dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBkZXNjZW5kYW50IG5vZGUgZm9yIHdoaWNoIHRoZSBnaXZlbiBjYWxsYmFjayByZXR1cm5zIHRydWUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHdoaWNoIGNoZWNrcyBpZiB0aGUgaXRlcmF0ZWQgbm9kZSBpcyB0aGUgb25lIHRvIGxvb2sgZm9yLlxyXG4gICAgICogQHJldHVybiBUaGUgZm91bmQgbWF0Y2hpbmcgZGVzY2VuZGFudCBub2RlIG9yIG51bGwgaWYgbm9uZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGZpbmREZXNjZW5kYW50KGNhbGxiYWNrOiAobm9kZTogU2NlbmVOb2RlPFQ+KSA9PiBib29sZWFuLCB0aGlzQXJnOiB1bmtub3duID0gdGhpcyk6XHJcbiAgICAgICAgICAgIFNjZW5lTm9kZTxUPiB8IG51bGwge1xyXG4gICAgICAgICAgICAgICAgbGV0IG5vZGUgPSB0aGlzLmZpcnN0Q2hpbGQ7XHJcbiAgICAgICAgd2hpbGUgKG5vZGUgIT0gbnVsbCAmJiBub2RlICE9PSB0aGlzKSB7XHJcbiAgICAgICAgICAgIGxldCBuZXh0ID0gbm9kZS5maXJzdENoaWxkO1xyXG4gICAgICAgICAgICBpZiAobmV4dCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBuZXh0ID0gbm9kZS5uZXh0U2libGluZztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobmV4dCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBuZXh0ID0gbm9kZS5wYXJlbnQ/Lm5leHRTaWJsaW5nID8/IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrLmNhbGwodGhpc0FyZywgbm9kZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBub2RlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG5vZGUgPSBuZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlc3RzIHdoZXRoZXIgYXQgbGVhc3Qgb25lIGNoaWxkIG5vZGUgcGFzc2VzIHRoZSB0ZXN0IGltcGxlbWVudGVkIGJ5IHRoZSBwcm92aWRlZCBmdW5jdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCBmb3IgZWFjaCBjaGlsZCBub2RlIHJldHVybmluZyBhIGJvb2xlYW4uXHJcbiAgICAgKiBAcGFyYW0gdGhpc0FyZyAgLSBPcHRpb25hbCB2YWx1ZSB0byB1c2UgYXMgYHRoaXNgIHdoZW4gZXhlY3V0aW5nIGBjYWxsYmFja2AuXHJcbiAgICAgKiBAcmV0dXJuIFRydWUgaWYgYXQgbGVhc3Qgb25lIGNoaWxkIG5vZGUgcmV0dXJuZWQgdHJ1ZSBpbiB0aGUgZ2l2ZW4gY2FsbGJhY2ssIGZhbHNlIGlmIG5vbmUgZGlkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc29tZUNoaWxkcmVuKGNhbGxiYWNrOiAobm9kZTogU2NlbmVOb2RlPFQ+LCBpbmRleDogbnVtYmVyKSA9PiBib29sZWFuLCB0aGlzQXJnOiBhbnkgPSB0aGlzKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcclxuICAgICAgICBsZXQgbm9kZSA9IHRoaXMuZmlyc3RDaGlsZDtcclxuICAgICAgICB3aGlsZSAobm9kZSkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gbm9kZS5uZXh0U2libGluZztcclxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrLmNhbGwodGhpc0FyZywgbm9kZSwgaW5kZXgrKykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG5vZGUgPSBuZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgbmV3IGFycmF5IHdpdGggYWxsIGNoaWxkIG5vZGVzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gQWxsIGNoaWxkIG5vZGVzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0Q2hpbGRyZW4oKTogU2NlbmVOb2RlPFQ+W10ge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuOiBTY2VuZU5vZGU8VD5bXSA9IFtdO1xyXG4gICAgICAgIGxldCBub2RlID0gdGhpcy5maXJzdENoaWxkO1xyXG4gICAgICAgIHdoaWxlIChub2RlKSB7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2gobm9kZSk7XHJcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2hpbGRyZW47XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBkZXNjZW5kYW50IG5vZGUgd2l0aCB0aGUgZ2l2ZW4gaWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGlkIC0gVGhlIElEIHRvIGxvb2sgZm9yLlxyXG4gICAgICogQHJldHVybiBUaGUgbWF0Y2hpbmcgZGVzY2VuZGFudCBub2RlIG9yIG51bGwgaWYgbm9uZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldERlc2NlbmRhbnRCeUlkKGlkOiBzdHJpbmcpOiBTY2VuZU5vZGU8VD4gfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5maW5kRGVzY2VuZGFudChub2RlID0+IG5vZGUuZ2V0SWQoKSA9PT0gaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW52YWxpZGF0ZXMgdGhlIGJvdW5kcyBvZiB0aGUgbm9kZS4gQVV0b21hdGljYWxseSBjYWxsZWQgd2hlbiBub2RlIHNpemUgaXMgY2hhbmdlZC4gTXVzdCBiZSBjYWxsZWQgbWFudWFsbHlcclxuICAgICAqIHdoZW4gc29tZSBvdGhlciBhc3BlY3Qgb2YgdGhlIG5vZGUgd2hpY2ggbWF5IGluZmx1ZW5jZSB0aGUgYm91bmRzIGlzIGNoYW5nZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpbnZhbGlkYXRlQm91bmRzKCk6IHRoaXMge1xyXG4gICAgICAgIHRoaXMuYm91bmRzUG9seWdvbi5jbGVhcigpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgYm91bmRzIHBvbHlnb24gb2YgdGhlIG5vZGUuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHNpbXBseSBzZXRzIGEgYm91bmRpbmcgYm94LiBTcGVjaWFsaXplZCBub2Rlc1xyXG4gICAgICogY2FuIG92ZXJ3cml0ZSB0aGlzIG1ldGhvZCB0byBkZWZpbmUgYSBtb3JlIHNwZWNpZmljIHBvbHlnb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGJvdW5kcyAtIFRoZSBlbXB0eSBib3VuZHMgcG9seWdvbiB0byBiZSBmaWxsZWQgd2l0aCBwb2ludHMgYnkgdGhpcyBtZXRob2QuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB1cGRhdGVCb3VuZHNQb2x5Z29uKGJvdW5kczogUG9seWdvbjIpOiB2b2lkIHtcclxuICAgICAgICBib3VuZHMuYWRkVmVydGV4KG5ldyBWZWN0b3IyKDAsIDApKTtcclxuICAgICAgICBib3VuZHMuYWRkVmVydGV4KG5ldyBWZWN0b3IyKHRoaXMud2lkdGgsIDApKTtcclxuICAgICAgICBib3VuZHMuYWRkVmVydGV4KG5ldyBWZWN0b3IyKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KSk7XHJcbiAgICAgICAgYm91bmRzLmFkZFZlcnRleChuZXcgVmVjdG9yMigwLCB0aGlzLmhlaWdodCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgYm91bmRzIHBvbHlnb24gb2YgdGhlIG5vZGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBUaGUgYm91bmRzIHBvbHlnb24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRCb3VuZHNQb2x5Z29uKCk6IFBvbHlnb24yIHtcclxuICAgICAgICBpZiAoIXRoaXMuYm91bmRzUG9seWdvbi5oYXNWZXJ0aWNlcygpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQm91bmRzUG9seWdvbih0aGlzLmJvdW5kc1BvbHlnb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5ib3VuZHNQb2x5Z29uO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFya3MgdGhpcyBub2RlLCBhbGwgcGFyZW50IG5vZGVzIGFuZCB0aGUgc2NlbmUgYXMgaW52YWxpZCB0byB0cmlnZ2VyIGEgc2NlbmUgcmV2YWxpZGF0aW9uLiBUaGlzIG11c3QgYmVcclxuICAgICAqIGNhbGxlZCBldmVyeSB0aW1lIHdoZW4gc29tZSBhc3BlY3Qgb2YgdGhlIG5vZGUgaXMgY2hhbmdlZCB3aGljaCByZXF1aXJlcyBhIHJlZHJhdyBvZiB0aGUgc2NlbmUgbm9kZS5cclxuICAgICAqXHJcbiAgICAgKiBUT0RPIE5vdCB5ZXQgaW1wbGVtZW50ZWQsIGN1cnJlbnRseSB0aGUgc2NlbmUgaXMgY29uc3RhbnRseSByZWRyYXduLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaW52YWxpZGF0ZSgpOiB0aGlzIHtcclxuICAgICAgICAvKlxyXG4gICAgICAgIGlmICh0aGlzLnZhbGlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5pbnZhbGlkYXRlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zY2VuZSkge1xyXG4gICAgICAgICAgICAgICAgdm9pZCB0aGlzLnNjZW5lLmludmFsaWRhdGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAqL1xyXG4gICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgbmV3IGFuaW1hdGlvbiB0byB0aGUgc2NlbmUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGFuaW1hdGlvbkFyZ3MgLSBUaGUgYXJndW1lbnRzIGRlZmluaW5nIHRoZSBhbmltYXRpb24gdG8gYWRkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYW5pbWF0ZShhbmltYXRpb25BcmdzOiBBbmltYXRpb25BcmdzPFQ+KTogdGhpcyB7XHJcbiAgICAgICAgdGhpcy5hbmltYXRpb25zLnB1c2gobmV3IFNjZW5lTm9kZUFuaW1hdGlvbih0aGlzLCBhbmltYXRpb25BcmdzKSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5pc2hlcyBhbGwgY3VycmVudGx5IHJ1bm5pbmcgYW5pbWF0aW9ucy4gVGhpcyBjYWxscyBhbGwgYW5pbWF0b3IgZnVuY3Rpb25zIHdpdGggdGhlaXIgbGFzdCBhbmltYXRpb24gaW5kZXhcclxuICAgICAqICgxLjApIGFuZCB0aGVuIHJlbW92ZXMgdGhlIGFuaW1hdGlvbnMuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBmaW5pc2hBbmltYXRpb25zKCk6IHRoaXMge1xyXG4gICAgICAgIGZvciAoY29uc3QgYW5pbWF0aW9uIG9mIHRoaXMuYW5pbWF0aW9ucykge1xyXG4gICAgICAgICAgICBhbmltYXRpb24uZmluaXNoKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmZvckVhY2hDaGlsZChjaGlsZCA9PiBjaGlsZC5maW5pc2hBbmltYXRpb25zKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIG5vZGUgaGFzIHJ1bm5pbmcgYW5pbWF0aW9ucy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFRydWUgaWYgbm9kZSBoYXMgYW5pbWF0aW9ucywgZmFsc2UgaWYgbm90LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGFzQW5pbWF0aW9ucygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hbmltYXRpb25zLmxlbmd0aCA+IDAgfHwgdGhpcy5zb21lQ2hpbGRyZW4oY2hpbGQgPT4gY2hpbGQuaGFzQW5pbWF0aW9ucygpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgc2hvd2luZyBub2RlIGJvdW5kcy4gVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHNob3dCb3VuZHMgLSBUcnVlIHRvIGVuYWJsZSBzaG93aW5nIG5vZGUgYm91bmRzLCBmYWxzZSB0byBkaXNhYmxlIGl0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0U2hvd0JvdW5kcyhzaG93Qm91bmRzOiBib29sZWFuKTogdGhpcyB7XHJcbiAgICAgICAgaWYoc2hvd0JvdW5kcyAhPT0gdGhpcy5zaG93Qm91bmRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0JvdW5kcyA9IHNob3dCb3VuZHM7XHJcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiBub2RlIGJvdW5kcyBhcmUgY3VycmVudGx5IHNob3duIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBUcnVlIGlmIG5vZGUgYm91bmRzIGFyZSBzaG93biwgZmFsc2UgaWYgbm90LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaXNTaG93Qm91bmRzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNob3dCb3VuZHM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBsYXllciBvZiB0aGlzIG5vZGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBUaGUgbm9kZSdzIGxheWVyICgwLTMxKS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldExheWVyKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGgubG9nMih0aGlzLmxheWVyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGxheWVyIHRoaXMgbm9kZSBzaG91bGQgYXBwZWFyIG9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBsYXllciAtIFRoZSBsYXllciB0byBzZXQgKDAtMzEpLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0TGF5ZXIobGF5ZXI6IG51bWJlcik6IHRoaXMge1xyXG4gICAgICAgIGlmIChsYXllciA8IDAgfHwgbGF5ZXIgPiAzMSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFZhbGlkIGxheWVyIHJhbmdlIGlzIDAtMzEgYnV0IHdhcyAke2xheWVyfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsYXllciA9IDEgPDwgbGF5ZXI7XHJcbiAgICAgICAgaWYgKGxheWVyICE9PSB0aGlzLmxheWVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGF5ZXIgPSBsYXllcjtcclxuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgYW5pbWF0aW9ucyBhbmQgcmVtb3ZlcyBmaW5pc2hlZCBhbmltYXRpb25zLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHVwZGF0ZUFuaW1hdGlvbnMoZHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGFuaW1hdGlvbnMgPSB0aGlzLmFuaW1hdGlvbnM7XHJcbiAgICAgICAgbGV0IG51bUFuaW1hdGlvbnMgPSBhbmltYXRpb25zLmxlbmd0aDtcclxuICAgICAgICBsZXQgaSA9IDA7XHJcbiAgICAgICAgd2hpbGUgKGkgPCBudW1BbmltYXRpb25zKSB7XHJcbiAgICAgICAgICAgIGlmIChhbmltYXRpb25zW2ldLnVwZGF0ZShkdCkpIHtcclxuICAgICAgICAgICAgICAgIGFuaW1hdGlvbnMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgbnVtQW5pbWF0aW9ucy0tO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGlzIG5vZGUgYW5kIGl0cyBjaGlsZCBub2RlcyByZWN1cnNpdmVseS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZHQgLSBUaGUgdGltZSBpbiBzZWNvbmRzIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS5cclxuICAgICAqIEByZXR1cm4gQml0IG1hc2sgd2l0aCB1c2VkIGxheWVycy5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUFsbChkdDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICAvLyBVcGRhdGUgdGhpcyBub2RlIGFuZCBydW4gYW5pbWF0aW9uc1xyXG4gICAgICAgIGNvbnN0IHBvc3RVcGRhdGUgPSB0aGlzLnVwZGF0ZShkdCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVBbmltYXRpb25zKGR0KTtcclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBzY2VuZSB0cmFuc2Zvcm1hdGlvbiBmb3IgdGhpcyBub2RlXHJcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XHJcbiAgICAgICAgaWYgKHBhcmVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmVUcmFuc2Zvcm1hdGlvbi5zZXRNYXRyaXgocGFyZW50LnNjZW5lVHJhbnNmb3JtYXRpb24pO1xyXG4gICAgICAgICAgICB0aGlzLnNjZW5lVHJhbnNmb3JtYXRpb24udHJhbnNsYXRlKFxyXG4gICAgICAgICAgICAgICAgKERpcmVjdGlvbi5nZXRYKHBhcmVudC5jaGlsZEFuY2hvcikgKyAxKSAvIDIgKiBwYXJlbnQud2lkdGgsXHJcbiAgICAgICAgICAgICAgICAoRGlyZWN0aW9uLmdldFkocGFyZW50LmNoaWxkQW5jaG9yKSArIDEpIC8gMiAqIHBhcmVudC5oZWlnaHRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjZW5lVHJhbnNmb3JtYXRpb24ucmVzZXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zY2VuZVRyYW5zZm9ybWF0aW9uLnRyYW5zbGF0ZSh0aGlzLngsIHRoaXMueSk7XHJcbiAgICAgICAgdGhpcy5zY2VuZVRyYW5zZm9ybWF0aW9uLm11bCh0aGlzLnRyYW5zZm9ybWF0aW9uKTtcclxuICAgICAgICB0aGlzLnNjZW5lVHJhbnNmb3JtYXRpb24udHJhbnNsYXRlKFxyXG4gICAgICAgICAgICAtKERpcmVjdGlvbi5nZXRYKHRoaXMuYW5jaG9yKSArIDEpIC8gMiAqIHRoaXMud2lkdGgsXHJcbiAgICAgICAgICAgIC0oRGlyZWN0aW9uLmdldFkodGhpcy5hbmNob3IpICsgMSkgLyAyICogdGhpcy5oZWlnaHRcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgY2hpbGQgbm9kZXNcclxuICAgICAgICBjb25zdCBsYXllcnMgPSB0aGlzLnVwZGF0ZUNoaWxkcmVuKGR0KSB8IHRoaXMubGF5ZXI7XHJcblxyXG4gICAgICAgIC8vIFdoZW4gdXBkYXRlIG1ldGhvZCByZXR1cm5lZCBhIHBvc3QtdXBkYXRlIGZ1bmN0aW9uIHRoZW4gY2FsbCBpdCBub3dcclxuICAgICAgICBpZiAocG9zdFVwZGF0ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHBvc3RVcGRhdGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBsYXllcnM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGUgcmVjdXJzaXZlbHkuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGR0IC0gVGhlIHRpbWUgaW4gc2Vjb25kcyBzaW5jZSB0aGUgbGFzdCB1cGRhdGUuXHJcbiAgICAgKiBAcmV0dXJuIEJpdCBtYXNrIHdpdGggdXNlZCBsYXllcnMuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB1cGRhdGVDaGlsZHJlbihkdDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgbGF5ZXJzID0gMDtcclxuICAgICAgICB0aGlzLmZvckVhY2hDaGlsZChjaGlsZCA9PiB7XHJcbiAgICAgICAgICAgIGxheWVycyB8PSBjaGlsZC51cGRhdGVBbGwoZHQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBsYXllcnM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHRoaXMgbm9kZS4gVGhpcyBpcyBkb25lIGJlZm9yZSB1cGRhdGluZyB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlLiBUaGUgbWV0aG9kIGNhbiByZXR1cm4gYW4gb3B0aW9uYWxcclxuICAgICAqIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBhZnRlciB0aGUgY2hpbGQgbm9kZXMgYXJlIHVwZGF0ZWQgc28gdGhpcyBjYW4gYmUgdXNlZCBmb3IgcG9zdC11cGRhdGluZyBvcGVyYXRpb25zLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBkdCAtIFRoZSB0aW1lIGluIHNlY29uZHMgc2luY2UgdGhlIGxhc3QgdXBkYXRlLlxyXG4gICAgICogQHJldHVybiBPcHRpb25hbCBwb3N0LXVwZGF0ZSBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgdXBkYXRpbmcgdGhlIGNoaWxkIG5vZGVzLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlKGR0OiBudW1iZXIpOiB2b2lkIHwgKCgpID0+IHZvaWQpIHt9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWN1cnNpdmVseSBkcmF3cyB0aGUgYm91bmRzIGZvciB0aGlzIG5vZGUgYW5kIGFsbHMgaXRzIGNoaWxkIG5vZGVzIGFzIGxvbmcgYXMgdGhlIFtbc2hvd0JvdW5kc11dIGZvciB0aGUgbm9kZVxyXG4gICAgICogaXMgc2V0IHRvIHRydWUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGN0eCAtIFRoZSByZW5kZXJpbmcgY29udGV4dC5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGRyYXdCb3VuZHMoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOiB0aGlzIHtcclxuICAgICAgICBpZiAodGhpcy5zaG93Qm91bmRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuZ2V0Qm91bmRzUG9seWdvbigpO1xyXG4gICAgICAgICAgICBjdHguc2F2ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnNjZW5lVHJhbnNmb3JtYXRpb24uc2V0Q2FudmFzVHJhbnNmb3JtKGN0eCk7XHJcbiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuICAgICAgICAgICAgYm91bmRzLmRyYXcoY3R4KTtcclxuICAgICAgICAgICAgY3R4LmNsaXAoKTtcclxuICAgICAgICAgICAgY3R4LnNhdmUoKTtcclxuICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IDI7XHJcbiAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IFwicmVkXCI7XHJcbiAgICAgICAgICAgIGN0eC5zdHJva2UoKTtcclxuICAgICAgICAgICAgY3R4LnNldExpbmVEYXNoKFs0LCA0XSk7XHJcbiAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IFwid2hpdGVcIjtcclxuICAgICAgICAgICAgY3R4LmxpbmVEYXNoT2Zmc2V0ID0gTWF0aC5yb3VuZChEYXRlLm5vdygpIC8gMTAwKSAlIDg7XHJcbiAgICAgICAgICAgIGN0eC5zdHJva2UoKTtcclxuICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcclxuICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9yRWFjaENoaWxkKGNoaWxkID0+IGNoaWxkLmRyYXdCb3VuZHMoY3R4KSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEcmF3cyB0aGlzIHNjZW5lIG5vZGUgYW5kIGl0cyBjaGlsZCBub2RlcyByZWN1cnNpdmVseVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjdHggICAgLSBUaGUgcmVuZGVyaW5nIGNvbnRleHQuXHJcbiAgICAgKiBAcGFyYW0gbGF5ZXIgIC0gVGhlIGxheWVyIHRvIHJlbmRlci4gTm9kZXMgd2hpY2ggZG9lc24ndCBiZWxvbmcgdG8gdGhpcyBsYXllciBhcmUgbm90IGRyYXduLlxyXG4gICAgICogQHBhcmFtIHdpZHRoICAtIFRoZSBzY2VuZSB3aWR0aC5cclxuICAgICAqIEBwYXJhbSBoZWlnaHQgLSBUaGUgc2NlbmUgaGVpZ2h0LlxyXG4gICAgICogQHJldHVybiBIaW50cyB3aGljaCBzdWdnZXN0cyBmdXJ0aGVyIGFjdGlvbnMgYWZ0ZXIgZHJhd2luZy5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGRyYXdBbGwoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIGxheWVyOiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogUG9zdERyYXdIaW50cyB7XHJcbiAgICAgICAgY3R4LnNhdmUoKTtcclxuICAgICAgICBjdHguZ2xvYmFsQWxwaGEgKj0gdGhpcy5nZXRFZmZlY3RpdmVPcGFjaXR5KCk7XHJcbiAgICAgICAgY3R4LnRyYW5zbGF0ZSh0aGlzLngsIHRoaXMueSk7XHJcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1hdGlvbi50cmFuc2Zvcm1DYW52YXMoY3R4KTtcclxuICAgICAgICBjdHgudHJhbnNsYXRlKFxyXG4gICAgICAgICAgICAtKERpcmVjdGlvbi5nZXRYKHRoaXMuYW5jaG9yKSArIDEpIC8gMiAqIHRoaXMud2lkdGgsXHJcbiAgICAgICAgICAgIC0oRGlyZWN0aW9uLmdldFkodGhpcy5hbmNob3IpICsgMSkgLyAyICogdGhpcy5oZWlnaHRcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHBvc3REcmF3ID0gbGF5ZXIgPT09IHRoaXMubGF5ZXIgPyB0aGlzLmRyYXcoY3R4LCB3aWR0aCwgaGVpZ2h0KSA6IG51bGw7XHJcbiAgICAgICAgY3R4LnNhdmUoKTtcclxuICAgICAgICBjdHgudHJhbnNsYXRlKFxyXG4gICAgICAgICAgICAoRGlyZWN0aW9uLmdldFgodGhpcy5jaGlsZEFuY2hvcikgKyAxKSAvIDIgKiB0aGlzLndpZHRoLFxyXG4gICAgICAgICAgICAoRGlyZWN0aW9uLmdldFkodGhpcy5jaGlsZEFuY2hvcikgKyAxKSAvIDIgKiB0aGlzLmhlaWdodFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IGZsYWdzID0gdGhpcy5kcmF3Q2hpbGRyZW4oY3R4LCBsYXllciwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcclxuICAgICAgICBpZiAocG9zdERyYXcgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAocG9zdERyYXcgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIGZsYWdzIHw9IFBvc3REcmF3SGludHMuQ09OVElOVUVfRFJBV0lORztcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChwb3N0RHJhdyAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHBvc3REcmF3KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5zaG93Qm91bmRzID8gZmxhZ3MgfCBQb3N0RHJhd0hpbnRzLkRSQVdfQk9VTkRTIHwgUG9zdERyYXdIaW50cy5DT05USU5VRV9EUkFXSU5HIDogZmxhZ3M7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEcmF3cyBhbGwgY2hpbGQgbm9kZXMgb2YgdGhpcyBzY2VuZSBub2RlIHJlY3Vyc2l2ZWx5LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjdHggICAgLSBUaGUgcmVuZGVyaW5nIGNvbnRleHQuXHJcbiAgICAgKiBAcGFyYW0gbGF5ZXIgIC0gVGhlIGxheWVyIHRvIHJlbmRlci4gTm9kZXMgd2hpY2ggZG9lc24ndCBiZWxvbmcgdG8gdGhpcyBsYXllciBhcmUgbm90IGRyYXduLlxyXG4gICAgICogQHBhcmFtIHdpZHRoICAtIFRoZSBzY2VuZSB3aWR0aC5cclxuICAgICAqIEBwYXJhbSBoZWlnaHQgLSBUaGUgc2NlbmUgaGVpZ2h0LlxyXG4gICAgICogQHJldHVybiBIaW50cyB3aGljaCBzdWdnZXN0cyBmdXJ0aGVyIGFjdGlvbnMgYWZ0ZXIgZHJhd2luZy5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGRyYXdDaGlsZHJlbihjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgbGF5ZXI6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOlxyXG4gICAgICAgICAgICBQb3N0RHJhd0hpbnRzIHtcclxuICAgICAgICBsZXQgZmxhZ3MgPSAwO1xyXG4gICAgICAgIHRoaXMuZm9yRWFjaENoaWxkKGNoaWxkID0+IHtcclxuICAgICAgICAgICAgZmxhZ3MgfD0gY2hpbGQuZHJhd0FsbChjdHgsIGxheWVyLCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gZmxhZ3M7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEcmF3cyB0aGlzIG5vZGUuIFRoaXMgaXMgZG9uZSBiZWZvcmUgZHJhd2luZyB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlLiBUaGUgbWV0aG9kIGNhbiByZXR1cm4gYSBib29sZWFuXHJcbiAgICAgKiB3aGljaCBpbmRpY2F0ZXMgaWYgdGhlIHNjZW5lIGlzIG5vdCBmaW5pc2hlZCB5ZXQgYW5kIG11c3QgYmUgZHJhd24gY29udGludW91c2x5IChmb3IgYW5pbWF0aW9ucyBmb3IgZXhhbXBsZSkuXHJcbiAgICAgKiBUaGUgbWV0aG9kIGNhbiBhbHNvIHJldHVybiBhbiBvcHRpb25hbCBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGNoaWxkIG5vZGVzIGFyZSBkcmF3biBzbyB0aGlzIGNhbiBiZVxyXG4gICAgICogdXNlZCBmb3IgcG9zdC1kcmF3aW5nIG9wZXJhdGlvbnMuIFRoaXMgcG9zdC1kcmF3IGZ1bmN0aW9uIHRoZW4gY2FuIGFnYWluIHJldHVybiBhbiBvcHRpb25hbCBib29sZWFuIHdoaWNoXHJcbiAgICAgKiBpbmRpY2F0ZXMgdGhhdCBzY2VuZSBtdXN0IGJlIGNvbnRpbnVvdXNseSBkcmF3IGl0c2VsZi5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY3R4ICAgIC0gVGhlIHJlbmRlcmluZyBjb250ZXh0LlxyXG4gICAgICogQHBhcmFtIHdpZHRoICAtIFRoZSBzY2VuZSB3aWR0aC5cclxuICAgICAqIEBwYXJhbSBoZWlnaHQgLSBUaGUgc2NlbmUgaGVpZ2h0LlxyXG4gICAgICogQHJldHVybiBPcHRpb25hbCBib29sZWFuIHRvIGluZGljYXRlIGlmIHNjZW5lIG11c3QgYmUgcmVkcmF3biBjb250aW51b3VzbHkgKERlZmF1bHRzIHRvIGZhbHNlKSBvciBhIHBvc3QtZHJhd1xyXG4gICAgICogICAgICAgICBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgZHJhd2luZyB0aGUgY2hpbGQgbm9kZXMgYW5kIHdoaWNoIGFnYWluIGNhbiByZXR1cm4gYSBmbGFnIGluZGljYXRpbmdcclxuICAgICAqICAgICAgICAgY29udGludW9zIHJlZHJhdy5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGRyYXcoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTpcclxuICAgICAgICB2b2lkIHwgYm9vbGVhbiB8ICgoKSA9PiB2b2lkIHwgYm9vbGVhbikge31cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7O0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFnREE7Ozs7O0FBS0E7QUFDQTtBQW9GQTs7QUFFQTtBQUNBO0FBdEZBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQThCQTs7O0FBR0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUVBOzs7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQXNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUFFQTtBQUNBO0FBRUE7O0FBRUE7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUtBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUtBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBS0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBS0E7QUFDQTtBQUNBOzs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7QUFNQTtBQUNBO0FBRUE7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7Ozs7O0FBUUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7Ozs7O0FBYUE7QUFDQTtBQUVBO0FBOWtDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/scene/SceneNode.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/scene/SceneNodeAnimation.js":
|
|
/*!*****************************************!*\
|
|
!*** ./lib/scene/SceneNodeAnimation.js ***!
|
|
\*****************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SceneNodeAnimation = void 0;\nconst easings_1 = __webpack_require__(/*! ../easings */ \"./lib/easings.js\");\n/**\n * Scene node animation. Instance is created internally within [[SceneNode]] when you call [[SceneNode.animate]].\n *\n * @param T - Optional owner game class.\n */\nclass SceneNodeAnimation {\n /**\n * Creates scene node animation for the given scene node and with the given animation arguments. You usually\n * don't create an instance of this class yourself. Instead you have to use the [[SceneNode.animate]] method.\n */\n constructor(sceneNode, { animator, delay = 0, duration = 1, easing = easings_1.linear }) {\n /** Time elapsed so far within the animation (including delay). */\n this.elapsed = 0;\n this.sceneNode = sceneNode;\n this.animator = animator;\n this.delay = delay;\n this.duration = duration;\n this.easing = easing;\n this.lifetime = delay + duration;\n }\n /**\n * Updates the animation.\n *\n * @param dt - The time in seconds since the last update.\n */\n update(dt) {\n this.elapsed += dt;\n if (this.elapsed < this.lifetime) {\n if (this.elapsed > this.delay) {\n const timeIndex = ((this.elapsed - this.delay) / this.duration) % 1;\n this.animator(this.sceneNode, this.easing(timeIndex), this.elapsed);\n }\n return false;\n }\n else {\n this.animator(this.sceneNode, 1, this.lifetime);\n return true;\n }\n }\n /**\n * Finishes the animation by fast-forwarding the animation index to the end of the animation lifetime.\n */\n finish() {\n this.elapsed = this.lifetime;\n }\n}\nexports.SceneNodeAnimation = SceneNodeAnimation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvc2NlbmUvU2NlbmVOb2RlQW5pbWF0aW9uLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL3NjZW5lL1NjZW5lTm9kZUFuaW1hdGlvbi50cz80NWI3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdhbWUgfSBmcm9tIFwiLi4vR2FtZVwiO1xyXG5pbXBvcnQgeyBTY2VuZU5vZGUgfSBmcm9tIFwiLi9TY2VuZU5vZGVcIjtcclxuaW1wb3J0IHsgbGluZWFyLCBFYXNpbmcgfSBmcm9tIFwiLi4vZWFzaW5nc1wiO1xyXG5cclxuLyoqXHJcbiAqIEZ1bmN0aW9uIHNpZ25hdHVyZSBmb3IgYSBzY2VuZSBub2RlIGFuaW1hdG9yLiBGdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgc2NlbmUgbm9kZSB0byBhbmltYXRlIGFzIGZpcnN0IHBhcmFtZXRlcixcclxuICogdGhlIGN1cnJlbnQgYW5pbWF0aW9uIHRpbWUgaW5kZXggKDAuMCAtIDEuMCkgYW5kIHRoZSBlbGFwc2VkIHRpbWUgaW4gc2Vjb25kcyBhcyB0aGlyZCBwYXJhbWV0ZXIuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBTY2VuZU5vZGVBbmltYXRvcjxUIGV4dGVuZHMgR2FtZSA9IEdhbWU+ID0gKHNjZW5lTm9kZTogU2NlbmVOb2RlPFQ+LCB2YWx1ZTogbnVtYmVyLFxyXG4gICAgZWxhcHNlZDogbnVtYmVyKSA9PiB2b2lkO1xyXG5cclxuLyoqXHJcbiAqIENvbnN0cnVjdG9yIGFyZ3VtZW50cyBmb3IgW1tTY2VuZU5vZGVBbmltYXRpb25dXVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBBbmltYXRpb25BcmdzPFQgZXh0ZW5kcyBHYW1lID0gR2FtZT4ge1xyXG4gICAgLyoqIFRoZSBhbmltYXRvciBmdW5jdGlvbi4gKi9cclxuICAgIGFuaW1hdG9yOiBTY2VuZU5vZGVBbmltYXRvcjxUPjtcclxuXHJcbiAgICAvKiogTnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdCB1bnRpbCBhbmltYXRpb25zIHN0YXJ0cy4gRGVmYXVsdHMgdG8gMC4gKi9cclxuICAgIGRlbGF5PzogbnVtYmVyO1xyXG5cclxuICAgIC8qKiBEdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uIGluIHNlY29uZHMuIERlZmF1bHRzIHRvIDEuICovXHJcbiAgICBkdXJhdGlvbj86IG51bWJlcjtcclxuXHJcbiAgICAvKiogVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2UuIERlZmF1bHRzIHRvIGxpbmVhci4gKi9cclxuICAgIGVhc2luZz86IEVhc2luZztcclxufVxyXG5cclxuLyoqXHJcbiAqIFNjZW5lIG5vZGUgYW5pbWF0aW9uLiBJbnN0YW5jZSBpcyBjcmVhdGVkIGludGVybmFsbHkgd2l0aGluIFtbU2NlbmVOb2RlXV0gd2hlbiB5b3UgY2FsbCBbW1NjZW5lTm9kZS5hbmltYXRlXV0uXHJcbiAqXHJcbiAqIEBwYXJhbSBUIC0gT3B0aW9uYWwgb3duZXIgZ2FtZSBjbGFzcy5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBTY2VuZU5vZGVBbmltYXRpb248VCBleHRlbmRzIEdhbWUgPSBHYW1lPiB7XHJcbiAgICAvKiogVGhlIHNjZW5lIG5vZGUgdG8gYW5pbWF0ZS4gKi9cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NlbmVOb2RlOiBTY2VuZU5vZGU8VD47XHJcblxyXG4gICAgLyoqIFRoZSBhbmltYXRvciBmdW5jdGlvbi4gKi9cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgYW5pbWF0b3I6IFNjZW5lTm9kZUFuaW1hdG9yPFQ+O1xyXG5cclxuICAgIC8qKiBUaGUgZGVsYXkgaW4gc2Vjb25kcyBiZWZvcmUgYWN0dWFsIGFuaW1hdGlvbiBzdGFydHMuICovXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlbGF5OiBudW1iZXI7XHJcblxyXG4gICAgLyoqIFRoZSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uIGluIHNlY29uZHMuICovXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGR1cmF0aW9uOiBudW1iZXI7XHJcblxyXG4gICAgLyoqIFRoZSB0b3RhbCBsaWZldGltZSBvZiB0aGUgYW5pbWF0aW9uIChkZWxheSArIGR1cmF0aW9uKS4gKi9cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGlmZXRpbWU6IG51bWJlcjtcclxuXHJcbiAgICAvKiogVGhlIGVhc2luZyBmdW5jdGlvbiB0byB1c2UgZm9yIGVhc2luZyB0aGUgYW5pbWF0aW9uLiAqL1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBlYXNpbmc6IEVhc2luZztcclxuXHJcbiAgICAvKiogVGltZSBlbGFwc2VkIHNvIGZhciB3aXRoaW4gdGhlIGFuaW1hdGlvbiAoaW5jbHVkaW5nIGRlbGF5KS4gKi9cclxuICAgIHByaXZhdGUgZWxhcHNlZDogbnVtYmVyID0gMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgc2NlbmUgbm9kZSBhbmltYXRpb24gZm9yIHRoZSBnaXZlbiBzY2VuZSBub2RlIGFuZCB3aXRoIHRoZSBnaXZlbiBhbmltYXRpb24gYXJndW1lbnRzLiBZb3UgdXN1YWxseVxyXG4gICAgICogZG9uJ3QgY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgeW91cnNlbGYuIEluc3RlYWQgeW91IGhhdmUgdG8gdXNlIHRoZSBbW1NjZW5lTm9kZS5hbmltYXRlXV0gbWV0aG9kLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3Ioc2NlbmVOb2RlOiBTY2VuZU5vZGU8VD4sIHsgYW5pbWF0b3IsIGRlbGF5ID0gMCwgZHVyYXRpb24gPSAxLCBlYXNpbmcgPSBsaW5lYXIgfTpcclxuICAgICAgICAgICAgQW5pbWF0aW9uQXJnczxUPikge1xyXG4gICAgICAgIHRoaXMuc2NlbmVOb2RlID0gc2NlbmVOb2RlO1xyXG4gICAgICAgIHRoaXMuYW5pbWF0b3IgPSBhbmltYXRvcjtcclxuICAgICAgICB0aGlzLmRlbGF5ID0gZGVsYXk7XHJcbiAgICAgICAgdGhpcy5kdXJhdGlvbiA9IGR1cmF0aW9uO1xyXG4gICAgICAgIHRoaXMuZWFzaW5nID0gZWFzaW5nO1xyXG4gICAgICAgIHRoaXMubGlmZXRpbWUgPSBkZWxheSArIGR1cmF0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgYW5pbWF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBkdCAtIFRoZSB0aW1lIGluIHNlY29uZHMgc2luY2UgdGhlIGxhc3QgdXBkYXRlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdXBkYXRlKGR0OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICB0aGlzLmVsYXBzZWQgKz0gZHQ7XHJcbiAgICAgICAgaWYgKHRoaXMuZWxhcHNlZCA8IHRoaXMubGlmZXRpbWUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZWxhcHNlZCA+IHRoaXMuZGVsYXkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVJbmRleCA9ICgodGhpcy5lbGFwc2VkIC0gdGhpcy5kZWxheSkgLyB0aGlzLmR1cmF0aW9uKSAlIDE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdG9yKHRoaXMuc2NlbmVOb2RlLCB0aGlzLmVhc2luZyh0aW1lSW5kZXgpLCB0aGlzLmVsYXBzZWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmFuaW1hdG9yKHRoaXMuc2NlbmVOb2RlLCAxLCB0aGlzLmxpZmV0aW1lKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluaXNoZXMgdGhlIGFuaW1hdGlvbiBieSBmYXN0LWZvcndhcmRpbmcgdGhlIGFuaW1hdGlvbiBpbmRleCB0byB0aGUgZW5kIG9mIHRoZSBhbmltYXRpb24gbGlmZXRpbWUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBmaW5pc2goKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5lbGFwc2VkID0gdGhpcy5saWZldGltZTtcclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7OztBQUVBO0FBMEJBOzs7O0FBSUE7QUFDQTtBQXNCQTs7O0FBR0E7QUFDQTtBQVBBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTdEQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/scene/SceneNodeAnimation.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/scene/TextNode.js":
|
|
/*!*******************************!*\
|
|
!*** ./lib/scene/TextNode.js ***!
|
|
\*******************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TextNode = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst SceneNode_1 = __webpack_require__(/*! ./SceneNode */ \"./lib/scene/SceneNode.js\");\n/**\n * Scene node for displaying a text with an optional icon left to it.\n *\n * @param T - Optional owner game class.\n */\nclass TextNode extends SceneNode_1.SceneNode {\n /**\n * Creates a new scene node displaying the given image.\n */\n constructor(_a) {\n var { font, text = \"\", color = \"white\", outlineColor = null } = _a, args = tslib_1.__rest(_a, [\"font\", \"text\", \"color\", \"outlineColor\"]);\n super(args);\n this.font = font;\n this.text = text;\n this.color = color;\n this.outlineColor = outlineColor;\n this.updateSize();\n }\n /**\n * Returns the displayed text.\n *\n * @return The displayed text.\n */\n getText() {\n return this.text;\n }\n /**\n * Sets the displayed text.\n *\n * @param text - The text to set.\n */\n setText(text) {\n if (text !== this.text) {\n this.text = text;\n this.updateSize();\n this.invalidate();\n }\n return this;\n }\n /**\n * Returns the bitmap font used to draw the text.\n *\n * @return The used bitmap font.\n */\n getFont() {\n return this.font;\n }\n /**\n * Sets the bitmap font used to draw the text.\n *\n * @param font - The bitmap font to use.\n */\n setFont(font) {\n if (font !== this.font) {\n this.font = font;\n this.updateSize();\n this.invalidate();\n }\n return this;\n }\n /**\n * Returns the text color.\n *\n * @return The text color.\n */\n getColor() {\n return this.color;\n }\n /**\n * Sets the text color.\n *\n * @param color - The text color to set.\n */\n setColor(color) {\n if (color !== this.color) {\n this.color = color;\n this.invalidate();\n }\n return this;\n }\n /**\n * Returns the text outline color. Null if none.\n *\n * @return The text outline color. Null if none.\n */\n getOutlineColor() {\n return this.outlineColor;\n }\n /**\n * Sets the text outline color.\n *\n * @param outlineColor - The text outline color to set.\n */\n setOutlineColor(outlineColor) {\n if (outlineColor !== this.outlineColor) {\n this.outlineColor = outlineColor;\n this.invalidate();\n }\n return this;\n }\n /**\n * Updates the node size according to the text measurements.\n */\n updateSize() {\n const size = this.font.measureText(this.text);\n this.resizeTo(size.width, size.height);\n }\n /** @inheritDoc */\n draw(ctx) {\n if (this.outlineColor != null) {\n this.font.drawTextWithOutline(ctx, this.text, 0, 0, this.color, this.outlineColor);\n }\n else {\n this.font.drawText(ctx, this.text, 0, 0, this.color);\n }\n }\n}\nexports.TextNode = TextNode;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvc2NlbmUvVGV4dE5vZGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvc2NlbmUvVGV4dE5vZGUudHM/YzM5ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHYW1lIH0gZnJvbSBcIi4uL0dhbWVcIjtcclxuaW1wb3J0IHsgU2NlbmVOb2RlLCBTY2VuZU5vZGVBcmdzIH0gZnJvbSBcIi4vU2NlbmVOb2RlXCI7XHJcbmltcG9ydCB7IEJpdG1hcEZvbnQgfSBmcm9tIFwiLi4vQml0bWFwRm9udFwiO1xyXG5cclxuLyoqXHJcbiAqIENvbnN0cnVjdG9yIGFyZ3VtZW50cyBmb3IgW1tUZXh0Tm9kZV1dLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBUZXh0Tm9kZUFyZ3MgZXh0ZW5kcyBTY2VuZU5vZGVBcmdzIHtcclxuICAgIC8qKiBUaGUgaW5pdGlhbCBmb250IHVzZWQgdG8gZHJhdyB0aGUgdGV4dC4gKi9cclxuICAgIGZvbnQ6IEJpdG1hcEZvbnQ7XHJcblxyXG4gICAgLyoqIE9wdGlvbmFsIGluaXRpYWwgdGV4dCB0byBkcmF3LiBEZWZhdWx0cyB0byBlbXB0eSBzdHJpbmcuICovXHJcbiAgICB0ZXh0Pzogc3RyaW5nO1xyXG5cclxuICAgIC8qKiBPcHRpb25hbCBpbml0aWFsIHRleHQgY29sb3IuIERlZmF1bHRzIHRvIFwid2hpdGVcIi4gKi9cclxuICAgIGNvbG9yPzogc3RyaW5nO1xyXG5cclxuICAgIC8qKiBPcHRpb25hbCBpbml0aWFsIG91dGxpbmUgdGV4dCBjb2xvci4gRGVmYXVsdCBpcyBudWxsIHdoaWNoIG1lYW5zIG5vIG91dGxpbmUgaXMgZHJhd24uICovXHJcbiAgICBvdXRsaW5lQ29sb3I/OiBzdHJpbmcgfCBudWxsO1xyXG59XHJcblxyXG4vKipcclxuICogU2NlbmUgbm9kZSBmb3IgZGlzcGxheWluZyBhIHRleHQgd2l0aCBhbiBvcHRpb25hbCBpY29uIGxlZnQgdG8gaXQuXHJcbiAqXHJcbiAqIEBwYXJhbSBUIC0gT3B0aW9uYWwgb3duZXIgZ2FtZSBjbGFzcy5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBUZXh0Tm9kZTxUIGV4dGVuZHMgR2FtZSA9IEdhbWU+IGV4dGVuZHMgU2NlbmVOb2RlPFQ+IHtcclxuICAgIC8qKiBUaGUgZm9udCB1c2VkIHRvIGRyYXcgdGhlIHRleHQuICovXHJcbiAgICBwcml2YXRlIGZvbnQ6IEJpdG1hcEZvbnQ7XHJcblxyXG4gICAgLyoqIFRoZSB0ZXh0IHRvIGRyYXcuICovXHJcbiAgICBwcml2YXRlIHRleHQ6IHN0cmluZztcclxuXHJcbiAgICAvKiogVGhlIHRleHQgY29sb3IuICovXHJcbiAgICBwcml2YXRlIGNvbG9yOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqIE9wdGlvbmFsIG91dGxpbmUgY29sb3IuICovXHJcbiAgICBwcml2YXRlIG91dGxpbmVDb2xvcjogc3RyaW5nIHwgbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgc2NlbmUgbm9kZSBkaXNwbGF5aW5nIHRoZSBnaXZlbiBpbWFnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHsgZm9udCwgdGV4dCA9IFwiXCIsIGNvbG9yID0gXCJ3aGl0ZVwiLCBvdXRsaW5lQ29sb3IgPSBudWxsLCAuLi5hcmdzIH0gOiBUZXh0Tm9kZUFyZ3MpIHtcclxuICAgICAgICBzdXBlcihhcmdzKTtcclxuICAgICAgICB0aGlzLmZvbnQgPSBmb250O1xyXG4gICAgICAgIHRoaXMudGV4dCA9IHRleHQ7XHJcbiAgICAgICAgdGhpcy5jb2xvciA9IGNvbG9yO1xyXG4gICAgICAgIHRoaXMub3V0bGluZUNvbG9yID0gb3V0bGluZUNvbG9yO1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2l6ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgZGlzcGxheWVkIHRleHQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBUaGUgZGlzcGxheWVkIHRleHQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGRpc3BsYXllZCB0ZXh0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gc2V0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0VGV4dCh0ZXh0OiBzdHJpbmcpOiB0aGlzIHtcclxuICAgICAgICBpZiAodGV4dCAhPT0gdGhpcy50ZXh0KSB7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dCA9IHRleHQ7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2l6ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmludmFsaWRhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBiaXRtYXAgZm9udCB1c2VkIHRvIGRyYXcgdGhlIHRleHQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBUaGUgdXNlZCBiaXRtYXAgZm9udC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEZvbnQoKTogQml0bWFwRm9udCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9udDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGJpdG1hcCBmb250IHVzZWQgdG8gZHJhdyB0aGUgdGV4dC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZm9udCAtIFRoZSBiaXRtYXAgZm9udCB0byB1c2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRGb250KGZvbnQ6IEJpdG1hcEZvbnQpOiB0aGlzIHtcclxuICAgICAgICBpZiAoZm9udCAhPT0gdGhpcy5mb250KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9udCA9IGZvbnQ7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2l6ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmludmFsaWRhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB0ZXh0IGNvbG9yLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gVGhlIHRleHQgY29sb3IuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDb2xvcigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbG9yO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdGV4dCBjb2xvci5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29sb3IgLSBUaGUgdGV4dCBjb2xvciB0byBzZXQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRDb2xvcihjb2xvcjogc3RyaW5nKTogdGhpcyB7XHJcbiAgICAgICAgaWYgKGNvbG9yICE9PSB0aGlzLmNvbG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sb3IgPSBjb2xvcjtcclxuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdGV4dCBvdXRsaW5lIGNvbG9yLiBOdWxsIGlmIG5vbmUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBUaGUgdGV4dCBvdXRsaW5lIGNvbG9yLiBOdWxsIGlmIG5vbmUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRPdXRsaW5lQ29sb3IoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3V0bGluZUNvbG9yO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdGV4dCBvdXRsaW5lIGNvbG9yLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvdXRsaW5lQ29sb3IgLSBUaGUgdGV4dCBvdXRsaW5lIGNvbG9yIHRvIHNldC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldE91dGxpbmVDb2xvcihvdXRsaW5lQ29sb3I6IHN0cmluZyB8IG51bGwpOiB0aGlzIHtcclxuICAgICAgICBpZiAob3V0bGluZUNvbG9yICE9PSB0aGlzLm91dGxpbmVDb2xvcikge1xyXG4gICAgICAgICAgICB0aGlzLm91dGxpbmVDb2xvciA9IG91dGxpbmVDb2xvcjtcclxuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgbm9kZSBzaXplIGFjY29yZGluZyB0byB0aGUgdGV4dCBtZWFzdXJlbWVudHMuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdXBkYXRlU2l6ZSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5mb250Lm1lYXN1cmVUZXh0KHRoaXMudGV4dCk7XHJcbiAgICAgICAgdGhpcy5yZXNpemVUbyhzaXplLndpZHRoLCBzaXplLmhlaWdodCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpbmhlcml0RG9jICovXHJcbiAgICBwdWJsaWMgZHJhdyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLm91dGxpbmVDb2xvciAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9udC5kcmF3VGV4dFdpdGhPdXRsaW5lKGN0eCwgdGhpcy50ZXh0LCAwLCAwLCB0aGlzLmNvbG9yLCB0aGlzLm91dGxpbmVDb2xvcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mb250LmRyYXdUZXh0KGN0eCwgdGhpcy50ZXh0LCAwLCAwLCB0aGlzLmNvbG9yKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQ0E7QUFvQkE7Ozs7QUFJQTtBQUNBO0FBYUE7O0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW5JQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/scene/TextNode.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/scenes/CharacterSelectionScene.js":
|
|
/*!***********************************************!*\
|
|
!*** ./lib/scenes/CharacterSelectionScene.js ***!
|
|
\***********************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CharacterSelectionScene = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst BitmapFont_1 = __webpack_require__(/*! ../BitmapFont */ \"./lib/BitmapFont.js\");\nconst Campaign_1 = __webpack_require__(/*! ../Campaign */ \"./lib/Campaign.js\");\nconst ControllerFamily_1 = __webpack_require__(/*! ../input/ControllerFamily */ \"./lib/input/ControllerFamily.js\");\nconst constants_1 = __webpack_require__(/*! ../constants */ \"./lib/constants.js\");\nconst easings_1 = __webpack_require__(/*! ../easings */ \"./lib/easings.js\");\nconst GameScene_1 = __webpack_require__(/*! ./GameScene */ \"./lib/scenes/GameScene.js\");\nconst Menu_1 = __webpack_require__(/*! ../Menu */ \"./lib/Menu.js\");\nconst Scene_1 = __webpack_require__(/*! ../Scene */ \"./lib/Scene.js\");\nconst SlideTransition_1 = __webpack_require__(/*! ../transitions/SlideTransition */ \"./lib/transitions/SlideTransition.js\");\nconst TitleScene_1 = __webpack_require__(/*! ./TitleScene */ \"./lib/scenes/TitleScene.js\");\nconst ImageNode_1 = __webpack_require__(/*! ../scene/ImageNode */ \"./lib/scene/ImageNode.js\");\nconst Direction_1 = __webpack_require__(/*! ../geom/Direction */ \"./lib/geom/Direction.js\");\nconst TextNode_1 = __webpack_require__(/*! ../scene/TextNode */ \"./lib/scene/TextNode.js\");\nconst ControlTooltipNode_1 = __webpack_require__(/*! ../scene/ControlTooltipNode */ \"./lib/scene/ControlTooltipNode.js\");\nconst AsepriteNode_1 = __webpack_require__(/*! ../scene/AsepriteNode */ \"./lib/scene/AsepriteNode.js\");\nvar MenuItemKey;\n(function (MenuItemKey) {\n MenuItemKey[\"CHARACTER\"] = \"character\";\n MenuItemKey[\"VOICE\"] = \"voice\";\n MenuItemKey[\"START\"] = \"start\";\n})(MenuItemKey || (MenuItemKey = {}));\nconst menuItemX = 12;\nconst characterMenuItemY = 20;\nconst voiceMenuItemY = 50;\nconst startMenuItemY = 124;\nconst selectionItemsYDistance = 12;\nconst selectionItemsXDistance = 12;\nclass CharacterSelectionScene extends Scene_1.Scene {\n activate() {\n this.input.onButtonDown.connect(this.handleButtonDown, this);\n this.menu.onActivated.connect(this.handleMenuAction, this);\n }\n deactivate() {\n this.input.onButtonDown.disconnect(this.handleButtonDown, this);\n this.menu.onActivated.disconnect(this.handleMenuAction, this);\n }\n handleMenuAction(buttonId) {\n return tslib_1.__awaiter(this, void 0, void 0, function* () {\n switch (buttonId) {\n case MenuItemKey.CHARACTER:\n this.game.campaign.toggleCharacterAsset();\n this.updateSelection();\n break;\n case MenuItemKey.VOICE:\n this.game.campaign.toggleVoiceAsset();\n this.updateSelection();\n CharacterSelectionScene.voices[this.game.campaign.selectedVoice].play();\n break;\n case MenuItemKey.START:\n yield this.game.scenes.popScene({ noTransition: false });\n TitleScene_1.TitleScene.music.stop();\n this.game.scenes.setScene(GameScene_1.GameScene);\n }\n });\n }\n handleButtonDown(event) {\n return tslib_1.__awaiter(this, void 0, void 0, function* () {\n if (event.isAbort) {\n this.scenes.popScene();\n }\n else if (event.isConfirm) {\n this.menu.executeAction();\n }\n else if (event.isMenuUp) {\n this.menu.prev();\n }\n else if (event.isMenuDown) {\n this.menu.next();\n }\n });\n }\n updateSelection() {\n if (this.game.campaign.selectedCharacter === Campaign_1.CharacterAsset.MALE) {\n this.variant1.setColor(\"grey\").setOutlineColor(null);\n this.variant2.setColor(\"white\").setOutlineColor(\"black\");\n }\n else {\n this.variant1.setColor(\"white\").setOutlineColor(\"black\");\n this.variant2.setColor(\"grey\").setOutlineColor(null);\n }\n if (this.game.campaign.selectedVoice === Campaign_1.VoiceAsset.MALE) {\n this.voice1.setColor(\"grey\").setOutlineColor(null);\n this.voice2.setColor(\"white\").setOutlineColor(\"black\");\n }\n else {\n this.voice1.setColor(\"white\").setOutlineColor(\"black\");\n this.voice2.setColor(\"grey\").setOutlineColor(null);\n }\n this.character.setAseprite(CharacterSelectionScene.playerSprites[this.game.campaign.selectedCharacter]);\n }\n setup() {\n this.setBackgroundStyle(\"rgba(0, 0, 0, 0.8)\");\n this.zIndex = 2;\n this.inTransition = new SlideTransition_1.SlideTransition({ duration: 0.5, direction: \"top\", easing: easings_1.easeOutCubic });\n this.outTransition = new SlideTransition_1.SlideTransition({ duration: 0.25 });\n const charSelectionTextY = characterMenuItemY + selectionItemsYDistance;\n const charSelectionTextX = menuItemX + selectionItemsXDistance;\n const charSelectionTextGap = 55;\n const voiceSelectionTextY = voiceMenuItemY + selectionItemsYDistance;\n const voiceSelectionTextX = menuItemX + selectionItemsXDistance;\n const voiceSelectionTextGap = 55;\n const character = this.game.campaign.selectedCharacter;\n const panel = new ImageNode_1.ImageNode({\n image: CharacterSelectionScene.panelImage,\n childAnchor: Direction_1.Direction.TOP_LEFT,\n x: this.game.width >> 1,\n y: (this.game.height >> 1) - 16\n }).appendChild(new TextNode_1.TextNode({\n font: CharacterSelectionScene.headlineFont,\n text: \"CHARACTER CUSTOMIZATION\",\n anchor: Direction_1.Direction.BOTTOM_LEFT,\n y: -5,\n color: \"white\"\n })).appendChild(this.variant1 = new TextNode_1.TextNode({\n font: CharacterSelectionScene.font,\n text: \"Variant 1\",\n anchor: Direction_1.Direction.TOP_LEFT,\n x: charSelectionTextX,\n y: charSelectionTextY,\n color: \"grey\"\n })).appendChild(this.variant2 = new TextNode_1.TextNode({\n font: CharacterSelectionScene.font,\n text: \"Variant 2\",\n anchor: Direction_1.Direction.TOP_LEFT,\n x: charSelectionTextX + charSelectionTextGap,\n y: charSelectionTextY,\n color: \"grey\"\n })).appendChild(this.voice1 = new TextNode_1.TextNode({\n font: CharacterSelectionScene.font,\n text: \"High Pitch\",\n anchor: Direction_1.Direction.TOP_LEFT,\n x: voiceSelectionTextX,\n y: voiceSelectionTextY,\n color: \"grey\"\n })).appendChild(this.voice2 = new TextNode_1.TextNode({\n font: CharacterSelectionScene.font,\n text: \"Low Pitch\",\n anchor: Direction_1.Direction.TOP_LEFT,\n x: voiceSelectionTextX + voiceSelectionTextGap,\n y: voiceSelectionTextY,\n color: \"grey\"\n })).appendChild(this.character = new AsepriteNode_1.AsepriteNode({\n aseprite: CharacterSelectionScene.playerSprites[character],\n tag: \"idle\",\n anchor: Direction_1.Direction.TOP_LEFT,\n x: 213,\n y: 46\n })).appendChild(new ControlTooltipNode_1.ControlTooltipNode({\n control: ControllerFamily_1.ControllerAnimationTags.CONFIRM,\n label: \"Select or Change\",\n anchor: Direction_1.Direction.TOP_LEFT,\n y: CharacterSelectionScene.panelImage.height + 2\n })).appendChild(new ControlTooltipNode_1.ControlTooltipNode({\n control: ControllerFamily_1.ControllerAnimationTags.BACK,\n label: \"Back\",\n anchor: Direction_1.Direction.TOP_LEFT,\n y: CharacterSelectionScene.panelImage.height + 18\n })).appendTo(this.rootNode);\n this.menu = new Menu_1.MenuList().setItems(new Menu_1.MenuItem(MenuItemKey.CHARACTER, \"Character:\", CharacterSelectionScene.font, \"black\", menuItemX, characterMenuItemY), new Menu_1.MenuItem(MenuItemKey.VOICE, \"Voice:\", CharacterSelectionScene.font, \"black\", menuItemX, voiceMenuItemY), new Menu_1.MenuItem(MenuItemKey.START, \"Start Game\", CharacterSelectionScene.font, \"black\", menuItemX, startMenuItemY)).appendTo(panel);\n this.updateSelection();\n }\n cleanup() {\n this.rootNode.clear();\n }\n}\ntslib_1.__decorate([\n Assets_1.asset(constants_1.DIALOG_FONT),\n tslib_1.__metadata(\"design:type\", BitmapFont_1.BitmapFont)\n], CharacterSelectionScene, \"font\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"fonts/credits.font.json\"),\n tslib_1.__metadata(\"design:type\", BitmapFont_1.BitmapFont)\n], CharacterSelectionScene, \"headlineFont\", void 0);\ntslib_1.__decorate([\n Assets_1.asset([\n \"sprites/pc/female.aseprite.json\",\n \"sprites/pc/male.aseprite.json\"\n ]),\n tslib_1.__metadata(\"design:type\", Array)\n], CharacterSelectionScene, \"playerSprites\", void 0);\ntslib_1.__decorate([\n Assets_1.asset([\n \"sounds/jumping/jumping_female.mp3\",\n \"sounds/jumping/jumping.mp3\"\n ]),\n tslib_1.__metadata(\"design:type\", Array)\n], CharacterSelectionScene, \"voices\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"images/panel.png\"),\n tslib_1.__metadata(\"design:type\", HTMLImageElement)\n], CharacterSelectionScene, \"panelImage\", void 0);\nexports.CharacterSelectionScene = CharacterSelectionScene;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvc2NlbmVzL0NoYXJhY3RlclNlbGVjdGlvblNjZW5lLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL3NjZW5lcy9DaGFyYWN0ZXJTZWxlY3Rpb25TY2VuZS50cz85OTJjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzZXByaXRlIH0gZnJvbSBcIi4uL0FzZXByaXRlXCI7XHJcbmltcG9ydCB7IGFzc2V0IH0gZnJvbSBcIi4uL0Fzc2V0c1wiO1xyXG5pbXBvcnQgeyBCaXRtYXBGb250IH0gZnJvbSBcIi4uL0JpdG1hcEZvbnRcIjtcclxuaW1wb3J0IHsgQ2hhcmFjdGVyQXNzZXQsIFZvaWNlQXNzZXQgfSBmcm9tIFwiLi4vQ2FtcGFpZ25cIjtcclxuaW1wb3J0IHsgQ29udHJvbGxlckFuaW1hdGlvblRhZ3MgfSBmcm9tIFwiLi4vaW5wdXQvQ29udHJvbGxlckZhbWlseVwiO1xyXG5pbXBvcnQgeyBDb250cm9sbGVyRXZlbnQgfSBmcm9tIFwiLi4vaW5wdXQvQ29udHJvbGxlckV2ZW50XCI7XHJcbmltcG9ydCB7IERJQUxPR19GT05UIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBlYXNlT3V0Q3ViaWMgfSBmcm9tIFwiLi4vZWFzaW5nc1wiO1xyXG5pbXBvcnQgeyBGcmllbmRseUZpcmUgfSBmcm9tIFwiLi4vRnJpZW5kbHlGaXJlXCI7XHJcbmltcG9ydCB7IEdhbWVTY2VuZSB9IGZyb20gXCIuL0dhbWVTY2VuZVwiO1xyXG5pbXBvcnQgeyBNZW51SXRlbSwgTWVudUxpc3QgfSBmcm9tIFwiLi4vTWVudVwiO1xyXG5pbXBvcnQgeyBTY2VuZSB9IGZyb20gXCIuLi9TY2VuZVwiO1xyXG5pbXBvcnQgeyBTbGlkZVRyYW5zaXRpb24gfSBmcm9tIFwiLi4vdHJhbnNpdGlvbnMvU2xpZGVUcmFuc2l0aW9uXCI7XHJcbmltcG9ydCB7IFRpdGxlU2NlbmUgfSBmcm9tIFwiLi9UaXRsZVNjZW5lXCI7XHJcbmltcG9ydCB7IEltYWdlTm9kZSB9IGZyb20gXCIuLi9zY2VuZS9JbWFnZU5vZGVcIjtcclxuaW1wb3J0IHsgRGlyZWN0aW9uIH0gZnJvbSBcIi4uL2dlb20vRGlyZWN0aW9uXCI7XHJcbmltcG9ydCB7IFRleHROb2RlIH0gZnJvbSBcIi4uL3NjZW5lL1RleHROb2RlXCI7XHJcbmltcG9ydCB7IENvbnRyb2xUb29sdGlwTm9kZSB9IGZyb20gXCIuLi9zY2VuZS9Db250cm9sVG9vbHRpcE5vZGVcIjtcclxuaW1wb3J0IHsgQXNlcHJpdGVOb2RlIH0gZnJvbSBcIi4uL3NjZW5lL0FzZXByaXRlTm9kZVwiO1xyXG5pbXBvcnQgeyBTb3VuZCB9IGZyb20gXCIuLi9Tb3VuZFwiO1xyXG5cclxuZW51bSBNZW51SXRlbUtleSB7XHJcbiAgICBDSEFSQUNURVIgPSBcImNoYXJhY3RlclwiLFxyXG4gICAgVk9JQ0UgPSBcInZvaWNlXCIsXHJcbiAgICBTVEFSVCA9IFwic3RhcnRcIlxyXG59XHJcblxyXG5jb25zdCBtZW51SXRlbVggPSAxMjtcclxuY29uc3QgY2hhcmFjdGVyTWVudUl0ZW1ZID0gMjA7XHJcbmNvbnN0IHZvaWNlTWVudUl0ZW1ZID0gNTA7XHJcbmNvbnN0IHN0YXJ0TWVudUl0ZW1ZID0gMTI0O1xyXG5jb25zdCBzZWxlY3Rpb25JdGVtc1lEaXN0YW5jZSA9IDEyO1xyXG5jb25zdCBzZWxlY3Rpb25JdGVtc1hEaXN0YW5jZSA9IDEyO1xyXG5cclxuZXhwb3J0IGNsYXNzIENoYXJhY3RlclNlbGVjdGlvblNjZW5lIGV4dGVuZHMgU2NlbmU8RnJpZW5kbHlGaXJlPiB7XHJcbiAgICBAYXNzZXQoRElBTE9HX0ZPTlQpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBmb250OiBCaXRtYXBGb250O1xyXG5cclxuICAgIEBhc3NldChcImZvbnRzL2NyZWRpdHMuZm9udC5qc29uXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBoZWFkbGluZUZvbnQ6IEJpdG1hcEZvbnQ7XHJcblxyXG4gICAgQGFzc2V0KFtcclxuICAgICAgICBcInNwcml0ZXMvcGMvZmVtYWxlLmFzZXByaXRlLmpzb25cIixcclxuICAgICAgICBcInNwcml0ZXMvcGMvbWFsZS5hc2Vwcml0ZS5qc29uXCJcclxuICAgIF0pXHJcbiAgICBwdWJsaWMgc3RhdGljIHBsYXllclNwcml0ZXM6IEFzZXByaXRlW107XHJcblxyXG4gICAgQGFzc2V0KFtcclxuICAgICAgICBcInNvdW5kcy9qdW1waW5nL2p1bXBpbmdfZmVtYWxlLm1wM1wiLFxyXG4gICAgICAgIFwic291bmRzL2p1bXBpbmcvanVtcGluZy5tcDNcIlxyXG4gICAgXSlcclxuICAgIHByaXZhdGUgc3RhdGljIHZvaWNlczogU291bmRbXTtcclxuXHJcbiAgICBAYXNzZXQoXCJpbWFnZXMvcGFuZWwucG5nXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBwYW5lbEltYWdlOiBIVE1MSW1hZ2VFbGVtZW50O1xyXG5cclxuICAgIHByaXZhdGUgbWVudSE6IE1lbnVMaXN0O1xyXG4gICAgcHJpdmF0ZSB2YXJpYW50MSE6IFRleHROb2RlO1xyXG4gICAgcHJpdmF0ZSB2YXJpYW50MiE6IFRleHROb2RlO1xyXG4gICAgcHJpdmF0ZSB2b2ljZTEhOiBUZXh0Tm9kZTtcclxuICAgIHByaXZhdGUgdm9pY2UyITogVGV4dE5vZGU7XHJcbiAgICBwcml2YXRlIGNoYXJhY3RlciE6IEFzZXByaXRlTm9kZTtcclxuXHJcbiAgICBwdWJsaWMgYWN0aXZhdGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pbnB1dC5vbkJ1dHRvbkRvd24uY29ubmVjdCh0aGlzLmhhbmRsZUJ1dHRvbkRvd24sIHRoaXMpO1xyXG4gICAgICAgIHRoaXMubWVudS5vbkFjdGl2YXRlZC5jb25uZWN0KHRoaXMuaGFuZGxlTWVudUFjdGlvbiwgdGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlYWN0aXZhdGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pbnB1dC5vbkJ1dHRvbkRvd24uZGlzY29ubmVjdCh0aGlzLmhhbmRsZUJ1dHRvbkRvd24sIHRoaXMpO1xyXG4gICAgICAgIHRoaXMubWVudS5vbkFjdGl2YXRlZC5kaXNjb25uZWN0KHRoaXMuaGFuZGxlTWVudUFjdGlvbiwgdGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGhhbmRsZU1lbnVBY3Rpb24oYnV0dG9uSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHN3aXRjaCAoYnV0dG9uSWQpIHtcclxuICAgICAgICAgICAgY2FzZSBNZW51SXRlbUtleS5DSEFSQUNURVI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbWUuY2FtcGFpZ24udG9nZ2xlQ2hhcmFjdGVyQXNzZXQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBNZW51SXRlbUtleS5WT0lDRTpcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FtZS5jYW1wYWlnbi50b2dnbGVWb2ljZUFzc2V0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgQ2hhcmFjdGVyU2VsZWN0aW9uU2NlbmUudm9pY2VzW3RoaXMuZ2FtZS5jYW1wYWlnbi5zZWxlY3RlZFZvaWNlXS5wbGF5KCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBNZW51SXRlbUtleS5TVEFSVDpcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2FtZS5zY2VuZXMucG9wU2NlbmUoeyBub1RyYW5zaXRpb246IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICAgICAgVGl0bGVTY2VuZS5tdXNpYy5zdG9wKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbWUuc2NlbmVzLnNldFNjZW5lKEdhbWVTY2VuZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaGFuZGxlQnV0dG9uRG93bihldmVudDogQ29udHJvbGxlckV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgaWYgKGV2ZW50LmlzQWJvcnQpIHtcclxuICAgICAgICAgICAgdGhpcy5zY2VuZXMucG9wU2NlbmUoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmlzQ29uZmlybSkge1xyXG4gICAgICAgICAgICB0aGlzLm1lbnUuZXhlY3V0ZUFjdGlvbigpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuaXNNZW51VXApIHtcclxuICAgICAgICAgICAgdGhpcy5tZW51LnByZXYoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmlzTWVudURvd24pIHtcclxuICAgICAgICAgICAgdGhpcy5tZW51Lm5leHQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVTZWxlY3Rpb24oKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2FtZS5jYW1wYWlnbi5zZWxlY3RlZENoYXJhY3RlciA9PT0gQ2hhcmFjdGVyQXNzZXQuTUFMRSkge1xyXG4gICAgICAgICAgICB0aGlzLnZhcmlhbnQxLnNldENvbG9yKFwiZ3JleVwiKS5zZXRPdXRsaW5lQ29sb3IobnVsbCk7XHJcbiAgICAgICAgICAgIHRoaXMudmFyaWFudDIuc2V0Q29sb3IoXCJ3aGl0ZVwiKS5zZXRPdXRsaW5lQ29sb3IoXCJibGFja1wiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhcmlhbnQxLnNldENvbG9yKFwid2hpdGVcIikuc2V0T3V0bGluZUNvbG9yKFwiYmxhY2tcIik7XHJcbiAgICAgICAgICAgIHRoaXMudmFyaWFudDIuc2V0Q29sb3IoXCJncmV5XCIpLnNldE91dGxpbmVDb2xvcihudWxsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdhbWUuY2FtcGFpZ24uc2VsZWN0ZWRWb2ljZSA9PT0gVm9pY2VBc3NldC5NQUxFKSB7XHJcbiAgICAgICAgICAgIHRoaXMudm9pY2UxLnNldENvbG9yKFwiZ3JleVwiKS5zZXRPdXRsaW5lQ29sb3IobnVsbCk7XHJcbiAgICAgICAgICAgIHRoaXMudm9pY2UyLnNldENvbG9yKFwid2hpdGVcIikuc2V0T3V0bGluZUNvbG9yKFwiYmxhY2tcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52b2ljZTEuc2V0Q29sb3IoXCJ3aGl0ZVwiKS5zZXRPdXRsaW5lQ29sb3IoXCJibGFja1wiKTtcclxuICAgICAgICAgICAgdGhpcy52b2ljZTIuc2V0Q29sb3IoXCJncmV5XCIpLnNldE91dGxpbmVDb2xvcihudWxsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2hhcmFjdGVyLnNldEFzZXByaXRlKENoYXJhY3RlclNlbGVjdGlvblNjZW5lLnBsYXllclNwcml0ZXNbdGhpcy5nYW1lLmNhbXBhaWduLnNlbGVjdGVkQ2hhcmFjdGVyXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldHVwKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0QmFja2dyb3VuZFN0eWxlKFwicmdiYSgwLCAwLCAwLCAwLjgpXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnpJbmRleCA9IDI7XHJcbiAgICAgICAgdGhpcy5pblRyYW5zaXRpb24gPSBuZXcgU2xpZGVUcmFuc2l0aW9uKHsgZHVyYXRpb246IDAuNSwgZGlyZWN0aW9uOiBcInRvcFwiLCBlYXNpbmc6IGVhc2VPdXRDdWJpYyB9KTtcclxuICAgICAgICB0aGlzLm91dFRyYW5zaXRpb24gPSBuZXcgU2xpZGVUcmFuc2l0aW9uKHsgZHVyYXRpb246IDAuMjUgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGNoYXJTZWxlY3Rpb25UZXh0WSA9IGNoYXJhY3Rlck1lbnVJdGVtWSArIHNlbGVjdGlvbkl0ZW1zWURpc3RhbmNlO1xyXG4gICAgICAgIGNvbnN0IGNoYXJTZWxlY3Rpb25UZXh0WCA9IG1lbnVJdGVtWCArIHNlbGVjdGlvbkl0ZW1zWERpc3RhbmNlO1xyXG4gICAgICAgIGNvbnN0IGNoYXJTZWxlY3Rpb25UZXh0R2FwID0gNTU7XHJcblxyXG4gICAgICAgIGNvbnN0IHZvaWNlU2VsZWN0aW9uVGV4dFkgPSB2b2ljZU1lbnVJdGVtWSArIHNlbGVjdGlvbkl0ZW1zWURpc3RhbmNlO1xyXG4gICAgICAgIGNvbnN0IHZvaWNlU2VsZWN0aW9uVGV4dFggPSBtZW51SXRlbVggKyBzZWxlY3Rpb25JdGVtc1hEaXN0YW5jZTtcclxuICAgICAgICBjb25zdCB2b2ljZVNlbGVjdGlvblRleHRHYXAgPSA1NTtcclxuXHJcbiAgICAgICAgY29uc3QgY2hhcmFjdGVyID0gdGhpcy5nYW1lLmNhbXBhaWduLnNlbGVjdGVkQ2hhcmFjdGVyO1xyXG5cclxuICAgICAgICBjb25zdCBwYW5lbCA9IG5ldyBJbWFnZU5vZGUoe1xyXG4gICAgICAgICAgICBpbWFnZTogQ2hhcmFjdGVyU2VsZWN0aW9uU2NlbmUucGFuZWxJbWFnZSxcclxuICAgICAgICAgICAgY2hpbGRBbmNob3I6IERpcmVjdGlvbi5UT1BfTEVGVCxcclxuICAgICAgICAgICAgeDogdGhpcy5nYW1lLndpZHRoID4+IDEsXHJcbiAgICAgICAgICAgIHk6ICh0aGlzLmdhbWUuaGVpZ2h0ID4+IDEpIC0gMTZcclxuICAgICAgICB9KS5hcHBlbmRDaGlsZChcclxuICAgICAgICAgICAgbmV3IFRleHROb2RlKHtcclxuICAgICAgICAgICAgICAgIGZvbnQ6IENoYXJhY3RlclNlbGVjdGlvblNjZW5lLmhlYWRsaW5lRm9udCxcclxuICAgICAgICAgICAgICAgIHRleHQ6IFwiQ0hBUkFDVEVSIENVU1RPTUlaQVRJT05cIixcclxuICAgICAgICAgICAgICAgIGFuY2hvcjogRGlyZWN0aW9uLkJPVFRPTV9MRUZULFxyXG4gICAgICAgICAgICAgICAgeTogLTUsXHJcbiAgICAgICAgICAgICAgICBjb2xvcjogXCJ3aGl0ZVwiXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKS5hcHBlbmRDaGlsZChcclxuICAgICAgICAgICAgdGhpcy52YXJpYW50MSA9IG5ldyBUZXh0Tm9kZSh7XHJcbiAgICAgICAgICAgICAgICBmb250OiBDaGFyYWN0ZXJTZWxlY3Rpb25TY2VuZS5mb250LFxyXG4gICAgICAgICAgICAgICAgdGV4dDogXCJWYXJpYW50IDFcIixcclxuICAgICAgICAgICAgICAgIGFuY2hvcjogRGlyZWN0aW9uLlRPUF9MRUZULFxyXG4gICAgICAgICAgICAgICAgeDogY2hhclNlbGVjdGlvblRleHRYLFxyXG4gICAgICAgICAgICAgICAgeTogY2hhclNlbGVjdGlvblRleHRZLFxyXG4gICAgICAgICAgICAgICAgY29sb3I6IFwiZ3JleVwiXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKS5hcHBlbmRDaGlsZChcclxuICAgICAgICAgICAgdGhpcy52YXJpYW50MiA9IG5ldyBUZXh0Tm9kZSh7XHJcbiAgICAgICAgICAgICAgICBmb250OiBDaGFyYWN0ZXJTZWxlY3Rpb25TY2VuZS5mb250LFxyXG4gICAgICAgICAgICAgICAgdGV4dDogXCJWYXJpYW50IDJcIixcclxuICAgICAgICAgICAgICAgIGFuY2hvcjogRGlyZWN0aW9uLlRPUF9MRUZULFxyXG4gICAgICAgICAgICAgICAgeDogY2hhclNlbGVjdGlvblRleHRYICsgY2hhclNlbGVjdGlvblRleHRHYXAsXHJcbiAgICAgICAgICAgICAgICB5OiBjaGFyU2VsZWN0aW9uVGV4dFksXHJcbiAgICAgICAgICAgICAgICBjb2xvcjogXCJncmV5XCJcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApLmFwcGVuZENoaWxkKFxyXG4gICAgICAgICAgICB0aGlzLnZvaWNlMSA9IG5ldyBUZXh0Tm9kZSh7XHJcbiAgICAgICAgICAgICAgICBmb250OiBDaGFyYWN0ZXJTZWxlY3Rpb25TY2VuZS5mb250LFxyXG4gICAgICAgICAgICAgICAgdGV4dDogXCJIaWdoIFBpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICBhbmNob3I6IERpcmVjdGlvbi5UT1BfTEVGVCxcclxuICAgICAgICAgICAgICAgIHg6IHZvaWNlU2VsZWN0aW9uVGV4dFgsXHJcbiAgICAgICAgICAgICAgICB5OiB2b2ljZVNlbGVjdGlvblRleHRZLFxyXG4gICAgICAgICAgICAgICAgY29sb3I6IFwiZ3JleVwiXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKS5hcHBlbmRDaGlsZChcclxuICAgICAgICAgICAgdGhpcy52b2ljZTIgPSBuZXcgVGV4dE5vZGUoe1xyXG4gICAgICAgICAgICAgICAgZm9udDogQ2hhcmFjdGVyU2VsZWN0aW9uU2NlbmUuZm9udCxcclxuICAgICAgICAgICAgICAgIHRleHQ6IFwiTG93IFBpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICBhbmNob3I6IERpcmVjdGlvbi5UT1BfTEVGVCxcclxuICAgICAgICAgICAgICAgIHg6IHZvaWNlU2VsZWN0aW9uVGV4dFggKyB2b2ljZVNlbGVjdGlvblRleHRHYXAsXHJcbiAgICAgICAgICAgICAgICB5OiB2b2ljZVNlbGVjdGlvblRleHRZLFxyXG4gICAgICAgICAgICAgICAgY29sb3I6IFwiZ3JleVwiXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKS5hcHBlbmRDaGlsZChcclxuICAgICAgICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBuZXcgQXNlcHJpdGVOb2RlKHtcclxuICAgICAgICAgICAgICAgIGFzZXByaXRlOiBDaGFyYWN0ZXJTZWxlY3Rpb25TY2VuZS5wbGF5ZXJTcHJpdGVzW2NoYXJhY3Rlcl0sXHJcbiAgICAgICAgICAgICAgICB0YWc6IFwiaWRsZVwiLFxyXG4gICAgICAgICAgICAgICAgYW5jaG9yOiBEaXJlY3Rpb24uVE9QX0xFRlQsXHJcbiAgICAgICAgICAgICAgICB4OiAyMTMsXHJcbiAgICAgICAgICAgICAgICB5OiA0NlxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICkuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgICAgIG5ldyBDb250cm9sVG9vbHRpcE5vZGUoe1xyXG4gICAgICAgICAgICAgICAgY29udHJvbDogQ29udHJvbGxlckFuaW1hdGlvblRhZ3MuQ09ORklSTSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBcIlNlbGVjdCBvciBDaGFuZ2VcIixcclxuICAgICAgICAgICAgICAgIGFuY2hvcjogRGlyZWN0aW9uLlRPUF9MRUZULFxyXG4gICAgICAgICAgICAgICAgeTogQ2hhcmFjdGVyU2VsZWN0aW9uU2NlbmUucGFuZWxJbWFnZS5oZWlnaHQgKyAyXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKS5hcHBlbmRDaGlsZChcclxuICAgICAgICAgICAgbmV3IENvbnRyb2xUb29sdGlwTm9kZSh7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sOiBDb250cm9sbGVyQW5pbWF0aW9uVGFncy5CQUNLLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IFwiQmFja1wiLFxyXG4gICAgICAgICAgICAgICAgYW5jaG9yOiBEaXJlY3Rpb24uVE9QX0xFRlQsXHJcbiAgICAgICAgICAgICAgICB5OiBDaGFyYWN0ZXJTZWxlY3Rpb25TY2VuZS5wYW5lbEltYWdlLmhlaWdodCArIDE4XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKS5hcHBlbmRUbyh0aGlzLnJvb3ROb2RlKTtcclxuXHJcbiAgICAgICAgdGhpcy5tZW51ID0gbmV3IE1lbnVMaXN0KCkuc2V0SXRlbXMoXHJcbiAgICAgICAgICAgIG5ldyBNZW51SXRlbShcclxuICAgICAgICAgICAgICAgIE1lbnVJdGVtS2V5LkNIQVJBQ1RFUiwgXCJDaGFyYWN0ZXI6XCIsIENoYXJhY3RlclNlbGVjdGlvblNjZW5lLmZvbnQsIFwiYmxhY2tcIixcclxuICAgICAgICAgICAgICAgIG1lbnVJdGVtWCwgY2hhcmFjdGVyTWVudUl0ZW1ZXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIG5ldyBNZW51SXRlbShcclxuICAgICAgICAgICAgICAgIE1lbnVJdGVtS2V5LlZPSUNFLCBcIlZvaWNlOlwiLCBDaGFyYWN0ZXJTZWxlY3Rpb25TY2VuZS5mb250LCBcImJsYWNrXCIsXHJcbiAgICAgICAgICAgICAgICBtZW51SXRlbVgsIHZvaWNlTWVudUl0ZW1ZXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIG5ldyBNZW51SXRlbShcclxuICAgICAgICAgICAgICAgIE1lbnVJdGVtS2V5LlNUQVJULCBcIlN0YXJ0IEdhbWVcIiwgQ2hhcmFjdGVyU2VsZWN0aW9uU2NlbmUuZm9udCwgXCJibGFja1wiLFxyXG4gICAgICAgICAgICAgICAgbWVudUl0ZW1YLCBzdGFydE1lbnVJdGVtWVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKS5hcHBlbmRUbyhwYW5lbCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFudXAoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5yb290Tm9kZS5jbGVhcigpO1xyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUE2QkE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTs7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFlQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUF0TUE7QUFEQTtBQUNBO0FBQUE7QUFHQTtBQURBO0FBQ0E7QUFBQTtBQU1BO0FBSkE7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFNQTtBQUpBO0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBR0E7QUFEQTtBQUNBO0FBQUE7QUFwQkE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/scenes/CharacterSelectionScene.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/scenes/ControlsScene.js":
|
|
/*!*************************************!*\
|
|
!*** ./lib/scenes/ControlsScene.js ***!
|
|
\*************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ControlsScene = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst BitmapFont_1 = __webpack_require__(/*! ../BitmapFont */ \"./lib/BitmapFont.js\");\nconst ControllerFamily_1 = __webpack_require__(/*! ../input/ControllerFamily */ \"./lib/input/ControllerFamily.js\");\nconst ControllerManager_1 = __webpack_require__(/*! ../input/ControllerManager */ \"./lib/input/ControllerManager.js\");\nconst constants_1 = __webpack_require__(/*! ../constants */ \"./lib/constants.js\");\nconst easings_1 = __webpack_require__(/*! ../easings */ \"./lib/easings.js\");\nconst Scene_1 = __webpack_require__(/*! ../Scene */ \"./lib/Scene.js\");\nconst SlideTransition_1 = __webpack_require__(/*! ../transitions/SlideTransition */ \"./lib/transitions/SlideTransition.js\");\nconst ImageNode_1 = __webpack_require__(/*! ../scene/ImageNode */ \"./lib/scene/ImageNode.js\");\nconst AsepriteNode_1 = __webpack_require__(/*! ../scene/AsepriteNode */ \"./lib/scene/AsepriteNode.js\");\nconst Direction_1 = __webpack_require__(/*! ../geom/Direction */ \"./lib/geom/Direction.js\");\nconst TextNode_1 = __webpack_require__(/*! ../scene/TextNode */ \"./lib/scene/TextNode.js\");\nconst ControlTooltipNode_1 = __webpack_require__(/*! ../scene/ControlTooltipNode */ \"./lib/scene/ControlTooltipNode.js\");\nclass ControlsScene extends Scene_1.Scene {\n constructor() {\n super(...arguments);\n this.controls = [\n \"Walk\",\n \"Jump\",\n \"Interact\",\n \"Run\",\n \"Throw\",\n \"Enter doors\",\n \"Pause\"\n ];\n }\n setup() {\n this.setBackgroundStyle(\"rgba(0, 0, 0, 0.8)\");\n this.zIndex = 2;\n this.inTransition = new SlideTransition_1.SlideTransition({ duration: 0.5, direction: \"top\", easing: easings_1.easeOutCubic });\n this.outTransition = new SlideTransition_1.SlideTransition({ duration: 0.25 });\n const controllerManager = ControllerManager_1.ControllerManager.getInstance();\n const gamepadStyle = controllerManager.selectedGamepadStyle;\n const panel = new ImageNode_1.ImageNode({\n image: ControlsScene.panelImage,\n x: this.game.width / 2,\n y: this.game.height / 2 - 16,\n childAnchor: Direction_1.Direction.TOP_LEFT\n }).appendChild(this.gamepadSelection = new AsepriteNode_1.AsepriteNode({\n aseprite: ControlsScene.gamepadSelection,\n tag: gamepadStyle,\n anchor: Direction_1.Direction.TOP_LEFT,\n x: 204,\n y: 2\n })).appendChild(new ImageNode_1.ImageNode({\n image: ControlsScene.keyboardKeys,\n anchor: Direction_1.Direction.TOP_LEFT,\n x: 123,\n y: 35\n })).appendChild(this.gamepadControls = new AsepriteNode_1.AsepriteNode({\n aseprite: ControlsScene.gamepadControls,\n tag: gamepadStyle,\n anchor: Direction_1.Direction.TOP_LEFT,\n x: 206,\n y: 35\n })).appendChild(new ControlTooltipNode_1.ControlTooltipNode({\n label: \"Toggle Gamepad Button Prompts\",\n control: ControllerFamily_1.ControllerAnimationTags.ACTION,\n anchor: Direction_1.Direction.TOP_LEFT,\n y: ControlsScene.panelImage.height + 2\n })).appendChild(new ControlTooltipNode_1.ControlTooltipNode({\n label: \"Back\",\n control: ControllerFamily_1.ControllerAnimationTags.BACK,\n anchor: Direction_1.Direction.TOP_LEFT,\n y: ControlsScene.panelImage.height + 18\n })).appendTo(this.rootNode);\n this.controls.forEach((label, index) => {\n panel.appendChild(new TextNode_1.TextNode({\n font: ControlsScene.font,\n text: label,\n anchor: Direction_1.Direction.TOP_LEFT,\n x: 10,\n y: 35 + index * 20,\n color: \"black\"\n }));\n });\n }\n cleanup() {\n this.rootNode.clear();\n }\n activate() {\n this.input.onButtonDown.connect(this.handleButtonDown, this);\n }\n deactivate() {\n this.input.onButtonDown.disconnect(this.handleButtonDown, this);\n }\n handleButtonDown(event) {\n if (event.isAbort || event.isPause) {\n this.scenes.popScene();\n }\n if (event.isPlayerAction) {\n const controllerManager = ControllerManager_1.ControllerManager.getInstance();\n controllerManager.toggleSelectedGamepadStyle();\n this.gamepadControls.setTag(controllerManager.selectedGamepadStyle);\n this.gamepadSelection.setTag(controllerManager.selectedGamepadStyle);\n }\n }\n}\ntslib_1.__decorate([\n Assets_1.asset(constants_1.DIALOG_FONT),\n tslib_1.__metadata(\"design:type\", BitmapFont_1.BitmapFont)\n], ControlsScene, \"font\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"images/controls.png\"),\n tslib_1.__metadata(\"design:type\", HTMLImageElement)\n], ControlsScene, \"panelImage\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"images/controls_keyboard.png\"),\n tslib_1.__metadata(\"design:type\", HTMLImageElement)\n], ControlsScene, \"keyboardKeys\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"images/gamepad_selection.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], ControlsScene, \"gamepadSelection\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"images/controls_gamepad.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], ControlsScene, \"gamepadControls\", void 0);\nexports.ControlsScene = ControlsScene;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvc2NlbmVzL0NvbnRyb2xzU2NlbmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvc2NlbmVzL0NvbnRyb2xzU2NlbmUudHM/YzdkMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc2Vwcml0ZSB9IGZyb20gXCIuLi9Bc2Vwcml0ZVwiO1xyXG5pbXBvcnQgeyBhc3NldCB9IGZyb20gXCIuLi9Bc3NldHNcIjtcclxuaW1wb3J0IHsgQml0bWFwRm9udCB9IGZyb20gXCIuLi9CaXRtYXBGb250XCI7XHJcbmltcG9ydCB7IENvbnRyb2xsZXJBbmltYXRpb25UYWdzIH0gZnJvbSBcIi4uL2lucHV0L0NvbnRyb2xsZXJGYW1pbHlcIjtcclxuaW1wb3J0IHsgQ29udHJvbGxlckV2ZW50IH0gZnJvbSBcIi4uL2lucHV0L0NvbnRyb2xsZXJFdmVudFwiO1xyXG5pbXBvcnQgeyBDb250cm9sbGVyTWFuYWdlciB9IGZyb20gXCIuLi9pbnB1dC9Db250cm9sbGVyTWFuYWdlclwiO1xyXG5pbXBvcnQgeyBESUFMT0dfRk9OVCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgZWFzZU91dEN1YmljIH0gZnJvbSBcIi4uL2Vhc2luZ3NcIjtcclxuaW1wb3J0IHsgRnJpZW5kbHlGaXJlIH0gZnJvbSBcIi4uL0ZyaWVuZGx5RmlyZVwiO1xyXG5pbXBvcnQgeyBTY2VuZSB9IGZyb20gXCIuLi9TY2VuZVwiO1xyXG5pbXBvcnQgeyBTbGlkZVRyYW5zaXRpb24gfSBmcm9tIFwiLi4vdHJhbnNpdGlvbnMvU2xpZGVUcmFuc2l0aW9uXCI7XHJcbmltcG9ydCB7IEltYWdlTm9kZSB9IGZyb20gXCIuLi9zY2VuZS9JbWFnZU5vZGVcIjtcclxuaW1wb3J0IHsgQXNlcHJpdGVOb2RlIH0gZnJvbSBcIi4uL3NjZW5lL0FzZXByaXRlTm9kZVwiO1xyXG5pbXBvcnQgeyBEaXJlY3Rpb24gfSBmcm9tIFwiLi4vZ2VvbS9EaXJlY3Rpb25cIjtcclxuaW1wb3J0IHsgVGV4dE5vZGUgfSBmcm9tIFwiLi4vc2NlbmUvVGV4dE5vZGVcIjtcclxuaW1wb3J0IHsgQ29udHJvbFRvb2x0aXBOb2RlIH0gZnJvbSBcIi4uL3NjZW5lL0NvbnRyb2xUb29sdGlwTm9kZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbnRyb2xzU2NlbmUgZXh0ZW5kcyBTY2VuZTxGcmllbmRseUZpcmU+IHtcclxuICAgIEBhc3NldChESUFMT0dfRk9OVClcclxuICAgIHByaXZhdGUgc3RhdGljIGZvbnQ6IEJpdG1hcEZvbnQ7XHJcblxyXG4gICAgQGFzc2V0KFwiaW1hZ2VzL2NvbnRyb2xzLnBuZ1wiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgcGFuZWxJbWFnZTogSFRNTEltYWdlRWxlbWVudDtcclxuXHJcbiAgICBAYXNzZXQoXCJpbWFnZXMvY29udHJvbHNfa2V5Ym9hcmQucG5nXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBrZXlib2FyZEtleXM6IEhUTUxJbWFnZUVsZW1lbnQ7XHJcblxyXG4gICAgQGFzc2V0KFwiaW1hZ2VzL2dhbWVwYWRfc2VsZWN0aW9uLmFzZXByaXRlLmpzb25cIilcclxuICAgIHByaXZhdGUgc3RhdGljIGdhbWVwYWRTZWxlY3Rpb246IEFzZXByaXRlO1xyXG5cclxuICAgIEBhc3NldChcImltYWdlcy9jb250cm9sc19nYW1lcGFkLmFzZXByaXRlLmpzb25cIilcclxuICAgIHByaXZhdGUgc3RhdGljIGdhbWVwYWRDb250cm9sczogQXNlcHJpdGU7XHJcblxyXG4gICAgcHJpdmF0ZSBjb250cm9sczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgXCJXYWxrXCIsXHJcbiAgICAgICAgXCJKdW1wXCIsXHJcbiAgICAgICAgXCJJbnRlcmFjdFwiLFxyXG4gICAgICAgIFwiUnVuXCIsXHJcbiAgICAgICAgXCJUaHJvd1wiLFxyXG4gICAgICAgIFwiRW50ZXIgZG9vcnNcIixcclxuICAgICAgICBcIlBhdXNlXCJcclxuICAgIF07XHJcblxyXG4gICAgcHJpdmF0ZSBnYW1lcGFkU2VsZWN0aW9uITogQXNlcHJpdGVOb2RlO1xyXG4gICAgcHJpdmF0ZSBnYW1lcGFkQ29udHJvbHMhOiBBc2Vwcml0ZU5vZGU7XHJcblxyXG4gICAgcHVibGljIHNldHVwKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0QmFja2dyb3VuZFN0eWxlKFwicmdiYSgwLCAwLCAwLCAwLjgpXCIpO1xyXG4gICAgICAgIHRoaXMuekluZGV4ID0gMjtcclxuICAgICAgICB0aGlzLmluVHJhbnNpdGlvbiA9IG5ldyBTbGlkZVRyYW5zaXRpb24oeyBkdXJhdGlvbjogMC41LCBkaXJlY3Rpb246IFwidG9wXCIsIGVhc2luZzogZWFzZU91dEN1YmljIH0pO1xyXG4gICAgICAgIHRoaXMub3V0VHJhbnNpdGlvbiA9IG5ldyBTbGlkZVRyYW5zaXRpb24oeyBkdXJhdGlvbjogMC4yNSB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgY29udHJvbGxlck1hbmFnZXIgPSBDb250cm9sbGVyTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xyXG4gICAgICAgIGNvbnN0IGdhbWVwYWRTdHlsZSA9IGNvbnRyb2xsZXJNYW5hZ2VyLnNlbGVjdGVkR2FtZXBhZFN0eWxlO1xyXG5cclxuICAgICAgICBjb25zdCBwYW5lbCA9IG5ldyBJbWFnZU5vZGUoe1xyXG4gICAgICAgICAgICBpbWFnZTogQ29udHJvbHNTY2VuZS5wYW5lbEltYWdlLFxyXG4gICAgICAgICAgICB4OiB0aGlzLmdhbWUud2lkdGggLyAyLFxyXG4gICAgICAgICAgICB5OiB0aGlzLmdhbWUuaGVpZ2h0IC8gMiAtIDE2LFxyXG4gICAgICAgICAgICBjaGlsZEFuY2hvcjogRGlyZWN0aW9uLlRPUF9MRUZUXHJcbiAgICAgICAgfSkuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgICAgIHRoaXMuZ2FtZXBhZFNlbGVjdGlvbiA9IG5ldyBBc2Vwcml0ZU5vZGUoe1xyXG4gICAgICAgICAgICAgICAgYXNlcHJpdGU6IENvbnRyb2xzU2NlbmUuZ2FtZXBhZFNlbGVjdGlvbixcclxuICAgICAgICAgICAgICAgIHRhZzogZ2FtZXBhZFN0eWxlLFxyXG4gICAgICAgICAgICAgICAgYW5jaG9yOiBEaXJlY3Rpb24uVE9QX0xFRlQsXHJcbiAgICAgICAgICAgICAgICB4OiAyMDQsXHJcbiAgICAgICAgICAgICAgICB5OiAyXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKS5hcHBlbmRDaGlsZChcclxuICAgICAgICAgICAgbmV3IEltYWdlTm9kZSh7XHJcbiAgICAgICAgICAgICAgICBpbWFnZTogQ29udHJvbHNTY2VuZS5rZXlib2FyZEtleXMsXHJcbiAgICAgICAgICAgICAgICBhbmNob3I6IERpcmVjdGlvbi5UT1BfTEVGVCxcclxuICAgICAgICAgICAgICAgIHg6IDEyMyxcclxuICAgICAgICAgICAgICAgIHk6IDM1XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKS5hcHBlbmRDaGlsZChcclxuICAgICAgICAgICAgdGhpcy5nYW1lcGFkQ29udHJvbHMgPSBuZXcgQXNlcHJpdGVOb2RlKHtcclxuICAgICAgICAgICAgICAgIGFzZXByaXRlOiBDb250cm9sc1NjZW5lLmdhbWVwYWRDb250cm9scyxcclxuICAgICAgICAgICAgICAgIHRhZzogZ2FtZXBhZFN0eWxlLFxyXG4gICAgICAgICAgICAgICAgYW5jaG9yOiBEaXJlY3Rpb24uVE9QX0xFRlQsXHJcbiAgICAgICAgICAgICAgICB4OiAyMDYsXHJcbiAgICAgICAgICAgICAgICB5OiAzNVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICkuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgICAgIG5ldyBDb250cm9sVG9vbHRpcE5vZGUoe1xyXG4gICAgICAgICAgICAgICAgbGFiZWw6IFwiVG9nZ2xlIEdhbWVwYWQgQnV0dG9uIFByb21wdHNcIixcclxuICAgICAgICAgICAgICAgIGNvbnRyb2w6IENvbnRyb2xsZXJBbmltYXRpb25UYWdzLkFDVElPTixcclxuICAgICAgICAgICAgICAgIGFuY2hvcjogRGlyZWN0aW9uLlRPUF9MRUZULFxyXG4gICAgICAgICAgICAgICAgeTogQ29udHJvbHNTY2VuZS5wYW5lbEltYWdlLmhlaWdodCArIDJcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApLmFwcGVuZENoaWxkKFxyXG4gICAgICAgICAgICBuZXcgQ29udHJvbFRvb2x0aXBOb2RlKHtcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBcIkJhY2tcIixcclxuICAgICAgICAgICAgICAgIGNvbnRyb2w6IENvbnRyb2xsZXJBbmltYXRpb25UYWdzLkJBQ0ssXHJcbiAgICAgICAgICAgICAgICBhbmNob3I6IERpcmVjdGlvbi5UT1BfTEVGVCxcclxuICAgICAgICAgICAgICAgIHk6IENvbnRyb2xzU2NlbmUucGFuZWxJbWFnZS5oZWlnaHQgKyAxOFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICkuYXBwZW5kVG8odGhpcy5yb290Tm9kZSk7XHJcblxyXG4gICAgICAgIHRoaXMuY29udHJvbHMuZm9yRWFjaCgobGFiZWwsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIHBhbmVsLmFwcGVuZENoaWxkKG5ldyBUZXh0Tm9kZSh7XHJcbiAgICAgICAgICAgICAgICBmb250OiBDb250cm9sc1NjZW5lLmZvbnQsXHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBsYWJlbCxcclxuICAgICAgICAgICAgICAgIGFuY2hvcjogRGlyZWN0aW9uLlRPUF9MRUZULFxyXG4gICAgICAgICAgICAgICAgeDogMTAsXHJcbiAgICAgICAgICAgICAgICB5OiAzNSArIGluZGV4ICogMjAsXHJcbiAgICAgICAgICAgICAgICBjb2xvcjogXCJibGFja1wiXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYW51cCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnJvb3ROb2RlLmNsZWFyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFjdGl2YXRlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaW5wdXQub25CdXR0b25Eb3duLmNvbm5lY3QodGhpcy5oYW5kbGVCdXR0b25Eb3duLCB0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVhY3RpdmF0ZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlucHV0Lm9uQnV0dG9uRG93bi5kaXNjb25uZWN0KHRoaXMuaGFuZGxlQnV0dG9uRG93biwgdGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVCdXR0b25Eb3duKGV2ZW50OiBDb250cm9sbGVyRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoZXZlbnQuaXNBYm9ydCB8fCBldmVudC5pc1BhdXNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmVzLnBvcFNjZW5lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChldmVudC5pc1BsYXllckFjdGlvbikge1xyXG4gICAgICAgICAgICBjb25zdCBjb250cm9sbGVyTWFuYWdlciA9IENvbnRyb2xsZXJNYW5hZ2VyLmdldEluc3RhbmNlKCk7XHJcbiAgICAgICAgICAgIGNvbnRyb2xsZXJNYW5hZ2VyLnRvZ2dsZVNlbGVjdGVkR2FtZXBhZFN0eWxlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2FtZXBhZENvbnRyb2xzLnNldFRhZyhjb250cm9sbGVyTWFuYWdlci5zZWxlY3RlZEdhbWVwYWRTdHlsZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2FtZXBhZFNlbGVjdGlvbi5zZXRUYWcoY29udHJvbGxlck1hbmFnZXIuc2VsZWN0ZWRHYW1lcGFkU3R5bGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTs7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBNkZBO0FBeEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW5IQTtBQURBO0FBQ0E7QUFBQTtBQUdBO0FBREE7QUFDQTtBQUFBO0FBR0E7QUFEQTtBQUNBO0FBQUE7QUFHQTtBQURBO0FBQ0E7QUFBQTtBQUdBO0FBREE7QUFDQTtBQUFBO0FBZEE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/scenes/ControlsScene.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/scenes/CreditsScene.js":
|
|
/*!************************************!*\
|
|
!*** ./lib/scenes/CreditsScene.js ***!
|
|
\************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CreditsScene = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst BitmapFont_1 = __webpack_require__(/*! ../BitmapFont */ \"./lib/BitmapFont.js\");\nconst constants_1 = __webpack_require__(/*! ../constants */ \"./lib/constants.js\");\nconst easings_1 = __webpack_require__(/*! ../easings */ \"./lib/easings.js\");\nconst FadeTransition_1 = __webpack_require__(/*! ../transitions/FadeTransition */ \"./lib/transitions/FadeTransition.js\");\nconst util_1 = __webpack_require__(/*! ../util */ \"./lib/util.js\");\nconst Scene_1 = __webpack_require__(/*! ../Scene */ \"./lib/Scene.js\");\nconst TitleScene_1 = __webpack_require__(/*! ./TitleScene */ \"./lib/scenes/TitleScene.js\");\nconst Direction_1 = __webpack_require__(/*! ../geom/Direction */ \"./lib/geom/Direction.js\");\nconst TextNode_1 = __webpack_require__(/*! ../scene/TextNode */ \"./lib/scene/TextNode.js\");\nconst SceneNode_1 = __webpack_require__(/*! ../scene/SceneNode */ \"./lib/scene/SceneNode.js\");\nconst ImageNode_1 = __webpack_require__(/*! ../scene/ImageNode */ \"./lib/scene/ImageNode.js\");\nconst AsepriteNode_1 = __webpack_require__(/*! ../scene/AsepriteNode */ \"./lib/scene/AsepriteNode.js\");\nconst Quests_1 = __webpack_require__(/*! ../Quests */ \"./lib/Quests.js\");\nconst Campaign_1 = __webpack_require__(/*! ../Campaign */ \"./lib/Campaign.js\");\nclass CreditsScene extends Scene_1.Scene {\n constructor() {\n super(...arguments);\n this.starPositions = [\n [318, 10],\n [288, 19],\n [260, 100],\n [370, 91],\n [409, 49],\n [446, 19],\n [436, 97],\n [185, 93],\n [159, 49],\n [322, 72],\n [153, 10],\n [211, 20],\n [59, 22],\n [17, 11],\n [102, 108]\n ];\n this.lineSpacing = 4;\n this.targetMusic = null;\n }\n getCorrectBackgroundTrack() {\n const ending = this.game.campaign.quests.find(q => q.isFinished());\n if (ending && ending.key === Quests_1.QuestKey.E)\n return CreditsScene.music[2];\n if (this.game.campaign.selectedCharacter === Campaign_1.CharacterAsset.FEMALE)\n return CreditsScene.music[1];\n if (this.game.campaign.selectedCharacter === Campaign_1.CharacterAsset.MALE)\n return CreditsScene.music[0];\n return CreditsScene.music[2];\n }\n setup() {\n return tslib_1.__awaiter(this, void 0, void 0, function* () {\n const ending = this.game.campaign.quests.find(q => q.isFinished());\n this.zIndex = 2;\n this.inTransition = new FadeTransition_1.FadeTransition({ duration: 0.5, easing: easings_1.easeOutCubic });\n this.outTransition = new FadeTransition_1.FadeTransition({ duration: 0.25 });\n this.targetMusic = this.getCorrectBackgroundTrack();\n if (ending && ending.key === Quests_1.QuestKey.E) {\n // The background\n new ImageNode_1.ImageNode({\n image: CreditsScene.backgroundImageSpace,\n anchor: Direction_1.Direction.TOP_LEFT\n }).appendTo(this.rootNode);\n // Spaceship\n new AsepriteNode_1.AsepriteNode({\n aseprite: CreditsScene.spaceship,\n tag: \"idle\",\n anchor: Direction_1.Direction.TOP_LEFT,\n x: constants_1.GAME_CANVAS_WIDTH,\n y: 200\n }).animate({\n animator: (node, value) => node.setX((constants_1.GAME_CANVAS_WIDTH + 50) - value * constants_1.GAME_CANVAS_WIDTH),\n duration: 100,\n }).appendTo(this.rootNode);\n // Spaceship\n new AsepriteNode_1.AsepriteNode({\n aseprite: CreditsScene.spaceshipsmall,\n tag: \"idle\",\n anchor: Direction_1.Direction.TOP_LEFT,\n x: constants_1.GAME_CANVAS_WIDTH,\n y: 185\n }).animate({\n animator: (node, value) => node.setX((constants_1.GAME_CANVAS_WIDTH + 10) - value * constants_1.GAME_CANVAS_WIDTH),\n duration: 200,\n }).appendTo(this.rootNode);\n }\n else {\n // The background\n new ImageNode_1.ImageNode({\n image: CreditsScene.backgroundImage,\n anchor: Direction_1.Direction.TOP_LEFT\n }).appendTo(this.rootNode);\n // The blinking stars\n this.starPositions.forEach((pos, index) => {\n new AsepriteNode_1.AsepriteNode({\n aseprite: CreditsScene.stars[index % CreditsScene.stars.length],\n tag: \"idle\",\n anchor: Direction_1.Direction.TOP_LEFT,\n x: pos[0],\n y: pos[1]\n }).appendTo(this.rootNode);\n });\n // The tree leaf\n new AsepriteNode_1.AsepriteNode({\n aseprite: CreditsScene.leaf,\n tag: \"idle\",\n anchor: Direction_1.Direction.TOP_LEFT,\n x: 414,\n y: 163\n }).appendTo(this.rootNode);\n }\n // The gradient background behind the scrolling credits text\n new ImageNode_1.ImageNode({\n image: CreditsScene.overlayImage,\n anchor: Direction_1.Direction.TOP_LEFT,\n opacity: 0.75\n }).appendTo(this.rootNode);\n // The scrolling credits text\n this.createCreditsNode().appendTo(this.rootNode);\n // Shortened Git commit hash to provide support\n new TextNode_1.TextNode({\n font: CreditsScene.standardFont,\n text: CreditsScene.appInfo.gitCommitHash.substr(0, 16),\n anchor: Direction_1.Direction.BOTTOM_RIGHT,\n x: this.game.width - 7,\n y: this.game.height - 4,\n color: \"white\"\n }).appendTo(this.rootNode);\n });\n }\n cleanup() {\n this.rootNode.clear();\n }\n createCreditsNode() {\n const startY = this.game.height + 50;\n let totalCrawlHeight = 0;\n const credits = new SceneNode_1.SceneNode().appendTo(this.rootNode).animate({\n animator: (node, value, elapsed) => {\n node.setY(startY - (elapsed * 1000 / 36) % (totalCrawlHeight + startY));\n },\n duration: Infinity\n });\n const x = 20;\n let y = this.addTitle(credits, 0, x);\n y = this.addParagraph(credits, y, x, [\n \"Originally made as a team\",\n \"effort for Ludum Dare 46\",\n \"in three days by\"\n ]);\n y = this.addParagraph(credits, y, x, [\n \"Eduard But, Nico Hülscher,\",\n \"Benjamin Jung, Nils Kreutzer,\",\n \"Bastian Lang, Ranjit Mevius,\",\n \"Markus Over, Klaus Reimer,\",\n \"and Jennifer van Veen\"\n ], 50);\n y = this.addCredit(credits, y, x, \"GAME DESIGN\", [\"Everyone\"]);\n y = this.addCredit(credits, y, x, \"STORY\", [\n \"Markus Over\",\n \"Jennifer van Veen\",\n \"Ranjit Mevius\",\n \"Nils Kreutzer\"\n ]);\n y = this.addCredit(credits, y, x, \"PROGRAMMING\", [\n \"Nico Hülscher\",\n \"Benjamin Jung\",\n \"Nils Kreutzer\",\n \"Ranjit Mevius\",\n \"Markus Over\",\n \"Klaus Reimer\",\n \"Eduard But\",\n \"Matthias Wetter\"\n ]);\n y = this.addCredit(credits, y, x, \"SCRIPTING\", [\n \"Markus Over\",\n \"Eduard But\"\n ]);\n y = this.addCredit(credits, y, x, \"ART DIRECTION\", [\"Eduard But\"]);\n y = this.addCredit(credits, y, x, \"2D ART\", [\n \"Eduard But\",\n \"Nils Kreutzer\",\n \"Christina Schneider\",\n \"Jennifer van Veen\",\n \"Matthias Wetter\"\n ]);\n y = this.addCredit(credits, y, x, \"WRITING\", [\n \"Markus Over\",\n \"Jennifer van Veen\",\n \"Eduard But\"\n ]);\n y = this.addCredit(credits, y, x, \"LEVEL DESIGN\", [\n \"Eduard But\",\n \"Nils Kreutzer\",\n \"Jennifer van Veen\"\n ]);\n y = this.addCredit(credits, y, x, \"DISTRIBUTION\", [\n \"Benjamin Jung\",\n ]);\n y = this.addCredit(credits, y, x, \"MUSIC\", [\n \"Bastian Lang\",\n \"Benjamin Jung\",\n \"Eduard But\",\n \"Matthias Wetter\"\n ]);\n y = this.addCredit(credits, y, x, \"QA\", [\n \"Jennifer van Veen\",\n \"Matthias Wetter\"\n ]);\n y = this.addCredit(credits, y, x, \"SFX\", [\"freesound.org\"]);\n totalCrawlHeight = y;\n return credits;\n }\n activate() {\n if (this.targetMusic) {\n this.targetMusic.setLoop(true);\n this.targetMusic.setVolume(1);\n this.targetMusic.play();\n }\n this.input.onButtonDown.connect(this.handleButtonDown, this);\n }\n deactivate() {\n if (this.targetMusic) {\n this.targetMusic.stop();\n }\n this.input.onButtonDown.disconnect(this.handleButtonDown, this);\n }\n handleButtonDown(event) {\n return tslib_1.__awaiter(this, void 0, void 0, function* () {\n if (this.game.scenes.getPreviousScene() instanceof TitleScene_1.TitleScene) {\n this.game.scenes.popScene();\n }\n else {\n yield this.game.scenes.popScene({ noTransition: true });\n this.game.scenes.setScene(TitleScene_1.TitleScene);\n }\n });\n }\n addTitle(credits, y, x) {\n const gap = 5;\n const titleText = \"Friendly Fire\";\n const versionText = util_1.isDev() ? \"DEVELOPMENT VERSION\" : `Version ${CreditsScene.appInfo.version}`;\n y += new TextNode_1.TextNode({\n font: CreditsScene.headlineFont,\n text: titleText,\n anchor: Direction_1.Direction.TOP_LEFT,\n x, y,\n color: \"white\"\n }).appendTo(credits).getHeight();\n y += gap;\n y += new TextNode_1.TextNode({\n font: CreditsScene.standardFont,\n text: versionText,\n anchor: Direction_1.Direction.TOP_LEFT,\n x, y,\n color: \"white\"\n }).appendTo(credits).getHeight();\n return y + gap + 20;\n }\n addParagraph(credits, y, x, lines, marginBottom = 10) {\n lines.forEach(line => {\n y += new TextNode_1.TextNode({\n font: CreditsScene.standardFont,\n text: line,\n anchor: Direction_1.Direction.TOP_LEFT,\n x, y,\n color: \"white\"\n }).appendTo(credits).getHeight();\n });\n return y + marginBottom;\n }\n addCredit(credits, y, x, title, names) {\n const gap = 5;\n y += new TextNode_1.TextNode({\n font: CreditsScene.creditsFont,\n text: title,\n anchor: Direction_1.Direction.TOP_LEFT,\n x, y,\n color: \"white\"\n }).appendTo(credits).getHeight();\n y += this.lineSpacing + gap;\n names.forEach(name => {\n y += new TextNode_1.TextNode({\n font: CreditsScene.standardFont,\n text: name,\n anchor: Direction_1.Direction.TOP_LEFT,\n x, y,\n color: \"white\"\n }).appendTo(credits).getHeight();\n });\n return y + 40;\n }\n}\ntslib_1.__decorate([\n Assets_1.asset([\n \"music/a-vision-of-fire-acoustic.ogg\",\n \"music/a-vision-of-fire-orchestral.ogg\",\n \"music/a-vision-of-fire.ogg\",\n ]),\n tslib_1.__metadata(\"design:type\", Array)\n], CreditsScene, \"music\", void 0);\ntslib_1.__decorate([\n Assets_1.asset([\n \"sprites/stars/star1.aseprite.json\",\n \"sprites/stars/star2.aseprite.json\",\n \"sprites/stars/star3.aseprite.json\",\n \"sprites/stars/star4.aseprite.json\",\n \"sprites/stars/star5.aseprite.json\"\n ]),\n tslib_1.__metadata(\"design:type\", Array)\n], CreditsScene, \"stars\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/credits/leaf.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], CreditsScene, \"leaf\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/credits/spaceship.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], CreditsScene, \"spaceship\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/credits/spaceshipsmall.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], CreditsScene, \"spaceshipsmall\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"images/credits/bg.png\"),\n tslib_1.__metadata(\"design:type\", HTMLImageElement)\n], CreditsScene, \"backgroundImage\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"images/credits/bg-space.png\"),\n tslib_1.__metadata(\"design:type\", HTMLImageElement)\n], CreditsScene, \"backgroundImageSpace\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"images/credits/overlay.png\"),\n tslib_1.__metadata(\"design:type\", HTMLImageElement)\n], CreditsScene, \"overlayImage\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"fonts/headline.font.json\"),\n tslib_1.__metadata(\"design:type\", BitmapFont_1.BitmapFont)\n], CreditsScene, \"headlineFont\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(constants_1.DIALOG_FONT),\n tslib_1.__metadata(\"design:type\", BitmapFont_1.BitmapFont)\n], CreditsScene, \"standardFont\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"fonts/credits.font.json\"),\n tslib_1.__metadata(\"design:type\", BitmapFont_1.BitmapFont)\n], CreditsScene, \"creditsFont\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"appinfo.json\"),\n tslib_1.__metadata(\"design:type\", Object)\n], CreditsScene, \"appInfo\", void 0);\nexports.CreditsScene = CreditsScene;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvc2NlbmVzL0NyZWRpdHNTY2VuZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9zY2VuZXMvQ3JlZGl0c1NjZW5lLnRzP2JlMmIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwSW5mb0pTT04gfSBmcm9tIFwiYXBwaW5mby5qc29uXCI7XHJcbmltcG9ydCB7IEFzZXByaXRlIH0gZnJvbSBcIi4uL0FzZXByaXRlXCI7XHJcbmltcG9ydCB7IGFzc2V0IH0gZnJvbSBcIi4uL0Fzc2V0c1wiO1xyXG5pbXBvcnQgeyBCaXRtYXBGb250IH0gZnJvbSBcIi4uL0JpdG1hcEZvbnRcIjtcclxuaW1wb3J0IHsgQ29udHJvbGxlckV2ZW50IH0gZnJvbSBcIi4uL2lucHV0L0NvbnRyb2xsZXJFdmVudFwiO1xyXG5pbXBvcnQgeyBESUFMT0dfRk9OVCwgR0FNRV9DQU5WQVNfV0lEVEggfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IGVhc2VPdXRDdWJpYyB9IGZyb20gXCIuLi9lYXNpbmdzXCI7XHJcbmltcG9ydCB7IEZhZGVUcmFuc2l0aW9uIH0gZnJvbSBcIi4uL3RyYW5zaXRpb25zL0ZhZGVUcmFuc2l0aW9uXCI7XHJcbmltcG9ydCB7IEZyaWVuZGx5RmlyZSB9IGZyb20gXCIuLi9GcmllbmRseUZpcmVcIjtcclxuaW1wb3J0IHsgaXNEZXYgfSBmcm9tIFwiLi4vdXRpbFwiO1xyXG5pbXBvcnQgeyBTY2VuZSB9IGZyb20gXCIuLi9TY2VuZVwiO1xyXG5pbXBvcnQgeyBTb3VuZCB9IGZyb20gXCIuLi9Tb3VuZFwiO1xyXG5pbXBvcnQgeyBUaXRsZVNjZW5lIH0gZnJvbSBcIi4vVGl0bGVTY2VuZVwiO1xyXG5pbXBvcnQgeyBEaXJlY3Rpb24gfSBmcm9tIFwiLi4vZ2VvbS9EaXJlY3Rpb25cIjtcclxuaW1wb3J0IHsgVGV4dE5vZGUgfSBmcm9tIFwiLi4vc2NlbmUvVGV4dE5vZGVcIjtcclxuaW1wb3J0IHsgU2NlbmVOb2RlIH0gZnJvbSBcIi4uL3NjZW5lL1NjZW5lTm9kZVwiO1xyXG5pbXBvcnQgeyBJbWFnZU5vZGUgfSBmcm9tIFwiLi4vc2NlbmUvSW1hZ2VOb2RlXCI7XHJcbmltcG9ydCB7IEFzZXByaXRlTm9kZSB9IGZyb20gXCIuLi9zY2VuZS9Bc2Vwcml0ZU5vZGVcIjtcclxuaW1wb3J0IHsgUXVlc3RLZXkgfSBmcm9tIFwiLi4vUXVlc3RzXCI7XHJcbmltcG9ydCB7IENoYXJhY3RlckFzc2V0IH0gZnJvbSBcIi4uL0NhbXBhaWduXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ3JlZGl0c1NjZW5lIGV4dGVuZHMgU2NlbmU8RnJpZW5kbHlGaXJlPiB7XHJcbiAgICBAYXNzZXQoW1xyXG4gICAgICAgIFwibXVzaWMvYS12aXNpb24tb2YtZmlyZS1hY291c3RpYy5vZ2dcIixcclxuICAgICAgICBcIm11c2ljL2EtdmlzaW9uLW9mLWZpcmUtb3JjaGVzdHJhbC5vZ2dcIixcclxuICAgICAgICBcIm11c2ljL2EtdmlzaW9uLW9mLWZpcmUub2dnXCIsXHJcbiAgICBdKVxyXG4gICAgcHVibGljIHN0YXRpYyBtdXNpYzogU291bmRbXTtcclxuXHJcbiAgICBAYXNzZXQoW1xyXG4gICAgICAgIFwic3ByaXRlcy9zdGFycy9zdGFyMS5hc2Vwcml0ZS5qc29uXCIsXHJcbiAgICAgICAgXCJzcHJpdGVzL3N0YXJzL3N0YXIyLmFzZXByaXRlLmpzb25cIixcclxuICAgICAgICBcInNwcml0ZXMvc3RhcnMvc3RhcjMuYXNlcHJpdGUuanNvblwiLFxyXG4gICAgICAgIFwic3ByaXRlcy9zdGFycy9zdGFyNC5hc2Vwcml0ZS5qc29uXCIsXHJcbiAgICAgICAgXCJzcHJpdGVzL3N0YXJzL3N0YXI1LmFzZXByaXRlLmpzb25cIlxyXG4gICAgXSlcclxuICAgIHByaXZhdGUgc3RhdGljIHN0YXJzOiBBc2Vwcml0ZVtdO1xyXG5cclxuICAgIEBhc3NldChcInNwcml0ZXMvY3JlZGl0cy9sZWFmLmFzZXByaXRlLmpzb25cIilcclxuICAgIHByaXZhdGUgc3RhdGljIGxlYWY6IEFzZXByaXRlO1xyXG5cclxuICAgIEBhc3NldChcInNwcml0ZXMvY3JlZGl0cy9zcGFjZXNoaXAuYXNlcHJpdGUuanNvblwiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgc3BhY2VzaGlwOiBBc2Vwcml0ZTtcclxuXHJcbiAgICBAYXNzZXQoXCJzcHJpdGVzL2NyZWRpdHMvc3BhY2VzaGlwc21hbGwuYXNlcHJpdGUuanNvblwiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgc3BhY2VzaGlwc21hbGw6IEFzZXByaXRlO1xyXG5cclxuICAgIHByaXZhdGUgc3RhclBvc2l0aW9uczogbnVtYmVyW11bXSA9IFtcclxuICAgICAgICBbMzE4LCAxMF0sXHJcbiAgICAgICAgWzI4OCwgMTldLFxyXG4gICAgICAgIFsyNjAsIDEwMF0sXHJcbiAgICAgICAgWzM3MCwgOTFdLFxyXG4gICAgICAgIFs0MDksIDQ5XSxcclxuICAgICAgICBbNDQ2LCAxOV0sXHJcbiAgICAgICAgWzQzNiwgOTddLFxyXG4gICAgICAgIFsxODUsIDkzXSxcclxuICAgICAgICBbMTU5LCA0OV0sXHJcbiAgICAgICAgWzMyMiwgNzJdLFxyXG4gICAgICAgIFsxNTMsIDEwXSxcclxuICAgICAgICBbMjExLCAyMF0sXHJcbiAgICAgICAgWzU5LCAyMl0sXHJcbiAgICAgICAgWzE3LCAxMV0sXHJcbiAgICAgICAgWzEwMiwgMTA4XVxyXG4gICAgXTtcclxuXHJcbiAgICBAYXNzZXQoXCJpbWFnZXMvY3JlZGl0cy9iZy5wbmdcIilcclxuICAgIHByaXZhdGUgc3RhdGljIGJhY2tncm91bmRJbWFnZTogSFRNTEltYWdlRWxlbWVudDtcclxuXHJcbiAgICBAYXNzZXQoXCJpbWFnZXMvY3JlZGl0cy9iZy1zcGFjZS5wbmdcIilcclxuICAgIHByaXZhdGUgc3RhdGljIGJhY2tncm91bmRJbWFnZVNwYWNlOiBIVE1MSW1hZ2VFbGVtZW50O1xyXG5cclxuICAgIEBhc3NldChcImltYWdlcy9jcmVkaXRzL292ZXJsYXkucG5nXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBvdmVybGF5SW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQ7XHJcblxyXG4gICAgQGFzc2V0KFwiZm9udHMvaGVhZGxpbmUuZm9udC5qc29uXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBoZWFkbGluZUZvbnQ6IEJpdG1hcEZvbnQ7XHJcblxyXG4gICAgQGFzc2V0KERJQUxPR19GT05UKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgc3RhbmRhcmRGb250OiBCaXRtYXBGb250O1xyXG5cclxuICAgIEBhc3NldChcImZvbnRzL2NyZWRpdHMuZm9udC5qc29uXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBjcmVkaXRzRm9udDogQml0bWFwRm9udDtcclxuXHJcbiAgICBAYXNzZXQoXCJhcHBpbmZvLmpzb25cIilcclxuICAgIHByaXZhdGUgc3RhdGljIGFwcEluZm86IEFwcEluZm9KU09OO1xyXG5cclxuICAgIHByaXZhdGUgbGluZVNwYWNpbmcgPSA0O1xyXG4gICAgcHJpdmF0ZSB0YXJnZXRNdXNpYzogU291bmQgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBwcml2YXRlIGdldENvcnJlY3RCYWNrZ3JvdW5kVHJhY2soKTogU291bmQge1xyXG4gICAgICAgIGNvbnN0IGVuZGluZyA9IHRoaXMuZ2FtZS5jYW1wYWlnbi5xdWVzdHMuZmluZChxID0+IHEuaXNGaW5pc2hlZCgpKTtcclxuICAgICAgICBpZiAoZW5kaW5nICYmIGVuZGluZy5rZXkgPT09IFF1ZXN0S2V5LkUpIHJldHVybiBDcmVkaXRzU2NlbmUubXVzaWNbMl07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdhbWUuY2FtcGFpZ24uc2VsZWN0ZWRDaGFyYWN0ZXIgPT09IENoYXJhY3RlckFzc2V0LkZFTUFMRSkgcmV0dXJuIENyZWRpdHNTY2VuZS5tdXNpY1sxXTtcclxuICAgICAgICBpZiAodGhpcy5nYW1lLmNhbXBhaWduLnNlbGVjdGVkQ2hhcmFjdGVyID09PSBDaGFyYWN0ZXJBc3NldC5NQUxFKSByZXR1cm4gQ3JlZGl0c1NjZW5lLm11c2ljWzBdO1xyXG4gICAgICAgIHJldHVybiBDcmVkaXRzU2NlbmUubXVzaWNbMl07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHNldHVwKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGNvbnN0IGVuZGluZyA9IHRoaXMuZ2FtZS5jYW1wYWlnbi5xdWVzdHMuZmluZChxID0+IHEuaXNGaW5pc2hlZCgpKTtcclxuICAgICAgICB0aGlzLnpJbmRleCA9IDI7XHJcbiAgICAgICAgdGhpcy5pblRyYW5zaXRpb24gPSBuZXcgRmFkZVRyYW5zaXRpb24oeyBkdXJhdGlvbjogMC41LCBlYXNpbmc6IGVhc2VPdXRDdWJpYyB9KTtcclxuICAgICAgICB0aGlzLm91dFRyYW5zaXRpb24gPSBuZXcgRmFkZVRyYW5zaXRpb24oeyBkdXJhdGlvbjogMC4yNSB9KTtcclxuICAgICAgICB0aGlzLnRhcmdldE11c2ljID0gdGhpcy5nZXRDb3JyZWN0QmFja2dyb3VuZFRyYWNrKCk7XHJcblxyXG4gICAgICAgIGlmIChlbmRpbmcgJiYgZW5kaW5nLmtleSA9PT0gUXVlc3RLZXkuRSkge1xyXG4gICAgICAgICAgICAvLyBUaGUgYmFja2dyb3VuZFxyXG4gICAgICAgICAgICBuZXcgSW1hZ2VOb2RlKHtcclxuICAgICAgICAgICAgICAgIGltYWdlOiBDcmVkaXRzU2NlbmUuYmFja2dyb3VuZEltYWdlU3BhY2UsXHJcbiAgICAgICAgICAgICAgICBhbmNob3I6IERpcmVjdGlvbi5UT1BfTEVGVFxyXG4gICAgICAgICAgICB9KS5hcHBlbmRUbyh0aGlzLnJvb3ROb2RlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFNwYWNlc2hpcFxyXG4gICAgICAgICAgICBuZXcgQXNlcHJpdGVOb2RlKHtcclxuICAgICAgICAgICAgICAgIGFzZXByaXRlOiBDcmVkaXRzU2NlbmUuc3BhY2VzaGlwLFxyXG4gICAgICAgICAgICAgICAgdGFnOiBcImlkbGVcIixcclxuICAgICAgICAgICAgICAgIGFuY2hvcjogRGlyZWN0aW9uLlRPUF9MRUZULFxyXG4gICAgICAgICAgICAgICAgeDogR0FNRV9DQU5WQVNfV0lEVEgsXHJcbiAgICAgICAgICAgICAgICB5OiAyMDBcclxuICAgICAgICAgICAgfSkuYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgICAgICBhbmltYXRvcjogKG5vZGUsIHZhbHVlKSA9PiBub2RlLnNldFgoKEdBTUVfQ0FOVkFTX1dJRFRIICsgNTApIC0gdmFsdWUgKiBHQU1FX0NBTlZBU19XSURUSCksXHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMTAwLFxyXG4gICAgICAgICAgICB9KS5hcHBlbmRUbyh0aGlzLnJvb3ROb2RlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFNwYWNlc2hpcFxyXG4gICAgICAgICAgICBuZXcgQXNlcHJpdGVOb2RlKHtcclxuICAgICAgICAgICAgICAgIGFzZXByaXRlOiBDcmVkaXRzU2NlbmUuc3BhY2VzaGlwc21hbGwsXHJcbiAgICAgICAgICAgICAgICB0YWc6IFwiaWRsZVwiLFxyXG4gICAgICAgICAgICAgICAgYW5jaG9yOiBEaXJlY3Rpb24uVE9QX0xFRlQsXHJcbiAgICAgICAgICAgICAgICB4OiBHQU1FX0NBTlZBU19XSURUSCxcclxuICAgICAgICAgICAgICAgIHk6IDE4NVxyXG4gICAgICAgICAgICB9KS5hbmltYXRlKHtcclxuICAgICAgICAgICAgICAgIGFuaW1hdG9yOiAobm9kZSwgdmFsdWUpID0+IG5vZGUuc2V0WCgoR0FNRV9DQU5WQVNfV0lEVEggKyAxMCkgLSB2YWx1ZSAqIEdBTUVfQ0FOVkFTX1dJRFRIKSxcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAsXHJcbiAgICAgICAgICAgIH0pLmFwcGVuZFRvKHRoaXMucm9vdE5vZGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIFRoZSBiYWNrZ3JvdW5kXHJcbiAgICAgICAgICAgIG5ldyBJbWFnZU5vZGUoe1xyXG4gICAgICAgICAgICAgICAgaW1hZ2U6IENyZWRpdHNTY2VuZS5iYWNrZ3JvdW5kSW1hZ2UsXHJcbiAgICAgICAgICAgICAgICBhbmNob3I6IERpcmVjdGlvbi5UT1BfTEVGVFxyXG4gICAgICAgICAgICB9KS5hcHBlbmRUbyh0aGlzLnJvb3ROb2RlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFRoZSBibGlua2luZyBzdGFyc1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJQb3NpdGlvbnMuZm9yRWFjaCgocG9zLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbmV3IEFzZXByaXRlTm9kZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgYXNlcHJpdGU6IENyZWRpdHNTY2VuZS5zdGFyc1tpbmRleCAlIENyZWRpdHNTY2VuZS5zdGFycy5sZW5ndGhdLFxyXG4gICAgICAgICAgICAgICAgICAgIHRhZzogXCJpZGxlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgYW5jaG9yOiBEaXJlY3Rpb24uVE9QX0xFRlQsXHJcbiAgICAgICAgICAgICAgICAgICAgeDogcG9zWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgIHk6IHBvc1sxXVxyXG4gICAgICAgICAgICAgICAgfSkuYXBwZW5kVG8odGhpcy5yb290Tm9kZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gVGhlIHRyZWUgbGVhZlxyXG4gICAgICAgICAgICBuZXcgQXNlcHJpdGVOb2RlKHtcclxuICAgICAgICAgICAgICAgIGFzZXByaXRlOiBDcmVkaXRzU2NlbmUubGVhZixcclxuICAgICAgICAgICAgICAgIHRhZzogXCJpZGxlXCIsXHJcbiAgICAgICAgICAgICAgICBhbmNob3I6IERpcmVjdGlvbi5UT1BfTEVGVCxcclxuICAgICAgICAgICAgICAgIHg6IDQxNCxcclxuICAgICAgICAgICAgICAgIHk6IDE2M1xyXG4gICAgICAgICAgICB9KS5hcHBlbmRUbyh0aGlzLnJvb3ROb2RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVGhlIGdyYWRpZW50IGJhY2tncm91bmQgYmVoaW5kIHRoZSBzY3JvbGxpbmcgY3JlZGl0cyB0ZXh0XHJcbiAgICAgICAgbmV3IEltYWdlTm9kZSh7XHJcbiAgICAgICAgICAgIGltYWdlOiBDcmVkaXRzU2NlbmUub3ZlcmxheUltYWdlLFxyXG4gICAgICAgICAgICBhbmNob3I6IERpcmVjdGlvbi5UT1BfTEVGVCxcclxuICAgICAgICAgICAgb3BhY2l0eTogMC43NVxyXG4gICAgICAgIH0pLmFwcGVuZFRvKHRoaXMucm9vdE5vZGUpO1xyXG5cclxuICAgICAgICAvLyBUaGUgc2Nyb2xsaW5nIGNyZWRpdHMgdGV4dFxyXG4gICAgICAgIHRoaXMuY3JlYXRlQ3JlZGl0c05vZGUoKS5hcHBlbmRUbyh0aGlzLnJvb3ROb2RlKTtcclxuXHJcbiAgICAgICAgLy8gU2hvcnRlbmVkIEdpdCBjb21taXQgaGFzaCB0byBwcm92aWRlIHN1cHBvcnRcclxuICAgICAgICBuZXcgVGV4dE5vZGUoe1xyXG4gICAgICAgICAgICBmb250OiBDcmVkaXRzU2NlbmUuc3RhbmRhcmRGb250LFxyXG4gICAgICAgICAgICB0ZXh0OiBDcmVkaXRzU2NlbmUuYXBwSW5mby5naXRDb21taXRIYXNoLnN1YnN0cigwLCAxNiksXHJcbiAgICAgICAgICAgIGFuY2hvcjogRGlyZWN0aW9uLkJPVFRPTV9SSUdIVCxcclxuICAgICAgICAgICAgeDogdGhpcy5nYW1lLndpZHRoIC0gNyxcclxuICAgICAgICAgICAgeTogdGhpcy5nYW1lLmhlaWdodCAtIDQsXHJcbiAgICAgICAgICAgIGNvbG9yOiBcIndoaXRlXCJcclxuICAgICAgICB9KS5hcHBlbmRUbyh0aGlzLnJvb3ROb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYW51cCgpIHtcclxuICAgICAgICB0aGlzLnJvb3ROb2RlLmNsZWFyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVDcmVkaXRzTm9kZSgpOiBTY2VuZU5vZGUge1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0WSA9IHRoaXMuZ2FtZS5oZWlnaHQgKyA1MDtcclxuICAgICAgICBsZXQgdG90YWxDcmF3bEhlaWdodCA9IDA7XHJcblxyXG4gICAgICAgIGNvbnN0IGNyZWRpdHMgPSBuZXcgU2NlbmVOb2RlKCkuYXBwZW5kVG8odGhpcy5yb290Tm9kZSkuYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgIGFuaW1hdG9yOiAobm9kZSwgdmFsdWUsIGVsYXBzZWQpID0+IHtcclxuICAgICAgICAgICAgICAgIG5vZGUuc2V0WShzdGFydFkgLSAoZWxhcHNlZCAqIDEwMDAgLyAzNikgJSAodG90YWxDcmF3bEhlaWdodCArIHN0YXJ0WSkpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkdXJhdGlvbjogSW5maW5pdHlcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgeCA9IDIwO1xyXG4gICAgICAgIGxldCB5ID0gdGhpcy5hZGRUaXRsZShjcmVkaXRzLCAwLCB4KTtcclxuXHJcbiAgICAgICAgeSA9IHRoaXMuYWRkUGFyYWdyYXBoKGNyZWRpdHMsIHksIHgsIFtcclxuICAgICAgICAgICAgXCJPcmlnaW5hbGx5IG1hZGUgYXMgYSB0ZWFtXCIsXHJcbiAgICAgICAgICAgIFwiZWZmb3J0IGZvciBMdWR1bSBEYXJlIDQ2XCIsXHJcbiAgICAgICAgICAgIFwiaW4gdGhyZWUgZGF5cyBieVwiXHJcbiAgICAgICAgXSk7XHJcblxyXG4gICAgICAgIHkgPSB0aGlzLmFkZFBhcmFncmFwaChjcmVkaXRzLCB5LCB4LCBbXHJcbiAgICAgICAgICAgIFwiRWR1YXJkIEJ1dCwgTmljbyBIw7xsc2NoZXIsXCIsXHJcbiAgICAgICAgICAgIFwiQmVuamFtaW4gSnVuZywgTmlscyBLcmV1dHplcixcIixcclxuICAgICAgICAgICAgXCJCYXN0aWFuIExhbmcsIFJhbmppdCBNZXZpdXMsXCIsXHJcbiAgICAgICAgICAgIFwiTWFya3VzIE92ZXIsIEtsYXVzIFJlaW1lcixcIixcclxuICAgICAgICAgICAgXCJhbmQgSmVubmlmZXIgdmFuIFZlZW5cIlxyXG4gICAgICAgIF0sIDUwKTtcclxuXHJcbiAgICAgICAgeSA9IHRoaXMuYWRkQ3JlZGl0KGNyZWRpdHMsIHksIHgsIFwiR0FNRSBERVNJR05cIiwgW1wiRXZlcnlvbmVcIl0pO1xyXG5cclxuICAgICAgICB5ID0gdGhpcy5hZGRDcmVkaXQoY3JlZGl0cywgeSwgeCwgXCJTVE9SWVwiLCBbXHJcbiAgICAgICAgICAgIFwiTWFya3VzIE92ZXJcIixcclxuICAgICAgICAgICAgXCJKZW5uaWZlciB2YW4gVmVlblwiLFxyXG4gICAgICAgICAgICBcIlJhbmppdCBNZXZpdXNcIixcclxuICAgICAgICAgICAgXCJOaWxzIEtyZXV0emVyXCJcclxuICAgICAgICBdKTtcclxuXHJcbiAgICAgICAgeSA9IHRoaXMuYWRkQ3JlZGl0KGNyZWRpdHMsIHksIHgsIFwiUFJPR1JBTU1JTkdcIiwgW1xyXG4gICAgICAgICAgICBcIk5pY28gSMO8bHNjaGVyXCIsXHJcbiAgICAgICAgICAgIFwiQmVuamFtaW4gSnVuZ1wiLFxyXG4gICAgICAgICAgICBcIk5pbHMgS3JldXR6ZXJcIixcclxuICAgICAgICAgICAgXCJSYW5qaXQgTWV2aXVzXCIsXHJcbiAgICAgICAgICAgIFwiTWFya3VzIE92ZXJcIixcclxuICAgICAgICAgICAgXCJLbGF1cyBSZWltZXJcIixcclxuICAgICAgICAgICAgXCJFZHVhcmQgQnV0XCIsXHJcbiAgICAgICAgICAgIFwiTWF0dGhpYXMgV2V0dGVyXCJcclxuICAgICAgICBdKTtcclxuXHJcbiAgICAgICAgeSA9IHRoaXMuYWRkQ3JlZGl0KGNyZWRpdHMsIHksIHgsIFwiU0NSSVBUSU5HXCIsIFtcclxuICAgICAgICAgICAgXCJNYXJrdXMgT3ZlclwiLFxyXG4gICAgICAgICAgICBcIkVkdWFyZCBCdXRcIlxyXG4gICAgICAgIF0pO1xyXG5cclxuICAgICAgICB5ID0gdGhpcy5hZGRDcmVkaXQoY3JlZGl0cywgeSwgeCwgXCJBUlQgRElSRUNUSU9OXCIsIFtcIkVkdWFyZCBCdXRcIl0pO1xyXG5cclxuICAgICAgICB5ID0gdGhpcy5hZGRDcmVkaXQoY3JlZGl0cywgeSwgeCwgXCIyRCBBUlRcIiwgW1xyXG4gICAgICAgICAgICBcIkVkdWFyZCBCdXRcIixcclxuICAgICAgICAgICAgXCJOaWxzIEtyZXV0emVyXCIsXHJcbiAgICAgICAgICAgIFwiQ2hyaXN0aW5hIFNjaG5laWRlclwiLFxyXG4gICAgICAgICAgICBcIkplbm5pZmVyIHZhbiBWZWVuXCIsXHJcbiAgICAgICAgICAgIFwiTWF0dGhpYXMgV2V0dGVyXCJcclxuICAgICAgICBdKTtcclxuXHJcbiAgICAgICAgeSA9IHRoaXMuYWRkQ3JlZGl0KGNyZWRpdHMsIHksIHgsIFwiV1JJVElOR1wiLCBbXHJcbiAgICAgICAgICAgIFwiTWFya3VzIE92ZXJcIixcclxuICAgICAgICAgICAgXCJKZW5uaWZlciB2YW4gVmVlblwiLFxyXG4gICAgICAgICAgICBcIkVkdWFyZCBCdXRcIlxyXG4gICAgICAgIF0pO1xyXG5cclxuICAgICAgICB5ID0gdGhpcy5hZGRDcmVkaXQoY3JlZGl0cywgeSwgeCwgXCJMRVZFTCBERVNJR05cIiwgW1xyXG4gICAgICAgICAgICBcIkVkdWFyZCBCdXRcIixcclxuICAgICAgICAgICAgXCJOaWxzIEtyZXV0emVyXCIsXHJcbiAgICAgICAgICAgIFwiSmVubmlmZXIgdmFuIFZlZW5cIlxyXG4gICAgICAgIF0pO1xyXG5cclxuICAgICAgICB5ID0gdGhpcy5hZGRDcmVkaXQoY3JlZGl0cywgeSwgeCwgXCJESVNUUklCVVRJT05cIiwgW1xyXG4gICAgICAgICAgICBcIkJlbmphbWluIEp1bmdcIixcclxuICAgICAgICBdKTtcclxuXHJcbiAgICAgICAgeSA9IHRoaXMuYWRkQ3JlZGl0KGNyZWRpdHMsIHksIHgsIFwiTVVTSUNcIiwgW1xyXG4gICAgICAgICAgICBcIkJhc3RpYW4gTGFuZ1wiLFxyXG4gICAgICAgICAgICBcIkJlbmphbWluIEp1bmdcIixcclxuICAgICAgICAgICAgXCJFZHVhcmQgQnV0XCIsXHJcbiAgICAgICAgICAgIFwiTWF0dGhpYXMgV2V0dGVyXCJcclxuICAgICAgICBdKTtcclxuXHJcbiAgICAgICAgeSA9IHRoaXMuYWRkQ3JlZGl0KGNyZWRpdHMsIHksIHgsIFwiUUFcIiwgW1xyXG4gICAgICAgICAgICBcIkplbm5pZmVyIHZhbiBWZWVuXCIsXHJcbiAgICAgICAgICAgIFwiTWF0dGhpYXMgV2V0dGVyXCJcclxuICAgICAgICBdKTtcclxuXHJcbiAgICAgICAgeSA9IHRoaXMuYWRkQ3JlZGl0KGNyZWRpdHMsIHksIHgsIFwiU0ZYXCIsIFtcImZyZWVzb3VuZC5vcmdcIl0pO1xyXG5cclxuICAgICAgICB0b3RhbENyYXdsSGVpZ2h0ID0geTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNyZWRpdHM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFjdGl2YXRlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnRhcmdldE11c2ljKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0TXVzaWMuc2V0TG9vcCh0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy50YXJnZXRNdXNpYy5zZXRWb2x1bWUoMSk7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0TXVzaWMucGxheSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlucHV0Lm9uQnV0dG9uRG93bi5jb25uZWN0KHRoaXMuaGFuZGxlQnV0dG9uRG93biwgdGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlYWN0aXZhdGUoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMudGFyZ2V0TXVzaWMpIHtcclxuICAgICAgICAgICAgdGhpcy50YXJnZXRNdXNpYy5zdG9wKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaW5wdXQub25CdXR0b25Eb3duLmRpc2Nvbm5lY3QodGhpcy5oYW5kbGVCdXR0b25Eb3duLCB0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGhhbmRsZUJ1dHRvbkRvd24oZXZlbnQ6IENvbnRyb2xsZXJFdmVudCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGlmICh0aGlzLmdhbWUuc2NlbmVzLmdldFByZXZpb3VzU2NlbmUoKSBpbnN0YW5jZW9mIFRpdGxlU2NlbmUpIHtcclxuICAgICAgICAgICAgdGhpcy5nYW1lLnNjZW5lcy5wb3BTY2VuZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2FtZS5zY2VuZXMucG9wU2NlbmUoeyBub1RyYW5zaXRpb246IHRydWUgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2FtZS5zY2VuZXMuc2V0U2NlbmUoVGl0bGVTY2VuZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWRkVGl0bGUoY3JlZGl0czogU2NlbmVOb2RlLCB5OiBudW1iZXIsIHg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgZ2FwID0gNTtcclxuICAgICAgICBjb25zdCB0aXRsZVRleHQgPSBcIkZyaWVuZGx5IEZpcmVcIjtcclxuICAgICAgICBjb25zdCB2ZXJzaW9uVGV4dCA9IGlzRGV2KCkgPyBcIkRFVkVMT1BNRU5UIFZFUlNJT05cIiA6IGBWZXJzaW9uICR7Q3JlZGl0c1NjZW5lLmFwcEluZm8udmVyc2lvbn1gO1xyXG5cclxuICAgICAgICB5ICs9IG5ldyBUZXh0Tm9kZSh7XHJcbiAgICAgICAgICAgIGZvbnQ6IENyZWRpdHNTY2VuZS5oZWFkbGluZUZvbnQsXHJcbiAgICAgICAgICAgIHRleHQ6IHRpdGxlVGV4dCxcclxuICAgICAgICAgICAgYW5jaG9yOiBEaXJlY3Rpb24uVE9QX0xFRlQsXHJcbiAgICAgICAgICAgIHgsIHksXHJcbiAgICAgICAgICAgIGNvbG9yOiBcIndoaXRlXCJcclxuICAgICAgICB9KS5hcHBlbmRUbyhjcmVkaXRzKS5nZXRIZWlnaHQoKTtcclxuXHJcbiAgICAgICAgeSArPSBnYXA7XHJcblxyXG4gICAgICAgIHkgKz0gbmV3IFRleHROb2RlKHtcclxuICAgICAgICAgICAgZm9udDogQ3JlZGl0c1NjZW5lLnN0YW5kYXJkRm9udCxcclxuICAgICAgICAgICAgdGV4dDogdmVyc2lvblRleHQsXHJcbiAgICAgICAgICAgIGFuY2hvcjogRGlyZWN0aW9uLlRPUF9MRUZULFxyXG4gICAgICAgICAgICB4LCB5LFxyXG4gICAgICAgICAgICBjb2xvcjogXCJ3aGl0ZVwiXHJcbiAgICAgICAgfSkuYXBwZW5kVG8oY3JlZGl0cykuZ2V0SGVpZ2h0KCk7XHJcblxyXG4gICAgICAgIHJldHVybiB5ICsgZ2FwICsgMjA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRQYXJhZ3JhcGgoY3JlZGl0czogU2NlbmVOb2RlLCB5OiBudW1iZXIsIHg6IG51bWJlciwgbGluZXM6IHN0cmluZ1tdLCBtYXJnaW5Cb3R0b20gPSAxMCk6IG51bWJlciB7XHJcbiAgICAgICAgbGluZXMuZm9yRWFjaChsaW5lID0+IHtcclxuICAgICAgICAgICAgeSArPSBuZXcgVGV4dE5vZGUoe1xyXG4gICAgICAgICAgICAgICAgZm9udDogQ3JlZGl0c1NjZW5lLnN0YW5kYXJkRm9udCxcclxuICAgICAgICAgICAgICAgIHRleHQ6IGxpbmUsXHJcbiAgICAgICAgICAgICAgICBhbmNob3I6IERpcmVjdGlvbi5UT1BfTEVGVCxcclxuICAgICAgICAgICAgICAgIHgsIHksXHJcbiAgICAgICAgICAgICAgICBjb2xvcjogXCJ3aGl0ZVwiXHJcbiAgICAgICAgICAgIH0pLmFwcGVuZFRvKGNyZWRpdHMpLmdldEhlaWdodCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB5ICsgbWFyZ2luQm90dG9tO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWRkQ3JlZGl0KGNyZWRpdHM6IFNjZW5lTm9kZSwgeTogbnVtYmVyLCB4OiBudW1iZXIsIHRpdGxlOiBzdHJpbmcsIG5hbWVzOiBzdHJpbmdbXSk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgZ2FwID0gNTtcclxuXHJcbiAgICAgICAgeSArPSBuZXcgVGV4dE5vZGUoe1xyXG4gICAgICAgICAgICBmb250OiBDcmVkaXRzU2NlbmUuY3JlZGl0c0ZvbnQsXHJcbiAgICAgICAgICAgIHRleHQ6IHRpdGxlLFxyXG4gICAgICAgICAgICBhbmNob3I6IERpcmVjdGlvbi5UT1BfTEVGVCxcclxuICAgICAgICAgICAgeCwgeSxcclxuICAgICAgICAgICAgY29sb3I6IFwid2hpdGVcIlxyXG4gICAgICAgIH0pLmFwcGVuZFRvKGNyZWRpdHMpLmdldEhlaWdodCgpO1xyXG5cclxuICAgICAgICB5ICs9IHRoaXMubGluZVNwYWNpbmcgKyBnYXA7XHJcblxyXG4gICAgICAgIG5hbWVzLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgICAgICAgIHkgKz0gbmV3IFRleHROb2RlKHtcclxuICAgICAgICAgICAgICAgIGZvbnQ6IENyZWRpdHNTY2VuZS5zdGFuZGFyZEZvbnQsXHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBuYW1lLFxyXG4gICAgICAgICAgICAgICAgYW5jaG9yOiBEaXJlY3Rpb24uVE9QX0xFRlQsXHJcbiAgICAgICAgICAgICAgICB4LCB5LFxyXG4gICAgICAgICAgICAgICAgY29sb3I6IFwid2hpdGVcIlxyXG4gICAgICAgICAgICB9KS5hcHBlbmRUbyhjcmVkaXRzKS5nZXRIZWlnaHQoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHkgKyA0MDtcclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7O0FBMEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF1QkE7QUFDQTtBQStSQTtBQTdSQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBM1ZBO0FBTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQVNBO0FBUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFHQTtBQURBO0FBQ0E7QUFBQTtBQUdBO0FBREE7QUFDQTtBQUFBO0FBR0E7QUFEQTtBQUNBO0FBQUE7QUFxQkE7QUFEQTtBQUNBO0FBQUE7QUFHQTtBQURBO0FBQ0E7QUFBQTtBQUdBO0FBREE7QUFDQTtBQUFBO0FBR0E7QUFEQTtBQUNBO0FBQUE7QUFHQTtBQURBO0FBQ0E7QUFBQTtBQUdBO0FBREE7QUFDQTtBQUFBO0FBR0E7QUFEQTs7QUFDQTtBQS9EQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/scenes/CreditsScene.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/scenes/EndScene.js":
|
|
/*!********************************!*\
|
|
!*** ./lib/scenes/EndScene.js ***!
|
|
\********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EndScene = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst BitmapFont_1 = __webpack_require__(/*! ../BitmapFont */ \"./lib/BitmapFont.js\");\nconst ControllerFamily_1 = __webpack_require__(/*! ../input/ControllerFamily */ \"./lib/input/ControllerFamily.js\");\nconst CreditsScene_1 = __webpack_require__(/*! ./CreditsScene */ \"./lib/scenes/CreditsScene.js\");\nconst constants_1 = __webpack_require__(/*! ../constants */ \"./lib/constants.js\");\nconst Scene_1 = __webpack_require__(/*! ../Scene */ \"./lib/Scene.js\");\nconst Sound_1 = __webpack_require__(/*! ../Sound */ \"./lib/Sound.js\");\nconst ImageNode_1 = __webpack_require__(/*! ../scene/ImageNode */ \"./lib/scene/ImageNode.js\");\nconst TextNode_1 = __webpack_require__(/*! ../scene/TextNode */ \"./lib/scene/TextNode.js\");\nconst easings_1 = __webpack_require__(/*! ../easings */ \"./lib/easings.js\");\nconst Direction_1 = __webpack_require__(/*! ../geom/Direction */ \"./lib/geom/Direction.js\");\nconst GlobalState_1 = __webpack_require__(/*! ../GlobalState */ \"./lib/GlobalState.js\");\nclass EndScene extends Scene_1.Scene {\n constructor() {\n super(...arguments);\n this.subtitleDelay = 2;\n this.inputDelay = 4;\n }\n setup() {\n var _a;\n const ending = this.game.campaign.quests.find(q => q.isFinished());\n if (ending) {\n GlobalState_1.GlobalState.setAchievedEnding(ending.key);\n GlobalState_1.GlobalState.setHasBeatenGame();\n }\n // The logo image\n new ImageNode_1.ImageNode({\n image: EndScene.logo,\n x: this.game.width >> 1,\n y: (this.game.height >> 1) - 15\n }).appendTo(this.rootNode);\n // Fade in subtitle after a delay\n new TextNode_1.TextNode({\n font: EndScene.font,\n text: (_a = ending === null || ending === void 0 ? void 0 : ending.title) !== null && _a !== void 0 ? _a : \"Unknown [E]nding\",\n x: this.game.width >> 1,\n y: (this.game.height >> 1) + 11,\n color: \"red\",\n opacity: 0\n }).animate({\n animator: (node, value) => node.setOpacity(value),\n delay: this.subtitleDelay,\n duration: 0.5,\n easing: easings_1.easeOutQuad\n }).appendTo(this.rootNode);\n // Inform the user, that it's possible to return to the title\n const text = `Press any ${this.input.currentControllerFamily === ControllerFamily_1.ControllerFamily.KEYBOARD\n ? \"key\" : \"button\"} to continue.`;\n new TextNode_1.TextNode({\n font: EndScene.font,\n text,\n anchor: Direction_1.Direction.BOTTOM,\n x: this.game.width >> 1,\n y: this.game.height - 15,\n color: \"darkgrey\",\n opacity: 0\n }).animate({\n animator: (node, value) => node.setOpacity(value),\n delay: this.inputDelay,\n duration: 0.5,\n easing: easings_1.easeOutQuad\n }).appendTo(this.rootNode);\n }\n activate() {\n setTimeout(() => {\n EndScene.boom.setLoop(false);\n EndScene.boom.play();\n }, this.subtitleDelay * 1000);\n setTimeout(() => {\n this.input.onButtonDown.connect(this.gotoCreditsScene, this);\n }, this.inputDelay * 1000);\n }\n deactivate() {\n this.input.onButtonDown.disconnect(this.gotoCreditsScene, this);\n }\n gotoCreditsScene() {\n this.game.scenes.setScene(CreditsScene_1.CreditsScene);\n }\n cleanup() {\n this.rootNode.clear();\n }\n}\ntslib_1.__decorate([\n Assets_1.asset(constants_1.DIALOG_FONT),\n tslib_1.__metadata(\"design:type\", BitmapFont_1.BitmapFont)\n], EndScene, \"font\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"images/ending/ff.png\"),\n tslib_1.__metadata(\"design:type\", HTMLImageElement)\n], EndScene, \"logo\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/ending/boom.mp3\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], EndScene, \"boom\", void 0);\nexports.EndScene = EndScene;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvc2NlbmVzL0VuZFNjZW5lLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL3NjZW5lcy9FbmRTY2VuZS50cz9kOGY1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFzc2V0IH0gZnJvbSBcIi4uL0Fzc2V0c1wiO1xyXG5pbXBvcnQgeyBCaXRtYXBGb250IH0gZnJvbSBcIi4uL0JpdG1hcEZvbnRcIjtcclxuaW1wb3J0IHsgQ29udHJvbGxlckZhbWlseSB9IGZyb20gXCIuLi9pbnB1dC9Db250cm9sbGVyRmFtaWx5XCI7XHJcbmltcG9ydCB7IENyZWRpdHNTY2VuZSB9IGZyb20gXCIuL0NyZWRpdHNTY2VuZVwiO1xyXG5pbXBvcnQgeyBESUFMT0dfRk9OVCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgRnJpZW5kbHlGaXJlIH0gZnJvbSBcIi4uL0ZyaWVuZGx5RmlyZVwiO1xyXG5pbXBvcnQgeyBTY2VuZSB9IGZyb20gXCIuLi9TY2VuZVwiO1xyXG5pbXBvcnQgeyBTb3VuZCB9IGZyb20gXCIuLi9Tb3VuZFwiO1xyXG5pbXBvcnQgeyBJbWFnZU5vZGUgfSBmcm9tIFwiLi4vc2NlbmUvSW1hZ2VOb2RlXCI7XHJcbmltcG9ydCB7IFRleHROb2RlIH0gZnJvbSBcIi4uL3NjZW5lL1RleHROb2RlXCI7XHJcbmltcG9ydCB7IGVhc2VPdXRRdWFkIH0gZnJvbSBcIi4uL2Vhc2luZ3NcIjtcclxuaW1wb3J0IHsgRGlyZWN0aW9uIH0gZnJvbSBcIi4uL2dlb20vRGlyZWN0aW9uXCI7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlIH0gZnJvbSBcIi4uL0dsb2JhbFN0YXRlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgRW5kU2NlbmUgZXh0ZW5kcyBTY2VuZTxGcmllbmRseUZpcmU+IHtcclxuICAgIEBhc3NldChESUFMT0dfRk9OVClcclxuICAgIHByaXZhdGUgc3RhdGljIGZvbnQ6IEJpdG1hcEZvbnQ7XHJcblxyXG4gICAgQGFzc2V0KFwiaW1hZ2VzL2VuZGluZy9mZi5wbmdcIilcclxuICAgIHByaXZhdGUgc3RhdGljIGxvZ286IEhUTUxJbWFnZUVsZW1lbnQ7XHJcblxyXG4gICAgQGFzc2V0KFwic291bmRzL2VuZGluZy9ib29tLm1wM1wiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbTogU291bmQ7XHJcblxyXG4gICAgcHJpdmF0ZSBzdWJ0aXRsZURlbGF5ID0gMjtcclxuICAgIHByaXZhdGUgaW5wdXREZWxheSA9IDQ7XHJcblxyXG4gICAgcHVibGljIHNldHVwKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGVuZGluZyA9IHRoaXMuZ2FtZS5jYW1wYWlnbi5xdWVzdHMuZmluZChxID0+IHEuaXNGaW5pc2hlZCgpKTtcclxuXHJcbiAgICAgICAgaWYgKGVuZGluZykge1xyXG4gICAgICAgICAgICBHbG9iYWxTdGF0ZS5zZXRBY2hpZXZlZEVuZGluZyhlbmRpbmcua2V5KTtcclxuICAgICAgICAgICAgR2xvYmFsU3RhdGUuc2V0SGFzQmVhdGVuR2FtZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVGhlIGxvZ28gaW1hZ2VcclxuICAgICAgICBuZXcgSW1hZ2VOb2RlKHtcclxuICAgICAgICAgICAgaW1hZ2U6IEVuZFNjZW5lLmxvZ28sXHJcbiAgICAgICAgICAgIHg6IHRoaXMuZ2FtZS53aWR0aCA+PiAxLFxyXG4gICAgICAgICAgICB5OiAodGhpcy5nYW1lLmhlaWdodCA+PiAxKSAtIDE1XHJcbiAgICAgICAgfSkuYXBwZW5kVG8odGhpcy5yb290Tm9kZSk7XHJcblxyXG4gICAgICAgIC8vIEZhZGUgaW4gc3VidGl0bGUgYWZ0ZXIgYSBkZWxheVxyXG4gICAgICAgIG5ldyBUZXh0Tm9kZSh7XHJcbiAgICAgICAgICAgIGZvbnQ6IEVuZFNjZW5lLmZvbnQsXHJcbiAgICAgICAgICAgIHRleHQ6IGVuZGluZz8udGl0bGUgPz8gXCJVbmtub3duIFtFXW5kaW5nXCIsXHJcbiAgICAgICAgICAgIHg6IHRoaXMuZ2FtZS53aWR0aCA+PiAxLFxyXG4gICAgICAgICAgICB5OiAodGhpcy5nYW1lLmhlaWdodCA+PiAxKSArIDExLFxyXG4gICAgICAgICAgICBjb2xvcjogXCJyZWRcIixcclxuICAgICAgICAgICAgb3BhY2l0eTogMFxyXG4gICAgICAgIH0pLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICBhbmltYXRvcjogKG5vZGUsIHZhbHVlKSA9PiBub2RlLnNldE9wYWNpdHkodmFsdWUpLFxyXG4gICAgICAgICAgICBkZWxheTogdGhpcy5zdWJ0aXRsZURlbGF5LFxyXG4gICAgICAgICAgICBkdXJhdGlvbjogMC41LFxyXG4gICAgICAgICAgICBlYXNpbmc6IGVhc2VPdXRRdWFkXHJcbiAgICAgICAgfSkuYXBwZW5kVG8odGhpcy5yb290Tm9kZSk7XHJcblxyXG4gICAgICAgIC8vIEluZm9ybSB0aGUgdXNlciwgdGhhdCBpdCdzIHBvc3NpYmxlIHRvIHJldHVybiB0byB0aGUgdGl0bGVcclxuICAgICAgICBjb25zdCB0ZXh0ID0gYFByZXNzIGFueSAke3RoaXMuaW5wdXQuY3VycmVudENvbnRyb2xsZXJGYW1pbHkgPT09IENvbnRyb2xsZXJGYW1pbHkuS0VZQk9BUkRcclxuICAgICAgICAgICAgPyBcImtleVwiIDogXCJidXR0b25cIn0gdG8gY29udGludWUuYDtcclxuICAgICAgICBuZXcgVGV4dE5vZGUoe1xyXG4gICAgICAgICAgICBmb250OiBFbmRTY2VuZS5mb250LFxyXG4gICAgICAgICAgICB0ZXh0LFxyXG4gICAgICAgICAgICBhbmNob3I6IERpcmVjdGlvbi5CT1RUT00sXHJcbiAgICAgICAgICAgIHg6IHRoaXMuZ2FtZS53aWR0aCA+PiAxLFxyXG4gICAgICAgICAgICB5OiB0aGlzLmdhbWUuaGVpZ2h0IC0gMTUsXHJcbiAgICAgICAgICAgIGNvbG9yOiBcImRhcmtncmV5XCIsXHJcbiAgICAgICAgICAgIG9wYWNpdHk6IDBcclxuICAgICAgICB9KS5hbmltYXRlKHtcclxuICAgICAgICAgICAgYW5pbWF0b3I6IChub2RlLCB2YWx1ZSkgPT4gbm9kZS5zZXRPcGFjaXR5KHZhbHVlKSxcclxuICAgICAgICAgICAgZGVsYXk6IHRoaXMuaW5wdXREZWxheSxcclxuICAgICAgICAgICAgZHVyYXRpb246IDAuNSxcclxuICAgICAgICAgICAgZWFzaW5nOiBlYXNlT3V0UXVhZFxyXG4gICAgICAgIH0pLmFwcGVuZFRvKHRoaXMucm9vdE5vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhY3RpdmF0ZSgpOiB2b2lkIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgRW5kU2NlbmUuYm9vbS5zZXRMb29wKGZhbHNlKTtcclxuICAgICAgICAgICAgRW5kU2NlbmUuYm9vbS5wbGF5KCk7XHJcbiAgICAgICAgfSwgdGhpcy5zdWJ0aXRsZURlbGF5ICogMTAwMCk7XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlucHV0Lm9uQnV0dG9uRG93bi5jb25uZWN0KHRoaXMuZ290b0NyZWRpdHNTY2VuZSwgdGhpcyk7XHJcbiAgICAgICAgfSwgdGhpcy5pbnB1dERlbGF5ICogMTAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlYWN0aXZhdGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pbnB1dC5vbkJ1dHRvbkRvd24uZGlzY29ubmVjdCh0aGlzLmdvdG9DcmVkaXRzU2NlbmUsIHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ290b0NyZWRpdHNTY2VuZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmdhbWUuc2NlbmVzLnNldFNjZW5lKENyZWRpdHNTY2VuZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFudXAoKSB7XHJcbiAgICAgICAgdGhpcy5yb290Tm9kZS5jbGVhcigpO1xyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7O0FBVUE7QUFDQTtBQXlFQTtBQXZFQTs7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBbEZBO0FBREE7QUFDQTtBQUFBO0FBR0E7QUFEQTtBQUNBO0FBQUE7QUFHQTtBQURBO0FBQ0E7QUFBQTtBQVJBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/scenes/EndScene.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/scenes/GameScene.js":
|
|
/*!*********************************!*\
|
|
!*** ./lib/scenes/GameScene.js ***!
|
|
\*********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GameScene = exports.AmbientSoundId = exports.BgmId = exports.isCollidableGameObject = exports.FadeDirection = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Player_1 = __webpack_require__(/*! ../entities/Player */ \"./lib/entities/Player.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst Bird_1 = __webpack_require__(/*! ../entities/Bird */ \"./lib/entities/Bird.js\");\nconst BitmapFont_1 = __webpack_require__(/*! ../BitmapFont */ \"./lib/BitmapFont.js\");\nconst Bone_1 = __webpack_require__(/*! ../entities/Bone */ \"./lib/entities/Bone.js\");\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst util_1 = __webpack_require__(/*! ../util */ \"./lib/util.js\");\nconst Camera_1 = __webpack_require__(/*! ../Camera */ \"./lib/Camera.js\");\nconst Campfire_1 = __webpack_require__(/*! ../entities/Campfire */ \"./lib/entities/Campfire.js\");\nconst Caveman_1 = __webpack_require__(/*! ../entities/Caveman */ \"./lib/entities/Caveman.js\");\nconst Chicken_1 = __webpack_require__(/*! ../entities/Chicken */ \"./lib/entities/Chicken.js\");\nconst Cloud_1 = __webpack_require__(/*! ../entities/Cloud */ \"./lib/entities/Cloud.js\");\nconst Conversation_1 = __webpack_require__(/*! ../Conversation */ \"./lib/Conversation.js\");\nconst constants_1 = __webpack_require__(/*! ../constants */ \"./lib/constants.js\");\nconst EndScene_1 = __webpack_require__(/*! ./EndScene */ \"./lib/scenes/EndScene.js\");\nconst Fire_1 = __webpack_require__(/*! ../entities/Fire */ \"./lib/entities/Fire.js\");\nconst FireGfx_1 = __webpack_require__(/*! ../FireGfx */ \"./lib/FireGfx.js\");\nconst FlameBoy_1 = __webpack_require__(/*! ../entities/FlameBoy */ \"./lib/entities/FlameBoy.js\");\nconst MapInfo_1 = __webpack_require__(/*! ../MapInfo */ \"./lib/MapInfo.js\");\nconst Menu_1 = __webpack_require__(/*! ../Menu */ \"./lib/Menu.js\");\nconst Mimic_1 = __webpack_require__(/*! ../entities/Mimic */ \"./lib/entities/Mimic.js\");\nconst MountainRiddle_1 = __webpack_require__(/*! ../MountainRiddle */ \"./lib/MountainRiddle.js\");\nconst MovingPlatform_1 = __webpack_require__(/*! ../entities/MovingPlatform */ \"./lib/entities/MovingPlatform.js\");\nconst Particles_1 = __webpack_require__(/*! ../Particles */ \"./lib/Particles.js\");\nconst PauseScene_1 = __webpack_require__(/*! ./PauseScene */ \"./lib/scenes/PauseScene.js\");\nconst Portal_1 = __webpack_require__(/*! ../entities/Portal */ \"./lib/entities/Portal.js\");\nconst PowerShiba_1 = __webpack_require__(/*! ./PowerShiba */ \"./lib/scenes/PowerShiba.js\");\nconst Quests_1 = __webpack_require__(/*! ../Quests */ \"./lib/Quests.js\");\nconst Radio_1 = __webpack_require__(/*! ../entities/Radio */ \"./lib/entities/Radio.js\");\nconst Renderer_1 = __webpack_require__(/*! ../Renderer */ \"./lib/Renderer.js\");\nconst RiddleStone_1 = __webpack_require__(/*! ../entities/RiddleStone */ \"./lib/entities/RiddleStone.js\");\nconst Scene_1 = __webpack_require__(/*! ../Scene */ \"./lib/Scene.js\");\nconst ShadowPresence_1 = __webpack_require__(/*! ../entities/ShadowPresence */ \"./lib/entities/ShadowPresence.js\");\nconst Shiba_1 = __webpack_require__(/*! ../entities/Shiba */ \"./lib/entities/Shiba.js\");\nconst Skull_1 = __webpack_require__(/*! ../entities/Skull */ \"./lib/entities/Skull.js\");\nconst Sound_1 = __webpack_require__(/*! ../Sound */ \"./lib/Sound.js\");\nconst SoundEmitter_1 = __webpack_require__(/*! ../SoundEmitter */ \"./lib/SoundEmitter.js\");\nconst Stone_1 = __webpack_require__(/*! ../entities/Stone */ \"./lib/entities/Stone.js\");\nconst StoneDisciple_1 = __webpack_require__(/*! ../entities/StoneDisciple */ \"./lib/entities/StoneDisciple.js\");\nconst SuperThrow_1 = __webpack_require__(/*! ../entities/SuperThrow */ \"./lib/entities/SuperThrow.js\");\nconst Tree_1 = __webpack_require__(/*! ../entities/Tree */ \"./lib/entities/Tree.js\");\nconst Wing_1 = __webpack_require__(/*! ../entities/Wing */ \"./lib/entities/Wing.js\");\nconst World_1 = __webpack_require__(/*! ../World */ \"./lib/World.js\");\nconst ExitPortal_1 = __webpack_require__(/*! ../entities/ExitPortal */ \"./lib/entities/ExitPortal.js\");\nconst Window_1 = __webpack_require__(/*! ../entities/Window */ \"./lib/entities/Window.js\");\nvar FadeDirection;\n(function (FadeDirection) {\n FadeDirection[FadeDirection[\"FADE_IN\"] = 0] = \"FADE_IN\";\n FadeDirection[FadeDirection[\"FADE_OUT\"] = 1] = \"FADE_OUT\";\n})(FadeDirection = exports.FadeDirection || (exports.FadeDirection = {}));\nfunction isCollidableGameObject(object) {\n return typeof object.collidesWith === \"function\";\n}\nexports.isCollidableGameObject = isCollidableGameObject;\nvar BgmId;\n(function (BgmId) {\n BgmId[\"OVERWORLD\"] = \"overworld\";\n BgmId[\"INFERNO\"] = \"inferno\";\n BgmId[\"CAVE\"] = \"cave\";\n BgmId[\"RIDDLE\"] = \"riddle\";\n BgmId[\"RADIO\"] = \"radio\";\n BgmId[\"WINGS\"] = \"wings\";\n BgmId[\"ECSTASY\"] = \"ecstasy\";\n BgmId[\"AWAKE\"] = \"awake\";\n})(BgmId = exports.BgmId || (exports.BgmId = {}));\nvar AmbientSoundId;\n(function (AmbientSoundId) {\n AmbientSoundId[\"STREAM\"] = \"stream\";\n AmbientSoundId[\"WIND\"] = \"wind\";\n})(AmbientSoundId = exports.AmbientSoundId || (exports.AmbientSoundId = {}));\nclass GameScene extends Scene_1.Scene {\n constructor() {\n super(...arguments);\n this.ambientSounds = {\n [AmbientSoundId.STREAM]: GameScene.ambientStream,\n [AmbientSoundId.WIND]: GameScene.ambientWind\n };\n this.backgroundTracks = [\n {\n active: false,\n id: BgmId.OVERWORLD,\n sound: GameScene.bgm1,\n baseVolume: 0.25\n },\n {\n active: false,\n id: BgmId.CAVE,\n sound: GameScene.bgmCave,\n baseVolume: 1\n },\n {\n active: false,\n id: BgmId.INFERNO,\n sound: GameScene.bgm2,\n baseVolume: 0.10\n },\n {\n active: false,\n id: BgmId.RIDDLE,\n sound: GameScene.bgmRiddle,\n baseVolume: 1\n },\n {\n active: false,\n id: BgmId.RADIO,\n sound: GameScene.bgmRadio,\n baseVolume: 1\n },\n {\n active: false,\n id: BgmId.WINGS,\n sound: GameScene.bgmWings,\n baseVolume: 0.75\n },\n {\n active: false,\n id: BgmId.AWAKE,\n sound: GameScene.bgmAwake,\n baseVolume: 0.75\n },\n {\n active: false,\n id: BgmId.ECSTASY,\n sound: GameScene.bgmEcstasy,\n baseVolume: 1\n }\n ];\n this.petEndingTexts = [\n { label: \"The sensation lacks any kind of comparison.\", enter: 0.1 },\n { label: \"All worldly matters seem so insignificant now.\", enter: 0.2 },\n { label: \"Reality around me begins to fade.\", enter: 0.3 },\n { label: \"Soon, I will be swept away in ecstasy.\", enter: 0.5 },\n { label: \"Can I muster up the strength to break free?\", enter: 0.6 },\n { label: \"If I don't stop now, there will be no going back.\", enter: 0.7 },\n { label: \"Is this really how it all ends?\", enter: 0.8 },\n { label: \"I regret nothing…\", enter: 0.9 },\n { label: \"Farewell, cruel world…\", enter: 1 }\n ];\n this.windowEndingTexts = [\n { label: \"I wiped off the heavy dust layer on the glass.\", enter: 0.1 },\n { label: \"The surface was as cold as the corpses around me.\", enter: 0.2 },\n { label: \"It was hard to make out anything in the darkness on the other side…\", enter: 0.3 },\n { label: \"\", enter: 0.4 },\n { label: \"My legs gave away when I realized what I was looking at.\", enter: 0.5 },\n { label: \"Nothing can compare to the dread I felt in this moment.\", enter: 0.6 },\n { label: \"\", enter: 0.7 },\n { label: \"I wished I could go back to the dream I faintly remember.\", enter: 0.8 },\n { label: \"But there was nothing but an inevitable death waiting for me…\", enter: 0.9 },\n ];\n /* Total game time (time passed while game not paused) */\n this.gameTime = 0;\n this.gameObjects = [];\n this.soundEmitters = [];\n this.pointsOfInterest = [];\n this.triggerObjects = [];\n this.boundObjects = [];\n this.gateObjects = [];\n this.paused = false;\n this.particles = new Particles_1.Particles(this);\n this.fireFuryEndTime = 0;\n this.apocalypse = false;\n this.friendshipCutscene = false;\n this.pettingCutscene = false;\n this.windowCutscene = false;\n this.windowCutsceneTime = 0;\n this.pettingCutsceneTime = 0;\n this.pettingEndingTriggered = false;\n this.windowEndingTriggered = false;\n this.apocalypseFactor = 1;\n this.fireEffects = [];\n this.frameCounter = 0;\n this.framesPerSecond = 0;\n this.showBounds = false;\n this.scale = 1;\n this.dt = 0;\n this.fpsInterval = null;\n this.fadeToBlackEndTime = 0;\n this.fadeToBlackStartTime = 0;\n this.fadeToBlackFactor = 0;\n this.fadeToBlackDirection = FadeDirection.FADE_OUT;\n this.renderer = new Renderer_1.Renderer(this);\n this.mountainRiddle = new MountainRiddle_1.MountainRiddle();\n }\n setup() {\n this.mapInfo = new MapInfo_1.MapInfo();\n this.soundEmitters = this.mapInfo.getSounds().map(o => SoundEmitter_1.SoundEmitter.fromGameObjectInfo(this, o));\n this.pointsOfInterest = this.mapInfo.getPointers();\n this.triggerObjects = this.mapInfo.getTriggerObjects();\n this.boundObjects = this.mapInfo.getBoundObjects();\n this.gateObjects = this.mapInfo.getGateObjects();\n this.gameTime = 0;\n this.fadeToBlackEndTime = 0;\n this.fadeToBlackStartTime = 0;\n this.fadeToBlackFactor = 0;\n this.apocalypse = false;\n this.fireFuryEndTime = 0;\n this.pettingCutscene = false;\n this.pettingCutsceneTime = 0;\n this.pettingEndingTriggered = false;\n this.windowCutscene = false;\n this.windowCutsceneTime = 0;\n this.windowEndingTriggered = false;\n Conversation_1.Conversation.resetGlobals();\n this.gameObjects = [\n this.world = new World_1.World(this),\n this.particles,\n ...this.soundEmitters,\n ...this.mapInfo.getEntities().map(entity => {\n switch (entity.name) {\n case \"riddlestone\":\n return new RiddleStone_1.RiddleStone(this, entity.x, entity.y, entity.properties);\n case \"campfire\":\n return new Campfire_1.Campfire(this, entity.x, entity.y);\n case \"radio\":\n return new Radio_1.Radio(this, entity.x, entity.y);\n case \"movingplatform\":\n return new MovingPlatform_1.MovingPlatform(this, entity.x, entity.y, entity.properties);\n case \"skull\":\n return new Skull_1.Skull(this, entity.x, entity.y);\n case \"chicken\":\n return new Chicken_1.Chicken(this, entity.x, entity.y);\n case \"superthrow\":\n return new SuperThrow_1.SuperThrow(this, entity.x, entity.y);\n case \"portal\":\n return new Portal_1.Portal(this, entity.x, entity.y);\n case \"window\":\n return new Window_1.Window(this, entity.x, entity.y);\n default:\n return Entity_1.createEntity(entity.name, this, entity.x, entity.y, entity.properties);\n }\n })\n ];\n this.player = this.getGameObject(Player_1.Player);\n this.fire = this.getGameObject(Fire_1.Fire);\n this.stone = this.getGameObject(Stone_1.Stone);\n this.stoneDisciple = this.getGameObject(StoneDisciple_1.StoneDisciple);\n this.tree = this.getGameObject(Tree_1.Tree);\n this.flameboy = this.getGameObject(FlameBoy_1.FlameBoy);\n this.wing = this.getGameObject(Wing_1.Wing);\n this.bird = this.getGameObject(Bird_1.Bird);\n this.shiba = this.getGameObject(Shiba_1.Shiba);\n this.powerShiba = this.getGameObject(PowerShiba_1.PowerShiba);\n this.shadowPresence = this.getGameObject(ShadowPresence_1.ShadowPresence);\n this.mimic = this.getGameObject(Mimic_1.Mimic);\n this.caveman = this.getGameObject(Caveman_1.Caveman);\n this.bone = this.getGameObject(Bone_1.Bone);\n this.exitPortal = this.getGameObject(ExitPortal_1.ExitPortal);\n this.camera = new Camera_1.Camera(this, this.player);\n this.camera.setBounds(this.player.getCurrentMapBounds());\n this.fpsInterval = setInterval(() => {\n this.framesPerSecond = this.frameCounter;\n this.frameCounter = 0;\n }, 1000);\n this.game.campaign.begin(this);\n this.playBackgroundTrack(BgmId.CAVE);\n Conversation_1.Conversation.setGlobal(\"devmode\", util_1.isDev() + \"\");\n this.loadApocalypse();\n }\n cleanup() {\n if (this.fpsInterval != null) {\n clearInterval(this.fpsInterval);\n }\n }\n addGameObject(object) {\n // Insert new item right before the player so player is always in front\n this.gameObjects.splice(this.gameObjects.indexOf(this.player) - 1, 0, object);\n }\n removeGameObject(object) {\n const index = this.gameObjects.indexOf(object);\n if (index >= 0) {\n this.gameObjects.splice(index, 1);\n }\n }\n setGateDisabled(gateId, disabled) {\n const gate = this.gateObjects.find(o => o.name === gateId);\n if (!gate) {\n console.error(`cannot set disabled status of gate '${gateId}' because it does not exist`);\n return;\n }\n gate.properties.disabled = disabled;\n }\n getBackgroundTrack(id) {\n const found = this.backgroundTracks.find(track => track.id === id);\n if (!found) {\n console.error(`Missing background track with ID '${id}'.`);\n return this.backgroundTracks[0];\n }\n return found;\n }\n fadeActiveBackgroundTrack(fade, inverse = false) {\n this.backgroundTracks.forEach(t => {\n if (t.active) {\n if (inverse) {\n t.sound.setVolume(t.baseVolume * (1 - fade));\n }\n else {\n t.sound.setVolume(t.baseVolume * fade);\n }\n }\n });\n }\n setActiveBgmTrack(id) {\n this.backgroundTracks.forEach(t => { t.active = false; });\n const track = this.backgroundTracks.find(t => t.id === id);\n if (track) {\n track.active = true;\n if (!track.sound.isPlaying()) {\n track.sound.setLoop(true);\n track.sound.play();\n }\n }\n }\n fadeToBackgroundTrack(id) {\n const track = this.getBackgroundTrack(id);\n this.muteMusic();\n this.backgroundTracks.forEach(t => { t.active = false; });\n track.active = true;\n track.sound.setVolume(track.baseVolume);\n if (!track.sound.isPlaying()) {\n track.sound.setLoop(true);\n track.sound.play();\n }\n }\n playBackgroundTrack(id) {\n const track = this.getBackgroundTrack(id);\n this.backgroundTracks.forEach(t => t.sound.stop());\n track.active = true;\n track.sound.setVolume(track.baseVolume);\n track.sound.setLoop(true);\n track.sound.play();\n }\n getGameObject(type) {\n for (const gameObject of this.gameObjects) {\n if (gameObject instanceof type) {\n return gameObject;\n }\n }\n throw new Error(`Game object of type ${type.name} not found.`);\n }\n activate() {\n this.input.onButtonDown.connect(this.handleButtonDown, this);\n this.input.onButtonDown.connect(this.player.handleButtonDown, this.player);\n this.input.onButtonUp.connect(this.player.handleButtonUp, this.player);\n this.resume();\n }\n deactivate() {\n this.pause();\n this.input.onButtonDown.disconnect(this.handleButtonDown, this);\n this.input.onButtonDown.disconnect(this.player.handleButtonDown, this.player);\n this.input.onButtonUp.disconnect(this.player.handleButtonUp, this.player);\n }\n handleButtonDown(event) {\n var _a;\n if (event.isAbort || event.isPause) {\n if (this.player.getDance()) {\n (_a = this.player.getDance()) === null || _a === void 0 ? void 0 : _a.resetMusic();\n this.player.cancelDance();\n }\n }\n if (event.isPause) {\n this.scenes.pushScene(PauseScene_1.PauseScene);\n }\n }\n gameOver() {\n GameScene.bgm1.stop();\n GameScene.bgm2.stop();\n GameScene.swell.setVolume(0.5);\n GameScene.swell.play();\n setTimeout(() => {\n this.game.scenes.setScene(EndScene_1.EndScene);\n }, 2000);\n }\n isActive() {\n return !this.paused;\n }\n update(dt) {\n if (this.paused) {\n dt = 0;\n }\n this.dt = dt;\n this.gameTime += dt;\n for (const obj of this.gameObjects) {\n obj.update(dt);\n }\n this.camera.update(dt, this.gameTime);\n if (this.fadeToBlackEndTime > this.gameTime) {\n let fade = (this.gameTime - this.fadeToBlackStartTime) / (this.fadeToBlackEndTime - this.fadeToBlackStartTime);\n if (this.fadeToBlackDirection === FadeDirection.FADE_IN) {\n fade = 1 - fade;\n }\n this.fadeToBlackFactor = fade;\n }\n if (this.friendshipCutscene) {\n this.updateFriendshipEndingCutscene(dt);\n }\n if (this.pettingCutscene) {\n this.updatePettingEndingCutscene(dt);\n }\n if (this.windowCutscene) {\n this.updateWindowEndingCutscene(dt);\n }\n }\n draw(ctx, width, height) {\n ctx.save();\n // Center coordinate system\n ctx.translate(ctx.canvas.width / 2, ctx.canvas.height / 2);\n // Scale by three because everything was based on 480x300 canvas and now its three times larger\n ctx.scale(this.scale, this.scale);\n // Draw stuff\n this.camera.applyTransform(ctx);\n for (const obj of this.gameObjects) {\n obj.draw(ctx, width, height);\n }\n // Add all particle emitters to rendering queue\n this.particles.addEmittersToRenderingQueue();\n // Add all debug bounds to rendering queue\n this.addAllDebugBoundsToRenderingQueue();\n // Apocalypse\n if (this.fireFuryEndTime) {\n this.camera.setCinematicBar(1);\n // Fade out\n const diff = this.fireFuryEndTime - this.gameTime;\n const p = diff / 16;\n const fade = Particles_1.valueCurves.trapeze(0.4).get(p);\n this.drawFade(ctx, fade, \"black\");\n }\n if (this.apocalypse) {\n this.drawApocalypseOverlay(ctx);\n }\n // Gate Fade\n if (this.fadeToBlackFactor > 0) {\n this.fadeActiveBackgroundTrack(this.fadeToBlackFactor, true);\n this.drawFade(ctx, this.fadeToBlackFactor, \"black\");\n }\n // Cinematic bars\n this.camera.addCinematicBarsToRenderer();\n // Draw stuff from Rendering queue\n this.renderer.draw(ctx);\n ctx.restore();\n // Display FPS counter\n if (util_1.isDev()) {\n GameScene.font.drawText(ctx, `${this.framesPerSecond} FPS`, 2 * this.scale, 2 * this.scale - 3, \"white\");\n }\n this.frameCounter++;\n }\n addSingleDebugBoundsToRenderingQueue(bounds, color) {\n this.renderer.add({\n type: Renderer_1.RenderingType.RECT,\n layer: Renderer_1.RenderingLayer.DEBUG,\n position: {\n x: bounds.x,\n y: -bounds.y\n },\n lineColor: color,\n dimension: {\n width: bounds.width,\n height: bounds.height\n }\n });\n }\n addAllDebugBoundsToRenderingQueue() {\n if (this.showBounds) {\n // Draw trigger bounds for collisions\n for (const obj of this.triggerObjects) {\n const bounds = util_1.boundsFromMapObject(obj);\n this.addSingleDebugBoundsToRenderingQueue(bounds, \"blue\");\n }\n for (const obj of this.boundObjects) {\n const bounds = util_1.boundsFromMapObject(obj);\n this.addSingleDebugBoundsToRenderingQueue(bounds, \"yellow\");\n }\n for (const obj of this.gateObjects) {\n const bounds = util_1.boundsFromMapObject(obj);\n this.addSingleDebugBoundsToRenderingQueue(bounds, \"green\");\n }\n }\n }\n startApocalypseMusic() {\n this.playBackgroundTrack(BgmId.INFERNO);\n }\n startFriendshipMusic() {\n this.playBackgroundTrack(BgmId.WINGS);\n }\n muteMusic() {\n this.backgroundTracks.forEach(t => t.sound.setVolume(0));\n }\n resetMusicVolumes() {\n this.backgroundTracks.forEach(t => {\n if (t.active)\n t.sound.setVolume(t.baseVolume);\n });\n }\n fadeToBlack(duration, direction) {\n return tslib_1.__awaiter(this, void 0, void 0, function* () {\n return new Promise((resolve) => {\n this.fadeToBlackStartTime = this.gameTime;\n this.fadeToBlackEndTime = this.gameTime + duration;\n this.fadeToBlackDirection = direction;\n setTimeout(() => {\n if (direction === FadeDirection.FADE_OUT) {\n this.fadeToBlackFactor = 1;\n }\n else {\n this.fadeToBlackFactor = 0;\n }\n resolve();\n }, duration * 1000);\n });\n });\n }\n updateApocalypse() {\n this.fireEmitter.setPosition(this.player.x, this.player.y);\n this.fireEffects.forEach(e => e.update());\n if (util_1.timedRnd(this.dt, 0.8)) {\n this.fireEmitter.emit();\n }\n this.fire.growthTarget = Math.max(2, 20 - 6 * this.gameObjects.filter(o => o instanceof Cloud_1.Cloud && o.isRaining()).length);\n if (this.fire.intensity < 6) {\n this.fire.intensity = Math.max(this.fire.intensity, 4);\n this.apocalypseFactor = util_1.clamp((this.fire.intensity - 4) / 2, 0, 1);\n if (this.apocalypseFactor <= 0.001) {\n // End apocalypse\n this.apocalypseFactor = 0;\n this.apocalypse = false;\n this.fire.state = Fire_1.FireState.PUT_OUT;\n this.game.campaign.getQuest(Quests_1.QuestKey.A).trigger(Quests_1.QuestATrigger.BEAT_FIRE);\n this.game.campaign.runAction(\"enable\", null, [\"fire\", \"fire3\"]);\n // Music\n GameScene.bgm2.stop();\n }\n }\n }\n updateFriendshipEndingCutscene(dt) {\n this.camera.setCinematicBar(1);\n }\n updateWindowEndingCutscene(dt) {\n this.windowCutsceneTime += dt;\n if (!this.windowEndingTriggered && this.windowCutsceneTime > constants_1.WINDOW_ENDING_CUTSCENE_DURATION + constants_1.WINDOW_ENDING_FADE_DURATION) {\n this.windowEndingTriggered = true;\n this.game.campaign.getQuest(Quests_1.QuestKey.E).finish();\n this.gameOver();\n }\n this.windowEndingTexts.forEach((t, index) => {\n if (this.windowCutsceneTime / constants_1.WINDOW_ENDING_CUTSCENE_DURATION > t.enter) {\n const fadeTime = 0.5;\n const enterTime = constants_1.WINDOW_ENDING_CUTSCENE_DURATION * t.enter;\n const alpha = Math.max(0, Math.min(1, (this.windowCutsceneTime - enterTime) / fadeTime));\n const measure = GameScene.font.measureText(t.label);\n this.renderer.add({\n type: Renderer_1.RenderingType.TEXT, layer: Renderer_1.RenderingLayer.UI, textColor: \"white\", relativeToScreen: true, alpha,\n text: t.label, position: {\n x: (constants_1.GAME_CANVAS_WIDTH / 2) - (measure.width / 2),\n y: measure.height * index + (index * 3) + 50\n }, asset: GameScene.font,\n });\n }\n });\n }\n updatePettingEndingCutscene(dt) {\n this.pettingCutsceneTime += dt;\n if (!this.pettingEndingTriggered && this.pettingCutsceneTime > constants_1.PETTING_ENDING_CUTSCENE_DURATION + constants_1.PETTING_ENDING_FADE_DURATION) {\n this.pettingEndingTriggered = true;\n this.game.campaign.getQuest(Quests_1.QuestKey.D).finish();\n this.gameOver();\n }\n this.petEndingTexts.forEach((t, index) => {\n if (this.pettingCutsceneTime / constants_1.PETTING_ENDING_CUTSCENE_DURATION > t.enter) {\n const fadeTime = 0.5;\n const enterTime = constants_1.PETTING_ENDING_CUTSCENE_DURATION * t.enter;\n const yOffset = Math.pow((this.pettingCutsceneTime - enterTime) / 2, 2) * -1;\n const alpha = Math.max(0, Math.min(1, (this.pettingCutsceneTime - enterTime) / fadeTime));\n const measure = GameScene.font.measureText(t.label);\n this.renderer.add({\n type: Renderer_1.RenderingType.TEXT, layer: Renderer_1.RenderingLayer.UI, textColor: \"white\", relativeToScreen: true, alpha,\n text: t.label, position: {\n x: (constants_1.GAME_CANVAS_WIDTH / 2) - (measure.width / 2),\n //y: measure.height * index + (index * 3) + 20\n y: 100 + yOffset\n }, asset: GameScene.font,\n });\n }\n });\n }\n drawApocalypseOverlay(ctx) {\n this.updateApocalypse();\n this.camera.setCinematicBar(this.apocalypseFactor);\n this.renderer.add({\n type: Renderer_1.RenderingType.RECT,\n layer: Renderer_1.RenderingLayer.FULLSCREEN_FX,\n position: { x: 0, y: 0 },\n fillColor: \"darkred\",\n globalCompositeOperation: \"color\",\n alpha: 0.7 * this.apocalypseFactor,\n relativeToScreen: true,\n dimension: { width: ctx.canvas.width, height: ctx.canvas.height }\n });\n }\n drawFade(ctx, alpha, color = \"black\") {\n this.renderer.add({\n type: Renderer_1.RenderingType.RECT,\n layer: Renderer_1.RenderingLayer.FULLSCREEN_FX,\n position: { x: 0, y: 0 },\n fillColor: color,\n alpha,\n relativeToScreen: true,\n dimension: { width: ctx.canvas.width, height: ctx.canvas.height }\n });\n }\n loadApocalypse() {\n this.fireEffects = [1, 2].map(num => new FireGfx_1.FireGfx(32, 24, true, 2));\n this.fireEmitter = this.particles.createEmitter({\n position: { x: this.player.x, y: this.player.y },\n offset: () => ({ x: util_1.rnd(-1, 1) * 300, y: 200 }),\n velocity: () => ({ x: 0, y: -25 }),\n color: () => util_1.rndItem(this.fireEffects).getImage(),\n size: () => util_1.rnd(16, 32),\n gravity: { x: -10, y: -30 },\n lifetime: () => util_1.rnd(5, 15),\n alpha: 1,\n breakFactor: 0.9,\n alphaCurve: Particles_1.valueCurves.cos(0.2, 0.1),\n update: particle => {\n if (this.world.collidesWith(particle.x, particle.y - particle.size / 4)) {\n particle.vx = 0;\n particle.vy = 0;\n }\n }\n });\n }\n beginWindowEnding() {\n this.windowCutscene = true;\n this.player.setControllable(false);\n this.fadeToBlackDirection = FadeDirection.FADE_OUT;\n this.fadeToBlackStartTime = this.gameTime + constants_1.WINDOW_ENDING_CUTSCENE_DURATION;\n this.fadeToBlackEndTime = this.fadeToBlackStartTime + (constants_1.WINDOW_ENDING_FADE_DURATION);\n const target = this.pointsOfInterest.find(poi => poi.name === \"windowzoomtarget\");\n if (target) {\n this.camera.focusOn(constants_1.WINDOW_ENDING_CUTSCENE_DURATION + constants_1.PETTING_ENDING_FADE_DURATION, target.x, this.camera.y, 1, 0, Particles_1.valueCurves.cubic);\n }\n }\n beginPetEnding() {\n this.pettingCutscene = true;\n this.player.startPettingDog();\n this.shiba.startBeingPetted();\n this.fadeToBlackDirection = FadeDirection.FADE_OUT;\n this.fadeToBlackStartTime = this.gameTime + constants_1.PETTING_ENDING_CUTSCENE_DURATION;\n this.fadeToBlackEndTime = this.fadeToBlackStartTime + (constants_1.PETTING_ENDING_FADE_DURATION);\n this.playBackgroundTrack(BgmId.ECSTASY);\n }\n cancelPatEnding() {\n if (this.canCancelPatEnding()) {\n this.pettingCutscene = false;\n this.pettingCutsceneTime = 0;\n this.player.stopPettingDog();\n this.shiba.stopBeingPetted();\n this.fadeToBlackEndTime = 0;\n this.fadeToBlackStartTime = 0;\n this.fadeToBlackFactor = 0;\n this.playBackgroundTrack(BgmId.OVERWORLD);\n }\n }\n canCancelPatEnding() {\n return this.pettingCutsceneTime < constants_1.PETTING_ENDING_CUTSCENE_DURATION + constants_1.PETTING_ENDING_FADE_DURATION;\n }\n beginFriendshipEnding() {\n this.friendshipCutscene = true;\n this.shiba.setState(Shiba_1.ShibaState.ON_MOUNTAIN);\n this.shiba.nextState();\n const playerTargetPos = this.pointsOfInterest.find(poi => poi.name === \"friendship_player_position\");\n if (!playerTargetPos) {\n throw new Error(\"cannot initiate friendship ending because some points of interest are missing\");\n }\n this.player.startAutoMove(playerTargetPos.x, true);\n this.player.setControllable(false);\n }\n beginApocalypse() {\n this.apocalypse = true;\n this.world.stopRain();\n const bossPosition = this.pointsOfInterest.find(poi => poi.name === \"boss_spawn\");\n const cloudPositions = this.pointsOfInterest.filter(poi => poi.name === \"bosscloud\");\n if (bossPosition && cloudPositions.length > 0) {\n cloudPositions.forEach(pos => {\n const cloud = new Cloud_1.Cloud(this, pos.x, pos.y, {\n velocity: 0,\n distance: 1\n }, true);\n this.gameObjects.push(cloud);\n });\n // Teleport player and fire to boss spawn position\n this.player.x = bossPosition.x - 36;\n this.player.y = bossPosition.y;\n this.player.removePowerUps();\n this.player.enableRainDance();\n this.fire.x = bossPosition.x;\n this.fire.y = bossPosition.y;\n this.camera.setBounds(this.player.getCurrentMapBounds());\n // Some helpful thoughts\n setTimeout(() => this.player.think(\"This is not over…\", 2000), 9000);\n setTimeout(() => this.player.think(\"There's still something I can do.\", 4000), 12000);\n }\n else {\n throw new Error(\"Cannot begin apocalypse because boss_spawn or bosscloud trigger is missing in map.\");\n }\n }\n togglePause(paused = !this.paused) {\n this.paused = paused;\n }\n pause() {\n this.muteMusic();\n Menu_1.MenuList.pause.stop();\n Menu_1.MenuList.pause.play();\n this.togglePause(true);\n }\n resume() {\n this.resetMusicVolumes();\n this.togglePause(false);\n }\n}\ntslib_1.__decorate([\n Assets_1.asset(\"music/theme_01.ogg\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], GameScene, \"bgm1\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"music/inferno.ogg\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], GameScene, \"bgm2\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"music/cave.ogg\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], GameScene, \"bgmCave\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"music/riddle.ogg\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], GameScene, \"bgmRiddle\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"music/radio.ogg\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], GameScene, \"bgmRadio\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"music/ecstasy.ogg\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], GameScene, \"bgmEcstasy\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"music/wings.ogg\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], GameScene, \"bgmWings\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"music/awake.ogg\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], GameScene, \"bgmAwake\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/ambient/stream.ogg\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], GameScene, \"ambientStream\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/ambient/wind.ogg\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], GameScene, \"ambientWind\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(constants_1.DIALOG_FONT),\n tslib_1.__metadata(\"design:type\", BitmapFont_1.BitmapFont)\n], GameScene, \"font\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/ending/swell.mp3\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], GameScene, \"swell\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/gate/wrong.ogg\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], GameScene, \"wrong\", void 0);\nexports.GameScene = GameScene;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvc2NlbmVzL0dhbWVTY2VuZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9zY2VuZXMvR2FtZVNjZW5lLnRzPzE2OTIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxheWVyIH0gZnJvbSBcIi4uL2VudGl0aWVzL1BsYXllclwiO1xyXG5pbXBvcnQgeyBhc3NldCB9IGZyb20gXCIuLi9Bc3NldHNcIjtcclxuaW1wb3J0IHsgQmlyZCB9IGZyb20gXCIuLi9lbnRpdGllcy9CaXJkXCI7XHJcbmltcG9ydCB7IEJpdG1hcEZvbnQgfSBmcm9tIFwiLi4vQml0bWFwRm9udFwiO1xyXG5pbXBvcnQgeyBCb25lIH0gZnJvbSBcIi4uL2VudGl0aWVzL0JvbmVcIjtcclxuaW1wb3J0IHsgQm91bmRzLCBjcmVhdGVFbnRpdHkgfSBmcm9tIFwiLi4vRW50aXR5XCI7XHJcbmltcG9ydCB7IGJvdW5kc0Zyb21NYXBPYmplY3QsIGNsYW1wLCBpc0Rldiwgcm5kLCBybmRJdGVtLCB0aW1lZFJuZCB9IGZyb20gXCIuLi91dGlsXCI7XHJcbmltcG9ydCB7IENhbWVyYSB9IGZyb20gXCIuLi9DYW1lcmFcIjtcclxuaW1wb3J0IHsgQ2FtcGZpcmUgfSBmcm9tIFwiLi4vZW50aXRpZXMvQ2FtcGZpcmVcIjtcclxuaW1wb3J0IHsgQ2F2ZW1hbiB9IGZyb20gXCIuLi9lbnRpdGllcy9DYXZlbWFuXCI7XHJcbmltcG9ydCB7IENoaWNrZW4gfSBmcm9tIFwiLi4vZW50aXRpZXMvQ2hpY2tlblwiO1xyXG5pbXBvcnQgeyBDbG91ZCB9IGZyb20gXCIuLi9lbnRpdGllcy9DbG91ZFwiO1xyXG5pbXBvcnQgeyBDb250cm9sbGVyRXZlbnQgfSBmcm9tIFwiLi4vaW5wdXQvQ29udHJvbGxlckV2ZW50XCI7XHJcbmltcG9ydCB7IENvbnZlcnNhdGlvbiB9IGZyb20gXCIuLi9Db252ZXJzYXRpb25cIjtcclxuaW1wb3J0IHsgRElBTE9HX0ZPTlQsIEdBTUVfQ0FOVkFTX1dJRFRILCBQRVRUSU5HX0VORElOR19DVVRTQ0VORV9EVVJBVElPTiwgUEVUVElOR19FTkRJTkdfRkFERV9EVVJBVElPTiwgV0lORE9XX0VORElOR19DVVRTQ0VORV9EVVJBVElPTiwgV0lORE9XX0VORElOR19GQURFX0RVUkFUSU9OIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBFbmRTY2VuZSB9IGZyb20gXCIuL0VuZFNjZW5lXCI7XHJcbmltcG9ydCB7IEZpcmUsIEZpcmVTdGF0ZSB9IGZyb20gXCIuLi9lbnRpdGllcy9GaXJlXCI7XHJcbmltcG9ydCB7IEZpcmVHZnggfSBmcm9tIFwiLi4vRmlyZUdmeFwiO1xyXG5pbXBvcnQgeyBGbGFtZUJveSB9IGZyb20gXCIuLi9lbnRpdGllcy9GbGFtZUJveVwiO1xyXG5pbXBvcnQgeyBGcmllbmRseUZpcmUgfSBmcm9tIFwiLi4vRnJpZW5kbHlGaXJlXCI7XHJcbmltcG9ydCB7IEdhbWVPYmplY3RJbmZvLCBNYXBJbmZvIH0gZnJvbSBcIi4uL01hcEluZm9cIjtcclxuaW1wb3J0IHsgTWVudUxpc3QgfSBmcm9tIFwiLi4vTWVudVwiO1xyXG5pbXBvcnQgeyBNaW1pYyB9IGZyb20gXCIuLi9lbnRpdGllcy9NaW1pY1wiO1xyXG5pbXBvcnQgeyBNb3VudGFpblJpZGRsZSB9IGZyb20gXCIuLi9Nb3VudGFpblJpZGRsZVwiO1xyXG5pbXBvcnQgeyBNb3ZpbmdQbGF0Zm9ybSB9IGZyb20gXCIuLi9lbnRpdGllcy9Nb3ZpbmdQbGF0Zm9ybVwiO1xyXG5pbXBvcnQgeyBQYXJ0aWNsZUVtaXR0ZXIsIFBhcnRpY2xlcywgdmFsdWVDdXJ2ZXMgfSBmcm9tIFwiLi4vUGFydGljbGVzXCI7XHJcbmltcG9ydCB7IFBhdXNlU2NlbmUgfSBmcm9tIFwiLi9QYXVzZVNjZW5lXCI7XHJcbmltcG9ydCB7IFBvcnRhbCB9IGZyb20gXCIuLi9lbnRpdGllcy9Qb3J0YWxcIjtcclxuaW1wb3J0IHsgUG93ZXJTaGliYSB9IGZyb20gXCIuL1Bvd2VyU2hpYmFcIjtcclxuaW1wb3J0IHsgUXVlc3RBVHJpZ2dlciwgUXVlc3RLZXkgfSBmcm9tIFwiLi4vUXVlc3RzXCI7XHJcbmltcG9ydCB7IFJhZGlvIH0gZnJvbSBcIi4uL2VudGl0aWVzL1JhZGlvXCI7XHJcbmltcG9ydCB7IFJlbmRlcmVyLCBSZW5kZXJpbmdMYXllciwgUmVuZGVyaW5nVHlwZSB9IGZyb20gXCIuLi9SZW5kZXJlclwiO1xyXG5pbXBvcnQgeyBSaWRkbGVTdG9uZSB9IGZyb20gXCIuLi9lbnRpdGllcy9SaWRkbGVTdG9uZVwiO1xyXG5pbXBvcnQgeyBTY2VuZSB9IGZyb20gXCIuLi9TY2VuZVwiO1xyXG5pbXBvcnQgeyBTZWVkIH0gZnJvbSBcIi4uL2VudGl0aWVzL1NlZWRcIjtcclxuaW1wb3J0IHsgU2hhZG93UHJlc2VuY2UgfSBmcm9tIFwiLi4vZW50aXRpZXMvU2hhZG93UHJlc2VuY2VcIjtcclxuaW1wb3J0IHsgU2hpYmEsIFNoaWJhU3RhdGUgfSBmcm9tIFwiLi4vZW50aXRpZXMvU2hpYmFcIjtcclxuaW1wb3J0IHsgU2t1bGwgfSBmcm9tIFwiLi4vZW50aXRpZXMvU2t1bGxcIjtcclxuaW1wb3J0IHsgU291bmQgfSBmcm9tIFwiLi4vU291bmRcIjtcclxuaW1wb3J0IHsgU291bmRFbWl0dGVyIH0gZnJvbSBcIi4uL1NvdW5kRW1pdHRlclwiO1xyXG5pbXBvcnQgeyBTdG9uZSB9IGZyb20gXCIuLi9lbnRpdGllcy9TdG9uZVwiO1xyXG5pbXBvcnQgeyBTdG9uZURpc2NpcGxlIH0gZnJvbSBcIi4uL2VudGl0aWVzL1N0b25lRGlzY2lwbGVcIjtcclxuaW1wb3J0IHsgU3VwZXJUaHJvdyB9IGZyb20gXCIuLi9lbnRpdGllcy9TdXBlclRocm93XCI7XHJcbmltcG9ydCB7IFRyZWUgfSBmcm9tIFwiLi4vZW50aXRpZXMvVHJlZVwiO1xyXG5pbXBvcnQgeyBXaW5nIH0gZnJvbSBcIi4uL2VudGl0aWVzL1dpbmdcIjtcclxuaW1wb3J0IHsgV29ybGQgfSBmcm9tIFwiLi4vV29ybGRcIjtcclxuaW1wb3J0IHsgRXhpdFBvcnRhbCB9IGZyb20gXCIuLi9lbnRpdGllcy9FeGl0UG9ydGFsXCI7XHJcbmltcG9ydCB7IFdpbmRvdyB9IGZyb20gXCIuLi9lbnRpdGllcy9XaW5kb3dcIjtcclxuXHJcbmV4cG9ydCBlbnVtIEZhZGVEaXJlY3Rpb24geyBGQURFX0lOLCBGQURFX09VVCB9XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEdhbWVPYmplY3Qge1xyXG4gICAgZHJhdyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB2b2lkO1xyXG4gICAgdXBkYXRlKGR0OiBudW1iZXIpOiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbGxpZGFibGVHYW1lT2JqZWN0IGV4dGVuZHMgR2FtZU9iamVjdCB7XHJcbiAgICBjb2xsaWRlc1dpdGgoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0NvbGxpZGFibGVHYW1lT2JqZWN0KG9iamVjdDogR2FtZU9iamVjdCk6IG9iamVjdCBpcyBDb2xsaWRhYmxlR2FtZU9iamVjdCAge1xyXG4gICAgcmV0dXJuIHR5cGVvZiAob2JqZWN0IGFzIENvbGxpZGFibGVHYW1lT2JqZWN0KS5jb2xsaWRlc1dpdGggPT09IFwiZnVuY3Rpb25cIjtcclxufVxyXG5cclxuZXhwb3J0IGVudW0gQmdtSWQge1xyXG4gICAgT1ZFUldPUkxEID0gXCJvdmVyd29ybGRcIixcclxuICAgIElORkVSTk8gPSBcImluZmVybm9cIixcclxuICAgIENBVkUgPSBcImNhdmVcIixcclxuICAgIFJJRERMRSA9IFwicmlkZGxlXCIsXHJcbiAgICBSQURJTyA9IFwicmFkaW9cIixcclxuICAgIFdJTkdTID0gXCJ3aW5nc1wiLFxyXG4gICAgRUNTVEFTWSA9IFwiZWNzdGFzeVwiLFxyXG4gICAgQVdBS0UgPSBcImF3YWtlXCJcclxufVxyXG5cclxuZXhwb3J0IGVudW0gQW1iaWVudFNvdW5kSWQge1xyXG4gICAgU1RSRUFNID0gXCJzdHJlYW1cIixcclxuICAgIFdJTkQgPSBcIndpbmRcIixcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQmFja2dyb3VuZFRyYWNrID0ge1xyXG4gICAgYWN0aXZlOiBib29sZWFuO1xyXG4gICAgaWQ6IEJnbUlkO1xyXG4gICAgc291bmQ6IFNvdW5kLFxyXG4gICAgYmFzZVZvbHVtZTogbnVtYmVyO1xyXG59O1xyXG5cclxudHlwZSBQZXRFbmRpbmdUZXh0ID0ge1xyXG4gICAgbGFiZWw6IHN0cmluZztcclxuICAgIGVudGVyOiBudW1iZXI7XHJcbn07XHJcblxyXG5leHBvcnQgY2xhc3MgR2FtZVNjZW5lIGV4dGVuZHMgU2NlbmU8RnJpZW5kbHlGaXJlPiB7XHJcbiAgICBAYXNzZXQoXCJtdXNpYy90aGVtZV8wMS5vZ2dcIilcclxuICAgIHB1YmxpYyBzdGF0aWMgYmdtMTogU291bmQ7XHJcblxyXG4gICAgQGFzc2V0KFwibXVzaWMvaW5mZXJuby5vZ2dcIilcclxuICAgIHB1YmxpYyBzdGF0aWMgYmdtMjogU291bmQ7XHJcblxyXG4gICAgQGFzc2V0KFwibXVzaWMvY2F2ZS5vZ2dcIilcclxuICAgIHB1YmxpYyBzdGF0aWMgYmdtQ2F2ZTogU291bmQ7XHJcblxyXG4gICAgQGFzc2V0KFwibXVzaWMvcmlkZGxlLm9nZ1wiKVxyXG4gICAgcHVibGljIHN0YXRpYyBiZ21SaWRkbGU6IFNvdW5kO1xyXG5cclxuICAgIEBhc3NldChcIm11c2ljL3JhZGlvLm9nZ1wiKVxyXG4gICAgcHVibGljIHN0YXRpYyBiZ21SYWRpbzogU291bmQ7XHJcblxyXG4gICAgQGFzc2V0KFwibXVzaWMvZWNzdGFzeS5vZ2dcIilcclxuICAgIHB1YmxpYyBzdGF0aWMgYmdtRWNzdGFzeTogU291bmQ7XHJcblxyXG4gICAgQGFzc2V0KFwibXVzaWMvd2luZ3Mub2dnXCIpXHJcbiAgICBwdWJsaWMgc3RhdGljIGJnbVdpbmdzOiBTb3VuZDtcclxuXHJcbiAgICBAYXNzZXQoXCJtdXNpYy9hd2FrZS5vZ2dcIilcclxuICAgIHB1YmxpYyBzdGF0aWMgYmdtQXdha2U6IFNvdW5kO1xyXG5cclxuICAgIEBhc3NldChcInNvdW5kcy9hbWJpZW50L3N0cmVhbS5vZ2dcIilcclxuICAgIHB1YmxpYyBzdGF0aWMgYW1iaWVudFN0cmVhbTogU291bmQ7XHJcblxyXG4gICAgQGFzc2V0KFwic291bmRzL2FtYmllbnQvd2luZC5vZ2dcIilcclxuICAgIHB1YmxpYyBzdGF0aWMgYW1iaWVudFdpbmQ6IFNvdW5kO1xyXG5cclxuICAgIHB1YmxpYyByZWFkb25seSBhbWJpZW50U291bmRzOiBSZWNvcmQ8QW1iaWVudFNvdW5kSWQsIFNvdW5kPiA9IHtcclxuICAgICAgICBbQW1iaWVudFNvdW5kSWQuU1RSRUFNXTogR2FtZVNjZW5lLmFtYmllbnRTdHJlYW0sXHJcbiAgICAgICAgW0FtYmllbnRTb3VuZElkLldJTkRdOiBHYW1lU2NlbmUuYW1iaWVudFdpbmRcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBiYWNrZ3JvdW5kVHJhY2tzOiBCYWNrZ3JvdW5kVHJhY2tbXSA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGlkOiBCZ21JZC5PVkVSV09STEQsXHJcbiAgICAgICAgICAgIHNvdW5kOiBHYW1lU2NlbmUuYmdtMSxcclxuICAgICAgICAgICAgYmFzZVZvbHVtZTogMC4yNVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBhY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgICAgICBpZDogQmdtSWQuQ0FWRSxcclxuICAgICAgICAgICAgc291bmQ6IEdhbWVTY2VuZS5iZ21DYXZlLFxyXG4gICAgICAgICAgICBiYXNlVm9sdW1lOiAxXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGlkOiBCZ21JZC5JTkZFUk5PLFxyXG4gICAgICAgICAgICBzb3VuZDogR2FtZVNjZW5lLmJnbTIsXHJcbiAgICAgICAgICAgIGJhc2VWb2x1bWU6IDAuMTBcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYWN0aXZlOiBmYWxzZSxcclxuICAgICAgICAgICAgaWQ6IEJnbUlkLlJJRERMRSxcclxuICAgICAgICAgICAgc291bmQ6IEdhbWVTY2VuZS5iZ21SaWRkbGUsXHJcbiAgICAgICAgICAgIGJhc2VWb2x1bWU6IDFcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYWN0aXZlOiBmYWxzZSxcclxuICAgICAgICAgICAgaWQ6IEJnbUlkLlJBRElPLFxyXG4gICAgICAgICAgICBzb3VuZDogR2FtZVNjZW5lLmJnbVJhZGlvLFxyXG4gICAgICAgICAgICBiYXNlVm9sdW1lOiAxXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGlkOiBCZ21JZC5XSU5HUyxcclxuICAgICAgICAgICAgc291bmQ6IEdhbWVTY2VuZS5iZ21XaW5ncyxcclxuICAgICAgICAgICAgYmFzZVZvbHVtZTogMC43NVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBhY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgICAgICBpZDogQmdtSWQuQVdBS0UsXHJcbiAgICAgICAgICAgIHNvdW5kOiBHYW1lU2NlbmUuYmdtQXdha2UsXHJcbiAgICAgICAgICAgIGJhc2VWb2x1bWU6IDAuNzVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgYWN0aXZlOiBmYWxzZSxcclxuICAgICAgICAgICAgaWQ6IEJnbUlkLkVDU1RBU1ksXHJcbiAgICAgICAgICAgIHNvdW5kOiBHYW1lU2NlbmUuYmdtRWNzdGFzeSxcclxuICAgICAgICAgICAgYmFzZVZvbHVtZTogMVxyXG4gICAgICAgIH1cclxuICAgIF07XHJcblxyXG4gICAgQGFzc2V0KERJQUxPR19GT05UKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgZm9udDogQml0bWFwRm9udDtcclxuXHJcbiAgICBAYXNzZXQoXCJzb3VuZHMvZW5kaW5nL3N3ZWxsLm1wM1wiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgc3dlbGw6IFNvdW5kO1xyXG5cclxuICAgIEBhc3NldChcInNvdW5kcy9nYXRlL3dyb25nLm9nZ1wiKVxyXG4gICAgcHVibGljIHN0YXRpYyB3cm9uZzogU291bmQ7XHJcblxyXG4gICAgcHJpdmF0ZSBwZXRFbmRpbmdUZXh0czogUGV0RW5kaW5nVGV4dFtdID0gW1xyXG4gICAgICAgIHsgbGFiZWw6IFwiVGhlIHNlbnNhdGlvbiBsYWNrcyBhbnkga2luZCBvZiBjb21wYXJpc29uLlwiLCBlbnRlcjogMC4xIH0sXHJcbiAgICAgICAgeyBsYWJlbDogXCJBbGwgd29ybGRseSBtYXR0ZXJzIHNlZW0gc28gaW5zaWduaWZpY2FudCBub3cuXCIsIGVudGVyOiAwLjIgfSxcclxuICAgICAgICB7IGxhYmVsOiBcIlJlYWxpdHkgYXJvdW5kIG1lIGJlZ2lucyB0byBmYWRlLlwiLCBlbnRlcjogMC4zIH0sXHJcbiAgICAgICAgeyBsYWJlbDogXCJTb29uLCBJIHdpbGwgYmUgc3dlcHQgYXdheSBpbiBlY3N0YXN5LlwiLCBlbnRlcjogMC41IH0sXHJcbiAgICAgICAgeyBsYWJlbDogXCJDYW4gSSBtdXN0ZXIgdXAgdGhlIHN0cmVuZ3RoIHRvIGJyZWFrIGZyZWU/XCIsIGVudGVyOiAwLjYgfSxcclxuICAgICAgICB7IGxhYmVsOiBcIklmIEkgZG9uJ3Qgc3RvcCBub3csIHRoZXJlIHdpbGwgYmUgbm8gZ29pbmcgYmFjay5cIiwgZW50ZXI6IDAuNyB9LFxyXG4gICAgICAgIHsgbGFiZWw6IFwiSXMgdGhpcyByZWFsbHkgaG93IGl0IGFsbCBlbmRzP1wiLCBlbnRlcjogMC44IH0sXHJcbiAgICAgICAgeyBsYWJlbDogXCJJIHJlZ3JldCBub3RoaW5n4oCmXCIsIGVudGVyOiAwLjkgfSxcclxuICAgICAgICB7IGxhYmVsOiBcIkZhcmV3ZWxsLCBjcnVlbCB3b3JsZOKAplwiLCBlbnRlcjogMSB9XHJcbiAgICBdO1xyXG5cclxuICAgIHByaXZhdGUgd2luZG93RW5kaW5nVGV4dHM6IFBldEVuZGluZ1RleHRbXSA9IFtcclxuICAgICAgICB7IGxhYmVsOiBcIkkgd2lwZWQgb2ZmIHRoZSBoZWF2eSBkdXN0IGxheWVyIG9uIHRoZSBnbGFzcy5cIiwgZW50ZXI6IDAuMSB9LFxyXG4gICAgICAgIHsgbGFiZWw6IFwiVGhlIHN1cmZhY2Ugd2FzIGFzIGNvbGQgYXMgdGhlIGNvcnBzZXMgYXJvdW5kIG1lLlwiLCBlbnRlcjogMC4yIH0sXHJcbiAgICAgICAgeyBsYWJlbDogXCJJdCB3YXMgaGFyZCB0byBtYWtlIG91dCBhbnl0aGluZyBpbiB0aGUgZGFya25lc3Mgb24gdGhlIG90aGVyIHNpZGXigKZcIiwgZW50ZXI6IDAuMyB9LFxyXG4gICAgICAgIHsgbGFiZWw6IFwiXCIsIGVudGVyOiAwLjQgfSxcclxuICAgICAgICB7IGxhYmVsOiBcIk15IGxlZ3MgZ2F2ZSBhd2F5IHdoZW4gSSByZWFsaXplZCB3aGF0IEkgd2FzIGxvb2tpbmcgYXQuXCIsIGVudGVyOiAwLjUgfSxcclxuICAgICAgICB7IGxhYmVsOiBcIk5vdGhpbmcgY2FuIGNvbXBhcmUgdG8gdGhlIGRyZWFkIEkgZmVsdCBpbiB0aGlzIG1vbWVudC5cIiwgZW50ZXI6IDAuNiB9LFxyXG4gICAgICAgIHsgbGFiZWw6IFwiXCIsIGVudGVyOiAwLjcgfSxcclxuICAgICAgICB7IGxhYmVsOiBcIkkgd2lzaGVkIEkgY291bGQgZ28gYmFjayB0byB0aGUgZHJlYW0gSSBmYWludGx5IHJlbWVtYmVyLlwiLCBlbnRlcjogMC44IH0sXHJcbiAgICAgICAgeyBsYWJlbDogXCJCdXQgdGhlcmUgd2FzIG5vdGhpbmcgYnV0IGFuIGluZXZpdGFibGUgZGVhdGggd2FpdGluZyBmb3IgbWXigKZcIiwgZW50ZXI6IDAuOSB9LFxyXG4gICAgXTtcclxuXHJcbiAgICAvKiBUb3RhbCBnYW1lIHRpbWUgKHRpbWUgcGFzc2VkIHdoaWxlIGdhbWUgbm90IHBhdXNlZCkgKi9cclxuICAgIHB1YmxpYyBnYW1lVGltZSA9IDA7XHJcblxyXG4gICAgcHVibGljIGdhbWVPYmplY3RzOiBHYW1lT2JqZWN0W10gPSBbXTtcclxuICAgIHB1YmxpYyBzb3VuZEVtaXR0ZXJzOiBTb3VuZEVtaXR0ZXJbXSA9IFtdO1xyXG4gICAgcHVibGljIHBvaW50c09mSW50ZXJlc3Q6IEdhbWVPYmplY3RJbmZvW10gPSBbXTtcclxuICAgIHB1YmxpYyB0cmlnZ2VyT2JqZWN0czogR2FtZU9iamVjdEluZm9bXSA9IFtdO1xyXG4gICAgcHVibGljIGJvdW5kT2JqZWN0czogR2FtZU9iamVjdEluZm9bXSA9IFtdO1xyXG4gICAgcHVibGljIGdhdGVPYmplY3RzOiBHYW1lT2JqZWN0SW5mb1tdID0gW107XHJcbiAgICBwdWJsaWMgcGF1c2VkID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgd29ybGQhOiBXb3JsZDtcclxuICAgIHB1YmxpYyBjYW1lcmEhOiBDYW1lcmE7XHJcbiAgICBwdWJsaWMgcGxheWVyITogUGxheWVyO1xyXG4gICAgcHVibGljIHN0b25lITogU3RvbmU7XHJcbiAgICBwdWJsaWMgc3RvbmVEaXNjaXBsZSE6IFN0b25lRGlzY2lwbGU7XHJcbiAgICBwdWJsaWMgdHJlZSE6IFRyZWU7XHJcbiAgICBwdWJsaWMgc2VlZCE6IFNlZWQ7XHJcbiAgICBwdWJsaWMgYm9uZSE6IEJvbmU7XHJcbiAgICBwdWJsaWMgZmxhbWVib3khOiBGbGFtZUJveTtcclxuICAgIHB1YmxpYyB3aW5nITogV2luZztcclxuICAgIHB1YmxpYyBiaXJkITogQmlyZDtcclxuICAgIHB1YmxpYyBzaGliYSE6IFNoaWJhO1xyXG4gICAgcHVibGljIHBvd2VyU2hpYmEhOiBQb3dlclNoaWJhO1xyXG4gICAgcHVibGljIG1pbWljITogTWltaWM7XHJcbiAgICBwdWJsaWMgc2hhZG93UHJlc2VuY2UhOiBTaGFkb3dQcmVzZW5jZTtcclxuICAgIHB1YmxpYyBjYXZlbWFuITogQ2F2ZW1hbjtcclxuICAgIHB1YmxpYyBwYXJ0aWNsZXMgPSBuZXcgUGFydGljbGVzKHRoaXMpO1xyXG4gICAgcHVibGljIGZpcmUhOiBGaXJlO1xyXG4gICAgcHVibGljIGV4aXRQb3J0YWwhOiBFeGl0UG9ydGFsO1xyXG4gICAgcHVibGljIGZpcmVGdXJ5RW5kVGltZSA9IDA7XHJcbiAgICBwdWJsaWMgYXBvY2FseXBzZSA9IGZhbHNlO1xyXG4gICAgcHVibGljIGZyaWVuZHNoaXBDdXRzY2VuZSA9IGZhbHNlO1xyXG4gICAgcHVibGljIHBldHRpbmdDdXRzY2VuZSA9IGZhbHNlO1xyXG4gICAgcHVibGljIHdpbmRvd0N1dHNjZW5lID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgd2luZG93Q3V0c2NlbmVUaW1lID0gMDtcclxuICAgIHB1YmxpYyBwZXR0aW5nQ3V0c2NlbmVUaW1lID0gMDtcclxuICAgIHByaXZhdGUgcGV0dGluZ0VuZGluZ1RyaWdnZXJlZCA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSB3aW5kb3dFbmRpbmdUcmlnZ2VyZWQgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgYXBvY2FseXBzZUZhY3RvciA9IDE7XHJcbiAgICBwcml2YXRlIGZpcmVFZmZlY3RzOiBGaXJlR2Z4W10gPSBbXTtcclxuICAgIHByaXZhdGUgZmlyZUVtaXR0ZXIhOiBQYXJ0aWNsZUVtaXR0ZXI7XHJcbiAgICBwcml2YXRlIGZyYW1lQ291bnRlciA9IDA7XHJcbiAgICBwcml2YXRlIGZyYW1lc1BlclNlY29uZCA9IDA7XHJcbiAgICBwdWJsaWMgc2hvd0JvdW5kcyA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBzY2FsZSA9IDE7XHJcbiAgICBwcml2YXRlIG1hcEluZm8hOiBNYXBJbmZvO1xyXG4gICAgcHVibGljIGR0OiBudW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSBmcHNJbnRlcnZhbDogYW55ID0gbnVsbDtcclxuICAgIHByaXZhdGUgZmFkZVRvQmxhY2tFbmRUaW1lID0gMDtcclxuICAgIHByaXZhdGUgZmFkZVRvQmxhY2tTdGFydFRpbWUgPSAwO1xyXG4gICAgcHJpdmF0ZSBmYWRlVG9CbGFja0ZhY3RvciA9IDA7XHJcbiAgICBwcml2YXRlIGZhZGVUb0JsYWNrRGlyZWN0aW9uOiBGYWRlRGlyZWN0aW9uID0gRmFkZURpcmVjdGlvbi5GQURFX09VVDtcclxuICAgIHB1YmxpYyByZWFkb25seSByZW5kZXJlciA9IG5ldyBSZW5kZXJlcih0aGlzKTtcclxuICAgIHB1YmxpYyByZWFkb25seSBtb3VudGFpblJpZGRsZSA9IG5ldyBNb3VudGFpblJpZGRsZSgpO1xyXG5cclxuICAgIHB1YmxpYyBzZXR1cCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm1hcEluZm8gPSBuZXcgTWFwSW5mbygpO1xyXG4gICAgICAgIHRoaXMuc291bmRFbWl0dGVycyA9IHRoaXMubWFwSW5mby5nZXRTb3VuZHMoKS5tYXAobyA9PiBTb3VuZEVtaXR0ZXIuZnJvbUdhbWVPYmplY3RJbmZvKHRoaXMsIG8pKTtcclxuICAgICAgICB0aGlzLnBvaW50c09mSW50ZXJlc3QgPSB0aGlzLm1hcEluZm8uZ2V0UG9pbnRlcnMoKTtcclxuICAgICAgICB0aGlzLnRyaWdnZXJPYmplY3RzID0gdGhpcy5tYXBJbmZvLmdldFRyaWdnZXJPYmplY3RzKCk7XHJcbiAgICAgICAgdGhpcy5ib3VuZE9iamVjdHMgPSB0aGlzLm1hcEluZm8uZ2V0Qm91bmRPYmplY3RzKCk7XHJcbiAgICAgICAgdGhpcy5nYXRlT2JqZWN0cyA9IHRoaXMubWFwSW5mby5nZXRHYXRlT2JqZWN0cygpO1xyXG5cclxuICAgICAgICB0aGlzLmdhbWVUaW1lID0gMDtcclxuICAgICAgICB0aGlzLmZhZGVUb0JsYWNrRW5kVGltZSA9IDA7XHJcbiAgICAgICAgdGhpcy5mYWRlVG9CbGFja1N0YXJ0VGltZSA9IDA7XHJcbiAgICAgICAgdGhpcy5mYWRlVG9CbGFja0ZhY3RvciA9IDA7XHJcbiAgICAgICAgdGhpcy5hcG9jYWx5cHNlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5maXJlRnVyeUVuZFRpbWUgPSAwO1xyXG4gICAgICAgIHRoaXMucGV0dGluZ0N1dHNjZW5lID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5wZXR0aW5nQ3V0c2NlbmVUaW1lID0gMDtcclxuICAgICAgICB0aGlzLnBldHRpbmdFbmRpbmdUcmlnZ2VyZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLndpbmRvd0N1dHNjZW5lID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy53aW5kb3dDdXRzY2VuZVRpbWUgPSAwO1xyXG4gICAgICAgIHRoaXMud2luZG93RW5kaW5nVHJpZ2dlcmVkID0gZmFsc2U7XHJcbiAgICAgICAgQ29udmVyc2F0aW9uLnJlc2V0R2xvYmFscygpO1xyXG5cclxuICAgICAgICB0aGlzLmdhbWVPYmplY3RzID0gW1xyXG4gICAgICAgICAgICB0aGlzLndvcmxkID0gbmV3IFdvcmxkKHRoaXMpLFxyXG4gICAgICAgICAgICB0aGlzLnBhcnRpY2xlcyxcclxuICAgICAgICAgICAgLi4udGhpcy5zb3VuZEVtaXR0ZXJzLFxyXG4gICAgICAgICAgICAuLi50aGlzLm1hcEluZm8uZ2V0RW50aXRpZXMoKS5tYXAoZW50aXR5ID0+IHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoZW50aXR5Lm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwicmlkZGxlc3RvbmVcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSaWRkbGVTdG9uZSh0aGlzLCBlbnRpdHkueCwgZW50aXR5LnksIGVudGl0eS5wcm9wZXJ0aWVzKTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiY2FtcGZpcmVcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDYW1wZmlyZSh0aGlzLCBlbnRpdHkueCwgZW50aXR5LnkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJyYWRpb1wiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJhZGlvKHRoaXMsIGVudGl0eS54LCBlbnRpdHkueSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm1vdmluZ3BsYXRmb3JtXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTW92aW5nUGxhdGZvcm0odGhpcywgZW50aXR5LngsIGVudGl0eS55LCBlbnRpdHkucHJvcGVydGllcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNrdWxsXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2t1bGwodGhpcywgZW50aXR5LngsIGVudGl0eS55KTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiY2hpY2tlblwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENoaWNrZW4odGhpcywgZW50aXR5LngsIGVudGl0eS55KTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3VwZXJ0aHJvd1wiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN1cGVyVGhyb3codGhpcywgZW50aXR5LngsIGVudGl0eS55KTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwicG9ydGFsXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUG9ydGFsKHRoaXMsIGVudGl0eS54LCBlbnRpdHkueSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIndpbmRvd1wiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdpbmRvdyh0aGlzLCBlbnRpdHkueCwgZW50aXR5LnkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVFbnRpdHkoZW50aXR5Lm5hbWUsIHRoaXMsIGVudGl0eS54LCBlbnRpdHkueSwgZW50aXR5LnByb3BlcnRpZXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIHRoaXMucGxheWVyID0gdGhpcy5nZXRHYW1lT2JqZWN0KFBsYXllcik7XHJcbiAgICAgICAgdGhpcy5maXJlID0gdGhpcy5nZXRHYW1lT2JqZWN0KEZpcmUpO1xyXG4gICAgICAgIHRoaXMuc3RvbmUgPSB0aGlzLmdldEdhbWVPYmplY3QoU3RvbmUpO1xyXG4gICAgICAgIHRoaXMuc3RvbmVEaXNjaXBsZSA9IHRoaXMuZ2V0R2FtZU9iamVjdChTdG9uZURpc2NpcGxlKTtcclxuICAgICAgICB0aGlzLnRyZWUgPSB0aGlzLmdldEdhbWVPYmplY3QoVHJlZSk7XHJcbiAgICAgICAgdGhpcy5mbGFtZWJveSA9IHRoaXMuZ2V0R2FtZU9iamVjdChGbGFtZUJveSk7XHJcbiAgICAgICAgdGhpcy53aW5nID0gdGhpcy5nZXRHYW1lT2JqZWN0KFdpbmcpO1xyXG4gICAgICAgIHRoaXMuYmlyZCA9IHRoaXMuZ2V0R2FtZU9iamVjdChCaXJkKTtcclxuICAgICAgICB0aGlzLnNoaWJhID0gdGhpcy5nZXRHYW1lT2JqZWN0KFNoaWJhKTtcclxuICAgICAgICB0aGlzLnBvd2VyU2hpYmEgPSB0aGlzLmdldEdhbWVPYmplY3QoUG93ZXJTaGliYSk7XHJcbiAgICAgICAgdGhpcy5zaGFkb3dQcmVzZW5jZSA9IHRoaXMuZ2V0R2FtZU9iamVjdChTaGFkb3dQcmVzZW5jZSk7XHJcbiAgICAgICAgdGhpcy5taW1pYyA9IHRoaXMuZ2V0R2FtZU9iamVjdChNaW1pYyk7XHJcbiAgICAgICAgdGhpcy5jYXZlbWFuID0gdGhpcy5nZXRHYW1lT2JqZWN0KENhdmVtYW4pO1xyXG4gICAgICAgIHRoaXMuYm9uZSA9IHRoaXMuZ2V0R2FtZU9iamVjdChCb25lKTtcclxuICAgICAgICB0aGlzLmV4aXRQb3J0YWwgPSB0aGlzLmdldEdhbWVPYmplY3QoRXhpdFBvcnRhbCk7XHJcblxyXG4gICAgICAgIHRoaXMuY2FtZXJhID0gbmV3IENhbWVyYSh0aGlzLCB0aGlzLnBsYXllcik7XHJcbiAgICAgICAgdGhpcy5jYW1lcmEuc2V0Qm91bmRzKHRoaXMucGxheWVyLmdldEN1cnJlbnRNYXBCb3VuZHMoKSk7XHJcblxyXG4gICAgICAgIHRoaXMuZnBzSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVzUGVyU2Vjb25kID0gdGhpcy5mcmFtZUNvdW50ZXI7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVDb3VudGVyID0gMDtcclxuICAgICAgICB9LCAxMDAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5nYW1lLmNhbXBhaWduLmJlZ2luKHRoaXMpO1xyXG5cclxuICAgICAgICB0aGlzLnBsYXlCYWNrZ3JvdW5kVHJhY2soQmdtSWQuQ0FWRSk7XHJcblxyXG4gICAgICAgIENvbnZlcnNhdGlvbi5zZXRHbG9iYWwoXCJkZXZtb2RlXCIsIGlzRGV2KCkgKyBcIlwiKTtcclxuICAgICAgICB0aGlzLmxvYWRBcG9jYWx5cHNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsZWFudXAoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZnBzSW50ZXJ2YWwgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuZnBzSW50ZXJ2YWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkR2FtZU9iamVjdChvYmplY3Q6IEdhbWVPYmplY3QpOiB2b2lkIHtcclxuICAgICAgICAvLyBJbnNlcnQgbmV3IGl0ZW0gcmlnaHQgYmVmb3JlIHRoZSBwbGF5ZXIgc28gcGxheWVyIGlzIGFsd2F5cyBpbiBmcm9udFxyXG4gICAgICAgIHRoaXMuZ2FtZU9iamVjdHMuc3BsaWNlKHRoaXMuZ2FtZU9iamVjdHMuaW5kZXhPZih0aGlzLnBsYXllcikgLSAxLCAwLCBvYmplY3QpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVHYW1lT2JqZWN0KG9iamVjdDogR2FtZU9iamVjdCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nYW1lT2JqZWN0cy5pbmRleE9mKG9iamVjdCk7XHJcblxyXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2FtZU9iamVjdHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBzZXRHYXRlRGlzYWJsZWQoZ2F0ZUlkOiBzdHJpbmcsIGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZ2F0ZSA9IHRoaXMuZ2F0ZU9iamVjdHMuZmluZChvID0+IG8ubmFtZSA9PT0gZ2F0ZUlkKTtcclxuICAgICAgICBpZiAoIWdhdGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgY2Fubm90IHNldCBkaXNhYmxlZCBzdGF0dXMgb2YgZ2F0ZSAnJHtnYXRlSWR9JyBiZWNhdXNlIGl0IGRvZXMgbm90IGV4aXN0YCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZ2F0ZS5wcm9wZXJ0aWVzLmRpc2FibGVkID0gZGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEJhY2tncm91bmRUcmFjayhpZDogQmdtSWQpOiBCYWNrZ3JvdW5kVHJhY2sge1xyXG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5iYWNrZ3JvdW5kVHJhY2tzLmZpbmQodHJhY2sgPT4gdHJhY2suaWQgPT09IGlkKTtcclxuXHJcbiAgICAgICAgaWYgKCFmb3VuZCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBNaXNzaW5nIGJhY2tncm91bmQgdHJhY2sgd2l0aCBJRCAnJHtpZH0nLmApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmFja2dyb3VuZFRyYWNrc1swXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmb3VuZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZmFkZUFjdGl2ZUJhY2tncm91bmRUcmFjayhmYWRlOiBudW1iZXIsIGludmVyc2UgPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYmFja2dyb3VuZFRyYWNrcy5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICBpZiAodC5hY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbnZlcnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5zb3VuZC5zZXRWb2x1bWUodC5iYXNlVm9sdW1lICogKDEgLSBmYWRlKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc291bmQuc2V0Vm9sdW1lKHQuYmFzZVZvbHVtZSAqIGZhZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEFjdGl2ZUJnbVRyYWNrKGlkOiBCZ21JZCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYmFja2dyb3VuZFRyYWNrcy5mb3JFYWNoKHQgPT4geyB0LmFjdGl2ZSA9IGZhbHNlOyB9KTtcclxuICAgICAgICBjb25zdCB0cmFjayA9IHRoaXMuYmFja2dyb3VuZFRyYWNrcy5maW5kKHQgPT4gdC5pZCA9PT0gaWQpO1xyXG5cclxuICAgICAgICBpZiAodHJhY2spIHtcclxuICAgICAgICAgICAgdHJhY2suYWN0aXZlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdHJhY2suc291bmQuaXNQbGF5aW5nKCkpIHtcclxuICAgICAgICAgICAgICAgIHRyYWNrLnNvdW5kLnNldExvb3AodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB0cmFjay5zb3VuZC5wbGF5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGZhZGVUb0JhY2tncm91bmRUcmFjayhpZDogQmdtSWQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB0cmFjayA9IHRoaXMuZ2V0QmFja2dyb3VuZFRyYWNrKGlkKTtcclxuICAgICAgICB0aGlzLm11dGVNdXNpYygpO1xyXG4gICAgICAgIHRoaXMuYmFja2dyb3VuZFRyYWNrcy5mb3JFYWNoKHQgPT4geyB0LmFjdGl2ZSA9IGZhbHNlOyB9KTtcclxuICAgICAgICB0cmFjay5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRyYWNrLnNvdW5kLnNldFZvbHVtZSh0cmFjay5iYXNlVm9sdW1lKTtcclxuXHJcbiAgICAgICAgaWYgKCF0cmFjay5zb3VuZC5pc1BsYXlpbmcoKSkge1xyXG4gICAgICAgICAgICB0cmFjay5zb3VuZC5zZXRMb29wKHRydWUpO1xyXG4gICAgICAgICAgICB0cmFjay5zb3VuZC5wbGF5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwbGF5QmFja2dyb3VuZFRyYWNrKGlkOiBCZ21JZCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHRyYWNrID0gdGhpcy5nZXRCYWNrZ3JvdW5kVHJhY2soaWQpO1xyXG4gICAgICAgIHRoaXMuYmFja2dyb3VuZFRyYWNrcy5mb3JFYWNoKHQgPT4gdC5zb3VuZC5zdG9wKCkpO1xyXG4gICAgICAgIHRyYWNrLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdHJhY2suc291bmQuc2V0Vm9sdW1lKHRyYWNrLmJhc2VWb2x1bWUpO1xyXG4gICAgICAgIHRyYWNrLnNvdW5kLnNldExvb3AodHJ1ZSk7XHJcbiAgICAgICAgdHJhY2suc291bmQucGxheSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0R2FtZU9iamVjdDxUPih0eXBlOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUKTogVCB7XHJcbiAgICAgICAgZm9yIChjb25zdCBnYW1lT2JqZWN0IG9mIHRoaXMuZ2FtZU9iamVjdHMpIHtcclxuICAgICAgICAgICAgaWYgKGdhbWVPYmplY3QgaW5zdGFuY2VvZiB0eXBlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2FtZU9iamVjdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBHYW1lIG9iamVjdCBvZiB0eXBlICR7dHlwZS5uYW1lfSBub3QgZm91bmQuYCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFjdGl2YXRlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaW5wdXQub25CdXR0b25Eb3duLmNvbm5lY3QodGhpcy5oYW5kbGVCdXR0b25Eb3duLCB0aGlzKTtcclxuICAgICAgICB0aGlzLmlucHV0Lm9uQnV0dG9uRG93bi5jb25uZWN0KHRoaXMucGxheWVyLmhhbmRsZUJ1dHRvbkRvd24sIHRoaXMucGxheWVyKTtcclxuICAgICAgICB0aGlzLmlucHV0Lm9uQnV0dG9uVXAuY29ubmVjdCh0aGlzLnBsYXllci5oYW5kbGVCdXR0b25VcCwgdGhpcy5wbGF5ZXIpO1xyXG4gICAgICAgIHRoaXMucmVzdW1lKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlYWN0aXZhdGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wYXVzZSgpO1xyXG4gICAgICAgIHRoaXMuaW5wdXQub25CdXR0b25Eb3duLmRpc2Nvbm5lY3QodGhpcy5oYW5kbGVCdXR0b25Eb3duLCB0aGlzKTtcclxuICAgICAgICB0aGlzLmlucHV0Lm9uQnV0dG9uRG93bi5kaXNjb25uZWN0KHRoaXMucGxheWVyLmhhbmRsZUJ1dHRvbkRvd24sIHRoaXMucGxheWVyKTtcclxuICAgICAgICB0aGlzLmlucHV0Lm9uQnV0dG9uVXAuZGlzY29ubmVjdCh0aGlzLnBsYXllci5oYW5kbGVCdXR0b25VcCwgdGhpcy5wbGF5ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaGFuZGxlQnV0dG9uRG93bihldmVudDogQ29udHJvbGxlckV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGV2ZW50LmlzQWJvcnQgfHwgZXZlbnQuaXNQYXVzZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wbGF5ZXIuZ2V0RGFuY2UoKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbGF5ZXIuZ2V0RGFuY2UoKT8ucmVzZXRNdXNpYygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbGF5ZXIuY2FuY2VsRGFuY2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGV2ZW50LmlzUGF1c2UpIHtcclxuICAgICAgICAgICAgdGhpcy5zY2VuZXMucHVzaFNjZW5lKFBhdXNlU2NlbmUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2FtZU92ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgR2FtZVNjZW5lLmJnbTEuc3RvcCgpO1xyXG4gICAgICAgIEdhbWVTY2VuZS5iZ20yLnN0b3AoKTtcclxuICAgICAgICBHYW1lU2NlbmUuc3dlbGwuc2V0Vm9sdW1lKDAuNSk7XHJcbiAgICAgICAgR2FtZVNjZW5lLnN3ZWxsLnBsYXkoKTtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2FtZS5zY2VuZXMuc2V0U2NlbmUoRW5kU2NlbmUpO1xyXG4gICAgICAgIH0sIDIwMDApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0FjdGl2ZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMucGF1c2VkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGUoZHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnBhdXNlZCkge1xyXG4gICAgICAgICAgICBkdCA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmR0ID0gZHQ7XHJcbiAgICAgICAgdGhpcy5nYW1lVGltZSArPSBkdDtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBvYmogb2YgdGhpcy5nYW1lT2JqZWN0cykge1xyXG4gICAgICAgICAgICBvYmoudXBkYXRlKGR0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2FtZXJhLnVwZGF0ZShkdCwgdGhpcy5nYW1lVGltZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmZhZGVUb0JsYWNrRW5kVGltZSA+IHRoaXMuZ2FtZVRpbWUpIHtcclxuICAgICAgICAgICAgbGV0IGZhZGUgPSAodGhpcy5nYW1lVGltZSAtIHRoaXMuZmFkZVRvQmxhY2tTdGFydFRpbWUpIC8gKHRoaXMuZmFkZVRvQmxhY2tFbmRUaW1lIC0gdGhpcy5mYWRlVG9CbGFja1N0YXJ0VGltZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5mYWRlVG9CbGFja0RpcmVjdGlvbiA9PT0gRmFkZURpcmVjdGlvbi5GQURFX0lOKSB7XHJcbiAgICAgICAgICAgICAgICBmYWRlID0gMSAtIGZhZGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuZmFkZVRvQmxhY2tGYWN0b3IgPSBmYWRlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZnJpZW5kc2hpcEN1dHNjZW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRnJpZW5kc2hpcEVuZGluZ0N1dHNjZW5lKGR0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBldHRpbmdDdXRzY2VuZSkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBldHRpbmdFbmRpbmdDdXRzY2VuZShkdCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy53aW5kb3dDdXRzY2VuZSkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVdpbmRvd0VuZGluZ0N1dHNjZW5lKGR0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRyYXcoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY3R4LnNhdmUoKTtcclxuXHJcbiAgICAgICAgLy8gQ2VudGVyIGNvb3JkaW5hdGUgc3lzdGVtXHJcbiAgICAgICAgY3R4LnRyYW5zbGF0ZShjdHguY2FudmFzLndpZHRoIC8gMiwgY3R4LmNhbnZhcy5oZWlnaHQgLyAyKTtcclxuXHJcbiAgICAgICAgLy8gU2NhbGUgYnkgdGhyZWUgYmVjYXVzZSBldmVyeXRoaW5nIHdhcyBiYXNlZCBvbiA0ODB4MzAwIGNhbnZhcyBhbmQgbm93IGl0cyB0aHJlZSB0aW1lcyBsYXJnZXJcclxuICAgICAgICBjdHguc2NhbGUodGhpcy5zY2FsZSwgdGhpcy5zY2FsZSk7XHJcblxyXG4gICAgICAgIC8vIERyYXcgc3R1ZmZcclxuICAgICAgICB0aGlzLmNhbWVyYS5hcHBseVRyYW5zZm9ybShjdHgpO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IG9iaiBvZiB0aGlzLmdhbWVPYmplY3RzKSB7XHJcbiAgICAgICAgICAgIG9iai5kcmF3KGN0eCwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBBZGQgYWxsIHBhcnRpY2xlIGVtaXR0ZXJzIHRvIHJlbmRlcmluZyBxdWV1ZVxyXG4gICAgICAgIHRoaXMucGFydGljbGVzLmFkZEVtaXR0ZXJzVG9SZW5kZXJpbmdRdWV1ZSgpO1xyXG5cclxuICAgICAgICAvLyBBZGQgYWxsIGRlYnVnIGJvdW5kcyB0byByZW5kZXJpbmcgcXVldWVcclxuICAgICAgICB0aGlzLmFkZEFsbERlYnVnQm91bmRzVG9SZW5kZXJpbmdRdWV1ZSgpO1xyXG5cclxuICAgICAgICAvLyBBcG9jYWx5cHNlXHJcbiAgICAgICAgaWYgKHRoaXMuZmlyZUZ1cnlFbmRUaW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FtZXJhLnNldENpbmVtYXRpY0JhcigxKTtcclxuICAgICAgICAgICAgLy8gRmFkZSBvdXRcclxuICAgICAgICAgICAgY29uc3QgZGlmZiA9IHRoaXMuZmlyZUZ1cnlFbmRUaW1lIC0gdGhpcy5nYW1lVGltZTtcclxuICAgICAgICAgICAgY29uc3QgcCA9IGRpZmYgLyAxNjtcclxuICAgICAgICAgICAgY29uc3QgZmFkZSA9IHZhbHVlQ3VydmVzLnRyYXBlemUoMC40KS5nZXQocCk7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhd0ZhZGUoY3R4LCBmYWRlLCBcImJsYWNrXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXBvY2FseXBzZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRyYXdBcG9jYWx5cHNlT3ZlcmxheShjdHgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gR2F0ZSBGYWRlXHJcbiAgICAgICAgaWYgKHRoaXMuZmFkZVRvQmxhY2tGYWN0b3IgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmFkZUFjdGl2ZUJhY2tncm91bmRUcmFjayh0aGlzLmZhZGVUb0JsYWNrRmFjdG9yLCB0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy5kcmF3RmFkZShjdHgsIHRoaXMuZmFkZVRvQmxhY2tGYWN0b3IsIFwiYmxhY2tcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDaW5lbWF0aWMgYmFyc1xyXG4gICAgICAgIHRoaXMuY2FtZXJhLmFkZENpbmVtYXRpY0JhcnNUb1JlbmRlcmVyKCk7XHJcblxyXG4gICAgICAgIC8vIERyYXcgc3R1ZmYgZnJvbSBSZW5kZXJpbmcgcXVldWVcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmRyYXcoY3R4KTtcclxuXHJcbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcclxuXHJcbiAgICAgICAgLy8gRGlzcGxheSBGUFMgY291bnRlclxyXG4gICAgICAgIGlmIChpc0RldigpKSB7XHJcbiAgICAgICAgICAgIEdhbWVTY2VuZS5mb250LmRyYXdUZXh0KFxyXG4gICAgICAgICAgICAgICAgY3R4LFxyXG4gICAgICAgICAgICAgICAgYCR7dGhpcy5mcmFtZXNQZXJTZWNvbmR9IEZQU2AsXHJcbiAgICAgICAgICAgICAgICAyICogdGhpcy5zY2FsZSwgMiAqIHRoaXMuc2NhbGUgLSAzLFxyXG4gICAgICAgICAgICAgICAgXCJ3aGl0ZVwiXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZyYW1lQ291bnRlcisrO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWRkU2luZ2xlRGVidWdCb3VuZHNUb1JlbmRlcmluZ1F1ZXVlKGJvdW5kczogQm91bmRzLCBjb2xvcjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGQoe1xyXG4gICAgICAgICAgICB0eXBlOiBSZW5kZXJpbmdUeXBlLlJFQ1QsXHJcbiAgICAgICAgICAgIGxheWVyOiBSZW5kZXJpbmdMYXllci5ERUJVRyxcclxuICAgICAgICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICAgICAgICAgIHg6IGJvdW5kcy54LFxyXG4gICAgICAgICAgICAgICAgeTogLWJvdW5kcy55XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGxpbmVDb2xvcjogY29sb3IsXHJcbiAgICAgICAgICAgIGRpbWVuc2lvbjoge1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IGJvdW5kcy53aWR0aCxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogYm91bmRzLmhlaWdodFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRBbGxEZWJ1Z0JvdW5kc1RvUmVuZGVyaW5nUXVldWUoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd0JvdW5kcykge1xyXG4gICAgICAgICAgICAvLyBEcmF3IHRyaWdnZXIgYm91bmRzIGZvciBjb2xsaXNpb25zXHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgb2JqIG9mIHRoaXMudHJpZ2dlck9iamVjdHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IGJvdW5kc0Zyb21NYXBPYmplY3Qob2JqKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkU2luZ2xlRGVidWdCb3VuZHNUb1JlbmRlcmluZ1F1ZXVlKGJvdW5kcywgXCJibHVlXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9iaiBvZiB0aGlzLmJvdW5kT2JqZWN0cykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYm91bmRzID0gYm91bmRzRnJvbU1hcE9iamVjdChvYmopO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRTaW5nbGVEZWJ1Z0JvdW5kc1RvUmVuZGVyaW5nUXVldWUoYm91bmRzLCBcInllbGxvd1wiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChjb25zdCBvYmogb2YgdGhpcy5nYXRlT2JqZWN0cykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYm91bmRzID0gYm91bmRzRnJvbU1hcE9iamVjdChvYmopO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRTaW5nbGVEZWJ1Z0JvdW5kc1RvUmVuZGVyaW5nUXVldWUoYm91bmRzLCBcImdyZWVuXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydEFwb2NhbHlwc2VNdXNpYygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBsYXlCYWNrZ3JvdW5kVHJhY2soQmdtSWQuSU5GRVJOTyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0RnJpZW5kc2hpcE11c2ljKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucGxheUJhY2tncm91bmRUcmFjayhCZ21JZC5XSU5HUyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG11dGVNdXNpYygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmJhY2tncm91bmRUcmFja3MuZm9yRWFjaCh0ID0+IHQuc291bmQuc2V0Vm9sdW1lKDApKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzZXRNdXNpY1ZvbHVtZXMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kVHJhY2tzLmZvckVhY2godCA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0LmFjdGl2ZSkgdC5zb3VuZC5zZXRWb2x1bWUodC5iYXNlVm9sdW1lKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZmFkZVRvQmxhY2soZHVyYXRpb246IG51bWJlciwgZGlyZWN0aW9uOiBGYWRlRGlyZWN0aW9uKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZmFkZVRvQmxhY2tTdGFydFRpbWUgPSB0aGlzLmdhbWVUaW1lO1xyXG4gICAgICAgICAgICB0aGlzLmZhZGVUb0JsYWNrRW5kVGltZSA9IHRoaXMuZ2FtZVRpbWUgKyBkdXJhdGlvbjtcclxuICAgICAgICAgICAgdGhpcy5mYWRlVG9CbGFja0RpcmVjdGlvbiA9IGRpcmVjdGlvbjtcclxuXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gRmFkZURpcmVjdGlvbi5GQURFX09VVCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmFkZVRvQmxhY2tGYWN0b3IgPSAxO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZhZGVUb0JsYWNrRmFjdG9yID0gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH0sIGR1cmF0aW9uICogMTAwMCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVBcG9jYWx5cHNlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZmlyZUVtaXR0ZXIuc2V0UG9zaXRpb24odGhpcy5wbGF5ZXIueCwgdGhpcy5wbGF5ZXIueSk7XHJcbiAgICAgICAgdGhpcy5maXJlRWZmZWN0cy5mb3JFYWNoKGUgPT4gZS51cGRhdGUoKSk7XHJcblxyXG4gICAgICAgIGlmICh0aW1lZFJuZCh0aGlzLmR0LCAwLjgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZUVtaXR0ZXIuZW1pdCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5maXJlLmdyb3d0aFRhcmdldCA9IE1hdGgubWF4KDIsIDIwIC0gNiAqIHRoaXMuZ2FtZU9iamVjdHMuZmlsdGVyKFxyXG4gICAgICAgICAgICBvID0+IG8gaW5zdGFuY2VvZiBDbG91ZCAmJiBvLmlzUmFpbmluZygpXHJcbiAgICAgICAgKS5sZW5ndGgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5maXJlLmludGVuc2l0eSA8IDYpIHtcclxuICAgICAgICAgICAgdGhpcy5maXJlLmludGVuc2l0eSA9IE1hdGgubWF4KHRoaXMuZmlyZS5pbnRlbnNpdHksIDQpO1xyXG4gICAgICAgICAgICB0aGlzLmFwb2NhbHlwc2VGYWN0b3IgPSBjbGFtcCgodGhpcy5maXJlLmludGVuc2l0eSAtIDQpIC8gMiwgMCwgMSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5hcG9jYWx5cHNlRmFjdG9yIDw9IDAuMDAxKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBFbmQgYXBvY2FseXBzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hcG9jYWx5cHNlRmFjdG9yID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXBvY2FseXBzZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maXJlLnN0YXRlID0gRmlyZVN0YXRlLlBVVF9PVVQ7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5nYW1lLmNhbXBhaWduLmdldFF1ZXN0KFF1ZXN0S2V5LkEpLnRyaWdnZXIoUXVlc3RBVHJpZ2dlci5CRUFUX0ZJUkUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nYW1lLmNhbXBhaWduLnJ1bkFjdGlvbihcImVuYWJsZVwiLCBudWxsLCBbIFwiZmlyZVwiLCBcImZpcmUzXCIgXSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gTXVzaWNcclxuICAgICAgICAgICAgICAgIEdhbWVTY2VuZS5iZ20yLnN0b3AoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUZyaWVuZHNoaXBFbmRpbmdDdXRzY2VuZShkdDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jYW1lcmEuc2V0Q2luZW1hdGljQmFyKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlV2luZG93RW5kaW5nQ3V0c2NlbmUoZHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMud2luZG93Q3V0c2NlbmVUaW1lICs9IGR0O1xyXG4gICAgICAgIGlmICghdGhpcy53aW5kb3dFbmRpbmdUcmlnZ2VyZWQgJiYgdGhpcy53aW5kb3dDdXRzY2VuZVRpbWUgPiBXSU5ET1dfRU5ESU5HX0NVVFNDRU5FX0RVUkFUSU9OICsgV0lORE9XX0VORElOR19GQURFX0RVUkFUSU9OKSB7XHJcbiAgICAgICAgICAgIHRoaXMud2luZG93RW5kaW5nVHJpZ2dlcmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5nYW1lLmNhbXBhaWduLmdldFF1ZXN0KFF1ZXN0S2V5LkUpLmZpbmlzaCgpO1xyXG4gICAgICAgICAgICB0aGlzLmdhbWVPdmVyKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLndpbmRvd0VuZGluZ1RleHRzLmZvckVhY2goKHQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLndpbmRvd0N1dHNjZW5lVGltZSAvIFdJTkRPV19FTkRJTkdfQ1VUU0NFTkVfRFVSQVRJT04gPiB0LmVudGVyKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmYWRlVGltZSA9IDAuNTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVudGVyVGltZSA9IFdJTkRPV19FTkRJTkdfQ1VUU0NFTkVfRFVSQVRJT04gKiB0LmVudGVyO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYWxwaGEgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCAodGhpcy53aW5kb3dDdXRzY2VuZVRpbWUgLSBlbnRlclRpbWUpIC8gZmFkZVRpbWUpKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1lYXN1cmUgPSBHYW1lU2NlbmUuZm9udC5tZWFzdXJlVGV4dCh0LmxhYmVsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkKHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBSZW5kZXJpbmdUeXBlLlRFWFQsIGxheWVyOiBSZW5kZXJpbmdMYXllci5VSSwgdGV4dENvbG9yOiBcIndoaXRlXCIsIHJlbGF0aXZlVG9TY3JlZW46IHRydWUsIGFscGhhLFxyXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHQubGFiZWwsIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IChHQU1FX0NBTlZBU19XSURUSCAvIDIpIC0gKG1lYXN1cmUud2lkdGggLyAyKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeTogbWVhc3VyZS5oZWlnaHQgKiBpbmRleCArIChpbmRleCAqIDMpICsgNTBcclxuICAgICAgICAgICAgICAgICAgICB9LCBhc3NldDogR2FtZVNjZW5lLmZvbnQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlUGV0dGluZ0VuZGluZ0N1dHNjZW5lKGR0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBldHRpbmdDdXRzY2VuZVRpbWUgKz0gZHQ7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBldHRpbmdFbmRpbmdUcmlnZ2VyZWQgJiYgdGhpcy5wZXR0aW5nQ3V0c2NlbmVUaW1lID4gUEVUVElOR19FTkRJTkdfQ1VUU0NFTkVfRFVSQVRJT04gKyBQRVRUSU5HX0VORElOR19GQURFX0RVUkFUSU9OKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGV0dGluZ0VuZGluZ1RyaWdnZXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZ2FtZS5jYW1wYWlnbi5nZXRRdWVzdChRdWVzdEtleS5EKS5maW5pc2goKTtcclxuICAgICAgICAgICAgdGhpcy5nYW1lT3ZlcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnBldEVuZGluZ1RleHRzLmZvckVhY2goKHQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBldHRpbmdDdXRzY2VuZVRpbWUgLyBQRVRUSU5HX0VORElOR19DVVRTQ0VORV9EVVJBVElPTiA+IHQuZW50ZXIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZhZGVUaW1lID0gMC41O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZW50ZXJUaW1lID0gUEVUVElOR19FTkRJTkdfQ1VUU0NFTkVfRFVSQVRJT04gKiB0LmVudGVyO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeU9mZnNldCA9IE1hdGgucG93KCh0aGlzLnBldHRpbmdDdXRzY2VuZVRpbWUgLSBlbnRlclRpbWUpIC8gMiwgMikgKiAtMTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFscGhhID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgKHRoaXMucGV0dGluZ0N1dHNjZW5lVGltZSAtIGVudGVyVGltZSkgLyBmYWRlVGltZSkpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWVhc3VyZSA9IEdhbWVTY2VuZS5mb250Lm1lYXN1cmVUZXh0KHQubGFiZWwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGQoe1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFJlbmRlcmluZ1R5cGUuVEVYVCwgbGF5ZXI6IFJlbmRlcmluZ0xheWVyLlVJLCB0ZXh0Q29sb3I6IFwid2hpdGVcIiwgcmVsYXRpdmVUb1NjcmVlbjogdHJ1ZSwgYWxwaGEsXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogdC5sYWJlbCwgcG9zaXRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeDogKEdBTUVfQ0FOVkFTX1dJRFRIIC8gMikgLSAobWVhc3VyZS53aWR0aCAvIDIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3k6IG1lYXN1cmUuaGVpZ2h0ICogaW5kZXggKyAoaW5kZXggKiAzKSArIDIwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IDEwMCArIHlPZmZzZXRcclxuICAgICAgICAgICAgICAgICAgICB9LCBhc3NldDogR2FtZVNjZW5lLmZvbnQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZHJhd0Fwb2NhbHlwc2VPdmVybGF5KGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVBcG9jYWx5cHNlKCk7XHJcbiAgICAgICAgdGhpcy5jYW1lcmEuc2V0Q2luZW1hdGljQmFyKHRoaXMuYXBvY2FseXBzZUZhY3Rvcik7XHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkKHtcclxuICAgICAgICAgICAgdHlwZTogUmVuZGVyaW5nVHlwZS5SRUNULFxyXG4gICAgICAgICAgICBsYXllcjogUmVuZGVyaW5nTGF5ZXIuRlVMTFNDUkVFTl9GWCxcclxuICAgICAgICAgICAgcG9zaXRpb246IHsgeDogMCwgeTogMCB9LFxyXG4gICAgICAgICAgICBmaWxsQ29sb3I6IFwiZGFya3JlZFwiLFxyXG4gICAgICAgICAgICBnbG9iYWxDb21wb3NpdGVPcGVyYXRpb246IFwiY29sb3JcIixcclxuICAgICAgICAgICAgYWxwaGE6IDAuNyAqIHRoaXMuYXBvY2FseXBzZUZhY3RvcixcclxuICAgICAgICAgICAgcmVsYXRpdmVUb1NjcmVlbjogdHJ1ZSxcclxuICAgICAgICAgICAgZGltZW5zaW9uOiB7IHdpZHRoOiBjdHguY2FudmFzLndpZHRoLCBoZWlnaHQ6IGN0eC5jYW52YXMuaGVpZ2h0IH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRyYXdGYWRlKGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCBhbHBoYTogbnVtYmVyLCBjb2xvciA9IFwiYmxhY2tcIik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkKHtcclxuICAgICAgICAgICAgdHlwZTogUmVuZGVyaW5nVHlwZS5SRUNULFxyXG4gICAgICAgICAgICBsYXllcjogUmVuZGVyaW5nTGF5ZXIuRlVMTFNDUkVFTl9GWCxcclxuICAgICAgICAgICAgcG9zaXRpb246IHsgeDogMCwgeTogMCB9LFxyXG4gICAgICAgICAgICBmaWxsQ29sb3I6IGNvbG9yLFxyXG4gICAgICAgICAgICBhbHBoYSxcclxuICAgICAgICAgICAgcmVsYXRpdmVUb1NjcmVlbjogdHJ1ZSxcclxuICAgICAgICAgICAgZGltZW5zaW9uOiB7IHdpZHRoOiBjdHguY2FudmFzLndpZHRoLCBoZWlnaHQ6IGN0eC5jYW52YXMuaGVpZ2h0IH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZEFwb2NhbHlwc2UoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5maXJlRWZmZWN0cyA9IFsxLCAyXS5tYXAobnVtID0+ICBuZXcgRmlyZUdmeCgzMiwgMjQsIHRydWUsIDIpKTtcclxuXHJcbiAgICAgICAgdGhpcy5maXJlRW1pdHRlciA9IHRoaXMucGFydGljbGVzLmNyZWF0ZUVtaXR0ZXIoe1xyXG4gICAgICAgICAgICBwb3NpdGlvbjoge3g6IHRoaXMucGxheWVyLngsIHk6IHRoaXMucGxheWVyLnl9LFxyXG4gICAgICAgICAgICBvZmZzZXQ6ICgpID0+ICh7eDogcm5kKC0xLCAxKSAqIDMwMCwgeTogMjAwfSksXHJcbiAgICAgICAgICAgIHZlbG9jaXR5OiAoKSA9PiAoeyB4OiAwLCB5OiAtMjV9KSxcclxuICAgICAgICAgICAgY29sb3I6ICgpID0+IHJuZEl0ZW0odGhpcy5maXJlRWZmZWN0cykuZ2V0SW1hZ2UoKSxcclxuICAgICAgICAgICAgc2l6ZTogKCkgPT4gcm5kKDE2LCAzMiksXHJcbiAgICAgICAgICAgIGdyYXZpdHk6IHt4OiAtMTAsIHk6IC0zMH0sXHJcbiAgICAgICAgICAgIGxpZmV0aW1lOiAoKSA9PiBybmQoNSwgMTUpLFxyXG4gICAgICAgICAgICBhbHBoYTogMSxcclxuICAgICAgICAgICAgYnJlYWtGYWN0b3I6IDAuOSxcclxuICAgICAgICAgICAgYWxwaGFDdXJ2ZTogdmFsdWVDdXJ2ZXMuY29zKDAuMiwgMC4xKSxcclxuICAgICAgICAgICAgdXBkYXRlOiBwYXJ0aWNsZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JsZC5jb2xsaWRlc1dpdGgocGFydGljbGUueCwgcGFydGljbGUueSAtIHBhcnRpY2xlLnNpemUgLyA0KVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFydGljbGUudnggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlLnZ5ID0gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBiZWdpbldpbmRvd0VuZGluZygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLndpbmRvd0N1dHNjZW5lID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnBsYXllci5zZXRDb250cm9sbGFibGUoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuZmFkZVRvQmxhY2tEaXJlY3Rpb24gPSBGYWRlRGlyZWN0aW9uLkZBREVfT1VUO1xyXG4gICAgICAgIHRoaXMuZmFkZVRvQmxhY2tTdGFydFRpbWUgPSB0aGlzLmdhbWVUaW1lICsgV0lORE9XX0VORElOR19DVVRTQ0VORV9EVVJBVElPTjtcclxuICAgICAgICB0aGlzLmZhZGVUb0JsYWNrRW5kVGltZSA9IHRoaXMuZmFkZVRvQmxhY2tTdGFydFRpbWUgKyAoV0lORE9XX0VORElOR19GQURFX0RVUkFUSU9OKTtcclxuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnBvaW50c09mSW50ZXJlc3QuZmluZChwb2kgPT4gcG9pLm5hbWUgPT09IFwid2luZG93em9vbXRhcmdldFwiKTtcclxuICAgICAgICBpZiAodGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FtZXJhLmZvY3VzT24oV0lORE9XX0VORElOR19DVVRTQ0VORV9EVVJBVElPTiArIFBFVFRJTkdfRU5ESU5HX0ZBREVfRFVSQVRJT04sIHRhcmdldC54LCB0aGlzLmNhbWVyYS55LCAxLCAwLCB2YWx1ZUN1cnZlcy5jdWJpYyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBiZWdpblBldEVuZGluZygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBldHRpbmdDdXRzY2VuZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wbGF5ZXIuc3RhcnRQZXR0aW5nRG9nKCk7XHJcbiAgICAgICAgdGhpcy5zaGliYS5zdGFydEJlaW5nUGV0dGVkKCk7XHJcbiAgICAgICAgdGhpcy5mYWRlVG9CbGFja0RpcmVjdGlvbiA9IEZhZGVEaXJlY3Rpb24uRkFERV9PVVQ7XHJcbiAgICAgICAgdGhpcy5mYWRlVG9CbGFja1N0YXJ0VGltZSA9IHRoaXMuZ2FtZVRpbWUgKyBQRVRUSU5HX0VORElOR19DVVRTQ0VORV9EVVJBVElPTjtcclxuICAgICAgICB0aGlzLmZhZGVUb0JsYWNrRW5kVGltZSA9IHRoaXMuZmFkZVRvQmxhY2tTdGFydFRpbWUgKyAoUEVUVElOR19FTkRJTkdfRkFERV9EVVJBVElPTik7XHJcbiAgICAgICAgdGhpcy5wbGF5QmFja2dyb3VuZFRyYWNrKEJnbUlkLkVDU1RBU1kpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjYW5jZWxQYXRFbmRpbmcoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FuQ2FuY2VsUGF0RW5kaW5nKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5wZXR0aW5nQ3V0c2NlbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5wZXR0aW5nQ3V0c2NlbmVUaW1lID0gMDtcclxuICAgICAgICAgICAgdGhpcy5wbGF5ZXIuc3RvcFBldHRpbmdEb2coKTtcclxuICAgICAgICAgICAgdGhpcy5zaGliYS5zdG9wQmVpbmdQZXR0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5mYWRlVG9CbGFja0VuZFRpbWUgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmZhZGVUb0JsYWNrU3RhcnRUaW1lID0gMDtcclxuICAgICAgICAgICAgdGhpcy5mYWRlVG9CbGFja0ZhY3RvciA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMucGxheUJhY2tncm91bmRUcmFjayhCZ21JZC5PVkVSV09STEQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNhbkNhbmNlbFBhdEVuZGluZygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wZXR0aW5nQ3V0c2NlbmVUaW1lIDwgUEVUVElOR19FTkRJTkdfQ1VUU0NFTkVfRFVSQVRJT04gKyBQRVRUSU5HX0VORElOR19GQURFX0RVUkFUSU9OO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBiZWdpbkZyaWVuZHNoaXBFbmRpbmcoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5mcmllbmRzaGlwQ3V0c2NlbmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2hpYmEuc2V0U3RhdGUoU2hpYmFTdGF0ZS5PTl9NT1VOVEFJTik7XHJcbiAgICAgICAgdGhpcy5zaGliYS5uZXh0U3RhdGUoKTtcclxuXHJcbiAgICAgICAgY29uc3QgcGxheWVyVGFyZ2V0UG9zID0gdGhpcy5wb2ludHNPZkludGVyZXN0LmZpbmQocG9pID0+IHBvaS5uYW1lID09PSBcImZyaWVuZHNoaXBfcGxheWVyX3Bvc2l0aW9uXCIpO1xyXG5cclxuICAgICAgICBpZiAoIXBsYXllclRhcmdldFBvcykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IgKFwiY2Fubm90IGluaXRpYXRlIGZyaWVuZHNoaXAgZW5kaW5nIGJlY2F1c2Ugc29tZSBwb2ludHMgb2YgaW50ZXJlc3QgYXJlIG1pc3NpbmdcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBsYXllci5zdGFydEF1dG9Nb3ZlKHBsYXllclRhcmdldFBvcy54LCB0cnVlKTtcclxuICAgICAgICB0aGlzLnBsYXllci5zZXRDb250cm9sbGFibGUoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBiZWdpbkFwb2NhbHlwc2UoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hcG9jYWx5cHNlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLndvcmxkLnN0b3BSYWluKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGJvc3NQb3NpdGlvbiA9IHRoaXMucG9pbnRzT2ZJbnRlcmVzdC5maW5kKHBvaSA9PiBwb2kubmFtZSA9PT0gXCJib3NzX3NwYXduXCIpO1xyXG4gICAgICAgIGNvbnN0IGNsb3VkUG9zaXRpb25zID0gdGhpcy5wb2ludHNPZkludGVyZXN0LmZpbHRlcihwb2kgPT4gcG9pLm5hbWUgPT09IFwiYm9zc2Nsb3VkXCIpO1xyXG5cclxuICAgICAgICBpZiAoYm9zc1Bvc2l0aW9uICYmIGNsb3VkUG9zaXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY2xvdWRQb3NpdGlvbnMuZm9yRWFjaChwb3MgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvdWQgPSBuZXcgQ2xvdWQoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcyxcclxuICAgICAgICAgICAgICAgICAgICBwb3MueCwgcG9zLnksXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZWxvY2l0eTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2U6IDFcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHRydWVcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5nYW1lT2JqZWN0cy5wdXNoKGNsb3VkKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyBUZWxlcG9ydCBwbGF5ZXIgYW5kIGZpcmUgdG8gYm9zcyBzcGF3biBwb3NpdGlvblxyXG4gICAgICAgICAgICB0aGlzLnBsYXllci54ID0gYm9zc1Bvc2l0aW9uLnggLSAzNjtcclxuICAgICAgICAgICAgdGhpcy5wbGF5ZXIueSA9IGJvc3NQb3NpdGlvbi55O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wbGF5ZXIucmVtb3ZlUG93ZXJVcHMoKTtcclxuICAgICAgICAgICAgdGhpcy5wbGF5ZXIuZW5hYmxlUmFpbkRhbmNlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZS54ID0gYm9zc1Bvc2l0aW9uLng7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZS55ID0gYm9zc1Bvc2l0aW9uLnk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNhbWVyYS5zZXRCb3VuZHModGhpcy5wbGF5ZXIuZ2V0Q3VycmVudE1hcEJvdW5kcygpKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFNvbWUgaGVscGZ1bCB0aG91Z2h0c1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucGxheWVyLnRoaW5rKFwiVGhpcyBpcyBub3Qgb3ZlcuKAplwiLCAyMDAwKSwgOTAwMCk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5wbGF5ZXIudGhpbmsoXCJUaGVyZSdzIHN0aWxsIHNvbWV0aGluZyBJIGNhbiBkby5cIiwgNDAwMCksIDEyMDAwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgYmVnaW4gYXBvY2FseXBzZSBiZWNhdXNlIGJvc3Nfc3Bhd24gb3IgYm9zc2Nsb3VkIHRyaWdnZXIgaXMgbWlzc2luZyBpbiBtYXAuXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHRvZ2dsZVBhdXNlKHBhdXNlZCA9ICF0aGlzLnBhdXNlZCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucGF1c2VkID0gcGF1c2VkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwYXVzZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm11dGVNdXNpYygpO1xyXG4gICAgICAgIE1lbnVMaXN0LnBhdXNlLnN0b3AoKTtcclxuICAgICAgICBNZW51TGlzdC5wYXVzZS5wbGF5KCk7XHJcbiAgICAgICAgdGhpcy50b2dnbGVQYXVzZSh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzdW1lKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucmVzZXRNdXNpY1ZvbHVtZXMoKTtcclxuICAgICAgICB0aGlzLnRvZ2dsZVBhdXNlKGZhbHNlKTtcclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBV0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQWNBO0FBQUE7O0FBK0JBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBaUJBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXlvQkE7QUF2b0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFNQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUlBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXB6QkE7QUFEQTtBQUNBO0FBQUE7QUFHQTtBQURBO0FBQ0E7QUFBQTtBQUdBO0FBREE7QUFDQTtBQUFBO0FBR0E7QUFEQTtBQUNBO0FBQUE7QUFHQTtBQURBO0FBQ0E7QUFBQTtBQUdBO0FBREE7QUFDQTtBQUFBO0FBR0E7QUFEQTtBQUNBO0FBQUE7QUFHQTtBQURBO0FBQ0E7QUFBQTtBQUdBO0FBREE7QUFDQTtBQUFBO0FBR0E7QUFEQTtBQUNBO0FBQUE7QUEyREE7QUFEQTtBQUNBO0FBQUE7QUFHQTtBQURBO0FBQ0E7QUFBQTtBQUdBO0FBREE7QUFDQTtBQUFBO0FBOUZBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/scenes/GameScene.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/scenes/GotItemScene.js":
|
|
/*!************************************!*\
|
|
!*** ./lib/scenes/GotItemScene.js ***!
|
|
\************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GotItemScene = exports.Item = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst BitmapFont_1 = __webpack_require__(/*! ../BitmapFont */ \"./lib/BitmapFont.js\");\nconst constants_1 = __webpack_require__(/*! ../constants */ \"./lib/constants.js\");\nconst easings_1 = __webpack_require__(/*! ../easings */ \"./lib/easings.js\");\nconst Scene_1 = __webpack_require__(/*! ../Scene */ \"./lib/Scene.js\");\nconst SlideTransition_1 = __webpack_require__(/*! ../transitions/SlideTransition */ \"./lib/transitions/SlideTransition.js\");\nconst Sound_1 = __webpack_require__(/*! ../Sound */ \"./lib/Sound.js\");\nconst ImageNode_1 = __webpack_require__(/*! ../scene/ImageNode */ \"./lib/scene/ImageNode.js\");\nconst Direction_1 = __webpack_require__(/*! ../geom/Direction */ \"./lib/geom/Direction.js\");\nconst AsepriteNode_1 = __webpack_require__(/*! ../scene/AsepriteNode */ \"./lib/scene/AsepriteNode.js\");\nconst SceneNode_1 = __webpack_require__(/*! ../scene/SceneNode */ \"./lib/scene/SceneNode.js\");\nconst TextNode_1 = __webpack_require__(/*! ../scene/TextNode */ \"./lib/scene/TextNode.js\");\nvar Item;\n(function (Item) {\n Item[Item[\"RUNNING\"] = 0] = \"RUNNING\";\n Item[Item[\"DOUBLEJUMP\"] = 1] = \"DOUBLEJUMP\";\n Item[Item[\"MULTIJUMP\"] = 2] = \"MULTIJUMP\";\n Item[Item[\"RAINDANCE\"] = 3] = \"RAINDANCE\";\n Item[Item[\"FRIENDSHIP\"] = 4] = \"FRIENDSHIP\";\n})(Item = exports.Item || (exports.Item = {}));\nclass GotItemScene extends Scene_1.Scene {\n constructor() {\n super(...arguments);\n this.floatAmount = 3;\n this.floatSpeed = 4;\n this.titles = [\n \"Fear of the Dark\",\n \"Double-Jump Boots\",\n \"Flying Wings Knock-off\",\n \"Dancing Dave\",\n \"Eternal Friendship\"\n ];\n this.subtitles = [\n [\n \"Run and never look back\",\n \"An exceptional ally\",\n \"There is something in that dark corner\"\n ],\n [\n \"Not suitable for step dancing\",\n \"An all-time classic\",\n \"Still in mint condition\",\n \"Even work without wearing them\",\n \"Why would a tree have those?\"\n ],\n [\n \"Birds love it!\",\n \"Feels like cheating\",\n \"Free stuff is the best\",\n \"M-m-m-multi-jump\"\n ],\n [\n \"Like tears in the rain\"\n ],\n [\n \"Dogs are the best!\",\n \"What might this be good for?\",\n \"Powered by unconditional love\",\n \"Nothing can stop us!\"\n ]\n ];\n }\n setup(item) {\n GotItemScene.sound.setVolume(0.7);\n GotItemScene.sound.play();\n this.inTransition = new SlideTransition_1.SlideTransition({ duration: .5, direction: \"bottom\", easing: easings_1.easeOutExpo });\n this.outTransition = new SlideTransition_1.SlideTransition({ duration: .5, direction: \"bottom\", easing: easings_1.easeInExpo });\n const subtitle = \"“\" + this.subtitles[item][Math.floor(Math.random() * this.subtitles[item].length)] + \"”\";\n const image = GotItemScene.itemImages[item];\n // The powerup name\n new TextNode_1.TextNode({\n font: GotItemScene.headlineFont,\n text: this.titles[item],\n x: this.game.width >> 1,\n y: (this.game.height >> 1) + 17,\n color: \"white\"\n }).appendTo(this.rootNode);\n // The powerup subtitle\n new TextNode_1.TextNode({\n font: GotItemScene.font,\n text: subtitle,\n color: \"white\",\n x: this.game.width >> 1,\n y: (this.game.height >> 1) + 36\n }).appendTo(this.rootNode);\n // The power up image bobbling up and down\n new SceneNode_1.SceneNode({\n x: this.game.width >> 1,\n y: this.game.height >> 1\n }).animate({\n animator: node => node.transform(m => m.setScale(2).translateY(Math.sin(Date.now() / 1000\n * this.floatSpeed) * this.floatAmount)),\n duration: Infinity\n }).appendChild(image instanceof HTMLImageElement\n ? new ImageNode_1.ImageNode({ image, anchor: Direction_1.Direction.BOTTOM })\n : new AsepriteNode_1.AsepriteNode({ aseprite: image, tag: \"idle\", anchor: Direction_1.Direction.BOTTOM })).appendTo(this.rootNode);\n }\n activate() {\n // Close this scene after 4 seconds\n setTimeout(() => this.scenes.popScene(), 4000);\n }\n cleanup() {\n this.rootNode.clear();\n }\n draw(ctx, width, height) {\n ctx.save();\n ctx.fillStyle = \"rgba(0, 0, 0, 0.5)\";\n ctx.fillRect(0, (height >> 1) - 1, width, 50);\n ctx.restore();\n super.draw(ctx, width, height);\n }\n}\ntslib_1.__decorate([\n Assets_1.asset(constants_1.DIALOG_FONT),\n tslib_1.__metadata(\"design:type\", BitmapFont_1.BitmapFont)\n], GotItemScene, \"font\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"fonts/headline.font.json\"),\n tslib_1.__metadata(\"design:type\", BitmapFont_1.BitmapFont)\n], GotItemScene, \"headlineFont\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sounds/item/fanfare.mp3\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], GotItemScene, \"sound\", void 0);\ntslib_1.__decorate([\n Assets_1.asset([\n \"sprites/powerup_running.png\",\n \"sprites/powerup_doublejump.png\",\n \"sprites/powerup_multijump.png\",\n \"sprites/powerup_raindance.png\",\n \"sprites/powerup_friendship.aseprite.json\"\n ]),\n tslib_1.__metadata(\"design:type\", Array)\n], GotItemScene, \"itemImages\", void 0);\nexports.GotItemScene = GotItemScene;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvc2NlbmVzL0dvdEl0ZW1TY2VuZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9zY2VuZXMvR290SXRlbVNjZW5lLnRzPzFiZDUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNlcHJpdGUgfSBmcm9tIFwiLi4vQXNlcHJpdGVcIjtcclxuaW1wb3J0IHsgYXNzZXQgfSBmcm9tIFwiLi4vQXNzZXRzXCI7XHJcbmltcG9ydCB7IEJpdG1hcEZvbnQgfSBmcm9tIFwiLi4vQml0bWFwRm9udFwiO1xyXG5pbXBvcnQgeyBESUFMT0dfRk9OVCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgZWFzZUluRXhwbywgZWFzZU91dEV4cG8gfSBmcm9tIFwiLi4vZWFzaW5nc1wiO1xyXG5pbXBvcnQgeyBGcmllbmRseUZpcmUgfSBmcm9tIFwiLi4vRnJpZW5kbHlGaXJlXCI7XHJcbmltcG9ydCB7IFNjZW5lIH0gZnJvbSBcIi4uL1NjZW5lXCI7XHJcbmltcG9ydCB7IFNsaWRlVHJhbnNpdGlvbiB9IGZyb20gXCIuLi90cmFuc2l0aW9ucy9TbGlkZVRyYW5zaXRpb25cIjtcclxuaW1wb3J0IHsgU291bmQgfSBmcm9tIFwiLi4vU291bmRcIjtcclxuaW1wb3J0IHsgSW1hZ2VOb2RlIH0gZnJvbSBcIi4uL3NjZW5lL0ltYWdlTm9kZVwiO1xyXG5pbXBvcnQgeyBEaXJlY3Rpb24gfSBmcm9tIFwiLi4vZ2VvbS9EaXJlY3Rpb25cIjtcclxuaW1wb3J0IHsgQXNlcHJpdGVOb2RlIH0gZnJvbSBcIi4uL3NjZW5lL0FzZXByaXRlTm9kZVwiO1xyXG5pbXBvcnQgeyBTY2VuZU5vZGUgfSBmcm9tIFwiLi4vc2NlbmUvU2NlbmVOb2RlXCI7XHJcbmltcG9ydCB7IFRleHROb2RlIH0gZnJvbSBcIi4uL3NjZW5lL1RleHROb2RlXCI7XHJcblxyXG5leHBvcnQgZW51bSBJdGVtIHsgUlVOTklORywgRE9VQkxFSlVNUCwgTVVMVElKVU1QLCBSQUlOREFOQ0UsIEZSSUVORFNISVAgfVxyXG5cclxuZXhwb3J0IGNsYXNzIEdvdEl0ZW1TY2VuZSBleHRlbmRzIFNjZW5lPEZyaWVuZGx5RmlyZSwgSXRlbT4ge1xyXG4gICAgQGFzc2V0KERJQUxPR19GT05UKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgZm9udDogQml0bWFwRm9udDtcclxuXHJcbiAgICBAYXNzZXQoXCJmb250cy9oZWFkbGluZS5mb250Lmpzb25cIilcclxuICAgIHByaXZhdGUgc3RhdGljIGhlYWRsaW5lRm9udDogQml0bWFwRm9udDtcclxuXHJcbiAgICBAYXNzZXQoXCJzb3VuZHMvaXRlbS9mYW5mYXJlLm1wM1wiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgc291bmQ6IFNvdW5kO1xyXG5cclxuICAgIEBhc3NldChbXHJcbiAgICAgICAgXCJzcHJpdGVzL3Bvd2VydXBfcnVubmluZy5wbmdcIixcclxuICAgICAgICBcInNwcml0ZXMvcG93ZXJ1cF9kb3VibGVqdW1wLnBuZ1wiLFxyXG4gICAgICAgIFwic3ByaXRlcy9wb3dlcnVwX211bHRpanVtcC5wbmdcIixcclxuICAgICAgICBcInNwcml0ZXMvcG93ZXJ1cF9yYWluZGFuY2UucG5nXCIsXHJcbiAgICAgICAgXCJzcHJpdGVzL3Bvd2VydXBfZnJpZW5kc2hpcC5hc2Vwcml0ZS5qc29uXCJcclxuICAgIF0pXHJcbiAgICBwcml2YXRlIHN0YXRpYyBpdGVtSW1hZ2VzOiAoSFRNTEltYWdlRWxlbWVudCB8IEFzZXByaXRlKVtdO1xyXG5cclxuICAgIHByaXZhdGUgZmxvYXRBbW91bnQgPSAzO1xyXG4gICAgcHJpdmF0ZSBmbG9hdFNwZWVkID0gNDtcclxuXHJcbiAgICBwcml2YXRlIHRpdGxlcyA9IFtcclxuICAgICAgICBcIkZlYXIgb2YgdGhlIERhcmtcIixcclxuICAgICAgICBcIkRvdWJsZS1KdW1wIEJvb3RzXCIsXHJcbiAgICAgICAgXCJGbHlpbmcgV2luZ3MgS25vY2stb2ZmXCIsXHJcbiAgICAgICAgXCJEYW5jaW5nIERhdmVcIixcclxuICAgICAgICBcIkV0ZXJuYWwgRnJpZW5kc2hpcFwiXHJcbiAgICBdO1xyXG5cclxuICAgIHByaXZhdGUgc3VidGl0bGVzID0gW1xyXG4gICAgICAgIFtcclxuICAgICAgICAgICAgXCJSdW4gYW5kIG5ldmVyIGxvb2sgYmFja1wiLFxyXG4gICAgICAgICAgICBcIkFuIGV4Y2VwdGlvbmFsIGFsbHlcIixcclxuICAgICAgICAgICAgXCJUaGVyZSBpcyBzb21ldGhpbmcgaW4gdGhhdCBkYXJrIGNvcm5lclwiXHJcbiAgICAgICAgXSxcclxuICAgICAgICBbXHJcbiAgICAgICAgICAgIFwiTm90IHN1aXRhYmxlIGZvciBzdGVwIGRhbmNpbmdcIixcclxuICAgICAgICAgICAgXCJBbiBhbGwtdGltZSBjbGFzc2ljXCIsXHJcbiAgICAgICAgICAgIFwiU3RpbGwgaW4gbWludCBjb25kaXRpb25cIixcclxuICAgICAgICAgICAgXCJFdmVuIHdvcmsgd2l0aG91dCB3ZWFyaW5nIHRoZW1cIixcclxuICAgICAgICAgICAgXCJXaHkgd291bGQgYSB0cmVlIGhhdmUgdGhvc2U/XCJcclxuICAgICAgICBdLFxyXG4gICAgICAgIFtcclxuICAgICAgICAgICAgXCJCaXJkcyBsb3ZlIGl0IVwiLFxyXG4gICAgICAgICAgICBcIkZlZWxzIGxpa2UgY2hlYXRpbmdcIixcclxuICAgICAgICAgICAgXCJGcmVlIHN0dWZmIGlzIHRoZSBiZXN0XCIsXHJcbiAgICAgICAgICAgIFwiTS1tLW0tbXVsdGktanVtcFwiXHJcbiAgICAgICAgXSxcclxuICAgICAgICBbXHJcbiAgICAgICAgICAgIFwiTGlrZSB0ZWFycyBpbiB0aGUgcmFpblwiXHJcbiAgICAgICAgXSxcclxuICAgICAgICBbXHJcbiAgICAgICAgICAgIFwiRG9ncyBhcmUgdGhlIGJlc3QhXCIsXHJcbiAgICAgICAgICAgIFwiV2hhdCBtaWdodCB0aGlzIGJlIGdvb2QgZm9yP1wiLFxyXG4gICAgICAgICAgICBcIlBvd2VyZWQgYnkgdW5jb25kaXRpb25hbCBsb3ZlXCIsXHJcbiAgICAgICAgICAgIFwiTm90aGluZyBjYW4gc3RvcCB1cyFcIlxyXG4gICAgICAgIF1cclxuICAgIF07XHJcblxyXG4gICAgcHVibGljIHNldHVwKGl0ZW06IEl0ZW0pOiB2b2lkIHtcclxuICAgICAgICBHb3RJdGVtU2NlbmUuc291bmQuc2V0Vm9sdW1lKDAuNyk7XHJcbiAgICAgICAgR290SXRlbVNjZW5lLnNvdW5kLnBsYXkoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pblRyYW5zaXRpb24gPSBuZXcgU2xpZGVUcmFuc2l0aW9uKHsgZHVyYXRpb246IC41LCBkaXJlY3Rpb246IFwiYm90dG9tXCIsIGVhc2luZzogZWFzZU91dEV4cG8gfSk7XHJcbiAgICAgICAgdGhpcy5vdXRUcmFuc2l0aW9uID0gbmV3IFNsaWRlVHJhbnNpdGlvbih7IGR1cmF0aW9uOiAuNSwgZGlyZWN0aW9uOiBcImJvdHRvbVwiLCBlYXNpbmc6IGVhc2VJbkV4cG8gfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHN1YnRpdGxlID0gXCLigJxcIiArIHRoaXMuc3VidGl0bGVzW2l0ZW1dW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHRoaXMuc3VidGl0bGVzW2l0ZW1dLmxlbmd0aCldICsgXCLigJ1cIjtcclxuICAgICAgICBjb25zdCBpbWFnZSA9IEdvdEl0ZW1TY2VuZS5pdGVtSW1hZ2VzW2l0ZW1dO1xyXG5cclxuICAgICAgICAvLyBUaGUgcG93ZXJ1cCBuYW1lXHJcbiAgICAgICAgbmV3IFRleHROb2RlKHtcclxuICAgICAgICAgICAgZm9udDogR290SXRlbVNjZW5lLmhlYWRsaW5lRm9udCxcclxuICAgICAgICAgICAgdGV4dDogdGhpcy50aXRsZXNbaXRlbV0sXHJcbiAgICAgICAgICAgIHg6IHRoaXMuZ2FtZS53aWR0aCA+PiAxLFxyXG4gICAgICAgICAgICB5OiAodGhpcy5nYW1lLmhlaWdodCA+PiAxKSArIDE3LFxyXG4gICAgICAgICAgICBjb2xvcjogXCJ3aGl0ZVwiXHJcbiAgICAgICAgfSkuYXBwZW5kVG8odGhpcy5yb290Tm9kZSk7XHJcblxyXG4gICAgICAgIC8vIFRoZSBwb3dlcnVwIHN1YnRpdGxlXHJcbiAgICAgICAgbmV3IFRleHROb2RlKHtcclxuICAgICAgICAgICAgZm9udDogR290SXRlbVNjZW5lLmZvbnQsXHJcbiAgICAgICAgICAgIHRleHQ6IHN1YnRpdGxlLFxyXG4gICAgICAgICAgICBjb2xvcjogXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgICB4OiB0aGlzLmdhbWUud2lkdGggPj4gMSxcclxuICAgICAgICAgICAgeTogKHRoaXMuZ2FtZS5oZWlnaHQgPj4gMSkgKyAzNlxyXG4gICAgICAgIH0pLmFwcGVuZFRvKHRoaXMucm9vdE5vZGUpO1xyXG5cclxuICAgICAgICAvLyBUaGUgcG93ZXIgdXAgaW1hZ2UgYm9iYmxpbmcgdXAgYW5kIGRvd25cclxuICAgICAgICBuZXcgU2NlbmVOb2RlKHtcclxuICAgICAgICAgICAgeDogdGhpcy5nYW1lLndpZHRoID4+IDEsXHJcbiAgICAgICAgICAgIHk6IHRoaXMuZ2FtZS5oZWlnaHQgPj4gMVxyXG4gICAgICAgIH0pLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICBhbmltYXRvcjogbm9kZSA9PiBub2RlLnRyYW5zZm9ybShtID0+IG0uc2V0U2NhbGUoMikudHJhbnNsYXRlWShNYXRoLnNpbihEYXRlLm5vdygpIC8gMTAwMFxyXG4gICAgICAgICAgICAgICAgKiB0aGlzLmZsb2F0U3BlZWQpICogdGhpcy5mbG9hdEFtb3VudCkpLFxyXG4gICAgICAgICAgICBkdXJhdGlvbjogSW5maW5pdHlcclxuICAgICAgICB9KS5hcHBlbmRDaGlsZChpbWFnZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnRcclxuICAgICAgICAgICAgPyBuZXcgSW1hZ2VOb2RlKHsgaW1hZ2UsIGFuY2hvcjogRGlyZWN0aW9uLkJPVFRPTSB9KVxyXG4gICAgICAgICAgICA6IG5ldyBBc2Vwcml0ZU5vZGUoeyBhc2Vwcml0ZTogaW1hZ2UsIHRhZzogXCJpZGxlXCIsIGFuY2hvcjogRGlyZWN0aW9uLkJPVFRPTSB9KVxyXG4gICAgICAgICkuYXBwZW5kVG8odGhpcy5yb290Tm9kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFjdGl2YXRlKCk6IHZvaWQge1xyXG4gICAgICAgIC8vIENsb3NlIHRoaXMgc2NlbmUgYWZ0ZXIgNCBzZWNvbmRzXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNjZW5lcy5wb3BTY2VuZSgpLCA0MDAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYW51cCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnJvb3ROb2RlLmNsZWFyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRyYXcoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY3R4LnNhdmUoKTtcclxuICAgICAgICBjdHguZmlsbFN0eWxlID0gXCJyZ2JhKDAsIDAsIDAsIDAuNSlcIjtcclxuICAgICAgICBjdHguZmlsbFJlY3QoMCwgKGhlaWdodCA+PiAxKSAtIDEsIHdpZHRoLCA1MCk7XHJcbiAgICAgICAgY3R4LnJlc3RvcmUoKTtcclxuICAgICAgICBzdXBlci5kcmF3KGN0eCwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBQUE7O0FBbUJBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE0REE7QUExREE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXBIQTtBQURBO0FBQ0E7QUFBQTtBQUdBO0FBREE7QUFDQTtBQUFBO0FBR0E7QUFEQTtBQUNBO0FBQUE7QUFTQTtBQVBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBO0FBakJBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/scenes/GotItemScene.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/scenes/LoadingScene.js":
|
|
/*!************************************!*\
|
|
!*** ./lib/scenes/LoadingScene.js ***!
|
|
\************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LoadingScene = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Scene_1 = __webpack_require__(/*! ../Scene */ \"./lib/Scene.js\");\nconst TitleScene_1 = __webpack_require__(/*! ./TitleScene */ \"./lib/scenes/TitleScene.js\");\nconst ProgressBarNode_1 = __webpack_require__(/*! ../scene/ProgressBarNode */ \"./lib/scene/ProgressBarNode.js\");\nclass LoadingScene extends Scene_1.Scene {\n setup() {\n this.progressBar = new ProgressBarNode_1.ProgressBarNode({\n x: this.game.width >> 1,\n y: this.game.height >> 1\n }).appendTo(this.rootNode);\n }\n cleanup() {\n this.rootNode.clear();\n }\n activate() {\n return tslib_1.__awaiter(this, void 0, void 0, function* () {\n yield this.game.assets.load(this.updateProgress.bind(this));\n this.game.scenes.setScene(TitleScene_1.TitleScene);\n });\n }\n updateProgress(total, loaded) {\n if (loaded < total) {\n this.progressBar.setProgress(loaded / total);\n }\n else {\n this.progressBar.remove();\n }\n }\n}\nexports.LoadingScene = LoadingScene;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvc2NlbmVzL0xvYWRpbmdTY2VuZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9zY2VuZXMvTG9hZGluZ1NjZW5lLnRzPzdhYWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRnJpZW5kbHlGaXJlIH0gZnJvbSBcIi4uL0ZyaWVuZGx5RmlyZVwiO1xyXG5pbXBvcnQgeyBTY2VuZSB9IGZyb20gXCIuLi9TY2VuZVwiO1xyXG5pbXBvcnQgeyBUaXRsZVNjZW5lIH0gZnJvbSBcIi4vVGl0bGVTY2VuZVwiO1xyXG5pbXBvcnQgeyBQcm9ncmVzc0Jhck5vZGUgfSBmcm9tIFwiLi4vc2NlbmUvUHJvZ3Jlc3NCYXJOb2RlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTG9hZGluZ1NjZW5lIGV4dGVuZHMgU2NlbmU8RnJpZW5kbHlGaXJlPiB7XHJcbiAgICBwcml2YXRlIHByb2dyZXNzQmFyITogUHJvZ3Jlc3NCYXJOb2RlO1xyXG5cclxuICAgIHB1YmxpYyBzZXR1cCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnByb2dyZXNzQmFyID0gbmV3IFByb2dyZXNzQmFyTm9kZSh7XHJcbiAgICAgICAgICAgIHg6IHRoaXMuZ2FtZS53aWR0aCA+PiAxLFxyXG4gICAgICAgICAgICB5OiB0aGlzLmdhbWUuaGVpZ2h0ID4+IDFcclxuICAgICAgICB9KS5hcHBlbmRUbyh0aGlzLnJvb3ROb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYW51cCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnJvb3ROb2RlLmNsZWFyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGFjdGl2YXRlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZ2FtZS5hc3NldHMubG9hZCh0aGlzLnVwZGF0ZVByb2dyZXNzLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuZ2FtZS5zY2VuZXMuc2V0U2NlbmUoVGl0bGVTY2VuZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVQcm9ncmVzcyh0b3RhbDogbnVtYmVyLCBsb2FkZWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmIChsb2FkZWQgPCB0b3RhbCkge1xyXG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzQmFyLnNldFByb2dyZXNzKGxvYWRlZCAvIHRvdGFsKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzQmFyLnJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBOztBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBMUJBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/scenes/LoadingScene.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/scenes/PauseScene.js":
|
|
/*!**********************************!*\
|
|
!*** ./lib/scenes/PauseScene.js ***!
|
|
\**********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PauseScene = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst BitmapFont_1 = __webpack_require__(/*! ../BitmapFont */ \"./lib/BitmapFont.js\");\nconst ControlsScene_1 = __webpack_require__(/*! ./ControlsScene */ \"./lib/scenes/ControlsScene.js\");\nconst constants_1 = __webpack_require__(/*! ../constants */ \"./lib/constants.js\");\nconst easings_1 = __webpack_require__(/*! ../easings */ \"./lib/easings.js\");\nconst util_1 = __webpack_require__(/*! ../util */ \"./lib/util.js\");\nconst Menu_1 = __webpack_require__(/*! ../Menu */ \"./lib/Menu.js\");\nconst Scene_1 = __webpack_require__(/*! ../Scene */ \"./lib/Scene.js\");\nconst SlideTransition_1 = __webpack_require__(/*! ../transitions/SlideTransition */ \"./lib/transitions/SlideTransition.js\");\nconst Sound_1 = __webpack_require__(/*! ../Sound */ \"./lib/Sound.js\");\nconst TitleScene_1 = __webpack_require__(/*! ./TitleScene */ \"./lib/scenes/TitleScene.js\");\nconst TextNode_1 = __webpack_require__(/*! ../scene/TextNode */ \"./lib/scene/TextNode.js\");\nconst Direction_1 = __webpack_require__(/*! ../geom/Direction */ \"./lib/geom/Direction.js\");\nvar MenuItemKey;\n(function (MenuItemKey) {\n MenuItemKey[\"RESUME\"] = \"resume\";\n MenuItemKey[\"CONTROLS\"] = \"controls\";\n MenuItemKey[\"EXIT\"] = \"exit\";\n})(MenuItemKey || (MenuItemKey = {}));\nclass PauseScene extends Scene_1.Scene {\n cleanup() {\n this.rootNode.clear();\n }\n setup() {\n this.setBackgroundStyle(\"rgba(0, 0, 0, 0.8)\");\n this.inTransition = new SlideTransition_1.SlideTransition({ duration: 1, direction: \"top\", easing: easings_1.easeOutBounce });\n this.outTransition = new SlideTransition_1.SlideTransition({ duration: 0.25 });\n PauseScene.music.setLoop(true);\n PauseScene.music.setVolume(0.5);\n PauseScene.music.play();\n new TextNode_1.TextNode({\n font: PauseScene.headlineFont,\n text: \"GAME PAUSED\",\n color: \"white\",\n anchor: Direction_1.Direction.TOP_LEFT,\n x: 75,\n y: 100\n }).appendTo(this.rootNode);\n new TextNode_1.TextNode({\n font: PauseScene.font,\n text: util_1.isDev() ? \"DEVELOPMENT VERSION\" : PauseScene.appInfo.version,\n color: \"white\",\n anchor: Direction_1.Direction.BOTTOM_RIGHT,\n x: this.game.width - 7,\n y: this.game.height - 4,\n opacity: 0.6\n }).appendTo(this.rootNode);\n this.menu = new Menu_1.MenuList().appendTo(this.rootNode).setItems(new Menu_1.MenuItem(MenuItemKey.RESUME, \"Resume\", PauseScene.font, \"white\", 75, 130), new Menu_1.MenuItem(MenuItemKey.CONTROLS, \"Controls and Options\", PauseScene.font, \"white\", 75, 145), new Menu_1.MenuItem(MenuItemKey.EXIT, \"Back to title\", PauseScene.font, \"white\", 75, 160));\n }\n activate() {\n this.input.onButtonDown.connect(this.handleButtonDown, this);\n this.menu.onActivated.connect(this.handleMenuAction, this);\n }\n deactivate() {\n this.input.onButtonDown.disconnect(this.handleButtonDown, this);\n this.menu.onActivated.disconnect(this.handleMenuAction, this);\n }\n handleMenuAction(buttonId) {\n return tslib_1.__awaiter(this, void 0, void 0, function* () {\n switch (buttonId) {\n case MenuItemKey.RESUME:\n PauseScene.music.stop();\n this.scenes.popScene();\n break;\n case MenuItemKey.CONTROLS:\n this.game.scenes.pushScene(ControlsScene_1.ControlsScene);\n break;\n case MenuItemKey.EXIT:\n PauseScene.music.stop();\n yield this.game.scenes.popScene({ noTransition: true });\n this.game.scenes.setScene(TitleScene_1.TitleScene);\n break;\n }\n });\n }\n handleButtonDown(event) {\n if (event.isAbort || event.isPause) {\n PauseScene.music.stop();\n this.scenes.popScene();\n }\n else if (event.isConfirm) {\n this.menu.executeAction();\n }\n else if (event.isMenuUp) {\n this.menu.prev();\n }\n else if (event.isMenuDown) {\n this.menu.next();\n }\n }\n}\ntslib_1.__decorate([\n Assets_1.asset(\"music/pause.ogg\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], PauseScene, \"music\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(constants_1.DIALOG_FONT),\n tslib_1.__metadata(\"design:type\", BitmapFont_1.BitmapFont)\n], PauseScene, \"font\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"fonts/headline.font.json\"),\n tslib_1.__metadata(\"design:type\", BitmapFont_1.BitmapFont)\n], PauseScene, \"headlineFont\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"appinfo.json\"),\n tslib_1.__metadata(\"design:type\", Object)\n], PauseScene, \"appInfo\", void 0);\nexports.PauseScene = PauseScene;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvc2NlbmVzL1BhdXNlU2NlbmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvc2NlbmVzL1BhdXNlU2NlbmUudHM/ZmFjYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHBJbmZvSlNPTiB9IGZyb20gXCJhcHBpbmZvLmpzb25cIjtcclxuaW1wb3J0IHsgYXNzZXQgfSBmcm9tIFwiLi4vQXNzZXRzXCI7XHJcbmltcG9ydCB7IEJpdG1hcEZvbnQgfSBmcm9tIFwiLi4vQml0bWFwRm9udFwiO1xyXG5pbXBvcnQgeyBDb250cm9sbGVyRXZlbnQgfSBmcm9tIFwiLi4vaW5wdXQvQ29udHJvbGxlckV2ZW50XCI7XHJcbmltcG9ydCB7IENvbnRyb2xzU2NlbmUgfSBmcm9tIFwiLi9Db250cm9sc1NjZW5lXCI7XHJcbmltcG9ydCB7IERJQUxPR19GT05UIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBlYXNlT3V0Qm91bmNlIH0gZnJvbSBcIi4uL2Vhc2luZ3NcIjtcclxuaW1wb3J0IHsgRnJpZW5kbHlGaXJlIH0gZnJvbSBcIi4uL0ZyaWVuZGx5RmlyZVwiO1xyXG5pbXBvcnQgeyBpc0RldiB9IGZyb20gXCIuLi91dGlsXCI7XHJcbmltcG9ydCB7IE1lbnVJdGVtLCBNZW51TGlzdCB9IGZyb20gXCIuLi9NZW51XCI7XHJcbmltcG9ydCB7IFNjZW5lIH0gZnJvbSBcIi4uL1NjZW5lXCI7XHJcbmltcG9ydCB7IFNsaWRlVHJhbnNpdGlvbiB9IGZyb20gXCIuLi90cmFuc2l0aW9ucy9TbGlkZVRyYW5zaXRpb25cIjtcclxuaW1wb3J0IHsgU291bmQgfSBmcm9tIFwiLi4vU291bmRcIjtcclxuaW1wb3J0IHsgVGl0bGVTY2VuZSB9IGZyb20gXCIuL1RpdGxlU2NlbmVcIjtcclxuaW1wb3J0IHsgVGV4dE5vZGUgfSBmcm9tIFwiLi4vc2NlbmUvVGV4dE5vZGVcIjtcclxuaW1wb3J0IHsgRGlyZWN0aW9uIH0gZnJvbSBcIi4uL2dlb20vRGlyZWN0aW9uXCI7XHJcblxyXG5lbnVtIE1lbnVJdGVtS2V5IHtcclxuICAgIFJFU1VNRSA9IFwicmVzdW1lXCIsXHJcbiAgICBDT05UUk9MUyA9IFwiY29udHJvbHNcIixcclxuICAgIEVYSVQgPSBcImV4aXRcIlxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUGF1c2VTY2VuZSBleHRlbmRzIFNjZW5lPEZyaWVuZGx5RmlyZT4ge1xyXG4gICAgQGFzc2V0KFwibXVzaWMvcGF1c2Uub2dnXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBtdXNpYzogU291bmQ7XHJcblxyXG4gICAgQGFzc2V0KERJQUxPR19GT05UKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgZm9udDogQml0bWFwRm9udDtcclxuXHJcbiAgICBAYXNzZXQoXCJmb250cy9oZWFkbGluZS5mb250Lmpzb25cIilcclxuICAgIHByaXZhdGUgc3RhdGljIGhlYWRsaW5lRm9udDogQml0bWFwRm9udDtcclxuXHJcbiAgICBAYXNzZXQoXCJhcHBpbmZvLmpzb25cIilcclxuICAgIHByaXZhdGUgc3RhdGljIGFwcEluZm86IEFwcEluZm9KU09OO1xyXG5cclxuICAgIHByaXZhdGUgbWVudSE6IE1lbnVMaXN0O1xyXG5cclxuICAgIHB1YmxpYyBjbGVhbnVwKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucm9vdE5vZGUuY2xlYXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0dXAoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZXRCYWNrZ3JvdW5kU3R5bGUoXCJyZ2JhKDAsIDAsIDAsIDAuOClcIik7XHJcblxyXG4gICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uID0gbmV3IFNsaWRlVHJhbnNpdGlvbih7IGR1cmF0aW9uOiAxLCBkaXJlY3Rpb246IFwidG9wXCIsIGVhc2luZzogZWFzZU91dEJvdW5jZSB9KTtcclxuICAgICAgICB0aGlzLm91dFRyYW5zaXRpb24gPSBuZXcgU2xpZGVUcmFuc2l0aW9uKHsgZHVyYXRpb246IDAuMjUgfSk7XHJcblxyXG4gICAgICAgIFBhdXNlU2NlbmUubXVzaWMuc2V0TG9vcCh0cnVlKTtcclxuICAgICAgICBQYXVzZVNjZW5lLm11c2ljLnNldFZvbHVtZSgwLjUpO1xyXG4gICAgICAgIFBhdXNlU2NlbmUubXVzaWMucGxheSgpO1xyXG5cclxuICAgICAgICBuZXcgVGV4dE5vZGUoe1xyXG4gICAgICAgICAgICBmb250OiBQYXVzZVNjZW5lLmhlYWRsaW5lRm9udCxcclxuICAgICAgICAgICAgdGV4dDogXCJHQU1FIFBBVVNFRFwiLFxyXG4gICAgICAgICAgICBjb2xvcjogXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgICBhbmNob3I6IERpcmVjdGlvbi5UT1BfTEVGVCxcclxuICAgICAgICAgICAgeDogNzUsXHJcbiAgICAgICAgICAgIHk6IDEwMFxyXG4gICAgICAgIH0pLmFwcGVuZFRvKHRoaXMucm9vdE5vZGUpO1xyXG5cclxuICAgICAgICBuZXcgVGV4dE5vZGUoe1xyXG4gICAgICAgICAgICBmb250OiBQYXVzZVNjZW5lLmZvbnQsXHJcbiAgICAgICAgICAgIHRleHQ6IGlzRGV2KCkgPyBcIkRFVkVMT1BNRU5UIFZFUlNJT05cIiA6IFBhdXNlU2NlbmUuYXBwSW5mby52ZXJzaW9uLFxyXG4gICAgICAgICAgICBjb2xvcjogXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgICBhbmNob3I6IERpcmVjdGlvbi5CT1RUT01fUklHSFQsXHJcbiAgICAgICAgICAgIHg6IHRoaXMuZ2FtZS53aWR0aCAtIDcsXHJcbiAgICAgICAgICAgIHk6IHRoaXMuZ2FtZS5oZWlnaHQgLSA0LFxyXG4gICAgICAgICAgICBvcGFjaXR5OiAwLjZcclxuICAgICAgICB9KS5hcHBlbmRUbyh0aGlzLnJvb3ROb2RlKTtcclxuXHJcbiAgICAgICAgdGhpcy5tZW51ID0gbmV3IE1lbnVMaXN0KCkuYXBwZW5kVG8odGhpcy5yb290Tm9kZSkuc2V0SXRlbXMoXHJcbiAgICAgICAgICAgIG5ldyBNZW51SXRlbShNZW51SXRlbUtleS5SRVNVTUUsIFwiUmVzdW1lXCIsIFBhdXNlU2NlbmUuZm9udCwgXCJ3aGl0ZVwiLCA3NSwgMTMwKSxcclxuICAgICAgICAgICAgbmV3IE1lbnVJdGVtKE1lbnVJdGVtS2V5LkNPTlRST0xTLCBcIkNvbnRyb2xzIGFuZCBPcHRpb25zXCIsIFBhdXNlU2NlbmUuZm9udCwgXCJ3aGl0ZVwiLCA3NSwgMTQ1KSxcclxuICAgICAgICAgICAgbmV3IE1lbnVJdGVtKE1lbnVJdGVtS2V5LkVYSVQsIFwiQmFjayB0byB0aXRsZVwiLCBQYXVzZVNjZW5lLmZvbnQsIFwid2hpdGVcIiwgNzUsIDE2MCksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWN0aXZhdGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pbnB1dC5vbkJ1dHRvbkRvd24uY29ubmVjdCh0aGlzLmhhbmRsZUJ1dHRvbkRvd24sIHRoaXMpO1xyXG4gICAgICAgIHRoaXMubWVudS5vbkFjdGl2YXRlZC5jb25uZWN0KHRoaXMuaGFuZGxlTWVudUFjdGlvbiwgdGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlYWN0aXZhdGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pbnB1dC5vbkJ1dHRvbkRvd24uZGlzY29ubmVjdCh0aGlzLmhhbmRsZUJ1dHRvbkRvd24sIHRoaXMpO1xyXG4gICAgICAgIHRoaXMubWVudS5vbkFjdGl2YXRlZC5kaXNjb25uZWN0KHRoaXMuaGFuZGxlTWVudUFjdGlvbiwgdGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGhhbmRsZU1lbnVBY3Rpb24oYnV0dG9uSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHN3aXRjaCAoYnV0dG9uSWQpIHtcclxuICAgICAgICAgICAgY2FzZSBNZW51SXRlbUtleS5SRVNVTUU6XHJcbiAgICAgICAgICAgICAgICBQYXVzZVNjZW5lLm11c2ljLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2NlbmVzLnBvcFNjZW5lKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBNZW51SXRlbUtleS5DT05UUk9MUzpcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FtZS5zY2VuZXMucHVzaFNjZW5lKENvbnRyb2xzU2NlbmUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgTWVudUl0ZW1LZXkuRVhJVDpcclxuICAgICAgICAgICAgICAgIFBhdXNlU2NlbmUubXVzaWMuc3RvcCgpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nYW1lLnNjZW5lcy5wb3BTY2VuZSh7IG5vVHJhbnNpdGlvbjogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2FtZS5zY2VuZXMuc2V0U2NlbmUoVGl0bGVTY2VuZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVCdXR0b25Eb3duKGV2ZW50OiBDb250cm9sbGVyRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoZXZlbnQuaXNBYm9ydCB8fCBldmVudC5pc1BhdXNlKSB7XHJcbiAgICAgICAgICAgIFBhdXNlU2NlbmUubXVzaWMuc3RvcCgpO1xyXG4gICAgICAgICAgICB0aGlzLnNjZW5lcy5wb3BTY2VuZSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuaXNDb25maXJtKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVudS5leGVjdXRlQWN0aW9uKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5pc01lbnVVcCkge1xyXG4gICAgICAgICAgICB0aGlzLm1lbnUucHJldigpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuaXNNZW51RG93bikge1xyXG4gICAgICAgICAgICB0aGlzLm1lbnUubmV4dCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBZUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFLQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBNUZBO0FBREE7QUFDQTtBQUFBO0FBR0E7QUFEQTtBQUNBO0FBQUE7QUFHQTtBQURBO0FBQ0E7QUFBQTtBQUdBO0FBREE7O0FBQ0E7QUFYQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/scenes/PauseScene.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/scenes/PowerShiba.js":
|
|
/*!**********************************!*\
|
|
!*** ./lib/scenes/PowerShiba.js ***!
|
|
\**********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar PowerShiba_1;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PowerShiba = exports.PowerShibaState = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst Conversation_1 = __webpack_require__(/*! ../Conversation */ \"./lib/Conversation.js\");\nconst Entity_1 = __webpack_require__(/*! ../Entity */ \"./lib/Entity.js\");\nconst GameScene_1 = __webpack_require__(/*! ./GameScene */ \"./lib/scenes/GameScene.js\");\nconst NPC_1 = __webpack_require__(/*! ../entities/NPC */ \"./lib/entities/NPC.js\");\nconst powershiba1_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../../assets/dialog/powershiba1.dialog.json */ \"./assets/dialog/powershiba1.dialog.json\"));\nconst powershiba3_dialog_json_1 = tslib_1.__importDefault(__webpack_require__(/*! ../../assets/dialog/powershiba3.dialog.json */ \"./assets/dialog/powershiba3.dialog.json\"));\nconst Renderer_1 = __webpack_require__(/*! ../Renderer */ \"./lib/Renderer.js\");\nvar PowerShibaState;\n(function (PowerShibaState) {\n PowerShibaState[PowerShibaState[\"IN_CLOUDS\"] = 0] = \"IN_CLOUDS\";\n PowerShibaState[PowerShibaState[\"ON_MOUNTAIN\"] = 1] = \"ON_MOUNTAIN\";\n PowerShibaState[PowerShibaState[\"CONSUMED\"] = 2] = \"CONSUMED\";\n})(PowerShibaState = exports.PowerShibaState || (exports.PowerShibaState = {}));\nlet PowerShiba = PowerShiba_1 = class PowerShiba extends NPC_1.NPC {\n constructor(scene, x, y) {\n super(scene, x, y, 22, 22);\n this.state = PowerShibaState.IN_CLOUDS;\n this.floatAmount = 4;\n this.floatSpeed = 2;\n this.conversation = new Conversation_1.Conversation(powershiba1_dialog_json_1.default, this);\n }\n nextState() {\n this.state++;\n if (this.state === PowerShibaState.ON_MOUNTAIN) {\n const spawn = this.scene.pointsOfInterest.find(poi => poi.name === \"powershiba_mountain_spawn\");\n if (!spawn)\n throw new Error(\"PowerShiba mountain spawn missing\");\n this.floatSpeed = 2;\n this.floatAmount = 4;\n this.x = spawn.x;\n this.y = spawn.y;\n this.conversation = new Conversation_1.Conversation(powershiba3_dialog_json_1.default, this);\n }\n }\n showDialoguePrompt() {\n if (!super.showDialoguePrompt())\n return false;\n else if (Conversation_1.Conversation.getGlobals()[\"$gaveBoneToPowerShiba\"] && !Conversation_1.Conversation.getGlobals()[\"$seedgrown\"])\n return true;\n else if (Conversation_1.Conversation.getGlobals()[\"$gaveBoneToPowerShiba\"] && Conversation_1.Conversation.getGlobals()[\"$seedgrown\"] && !Conversation_1.Conversation.getGlobals()[\"$gotPowerShibaQuest\"])\n return true;\n else if (this.state === PowerShibaState.ON_MOUNTAIN)\n return true;\n return false;\n }\n feed() {\n this.floatSpeed = 3;\n this.floatAmount = 5;\n this.scene.game.campaign.runAction(\"giveBone\");\n this.think(\"Oh… I remember…\", 3000);\n }\n draw(ctx) {\n const floatOffsetY = Math.sin(this.timeAlive * this.floatSpeed) * this.floatAmount;\n this.scene.renderer.addAseprite(PowerShiba_1.sprite, \"idle\", this.x, this.y - floatOffsetY, Renderer_1.RenderingLayer.ENTITIES);\n if (this.scene.showBounds)\n this.drawBounds();\n if (this.showDialoguePrompt()) {\n this.drawDialoguePrompt();\n }\n if (this.thinkBubble) {\n this.thinkBubble.draw(ctx);\n }\n this.speechBubble.draw(ctx);\n }\n update(dt) {\n super.update(dt);\n this.dialoguePrompt.update(dt, this.x, this.y + 16);\n this.speechBubble.update(this.x, this.y);\n if (this.thinkBubble) {\n this.thinkBubble.update(this.x, this.y);\n }\n }\n};\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/powershiba.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], PowerShiba, \"sprite\", void 0);\nPowerShiba = PowerShiba_1 = tslib_1.__decorate([\n Entity_1.entity(\"powershiba\"),\n tslib_1.__metadata(\"design:paramtypes\", [GameScene_1.GameScene, Number, Number])\n], PowerShiba);\nexports.PowerShiba = PowerShiba;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvc2NlbmVzL1Bvd2VyU2hpYmEuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvc2NlbmVzL1Bvd2VyU2hpYmEudHM/YWRiZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc2Vwcml0ZSB9IGZyb20gXCIuLi9Bc2Vwcml0ZVwiO1xyXG5pbXBvcnQgeyBhc3NldCB9IGZyb20gXCIuLi9Bc3NldHNcIjtcclxuaW1wb3J0IHsgQ29udmVyc2F0aW9uIH0gZnJvbSBcIi4uL0NvbnZlcnNhdGlvblwiO1xyXG5pbXBvcnQgeyBlbnRpdHkgfSBmcm9tIFwiLi4vRW50aXR5XCI7XHJcbmltcG9ydCB7IEdhbWVTY2VuZSB9IGZyb20gXCIuL0dhbWVTY2VuZVwiO1xyXG5pbXBvcnQgeyBOUEMgfSBmcm9tIFwiLi4vZW50aXRpZXMvTlBDXCI7XHJcbmltcG9ydCBwb3dlcnNoaWJhMSBmcm9tIFwiLi4vLi4vYXNzZXRzL2RpYWxvZy9wb3dlcnNoaWJhMS5kaWFsb2cuanNvblwiO1xyXG5pbXBvcnQgcG93ZXJzaGliYTMgZnJvbSBcIi4uLy4uL2Fzc2V0cy9kaWFsb2cvcG93ZXJzaGliYTMuZGlhbG9nLmpzb25cIjtcclxuaW1wb3J0IHsgUmVuZGVyaW5nTGF5ZXIgfSBmcm9tIFwiLi4vUmVuZGVyZXJcIjtcclxuXHJcbmV4cG9ydCBlbnVtIFBvd2VyU2hpYmFTdGF0ZSB7XHJcbiAgICBJTl9DTE9VRFMsXHJcbiAgICBPTl9NT1VOVEFJTixcclxuICAgIENPTlNVTUVEXHJcbn1cclxuXHJcbkBlbnRpdHkoXCJwb3dlcnNoaWJhXCIpXHJcbmV4cG9ydCBjbGFzcyBQb3dlclNoaWJhIGV4dGVuZHMgTlBDIHtcclxuICAgIEBhc3NldChcInNwcml0ZXMvcG93ZXJzaGliYS5hc2Vwcml0ZS5qc29uXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBzcHJpdGU6IEFzZXByaXRlO1xyXG4gICAgcHJpdmF0ZSBzdGF0ZSA9IFBvd2VyU2hpYmFTdGF0ZS5JTl9DTE9VRFM7XHJcblxyXG4gICAgcHJpdmF0ZSBmbG9hdEFtb3VudCA9IDQ7XHJcbiAgICBwcml2YXRlIGZsb2F0U3BlZWQgPSAyO1xyXG5cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihzY2VuZTogR2FtZVNjZW5lLCB4OiBudW1iZXIsIHk6IG51bWJlcikge1xyXG4gICAgICAgIHN1cGVyKHNjZW5lLCB4LCB5LCAyMiwgMjIpO1xyXG4gICAgICAgIHRoaXMuY29udmVyc2F0aW9uID0gbmV3IENvbnZlcnNhdGlvbihwb3dlcnNoaWJhMSwgdGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG5leHRTdGF0ZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnN0YXRlKys7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBQb3dlclNoaWJhU3RhdGUuT05fTU9VTlRBSU4pIHtcclxuICAgICAgICAgICAgY29uc3Qgc3Bhd24gPSB0aGlzLnNjZW5lLnBvaW50c09mSW50ZXJlc3QuZmluZChwb2kgPT4gcG9pLm5hbWUgPT09IFwicG93ZXJzaGliYV9tb3VudGFpbl9zcGF3blwiKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghc3Bhd24pIHRocm93IG5ldyBFcnJvcihcIlBvd2VyU2hpYmEgbW91bnRhaW4gc3Bhd24gbWlzc2luZ1wiKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZmxvYXRTcGVlZCA9IDI7XHJcbiAgICAgICAgICAgIHRoaXMuZmxvYXRBbW91bnQgPSA0O1xyXG4gICAgICAgICAgICB0aGlzLnggPSBzcGF3bi54O1xyXG4gICAgICAgICAgICB0aGlzLnkgPSBzcGF3bi55O1xyXG4gICAgICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbiA9IG5ldyBDb252ZXJzYXRpb24ocG93ZXJzaGliYTMsIHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2hvd0RpYWxvZ3VlUHJvbXB0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghc3VwZXIuc2hvd0RpYWxvZ3VlUHJvbXB0KCkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBlbHNlIGlmIChDb252ZXJzYXRpb24uZ2V0R2xvYmFscygpW1wiJGdhdmVCb25lVG9Qb3dlclNoaWJhXCJdICYmICFDb252ZXJzYXRpb24uZ2V0R2xvYmFscygpW1wiJHNlZWRncm93blwiXSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgZWxzZSBpZiAoQ29udmVyc2F0aW9uLmdldEdsb2JhbHMoKVtcIiRnYXZlQm9uZVRvUG93ZXJTaGliYVwiXSAmJiBDb252ZXJzYXRpb24uZ2V0R2xvYmFscygpW1wiJHNlZWRncm93blwiXSAmJiAhQ29udmVyc2F0aW9uLmdldEdsb2JhbHMoKVtcIiRnb3RQb3dlclNoaWJhUXVlc3RcIl0pIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhdGUgPT09IFBvd2VyU2hpYmFTdGF0ZS5PTl9NT1VOVEFJTikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgZmVlZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZsb2F0U3BlZWQgPSAzO1xyXG4gICAgICAgIHRoaXMuZmxvYXRBbW91bnQgPSA1O1xyXG4gICAgICAgIHRoaXMuc2NlbmUuZ2FtZS5jYW1wYWlnbi5ydW5BY3Rpb24oXCJnaXZlQm9uZVwiKTtcclxuICAgICAgICB0aGlzLnRoaW5rKFwiT2jigKYgSSByZW1lbWJlcuKAplwiLCAzMDAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZHJhdyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGZsb2F0T2Zmc2V0WSA9IE1hdGguc2luKHRoaXMudGltZUFsaXZlICogdGhpcy5mbG9hdFNwZWVkKSAqIHRoaXMuZmxvYXRBbW91bnQ7XHJcblxyXG4gICAgICAgIHRoaXMuc2NlbmUucmVuZGVyZXIuYWRkQXNlcHJpdGUoXHJcbiAgICAgICAgICAgIFBvd2VyU2hpYmEuc3ByaXRlLCBcImlkbGVcIiwgdGhpcy54LCB0aGlzLnkgLSBmbG9hdE9mZnNldFksXHJcbiAgICAgICAgICAgIFJlbmRlcmluZ0xheWVyLkVOVElUSUVTXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2NlbmUuc2hvd0JvdW5kcykgdGhpcy5kcmF3Qm91bmRzKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNob3dEaWFsb2d1ZVByb21wdCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhd0RpYWxvZ3VlUHJvbXB0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy50aGlua0J1YmJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRoaW5rQnViYmxlLmRyYXcoY3R4KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3BlZWNoQnViYmxlLmRyYXcoY3R4KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlKGR0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci51cGRhdGUoZHQpO1xyXG4gICAgICAgIHRoaXMuZGlhbG9ndWVQcm9tcHQudXBkYXRlKGR0LCB0aGlzLngsIHRoaXMueSArIDE2KTtcclxuICAgICAgICB0aGlzLnNwZWVjaEJ1YmJsZS51cGRhdGUodGhpcy54LCB0aGlzLnkpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50aGlua0J1YmJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRoaW5rQnViYmxlLnVwZGF0ZSh0aGlzLngsIHRoaXMueSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQVFBO0FBQ0E7QUFOQTtBQUVBO0FBQ0E7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBS0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF6RUE7QUFEQTtBQUNBO0FBQUE7QUFGQTtBQURBO0FBU0E7QUFSQTtBQUFBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./lib/scenes/PowerShiba.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/scenes/TitleScene.js":
|
|
/*!**********************************!*\
|
|
!*** ./lib/scenes/TitleScene.js ***!
|
|
\**********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TitleScene = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Aseprite_1 = __webpack_require__(/*! ../Aseprite */ \"./lib/Aseprite.js\");\nconst Assets_1 = __webpack_require__(/*! ../Assets */ \"./lib/Assets.js\");\nconst BitmapFont_1 = __webpack_require__(/*! ../BitmapFont */ \"./lib/BitmapFont.js\");\nconst ControlsScene_1 = __webpack_require__(/*! ./ControlsScene */ \"./lib/scenes/ControlsScene.js\");\nconst CreditsScene_1 = __webpack_require__(/*! ./CreditsScene */ \"./lib/scenes/CreditsScene.js\");\nconst CurtainTransition_1 = __webpack_require__(/*! ../transitions/CurtainTransition */ \"./lib/transitions/CurtainTransition.js\");\nconst constants_1 = __webpack_require__(/*! ../constants */ \"./lib/constants.js\");\nconst easings_1 = __webpack_require__(/*! ../easings */ \"./lib/easings.js\");\nconst FadeTransition_1 = __webpack_require__(/*! ../transitions/FadeTransition */ \"./lib/transitions/FadeTransition.js\");\nconst util_1 = __webpack_require__(/*! ../util */ \"./lib/util.js\");\nconst Menu_1 = __webpack_require__(/*! ../Menu */ \"./lib/Menu.js\");\nconst Scene_1 = __webpack_require__(/*! ../Scene */ \"./lib/Scene.js\");\nconst Sound_1 = __webpack_require__(/*! ../Sound */ \"./lib/Sound.js\");\nconst CharacterSelectionScene_1 = __webpack_require__(/*! ./CharacterSelectionScene */ \"./lib/scenes/CharacterSelectionScene.js\");\nconst AsepriteNode_1 = __webpack_require__(/*! ../scene/AsepriteNode */ \"./lib/scene/AsepriteNode.js\");\nconst Direction_1 = __webpack_require__(/*! ../geom/Direction */ \"./lib/geom/Direction.js\");\nconst ImageNode_1 = __webpack_require__(/*! ../scene/ImageNode */ \"./lib/scene/ImageNode.js\");\nconst SceneNode_1 = __webpack_require__(/*! ../scene/SceneNode */ \"./lib/scene/SceneNode.js\");\nconst GlobalState_1 = __webpack_require__(/*! ../GlobalState */ \"./lib/GlobalState.js\");\nconst Quests_1 = __webpack_require__(/*! ../Quests */ \"./lib/Quests.js\");\nvar MenuItemKey;\n(function (MenuItemKey) {\n MenuItemKey[\"START\"] = \"start\";\n MenuItemKey[\"CONTROLS\"] = \"controls\";\n MenuItemKey[\"CREDITS\"] = \"credits\";\n MenuItemKey[\"EXIT\"] = \"exit\";\n})(MenuItemKey || (MenuItemKey = {}));\nconst MenuLabels = {\n [MenuItemKey.START]: { label: \"Start Game\" },\n [MenuItemKey.CONTROLS]: { label: \"Controls and Options\" },\n [MenuItemKey.CREDITS]: { label: \"Credits\" },\n [MenuItemKey.EXIT]: { label: \"Exit Game\", electronOnly: true },\n};\nclass TitleScene extends Scene_1.Scene {\n constructor() {\n super(...arguments);\n this.animationDuration = 3;\n this.titleBasePosition = {\n x: this.game.width / 2 - TitleScene.logoImage.width / 2,\n y: 60\n };\n this.titleLayer1Position = { x: 0, y: 70 };\n this.titleLayer2Position = { x: 0, y: 163 };\n this.titleLayer3Position = { x: 0, y: -125 };\n this.menuBasePosition = {\n x: this.game.width / 2,\n y: 190,\n gap: 15,\n };\n }\n cleanup() {\n this.rootNode.clear();\n }\n setup() {\n this.zIndex = 1;\n this.inTransition = new FadeTransition_1.FadeTransition();\n this.outTransition = new CurtainTransition_1.CurtainTransition({ easing: easings_1.easeInSine });\n // The sky background layer\n new AsepriteNode_1.AsepriteNode({\n id: \"titleLayer3\",\n aseprite: TitleScene.titleLayer3,\n tag: \"idle\",\n x: this.titleLayer3Position.x,\n y: this.titleLayer3Position.y,\n anchor: Direction_1.Direction.TOP_LEFT\n }).animate({\n animator: (node, value) => node.setY(this.titleLayer3Position.y + (1 - value) * 100),\n duration: this.animationDuration,\n easing: easings_1.easeOutQuad\n }).appendTo(this.rootNode);\n // The background layer with the sea animated to move in from the bottom\n new AsepriteNode_1.AsepriteNode({\n id: \"titleLayer2\",\n aseprite: TitleScene.titleLayer2,\n tag: \"idle\",\n x: this.titleLayer2Position.x,\n y: this.titleLayer2Position.y,\n anchor: Direction_1.Direction.TOP_LEFT\n }).animate({\n animator: (node, value) => node.setY(this.titleLayer2Position.y + (1 - value) * 200),\n duration: this.animationDuration,\n easing: easings_1.easeOutQuad\n }).appendTo(this.rootNode);\n // The two floating islands in the background animated to moving in from the bottom\n new SceneNode_1.SceneNode().appendChild(new AsepriteNode_1.AsepriteNode({\n id: \"titleIsland1\",\n aseprite: TitleScene.titleIsland1,\n tag: \"idle\",\n anchor: Direction_1.Direction.TOP_LEFT,\n x: 90,\n y: 168\n })).appendChild(new AsepriteNode_1.AsepriteNode({\n id: \"titleIsland2\",\n aseprite: TitleScene.titleIsland2,\n tag: \"idle\",\n anchor: Direction_1.Direction.TOP_LEFT,\n x: 323,\n y: 178\n })).animate({\n animator: (node, value) => node.setY((1 - value) * 250),\n duration: this.animationDuration,\n easing: easings_1.easeOutQuad\n }).appendTo(this.rootNode);\n // The girl standing on the ground animated to move in from the bottom\n new AsepriteNode_1.AsepriteNode({\n id: \"person\",\n aseprite: TitleScene.person,\n tag: \"idle\",\n x: 22,\n y: 155,\n anchor: Direction_1.Direction.TOP_LEFT\n }).animate({\n animator: (node, value) => node.setY(155 + (1 - value) * 330),\n duration: this.animationDuration,\n easing: easings_1.easeOutQuad\n }).appendTo(this.rootNode);\n // The ground layer animated to move in from the bottom\n new AsepriteNode_1.AsepriteNode({\n id: \"titleLayer1\",\n aseprite: TitleScene.titleLayer1,\n tag: \"idle\",\n x: this.titleLayer1Position.x,\n y: this.titleLayer1Position.y,\n anchor: Direction_1.Direction.TOP_LEFT\n }).animate({\n animator: (node, value) => node.setY(this.titleLayer1Position.y + (1 - value) * 300),\n duration: this.animationDuration,\n easing: easings_1.easeOutQuad\n }).appendTo(this.rootNode);\n // The title text with flame icon fading in and moving to the top\n new SceneNode_1.SceneNode({\n opacity: 0,\n x: this.titleBasePosition.x,\n y: this.titleBasePosition.y\n }).appendChild(new AsepriteNode_1.AsepriteNode({\n id: \"flameicon\",\n aseprite: TitleScene.flameicon,\n tag: \"idle\",\n anchor: Direction_1.Direction.TOP_LEFT,\n x: 147,\n y: -10\n })).appendChild(new ImageNode_1.ImageNode({\n id: \"logoImage\",\n image: TitleScene.logoImage,\n anchor: Direction_1.Direction.TOP_LEFT\n })).animate({\n animator: (node, value) => node.setY(this.titleBasePosition.y - 10 + 150 * (1 - value)),\n duration: this.animationDuration,\n easing: easings_1.easeOutQuad\n }).animate({\n animator: (node, value) => node.setOpacity(value),\n delay: this.animationDuration / 2,\n duration: this.animationDuration / 2,\n easing: easings_1.easeOutQuad\n }).appendTo(this.rootNode);\n this.menu = new Menu_1.MenuList({\n id: \"menu\",\n opacity: 0,\n align: Menu_1.MenuAlignment.CENTER\n }).animate({\n animator: (node, value) => node.setOpacity(value),\n delay: 2.5,\n duration: 0.5,\n easing: easings_1.easeOutQuad\n }).appendTo(this.rootNode);\n if (GlobalState_1.GlobalState.getHasBeatenGame()) {\n new SceneNode_1.SceneNode({\n opacity: 0,\n x: 118,\n y: 108,\n })\n .appendChild(this.addEndingCard(0, Quests_1.QuestKey.A))\n .appendChild(this.addEndingCard(1, Quests_1.QuestKey.B))\n .appendChild(this.addEndingCard(2, Quests_1.QuestKey.C))\n .appendChild(this.addEndingCard(3, Quests_1.QuestKey.D))\n .appendChild(this.addEndingCard(4, Quests_1.QuestKey.E))\n .animate({\n animator: (node, value) => node.setOpacity(value),\n delay: 2.5,\n duration: 0.5,\n easing: easings_1.easeOutQuad\n }).appendTo(this.rootNode);\n }\n Object.values(MenuItemKey).forEach((key, index) => {\n if (!MenuLabels[key].electronOnly || (util_1.isElectron() || window.opener)) {\n this.menu.addItems(new Menu_1.MenuItem(key, MenuLabels[key].label, TitleScene.font, \"white\", this.menuBasePosition.x, this.menuBasePosition.y + this.menuBasePosition.gap * index));\n }\n });\n }\n animationIsDone() {\n return !this.rootNode.hasAnimations();\n }\n finishAnimation() {\n this.rootNode.finishAnimations();\n }\n addEndingCard(index, key) {\n let tag = \"\";\n switch (key) {\n case Quests_1.QuestKey.A:\n tag = \"a_\";\n break;\n case Quests_1.QuestKey.B:\n tag = \"b_\";\n break;\n case Quests_1.QuestKey.C:\n tag = \"c_\";\n break;\n case Quests_1.QuestKey.D:\n tag = \"d_\";\n break;\n case Quests_1.QuestKey.E:\n tag = \"e_\";\n break;\n }\n const isAchieved = GlobalState_1.GlobalState.getAchievedEndings().includes(key);\n tag += isAchieved ? \"on\" : \"off\";\n return new AsepriteNode_1.AsepriteNode({\n id: `endingCard_${key}`,\n aseprite: TitleScene.endingCards,\n tag,\n anchor: Direction_1.Direction.TOP_LEFT,\n x: index * 40 + (index * 10),\n y: 0\n });\n }\n handleMenuAction(buttonId) {\n switch (buttonId) {\n case MenuItemKey.START:\n // this.stopMusicTrack();\n this.game.scenes.pushScene(CharacterSelectionScene_1.CharacterSelectionScene);\n // this.game.scenes.setScene(GameScene);\n break;\n case MenuItemKey.CONTROLS:\n this.game.scenes.pushScene(ControlsScene_1.ControlsScene);\n break;\n case MenuItemKey.CREDITS:\n this.stopMusicTrack();\n this.game.scenes.pushScene(CreditsScene_1.CreditsScene);\n break;\n case MenuItemKey.EXIT:\n window.close();\n break;\n }\n }\n activate() {\n this.input.onButtonDown.connect(this.handleButtonDown, this);\n this.menu.onActivated.connect(this.handleMenuAction, this);\n this.playMusicTrack();\n }\n deactivate() {\n this.input.onButtonDown.disconnect(this.handleButtonDown, this);\n this.menu.onActivated.disconnect(this.handleMenuAction, this);\n }\n handleButtonDown(event) {\n if (this.animationIsDone()) {\n if (event.isConfirm) {\n this.menu.executeAction();\n }\n else if (event.isMenuUp) {\n this.menu.prev();\n }\n else if (event.isMenuDown) {\n this.menu.next();\n }\n }\n else {\n if (event.isConfirm) {\n this.finishAnimation();\n }\n }\n }\n stopMusicTrack() {\n TitleScene.music.stop();\n }\n playMusicTrack() {\n TitleScene.music.setLoop(true);\n TitleScene.music.setVolume(0.30);\n TitleScene.music.play();\n }\n}\ntslib_1.__decorate([\n Assets_1.asset(\"music/cerulean-expanse.ogg\"),\n tslib_1.__metadata(\"design:type\", Sound_1.Sound)\n], TitleScene, \"music\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"images/title/layer1.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], TitleScene, \"titleLayer1\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"images/title/layer2.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], TitleScene, \"titleLayer2\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"images/title/island1.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], TitleScene, \"titleIsland1\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"images/title/island2.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], TitleScene, \"titleIsland2\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"images/title/layer3.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], TitleScene, \"titleLayer3\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"images/title/person.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], TitleScene, \"person\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"images/logo.png\"),\n tslib_1.__metadata(\"design:type\", HTMLImageElement)\n], TitleScene, \"logoImage\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/flameicon.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], TitleScene, \"flameicon\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(\"sprites/ending_cards.aseprite.json\"),\n tslib_1.__metadata(\"design:type\", Aseprite_1.Aseprite)\n], TitleScene, \"endingCards\", void 0);\ntslib_1.__decorate([\n Assets_1.asset(constants_1.DIALOG_FONT),\n tslib_1.__metadata(\"design:type\", BitmapFont_1.BitmapFont)\n], TitleScene, \"font\", void 0);\nexports.TitleScene = TitleScene;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvc2NlbmVzL1RpdGxlU2NlbmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvc2NlbmVzL1RpdGxlU2NlbmUudHM/NDdkZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc2Vwcml0ZSB9IGZyb20gXCIuLi9Bc2Vwcml0ZVwiO1xyXG5pbXBvcnQgeyBhc3NldCB9IGZyb20gXCIuLi9Bc3NldHNcIjtcclxuaW1wb3J0IHsgQml0bWFwRm9udCB9IGZyb20gXCIuLi9CaXRtYXBGb250XCI7XHJcbmltcG9ydCB7IENvbnRyb2xsZXJFdmVudCB9IGZyb20gXCIuLi9pbnB1dC9Db250cm9sbGVyRXZlbnRcIjtcclxuaW1wb3J0IHsgQ29udHJvbHNTY2VuZSB9IGZyb20gXCIuL0NvbnRyb2xzU2NlbmVcIjtcclxuaW1wb3J0IHsgQ3JlZGl0c1NjZW5lIH0gZnJvbSBcIi4vQ3JlZGl0c1NjZW5lXCI7XHJcbmltcG9ydCB7IEN1cnRhaW5UcmFuc2l0aW9uIH0gZnJvbSBcIi4uL3RyYW5zaXRpb25zL0N1cnRhaW5UcmFuc2l0aW9uXCI7XHJcbmltcG9ydCB7IERJQUxPR19GT05UIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBlYXNlSW5TaW5lLCBlYXNlT3V0UXVhZCB9IGZyb20gXCIuLi9lYXNpbmdzXCI7XHJcbmltcG9ydCB7IEZhZGVUcmFuc2l0aW9uIH0gZnJvbSBcIi4uL3RyYW5zaXRpb25zL0ZhZGVUcmFuc2l0aW9uXCI7XHJcbmltcG9ydCB7IEZyaWVuZGx5RmlyZSB9IGZyb20gXCIuLi9GcmllbmRseUZpcmVcIjtcclxuaW1wb3J0IHsgaXNFbGVjdHJvbiB9IGZyb20gXCIuLi91dGlsXCI7XHJcbmltcG9ydCB7IE1lbnVBbGlnbm1lbnQsIE1lbnVJdGVtLCBNZW51TGlzdCB9IGZyb20gXCIuLi9NZW51XCI7XHJcbmltcG9ydCB7IFNjZW5lIH0gZnJvbSBcIi4uL1NjZW5lXCI7XHJcbmltcG9ydCB7IFNvdW5kIH0gZnJvbSBcIi4uL1NvdW5kXCI7XHJcbmltcG9ydCB7IENoYXJhY3RlclNlbGVjdGlvblNjZW5lIH0gZnJvbSBcIi4vQ2hhcmFjdGVyU2VsZWN0aW9uU2NlbmVcIjtcclxuaW1wb3J0IHsgQXNlcHJpdGVOb2RlIH0gZnJvbSBcIi4uL3NjZW5lL0FzZXByaXRlTm9kZVwiO1xyXG5pbXBvcnQgeyBEaXJlY3Rpb24gfSBmcm9tIFwiLi4vZ2VvbS9EaXJlY3Rpb25cIjtcclxuaW1wb3J0IHsgSW1hZ2VOb2RlIH0gZnJvbSBcIi4uL3NjZW5lL0ltYWdlTm9kZVwiO1xyXG5pbXBvcnQgeyBTY2VuZU5vZGUgfSBmcm9tIFwiLi4vc2NlbmUvU2NlbmVOb2RlXCI7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlIH0gZnJvbSBcIi4uL0dsb2JhbFN0YXRlXCI7XHJcbmltcG9ydCB7IFF1ZXN0S2V5IH0gZnJvbSBcIi4uL1F1ZXN0c1wiO1xyXG5cclxudHlwZSBNYWluTWVudVBhcmFtcyA9IHtcclxuICAgIGxhYmVsOiBzdHJpbmc7XHJcbiAgICBlbGVjdHJvbk9ubHk/OiBib29sZWFuO1xyXG59O1xyXG5cclxuZW51bSBNZW51SXRlbUtleSB7XHJcbiAgICBTVEFSVCA9IFwic3RhcnRcIixcclxuICAgIENPTlRST0xTID0gXCJjb250cm9sc1wiLFxyXG4gICAgQ1JFRElUUyA9IFwiY3JlZGl0c1wiLFxyXG4gICAgRVhJVCA9IFwiZXhpdFwiXHJcbn1cclxuXHJcbmNvbnN0IE1lbnVMYWJlbHM6IFJlY29yZDxNZW51SXRlbUtleSwgTWFpbk1lbnVQYXJhbXM+ID0ge1xyXG4gICAgW01lbnVJdGVtS2V5LlNUQVJUXTogeyBsYWJlbDogXCJTdGFydCBHYW1lXCIgfSxcclxuICAgIFtNZW51SXRlbUtleS5DT05UUk9MU106IHsgbGFiZWw6IFwiQ29udHJvbHMgYW5kIE9wdGlvbnNcIiB9LFxyXG4gICAgW01lbnVJdGVtS2V5LkNSRURJVFNdOiB7IGxhYmVsOiBcIkNyZWRpdHNcIiB9LFxyXG4gICAgW01lbnVJdGVtS2V5LkVYSVRdOiB7IGxhYmVsOiBcIkV4aXQgR2FtZVwiLCBlbGVjdHJvbk9ubHk6IHRydWUgfSxcclxufTtcclxuXHJcbmV4cG9ydCBjbGFzcyBUaXRsZVNjZW5lIGV4dGVuZHMgU2NlbmU8RnJpZW5kbHlGaXJlPiB7XHJcbiAgICBAYXNzZXQoXCJtdXNpYy9jZXJ1bGVhbi1leHBhbnNlLm9nZ1wiKVxyXG4gICAgcHVibGljIHN0YXRpYyBtdXNpYzogU291bmQ7XHJcblxyXG4gICAgQGFzc2V0KFwiaW1hZ2VzL3RpdGxlL2xheWVyMS5hc2Vwcml0ZS5qc29uXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyB0aXRsZUxheWVyMTogQXNlcHJpdGU7XHJcblxyXG4gICAgQGFzc2V0KFwiaW1hZ2VzL3RpdGxlL2xheWVyMi5hc2Vwcml0ZS5qc29uXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyB0aXRsZUxheWVyMjogQXNlcHJpdGU7XHJcblxyXG4gICAgQGFzc2V0KFwiaW1hZ2VzL3RpdGxlL2lzbGFuZDEuYXNlcHJpdGUuanNvblwiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgdGl0bGVJc2xhbmQxOiBBc2Vwcml0ZTtcclxuXHJcbiAgICBAYXNzZXQoXCJpbWFnZXMvdGl0bGUvaXNsYW5kMi5hc2Vwcml0ZS5qc29uXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyB0aXRsZUlzbGFuZDI6IEFzZXByaXRlO1xyXG5cclxuICAgIEBhc3NldChcImltYWdlcy90aXRsZS9sYXllcjMuYXNlcHJpdGUuanNvblwiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgdGl0bGVMYXllcjM6IEFzZXByaXRlO1xyXG5cclxuICAgIEBhc3NldChcImltYWdlcy90aXRsZS9wZXJzb24uYXNlcHJpdGUuanNvblwiKVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgcGVyc29uOiBBc2Vwcml0ZTtcclxuXHJcbiAgICBAYXNzZXQoXCJpbWFnZXMvbG9nby5wbmdcIilcclxuICAgIHByaXZhdGUgc3RhdGljIGxvZ29JbWFnZTogSFRNTEltYWdlRWxlbWVudDtcclxuXHJcbiAgICBAYXNzZXQoXCJzcHJpdGVzL2ZsYW1laWNvbi5hc2Vwcml0ZS5qc29uXCIpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBmbGFtZWljb246IEFzZXByaXRlO1xyXG5cclxuICAgIEBhc3NldChcInNwcml0ZXMvZW5kaW5nX2NhcmRzLmFzZXByaXRlLmpzb25cIilcclxuICAgIHByaXZhdGUgc3RhdGljIGVuZGluZ0NhcmRzOiBBc2Vwcml0ZTtcclxuXHJcbiAgICBAYXNzZXQoRElBTE9HX0ZPTlQpXHJcbiAgICBwcml2YXRlIHN0YXRpYyBmb250OiBCaXRtYXBGb250O1xyXG5cclxuICAgIHByaXZhdGUgbWVudSE6IE1lbnVMaXN0O1xyXG5cclxuICAgIHByaXZhdGUgYW5pbWF0aW9uRHVyYXRpb24gPSAzO1xyXG5cclxuICAgIHByaXZhdGUgdGl0bGVCYXNlUG9zaXRpb24gPSB7XHJcbiAgICAgICAgeDogdGhpcy5nYW1lLndpZHRoIC8gMiAtIFRpdGxlU2NlbmUubG9nb0ltYWdlLndpZHRoIC8gMixcclxuICAgICAgICB5OiA2MFxyXG4gICAgfTtcclxuXHJcbiAgICBwcml2YXRlIHRpdGxlTGF5ZXIxUG9zaXRpb24gPSB7IHg6IDAsIHk6IDcwIH07XHJcbiAgICBwcml2YXRlIHRpdGxlTGF5ZXIyUG9zaXRpb24gPSB7IHg6IDAsIHk6IDE2MyB9O1xyXG4gICAgcHJpdmF0ZSB0aXRsZUxheWVyM1Bvc2l0aW9uID0geyB4OiAwLCB5OiAtMTI1IH07XHJcblxyXG4gICAgcHJpdmF0ZSBtZW51QmFzZVBvc2l0aW9uID0ge1xyXG4gICAgICAgIHg6IHRoaXMuZ2FtZS53aWR0aCAvIDIsXHJcbiAgICAgICAgeTogMTkwLFxyXG4gICAgICAgIGdhcDogMTUsXHJcbiAgICB9O1xyXG5cclxuICAgIHB1YmxpYyBjbGVhbnVwKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucm9vdE5vZGUuY2xlYXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0dXAoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy56SW5kZXggPSAxO1xyXG4gICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uID0gbmV3IEZhZGVUcmFuc2l0aW9uKCk7XHJcbiAgICAgICAgdGhpcy5vdXRUcmFuc2l0aW9uID0gbmV3IEN1cnRhaW5UcmFuc2l0aW9uKHsgZWFzaW5nOiBlYXNlSW5TaW5lIH0pO1xyXG5cclxuICAgICAgICAvLyBUaGUgc2t5IGJhY2tncm91bmQgbGF5ZXJcclxuICAgICAgICBuZXcgQXNlcHJpdGVOb2RlKHtcclxuICAgICAgICAgICAgaWQ6IFwidGl0bGVMYXllcjNcIixcclxuICAgICAgICAgICAgYXNlcHJpdGU6IFRpdGxlU2NlbmUudGl0bGVMYXllcjMsXHJcbiAgICAgICAgICAgIHRhZzogXCJpZGxlXCIsXHJcbiAgICAgICAgICAgIHg6IHRoaXMudGl0bGVMYXllcjNQb3NpdGlvbi54LFxyXG4gICAgICAgICAgICB5OiB0aGlzLnRpdGxlTGF5ZXIzUG9zaXRpb24ueSxcclxuICAgICAgICAgICAgYW5jaG9yOiBEaXJlY3Rpb24uVE9QX0xFRlRcclxuICAgICAgICB9KS5hbmltYXRlKHtcclxuICAgICAgICAgICAgYW5pbWF0b3I6IChub2RlLCB2YWx1ZSkgPT4gbm9kZS5zZXRZKHRoaXMudGl0bGVMYXllcjNQb3NpdGlvbi55ICsgKDEgLSB2YWx1ZSkgKiAxMDApLFxyXG4gICAgICAgICAgICBkdXJhdGlvbjogdGhpcy5hbmltYXRpb25EdXJhdGlvbixcclxuICAgICAgICAgICAgZWFzaW5nOiBlYXNlT3V0UXVhZFxyXG4gICAgICAgIH0pLmFwcGVuZFRvKHRoaXMucm9vdE5vZGUpO1xyXG5cclxuICAgICAgICAvLyBUaGUgYmFja2dyb3VuZCBsYXllciB3aXRoIHRoZSBzZWEgYW5pbWF0ZWQgdG8gbW92ZSBpbiBmcm9tIHRoZSBib3R0b21cclxuICAgICAgICBuZXcgQXNlcHJpdGVOb2RlKHtcclxuICAgICAgICAgICAgaWQ6IFwidGl0bGVMYXllcjJcIixcclxuICAgICAgICAgICAgYXNlcHJpdGU6IFRpdGxlU2NlbmUudGl0bGVMYXllcjIsXHJcbiAgICAgICAgICAgIHRhZzogXCJpZGxlXCIsXHJcbiAgICAgICAgICAgIHg6IHRoaXMudGl0bGVMYXllcjJQb3NpdGlvbi54LFxyXG4gICAgICAgICAgICB5OiB0aGlzLnRpdGxlTGF5ZXIyUG9zaXRpb24ueSxcclxuICAgICAgICAgICAgYW5jaG9yOiBEaXJlY3Rpb24uVE9QX0xFRlRcclxuICAgICAgICB9KS5hbmltYXRlKHtcclxuICAgICAgICAgICAgYW5pbWF0b3I6IChub2RlLCB2YWx1ZSkgPT4gbm9kZS5zZXRZKHRoaXMudGl0bGVMYXllcjJQb3NpdGlvbi55ICsgKDEgLSB2YWx1ZSkgKiAyMDApLFxyXG4gICAgICAgICAgICBkdXJhdGlvbjogdGhpcy5hbmltYXRpb25EdXJhdGlvbixcclxuICAgICAgICAgICAgZWFzaW5nOiBlYXNlT3V0UXVhZFxyXG4gICAgICAgIH0pLmFwcGVuZFRvKHRoaXMucm9vdE5vZGUpO1xyXG5cclxuICAgICAgICAvLyBUaGUgdHdvIGZsb2F0aW5nIGlzbGFuZHMgaW4gdGhlIGJhY2tncm91bmQgYW5pbWF0ZWQgdG8gbW92aW5nIGluIGZyb20gdGhlIGJvdHRvbVxyXG4gICAgICAgIG5ldyBTY2VuZU5vZGUoKS5hcHBlbmRDaGlsZChcclxuICAgICAgICAgICAgbmV3IEFzZXByaXRlTm9kZSh7XHJcbiAgICAgICAgICAgICAgICBpZDogXCJ0aXRsZUlzbGFuZDFcIixcclxuICAgICAgICAgICAgICAgIGFzZXByaXRlOiBUaXRsZVNjZW5lLnRpdGxlSXNsYW5kMSxcclxuICAgICAgICAgICAgICAgIHRhZzogXCJpZGxlXCIsXHJcbiAgICAgICAgICAgICAgICBhbmNob3I6IERpcmVjdGlvbi5UT1BfTEVGVCxcclxuICAgICAgICAgICAgICAgIHg6IDkwLFxyXG4gICAgICAgICAgICAgICAgeTogMTY4XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKS5hcHBlbmRDaGlsZChcclxuICAgICAgICAgICAgbmV3IEFzZXByaXRlTm9kZSh7XHJcbiAgICAgICAgICAgICAgICBpZDogXCJ0aXRsZUlzbGFuZDJcIixcclxuICAgICAgICAgICAgICAgIGFzZXByaXRlOiBUaXRsZVNjZW5lLnRpdGxlSXNsYW5kMixcclxuICAgICAgICAgICAgICAgIHRhZzogXCJpZGxlXCIsXHJcbiAgICAgICAgICAgICAgICBhbmNob3I6IERpcmVjdGlvbi5UT1BfTEVGVCxcclxuICAgICAgICAgICAgICAgIHg6IDMyMyxcclxuICAgICAgICAgICAgICAgIHk6IDE3OFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICkuYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgIGFuaW1hdG9yOiAobm9kZSwgdmFsdWUpID0+IG5vZGUuc2V0WSgoMSAtIHZhbHVlKSAqIDI1MCksXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiB0aGlzLmFuaW1hdGlvbkR1cmF0aW9uLFxyXG4gICAgICAgICAgICBlYXNpbmc6IGVhc2VPdXRRdWFkXHJcbiAgICAgICAgfSkuYXBwZW5kVG8odGhpcy5yb290Tm9kZSk7XHJcblxyXG4gICAgICAgIC8vIFRoZSBnaXJsIHN0YW5kaW5nIG9uIHRoZSBncm91bmQgYW5pbWF0ZWQgdG8gbW92ZSBpbiBmcm9tIHRoZSBib3R0b21cclxuICAgICAgICBuZXcgQXNlcHJpdGVOb2RlKHtcclxuICAgICAgICAgICAgaWQ6IFwicGVyc29uXCIsXHJcbiAgICAgICAgICAgIGFzZXByaXRlOiBUaXRsZVNjZW5lLnBlcnNvbixcclxuICAgICAgICAgICAgdGFnOiBcImlkbGVcIixcclxuICAgICAgICAgICAgeDogMjIsXHJcbiAgICAgICAgICAgIHk6IDE1NSxcclxuICAgICAgICAgICAgYW5jaG9yOiBEaXJlY3Rpb24uVE9QX0xFRlRcclxuICAgICAgICB9KS5hbmltYXRlKHtcclxuICAgICAgICAgICAgYW5pbWF0b3I6IChub2RlLCB2YWx1ZSkgPT4gbm9kZS5zZXRZKDE1NSArICgxIC0gdmFsdWUpICogMzMwKSxcclxuICAgICAgICAgICAgZHVyYXRpb246IHRoaXMuYW5pbWF0aW9uRHVyYXRpb24sXHJcbiAgICAgICAgICAgIGVhc2luZzogZWFzZU91dFF1YWRcclxuICAgICAgICB9KS5hcHBlbmRUbyh0aGlzLnJvb3ROb2RlKTtcclxuXHJcbiAgICAgICAgLy8gVGhlIGdyb3VuZCBsYXllciBhbmltYXRlZCB0byBtb3ZlIGluIGZyb20gdGhlIGJvdHRvbVxyXG4gICAgICAgIG5ldyBBc2Vwcml0ZU5vZGUoe1xyXG4gICAgICAgICAgICBpZDogXCJ0aXRsZUxheWVyMVwiLFxyXG4gICAgICAgICAgICBhc2Vwcml0ZTogVGl0bGVTY2VuZS50aXRsZUxheWVyMSxcclxuICAgICAgICAgICAgdGFnOiBcImlkbGVcIixcclxuICAgICAgICAgICAgeDogdGhpcy50aXRsZUxheWVyMVBvc2l0aW9uLngsXHJcbiAgICAgICAgICAgIHk6IHRoaXMudGl0bGVMYXllcjFQb3NpdGlvbi55LFxyXG4gICAgICAgICAgICBhbmNob3I6IERpcmVjdGlvbi5UT1BfTEVGVFxyXG4gICAgICAgIH0pLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICBhbmltYXRvcjogKG5vZGUsIHZhbHVlKSA9PiBub2RlLnNldFkodGhpcy50aXRsZUxheWVyMVBvc2l0aW9uLnkgKyAoMSAtIHZhbHVlKSAqIDMwMCksXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiB0aGlzLmFuaW1hdGlvbkR1cmF0aW9uLFxyXG4gICAgICAgICAgICBlYXNpbmc6IGVhc2VPdXRRdWFkXHJcbiAgICAgICAgfSkuYXBwZW5kVG8odGhpcy5yb290Tm9kZSk7XHJcblxyXG4gICAgICAgIC8vIFRoZSB0aXRsZSB0ZXh0IHdpdGggZmxhbWUgaWNvbiBmYWRpbmcgaW4gYW5kIG1vdmluZyB0byB0aGUgdG9wXHJcbiAgICAgICAgbmV3IFNjZW5lTm9kZSh7XHJcbiAgICAgICAgICAgIG9wYWNpdHk6IDAsXHJcbiAgICAgICAgICAgIHg6IHRoaXMudGl0bGVCYXNlUG9zaXRpb24ueCxcclxuICAgICAgICAgICAgeTogdGhpcy50aXRsZUJhc2VQb3NpdGlvbi55XHJcbiAgICAgICAgfSkuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgICAgIG5ldyBBc2Vwcml0ZU5vZGUoe1xyXG4gICAgICAgICAgICAgICAgaWQ6IFwiZmxhbWVpY29uXCIsXHJcbiAgICAgICAgICAgICAgICBhc2Vwcml0ZTogVGl0bGVTY2VuZS5mbGFtZWljb24sXHJcbiAgICAgICAgICAgICAgICB0YWc6IFwiaWRsZVwiLFxyXG4gICAgICAgICAgICAgICAgYW5jaG9yOiBEaXJlY3Rpb24uVE9QX0xFRlQsXHJcbiAgICAgICAgICAgICAgICB4OiAxNDcsXHJcbiAgICAgICAgICAgICAgICB5OiAtMTBcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApLmFwcGVuZENoaWxkKFxyXG4gICAgICAgICAgICBuZXcgSW1hZ2VOb2RlKHtcclxuICAgICAgICAgICAgICAgIGlkOiBcImxvZ29JbWFnZVwiLFxyXG4gICAgICAgICAgICAgICAgaW1hZ2U6IFRpdGxlU2NlbmUubG9nb0ltYWdlLFxyXG4gICAgICAgICAgICAgICAgYW5jaG9yOiBEaXJlY3Rpb24uVE9QX0xFRlRcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICBhbmltYXRvcjogKG5vZGUsIHZhbHVlKSA9PiBub2RlLnNldFkodGhpcy50aXRsZUJhc2VQb3NpdGlvbi55IC0gMTAgKyAxNTAgKiAoMSAtIHZhbHVlKSksXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiB0aGlzLmFuaW1hdGlvbkR1cmF0aW9uLFxyXG4gICAgICAgICAgICBlYXNpbmc6IGVhc2VPdXRRdWFkXHJcbiAgICAgICAgfSkuYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgIGFuaW1hdG9yOiAobm9kZSwgdmFsdWUpID0+IG5vZGUuc2V0T3BhY2l0eSh2YWx1ZSksXHJcbiAgICAgICAgICAgIGRlbGF5OiB0aGlzLmFuaW1hdGlvbkR1cmF0aW9uIC8gMixcclxuICAgICAgICAgICAgZHVyYXRpb246IHRoaXMuYW5pbWF0aW9uRHVyYXRpb24gLyAyLFxyXG4gICAgICAgICAgICBlYXNpbmc6IGVhc2VPdXRRdWFkXHJcbiAgICAgICAgfSkuYXBwZW5kVG8odGhpcy5yb290Tm9kZSk7XHJcblxyXG4gICAgICAgIHRoaXMubWVudSA9IG5ldyBNZW51TGlzdCh7XHJcbiAgICAgICAgICAgIGlkOiBcIm1lbnVcIixcclxuICAgICAgICAgICAgb3BhY2l0eTowLFxyXG4gICAgICAgICAgICBhbGlnbjogTWVudUFsaWdubWVudC5DRU5URVJcclxuICAgICAgICB9KS5hbmltYXRlKHtcclxuICAgICAgICAgICAgYW5pbWF0b3I6IChub2RlLCB2YWx1ZSkgPT4gbm9kZS5zZXRPcGFjaXR5KHZhbHVlKSxcclxuICAgICAgICAgICAgZGVsYXk6IDIuNSxcclxuICAgICAgICAgICAgZHVyYXRpb246IDAuNSxcclxuICAgICAgICAgICAgZWFzaW5nOiBlYXNlT3V0UXVhZFxyXG4gICAgICAgIH0pLmFwcGVuZFRvKHRoaXMucm9vdE5vZGUpO1xyXG5cclxuICAgICAgICBpZiAoR2xvYmFsU3RhdGUuZ2V0SGFzQmVhdGVuR2FtZSgpKSB7XHJcbiAgICAgICAgICAgIG5ldyBTY2VuZU5vZGUoe1xyXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMCxcclxuICAgICAgICAgICAgICAgIHg6IDExOCxcclxuICAgICAgICAgICAgICAgIHk6IDEwOCxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmFwcGVuZENoaWxkKHRoaXMuYWRkRW5kaW5nQ2FyZCgwLCBRdWVzdEtleS5BKSlcclxuICAgICAgICAgICAgLmFwcGVuZENoaWxkKHRoaXMuYWRkRW5kaW5nQ2FyZCgxLCBRdWVzdEtleS5CKSlcclxuICAgICAgICAgICAgLmFwcGVuZENoaWxkKHRoaXMuYWRkRW5kaW5nQ2FyZCgyLCBRdWVzdEtleS5DKSlcclxuICAgICAgICAgICAgLmFwcGVuZENoaWxkKHRoaXMuYWRkRW5kaW5nQ2FyZCgzLCBRdWVzdEtleS5EKSlcclxuICAgICAgICAgICAgLmFwcGVuZENoaWxkKHRoaXMuYWRkRW5kaW5nQ2FyZCg0LCBRdWVzdEtleS5FKSlcclxuICAgICAgICAgICAgLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICAgICAgYW5pbWF0b3I6IChub2RlLCB2YWx1ZSkgPT4gbm9kZS5zZXRPcGFjaXR5KHZhbHVlKSxcclxuICAgICAgICAgICAgICAgIGRlbGF5OiAyLjUsXHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMC41LFxyXG4gICAgICAgICAgICAgICAgZWFzaW5nOiBlYXNlT3V0UXVhZFxyXG4gICAgICAgICAgICB9KS5hcHBlbmRUbyh0aGlzLnJvb3ROb2RlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIE9iamVjdC52YWx1ZXMoTWVudUl0ZW1LZXkpLmZvckVhY2goKGtleSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFNZW51TGFiZWxzW2tleV0uZWxlY3Ryb25Pbmx5IHx8IChpc0VsZWN0cm9uKCkgfHwgd2luZG93Lm9wZW5lcikpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVudS5hZGRJdGVtcyhcclxuICAgICAgICAgICAgICAgICAgICBuZXcgTWVudUl0ZW0oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgTWVudUxhYmVsc1trZXldLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUaXRsZVNjZW5lLmZvbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwid2hpdGVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZW51QmFzZVBvc2l0aW9uLngsIHRoaXMubWVudUJhc2VQb3NpdGlvbi55ICsgdGhpcy5tZW51QmFzZVBvc2l0aW9uLmdhcCAqIGluZGV4XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhbmltYXRpb25Jc0RvbmUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLnJvb3ROb2RlLmhhc0FuaW1hdGlvbnMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZmluaXNoQW5pbWF0aW9uKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucm9vdE5vZGUuZmluaXNoQW5pbWF0aW9ucygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRFbmRpbmdDYXJkIChpbmRleDogbnVtYmVyLCBrZXk6IFF1ZXN0S2V5KTogQXNlcHJpdGVOb2RlIHtcclxuICAgICAgICBsZXQgdGFnID0gXCJcIjtcclxuICAgICAgICBzd2l0Y2ggKGtleSkge1xyXG4gICAgICAgICAgICBjYXNlIFF1ZXN0S2V5LkE6IHRhZyA9IFwiYV9cIjsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgUXVlc3RLZXkuQjogdGFnID0gXCJiX1wiOyBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBRdWVzdEtleS5DOiB0YWcgPSBcImNfXCI7IGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFF1ZXN0S2V5LkQ6IHRhZyA9IFwiZF9cIjsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgUXVlc3RLZXkuRTogdGFnID0gXCJlX1wiOyBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGlzQWNoaWV2ZWQgPSBHbG9iYWxTdGF0ZS5nZXRBY2hpZXZlZEVuZGluZ3MoKS5pbmNsdWRlcyhrZXkpO1xyXG4gICAgICAgIHRhZyArPSBpc0FjaGlldmVkID8gXCJvblwiIDogXCJvZmZcIjtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBBc2Vwcml0ZU5vZGUoe1xyXG4gICAgICAgICAgICBpZDogYGVuZGluZ0NhcmRfJHtrZXl9YCxcclxuICAgICAgICAgICAgYXNlcHJpdGU6IFRpdGxlU2NlbmUuZW5kaW5nQ2FyZHMsXHJcbiAgICAgICAgICAgIHRhZyxcclxuICAgICAgICAgICAgYW5jaG9yOiBEaXJlY3Rpb24uVE9QX0xFRlQsXHJcbiAgICAgICAgICAgIHg6IGluZGV4ICogNDAgKyAoaW5kZXggKiAxMCksXHJcbiAgICAgICAgICAgIHk6IDBcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFuZGxlTWVudUFjdGlvbihidXR0b25JZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgc3dpdGNoIChidXR0b25JZCkge1xyXG4gICAgICAgICAgICBjYXNlIE1lbnVJdGVtS2V5LlNUQVJUOlxyXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5zdG9wTXVzaWNUcmFjaygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nYW1lLnNjZW5lcy5wdXNoU2NlbmUoQ2hhcmFjdGVyU2VsZWN0aW9uU2NlbmUpO1xyXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5nYW1lLnNjZW5lcy5zZXRTY2VuZShHYW1lU2NlbmUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgTWVudUl0ZW1LZXkuQ09OVFJPTFM6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbWUuc2NlbmVzLnB1c2hTY2VuZShDb250cm9sc1NjZW5lKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIE1lbnVJdGVtS2V5LkNSRURJVFM6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3BNdXNpY1RyYWNrKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbWUuc2NlbmVzLnB1c2hTY2VuZShDcmVkaXRzU2NlbmUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgTWVudUl0ZW1LZXkuRVhJVDpcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhY3RpdmF0ZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlucHV0Lm9uQnV0dG9uRG93bi5jb25uZWN0KHRoaXMuaGFuZGxlQnV0dG9uRG93biwgdGhpcyk7XHJcbiAgICAgICAgdGhpcy5tZW51Lm9uQWN0aXZhdGVkLmNvbm5lY3QodGhpcy5oYW5kbGVNZW51QWN0aW9uLCB0aGlzKTtcclxuICAgICAgICB0aGlzLnBsYXlNdXNpY1RyYWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlYWN0aXZhdGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pbnB1dC5vbkJ1dHRvbkRvd24uZGlzY29ubmVjdCh0aGlzLmhhbmRsZUJ1dHRvbkRvd24sIHRoaXMpO1xyXG4gICAgICAgIHRoaXMubWVudS5vbkFjdGl2YXRlZC5kaXNjb25uZWN0KHRoaXMuaGFuZGxlTWVudUFjdGlvbiwgdGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVCdXR0b25Eb3duKGV2ZW50OiBDb250cm9sbGVyRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5hbmltYXRpb25Jc0RvbmUoKSkge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQuaXNDb25maXJtKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnUuZXhlY3V0ZUFjdGlvbigpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmlzTWVudVVwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnUucHJldigpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmlzTWVudURvd24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVudS5uZXh0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQuaXNDb25maXJtKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbmlzaEFuaW1hdGlvbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0b3BNdXNpY1RyYWNrKCk6IHZvaWQge1xyXG4gICAgICAgIFRpdGxlU2NlbmUubXVzaWMuc3RvcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcGxheU11c2ljVHJhY2soKTogdm9pZCB7XHJcbiAgICAgICAgVGl0bGVTY2VuZS5tdXNpYy5zZXRMb29wKHRydWUpO1xyXG4gICAgICAgIFRpdGxlU2NlbmUubXVzaWMuc2V0Vm9sdW1lKDAuMzApO1xyXG4gICAgICAgIFRpdGxlU2NlbmUubXVzaWMucGxheSgpO1xyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7O0FBb0NBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZ1FBO0FBOVBBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFqVEE7QUFEQTtBQUNBO0FBQUE7QUFHQTtBQURBO0FBQ0E7QUFBQTtBQUdBO0FBREE7QUFDQTtBQUFBO0FBR0E7QUFEQTtBQUNBO0FBQUE7QUFHQTtBQURBO0FBQ0E7QUFBQTtBQUdBO0FBREE7QUFDQTtBQUFBO0FBR0E7QUFEQTtBQUNBO0FBQUE7QUFHQTtBQURBO0FBQ0E7QUFBQTtBQUdBO0FBREE7QUFDQTtBQUFBO0FBR0E7QUFEQTtBQUNBO0FBQUE7QUFHQTtBQURBO0FBQ0E7QUFBQTtBQWhDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/scenes/TitleScene.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/transitions/CurtainTransition.js":
|
|
/*!**********************************************!*\
|
|
!*** ./lib/transitions/CurtainTransition.js ***!
|
|
\**********************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CurtainTransition = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Transition_1 = __webpack_require__(/*! ../Transition */ \"./lib/Transition.js\");\nclass CurtainTransition extends Transition_1.Transition {\n constructor(_a) {\n var { direction = \"horizontal\" } = _a, options = tslib_1.__rest(_a, [\"direction\"]);\n super(options);\n this.direction = direction;\n }\n draw(ctx, draw, width, height) {\n const value = this.valueOf();\n if (this.direction === \"horizontal\") {\n // Draw left half\n ctx.save();\n ctx.translate(Math.round(-width * value / 2), 0);\n ctx.beginPath();\n ctx.rect(0, 0, Math.round(width / 2), height);\n ctx.clip();\n draw();\n ctx.restore();\n // Draw right half\n ctx.save();\n ctx.translate(Math.round(width * value / 2), 0);\n ctx.beginPath();\n ctx.rect(Math.round(width / 2), 0, Math.round(width), height);\n ctx.clip();\n draw();\n ctx.restore();\n }\n else if (this.direction === \"vertical\") {\n // Draw upper half\n ctx.save();\n ctx.translate(0, Math.round(-height * value / 2));\n ctx.beginPath();\n ctx.rect(0, 0, width, Math.round(height / 2));\n ctx.clip();\n draw();\n ctx.restore();\n // Draw lower half\n ctx.save();\n ctx.translate(0, Math.round(height * value / 2));\n ctx.beginPath();\n ctx.rect(0, Math.round(height / 2), width, Math.round(height / 2));\n ctx.clip();\n draw();\n ctx.restore();\n }\n }\n}\nexports.CurtainTransition = CurtainTransition;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvdHJhbnNpdGlvbnMvQ3VydGFpblRyYW5zaXRpb24uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvdHJhbnNpdGlvbnMvQ3VydGFpblRyYW5zaXRpb24udHM/NzUyYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc2l0aW9uLCBUcmFuc2l0aW9uT3B0aW9ucyB9IGZyb20gXCIuLi9UcmFuc2l0aW9uXCI7XHJcblxyXG5leHBvcnQgdHlwZSBDdXJ0YWluRGlyZWN0aW9uID0gXCJob3Jpem9udGFsXCIgfCBcInZlcnRpY2FsXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEN1cnRhaW5UcmFuc2l0aW9uT3B0aW9ucyBleHRlbmRzIFRyYW5zaXRpb25PcHRpb25zIHtcclxuICAgIGRpcmVjdGlvbj86IEN1cnRhaW5EaXJlY3Rpb247XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDdXJ0YWluVHJhbnNpdGlvbiBleHRlbmRzIFRyYW5zaXRpb24ge1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaXJlY3Rpb246IEN1cnRhaW5EaXJlY3Rpb247XHJcblxyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHsgZGlyZWN0aW9uID0gXCJob3Jpem9udGFsXCIsIC4uLm9wdGlvbnMgfTogQ3VydGFpblRyYW5zaXRpb25PcHRpb25zKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XHJcblxyXG4gICAgICAgIHRoaXMuZGlyZWN0aW9uID0gZGlyZWN0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkcmF3KGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCBkcmF3OiAoKSA9PiB2b2lkLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZU9mKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlyZWN0aW9uID09PSBcImhvcml6b250YWxcIikge1xyXG4gICAgICAgICAgICAvLyBEcmF3IGxlZnQgaGFsZlxyXG4gICAgICAgICAgICBjdHguc2F2ZSgpO1xyXG4gICAgICAgICAgICBjdHgudHJhbnNsYXRlKE1hdGgucm91bmQoLXdpZHRoICogdmFsdWUgLyAyKSwgMCk7XHJcbiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuICAgICAgICAgICAgY3R4LnJlY3QoMCwgMCwgTWF0aC5yb3VuZCh3aWR0aCAvIDIpLCBoZWlnaHQpO1xyXG4gICAgICAgICAgICBjdHguY2xpcCgpO1xyXG4gICAgICAgICAgICBkcmF3KCk7XHJcbiAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBEcmF3IHJpZ2h0IGhhbGZcclxuICAgICAgICAgICAgY3R4LnNhdmUoKTtcclxuICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZShNYXRoLnJvdW5kKHdpZHRoICogdmFsdWUgLyAyKSwgMCk7XHJcbiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuICAgICAgICAgICAgY3R4LnJlY3QoTWF0aC5yb3VuZCh3aWR0aCAvIDIpLCAwLCBNYXRoLnJvdW5kKHdpZHRoKSwgaGVpZ2h0KTtcclxuICAgICAgICAgICAgY3R4LmNsaXAoKTtcclxuICAgICAgICAgICAgZHJhdygpO1xyXG4gICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5kaXJlY3Rpb24gPT09IFwidmVydGljYWxcIikge1xyXG4gICAgICAgICAgICAvLyBEcmF3IHVwcGVyIGhhbGZcclxuICAgICAgICAgICAgY3R4LnNhdmUoKTtcclxuICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZSgwLCBNYXRoLnJvdW5kKC1oZWlnaHQgKiB2YWx1ZSAvIDIpKTtcclxuICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xyXG4gICAgICAgICAgICBjdHgucmVjdCgwLCAwLCB3aWR0aCwgTWF0aC5yb3VuZChoZWlnaHQgLyAyKSk7XHJcbiAgICAgICAgICAgIGN0eC5jbGlwKCk7XHJcbiAgICAgICAgICAgIGRyYXcoKTtcclxuICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIERyYXcgbG93ZXIgaGFsZlxyXG4gICAgICAgICAgICBjdHguc2F2ZSgpO1xyXG4gICAgICAgICAgICBjdHgudHJhbnNsYXRlKDAsIE1hdGgucm91bmQoaGVpZ2h0ICogdmFsdWUgLyAyKSk7XHJcbiAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuICAgICAgICAgICAgY3R4LnJlY3QoMCwgTWF0aC5yb3VuZChoZWlnaHQgLyAyKSwgd2lkdGgsIE1hdGgucm91bmQoaGVpZ2h0IC8gMikpO1xyXG4gICAgICAgICAgICBjdHguY2xpcCgpO1xyXG4gICAgICAgICAgICBkcmF3KCk7XHJcbiAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBUUE7QUFHQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFqREE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/transitions/CurtainTransition.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/transitions/FadeTransition.js":
|
|
/*!*******************************************!*\
|
|
!*** ./lib/transitions/FadeTransition.js ***!
|
|
\*******************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FadeTransition = void 0;\nconst Transition_1 = __webpack_require__(/*! ../Transition */ \"./lib/Transition.js\");\nclass FadeTransition extends Transition_1.Transition {\n draw(ctx, draw) {\n ctx.globalAlpha = 1 - this.valueOf();\n draw();\n }\n}\nexports.FadeTransition = FadeTransition;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvdHJhbnNpdGlvbnMvRmFkZVRyYW5zaXRpb24uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvdHJhbnNpdGlvbnMvRmFkZVRyYW5zaXRpb24udHM/ZGQ4NCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc2l0aW9uIH0gZnJvbSBcIi4uL1RyYW5zaXRpb25cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBGYWRlVHJhbnNpdGlvbiBleHRlbmRzIFRyYW5zaXRpb24ge1xyXG4gICAgcHVibGljIGRyYXcoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIGRyYXc6ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSAxIC0gdGhpcy52YWx1ZU9mKCk7XHJcbiAgICAgICAgZHJhdygpO1xyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/transitions/FadeTransition.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/transitions/SlideTransition.js":
|
|
/*!********************************************!*\
|
|
!*** ./lib/transitions/SlideTransition.js ***!
|
|
\********************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SlideTransition = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst Transition_1 = __webpack_require__(/*! ../Transition */ \"./lib/Transition.js\");\nclass SlideTransition extends Transition_1.Transition {\n constructor(_a = {}) {\n var { direction = \"top\" } = _a, options = tslib_1.__rest(_a, [\"direction\"]);\n super(options);\n this.direction = direction;\n }\n draw(ctx, draw, width, height) {\n const value = this.valueOf();\n if (this.direction === \"top\") {\n ctx.translate(0, -height * value);\n }\n else if (this.direction === \"bottom\") {\n ctx.translate(0, height * value);\n }\n else if (this.direction === \"left\") {\n ctx.translate(-width * value, 0);\n }\n else if (this.direction === \"right\") {\n ctx.translate(width * value, 0);\n }\n draw();\n }\n}\nexports.SlideTransition = SlideTransition;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvdHJhbnNpdGlvbnMvU2xpZGVUcmFuc2l0aW9uLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL3RyYW5zaXRpb25zL1NsaWRlVHJhbnNpdGlvbi50cz80NTJjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zaXRpb24sIFRyYW5zaXRpb25PcHRpb25zIH0gZnJvbSBcIi4uL1RyYW5zaXRpb25cIjtcclxuXHJcbmV4cG9ydCB0eXBlIFNsaWRlRGlyZWN0aW9uID0gXCJ0b3BcIiB8IFwibGVmdFwiIHwgXCJib3R0b21cIiB8IFwicmlnaHRcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2xpZGVUcmFuc2l0aW9uT3B0aW9ucyBleHRlbmRzIFRyYW5zaXRpb25PcHRpb25zIHtcclxuICAgIGRpcmVjdGlvbj86IFNsaWRlRGlyZWN0aW9uO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2xpZGVUcmFuc2l0aW9uIGV4dGVuZHMgVHJhbnNpdGlvbiB7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpcmVjdGlvbjogU2xpZGVEaXJlY3Rpb247XHJcblxyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHsgZGlyZWN0aW9uID0gXCJ0b3BcIiwgLi4ub3B0aW9ucyB9OiBTbGlkZVRyYW5zaXRpb25PcHRpb25zID0ge30pIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zKTtcclxuICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZHJhdyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgZHJhdzogKCkgPT4gdm9pZCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWVPZigpO1xyXG4gICAgICAgIGlmICh0aGlzLmRpcmVjdGlvbiA9PT0gXCJ0b3BcIikge1xyXG4gICAgICAgICAgICBjdHgudHJhbnNsYXRlKDAsIC1oZWlnaHQgKiB2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRpcmVjdGlvbiA9PT0gXCJib3R0b21cIikge1xyXG4gICAgICAgICAgICBjdHgudHJhbnNsYXRlKDAsIGhlaWdodCAqIHZhbHVlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGlyZWN0aW9uID09PSBcImxlZnRcIikge1xyXG4gICAgICAgICAgICBjdHgudHJhbnNsYXRlKC13aWR0aCAqIHZhbHVlLCAwKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGlyZWN0aW9uID09PSBcInJpZ2h0XCIpIHtcclxuICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZSh3aWR0aCAqIHZhbHVlLCAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRyYXcoKTtcclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQVFBO0FBR0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUF0QkE7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./lib/transitions/SlideTransition.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./lib/util.js":
|
|
/*!*********************!*\
|
|
!*** ./lib/util.js ***!
|
|
\*********************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.normalizeDegrees = exports.normalizeRadians = exports.degrees = exports.radians = exports.calculateVolume = exports.isDev = exports.isElectron = exports.boundsFromMapObject = exports.shuffle = exports.sleep = exports.shiftValue = exports.now = exports.orientPow = exports.clamp = exports.timedRnd = exports.rndItem = exports.rndInt = exports.rnd = void 0;\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.js\");\nconst constants_1 = __webpack_require__(/*! ./constants */ \"./lib/constants.js\");\nfunction rnd(minOrMax = 1, max) {\n if (max != null) {\n return minOrMax + Math.random() * (max - minOrMax);\n }\n else {\n return Math.random() * minOrMax;\n }\n}\nexports.rnd = rnd;\nfunction rndInt(minOrMax, max) {\n if (max != null) {\n return Math.floor(minOrMax + Math.random() * (max - minOrMax));\n }\n else {\n return Math.floor(Math.random() * minOrMax);\n }\n}\nexports.rndInt = rndInt;\nfunction rndItem(array) {\n const index = Math.floor(Math.random() * array.length);\n return array[index];\n}\nexports.rndItem = rndItem;\nfunction timedRnd(dt, averageDelay) {\n let count = 0;\n let chance = dt - Math.random() * averageDelay;\n while (chance > 0) {\n count++;\n chance -= Math.random() * averageDelay;\n }\n return count;\n}\nexports.timedRnd = timedRnd;\nfunction clamp(v, min, max) {\n return v < min ? min : v > max ? max : v;\n}\nexports.clamp = clamp;\nfunction orientPow(v, exp) {\n if (v < 0) {\n return -(Math.pow((-v), exp));\n }\n else {\n return Math.pow(v, exp);\n }\n}\nexports.orientPow = orientPow;\nconst timeDelta = Date.now() - performance.now();\nfunction now() {\n return performance.now() + timeDelta;\n}\nexports.now = now;\nfunction shiftValue(v, trg, inc) {\n if (v === trg) {\n return trg;\n }\n if (v < trg) {\n v += inc;\n if (v >= trg) {\n return trg;\n }\n }\n else {\n v -= inc;\n if (v <= trg) {\n return trg;\n }\n }\n return v;\n}\nexports.shiftValue = shiftValue;\nfunction sleep(ms = 0) {\n return tslib_1.__awaiter(this, void 0, void 0, function* () {\n yield new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n });\n}\nexports.sleep = sleep;\n/**\n * Inplace array shuffling.\n * @param array The array.\n * @return The same array. But shuffled.\n */\nfunction shuffle(array) {\n for (let i = 1; i < array.length; i++) {\n const j = Math.floor(Math.random() * (i + 1));\n if (i !== j) {\n const tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n }\n }\n return array;\n}\nexports.shuffle = shuffle;\nfunction boundsFromMapObject(o, margin = 0) {\n const width = o.width + (margin * 2);\n const height = o.height + (margin * 2);\n const x = o.x - margin;\n const y = o.y + margin;\n return { x, y, width, height };\n}\nexports.boundsFromMapObject = boundsFromMapObject;\nfunction isElectron() {\n return !!navigator.userAgent.match(/\\belectron\\b/i);\n}\nexports.isElectron = isElectron;\n/**\n * Figures out if development mode is enabled or not.\n */\nfunction isDev() {\n // Legacy behavior.\n if (window.location.port === \"8000\") {\n return true;\n }\n if (!!window.location.search) {\n return !!window.location.search.substr(1).split(\"&\").find(key => {\n if (key.toLowerCase().startsWith(\"dev\")) {\n return key.length === 3 || key.endsWith(\"=true\");\n }\n return false;\n });\n }\n return false;\n}\nexports.isDev = isDev;\n/**\n * Calculates the volume of a sound in regards to a distance and some additional properties.\n * @param distance - the distance of the audio source to the audio listener (px)\n * @param intensity - Defines how \"loud\" the sound is or in other terms, how far it can be heard. Defaults to 1.\n * @param maxVolume - Defines the maximum volume of the sound (when distance is 0).\n * The sound will never be louder than this. Defaults to 1.\n */\nfunction calculateVolume(distance, maxVolume = 1, intensity = 1) {\n return Math.max(0, maxVolume - ((distance * constants_1.METER_PER_PIXEL) / (constants_1.SOUND_INTENSITY_MULTIPLIER * intensity)));\n}\nexports.calculateVolume = calculateVolume;\n/** Factor to convert radians to degrees. */\nconst RAD_TO_DEG = 180 / Math.PI;\n/**\n * Converts degrees to radians.\n *\n * @param degrees - The value in degrees to convert to radians.\n * @return The given value converted to radians.\n */\nfunction radians(degrees) {\n return degrees / RAD_TO_DEG;\n}\nexports.radians = radians;\n/**\n * Converts radians to degrees.\n *\n * @param radians - The value in radians to convert to degrees.\n * @return The given value converted to degrees.\n */\nfunction degrees(radians) {\n return radians * RAD_TO_DEG;\n}\nexports.degrees = degrees;\n/**\n * Normalizes an angle in radians so it is between 0 (inclusive) and 2*PI (exclusive).\n *\n * @param degrees - The angle to normalize.\n * @return The normalized angle.\n */\nfunction normalizeRadians(angle) {\n const pi2 = Math.PI * 2;\n return ((angle % pi2) + pi2) % pi2;\n}\nexports.normalizeRadians = normalizeRadians;\n/**\n * Normalizes an angle in degrees so it is between 0 (inclusive) and 360 (exclusive).\n *\n * @param degrees - The angle to normalize.\n * @return The normalized angle.\n */\nfunction normalizeDegrees(degrees) {\n return ((degrees % 360) + 360) % 360;\n}\nexports.normalizeDegrees = normalizeDegrees;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWIvdXRpbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy91dGlsLnRzPzE4ZGYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQm91bmRzIH0gZnJvbSBcIi4vRW50aXR5XCI7XHJcbmltcG9ydCB7IEdhbWVPYmplY3RJbmZvIH0gZnJvbSBcIi4vTWFwSW5mb1wiO1xyXG5pbXBvcnQgeyBNYXBPYmplY3RKU09OIH0gZnJvbSBcIiovbGV2ZWwuanNvblwiO1xyXG5pbXBvcnQgeyBNRVRFUl9QRVJfUElYRUwsIFNPVU5EX0lOVEVOU0lUWV9NVUxUSVBMSUVSIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcm5kKG1pbk9yTWF4ID0gMSwgbWF4PzogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGlmIChtYXggIT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBtaW5Pck1heCArIE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluT3JNYXgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5yYW5kb20oKSAqIG1pbk9yTWF4O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcm5kSW50KG1pbk9yTWF4OiBudW1iZXIsIG1heD86IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBpZiAobWF4ICE9IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihtaW5Pck1heCArIE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluT3JNYXgpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG1pbk9yTWF4KTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJuZEl0ZW0oYXJyYXk6IGFueVtdIHwgc3RyaW5nKSB7XHJcbiAgICBjb25zdCBpbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGFycmF5Lmxlbmd0aCk7XHJcblxyXG4gICAgcmV0dXJuIGFycmF5W2luZGV4XTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVkUm5kKGR0OiBudW1iZXIsIGF2ZXJhZ2VEZWxheTogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBjb3VudCA9IDA7XHJcbiAgICBsZXQgY2hhbmNlID0gZHQgLSBNYXRoLnJhbmRvbSgpICogYXZlcmFnZURlbGF5O1xyXG5cclxuICAgIHdoaWxlIChjaGFuY2UgPiAwKSB7XHJcbiAgICAgICAgY291bnQrKztcclxuICAgICAgICBjaGFuY2UgLT0gTWF0aC5yYW5kb20oKSAqIGF2ZXJhZ2VEZWxheTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY291bnQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjbGFtcCh2OiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdiA8IG1pbiA/IG1pbiA6IHYgPiBtYXggPyBtYXggOiB2O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gb3JpZW50UG93KHY6IG51bWJlciwgZXhwOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgaWYgKHYgPCAwKSB7XHJcbiAgICAgICAgcmV0dXJuIC0oKC12KSAqKiBleHApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdiAqKiBleHA7XHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IHRpbWVEZWx0YSA9IERhdGUubm93KCkgLSBwZXJmb3JtYW5jZS5ub3coKTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBub3coKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKSArIHRpbWVEZWx0YTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNoaWZ0VmFsdWUodjogbnVtYmVyLCB0cmc6IG51bWJlciwgaW5jOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgaWYgKHYgPT09IHRyZykge1xyXG4gICAgICAgIHJldHVybiB0cmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHYgPCB0cmcpIHtcclxuICAgICAgICB2ICs9IGluYztcclxuICAgICAgICBpZiAodiA+PSB0cmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRyZztcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHYgLT0gaW5jO1xyXG4gICAgICAgIGlmICh2IDw9IHRyZykge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdjtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNsZWVwKG1zID0gMCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG4vKipcclxuICogSW5wbGFjZSBhcnJheSBzaHVmZmxpbmcuXHJcbiAqIEBwYXJhbSBhcnJheSBUaGUgYXJyYXkuXHJcbiAqIEByZXR1cm4gVGhlIHNhbWUgYXJyYXkuIEJ1dCBzaHVmZmxlZC5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzaHVmZmxlPFQ+KGFycmF5OiBUW10pOiBUW10ge1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGogPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoaSArIDEpKTtcclxuXHJcbiAgICAgICAgaWYgKGkgIT09IGopIHtcclxuICAgICAgICAgICAgY29uc3QgdG1wID0gYXJyYXlbaV07XHJcbiAgICAgICAgICAgIGFycmF5W2ldID0gYXJyYXlbal07XHJcbiAgICAgICAgICAgIGFycmF5W2pdID0gdG1wO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYXJyYXk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBib3VuZHNGcm9tTWFwT2JqZWN0KG86IE1hcE9iamVjdEpTT04gfCBHYW1lT2JqZWN0SW5mbywgbWFyZ2luID0gMCk6IEJvdW5kcyB7XHJcbiAgICBjb25zdCB3aWR0aCA9IG8ud2lkdGggKyAobWFyZ2luICogMik7XHJcbiAgICBjb25zdCBoZWlnaHQgPSBvLmhlaWdodCArIChtYXJnaW4gKiAyKTtcclxuICAgIGNvbnN0IHggPSBvLnggLSBtYXJnaW47XHJcbiAgICBjb25zdCB5ID0gby55ICsgbWFyZ2luO1xyXG5cclxuICAgIHJldHVybiB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRWxlY3Ryb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISFuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9cXGJlbGVjdHJvblxcYi9pKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEZpZ3VyZXMgb3V0IGlmIGRldmVsb3BtZW50IG1vZGUgaXMgZW5hYmxlZCBvciBub3QuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNEZXYoKTogYm9vbGVhbiB7XHJcbiAgICAvLyBMZWdhY3kgYmVoYXZpb3IuXHJcbiAgICBpZiAod2luZG93LmxvY2F0aW9uLnBvcnQgPT09IFwiODAwMFwiKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCEhd2luZG93LmxvY2F0aW9uLnNlYXJjaCkge1xyXG4gICAgICAgIHJldHVybiAhIXdpbmRvdy5sb2NhdGlvbi5zZWFyY2guc3Vic3RyKDEpLnNwbGl0KFwiJlwiKS5maW5kKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKFwiZGV2XCIpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5Lmxlbmd0aCA9PT0gMyB8fCBrZXkuZW5kc1dpdGgoXCI9dHJ1ZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgdm9sdW1lIG9mIGEgc291bmQgaW4gcmVnYXJkcyB0byBhIGRpc3RhbmNlIGFuZCBzb21lIGFkZGl0aW9uYWwgcHJvcGVydGllcy5cclxuICogQHBhcmFtIGRpc3RhbmNlICAtIHRoZSBkaXN0YW5jZSBvZiB0aGUgYXVkaW8gc291cmNlIHRvIHRoZSBhdWRpbyBsaXN0ZW5lciAocHgpXHJcbiAqIEBwYXJhbSBpbnRlbnNpdHkgLSBEZWZpbmVzIGhvdyBcImxvdWRcIiB0aGUgc291bmQgaXMgb3IgaW4gb3RoZXIgdGVybXMsIGhvdyBmYXIgaXQgY2FuIGJlIGhlYXJkLiBEZWZhdWx0cyB0byAxLlxyXG4gKiBAcGFyYW0gbWF4Vm9sdW1lIC0gRGVmaW5lcyB0aGUgbWF4aW11bSB2b2x1bWUgb2YgdGhlIHNvdW5kICh3aGVuIGRpc3RhbmNlIGlzIDApLlxyXG4gKiAgICAgICAgICAgICAgICAgICAgVGhlIHNvdW5kIHdpbGwgbmV2ZXIgYmUgbG91ZGVyIHRoYW4gdGhpcy4gRGVmYXVsdHMgdG8gMS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVWb2x1bWUoXHJcbiAgICBkaXN0YW5jZTogbnVtYmVyLCBtYXhWb2x1bWU6IG51bWJlciA9IDEsIGludGVuc2l0eTogbnVtYmVyID0gMVxyXG4pOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIE1hdGgubWF4KFxyXG4gICAgICAgIDAsXHJcbiAgICAgICAgbWF4Vm9sdW1lIC0gKChkaXN0YW5jZSAqIE1FVEVSX1BFUl9QSVhFTCkgLyAoU09VTkRfSU5URU5TSVRZX01VTFRJUExJRVIgKiBpbnRlbnNpdHkpKVxyXG4gICAgKTtcclxufVxyXG5cclxuLyoqIEZhY3RvciB0byBjb252ZXJ0IHJhZGlhbnMgdG8gZGVncmVlcy4gKi9cclxuY29uc3QgUkFEX1RPX0RFRyA9IDE4MCAvIE1hdGguUEk7XHJcblxyXG4vKipcclxuICogQ29udmVydHMgZGVncmVlcyB0byByYWRpYW5zLlxyXG4gKlxyXG4gKiBAcGFyYW0gZGVncmVlcyAtIFRoZSB2YWx1ZSBpbiBkZWdyZWVzIHRvIGNvbnZlcnQgdG8gcmFkaWFucy5cclxuICogQHJldHVybiBUaGUgZ2l2ZW4gdmFsdWUgY29udmVydGVkIHRvIHJhZGlhbnMuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcmFkaWFucyhkZWdyZWVzOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGRlZ3JlZXMgLyBSQURfVE9fREVHO1xyXG59XHJcblxyXG4vKipcclxuICogQ29udmVydHMgcmFkaWFucyB0byBkZWdyZWVzLlxyXG4gKlxyXG4gKiBAcGFyYW0gcmFkaWFucyAtIFRoZSB2YWx1ZSBpbiByYWRpYW5zIHRvIGNvbnZlcnQgdG8gZGVncmVlcy5cclxuICogQHJldHVybiBUaGUgZ2l2ZW4gdmFsdWUgY29udmVydGVkIHRvIGRlZ3JlZXMuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZGVncmVlcyhyYWRpYW5zOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHJhZGlhbnMgKiBSQURfVE9fREVHO1xyXG59XHJcblxyXG4vKipcclxuICogTm9ybWFsaXplcyBhbiBhbmdsZSBpbiByYWRpYW5zIHNvIGl0IGlzIGJldHdlZW4gMCAoaW5jbHVzaXZlKSBhbmQgMipQSSAoZXhjbHVzaXZlKS5cclxuICpcclxuICogQHBhcmFtIGRlZ3JlZXMgLSBUaGUgYW5nbGUgdG8gbm9ybWFsaXplLlxyXG4gKiBAcmV0dXJuIFRoZSBub3JtYWxpemVkIGFuZ2xlLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVJhZGlhbnMoYW5nbGU6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBjb25zdCBwaTIgPSBNYXRoLlBJICogMjtcclxuICAgIHJldHVybiAoKGFuZ2xlICUgcGkyKSArIHBpMikgJSBwaTI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBOb3JtYWxpemVzIGFuIGFuZ2xlIGluIGRlZ3JlZXMgc28gaXQgaXMgYmV0d2VlbiAwIChpbmNsdXNpdmUpIGFuZCAzNjAgKGV4Y2x1c2l2ZSkuXHJcbiAqXHJcbiAqIEBwYXJhbSBkZWdyZWVzIC0gVGhlIGFuZ2xlIHRvIG5vcm1hbGl6ZS5cclxuICogQHJldHVybiBUaGUgbm9ybWFsaXplZCBhbmdsZS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVEZWdyZWVzKGRlZ3JlZXM6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKChkZWdyZWVzICUgMzYwKSArIDM2MCkgJSAzNjA7XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBRUE7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBVkE7QUFZQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFOQTtBQVFBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFsQkE7QUFvQkE7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUpBO0FBTUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFaQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFGQTtBQUlBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBaEJBO0FBa0JBOzs7Ozs7QUFNQTtBQUNBO0FBR0E7QUFJQTtBQVBBO0FBU0E7QUFDQTtBQUVBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./lib/util.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/ansi-html/index.js":
|
|
/*!*****************************************!*\
|
|
!*** ./node_modules/ansi-html/index.js ***!
|
|
\*****************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\n\nmodule.exports = ansiHTML\n\n// Reference to https://github.com/sindresorhus/ansi-regex\nvar _regANSI = /(?:(?:\\u001b\\[)|\\u009b)(?:(?:[0-9]{1,3})?(?:(?:;[0-9]{0,3})*)?[A-M|f-m])|\\u001b[A-M]/\n\nvar _defColors = {\n reset: ['fff', '000'], // [FOREGROUD_COLOR, BACKGROUND_COLOR]\n black: '000',\n red: 'ff0000',\n green: '209805',\n yellow: 'e8bf03',\n blue: '0000ff',\n magenta: 'ff00ff',\n cyan: '00ffee',\n lightgrey: 'f0f0f0',\n darkgrey: '888'\n}\nvar _styles = {\n 30: 'black',\n 31: 'red',\n 32: 'green',\n 33: 'yellow',\n 34: 'blue',\n 35: 'magenta',\n 36: 'cyan',\n 37: 'lightgrey'\n}\nvar _openTags = {\n '1': 'font-weight:bold', // bold\n '2': 'opacity:0.5', // dim\n '3': '<i>', // italic\n '4': '<u>', // underscore\n '8': 'display:none', // hidden\n '9': '<del>' // delete\n}\nvar _closeTags = {\n '23': '</i>', // reset italic\n '24': '</u>', // reset underscore\n '29': '</del>' // reset delete\n}\n\n;[0, 21, 22, 27, 28, 39, 49].forEach(function (n) {\n _closeTags[n] = '</span>'\n})\n\n/**\n * Converts text with ANSI color codes to HTML markup.\n * @param {String} text\n * @returns {*}\n */\nfunction ansiHTML (text) {\n // Returns the text if the string has no ANSI escape code.\n if (!_regANSI.test(text)) {\n return text\n }\n\n // Cache opened sequence.\n var ansiCodes = []\n // Replace with markup.\n var ret = text.replace(/\\033\\[(\\d+)*m/g, function (match, seq) {\n var ot = _openTags[seq]\n if (ot) {\n // If current sequence has been opened, close it.\n if (!!~ansiCodes.indexOf(seq)) { // eslint-disable-line no-extra-boolean-cast\n ansiCodes.pop()\n return '</span>'\n }\n // Open tag.\n ansiCodes.push(seq)\n return ot[0] === '<' ? ot : '<span style=\"' + ot + ';\">'\n }\n\n var ct = _closeTags[seq]\n if (ct) {\n // Pop sequence\n ansiCodes.pop()\n return ct\n }\n return ''\n })\n\n // Make sure tags are closed.\n var l = ansiCodes.length\n ;(l > 0) && (ret += Array(l + 1).join('</span>'))\n\n return ret\n}\n\n/**\n * Customize colors.\n * @param {Object} colors reference to _defColors\n */\nansiHTML.setColors = function (colors) {\n if (typeof colors !== 'object') {\n throw new Error('`colors` parameter must be an Object.')\n }\n\n var _finalColors = {}\n for (var key in _defColors) {\n var hex = colors.hasOwnProperty(key) ? colors[key] : null\n if (!hex) {\n _finalColors[key] = _defColors[key]\n continue\n }\n if ('reset' === key) {\n if (typeof hex === 'string') {\n hex = [hex]\n }\n if (!Array.isArray(hex) || hex.length === 0 || hex.some(function (h) {\n return typeof h !== 'string'\n })) {\n throw new Error('The value of `' + key + '` property must be an Array and each item could only be a hex string, e.g.: FF0000')\n }\n var defHexColor = _defColors[key]\n if (!hex[0]) {\n hex[0] = defHexColor[0]\n }\n if (hex.length === 1 || !hex[1]) {\n hex = [hex[0]]\n hex.push(defHexColor[1])\n }\n\n hex = hex.slice(0, 2)\n } else if (typeof hex !== 'string') {\n throw new Error('The value of `' + key + '` property must be a hex string, e.g.: FF0000')\n }\n _finalColors[key] = hex\n }\n _setTags(_finalColors)\n}\n\n/**\n * Reset colors.\n */\nansiHTML.reset = function () {\n _setTags(_defColors)\n}\n\n/**\n * Expose tags, including open and close.\n * @type {Object}\n */\nansiHTML.tags = {}\n\nif (Object.defineProperty) {\n Object.defineProperty(ansiHTML.tags, 'open', {\n get: function () { return _openTags }\n })\n Object.defineProperty(ansiHTML.tags, 'close', {\n get: function () { return _closeTags }\n })\n} else {\n ansiHTML.tags.open = _openTags\n ansiHTML.tags.close = _closeTags\n}\n\nfunction _setTags (colors) {\n // reset all\n _openTags['0'] = 'font-weight:normal;opacity:1;color:#' + colors.reset[0] + ';background:#' + colors.reset[1]\n // inverse\n _openTags['7'] = 'color:#' + colors.reset[1] + ';background:#' + colors.reset[0]\n // dark grey\n _openTags['90'] = 'color:#' + colors.darkgrey\n\n for (var code in _styles) {\n var color = _styles[code]\n var oriColor = colors[color] || '000'\n _openTags[code] = 'color:#' + oriColor\n code = parseInt(code)\n _openTags[(code + 10).toString()] = 'background:#' + oriColor\n }\n}\n\nansiHTML.reset()\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYW5zaS1odG1sL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Fuc2ktaHRtbC9pbmRleC5qcz80ZTFjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGFuc2lIVE1MXG5cbi8vIFJlZmVyZW5jZSB0byBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2Fuc2ktcmVnZXhcbnZhciBfcmVnQU5TSSA9IC8oPzooPzpcXHUwMDFiXFxbKXxcXHUwMDliKSg/Oig/OlswLTldezEsM30pPyg/Oig/OjtbMC05XXswLDN9KSopP1tBLU18Zi1tXSl8XFx1MDAxYltBLU1dL1xuXG52YXIgX2RlZkNvbG9ycyA9IHtcbiAgcmVzZXQ6IFsnZmZmJywgJzAwMCddLCAvLyBbRk9SRUdST1VEX0NPTE9SLCBCQUNLR1JPVU5EX0NPTE9SXVxuICBibGFjazogJzAwMCcsXG4gIHJlZDogJ2ZmMDAwMCcsXG4gIGdyZWVuOiAnMjA5ODA1JyxcbiAgeWVsbG93OiAnZThiZjAzJyxcbiAgYmx1ZTogJzAwMDBmZicsXG4gIG1hZ2VudGE6ICdmZjAwZmYnLFxuICBjeWFuOiAnMDBmZmVlJyxcbiAgbGlnaHRncmV5OiAnZjBmMGYwJyxcbiAgZGFya2dyZXk6ICc4ODgnXG59XG52YXIgX3N0eWxlcyA9IHtcbiAgMzA6ICdibGFjaycsXG4gIDMxOiAncmVkJyxcbiAgMzI6ICdncmVlbicsXG4gIDMzOiAneWVsbG93JyxcbiAgMzQ6ICdibHVlJyxcbiAgMzU6ICdtYWdlbnRhJyxcbiAgMzY6ICdjeWFuJyxcbiAgMzc6ICdsaWdodGdyZXknXG59XG52YXIgX29wZW5UYWdzID0ge1xuICAnMSc6ICdmb250LXdlaWdodDpib2xkJywgLy8gYm9sZFxuICAnMic6ICdvcGFjaXR5OjAuNScsIC8vIGRpbVxuICAnMyc6ICc8aT4nLCAvLyBpdGFsaWNcbiAgJzQnOiAnPHU+JywgLy8gdW5kZXJzY29yZVxuICAnOCc6ICdkaXNwbGF5Om5vbmUnLCAvLyBoaWRkZW5cbiAgJzknOiAnPGRlbD4nIC8vIGRlbGV0ZVxufVxudmFyIF9jbG9zZVRhZ3MgPSB7XG4gICcyMyc6ICc8L2k+JywgLy8gcmVzZXQgaXRhbGljXG4gICcyNCc6ICc8L3U+JywgLy8gcmVzZXQgdW5kZXJzY29yZVxuICAnMjknOiAnPC9kZWw+JyAvLyByZXNldCBkZWxldGVcbn1cblxuO1swLCAyMSwgMjIsIDI3LCAyOCwgMzksIDQ5XS5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7XG4gIF9jbG9zZVRhZ3Nbbl0gPSAnPC9zcGFuPidcbn0pXG5cbi8qKlxuICogQ29udmVydHMgdGV4dCB3aXRoIEFOU0kgY29sb3IgY29kZXMgdG8gSFRNTCBtYXJrdXAuXG4gKiBAcGFyYW0ge1N0cmluZ30gdGV4dFxuICogQHJldHVybnMgeyp9XG4gKi9cbmZ1bmN0aW9uIGFuc2lIVE1MICh0ZXh0KSB7XG4gIC8vIFJldHVybnMgdGhlIHRleHQgaWYgdGhlIHN0cmluZyBoYXMgbm8gQU5TSSBlc2NhcGUgY29kZS5cbiAgaWYgKCFfcmVnQU5TSS50ZXN0KHRleHQpKSB7XG4gICAgcmV0dXJuIHRleHRcbiAgfVxuXG4gIC8vIENhY2hlIG9wZW5lZCBzZXF1ZW5jZS5cbiAgdmFyIGFuc2lDb2RlcyA9IFtdXG4gIC8vIFJlcGxhY2Ugd2l0aCBtYXJrdXAuXG4gIHZhciByZXQgPSB0ZXh0LnJlcGxhY2UoL1xcMDMzXFxbKFxcZCspKm0vZywgZnVuY3Rpb24gKG1hdGNoLCBzZXEpIHtcbiAgICB2YXIgb3QgPSBfb3BlblRhZ3Nbc2VxXVxuICAgIGlmIChvdCkge1xuICAgICAgLy8gSWYgY3VycmVudCBzZXF1ZW5jZSBoYXMgYmVlbiBvcGVuZWQsIGNsb3NlIGl0LlxuICAgICAgaWYgKCEhfmFuc2lDb2Rlcy5pbmRleE9mKHNlcSkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1leHRyYS1ib29sZWFuLWNhc3RcbiAgICAgICAgYW5zaUNvZGVzLnBvcCgpXG4gICAgICAgIHJldHVybiAnPC9zcGFuPidcbiAgICAgIH1cbiAgICAgIC8vIE9wZW4gdGFnLlxuICAgICAgYW5zaUNvZGVzLnB1c2goc2VxKVxuICAgICAgcmV0dXJuIG90WzBdID09PSAnPCcgPyBvdCA6ICc8c3BhbiBzdHlsZT1cIicgKyBvdCArICc7XCI+J1xuICAgIH1cblxuICAgIHZhciBjdCA9IF9jbG9zZVRhZ3Nbc2VxXVxuICAgIGlmIChjdCkge1xuICAgICAgLy8gUG9wIHNlcXVlbmNlXG4gICAgICBhbnNpQ29kZXMucG9wKClcbiAgICAgIHJldHVybiBjdFxuICAgIH1cbiAgICByZXR1cm4gJydcbiAgfSlcblxuICAvLyBNYWtlIHN1cmUgdGFncyBhcmUgY2xvc2VkLlxuICB2YXIgbCA9IGFuc2lDb2Rlcy5sZW5ndGhcbiAgOyhsID4gMCkgJiYgKHJldCArPSBBcnJheShsICsgMSkuam9pbignPC9zcGFuPicpKVxuXG4gIHJldHVybiByZXRcbn1cblxuLyoqXG4gKiBDdXN0b21pemUgY29sb3JzLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbG9ycyByZWZlcmVuY2UgdG8gX2RlZkNvbG9yc1xuICovXG5hbnNpSFRNTC5zZXRDb2xvcnMgPSBmdW5jdGlvbiAoY29sb3JzKSB7XG4gIGlmICh0eXBlb2YgY29sb3JzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBFcnJvcignYGNvbG9yc2AgcGFyYW1ldGVyIG11c3QgYmUgYW4gT2JqZWN0LicpXG4gIH1cblxuICB2YXIgX2ZpbmFsQ29sb3JzID0ge31cbiAgZm9yICh2YXIga2V5IGluIF9kZWZDb2xvcnMpIHtcbiAgICB2YXIgaGV4ID0gY29sb3JzLmhhc093blByb3BlcnR5KGtleSkgPyBjb2xvcnNba2V5XSA6IG51bGxcbiAgICBpZiAoIWhleCkge1xuICAgICAgX2ZpbmFsQ29sb3JzW2tleV0gPSBfZGVmQ29sb3JzW2tleV1cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmICgncmVzZXQnID09PSBrZXkpIHtcbiAgICAgIGlmICh0eXBlb2YgaGV4ID09PSAnc3RyaW5nJykge1xuICAgICAgICBoZXggPSBbaGV4XVxuICAgICAgfVxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGhleCkgfHwgaGV4Lmxlbmd0aCA9PT0gMCB8fCBoZXguc29tZShmdW5jdGlvbiAoaCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGggIT09ICdzdHJpbmcnXG4gICAgICB9KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB2YWx1ZSBvZiBgJyArIGtleSArICdgIHByb3BlcnR5IG11c3QgYmUgYW4gQXJyYXkgYW5kIGVhY2ggaXRlbSBjb3VsZCBvbmx5IGJlIGEgaGV4IHN0cmluZywgZS5nLjogRkYwMDAwJylcbiAgICAgIH1cbiAgICAgIHZhciBkZWZIZXhDb2xvciA9IF9kZWZDb2xvcnNba2V5XVxuICAgICAgaWYgKCFoZXhbMF0pIHtcbiAgICAgICAgaGV4WzBdID0gZGVmSGV4Q29sb3JbMF1cbiAgICAgIH1cbiAgICAgIGlmIChoZXgubGVuZ3RoID09PSAxIHx8ICFoZXhbMV0pIHtcbiAgICAgICAgaGV4ID0gW2hleFswXV1cbiAgICAgICAgaGV4LnB1c2goZGVmSGV4Q29sb3JbMV0pXG4gICAgICB9XG5cbiAgICAgIGhleCA9IGhleC5zbGljZSgwLCAyKVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGhleCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHZhbHVlIG9mIGAnICsga2V5ICsgJ2AgcHJvcGVydHkgbXVzdCBiZSBhIGhleCBzdHJpbmcsIGUuZy46IEZGMDAwMCcpXG4gICAgfVxuICAgIF9maW5hbENvbG9yc1trZXldID0gaGV4XG4gIH1cbiAgX3NldFRhZ3MoX2ZpbmFsQ29sb3JzKVxufVxuXG4vKipcbiAqIFJlc2V0IGNvbG9ycy5cbiAqL1xuYW5zaUhUTUwucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIF9zZXRUYWdzKF9kZWZDb2xvcnMpXG59XG5cbi8qKlxuICogRXhwb3NlIHRhZ3MsIGluY2x1ZGluZyBvcGVuIGFuZCBjbG9zZS5cbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cbmFuc2lIVE1MLnRhZ3MgPSB7fVxuXG5pZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhbnNpSFRNTC50YWdzLCAnb3BlbicsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF9vcGVuVGFncyB9XG4gIH0pXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhbnNpSFRNTC50YWdzLCAnY2xvc2UnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfY2xvc2VUYWdzIH1cbiAgfSlcbn0gZWxzZSB7XG4gIGFuc2lIVE1MLnRhZ3Mub3BlbiA9IF9vcGVuVGFnc1xuICBhbnNpSFRNTC50YWdzLmNsb3NlID0gX2Nsb3NlVGFnc1xufVxuXG5mdW5jdGlvbiBfc2V0VGFncyAoY29sb3JzKSB7XG4gIC8vIHJlc2V0IGFsbFxuICBfb3BlblRhZ3NbJzAnXSA9ICdmb250LXdlaWdodDpub3JtYWw7b3BhY2l0eToxO2NvbG9yOiMnICsgY29sb3JzLnJlc2V0WzBdICsgJztiYWNrZ3JvdW5kOiMnICsgY29sb3JzLnJlc2V0WzFdXG4gIC8vIGludmVyc2VcbiAgX29wZW5UYWdzWyc3J10gPSAnY29sb3I6IycgKyBjb2xvcnMucmVzZXRbMV0gKyAnO2JhY2tncm91bmQ6IycgKyBjb2xvcnMucmVzZXRbMF1cbiAgLy8gZGFyayBncmV5XG4gIF9vcGVuVGFnc1snOTAnXSA9ICdjb2xvcjojJyArIGNvbG9ycy5kYXJrZ3JleVxuXG4gIGZvciAodmFyIGNvZGUgaW4gX3N0eWxlcykge1xuICAgIHZhciBjb2xvciA9IF9zdHlsZXNbY29kZV1cbiAgICB2YXIgb3JpQ29sb3IgPSBjb2xvcnNbY29sb3JdIHx8ICcwMDAnXG4gICAgX29wZW5UYWdzW2NvZGVdID0gJ2NvbG9yOiMnICsgb3JpQ29sb3JcbiAgICBjb2RlID0gcGFyc2VJbnQoY29kZSlcbiAgICBfb3BlblRhZ3NbKGNvZGUgKyAxMCkudG9TdHJpbmcoKV0gPSAnYmFja2dyb3VuZDojJyArIG9yaUNvbG9yXG4gIH1cbn1cblxuYW5zaUhUTUwucmVzZXQoKVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/ansi-html/index.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/events/events.js":
|
|
/*!***************************************!*\
|
|
!*** ./node_modules/events/events.js ***!
|
|
\***************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function eventListener() {\n if (errorListener !== undefined) {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n var errorListener;\n\n // Adding an error listener is not optional because\n // if an error is thrown on an event emitter we cannot\n // guarantee that the actual event we are waiting will\n // be fired. The result could be a silent way to create\n // memory or file descriptor leaks, which is something\n // we should avoid.\n if (name !== 'error') {\n errorListener = function errorListener(err) {\n emitter.removeListener(name, eventListener);\n reject(err);\n };\n\n emitter.once('error', errorListener);\n }\n\n emitter.once(name, eventListener);\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzP2ZhYTEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFIgPSB0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgPyBSZWZsZWN0IDogbnVsbFxudmFyIFJlZmxlY3RBcHBseSA9IFIgJiYgdHlwZW9mIFIuYXBwbHkgPT09ICdmdW5jdGlvbidcbiAgPyBSLmFwcGx5XG4gIDogZnVuY3Rpb24gUmVmbGVjdEFwcGx5KHRhcmdldCwgcmVjZWl2ZXIsIGFyZ3MpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwodGFyZ2V0LCByZWNlaXZlciwgYXJncyk7XG4gIH1cblxudmFyIFJlZmxlY3RPd25LZXlzXG5pZiAoUiAmJiB0eXBlb2YgUi5vd25LZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gIFJlZmxlY3RPd25LZXlzID0gUi5vd25LZXlzXG59IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KVxuICAgICAgLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCkpO1xuICB9O1xufSBlbHNlIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gUHJvY2Vzc0VtaXRXYXJuaW5nKHdhcm5pbmcpIHtcbiAgaWYgKGNvbnNvbGUgJiYgY29uc29sZS53YXJuKSBjb25zb2xlLndhcm4od2FybmluZyk7XG59XG5cbnZhciBOdW1iZXJJc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiBOdW1iZXJJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIEV2ZW50RW1pdHRlci5pbml0LmNhbGwodGhpcyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbm1vZHVsZS5leHBvcnRzLm9uY2UgPSBvbmNlO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50c0NvdW50ID0gMDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxudmFyIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuZnVuY3Rpb24gY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcikge1xuICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBsaXN0ZW5lcik7XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50RW1pdHRlciwgJ2RlZmF1bHRNYXhMaXN0ZW5lcnMnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24oYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09ICdudW1iZXInIHx8IGFyZyA8IDAgfHwgTnVtYmVySXNOYU4oYXJnKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgYXJnICsgJy4nKTtcbiAgICB9XG4gICAgZGVmYXVsdE1heExpc3RlbmVycyA9IGFyZztcbiAgfVxufSk7XG5cbkV2ZW50RW1pdHRlci5pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgaWYgKHRoaXMuX2V2ZW50cyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLl9ldmVudHMgPT09IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSB7XG4gICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xufTtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0TWF4TGlzdGVuZXJzKG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCBuIDwgMCB8fCBOdW1iZXJJc05hTihuKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJuXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIG4gKyAnLicpO1xuICB9XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gX2dldE1heExpc3RlbmVycyh0aGF0KSB7XG4gIGlmICh0aGF0Ll9tYXhMaXN0ZW5lcnMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIHJldHVybiB0aGF0Ll9tYXhMaXN0ZW5lcnM7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gZ2V0TWF4TGlzdGVuZXJzKCkge1xuICByZXR1cm4gX2dldE1heExpc3RlbmVycyh0aGlzKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQodHlwZSkge1xuICB2YXIgYXJncyA9IFtdO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gIHZhciBkb0Vycm9yID0gKHR5cGUgPT09ICdlcnJvcicpO1xuXG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZClcbiAgICBkb0Vycm9yID0gKGRvRXJyb3IgJiYgZXZlbnRzLmVycm9yID09PSB1bmRlZmluZWQpO1xuICBlbHNlIGlmICghZG9FcnJvcilcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRocm93LlxuICBpZiAoZG9FcnJvcikge1xuICAgIHZhciBlcjtcbiAgICBpZiAoYXJncy5sZW5ndGggPiAwKVxuICAgICAgZXIgPSBhcmdzWzBdO1xuICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAvLyBOb3RlOiBUaGUgY29tbWVudHMgb24gdGhlIGB0aHJvd2AgbGluZXMgYXJlIGludGVudGlvbmFsLCB0aGV5IHNob3dcbiAgICAgIC8vIHVwIGluIE5vZGUncyBvdXRwdXQgaWYgdGhpcyByZXN1bHRzIGluIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uXG4gICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgICB9XG4gICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1VuaGFuZGxlZCBlcnJvci4nICsgKGVyID8gJyAoJyArIGVyLm1lc3NhZ2UgKyAnKScgOiAnJykpO1xuICAgIGVyci5jb250ZXh0ID0gZXI7XG4gICAgdGhyb3cgZXJyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICB9XG5cbiAgdmFyIGhhbmRsZXIgPSBldmVudHNbdHlwZV07XG5cbiAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgUmVmbGVjdEFwcGx5KGhhbmRsZXIsIHRoaXMsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW4gPSBoYW5kbGVyLmxlbmd0aDtcbiAgICB2YXIgbGlzdGVuZXJzID0gYXJyYXlDbG9uZShoYW5kbGVyLCBsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICBSZWZsZWN0QXBwbHkobGlzdGVuZXJzW2ldLCB0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gX2FkZExpc3RlbmVyKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIsIHByZXBlbmQpIHtcbiAgdmFyIG07XG4gIHZhciBldmVudHM7XG4gIHZhciBleGlzdGluZztcblxuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRhcmdldC5fZXZlbnRzQ291bnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gICAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICAgIGlmIChldmVudHMubmV3TGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFyZ2V0LmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSxcbiAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyID8gbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgICAgIC8vIFJlLWFzc2lnbiBgZXZlbnRzYCBiZWNhdXNlIGEgbmV3TGlzdGVuZXIgaGFuZGxlciBjb3VsZCBoYXZlIGNhdXNlZCB0aGVcbiAgICAgIC8vIHRoaXMuX2V2ZW50cyB0byBiZSBhc3NpZ25lZCB0byBhIG5ldyBvYmplY3RcbiAgICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICAgIH1cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXTtcbiAgfVxuXG4gIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICArK3RhcmdldC5fZXZlbnRzQ291bnQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBleGlzdGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9XG4gICAgICAgIHByZXBlbmQgPyBbbGlzdGVuZXIsIGV4aXN0aW5nXSA6IFtleGlzdGluZywgbGlzdGVuZXJdO1xuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIH0gZWxzZSBpZiAocHJlcGVuZCkge1xuICAgICAgZXhpc3RpbmcudW5zaGlmdChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0aW5nLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gICAgbSA9IF9nZXRNYXhMaXN0ZW5lcnModGFyZ2V0KTtcbiAgICBpZiAobSA+IDAgJiYgZXhpc3RpbmcubGVuZ3RoID4gbSAmJiAhZXhpc3Rpbmcud2FybmVkKSB7XG4gICAgICBleGlzdGluZy53YXJuZWQgPSB0cnVlO1xuICAgICAgLy8gTm8gZXJyb3IgY29kZSBmb3IgdGhpcyBzaW5jZSBpdCBpcyBhIFdhcm5pbmdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgdmFyIHcgPSBuZXcgRXJyb3IoJ1Bvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmxlbmd0aCArICcgJyArIFN0cmluZyh0eXBlKSArICcgbGlzdGVuZXJzICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jcmVhc2UgbGltaXQnKTtcbiAgICAgIHcubmFtZSA9ICdNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmcnO1xuICAgICAgdy5lbWl0dGVyID0gdGFyZ2V0O1xuICAgICAgdy50eXBlID0gdHlwZTtcbiAgICAgIHcuY291bnQgPSBleGlzdGluZy5sZW5ndGg7XG4gICAgICBQcm9jZXNzRW1pdFdhcm5pbmcodyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgICB9O1xuXG5mdW5jdGlvbiBvbmNlV3JhcHBlcigpIHtcbiAgaWYgKCF0aGlzLmZpcmVkKSB7XG4gICAgdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLCB0aGlzLndyYXBGbik7XG4gICAgdGhpcy5maXJlZCA9IHRydWU7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCwgYXJndW1lbnRzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfb25jZVdyYXAodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgc3RhdGUgPSB7IGZpcmVkOiBmYWxzZSwgd3JhcEZuOiB1bmRlZmluZWQsIHRhcmdldDogdGFyZ2V0LCB0eXBlOiB0eXBlLCBsaXN0ZW5lcjogbGlzdGVuZXIgfTtcbiAgdmFyIHdyYXBwZWQgPSBvbmNlV3JhcHBlci5iaW5kKHN0YXRlKTtcbiAgd3JhcHBlZC5saXN0ZW5lciA9IGxpc3RlbmVyO1xuICBzdGF0ZS53cmFwRm4gPSB3cmFwcGVkO1xuICByZXR1cm4gd3JhcHBlZDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZSh0eXBlLCBsaXN0ZW5lcikge1xuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgdGhpcy5vbih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRPbmNlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgdGhpcy5wcmVwZW5kTGlzdGVuZXIodHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4vLyBFbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWYgYW5kIG9ubHkgaWYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHZhciBsaXN0LCBldmVudHMsIHBvc2l0aW9uLCBpLCBvcmlnaW5hbExpc3RlbmVyO1xuXG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgbGlzdCA9IGV2ZW50c1t0eXBlXTtcbiAgICAgIGlmIChsaXN0ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHwgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3QubGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsaXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBvc2l0aW9uID0gLTE7XG5cbiAgICAgICAgZm9yIChpID0gbGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fCBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RbaV0ubGlzdGVuZXI7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gMClcbiAgICAgICAgICBsaXN0LnNoaWZ0KCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHNwbGljZU9uZShsaXN0LCBwb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpXG4gICAgICAgICAgZXZlbnRzW3R5cGVdID0gbGlzdFswXTtcblxuICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIG9yaWdpbmFsTGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID1cbiAgICBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnModHlwZSkge1xuICAgICAgdmFyIGxpc3RlbmVycywgZXZlbnRzLCBpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudHNbdHlwZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnRzKTtcbiAgICAgICAgdmFyIGtleTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlbmVycyA9IGV2ZW50c1t0eXBlXTtcblxuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBMSUZPIG9yZGVyXG4gICAgICAgIGZvciAoaSA9IGxpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5mdW5jdGlvbiBfbGlzdGVuZXJzKHRhcmdldCwgdHlwZSwgdW53cmFwKSB7XG4gIHZhciBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuICBpZiAoZXZsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIHVud3JhcCA/IFtldmxpc3RlbmVyLmxpc3RlbmVyIHx8IGV2bGlzdGVuZXJdIDogW2V2bGlzdGVuZXJdO1xuXG4gIHJldHVybiB1bndyYXAgP1xuICAgIHVud3JhcExpc3RlbmVycyhldmxpc3RlbmVyKSA6IGFycmF5Q2xvbmUoZXZsaXN0ZW5lciwgZXZsaXN0ZW5lci5sZW5ndGgpO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIHRydWUpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnMgPSBmdW5jdGlvbiByYXdMaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLmxpc3RlbmVyQ291bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZW1pdHRlci5saXN0ZW5lckNvdW50KHR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsaXN0ZW5lckNvdW50LmNhbGwoZW1pdHRlciwgdHlwZSk7XG4gIH1cbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGxpc3RlbmVyQ291bnQ7XG5mdW5jdGlvbiBsaXN0ZW5lckNvdW50KHR5cGUpIHtcbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcblxuICAgIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChldmxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBldmxpc3RlbmVyLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgcmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50ID4gMCA/IFJlZmxlY3RPd25LZXlzKHRoaXMuX2V2ZW50cykgOiBbXTtcbn07XG5cbmZ1bmN0aW9uIGFycmF5Q2xvbmUoYXJyLCBuKSB7XG4gIHZhciBjb3B5ID0gbmV3IEFycmF5KG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSlcbiAgICBjb3B5W2ldID0gYXJyW2ldO1xuICByZXR1cm4gY29weTtcbn1cblxuZnVuY3Rpb24gc3BsaWNlT25lKGxpc3QsIGluZGV4KSB7XG4gIGZvciAoOyBpbmRleCArIDEgPCBsaXN0Lmxlbmd0aDsgaW5kZXgrKylcbiAgICBsaXN0W2luZGV4XSA9IGxpc3RbaW5kZXggKyAxXTtcbiAgbGlzdC5wb3AoKTtcbn1cblxuZnVuY3Rpb24gdW53cmFwTGlzdGVuZXJzKGFycikge1xuICB2YXIgcmV0ID0gbmV3IEFycmF5KGFyci5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJldC5sZW5ndGg7ICsraSkge1xuICAgIHJldFtpXSA9IGFycltpXS5saXN0ZW5lciB8fCBhcnJbaV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gb25jZShlbWl0dGVyLCBuYW1lKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgZnVuY3Rpb24gZXZlbnRMaXN0ZW5lcigpIHtcbiAgICAgIGlmIChlcnJvckxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBlcnJvckxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuICAgIHZhciBlcnJvckxpc3RlbmVyO1xuXG4gICAgLy8gQWRkaW5nIGFuIGVycm9yIGxpc3RlbmVyIGlzIG5vdCBvcHRpb25hbCBiZWNhdXNlXG4gICAgLy8gaWYgYW4gZXJyb3IgaXMgdGhyb3duIG9uIGFuIGV2ZW50IGVtaXR0ZXIgd2UgY2Fubm90XG4gICAgLy8gZ3VhcmFudGVlIHRoYXQgdGhlIGFjdHVhbCBldmVudCB3ZSBhcmUgd2FpdGluZyB3aWxsXG4gICAgLy8gYmUgZmlyZWQuIFRoZSByZXN1bHQgY291bGQgYmUgYSBzaWxlbnQgd2F5IHRvIGNyZWF0ZVxuICAgIC8vIG1lbW9yeSBvciBmaWxlIGRlc2NyaXB0b3IgbGVha3MsIHdoaWNoIGlzIHNvbWV0aGluZ1xuICAgIC8vIHdlIHNob3VsZCBhdm9pZC5cbiAgICBpZiAobmFtZSAhPT0gJ2Vycm9yJykge1xuICAgICAgZXJyb3JMaXN0ZW5lciA9IGZ1bmN0aW9uIGVycm9yTGlzdGVuZXIoZXJyKSB7XG4gICAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIobmFtZSwgZXZlbnRMaXN0ZW5lcik7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfTtcblxuICAgICAgZW1pdHRlci5vbmNlKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpO1xuICAgIH1cblxuICAgIGVtaXR0ZXIub25jZShuYW1lLCBldmVudExpc3RlbmVyKTtcbiAgfSk7XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/events/events.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/html-entities/lib/html4-entities.js":
|
|
/*!**********************************************************!*\
|
|
!*** ./node_modules/html-entities/lib/html4-entities.js ***!
|
|
\**********************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar HTML_ALPHA = ['apos', 'nbsp', 'iexcl', 'cent', 'pound', 'curren', 'yen', 'brvbar', 'sect', 'uml', 'copy', 'ordf', 'laquo', 'not', 'shy', 'reg', 'macr', 'deg', 'plusmn', 'sup2', 'sup3', 'acute', 'micro', 'para', 'middot', 'cedil', 'sup1', 'ordm', 'raquo', 'frac14', 'frac12', 'frac34', 'iquest', 'Agrave', 'Aacute', 'Acirc', 'Atilde', 'Auml', 'Aring', 'Aelig', 'Ccedil', 'Egrave', 'Eacute', 'Ecirc', 'Euml', 'Igrave', 'Iacute', 'Icirc', 'Iuml', 'ETH', 'Ntilde', 'Ograve', 'Oacute', 'Ocirc', 'Otilde', 'Ouml', 'times', 'Oslash', 'Ugrave', 'Uacute', 'Ucirc', 'Uuml', 'Yacute', 'THORN', 'szlig', 'agrave', 'aacute', 'acirc', 'atilde', 'auml', 'aring', 'aelig', 'ccedil', 'egrave', 'eacute', 'ecirc', 'euml', 'igrave', 'iacute', 'icirc', 'iuml', 'eth', 'ntilde', 'ograve', 'oacute', 'ocirc', 'otilde', 'ouml', 'divide', 'oslash', 'ugrave', 'uacute', 'ucirc', 'uuml', 'yacute', 'thorn', 'yuml', 'quot', 'amp', 'lt', 'gt', 'OElig', 'oelig', 'Scaron', 'scaron', 'Yuml', 'circ', 'tilde', 'ensp', 'emsp', 'thinsp', 'zwnj', 'zwj', 'lrm', 'rlm', 'ndash', 'mdash', 'lsquo', 'rsquo', 'sbquo', 'ldquo', 'rdquo', 'bdquo', 'dagger', 'Dagger', 'permil', 'lsaquo', 'rsaquo', 'euro', 'fnof', 'Alpha', 'Beta', 'Gamma', 'Delta', 'Epsilon', 'Zeta', 'Eta', 'Theta', 'Iota', 'Kappa', 'Lambda', 'Mu', 'Nu', 'Xi', 'Omicron', 'Pi', 'Rho', 'Sigma', 'Tau', 'Upsilon', 'Phi', 'Chi', 'Psi', 'Omega', 'alpha', 'beta', 'gamma', 'delta', 'epsilon', 'zeta', 'eta', 'theta', 'iota', 'kappa', 'lambda', 'mu', 'nu', 'xi', 'omicron', 'pi', 'rho', 'sigmaf', 'sigma', 'tau', 'upsilon', 'phi', 'chi', 'psi', 'omega', 'thetasym', 'upsih', 'piv', 'bull', 'hellip', 'prime', 'Prime', 'oline', 'frasl', 'weierp', 'image', 'real', 'trade', 'alefsym', 'larr', 'uarr', 'rarr', 'darr', 'harr', 'crarr', 'lArr', 'uArr', 'rArr', 'dArr', 'hArr', 'forall', 'part', 'exist', 'empty', 'nabla', 'isin', 'notin', 'ni', 'prod', 'sum', 'minus', 'lowast', 'radic', 'prop', 'infin', 'ang', 'and', 'or', 'cap', 'cup', 'int', 'there4', 'sim', 'cong', 'asymp', 'ne', 'equiv', 'le', 'ge', 'sub', 'sup', 'nsub', 'sube', 'supe', 'oplus', 'otimes', 'perp', 'sdot', 'lceil', 'rceil', 'lfloor', 'rfloor', 'lang', 'rang', 'loz', 'spades', 'clubs', 'hearts', 'diams'];\nvar HTML_CODES = [39, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 34, 38, 60, 62, 338, 339, 352, 353, 376, 710, 732, 8194, 8195, 8201, 8204, 8205, 8206, 8207, 8211, 8212, 8216, 8217, 8218, 8220, 8221, 8222, 8224, 8225, 8240, 8249, 8250, 8364, 402, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 977, 978, 982, 8226, 8230, 8242, 8243, 8254, 8260, 8472, 8465, 8476, 8482, 8501, 8592, 8593, 8594, 8595, 8596, 8629, 8656, 8657, 8658, 8659, 8660, 8704, 8706, 8707, 8709, 8711, 8712, 8713, 8715, 8719, 8721, 8722, 8727, 8730, 8733, 8734, 8736, 8743, 8744, 8745, 8746, 8747, 8756, 8764, 8773, 8776, 8800, 8801, 8804, 8805, 8834, 8835, 8836, 8838, 8839, 8853, 8855, 8869, 8901, 8968, 8969, 8970, 8971, 9001, 9002, 9674, 9824, 9827, 9829, 9830];\nvar alphaIndex = {};\nvar numIndex = {};\n(function () {\n var i = 0;\n var length = HTML_ALPHA.length;\n while (i < length) {\n var a = HTML_ALPHA[i];\n var c = HTML_CODES[i];\n alphaIndex[a] = String.fromCharCode(c);\n numIndex[c] = a;\n i++;\n }\n})();\nvar Html4Entities = /** @class */ (function () {\n function Html4Entities() {\n }\n Html4Entities.prototype.decode = function (str) {\n if (!str || !str.length) {\n return '';\n }\n return str.replace(/&(#?[\\w\\d]+);?/g, function (s, entity) {\n var chr;\n if (entity.charAt(0) === \"#\") {\n var code = entity.charAt(1).toLowerCase() === 'x' ?\n parseInt(entity.substr(2), 16) :\n parseInt(entity.substr(1));\n if (!(isNaN(code) || code < -32768 || code > 65535)) {\n chr = String.fromCharCode(code);\n }\n }\n else {\n chr = alphaIndex[entity];\n }\n return chr || s;\n });\n };\n Html4Entities.decode = function (str) {\n return new Html4Entities().decode(str);\n };\n Html4Entities.prototype.encode = function (str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var alpha = numIndex[str.charCodeAt(i)];\n result += alpha ? \"&\" + alpha + \";\" : str.charAt(i);\n i++;\n }\n return result;\n };\n Html4Entities.encode = function (str) {\n return new Html4Entities().encode(str);\n };\n Html4Entities.prototype.encodeNonUTF = function (str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var cc = str.charCodeAt(i);\n var alpha = numIndex[cc];\n if (alpha) {\n result += \"&\" + alpha + \";\";\n }\n else if (cc < 32 || cc > 126) {\n result += \"&#\" + cc + \";\";\n }\n else {\n result += str.charAt(i);\n }\n i++;\n }\n return result;\n };\n Html4Entities.encodeNonUTF = function (str) {\n return new Html4Entities().encodeNonUTF(str);\n };\n Html4Entities.prototype.encodeNonASCII = function (str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var c = str.charCodeAt(i);\n if (c <= 255) {\n result += str[i++];\n continue;\n }\n result += '&#' + c + ';';\n i++;\n }\n return result;\n };\n Html4Entities.encodeNonASCII = function (str) {\n return new Html4Entities().encodeNonASCII(str);\n };\n return Html4Entities;\n}());\nexports.Html4Entities = Html4Entities;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvaHRtbC1lbnRpdGllcy9saWIvaHRtbDQtZW50aXRpZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaHRtbC1lbnRpdGllcy9saWIvaHRtbDQtZW50aXRpZXMuanM/MWYwNSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBIVE1MX0FMUEhBID0gWydhcG9zJywgJ25ic3AnLCAnaWV4Y2wnLCAnY2VudCcsICdwb3VuZCcsICdjdXJyZW4nLCAneWVuJywgJ2JydmJhcicsICdzZWN0JywgJ3VtbCcsICdjb3B5JywgJ29yZGYnLCAnbGFxdW8nLCAnbm90JywgJ3NoeScsICdyZWcnLCAnbWFjcicsICdkZWcnLCAncGx1c21uJywgJ3N1cDInLCAnc3VwMycsICdhY3V0ZScsICdtaWNybycsICdwYXJhJywgJ21pZGRvdCcsICdjZWRpbCcsICdzdXAxJywgJ29yZG0nLCAncmFxdW8nLCAnZnJhYzE0JywgJ2ZyYWMxMicsICdmcmFjMzQnLCAnaXF1ZXN0JywgJ0FncmF2ZScsICdBYWN1dGUnLCAnQWNpcmMnLCAnQXRpbGRlJywgJ0F1bWwnLCAnQXJpbmcnLCAnQWVsaWcnLCAnQ2NlZGlsJywgJ0VncmF2ZScsICdFYWN1dGUnLCAnRWNpcmMnLCAnRXVtbCcsICdJZ3JhdmUnLCAnSWFjdXRlJywgJ0ljaXJjJywgJ0l1bWwnLCAnRVRIJywgJ050aWxkZScsICdPZ3JhdmUnLCAnT2FjdXRlJywgJ09jaXJjJywgJ090aWxkZScsICdPdW1sJywgJ3RpbWVzJywgJ09zbGFzaCcsICdVZ3JhdmUnLCAnVWFjdXRlJywgJ1VjaXJjJywgJ1V1bWwnLCAnWWFjdXRlJywgJ1RIT1JOJywgJ3N6bGlnJywgJ2FncmF2ZScsICdhYWN1dGUnLCAnYWNpcmMnLCAnYXRpbGRlJywgJ2F1bWwnLCAnYXJpbmcnLCAnYWVsaWcnLCAnY2NlZGlsJywgJ2VncmF2ZScsICdlYWN1dGUnLCAnZWNpcmMnLCAnZXVtbCcsICdpZ3JhdmUnLCAnaWFjdXRlJywgJ2ljaXJjJywgJ2l1bWwnLCAnZXRoJywgJ250aWxkZScsICdvZ3JhdmUnLCAnb2FjdXRlJywgJ29jaXJjJywgJ290aWxkZScsICdvdW1sJywgJ2RpdmlkZScsICdvc2xhc2gnLCAndWdyYXZlJywgJ3VhY3V0ZScsICd1Y2lyYycsICd1dW1sJywgJ3lhY3V0ZScsICd0aG9ybicsICd5dW1sJywgJ3F1b3QnLCAnYW1wJywgJ2x0JywgJ2d0JywgJ09FbGlnJywgJ29lbGlnJywgJ1NjYXJvbicsICdzY2Fyb24nLCAnWXVtbCcsICdjaXJjJywgJ3RpbGRlJywgJ2Vuc3AnLCAnZW1zcCcsICd0aGluc3AnLCAnenduaicsICd6d2onLCAnbHJtJywgJ3JsbScsICduZGFzaCcsICdtZGFzaCcsICdsc3F1bycsICdyc3F1bycsICdzYnF1bycsICdsZHF1bycsICdyZHF1bycsICdiZHF1bycsICdkYWdnZXInLCAnRGFnZ2VyJywgJ3Blcm1pbCcsICdsc2FxdW8nLCAncnNhcXVvJywgJ2V1cm8nLCAnZm5vZicsICdBbHBoYScsICdCZXRhJywgJ0dhbW1hJywgJ0RlbHRhJywgJ0Vwc2lsb24nLCAnWmV0YScsICdFdGEnLCAnVGhldGEnLCAnSW90YScsICdLYXBwYScsICdMYW1iZGEnLCAnTXUnLCAnTnUnLCAnWGknLCAnT21pY3JvbicsICdQaScsICdSaG8nLCAnU2lnbWEnLCAnVGF1JywgJ1Vwc2lsb24nLCAnUGhpJywgJ0NoaScsICdQc2knLCAnT21lZ2EnLCAnYWxwaGEnLCAnYmV0YScsICdnYW1tYScsICdkZWx0YScsICdlcHNpbG9uJywgJ3pldGEnLCAnZXRhJywgJ3RoZXRhJywgJ2lvdGEnLCAna2FwcGEnLCAnbGFtYmRhJywgJ211JywgJ251JywgJ3hpJywgJ29taWNyb24nLCAncGknLCAncmhvJywgJ3NpZ21hZicsICdzaWdtYScsICd0YXUnLCAndXBzaWxvbicsICdwaGknLCAnY2hpJywgJ3BzaScsICdvbWVnYScsICd0aGV0YXN5bScsICd1cHNpaCcsICdwaXYnLCAnYnVsbCcsICdoZWxsaXAnLCAncHJpbWUnLCAnUHJpbWUnLCAnb2xpbmUnLCAnZnJhc2wnLCAnd2VpZXJwJywgJ2ltYWdlJywgJ3JlYWwnLCAndHJhZGUnLCAnYWxlZnN5bScsICdsYXJyJywgJ3VhcnInLCAncmFycicsICdkYXJyJywgJ2hhcnInLCAnY3JhcnInLCAnbEFycicsICd1QXJyJywgJ3JBcnInLCAnZEFycicsICdoQXJyJywgJ2ZvcmFsbCcsICdwYXJ0JywgJ2V4aXN0JywgJ2VtcHR5JywgJ25hYmxhJywgJ2lzaW4nLCAnbm90aW4nLCAnbmknLCAncHJvZCcsICdzdW0nLCAnbWludXMnLCAnbG93YXN0JywgJ3JhZGljJywgJ3Byb3AnLCAnaW5maW4nLCAnYW5nJywgJ2FuZCcsICdvcicsICdjYXAnLCAnY3VwJywgJ2ludCcsICd0aGVyZTQnLCAnc2ltJywgJ2NvbmcnLCAnYXN5bXAnLCAnbmUnLCAnZXF1aXYnLCAnbGUnLCAnZ2UnLCAnc3ViJywgJ3N1cCcsICduc3ViJywgJ3N1YmUnLCAnc3VwZScsICdvcGx1cycsICdvdGltZXMnLCAncGVycCcsICdzZG90JywgJ2xjZWlsJywgJ3JjZWlsJywgJ2xmbG9vcicsICdyZmxvb3InLCAnbGFuZycsICdyYW5nJywgJ2xveicsICdzcGFkZXMnLCAnY2x1YnMnLCAnaGVhcnRzJywgJ2RpYW1zJ107XG52YXIgSFRNTF9DT0RFUyA9IFszOSwgMTYwLCAxNjEsIDE2MiwgMTYzLCAxNjQsIDE2NSwgMTY2LCAxNjcsIDE2OCwgMTY5LCAxNzAsIDE3MSwgMTcyLCAxNzMsIDE3NCwgMTc1LCAxNzYsIDE3NywgMTc4LCAxNzksIDE4MCwgMTgxLCAxODIsIDE4MywgMTg0LCAxODUsIDE4NiwgMTg3LCAxODgsIDE4OSwgMTkwLCAxOTEsIDE5MiwgMTkzLCAxOTQsIDE5NSwgMTk2LCAxOTcsIDE5OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIwNywgMjA4LCAyMDksIDIxMCwgMjExLCAyMTIsIDIxMywgMjE0LCAyMTUsIDIxNiwgMjE3LCAyMTgsIDIxOSwgMjIwLCAyMjEsIDIyMiwgMjIzLCAyMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIzMSwgMjMyLCAyMzMsIDIzNCwgMjM1LCAyMzYsIDIzNywgMjM4LCAyMzksIDI0MCwgMjQxLCAyNDIsIDI0MywgMjQ0LCAyNDUsIDI0NiwgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDI1MiwgMjUzLCAyNTQsIDI1NSwgMzQsIDM4LCA2MCwgNjIsIDMzOCwgMzM5LCAzNTIsIDM1MywgMzc2LCA3MTAsIDczMiwgODE5NCwgODE5NSwgODIwMSwgODIwNCwgODIwNSwgODIwNiwgODIwNywgODIxMSwgODIxMiwgODIxNiwgODIxNywgODIxOCwgODIyMCwgODIyMSwgODIyMiwgODIyNCwgODIyNSwgODI0MCwgODI0OSwgODI1MCwgODM2NCwgNDAyLCA5MTMsIDkxNCwgOTE1LCA5MTYsIDkxNywgOTE4LCA5MTksIDkyMCwgOTIxLCA5MjIsIDkyMywgOTI0LCA5MjUsIDkyNiwgOTI3LCA5MjgsIDkyOSwgOTMxLCA5MzIsIDkzMywgOTM0LCA5MzUsIDkzNiwgOTM3LCA5NDUsIDk0NiwgOTQ3LCA5NDgsIDk0OSwgOTUwLCA5NTEsIDk1MiwgOTUzLCA5NTQsIDk1NSwgOTU2LCA5NTcsIDk1OCwgOTU5LCA5NjAsIDk2MSwgOTYyLCA5NjMsIDk2NCwgOTY1LCA5NjYsIDk2NywgOTY4LCA5NjksIDk3NywgOTc4LCA5ODIsIDgyMjYsIDgyMzAsIDgyNDIsIDgyNDMsIDgyNTQsIDgyNjAsIDg0NzIsIDg0NjUsIDg0NzYsIDg0ODIsIDg1MDEsIDg1OTIsIDg1OTMsIDg1OTQsIDg1OTUsIDg1OTYsIDg2MjksIDg2NTYsIDg2NTcsIDg2NTgsIDg2NTksIDg2NjAsIDg3MDQsIDg3MDYsIDg3MDcsIDg3MDksIDg3MTEsIDg3MTIsIDg3MTMsIDg3MTUsIDg3MTksIDg3MjEsIDg3MjIsIDg3MjcsIDg3MzAsIDg3MzMsIDg3MzQsIDg3MzYsIDg3NDMsIDg3NDQsIDg3NDUsIDg3NDYsIDg3NDcsIDg3NTYsIDg3NjQsIDg3NzMsIDg3NzYsIDg4MDAsIDg4MDEsIDg4MDQsIDg4MDUsIDg4MzQsIDg4MzUsIDg4MzYsIDg4MzgsIDg4MzksIDg4NTMsIDg4NTUsIDg4NjksIDg5MDEsIDg5NjgsIDg5NjksIDg5NzAsIDg5NzEsIDkwMDEsIDkwMDIsIDk2NzQsIDk4MjQsIDk4MjcsIDk4MjksIDk4MzBdO1xudmFyIGFscGhhSW5kZXggPSB7fTtcbnZhciBudW1JbmRleCA9IHt9O1xuKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IEhUTUxfQUxQSEEubGVuZ3RoO1xuICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBhID0gSFRNTF9BTFBIQVtpXTtcbiAgICAgICAgdmFyIGMgPSBIVE1MX0NPREVTW2ldO1xuICAgICAgICBhbHBoYUluZGV4W2FdID0gU3RyaW5nLmZyb21DaGFyQ29kZShjKTtcbiAgICAgICAgbnVtSW5kZXhbY10gPSBhO1xuICAgICAgICBpKys7XG4gICAgfVxufSkoKTtcbnZhciBIdG1sNEVudGl0aWVzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEh0bWw0RW50aXRpZXMoKSB7XG4gICAgfVxuICAgIEh0bWw0RW50aXRpZXMucHJvdG90eXBlLmRlY29kZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgaWYgKCFzdHIgfHwgIXN0ci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyYoIz9bXFx3XFxkXSspOz8vZywgZnVuY3Rpb24gKHMsIGVudGl0eSkge1xuICAgICAgICAgICAgdmFyIGNocjtcbiAgICAgICAgICAgIGlmIChlbnRpdHkuY2hhckF0KDApID09PSBcIiNcIikge1xuICAgICAgICAgICAgICAgIHZhciBjb2RlID0gZW50aXR5LmNoYXJBdCgxKS50b0xvd2VyQ2FzZSgpID09PSAneCcgP1xuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChlbnRpdHkuc3Vic3RyKDIpLCAxNikgOlxuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChlbnRpdHkuc3Vic3RyKDEpKTtcbiAgICAgICAgICAgICAgICBpZiAoIShpc05hTihjb2RlKSB8fCBjb2RlIDwgLTMyNzY4IHx8IGNvZGUgPiA2NTUzNSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjaHIgPSBhbHBoYUluZGV4W2VudGl0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2hyIHx8IHM7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgSHRtbDRFbnRpdGllcy5kZWNvZGUgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHJldHVybiBuZXcgSHRtbDRFbnRpdGllcygpLmRlY29kZShzdHIpO1xuICAgIH07XG4gICAgSHRtbDRFbnRpdGllcy5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICBpZiAoIXN0ciB8fCAhc3RyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzdHJMZW5ndGggPSBzdHIubGVuZ3RoO1xuICAgICAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgd2hpbGUgKGkgPCBzdHJMZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciBhbHBoYSA9IG51bUluZGV4W3N0ci5jaGFyQ29kZUF0KGkpXTtcbiAgICAgICAgICAgIHJlc3VsdCArPSBhbHBoYSA/IFwiJlwiICsgYWxwaGEgKyBcIjtcIiA6IHN0ci5jaGFyQXQoaSk7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIEh0bWw0RW50aXRpZXMuZW5jb2RlID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gbmV3IEh0bWw0RW50aXRpZXMoKS5lbmNvZGUoc3RyKTtcbiAgICB9O1xuICAgIEh0bWw0RW50aXRpZXMucHJvdG90eXBlLmVuY29kZU5vblVURiA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgaWYgKCFzdHIgfHwgIXN0ci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgc3RyTGVuZ3RoID0gc3RyLmxlbmd0aDtcbiAgICAgICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHdoaWxlIChpIDwgc3RyTGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgY2MgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICAgIHZhciBhbHBoYSA9IG51bUluZGV4W2NjXTtcbiAgICAgICAgICAgIGlmIChhbHBoYSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBcIiZcIiArIGFscGhhICsgXCI7XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjYyA8IDMyIHx8IGNjID4gMTI2KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IFwiJiNcIiArIGNjICsgXCI7XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyLmNoYXJBdChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgSHRtbDRFbnRpdGllcy5lbmNvZGVOb25VVEYgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHJldHVybiBuZXcgSHRtbDRFbnRpdGllcygpLmVuY29kZU5vblVURihzdHIpO1xuICAgIH07XG4gICAgSHRtbDRFbnRpdGllcy5wcm90b3R5cGUuZW5jb2RlTm9uQVNDSUkgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIGlmICghc3RyIHx8ICFzdHIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHN0ckxlbmd0aCA9IHN0ci5sZW5ndGg7XG4gICAgICAgIHZhciByZXN1bHQgPSAnJztcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICB3aGlsZSAoaSA8IHN0ckxlbmd0aCkge1xuICAgICAgICAgICAgdmFyIGMgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICAgIGlmIChjIDw9IDI1NSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdHJbaSsrXTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCArPSAnJiMnICsgYyArICc7JztcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgSHRtbDRFbnRpdGllcy5lbmNvZGVOb25BU0NJSSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBIdG1sNEVudGl0aWVzKCkuZW5jb2RlTm9uQVNDSUkoc3RyKTtcbiAgICB9O1xuICAgIHJldHVybiBIdG1sNEVudGl0aWVzO1xufSgpKTtcbmV4cG9ydHMuSHRtbDRFbnRpdGllcyA9IEh0bWw0RW50aXRpZXM7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/html-entities/lib/html4-entities.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/html-entities/lib/html5-entities.js":
|
|
/*!**********************************************************!*\
|
|
!*** ./node_modules/html-entities/lib/html5-entities.js ***!
|
|
\**********************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ENTITIES = [['Aacute', [193]], ['aacute', [225]], ['Abreve', [258]], ['abreve', [259]], ['ac', [8766]], ['acd', [8767]], ['acE', [8766, 819]], ['Acirc', [194]], ['acirc', [226]], ['acute', [180]], ['Acy', [1040]], ['acy', [1072]], ['AElig', [198]], ['aelig', [230]], ['af', [8289]], ['Afr', [120068]], ['afr', [120094]], ['Agrave', [192]], ['agrave', [224]], ['alefsym', [8501]], ['aleph', [8501]], ['Alpha', [913]], ['alpha', [945]], ['Amacr', [256]], ['amacr', [257]], ['amalg', [10815]], ['amp', [38]], ['AMP', [38]], ['andand', [10837]], ['And', [10835]], ['and', [8743]], ['andd', [10844]], ['andslope', [10840]], ['andv', [10842]], ['ang', [8736]], ['ange', [10660]], ['angle', [8736]], ['angmsdaa', [10664]], ['angmsdab', [10665]], ['angmsdac', [10666]], ['angmsdad', [10667]], ['angmsdae', [10668]], ['angmsdaf', [10669]], ['angmsdag', [10670]], ['angmsdah', [10671]], ['angmsd', [8737]], ['angrt', [8735]], ['angrtvb', [8894]], ['angrtvbd', [10653]], ['angsph', [8738]], ['angst', [197]], ['angzarr', [9084]], ['Aogon', [260]], ['aogon', [261]], ['Aopf', [120120]], ['aopf', [120146]], ['apacir', [10863]], ['ap', [8776]], ['apE', [10864]], ['ape', [8778]], ['apid', [8779]], ['apos', [39]], ['ApplyFunction', [8289]], ['approx', [8776]], ['approxeq', [8778]], ['Aring', [197]], ['aring', [229]], ['Ascr', [119964]], ['ascr', [119990]], ['Assign', [8788]], ['ast', [42]], ['asymp', [8776]], ['asympeq', [8781]], ['Atilde', [195]], ['atilde', [227]], ['Auml', [196]], ['auml', [228]], ['awconint', [8755]], ['awint', [10769]], ['backcong', [8780]], ['backepsilon', [1014]], ['backprime', [8245]], ['backsim', [8765]], ['backsimeq', [8909]], ['Backslash', [8726]], ['Barv', [10983]], ['barvee', [8893]], ['barwed', [8965]], ['Barwed', [8966]], ['barwedge', [8965]], ['bbrk', [9141]], ['bbrktbrk', [9142]], ['bcong', [8780]], ['Bcy', [1041]], ['bcy', [1073]], ['bdquo', [8222]], ['becaus', [8757]], ['because', [8757]], ['Because', [8757]], ['bemptyv', [10672]], ['bepsi', [1014]], ['bernou', [8492]], ['Bernoullis', [8492]], ['Beta', [914]], ['beta', [946]], ['beth', [8502]], ['between', [8812]], ['Bfr', [120069]], ['bfr', [120095]], ['bigcap', [8898]], ['bigcirc', [9711]], ['bigcup', [8899]], ['bigodot', [10752]], ['bigoplus', [10753]], ['bigotimes', [10754]], ['bigsqcup', [10758]], ['bigstar', [9733]], ['bigtriangledown', [9661]], ['bigtriangleup', [9651]], ['biguplus', [10756]], ['bigvee', [8897]], ['bigwedge', [8896]], ['bkarow', [10509]], ['blacklozenge', [10731]], ['blacksquare', [9642]], ['blacktriangle', [9652]], ['blacktriangledown', [9662]], ['blacktriangleleft', [9666]], ['blacktriangleright', [9656]], ['blank', [9251]], ['blk12', [9618]], ['blk14', [9617]], ['blk34', [9619]], ['block', [9608]], ['bne', [61, 8421]], ['bnequiv', [8801, 8421]], ['bNot', [10989]], ['bnot', [8976]], ['Bopf', [120121]], ['bopf', [120147]], ['bot', [8869]], ['bottom', [8869]], ['bowtie', [8904]], ['boxbox', [10697]], ['boxdl', [9488]], ['boxdL', [9557]], ['boxDl', [9558]], ['boxDL', [9559]], ['boxdr', [9484]], ['boxdR', [9554]], ['boxDr', [9555]], ['boxDR', [9556]], ['boxh', [9472]], ['boxH', [9552]], ['boxhd', [9516]], ['boxHd', [9572]], ['boxhD', [9573]], ['boxHD', [9574]], ['boxhu', [9524]], ['boxHu', [9575]], ['boxhU', [9576]], ['boxHU', [9577]], ['boxminus', [8863]], ['boxplus', [8862]], ['boxtimes', [8864]], ['boxul', [9496]], ['boxuL', [9563]], ['boxUl', [9564]], ['boxUL', [9565]], ['boxur', [9492]], ['boxuR', [9560]], ['boxUr', [9561]], ['boxUR', [9562]], ['boxv', [9474]], ['boxV', [9553]], ['boxvh', [9532]], ['boxvH', [9578]], ['boxVh', [9579]], ['boxVH', [9580]], ['boxvl', [9508]], ['boxvL', [9569]], ['boxVl', [9570]], ['boxVL', [9571]], ['boxvr', [9500]], ['boxvR', [9566]], ['boxVr', [9567]], ['boxVR', [9568]], ['bprime', [8245]], ['breve', [728]], ['Breve', [728]], ['brvbar', [166]], ['bscr', [119991]], ['Bscr', [8492]], ['bsemi', [8271]], ['bsim', [8765]], ['bsime', [8909]], ['bsolb', [10693]], ['bsol', [92]], ['bsolhsub', [10184]], ['bull', [8226]], ['bullet', [8226]], ['bump', [8782]], ['bumpE', [10926]], ['bumpe', [8783]], ['Bumpeq', [8782]], ['bumpeq', [8783]], ['Cacute', [262]], ['cacute', [263]], ['capand', [10820]], ['capbrcup', [10825]], ['capcap', [10827]], ['cap', [8745]], ['Cap', [8914]], ['capcup', [10823]], ['capdot', [10816]], ['CapitalDifferentialD', [8517]], ['caps', [8745, 65024]], ['caret', [8257]], ['caron', [711]], ['Cayleys', [8493]], ['ccaps', [10829]], ['Ccaron', [268]], ['ccaron', [269]], ['Ccedil', [199]], ['ccedil', [231]], ['Ccirc', [264]], ['ccirc', [265]], ['Cconint', [8752]], ['ccups', [10828]], ['ccupssm', [10832]], ['Cdot', [266]], ['cdot', [267]], ['cedil', [184]], ['Cedilla', [184]], ['cemptyv', [10674]], ['cent', [162]], ['centerdot', [183]], ['CenterDot', [183]], ['cfr', [120096]], ['Cfr', [8493]], ['CHcy', [1063]], ['chcy', [1095]], ['check', [10003]], ['checkmark', [10003]], ['Chi', [935]], ['chi', [967]], ['circ', [710]], ['circeq', [8791]], ['circlearrowleft', [8634]], ['circlearrowright', [8635]], ['circledast', [8859]], ['circledcirc', [8858]], ['circleddash', [8861]], ['CircleDot', [8857]], ['circledR', [174]], ['circledS', [9416]], ['CircleMinus', [8854]], ['CirclePlus', [8853]], ['CircleTimes', [8855]], ['cir', [9675]], ['cirE', [10691]], ['cire', [8791]], ['cirfnint', [10768]], ['cirmid', [10991]], ['cirscir', [10690]], ['ClockwiseContourIntegral', [8754]], ['clubs', [9827]], ['clubsuit', [9827]], ['colon', [58]], ['Colon', [8759]], ['Colone', [10868]], ['colone', [8788]], ['coloneq', [8788]], ['comma', [44]], ['commat', [64]], ['comp', [8705]], ['compfn', [8728]], ['complement', [8705]], ['complexes', [8450]], ['cong', [8773]], ['congdot', [10861]], ['Congruent', [8801]], ['conint', [8750]], ['Conint', [8751]], ['ContourIntegral', [8750]], ['copf', [120148]], ['Copf', [8450]], ['coprod', [8720]], ['Coproduct', [8720]], ['copy', [169]], ['COPY', [169]], ['copysr', [8471]], ['CounterClockwiseContourIntegral', [8755]], ['crarr', [8629]], ['cross', [10007]], ['Cross', [10799]], ['Cscr', [119966]], ['cscr', [119992]], ['csub', [10959]], ['csube', [10961]], ['csup', [10960]], ['csupe', [10962]], ['ctdot', [8943]], ['cudarrl', [10552]], ['cudarrr', [10549]], ['cuepr', [8926]], ['cuesc', [8927]], ['cularr', [8630]], ['cularrp', [10557]], ['cupbrcap', [10824]], ['cupcap', [10822]], ['CupCap', [8781]], ['cup', [8746]], ['Cup', [8915]], ['cupcup', [10826]], ['cupdot', [8845]], ['cupor', [10821]], ['cups', [8746, 65024]], ['curarr', [8631]], ['curarrm', [10556]], ['curlyeqprec', [8926]], ['curlyeqsucc', [8927]], ['curlyvee', [8910]], ['curlywedge', [8911]], ['curren', [164]], ['curvearrowleft', [8630]], ['curvearrowright', [8631]], ['cuvee', [8910]], ['cuwed', [8911]], ['cwconint', [8754]], ['cwint', [8753]], ['cylcty', [9005]], ['dagger', [8224]], ['Dagger', [8225]], ['daleth', [8504]], ['darr', [8595]], ['Darr', [8609]], ['dArr', [8659]], ['dash', [8208]], ['Dashv', [10980]], ['dashv', [8867]], ['dbkarow', [10511]], ['dblac', [733]], ['Dcaron', [270]], ['dcaron', [271]], ['Dcy', [1044]], ['dcy', [1076]], ['ddagger', [8225]], ['ddarr', [8650]], ['DD', [8517]], ['dd', [8518]], ['DDotrahd', [10513]], ['ddotseq', [10871]], ['deg', [176]], ['Del', [8711]], ['Delta', [916]], ['delta', [948]], ['demptyv', [10673]], ['dfisht', [10623]], ['Dfr', [120071]], ['dfr', [120097]], ['dHar', [10597]], ['dharl', [8643]], ['dharr', [8642]], ['DiacriticalAcute', [180]], ['DiacriticalDot', [729]], ['DiacriticalDoubleAcute', [733]], ['DiacriticalGrave', [96]], ['DiacriticalTilde', [732]], ['diam', [8900]], ['diamond', [8900]], ['Diamond', [8900]], ['diamondsuit', [9830]], ['diams', [9830]], ['die', [168]], ['DifferentialD', [8518]], ['digamma', [989]], ['disin', [8946]], ['div', [247]], ['divide', [247]], ['divideontimes', [8903]], ['divonx', [8903]], ['DJcy', [1026]], ['djcy', [1106]], ['dlcorn', [8990]], ['dlcrop', [8973]], ['dollar', [36]], ['Dopf', [120123]], ['dopf', [120149]], ['Dot', [168]], ['dot', [729]], ['DotDot', [8412]], ['doteq', [8784]], ['doteqdot', [8785]], ['DotEqual', [8784]], ['dotminus', [8760]], ['dotplus', [8724]], ['dotsquare', [8865]], ['doublebarwedge', [8966]], ['DoubleContourIntegral', [8751]], ['DoubleDot', [168]], ['DoubleDownArrow', [8659]], ['DoubleLeftArrow', [8656]], ['DoubleLeftRightArrow', [8660]], ['DoubleLeftTee', [10980]], ['DoubleLongLeftArrow', [10232]], ['DoubleLongLeftRightArrow', [10234]], ['DoubleLongRightArrow', [10233]], ['DoubleRightArrow', [8658]], ['DoubleRightTee', [8872]], ['DoubleUpArrow', [8657]], ['DoubleUpDownArrow', [8661]], ['DoubleVerticalBar', [8741]], ['DownArrowBar', [10515]], ['downarrow', [8595]], ['DownArrow', [8595]], ['Downarrow', [8659]], ['DownArrowUpArrow', [8693]], ['DownBreve', [785]], ['downdownarrows', [8650]], ['downharpoonleft', [8643]], ['downharpoonright', [8642]], ['DownLeftRightVector', [10576]], ['DownLeftTeeVector', [10590]], ['DownLeftVectorBar', [10582]], ['DownLeftVector', [8637]], ['DownRightTeeVector', [10591]], ['DownRightVectorBar', [10583]], ['DownRightVector', [8641]], ['DownTeeArrow', [8615]], ['DownTee', [8868]], ['drbkarow', [10512]], ['drcorn', [8991]], ['drcrop', [8972]], ['Dscr', [119967]], ['dscr', [119993]], ['DScy', [1029]], ['dscy', [1109]], ['dsol', [10742]], ['Dstrok', [272]], ['dstrok', [273]], ['dtdot', [8945]], ['dtri', [9663]], ['dtrif', [9662]], ['duarr', [8693]], ['duhar', [10607]], ['dwangle', [10662]], ['DZcy', [1039]], ['dzcy', [1119]], ['dzigrarr', [10239]], ['Eacute', [201]], ['eacute', [233]], ['easter', [10862]], ['Ecaron', [282]], ['ecaron', [283]], ['Ecirc', [202]], ['ecirc', [234]], ['ecir', [8790]], ['ecolon', [8789]], ['Ecy', [1069]], ['ecy', [1101]], ['eDDot', [10871]], ['Edot', [278]], ['edot', [279]], ['eDot', [8785]], ['ee', [8519]], ['efDot', [8786]], ['Efr', [120072]], ['efr', [120098]], ['eg', [10906]], ['Egrave', [200]], ['egrave', [232]], ['egs', [10902]], ['egsdot', [10904]], ['el', [10905]], ['Element', [8712]], ['elinters', [9191]], ['ell', [8467]], ['els', [10901]], ['elsdot', [10903]], ['Emacr', [274]], ['emacr', [275]], ['empty', [8709]], ['emptyset', [8709]], ['EmptySmallSquare', [9723]], ['emptyv', [8709]], ['EmptyVerySmallSquare', [9643]], ['emsp13', [8196]], ['emsp14', [8197]], ['emsp', [8195]], ['ENG', [330]], ['eng', [331]], ['ensp', [8194]], ['Eogon', [280]], ['eogon', [281]], ['Eopf', [120124]], ['eopf', [120150]], ['epar', [8917]], ['eparsl', [10723]], ['eplus', [10865]], ['epsi', [949]], ['Epsilon', [917]], ['epsilon', [949]], ['epsiv', [1013]], ['eqcirc', [8790]], ['eqcolon', [8789]], ['eqsim', [8770]], ['eqslantgtr', [10902]], ['eqslantless', [10901]], ['Equal', [10869]], ['equals', [61]], ['EqualTilde', [8770]], ['equest', [8799]], ['Equilibrium', [8652]], ['equiv', [8801]], ['equivDD', [10872]], ['eqvparsl', [10725]], ['erarr', [10609]], ['erDot', [8787]], ['escr', [8495]], ['Escr', [8496]], ['esdot', [8784]], ['Esim', [10867]], ['esim', [8770]], ['Eta', [919]], ['eta', [951]], ['ETH', [208]], ['eth', [240]], ['Euml', [203]], ['euml', [235]], ['euro', [8364]], ['excl', [33]], ['exist', [8707]], ['Exists', [8707]], ['expectation', [8496]], ['exponentiale', [8519]], ['ExponentialE', [8519]], ['fallingdotseq', [8786]], ['Fcy', [1060]], ['fcy', [1092]], ['female', [9792]], ['ffilig', [64259]], ['fflig', [64256]], ['ffllig', [64260]], ['Ffr', [120073]], ['ffr', [120099]], ['filig', [64257]], ['FilledSmallSquare', [9724]], ['FilledVerySmallSquare', [9642]], ['fjlig', [102, 106]], ['flat', [9837]], ['fllig', [64258]], ['fltns', [9649]], ['fnof', [402]], ['Fopf', [120125]], ['fopf', [120151]], ['forall', [8704]], ['ForAll', [8704]], ['fork', [8916]], ['forkv', [10969]], ['Fouriertrf', [8497]], ['fpartint', [10765]], ['frac12', [189]], ['frac13', [8531]], ['frac14', [188]], ['frac15', [8533]], ['frac16', [8537]], ['frac18', [8539]], ['frac23', [8532]], ['frac25', [8534]], ['frac34', [190]], ['frac35', [8535]], ['frac38', [8540]], ['frac45', [8536]], ['frac56', [8538]], ['frac58', [8541]], ['frac78', [8542]], ['frasl', [8260]], ['frown', [8994]], ['fscr', [119995]], ['Fscr', [8497]], ['gacute', [501]], ['Gamma', [915]], ['gamma', [947]], ['Gammad', [988]], ['gammad', [989]], ['gap', [10886]], ['Gbreve', [286]], ['gbreve', [287]], ['Gcedil', [290]], ['Gcirc', [284]], ['gcirc', [285]], ['Gcy', [1043]], ['gcy', [1075]], ['Gdot', [288]], ['gdot', [289]], ['ge', [8805]], ['gE', [8807]], ['gEl', [10892]], ['gel', [8923]], ['geq', [8805]], ['geqq', [8807]], ['geqslant', [10878]], ['gescc', [10921]], ['ges', [10878]], ['gesdot', [10880]], ['gesdoto', [10882]], ['gesdotol', [10884]], ['gesl', [8923, 65024]], ['gesles', [10900]], ['Gfr', [120074]], ['gfr', [120100]], ['gg', [8811]], ['Gg', [8921]], ['ggg', [8921]], ['gimel', [8503]], ['GJcy', [1027]], ['gjcy', [1107]], ['gla', [10917]], ['gl', [8823]], ['glE', [10898]], ['glj', [10916]], ['gnap', [10890]], ['gnapprox', [10890]], ['gne', [10888]], ['gnE', [8809]], ['gneq', [10888]], ['gneqq', [8809]], ['gnsim', [8935]], ['Gopf', [120126]], ['gopf', [120152]], ['grave', [96]], ['GreaterEqual', [8805]], ['GreaterEqualLess', [8923]], ['GreaterFullEqual', [8807]], ['GreaterGreater', [10914]], ['GreaterLess', [8823]], ['GreaterSlantEqual', [10878]], ['GreaterTilde', [8819]], ['Gscr', [119970]], ['gscr', [8458]], ['gsim', [8819]], ['gsime', [10894]], ['gsiml', [10896]], ['gtcc', [10919]], ['gtcir', [10874]], ['gt', [62]], ['GT', [62]], ['Gt', [8811]], ['gtdot', [8919]], ['gtlPar', [10645]], ['gtquest', [10876]], ['gtrapprox', [10886]], ['gtrarr', [10616]], ['gtrdot', [8919]], ['gtreqless', [8923]], ['gtreqqless', [10892]], ['gtrless', [8823]], ['gtrsim', [8819]], ['gvertneqq', [8809, 65024]], ['gvnE', [8809, 65024]], ['Hacek', [711]], ['hairsp', [8202]], ['half', [189]], ['hamilt', [8459]], ['HARDcy', [1066]], ['hardcy', [1098]], ['harrcir', [10568]], ['harr', [8596]], ['hArr', [8660]], ['harrw', [8621]], ['Hat', [94]], ['hbar', [8463]], ['Hcirc', [292]], ['hcirc', [293]], ['hearts', [9829]], ['heartsuit', [9829]], ['hellip', [8230]], ['hercon', [8889]], ['hfr', [120101]], ['Hfr', [8460]], ['HilbertSpace', [8459]], ['hksearow', [10533]], ['hkswarow', [10534]], ['hoarr', [8703]], ['homtht', [8763]], ['hookleftarrow', [8617]], ['hookrightarrow', [8618]], ['hopf', [120153]], ['Hopf', [8461]], ['horbar', [8213]], ['HorizontalLine', [9472]], ['hscr', [119997]], ['Hscr', [8459]], ['hslash', [8463]], ['Hstrok', [294]], ['hstrok', [295]], ['HumpDownHump', [8782]], ['HumpEqual', [8783]], ['hybull', [8259]], ['hyphen', [8208]], ['Iacute', [205]], ['iacute', [237]], ['ic', [8291]], ['Icirc', [206]], ['icirc', [238]], ['Icy', [1048]], ['icy', [1080]], ['Idot', [304]], ['IEcy', [1045]], ['iecy', [1077]], ['iexcl', [161]], ['iff', [8660]], ['ifr', [120102]], ['Ifr', [8465]], ['Igrave', [204]], ['igrave', [236]], ['ii', [8520]], ['iiiint', [10764]], ['iiint', [8749]], ['iinfin', [10716]], ['iiota', [8489]], ['IJlig', [306]], ['ijlig', [307]], ['Imacr', [298]], ['imacr', [299]], ['image', [8465]], ['ImaginaryI', [8520]], ['imagline', [8464]], ['imagpart', [8465]], ['imath', [305]], ['Im', [8465]], ['imof', [8887]], ['imped', [437]], ['Implies', [8658]], ['incare', [8453]], ['in', [8712]], ['infin', [8734]], ['infintie', [10717]], ['inodot', [305]], ['intcal', [8890]], ['int', [8747]], ['Int', [8748]], ['integers', [8484]], ['Integral', [8747]], ['intercal', [8890]], ['Intersection', [8898]], ['intlarhk', [10775]], ['intprod', [10812]], ['InvisibleComma', [8291]], ['InvisibleTimes', [8290]], ['IOcy', [1025]], ['iocy', [1105]], ['Iogon', [302]], ['iogon', [303]], ['Iopf', [120128]], ['iopf', [120154]], ['Iota', [921]], ['iota', [953]], ['iprod', [10812]], ['iquest', [191]], ['iscr', [119998]], ['Iscr', [8464]], ['isin', [8712]], ['isindot', [8949]], ['isinE', [8953]], ['isins', [8948]], ['isinsv', [8947]], ['isinv', [8712]], ['it', [8290]], ['Itilde', [296]], ['itilde', [297]], ['Iukcy', [1030]], ['iukcy', [1110]], ['Iuml', [207]], ['iuml', [239]], ['Jcirc', [308]], ['jcirc', [309]], ['Jcy', [1049]], ['jcy', [1081]], ['Jfr', [120077]], ['jfr', [120103]], ['jmath', [567]], ['Jopf', [120129]], ['jopf', [120155]], ['Jscr', [119973]], ['jscr', [119999]], ['Jsercy', [1032]], ['jsercy', [1112]], ['Jukcy', [1028]], ['jukcy', [1108]], ['Kappa', [922]], ['kappa', [954]], ['kappav', [1008]], ['Kcedil', [310]], ['kcedil', [311]], ['Kcy', [1050]], ['kcy', [1082]], ['Kfr', [120078]], ['kfr', [120104]], ['kgreen', [312]], ['KHcy', [1061]], ['khcy', [1093]], ['KJcy', [1036]], ['kjcy', [1116]], ['Kopf', [120130]], ['kopf', [120156]], ['Kscr', [119974]], ['kscr', [120000]], ['lAarr', [8666]], ['Lacute', [313]], ['lacute', [314]], ['laemptyv', [10676]], ['lagran', [8466]], ['Lambda', [923]], ['lambda', [955]], ['lang', [10216]], ['Lang', [10218]], ['langd', [10641]], ['langle', [10216]], ['lap', [10885]], ['Laplacetrf', [8466]], ['laquo', [171]], ['larrb', [8676]], ['larrbfs', [10527]], ['larr', [8592]], ['Larr', [8606]], ['lArr', [8656]], ['larrfs', [10525]], ['larrhk', [8617]], ['larrlp', [8619]], ['larrpl', [10553]], ['larrsim', [10611]], ['larrtl', [8610]], ['latail', [10521]], ['lAtail', [10523]], ['lat', [10923]], ['late', [10925]], ['lates', [10925, 65024]], ['lbarr', [10508]], ['lBarr', [10510]], ['lbbrk', [10098]], ['lbrace', [123]], ['lbrack', [91]], ['lbrke', [10635]], ['lbrksld', [10639]], ['lbrkslu', [10637]], ['Lcaron', [317]], ['lcaron', [318]], ['Lcedil', [315]], ['lcedil', [316]], ['lceil', [8968]], ['lcub', [123]], ['Lcy', [1051]], ['lcy', [1083]], ['ldca', [10550]], ['ldquo', [8220]], ['ldquor', [8222]], ['ldrdhar', [10599]], ['ldrushar', [10571]], ['ldsh', [8626]], ['le', [8804]], ['lE', [8806]], ['LeftAngleBracket', [10216]], ['LeftArrowBar', [8676]], ['leftarrow', [8592]], ['LeftArrow', [8592]], ['Leftarrow', [8656]], ['LeftArrowRightArrow', [8646]], ['leftarrowtail', [8610]], ['LeftCeiling', [8968]], ['LeftDoubleBracket', [10214]], ['LeftDownTeeVector', [10593]], ['LeftDownVectorBar', [10585]], ['LeftDownVector', [8643]], ['LeftFloor', [8970]], ['leftharpoondown', [8637]], ['leftharpoonup', [8636]], ['leftleftarrows', [8647]], ['leftrightarrow', [8596]], ['LeftRightArrow', [8596]], ['Leftrightarrow', [8660]], ['leftrightarrows', [8646]], ['leftrightharpoons', [8651]], ['leftrightsquigarrow', [8621]], ['LeftRightVector', [10574]], ['LeftTeeArrow', [8612]], ['LeftTee', [8867]], ['LeftTeeVector', [10586]], ['leftthreetimes', [8907]], ['LeftTriangleBar', [10703]], ['LeftTriangle', [8882]], ['LeftTriangleEqual', [8884]], ['LeftUpDownVector', [10577]], ['LeftUpTeeVector', [10592]], ['LeftUpVectorBar', [10584]], ['LeftUpVector', [8639]], ['LeftVectorBar', [10578]], ['LeftVector', [8636]], ['lEg', [10891]], ['leg', [8922]], ['leq', [8804]], ['leqq', [8806]], ['leqslant', [10877]], ['lescc', [10920]], ['les', [10877]], ['lesdot', [10879]], ['lesdoto', [10881]], ['lesdotor', [10883]], ['lesg', [8922, 65024]], ['lesges', [10899]], ['lessapprox', [10885]], ['lessdot', [8918]], ['lesseqgtr', [8922]], ['lesseqqgtr', [10891]], ['LessEqualGreater', [8922]], ['LessFullEqual', [8806]], ['LessGreater', [8822]], ['lessgtr', [8822]], ['LessLess', [10913]], ['lesssim', [8818]], ['LessSlantEqual', [10877]], ['LessTilde', [8818]], ['lfisht', [10620]], ['lfloor', [8970]], ['Lfr', [120079]], ['lfr', [120105]], ['lg', [8822]], ['lgE', [10897]], ['lHar', [10594]], ['lhard', [8637]], ['lharu', [8636]], ['lharul', [10602]], ['lhblk', [9604]], ['LJcy', [1033]], ['ljcy', [1113]], ['llarr', [8647]], ['ll', [8810]], ['Ll', [8920]], ['llcorner', [8990]], ['Lleftarrow', [8666]], ['llhard', [10603]], ['lltri', [9722]], ['Lmidot', [319]], ['lmidot', [320]], ['lmoustache', [9136]], ['lmoust', [9136]], ['lnap', [10889]], ['lnapprox', [10889]], ['lne', [10887]], ['lnE', [8808]], ['lneq', [10887]], ['lneqq', [8808]], ['lnsim', [8934]], ['loang', [10220]], ['loarr', [8701]], ['lobrk', [10214]], ['longleftarrow', [10229]], ['LongLeftArrow', [10229]], ['Longleftarrow', [10232]], ['longleftrightarrow', [10231]], ['LongLeftRightArrow', [10231]], ['Longleftrightarrow', [10234]], ['longmapsto', [10236]], ['longrightarrow', [10230]], ['LongRightArrow', [10230]], ['Longrightarrow', [10233]], ['looparrowleft', [8619]], ['looparrowright', [8620]], ['lopar', [10629]], ['Lopf', [120131]], ['lopf', [120157]], ['loplus', [10797]], ['lotimes', [10804]], ['lowast', [8727]], ['lowbar', [95]], ['LowerLeftArrow', [8601]], ['LowerRightArrow', [8600]], ['loz', [9674]], ['lozenge', [9674]], ['lozf', [10731]], ['lpar', [40]], ['lparlt', [10643]], ['lrarr', [8646]], ['lrcorner', [8991]], ['lrhar', [8651]], ['lrhard', [10605]], ['lrm', [8206]], ['lrtri', [8895]], ['lsaquo', [8249]], ['lscr', [120001]], ['Lscr', [8466]], ['lsh', [8624]], ['Lsh', [8624]], ['lsim', [8818]], ['lsime', [10893]], ['lsimg', [10895]], ['lsqb', [91]], ['lsquo', [8216]], ['lsquor', [8218]], ['Lstrok', [321]], ['lstrok', [322]], ['ltcc', [10918]], ['ltcir', [10873]], ['lt', [60]], ['LT', [60]], ['Lt', [8810]], ['ltdot', [8918]], ['lthree', [8907]], ['ltimes', [8905]], ['ltlarr', [10614]], ['ltquest', [10875]], ['ltri', [9667]], ['ltrie', [8884]], ['ltrif', [9666]], ['ltrPar', [10646]], ['lurdshar', [10570]], ['luruhar', [10598]], ['lvertneqq', [8808, 65024]], ['lvnE', [8808, 65024]], ['macr', [175]], ['male', [9794]], ['malt', [10016]], ['maltese', [10016]], ['Map', [10501]], ['map', [8614]], ['mapsto', [8614]], ['mapstodown', [8615]], ['mapstoleft', [8612]], ['mapstoup', [8613]], ['marker', [9646]], ['mcomma', [10793]], ['Mcy', [1052]], ['mcy', [1084]], ['mdash', [8212]], ['mDDot', [8762]], ['measuredangle', [8737]], ['MediumSpace', [8287]], ['Mellintrf', [8499]], ['Mfr', [120080]], ['mfr', [120106]], ['mho', [8487]], ['micro', [181]], ['midast', [42]], ['midcir', [10992]], ['mid', [8739]], ['middot', [183]], ['minusb', [8863]], ['minus', [8722]], ['minusd', [8760]], ['minusdu', [10794]], ['MinusPlus', [8723]], ['mlcp', [10971]], ['mldr', [8230]], ['mnplus', [8723]], ['models', [8871]], ['Mopf', [120132]], ['mopf', [120158]], ['mp', [8723]], ['mscr', [120002]], ['Mscr', [8499]], ['mstpos', [8766]], ['Mu', [924]], ['mu', [956]], ['multimap', [8888]], ['mumap', [8888]], ['nabla', [8711]], ['Nacute', [323]], ['nacute', [324]], ['nang', [8736, 8402]], ['nap', [8777]], ['napE', [10864, 824]], ['napid', [8779, 824]], ['napos', [329]], ['napprox', [8777]], ['natural', [9838]], ['naturals', [8469]], ['natur', [9838]], ['nbsp', [160]], ['nbump', [8782, 824]], ['nbumpe', [8783, 824]], ['ncap', [10819]], ['Ncaron', [327]], ['ncaron', [328]], ['Ncedil', [325]], ['ncedil', [326]], ['ncong', [8775]], ['ncongdot', [10861, 824]], ['ncup', [10818]], ['Ncy', [1053]], ['ncy', [1085]], ['ndash', [8211]], ['nearhk', [10532]], ['nearr', [8599]], ['neArr', [8663]], ['nearrow', [8599]], ['ne', [8800]], ['nedot', [8784, 824]], ['NegativeMediumSpace', [8203]], ['NegativeThickSpace', [8203]], ['NegativeThinSpace', [8203]], ['NegativeVeryThinSpace', [8203]], ['nequiv', [8802]], ['nesear', [10536]], ['nesim', [8770, 824]], ['NestedGreaterGreater', [8811]], ['NestedLessLess', [8810]], ['nexist', [8708]], ['nexists', [8708]], ['Nfr', [120081]], ['nfr', [120107]], ['ngE', [8807, 824]], ['nge', [8817]], ['ngeq', [8817]], ['ngeqq', [8807, 824]], ['ngeqslant', [10878, 824]], ['nges', [10878, 824]], ['nGg', [8921, 824]], ['ngsim', [8821]], ['nGt', [8811, 8402]], ['ngt', [8815]], ['ngtr', [8815]], ['nGtv', [8811, 824]], ['nharr', [8622]], ['nhArr', [8654]], ['nhpar', [10994]], ['ni', [8715]], ['nis', [8956]], ['nisd', [8954]], ['niv', [8715]], ['NJcy', [1034]], ['njcy', [1114]], ['nlarr', [8602]], ['nlArr', [8653]], ['nldr', [8229]], ['nlE', [8806, 824]], ['nle', [8816]], ['nleftarrow', [8602]], ['nLeftarrow', [8653]], ['nleftrightarrow', [8622]], ['nLeftrightarrow', [8654]], ['nleq', [8816]], ['nleqq', [8806, 824]], ['nleqslant', [10877, 824]], ['nles', [10877, 824]], ['nless', [8814]], ['nLl', [8920, 824]], ['nlsim', [8820]], ['nLt', [8810, 8402]], ['nlt', [8814]], ['nltri', [8938]], ['nltrie', [8940]], ['nLtv', [8810, 824]], ['nmid', [8740]], ['NoBreak', [8288]], ['NonBreakingSpace', [160]], ['nopf', [120159]], ['Nopf', [8469]], ['Not', [10988]], ['not', [172]], ['NotCongruent', [8802]], ['NotCupCap', [8813]], ['NotDoubleVerticalBar', [8742]], ['NotElement', [8713]], ['NotEqual', [8800]], ['NotEqualTilde', [8770, 824]], ['NotExists', [8708]], ['NotGreater', [8815]], ['NotGreaterEqual', [8817]], ['NotGreaterFullEqual', [8807, 824]], ['NotGreaterGreater', [8811, 824]], ['NotGreaterLess', [8825]], ['NotGreaterSlantEqual', [10878, 824]], ['NotGreaterTilde', [8821]], ['NotHumpDownHump', [8782, 824]], ['NotHumpEqual', [8783, 824]], ['notin', [8713]], ['notindot', [8949, 824]], ['notinE', [8953, 824]], ['notinva', [8713]], ['notinvb', [8951]], ['notinvc', [8950]], ['NotLeftTriangleBar', [10703, 824]], ['NotLeftTriangle', [8938]], ['NotLeftTriangleEqual', [8940]], ['NotLess', [8814]], ['NotLessEqual', [8816]], ['NotLessGreater', [8824]], ['NotLessLess', [8810, 824]], ['NotLessSlantEqual', [10877, 824]], ['NotLessTilde', [8820]], ['NotNestedGreaterGreater', [10914, 824]], ['NotNestedLessLess', [10913, 824]], ['notni', [8716]], ['notniva', [8716]], ['notnivb', [8958]], ['notnivc', [8957]], ['NotPrecedes', [8832]], ['NotPrecedesEqual', [10927, 824]], ['NotPrecedesSlantEqual', [8928]], ['NotReverseElement', [8716]], ['NotRightTriangleBar', [10704, 824]], ['NotRightTriangle', [8939]], ['NotRightTriangleEqual', [8941]], ['NotSquareSubset', [8847, 824]], ['NotSquareSubsetEqual', [8930]], ['NotSquareSuperset', [8848, 824]], ['NotSquareSupersetEqual', [8931]], ['NotSubset', [8834, 8402]], ['NotSubsetEqual', [8840]], ['NotSucceeds', [8833]], ['NotSucceedsEqual', [10928, 824]], ['NotSucceedsSlantEqual', [8929]], ['NotSucceedsTilde', [8831, 824]], ['NotSuperset', [8835, 8402]], ['NotSupersetEqual', [8841]], ['NotTilde', [8769]], ['NotTildeEqual', [8772]], ['NotTildeFullEqual', [8775]], ['NotTildeTilde', [8777]], ['NotVerticalBar', [8740]], ['nparallel', [8742]], ['npar', [8742]], ['nparsl', [11005, 8421]], ['npart', [8706, 824]], ['npolint', [10772]], ['npr', [8832]], ['nprcue', [8928]], ['nprec', [8832]], ['npreceq', [10927, 824]], ['npre', [10927, 824]], ['nrarrc', [10547, 824]], ['nrarr', [8603]], ['nrArr', [8655]], ['nrarrw', [8605, 824]], ['nrightarrow', [8603]], ['nRightarrow', [8655]], ['nrtri', [8939]], ['nrtrie', [8941]], ['nsc', [8833]], ['nsccue', [8929]], ['nsce', [10928, 824]], ['Nscr', [119977]], ['nscr', [120003]], ['nshortmid', [8740]], ['nshortparallel', [8742]], ['nsim', [8769]], ['nsime', [8772]], ['nsimeq', [8772]], ['nsmid', [8740]], ['nspar', [8742]], ['nsqsube', [8930]], ['nsqsupe', [8931]], ['nsub', [8836]], ['nsubE', [10949, 824]], ['nsube', [8840]], ['nsubset', [8834, 8402]], ['nsubseteq', [8840]], ['nsubseteqq', [10949, 824]], ['nsucc', [8833]], ['nsucceq', [10928, 824]], ['nsup', [8837]], ['nsupE', [10950, 824]], ['nsupe', [8841]], ['nsupset', [8835, 8402]], ['nsupseteq', [8841]], ['nsupseteqq', [10950, 824]], ['ntgl', [8825]], ['Ntilde', [209]], ['ntilde', [241]], ['ntlg', [8824]], ['ntriangleleft', [8938]], ['ntrianglelefteq', [8940]], ['ntriangleright', [8939]], ['ntrianglerighteq', [8941]], ['Nu', [925]], ['nu', [957]], ['num', [35]], ['numero', [8470]], ['numsp', [8199]], ['nvap', [8781, 8402]], ['nvdash', [8876]], ['nvDash', [8877]], ['nVdash', [8878]], ['nVDash', [8879]], ['nvge', [8805, 8402]], ['nvgt', [62, 8402]], ['nvHarr', [10500]], ['nvinfin', [10718]], ['nvlArr', [10498]], ['nvle', [8804, 8402]], ['nvlt', [60, 8402]], ['nvltrie', [8884, 8402]], ['nvrArr', [10499]], ['nvrtrie', [8885, 8402]], ['nvsim', [8764, 8402]], ['nwarhk', [10531]], ['nwarr', [8598]], ['nwArr', [8662]], ['nwarrow', [8598]], ['nwnear', [10535]], ['Oacute', [211]], ['oacute', [243]], ['oast', [8859]], ['Ocirc', [212]], ['ocirc', [244]], ['ocir', [8858]], ['Ocy', [1054]], ['ocy', [1086]], ['odash', [8861]], ['Odblac', [336]], ['odblac', [337]], ['odiv', [10808]], ['odot', [8857]], ['odsold', [10684]], ['OElig', [338]], ['oelig', [339]], ['ofcir', [10687]], ['Ofr', [120082]], ['ofr', [120108]], ['ogon', [731]], ['Ograve', [210]], ['ograve', [242]], ['ogt', [10689]], ['ohbar', [10677]], ['ohm', [937]], ['oint', [8750]], ['olarr', [8634]], ['olcir', [10686]], ['olcross', [10683]], ['oline', [8254]], ['olt', [10688]], ['Omacr', [332]], ['omacr', [333]], ['Omega', [937]], ['omega', [969]], ['Omicron', [927]], ['omicron', [959]], ['omid', [10678]], ['ominus', [8854]], ['Oopf', [120134]], ['oopf', [120160]], ['opar', [10679]], ['OpenCurlyDoubleQuote', [8220]], ['OpenCurlyQuote', [8216]], ['operp', [10681]], ['oplus', [8853]], ['orarr', [8635]], ['Or', [10836]], ['or', [8744]], ['ord', [10845]], ['order', [8500]], ['orderof', [8500]], ['ordf', [170]], ['ordm', [186]], ['origof', [8886]], ['oror', [10838]], ['orslope', [10839]], ['orv', [10843]], ['oS', [9416]], ['Oscr', [119978]], ['oscr', [8500]], ['Oslash', [216]], ['oslash', [248]], ['osol', [8856]], ['Otilde', [213]], ['otilde', [245]], ['otimesas', [10806]], ['Otimes', [10807]], ['otimes', [8855]], ['Ouml', [214]], ['ouml', [246]], ['ovbar', [9021]], ['OverBar', [8254]], ['OverBrace', [9182]], ['OverBracket', [9140]], ['OverParenthesis', [9180]], ['para', [182]], ['parallel', [8741]], ['par', [8741]], ['parsim', [10995]], ['parsl', [11005]], ['part', [8706]], ['PartialD', [8706]], ['Pcy', [1055]], ['pcy', [1087]], ['percnt', [37]], ['period', [46]], ['permil', [8240]], ['perp', [8869]], ['pertenk', [8241]], ['Pfr', [120083]], ['pfr', [120109]], ['Phi', [934]], ['phi', [966]], ['phiv', [981]], ['phmmat', [8499]], ['phone', [9742]], ['Pi', [928]], ['pi', [960]], ['pitchfork', [8916]], ['piv', [982]], ['planck', [8463]], ['planckh', [8462]], ['plankv', [8463]], ['plusacir', [10787]], ['plusb', [8862]], ['pluscir', [10786]], ['plus', [43]], ['plusdo', [8724]], ['plusdu', [10789]], ['pluse', [10866]], ['PlusMinus', [177]], ['plusmn', [177]], ['plussim', [10790]], ['plustwo', [10791]], ['pm', [177]], ['Poincareplane', [8460]], ['pointint', [10773]], ['popf', [120161]], ['Popf', [8473]], ['pound', [163]], ['prap', [10935]], ['Pr', [10939]], ['pr', [8826]], ['prcue', [8828]], ['precapprox', [10935]], ['prec', [8826]], ['preccurlyeq', [8828]], ['Precedes', [8826]], ['PrecedesEqual', [10927]], ['PrecedesSlantEqual', [8828]], ['PrecedesTilde', [8830]], ['preceq', [10927]], ['precnapprox', [10937]], ['precneqq', [10933]], ['precnsim', [8936]], ['pre', [10927]], ['prE', [10931]], ['precsim', [8830]], ['prime', [8242]], ['Prime', [8243]], ['primes', [8473]], ['prnap', [10937]], ['prnE', [10933]], ['prnsim', [8936]], ['prod', [8719]], ['Product', [8719]], ['profalar', [9006]], ['profline', [8978]], ['profsurf', [8979]], ['prop', [8733]], ['Proportional', [8733]], ['Proportion', [8759]], ['propto', [8733]], ['prsim', [8830]], ['prurel', [8880]], ['Pscr', [119979]], ['pscr', [120005]], ['Psi', [936]], ['psi', [968]], ['puncsp', [8200]], ['Qfr', [120084]], ['qfr', [120110]], ['qint', [10764]], ['qopf', [120162]], ['Qopf', [8474]], ['qprime', [8279]], ['Qscr', [119980]], ['qscr', [120006]], ['quaternions', [8461]], ['quatint', [10774]], ['quest', [63]], ['questeq', [8799]], ['quot', [34]], ['QUOT', [34]], ['rAarr', [8667]], ['race', [8765, 817]], ['Racute', [340]], ['racute', [341]], ['radic', [8730]], ['raemptyv', [10675]], ['rang', [10217]], ['Rang', [10219]], ['rangd', [10642]], ['range', [10661]], ['rangle', [10217]], ['raquo', [187]], ['rarrap', [10613]], ['rarrb', [8677]], ['rarrbfs', [10528]], ['rarrc', [10547]], ['rarr', [8594]], ['Rarr', [8608]], ['rArr', [8658]], ['rarrfs', [10526]], ['rarrhk', [8618]], ['rarrlp', [8620]], ['rarrpl', [10565]], ['rarrsim', [10612]], ['Rarrtl', [10518]], ['rarrtl', [8611]], ['rarrw', [8605]], ['ratail', [10522]], ['rAtail', [10524]], ['ratio', [8758]], ['rationals', [8474]], ['rbarr', [10509]], ['rBarr', [10511]], ['RBarr', [10512]], ['rbbrk', [10099]], ['rbrace', [125]], ['rbrack', [93]], ['rbrke', [10636]], ['rbrksld', [10638]], ['rbrkslu', [10640]], ['Rcaron', [344]], ['rcaron', [345]], ['Rcedil', [342]], ['rcedil', [343]], ['rceil', [8969]], ['rcub', [125]], ['Rcy', [1056]], ['rcy', [1088]], ['rdca', [10551]], ['rdldhar', [10601]], ['rdquo', [8221]], ['rdquor', [8221]], ['CloseCurlyDoubleQuote', [8221]], ['rdsh', [8627]], ['real', [8476]], ['realine', [8475]], ['realpart', [8476]], ['reals', [8477]], ['Re', [8476]], ['rect', [9645]], ['reg', [174]], ['REG', [174]], ['ReverseElement', [8715]], ['ReverseEquilibrium', [8651]], ['ReverseUpEquilibrium', [10607]], ['rfisht', [10621]], ['rfloor', [8971]], ['rfr', [120111]], ['Rfr', [8476]], ['rHar', [10596]], ['rhard', [8641]], ['rharu', [8640]], ['rharul', [10604]], ['Rho', [929]], ['rho', [961]], ['rhov', [1009]], ['RightAngleBracket', [10217]], ['RightArrowBar', [8677]], ['rightarrow', [8594]], ['RightArrow', [8594]], ['Rightarrow', [8658]], ['RightArrowLeftArrow', [8644]], ['rightarrowtail', [8611]], ['RightCeiling', [8969]], ['RightDoubleBracket', [10215]], ['RightDownTeeVector', [10589]], ['RightDownVectorBar', [10581]], ['RightDownVector', [8642]], ['RightFloor', [8971]], ['rightharpoondown', [8641]], ['rightharpoonup', [8640]], ['rightleftarrows', [8644]], ['rightleftharpoons', [8652]], ['rightrightarrows', [8649]], ['rightsquigarrow', [8605]], ['RightTeeArrow', [8614]], ['RightTee', [8866]], ['RightTeeVector', [10587]], ['rightthreetimes', [8908]], ['RightTriangleBar', [10704]], ['RightTriangle', [8883]], ['RightTriangleEqual', [8885]], ['RightUpDownVector', [10575]], ['RightUpTeeVector', [10588]], ['RightUpVectorBar', [10580]], ['RightUpVector', [8638]], ['RightVectorBar', [10579]], ['RightVector', [8640]], ['ring', [730]], ['risingdotseq', [8787]], ['rlarr', [8644]], ['rlhar', [8652]], ['rlm', [8207]], ['rmoustache', [9137]], ['rmoust', [9137]], ['rnmid', [10990]], ['roang', [10221]], ['roarr', [8702]], ['robrk', [10215]], ['ropar', [10630]], ['ropf', [120163]], ['Ropf', [8477]], ['roplus', [10798]], ['rotimes', [10805]], ['RoundImplies', [10608]], ['rpar', [41]], ['rpargt', [10644]], ['rppolint', [10770]], ['rrarr', [8649]], ['Rrightarrow', [8667]], ['rsaquo', [8250]], ['rscr', [120007]], ['Rscr', [8475]], ['rsh', [8625]], ['Rsh', [8625]], ['rsqb', [93]], ['rsquo', [8217]], ['rsquor', [8217]], ['CloseCurlyQuote', [8217]], ['rthree', [8908]], ['rtimes', [8906]], ['rtri', [9657]], ['rtrie', [8885]], ['rtrif', [9656]], ['rtriltri', [10702]], ['RuleDelayed', [10740]], ['ruluhar', [10600]], ['rx', [8478]], ['Sacute', [346]], ['sacute', [347]], ['sbquo', [8218]], ['scap', [10936]], ['Scaron', [352]], ['scaron', [353]], ['Sc', [10940]], ['sc', [8827]], ['sccue', [8829]], ['sce', [10928]], ['scE', [10932]], ['Scedil', [350]], ['scedil', [351]], ['Scirc', [348]], ['scirc', [349]], ['scnap', [10938]], ['scnE', [10934]], ['scnsim', [8937]], ['scpolint', [10771]], ['scsim', [8831]], ['Scy', [1057]], ['scy', [1089]], ['sdotb', [8865]], ['sdot', [8901]], ['sdote', [10854]], ['searhk', [10533]], ['searr', [8600]], ['seArr', [8664]], ['searrow', [8600]], ['sect', [167]], ['semi', [59]], ['seswar', [10537]], ['setminus', [8726]], ['setmn', [8726]], ['sext', [10038]], ['Sfr', [120086]], ['sfr', [120112]], ['sfrown', [8994]], ['sharp', [9839]], ['SHCHcy', [1065]], ['shchcy', [1097]], ['SHcy', [1064]], ['shcy', [1096]], ['ShortDownArrow', [8595]], ['ShortLeftArrow', [8592]], ['shortmid', [8739]], ['shortparallel', [8741]], ['ShortRightArrow', [8594]], ['ShortUpArrow', [8593]], ['shy', [173]], ['Sigma', [931]], ['sigma', [963]], ['sigmaf', [962]], ['sigmav', [962]], ['sim', [8764]], ['simdot', [10858]], ['sime', [8771]], ['simeq', [8771]], ['simg', [10910]], ['simgE', [10912]], ['siml', [10909]], ['simlE', [10911]], ['simne', [8774]], ['simplus', [10788]], ['simrarr', [10610]], ['slarr', [8592]], ['SmallCircle', [8728]], ['smallsetminus', [8726]], ['smashp', [10803]], ['smeparsl', [10724]], ['smid', [8739]], ['smile', [8995]], ['smt', [10922]], ['smte', [10924]], ['smtes', [10924, 65024]], ['SOFTcy', [1068]], ['softcy', [1100]], ['solbar', [9023]], ['solb', [10692]], ['sol', [47]], ['Sopf', [120138]], ['sopf', [120164]], ['spades', [9824]], ['spadesuit', [9824]], ['spar', [8741]], ['sqcap', [8851]], ['sqcaps', [8851, 65024]], ['sqcup', [8852]], ['sqcups', [8852, 65024]], ['Sqrt', [8730]], ['sqsub', [8847]], ['sqsube', [8849]], ['sqsubset', [8847]], ['sqsubseteq', [8849]], ['sqsup', [8848]], ['sqsupe', [8850]], ['sqsupset', [8848]], ['sqsupseteq', [8850]], ['square', [9633]], ['Square', [9633]], ['SquareIntersection', [8851]], ['SquareSubset', [8847]], ['SquareSubsetEqual', [8849]], ['SquareSuperset', [8848]], ['SquareSupersetEqual', [8850]], ['SquareUnion', [8852]], ['squarf', [9642]], ['squ', [9633]], ['squf', [9642]], ['srarr', [8594]], ['Sscr', [119982]], ['sscr', [120008]], ['ssetmn', [8726]], ['ssmile', [8995]], ['sstarf', [8902]], ['Star', [8902]], ['star', [9734]], ['starf', [9733]], ['straightepsilon', [1013]], ['straightphi', [981]], ['strns', [175]], ['sub', [8834]], ['Sub', [8912]], ['subdot', [10941]], ['subE', [10949]], ['sube', [8838]], ['subedot', [10947]], ['submult', [10945]], ['subnE', [10955]], ['subne', [8842]], ['subplus', [10943]], ['subrarr', [10617]], ['subset', [8834]], ['Subset', [8912]], ['subseteq', [8838]], ['subseteqq', [10949]], ['SubsetEqual', [8838]], ['subsetneq', [8842]], ['subsetneqq', [10955]], ['subsim', [10951]], ['subsub', [10965]], ['subsup', [10963]], ['succapprox', [10936]], ['succ', [8827]], ['succcurlyeq', [8829]], ['Succeeds', [8827]], ['SucceedsEqual', [10928]], ['SucceedsSlantEqual', [8829]], ['SucceedsTilde', [8831]], ['succeq', [10928]], ['succnapprox', [10938]], ['succneqq', [10934]], ['succnsim', [8937]], ['succsim', [8831]], ['SuchThat', [8715]], ['sum', [8721]], ['Sum', [8721]], ['sung', [9834]], ['sup1', [185]], ['sup2', [178]], ['sup3', [179]], ['sup', [8835]], ['Sup', [8913]], ['supdot', [10942]], ['supdsub', [10968]], ['supE', [10950]], ['supe', [8839]], ['supedot', [10948]], ['Superset', [8835]], ['SupersetEqual', [8839]], ['suphsol', [10185]], ['suphsub', [10967]], ['suplarr', [10619]], ['supmult', [10946]], ['supnE', [10956]], ['supne', [8843]], ['supplus', [10944]], ['supset', [8835]], ['Supset', [8913]], ['supseteq', [8839]], ['supseteqq', [10950]], ['supsetneq', [8843]], ['supsetneqq', [10956]], ['supsim', [10952]], ['supsub', [10964]], ['supsup', [10966]], ['swarhk', [10534]], ['swarr', [8601]], ['swArr', [8665]], ['swarrow', [8601]], ['swnwar', [10538]], ['szlig', [223]], ['Tab', [9]], ['target', [8982]], ['Tau', [932]], ['tau', [964]], ['tbrk', [9140]], ['Tcaron', [356]], ['tcaron', [357]], ['Tcedil', [354]], ['tcedil', [355]], ['Tcy', [1058]], ['tcy', [1090]], ['tdot', [8411]], ['telrec', [8981]], ['Tfr', [120087]], ['tfr', [120113]], ['there4', [8756]], ['therefore', [8756]], ['Therefore', [8756]], ['Theta', [920]], ['theta', [952]], ['thetasym', [977]], ['thetav', [977]], ['thickapprox', [8776]], ['thicksim', [8764]], ['ThickSpace', [8287, 8202]], ['ThinSpace', [8201]], ['thinsp', [8201]], ['thkap', [8776]], ['thksim', [8764]], ['THORN', [222]], ['thorn', [254]], ['tilde', [732]], ['Tilde', [8764]], ['TildeEqual', [8771]], ['TildeFullEqual', [8773]], ['TildeTilde', [8776]], ['timesbar', [10801]], ['timesb', [8864]], ['times', [215]], ['timesd', [10800]], ['tint', [8749]], ['toea', [10536]], ['topbot', [9014]], ['topcir', [10993]], ['top', [8868]], ['Topf', [120139]], ['topf', [120165]], ['topfork', [10970]], ['tosa', [10537]], ['tprime', [8244]], ['trade', [8482]], ['TRADE', [8482]], ['triangle', [9653]], ['triangledown', [9663]], ['triangleleft', [9667]], ['trianglelefteq', [8884]], ['triangleq', [8796]], ['triangleright', [9657]], ['trianglerighteq', [8885]], ['tridot', [9708]], ['trie', [8796]], ['triminus', [10810]], ['TripleDot', [8411]], ['triplus', [10809]], ['trisb', [10701]], ['tritime', [10811]], ['trpezium', [9186]], ['Tscr', [119983]], ['tscr', [120009]], ['TScy', [1062]], ['tscy', [1094]], ['TSHcy', [1035]], ['tshcy', [1115]], ['Tstrok', [358]], ['tstrok', [359]], ['twixt', [8812]], ['twoheadleftarrow', [8606]], ['twoheadrightarrow', [8608]], ['Uacute', [218]], ['uacute', [250]], ['uarr', [8593]], ['Uarr', [8607]], ['uArr', [8657]], ['Uarrocir', [10569]], ['Ubrcy', [1038]], ['ubrcy', [1118]], ['Ubreve', [364]], ['ubreve', [365]], ['Ucirc', [219]], ['ucirc', [251]], ['Ucy', [1059]], ['ucy', [1091]], ['udarr', [8645]], ['Udblac', [368]], ['udblac', [369]], ['udhar', [10606]], ['ufisht', [10622]], ['Ufr', [120088]], ['ufr', [120114]], ['Ugrave', [217]], ['ugrave', [249]], ['uHar', [10595]], ['uharl', [8639]], ['uharr', [8638]], ['uhblk', [9600]], ['ulcorn', [8988]], ['ulcorner', [8988]], ['ulcrop', [8975]], ['ultri', [9720]], ['Umacr', [362]], ['umacr', [363]], ['uml', [168]], ['UnderBar', [95]], ['UnderBrace', [9183]], ['UnderBracket', [9141]], ['UnderParenthesis', [9181]], ['Union', [8899]], ['UnionPlus', [8846]], ['Uogon', [370]], ['uogon', [371]], ['Uopf', [120140]], ['uopf', [120166]], ['UpArrowBar', [10514]], ['uparrow', [8593]], ['UpArrow', [8593]], ['Uparrow', [8657]], ['UpArrowDownArrow', [8645]], ['updownarrow', [8597]], ['UpDownArrow', [8597]], ['Updownarrow', [8661]], ['UpEquilibrium', [10606]], ['upharpoonleft', [8639]], ['upharpoonright', [8638]], ['uplus', [8846]], ['UpperLeftArrow', [8598]], ['UpperRightArrow', [8599]], ['upsi', [965]], ['Upsi', [978]], ['upsih', [978]], ['Upsilon', [933]], ['upsilon', [965]], ['UpTeeArrow', [8613]], ['UpTee', [8869]], ['upuparrows', [8648]], ['urcorn', [8989]], ['urcorner', [8989]], ['urcrop', [8974]], ['Uring', [366]], ['uring', [367]], ['urtri', [9721]], ['Uscr', [119984]], ['uscr', [120010]], ['utdot', [8944]], ['Utilde', [360]], ['utilde', [361]], ['utri', [9653]], ['utrif', [9652]], ['uuarr', [8648]], ['Uuml', [220]], ['uuml', [252]], ['uwangle', [10663]], ['vangrt', [10652]], ['varepsilon', [1013]], ['varkappa', [1008]], ['varnothing', [8709]], ['varphi', [981]], ['varpi', [982]], ['varpropto', [8733]], ['varr', [8597]], ['vArr', [8661]], ['varrho', [1009]], ['varsigma', [962]], ['varsubsetneq', [8842, 65024]], ['varsubsetneqq', [10955, 65024]], ['varsupsetneq', [8843, 65024]], ['varsupsetneqq', [10956, 65024]], ['vartheta', [977]], ['vartriangleleft', [8882]], ['vartriangleright', [8883]], ['vBar', [10984]], ['Vbar', [10987]], ['vBarv', [10985]], ['Vcy', [1042]], ['vcy', [1074]], ['vdash', [8866]], ['vDash', [8872]], ['Vdash', [8873]], ['VDash', [8875]], ['Vdashl', [10982]], ['veebar', [8891]], ['vee', [8744]], ['Vee', [8897]], ['veeeq', [8794]], ['vellip', [8942]], ['verbar', [124]], ['Verbar', [8214]], ['vert', [124]], ['Vert', [8214]], ['VerticalBar', [8739]], ['VerticalLine', [124]], ['VerticalSeparator', [10072]], ['VerticalTilde', [8768]], ['VeryThinSpace', [8202]], ['Vfr', [120089]], ['vfr', [120115]], ['vltri', [8882]], ['vnsub', [8834, 8402]], ['vnsup', [8835, 8402]], ['Vopf', [120141]], ['vopf', [120167]], ['vprop', [8733]], ['vrtri', [8883]], ['Vscr', [119985]], ['vscr', [120011]], ['vsubnE', [10955, 65024]], ['vsubne', [8842, 65024]], ['vsupnE', [10956, 65024]], ['vsupne', [8843, 65024]], ['Vvdash', [8874]], ['vzigzag', [10650]], ['Wcirc', [372]], ['wcirc', [373]], ['wedbar', [10847]], ['wedge', [8743]], ['Wedge', [8896]], ['wedgeq', [8793]], ['weierp', [8472]], ['Wfr', [120090]], ['wfr', [120116]], ['Wopf', [120142]], ['wopf', [120168]], ['wp', [8472]], ['wr', [8768]], ['wreath', [8768]], ['Wscr', [119986]], ['wscr', [120012]], ['xcap', [8898]], ['xcirc', [9711]], ['xcup', [8899]], ['xdtri', [9661]], ['Xfr', [120091]], ['xfr', [120117]], ['xharr', [10231]], ['xhArr', [10234]], ['Xi', [926]], ['xi', [958]], ['xlarr', [10229]], ['xlArr', [10232]], ['xmap', [10236]], ['xnis', [8955]], ['xodot', [10752]], ['Xopf', [120143]], ['xopf', [120169]], ['xoplus', [10753]], ['xotime', [10754]], ['xrarr', [10230]], ['xrArr', [10233]], ['Xscr', [119987]], ['xscr', [120013]], ['xsqcup', [10758]], ['xuplus', [10756]], ['xutri', [9651]], ['xvee', [8897]], ['xwedge', [8896]], ['Yacute', [221]], ['yacute', [253]], ['YAcy', [1071]], ['yacy', [1103]], ['Ycirc', [374]], ['ycirc', [375]], ['Ycy', [1067]], ['ycy', [1099]], ['yen', [165]], ['Yfr', [120092]], ['yfr', [120118]], ['YIcy', [1031]], ['yicy', [1111]], ['Yopf', [120144]], ['yopf', [120170]], ['Yscr', [119988]], ['yscr', [120014]], ['YUcy', [1070]], ['yucy', [1102]], ['yuml', [255]], ['Yuml', [376]], ['Zacute', [377]], ['zacute', [378]], ['Zcaron', [381]], ['zcaron', [382]], ['Zcy', [1047]], ['zcy', [1079]], ['Zdot', [379]], ['zdot', [380]], ['zeetrf', [8488]], ['ZeroWidthSpace', [8203]], ['Zeta', [918]], ['zeta', [950]], ['zfr', [120119]], ['Zfr', [8488]], ['ZHcy', [1046]], ['zhcy', [1078]], ['zigrarr', [8669]], ['zopf', [120171]], ['Zopf', [8484]], ['Zscr', [119989]], ['zscr', [120015]], ['zwj', [8205]], ['zwnj', [8204]]];\nvar alphaIndex = {};\nvar charIndex = {};\ncreateIndexes(alphaIndex, charIndex);\nvar Html5Entities = /** @class */ (function () {\n function Html5Entities() {\n }\n Html5Entities.prototype.decode = function (str) {\n if (!str || !str.length) {\n return '';\n }\n return str.replace(/&(#?[\\w\\d]+);?/g, function (s, entity) {\n var chr;\n if (entity.charAt(0) === \"#\") {\n var code = entity.charAt(1) === 'x' ?\n parseInt(entity.substr(2).toLowerCase(), 16) :\n parseInt(entity.substr(1));\n if (!(isNaN(code) || code < -32768 || code > 65535)) {\n chr = String.fromCharCode(code);\n }\n }\n else {\n chr = alphaIndex[entity];\n }\n return chr || s;\n });\n };\n Html5Entities.decode = function (str) {\n return new Html5Entities().decode(str);\n };\n Html5Entities.prototype.encode = function (str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var charInfo = charIndex[str.charCodeAt(i)];\n if (charInfo) {\n var alpha = charInfo[str.charCodeAt(i + 1)];\n if (alpha) {\n i++;\n }\n else {\n alpha = charInfo[''];\n }\n if (alpha) {\n result += \"&\" + alpha + \";\";\n i++;\n continue;\n }\n }\n result += str.charAt(i);\n i++;\n }\n return result;\n };\n Html5Entities.encode = function (str) {\n return new Html5Entities().encode(str);\n };\n Html5Entities.prototype.encodeNonUTF = function (str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var c = str.charCodeAt(i);\n var charInfo = charIndex[c];\n if (charInfo) {\n var alpha = charInfo[str.charCodeAt(i + 1)];\n if (alpha) {\n i++;\n }\n else {\n alpha = charInfo[''];\n }\n if (alpha) {\n result += \"&\" + alpha + \";\";\n i++;\n continue;\n }\n }\n if (c < 32 || c > 126) {\n result += '&#' + c + ';';\n }\n else {\n result += str.charAt(i);\n }\n i++;\n }\n return result;\n };\n Html5Entities.encodeNonUTF = function (str) {\n return new Html5Entities().encodeNonUTF(str);\n };\n Html5Entities.prototype.encodeNonASCII = function (str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var c = str.charCodeAt(i);\n if (c <= 255) {\n result += str[i++];\n continue;\n }\n result += '&#' + c + ';';\n i++;\n }\n return result;\n };\n Html5Entities.encodeNonASCII = function (str) {\n return new Html5Entities().encodeNonASCII(str);\n };\n return Html5Entities;\n}());\nexports.Html5Entities = Html5Entities;\nfunction createIndexes(alphaIndex, charIndex) {\n var i = ENTITIES.length;\n while (i--) {\n var e = ENTITIES[i];\n var alpha = e[0];\n var chars = e[1];\n var chr = chars[0];\n var addChar = (chr < 32 || chr > 126) || chr === 62 || chr === 60 || chr === 38 || chr === 34 || chr === 39;\n var charInfo = void 0;\n if (addChar) {\n charInfo = charIndex[chr] = charIndex[chr] || {};\n }\n if (chars[1]) {\n var chr2 = chars[1];\n alphaIndex[alpha] = String.fromCharCode(chr) + String.fromCharCode(chr2);\n addChar && (charInfo[chr2] = alpha);\n }\n else {\n alphaIndex[alpha] = String.fromCharCode(chr);\n addChar && (charInfo[''] = alpha);\n }\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvaHRtbC1lbnRpdGllcy9saWIvaHRtbDUtZW50aXRpZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaHRtbC1lbnRpdGllcy9saWIvaHRtbDUtZW50aXRpZXMuanM/MTdmZiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBFTlRJVElFUyA9IFtbJ0FhY3V0ZScsIFsxOTNdXSwgWydhYWN1dGUnLCBbMjI1XV0sIFsnQWJyZXZlJywgWzI1OF1dLCBbJ2FicmV2ZScsIFsyNTldXSwgWydhYycsIFs4NzY2XV0sIFsnYWNkJywgWzg3NjddXSwgWydhY0UnLCBbODc2NiwgODE5XV0sIFsnQWNpcmMnLCBbMTk0XV0sIFsnYWNpcmMnLCBbMjI2XV0sIFsnYWN1dGUnLCBbMTgwXV0sIFsnQWN5JywgWzEwNDBdXSwgWydhY3knLCBbMTA3Ml1dLCBbJ0FFbGlnJywgWzE5OF1dLCBbJ2FlbGlnJywgWzIzMF1dLCBbJ2FmJywgWzgyODldXSwgWydBZnInLCBbMTIwMDY4XV0sIFsnYWZyJywgWzEyMDA5NF1dLCBbJ0FncmF2ZScsIFsxOTJdXSwgWydhZ3JhdmUnLCBbMjI0XV0sIFsnYWxlZnN5bScsIFs4NTAxXV0sIFsnYWxlcGgnLCBbODUwMV1dLCBbJ0FscGhhJywgWzkxM11dLCBbJ2FscGhhJywgWzk0NV1dLCBbJ0FtYWNyJywgWzI1Nl1dLCBbJ2FtYWNyJywgWzI1N11dLCBbJ2FtYWxnJywgWzEwODE1XV0sIFsnYW1wJywgWzM4XV0sIFsnQU1QJywgWzM4XV0sIFsnYW5kYW5kJywgWzEwODM3XV0sIFsnQW5kJywgWzEwODM1XV0sIFsnYW5kJywgWzg3NDNdXSwgWydhbmRkJywgWzEwODQ0XV0sIFsnYW5kc2xvcGUnLCBbMTA4NDBdXSwgWydhbmR2JywgWzEwODQyXV0sIFsnYW5nJywgWzg3MzZdXSwgWydhbmdlJywgWzEwNjYwXV0sIFsnYW5nbGUnLCBbODczNl1dLCBbJ2FuZ21zZGFhJywgWzEwNjY0XV0sIFsnYW5nbXNkYWInLCBbMTA2NjVdXSwgWydhbmdtc2RhYycsIFsxMDY2Nl1dLCBbJ2FuZ21zZGFkJywgWzEwNjY3XV0sIFsnYW5nbXNkYWUnLCBbMTA2NjhdXSwgWydhbmdtc2RhZicsIFsxMDY2OV1dLCBbJ2FuZ21zZGFnJywgWzEwNjcwXV0sIFsnYW5nbXNkYWgnLCBbMTA2NzFdXSwgWydhbmdtc2QnLCBbODczN11dLCBbJ2FuZ3J0JywgWzg3MzVdXSwgWydhbmdydHZiJywgWzg4OTRdXSwgWydhbmdydHZiZCcsIFsxMDY1M11dLCBbJ2FuZ3NwaCcsIFs4NzM4XV0sIFsnYW5nc3QnLCBbMTk3XV0sIFsnYW5nemFycicsIFs5MDg0XV0sIFsnQW9nb24nLCBbMjYwXV0sIFsnYW9nb24nLCBbMjYxXV0sIFsnQW9wZicsIFsxMjAxMjBdXSwgWydhb3BmJywgWzEyMDE0Nl1dLCBbJ2FwYWNpcicsIFsxMDg2M11dLCBbJ2FwJywgWzg3NzZdXSwgWydhcEUnLCBbMTA4NjRdXSwgWydhcGUnLCBbODc3OF1dLCBbJ2FwaWQnLCBbODc3OV1dLCBbJ2Fwb3MnLCBbMzldXSwgWydBcHBseUZ1bmN0aW9uJywgWzgyODldXSwgWydhcHByb3gnLCBbODc3Nl1dLCBbJ2FwcHJveGVxJywgWzg3NzhdXSwgWydBcmluZycsIFsxOTddXSwgWydhcmluZycsIFsyMjldXSwgWydBc2NyJywgWzExOTk2NF1dLCBbJ2FzY3InLCBbMTE5OTkwXV0sIFsnQXNzaWduJywgWzg3ODhdXSwgWydhc3QnLCBbNDJdXSwgWydhc3ltcCcsIFs4Nzc2XV0sIFsnYXN5bXBlcScsIFs4NzgxXV0sIFsnQXRpbGRlJywgWzE5NV1dLCBbJ2F0aWxkZScsIFsyMjddXSwgWydBdW1sJywgWzE5Nl1dLCBbJ2F1bWwnLCBbMjI4XV0sIFsnYXdjb25pbnQnLCBbODc1NV1dLCBbJ2F3aW50JywgWzEwNzY5XV0sIFsnYmFja2NvbmcnLCBbODc4MF1dLCBbJ2JhY2tlcHNpbG9uJywgWzEwMTRdXSwgWydiYWNrcHJpbWUnLCBbODI0NV1dLCBbJ2JhY2tzaW0nLCBbODc2NV1dLCBbJ2JhY2tzaW1lcScsIFs4OTA5XV0sIFsnQmFja3NsYXNoJywgWzg3MjZdXSwgWydCYXJ2JywgWzEwOTgzXV0sIFsnYmFydmVlJywgWzg4OTNdXSwgWydiYXJ3ZWQnLCBbODk2NV1dLCBbJ0JhcndlZCcsIFs4OTY2XV0sIFsnYmFyd2VkZ2UnLCBbODk2NV1dLCBbJ2JicmsnLCBbOTE0MV1dLCBbJ2Jicmt0YnJrJywgWzkxNDJdXSwgWydiY29uZycsIFs4NzgwXV0sIFsnQmN5JywgWzEwNDFdXSwgWydiY3knLCBbMTA3M11dLCBbJ2JkcXVvJywgWzgyMjJdXSwgWydiZWNhdXMnLCBbODc1N11dLCBbJ2JlY2F1c2UnLCBbODc1N11dLCBbJ0JlY2F1c2UnLCBbODc1N11dLCBbJ2JlbXB0eXYnLCBbMTA2NzJdXSwgWydiZXBzaScsIFsxMDE0XV0sIFsnYmVybm91JywgWzg0OTJdXSwgWydCZXJub3VsbGlzJywgWzg0OTJdXSwgWydCZXRhJywgWzkxNF1dLCBbJ2JldGEnLCBbOTQ2XV0sIFsnYmV0aCcsIFs4NTAyXV0sIFsnYmV0d2VlbicsIFs4ODEyXV0sIFsnQmZyJywgWzEyMDA2OV1dLCBbJ2JmcicsIFsxMjAwOTVdXSwgWydiaWdjYXAnLCBbODg5OF1dLCBbJ2JpZ2NpcmMnLCBbOTcxMV1dLCBbJ2JpZ2N1cCcsIFs4ODk5XV0sIFsnYmlnb2RvdCcsIFsxMDc1Ml1dLCBbJ2JpZ29wbHVzJywgWzEwNzUzXV0sIFsnYmlnb3RpbWVzJywgWzEwNzU0XV0sIFsnYmlnc3FjdXAnLCBbMTA3NThdXSwgWydiaWdzdGFyJywgWzk3MzNdXSwgWydiaWd0cmlhbmdsZWRvd24nLCBbOTY2MV1dLCBbJ2JpZ3RyaWFuZ2xldXAnLCBbOTY1MV1dLCBbJ2JpZ3VwbHVzJywgWzEwNzU2XV0sIFsnYmlndmVlJywgWzg4OTddXSwgWydiaWd3ZWRnZScsIFs4ODk2XV0sIFsnYmthcm93JywgWzEwNTA5XV0sIFsnYmxhY2tsb3plbmdlJywgWzEwNzMxXV0sIFsnYmxhY2tzcXVhcmUnLCBbOTY0Ml1dLCBbJ2JsYWNrdHJpYW5nbGUnLCBbOTY1Ml1dLCBbJ2JsYWNrdHJpYW5nbGVkb3duJywgWzk2NjJdXSwgWydibGFja3RyaWFuZ2xlbGVmdCcsIFs5NjY2XV0sIFsnYmxhY2t0cmlhbmdsZXJpZ2h0JywgWzk2NTZdXSwgWydibGFuaycsIFs5MjUxXV0sIFsnYmxrMTInLCBbOTYxOF1dLCBbJ2JsazE0JywgWzk2MTddXSwgWydibGszNCcsIFs5NjE5XV0sIFsnYmxvY2snLCBbOTYwOF1dLCBbJ2JuZScsIFs2MSwgODQyMV1dLCBbJ2JuZXF1aXYnLCBbODgwMSwgODQyMV1dLCBbJ2JOb3QnLCBbMTA5ODldXSwgWydibm90JywgWzg5NzZdXSwgWydCb3BmJywgWzEyMDEyMV1dLCBbJ2JvcGYnLCBbMTIwMTQ3XV0sIFsnYm90JywgWzg4NjldXSwgWydib3R0b20nLCBbODg2OV1dLCBbJ2Jvd3RpZScsIFs4OTA0XV0sIFsnYm94Ym94JywgWzEwNjk3XV0sIFsnYm94ZGwnLCBbOTQ4OF1dLCBbJ2JveGRMJywgWzk1NTddXSwgWydib3hEbCcsIFs5NTU4XV0sIFsnYm94REwnLCBbOTU1OV1dLCBbJ2JveGRyJywgWzk0ODRdXSwgWydib3hkUicsIFs5NTU0XV0sIFsnYm94RHInLCBbOTU1NV1dLCBbJ2JveERSJywgWzk1NTZdXSwgWydib3hoJywgWzk0NzJdXSwgWydib3hIJywgWzk1NTJdXSwgWydib3hoZCcsIFs5NTE2XV0sIFsnYm94SGQnLCBbOTU3Ml1dLCBbJ2JveGhEJywgWzk1NzNdXSwgWydib3hIRCcsIFs5NTc0XV0sIFsnYm94aHUnLCBbOTUyNF1dLCBbJ2JveEh1JywgWzk1NzVdXSwgWydib3hoVScsIFs5NTc2XV0sIFsnYm94SFUnLCBbOTU3N11dLCBbJ2JveG1pbnVzJywgWzg4NjNdXSwgWydib3hwbHVzJywgWzg4NjJdXSwgWydib3h0aW1lcycsIFs4ODY0XV0sIFsnYm94dWwnLCBbOTQ5Nl1dLCBbJ2JveHVMJywgWzk1NjNdXSwgWydib3hVbCcsIFs5NTY0XV0sIFsnYm94VUwnLCBbOTU2NV1dLCBbJ2JveHVyJywgWzk0OTJdXSwgWydib3h1UicsIFs5NTYwXV0sIFsnYm94VXInLCBbOTU2MV1dLCBbJ2JveFVSJywgWzk1NjJdXSwgWydib3h2JywgWzk0NzRdXSwgWydib3hWJywgWzk1NTNdXSwgWydib3h2aCcsIFs5NTMyXV0sIFsnYm94dkgnLCBbOTU3OF1dLCBbJ2JveFZoJywgWzk1NzldXSwgWydib3hWSCcsIFs5NTgwXV0sIFsnYm94dmwnLCBbOTUwOF1dLCBbJ2JveHZMJywgWzk1NjldXSwgWydib3hWbCcsIFs5NTcwXV0sIFsnYm94VkwnLCBbOTU3MV1dLCBbJ2JveHZyJywgWzk1MDBdXSwgWydib3h2UicsIFs5NTY2XV0sIFsnYm94VnInLCBbOTU2N11dLCBbJ2JveFZSJywgWzk1NjhdXSwgWydicHJpbWUnLCBbODI0NV1dLCBbJ2JyZXZlJywgWzcyOF1dLCBbJ0JyZXZlJywgWzcyOF1dLCBbJ2JydmJhcicsIFsxNjZdXSwgWydic2NyJywgWzExOTk5MV1dLCBbJ0JzY3InLCBbODQ5Ml1dLCBbJ2JzZW1pJywgWzgyNzFdXSwgWydic2ltJywgWzg3NjVdXSwgWydic2ltZScsIFs4OTA5XV0sIFsnYnNvbGInLCBbMTA2OTNdXSwgWydic29sJywgWzkyXV0sIFsnYnNvbGhzdWInLCBbMTAxODRdXSwgWydidWxsJywgWzgyMjZdXSwgWydidWxsZXQnLCBbODIyNl1dLCBbJ2J1bXAnLCBbODc4Ml1dLCBbJ2J1bXBFJywgWzEwOTI2XV0sIFsnYnVtcGUnLCBbODc4M11dLCBbJ0J1bXBlcScsIFs4NzgyXV0sIFsnYnVtcGVxJywgWzg3ODNdXSwgWydDYWN1dGUnLCBbMjYyXV0sIFsnY2FjdXRlJywgWzI2M11dLCBbJ2NhcGFuZCcsIFsxMDgyMF1dLCBbJ2NhcGJyY3VwJywgWzEwODI1XV0sIFsnY2FwY2FwJywgWzEwODI3XV0sIFsnY2FwJywgWzg3NDVdXSwgWydDYXAnLCBbODkxNF1dLCBbJ2NhcGN1cCcsIFsxMDgyM11dLCBbJ2NhcGRvdCcsIFsxMDgxNl1dLCBbJ0NhcGl0YWxEaWZmZXJlbnRpYWxEJywgWzg1MTddXSwgWydjYXBzJywgWzg3NDUsIDY1MDI0XV0sIFsnY2FyZXQnLCBbODI1N11dLCBbJ2Nhcm9uJywgWzcxMV1dLCBbJ0NheWxleXMnLCBbODQ5M11dLCBbJ2NjYXBzJywgWzEwODI5XV0sIFsnQ2Nhcm9uJywgWzI2OF1dLCBbJ2NjYXJvbicsIFsyNjldXSwgWydDY2VkaWwnLCBbMTk5XV0sIFsnY2NlZGlsJywgWzIzMV1dLCBbJ0NjaXJjJywgWzI2NF1dLCBbJ2NjaXJjJywgWzI2NV1dLCBbJ0Njb25pbnQnLCBbODc1Ml1dLCBbJ2NjdXBzJywgWzEwODI4XV0sIFsnY2N1cHNzbScsIFsxMDgzMl1dLCBbJ0Nkb3QnLCBbMjY2XV0sIFsnY2RvdCcsIFsyNjddXSwgWydjZWRpbCcsIFsxODRdXSwgWydDZWRpbGxhJywgWzE4NF1dLCBbJ2NlbXB0eXYnLCBbMTA2NzRdXSwgWydjZW50JywgWzE2Ml1dLCBbJ2NlbnRlcmRvdCcsIFsxODNdXSwgWydDZW50ZXJEb3QnLCBbMTgzXV0sIFsnY2ZyJywgWzEyMDA5Nl1dLCBbJ0NmcicsIFs4NDkzXV0sIFsnQ0hjeScsIFsxMDYzXV0sIFsnY2hjeScsIFsxMDk1XV0sIFsnY2hlY2snLCBbMTAwMDNdXSwgWydjaGVja21hcmsnLCBbMTAwMDNdXSwgWydDaGknLCBbOTM1XV0sIFsnY2hpJywgWzk2N11dLCBbJ2NpcmMnLCBbNzEwXV0sIFsnY2lyY2VxJywgWzg3OTFdXSwgWydjaXJjbGVhcnJvd2xlZnQnLCBbODYzNF1dLCBbJ2NpcmNsZWFycm93cmlnaHQnLCBbODYzNV1dLCBbJ2NpcmNsZWRhc3QnLCBbODg1OV1dLCBbJ2NpcmNsZWRjaXJjJywgWzg4NThdXSwgWydjaXJjbGVkZGFzaCcsIFs4ODYxXV0sIFsnQ2lyY2xlRG90JywgWzg4NTddXSwgWydjaXJjbGVkUicsIFsxNzRdXSwgWydjaXJjbGVkUycsIFs5NDE2XV0sIFsnQ2lyY2xlTWludXMnLCBbODg1NF1dLCBbJ0NpcmNsZVBsdXMnLCBbODg1M11dLCBbJ0NpcmNsZVRpbWVzJywgWzg4NTVdXSwgWydjaXInLCBbOTY3NV1dLCBbJ2NpckUnLCBbMTA2OTFdXSwgWydjaXJlJywgWzg3OTFdXSwgWydjaXJmbmludCcsIFsxMDc2OF1dLCBbJ2Npcm1pZCcsIFsxMDk5MV1dLCBbJ2NpcnNjaXInLCBbMTA2OTBdXSwgWydDbG9ja3dpc2VDb250b3VySW50ZWdyYWwnLCBbODc1NF1dLCBbJ2NsdWJzJywgWzk4MjddXSwgWydjbHVic3VpdCcsIFs5ODI3XV0sIFsnY29sb24nLCBbNThdXSwgWydDb2xvbicsIFs4NzU5XV0sIFsnQ29sb25lJywgWzEwODY4XV0sIFsnY29sb25lJywgWzg3ODhdXSwgWydjb2xvbmVxJywgWzg3ODhdXSwgWydjb21tYScsIFs0NF1dLCBbJ2NvbW1hdCcsIFs2NF1dLCBbJ2NvbXAnLCBbODcwNV1dLCBbJ2NvbXBmbicsIFs4NzI4XV0sIFsnY29tcGxlbWVudCcsIFs4NzA1XV0sIFsnY29tcGxleGVzJywgWzg0NTBdXSwgWydjb25nJywgWzg3NzNdXSwgWydjb25nZG90JywgWzEwODYxXV0sIFsnQ29uZ3J1ZW50JywgWzg4MDFdXSwgWydjb25pbnQnLCBbODc1MF1dLCBbJ0NvbmludCcsIFs4NzUxXV0sIFsnQ29udG91ckludGVncmFsJywgWzg3NTBdXSwgWydjb3BmJywgWzEyMDE0OF1dLCBbJ0NvcGYnLCBbODQ1MF1dLCBbJ2NvcHJvZCcsIFs4NzIwXV0sIFsnQ29wcm9kdWN0JywgWzg3MjBdXSwgWydjb3B5JywgWzE2OV1dLCBbJ0NPUFknLCBbMTY5XV0sIFsnY29weXNyJywgWzg0NzFdXSwgWydDb3VudGVyQ2xvY2t3aXNlQ29udG91ckludGVncmFsJywgWzg3NTVdXSwgWydjcmFycicsIFs4NjI5XV0sIFsnY3Jvc3MnLCBbMTAwMDddXSwgWydDcm9zcycsIFsxMDc5OV1dLCBbJ0NzY3InLCBbMTE5OTY2XV0sIFsnY3NjcicsIFsxMTk5OTJdXSwgWydjc3ViJywgWzEwOTU5XV0sIFsnY3N1YmUnLCBbMTA5NjFdXSwgWydjc3VwJywgWzEwOTYwXV0sIFsnY3N1cGUnLCBbMTA5NjJdXSwgWydjdGRvdCcsIFs4OTQzXV0sIFsnY3VkYXJybCcsIFsxMDU1Ml1dLCBbJ2N1ZGFycnInLCBbMTA1NDldXSwgWydjdWVwcicsIFs4OTI2XV0sIFsnY3Vlc2MnLCBbODkyN11dLCBbJ2N1bGFycicsIFs4NjMwXV0sIFsnY3VsYXJycCcsIFsxMDU1N11dLCBbJ2N1cGJyY2FwJywgWzEwODI0XV0sIFsnY3VwY2FwJywgWzEwODIyXV0sIFsnQ3VwQ2FwJywgWzg3ODFdXSwgWydjdXAnLCBbODc0Nl1dLCBbJ0N1cCcsIFs4OTE1XV0sIFsnY3VwY3VwJywgWzEwODI2XV0sIFsnY3VwZG90JywgWzg4NDVdXSwgWydjdXBvcicsIFsxMDgyMV1dLCBbJ2N1cHMnLCBbODc0NiwgNjUwMjRdXSwgWydjdXJhcnInLCBbODYzMV1dLCBbJ2N1cmFycm0nLCBbMTA1NTZdXSwgWydjdXJseWVxcHJlYycsIFs4OTI2XV0sIFsnY3VybHllcXN1Y2MnLCBbODkyN11dLCBbJ2N1cmx5dmVlJywgWzg5MTBdXSwgWydjdXJseXdlZGdlJywgWzg5MTFdXSwgWydjdXJyZW4nLCBbMTY0XV0sIFsnY3VydmVhcnJvd2xlZnQnLCBbODYzMF1dLCBbJ2N1cnZlYXJyb3dyaWdodCcsIFs4NjMxXV0sIFsnY3V2ZWUnLCBbODkxMF1dLCBbJ2N1d2VkJywgWzg5MTFdXSwgWydjd2NvbmludCcsIFs4NzU0XV0sIFsnY3dpbnQnLCBbODc1M11dLCBbJ2N5bGN0eScsIFs5MDA1XV0sIFsnZGFnZ2VyJywgWzgyMjRdXSwgWydEYWdnZXInLCBbODIyNV1dLCBbJ2RhbGV0aCcsIFs4NTA0XV0sIFsnZGFycicsIFs4NTk1XV0sIFsnRGFycicsIFs4NjA5XV0sIFsnZEFycicsIFs4NjU5XV0sIFsnZGFzaCcsIFs4MjA4XV0sIFsnRGFzaHYnLCBbMTA5ODBdXSwgWydkYXNodicsIFs4ODY3XV0sIFsnZGJrYXJvdycsIFsxMDUxMV1dLCBbJ2RibGFjJywgWzczM11dLCBbJ0RjYXJvbicsIFsyNzBdXSwgWydkY2Fyb24nLCBbMjcxXV0sIFsnRGN5JywgWzEwNDRdXSwgWydkY3knLCBbMTA3Nl1dLCBbJ2RkYWdnZXInLCBbODIyNV1dLCBbJ2RkYXJyJywgWzg2NTBdXSwgWydERCcsIFs4NTE3XV0sIFsnZGQnLCBbODUxOF1dLCBbJ0REb3RyYWhkJywgWzEwNTEzXV0sIFsnZGRvdHNlcScsIFsxMDg3MV1dLCBbJ2RlZycsIFsxNzZdXSwgWydEZWwnLCBbODcxMV1dLCBbJ0RlbHRhJywgWzkxNl1dLCBbJ2RlbHRhJywgWzk0OF1dLCBbJ2RlbXB0eXYnLCBbMTA2NzNdXSwgWydkZmlzaHQnLCBbMTA2MjNdXSwgWydEZnInLCBbMTIwMDcxXV0sIFsnZGZyJywgWzEyMDA5N11dLCBbJ2RIYXInLCBbMTA1OTddXSwgWydkaGFybCcsIFs4NjQzXV0sIFsnZGhhcnInLCBbODY0Ml1dLCBbJ0RpYWNyaXRpY2FsQWN1dGUnLCBbMTgwXV0sIFsnRGlhY3JpdGljYWxEb3QnLCBbNzI5XV0sIFsnRGlhY3JpdGljYWxEb3VibGVBY3V0ZScsIFs3MzNdXSwgWydEaWFjcml0aWNhbEdyYXZlJywgWzk2XV0sIFsnRGlhY3JpdGljYWxUaWxkZScsIFs3MzJdXSwgWydkaWFtJywgWzg5MDBdXSwgWydkaWFtb25kJywgWzg5MDBdXSwgWydEaWFtb25kJywgWzg5MDBdXSwgWydkaWFtb25kc3VpdCcsIFs5ODMwXV0sIFsnZGlhbXMnLCBbOTgzMF1dLCBbJ2RpZScsIFsxNjhdXSwgWydEaWZmZXJlbnRpYWxEJywgWzg1MThdXSwgWydkaWdhbW1hJywgWzk4OV1dLCBbJ2Rpc2luJywgWzg5NDZdXSwgWydkaXYnLCBbMjQ3XV0sIFsnZGl2aWRlJywgWzI0N11dLCBbJ2RpdmlkZW9udGltZXMnLCBbODkwM11dLCBbJ2Rpdm9ueCcsIFs4OTAzXV0sIFsnREpjeScsIFsxMDI2XV0sIFsnZGpjeScsIFsxMTA2XV0sIFsnZGxjb3JuJywgWzg5OTBdXSwgWydkbGNyb3AnLCBbODk3M11dLCBbJ2RvbGxhcicsIFszNl1dLCBbJ0RvcGYnLCBbMTIwMTIzXV0sIFsnZG9wZicsIFsxMjAxNDldXSwgWydEb3QnLCBbMTY4XV0sIFsnZG90JywgWzcyOV1dLCBbJ0RvdERvdCcsIFs4NDEyXV0sIFsnZG90ZXEnLCBbODc4NF1dLCBbJ2RvdGVxZG90JywgWzg3ODVdXSwgWydEb3RFcXVhbCcsIFs4Nzg0XV0sIFsnZG90bWludXMnLCBbODc2MF1dLCBbJ2RvdHBsdXMnLCBbODcyNF1dLCBbJ2RvdHNxdWFyZScsIFs4ODY1XV0sIFsnZG91YmxlYmFyd2VkZ2UnLCBbODk2Nl1dLCBbJ0RvdWJsZUNvbnRvdXJJbnRlZ3JhbCcsIFs4NzUxXV0sIFsnRG91YmxlRG90JywgWzE2OF1dLCBbJ0RvdWJsZURvd25BcnJvdycsIFs4NjU5XV0sIFsnRG91YmxlTGVmdEFycm93JywgWzg2NTZdXSwgWydEb3VibGVMZWZ0UmlnaHRBcnJvdycsIFs4NjYwXV0sIFsnRG91YmxlTGVmdFRlZScsIFsxMDk4MF1dLCBbJ0RvdWJsZUxvbmdMZWZ0QXJyb3cnLCBbMTAyMzJdXSwgWydEb3VibGVMb25nTGVmdFJpZ2h0QXJyb3cnLCBbMTAyMzRdXSwgWydEb3VibGVMb25nUmlnaHRBcnJvdycsIFsxMDIzM11dLCBbJ0RvdWJsZVJpZ2h0QXJyb3cnLCBbODY1OF1dLCBbJ0RvdWJsZVJpZ2h0VGVlJywgWzg4NzJdXSwgWydEb3VibGVVcEFycm93JywgWzg2NTddXSwgWydEb3VibGVVcERvd25BcnJvdycsIFs4NjYxXV0sIFsnRG91YmxlVmVydGljYWxCYXInLCBbODc0MV1dLCBbJ0Rvd25BcnJvd0JhcicsIFsxMDUxNV1dLCBbJ2Rvd25hcnJvdycsIFs4NTk1XV0sIFsnRG93bkFycm93JywgWzg1OTVdXSwgWydEb3duYXJyb3cnLCBbODY1OV1dLCBbJ0Rvd25BcnJvd1VwQXJyb3cnLCBbODY5M11dLCBbJ0Rvd25CcmV2ZScsIFs3ODVdXSwgWydkb3duZG93bmFycm93cycsIFs4NjUwXV0sIFsnZG93bmhhcnBvb25sZWZ0JywgWzg2NDNdXSwgWydkb3duaGFycG9vbnJpZ2h0JywgWzg2NDJdXSwgWydEb3duTGVmdFJpZ2h0VmVjdG9yJywgWzEwNTc2XV0sIFsnRG93bkxlZnRUZWVWZWN0b3InLCBbMTA1OTBdXSwgWydEb3duTGVmdFZlY3RvckJhcicsIFsxMDU4Ml1dLCBbJ0Rvd25MZWZ0VmVjdG9yJywgWzg2MzddXSwgWydEb3duUmlnaHRUZWVWZWN0b3InLCBbMTA1OTFdXSwgWydEb3duUmlnaHRWZWN0b3JCYXInLCBbMTA1ODNdXSwgWydEb3duUmlnaHRWZWN0b3InLCBbODY0MV1dLCBbJ0Rvd25UZWVBcnJvdycsIFs4NjE1XV0sIFsnRG93blRlZScsIFs4ODY4XV0sIFsnZHJia2Fyb3cnLCBbMTA1MTJdXSwgWydkcmNvcm4nLCBbODk5MV1dLCBbJ2RyY3JvcCcsIFs4OTcyXV0sIFsnRHNjcicsIFsxMTk5NjddXSwgWydkc2NyJywgWzExOTk5M11dLCBbJ0RTY3knLCBbMTAyOV1dLCBbJ2RzY3knLCBbMTEwOV1dLCBbJ2Rzb2wnLCBbMTA3NDJdXSwgWydEc3Ryb2snLCBbMjcyXV0sIFsnZHN0cm9rJywgWzI3M11dLCBbJ2R0ZG90JywgWzg5NDVdXSwgWydkdHJpJywgWzk2NjNdXSwgWydkdHJpZicsIFs5NjYyXV0sIFsnZHVhcnInLCBbODY5M11dLCBbJ2R1aGFyJywgWzEwNjA3XV0sIFsnZHdhbmdsZScsIFsxMDY2Ml1dLCBbJ0RaY3knLCBbMTAzOV1dLCBbJ2R6Y3knLCBbMTExOV1dLCBbJ2R6aWdyYXJyJywgWzEwMjM5XV0sIFsnRWFjdXRlJywgWzIwMV1dLCBbJ2VhY3V0ZScsIFsyMzNdXSwgWydlYXN0ZXInLCBbMTA4NjJdXSwgWydFY2Fyb24nLCBbMjgyXV0sIFsnZWNhcm9uJywgWzI4M11dLCBbJ0VjaXJjJywgWzIwMl1dLCBbJ2VjaXJjJywgWzIzNF1dLCBbJ2VjaXInLCBbODc5MF1dLCBbJ2Vjb2xvbicsIFs4Nzg5XV0sIFsnRWN5JywgWzEwNjldXSwgWydlY3knLCBbMTEwMV1dLCBbJ2VERG90JywgWzEwODcxXV0sIFsnRWRvdCcsIFsyNzhdXSwgWydlZG90JywgWzI3OV1dLCBbJ2VEb3QnLCBbODc4NV1dLCBbJ2VlJywgWzg1MTldXSwgWydlZkRvdCcsIFs4Nzg2XV0sIFsnRWZyJywgWzEyMDA3Ml1dLCBbJ2VmcicsIFsxMjAwOThdXSwgWydlZycsIFsxMDkwNl1dLCBbJ0VncmF2ZScsIFsyMDBdXSwgWydlZ3JhdmUnLCBbMjMyXV0sIFsnZWdzJywgWzEwOTAyXV0sIFsnZWdzZG90JywgWzEwOTA0XV0sIFsnZWwnLCBbMTA5MDVdXSwgWydFbGVtZW50JywgWzg3MTJdXSwgWydlbGludGVycycsIFs5MTkxXV0sIFsnZWxsJywgWzg0NjddXSwgWydlbHMnLCBbMTA5MDFdXSwgWydlbHNkb3QnLCBbMTA5MDNdXSwgWydFbWFjcicsIFsyNzRdXSwgWydlbWFjcicsIFsyNzVdXSwgWydlbXB0eScsIFs4NzA5XV0sIFsnZW1wdHlzZXQnLCBbODcwOV1dLCBbJ0VtcHR5U21hbGxTcXVhcmUnLCBbOTcyM11dLCBbJ2VtcHR5dicsIFs4NzA5XV0sIFsnRW1wdHlWZXJ5U21hbGxTcXVhcmUnLCBbOTY0M11dLCBbJ2Vtc3AxMycsIFs4MTk2XV0sIFsnZW1zcDE0JywgWzgxOTddXSwgWydlbXNwJywgWzgxOTVdXSwgWydFTkcnLCBbMzMwXV0sIFsnZW5nJywgWzMzMV1dLCBbJ2Vuc3AnLCBbODE5NF1dLCBbJ0VvZ29uJywgWzI4MF1dLCBbJ2VvZ29uJywgWzI4MV1dLCBbJ0VvcGYnLCBbMTIwMTI0XV0sIFsnZW9wZicsIFsxMjAxNTBdXSwgWydlcGFyJywgWzg5MTddXSwgWydlcGFyc2wnLCBbMTA3MjNdXSwgWydlcGx1cycsIFsxMDg2NV1dLCBbJ2Vwc2knLCBbOTQ5XV0sIFsnRXBzaWxvbicsIFs5MTddXSwgWydlcHNpbG9uJywgWzk0OV1dLCBbJ2Vwc2l2JywgWzEwMTNdXSwgWydlcWNpcmMnLCBbODc5MF1dLCBbJ2VxY29sb24nLCBbODc4OV1dLCBbJ2Vxc2ltJywgWzg3NzBdXSwgWydlcXNsYW50Z3RyJywgWzEwOTAyXV0sIFsnZXFzbGFudGxlc3MnLCBbMTA5MDFdXSwgWydFcXVhbCcsIFsxMDg2OV1dLCBbJ2VxdWFscycsIFs2MV1dLCBbJ0VxdWFsVGlsZGUnLCBbODc3MF1dLCBbJ2VxdWVzdCcsIFs4Nzk5XV0sIFsnRXF1aWxpYnJpdW0nLCBbODY1Ml1dLCBbJ2VxdWl2JywgWzg4MDFdXSwgWydlcXVpdkREJywgWzEwODcyXV0sIFsnZXF2cGFyc2wnLCBbMTA3MjVdXSwgWydlcmFycicsIFsxMDYwOV1dLCBbJ2VyRG90JywgWzg3ODddXSwgWydlc2NyJywgWzg0OTVdXSwgWydFc2NyJywgWzg0OTZdXSwgWydlc2RvdCcsIFs4Nzg0XV0sIFsnRXNpbScsIFsxMDg2N11dLCBbJ2VzaW0nLCBbODc3MF1dLCBbJ0V0YScsIFs5MTldXSwgWydldGEnLCBbOTUxXV0sIFsnRVRIJywgWzIwOF1dLCBbJ2V0aCcsIFsyNDBdXSwgWydFdW1sJywgWzIwM11dLCBbJ2V1bWwnLCBbMjM1XV0sIFsnZXVybycsIFs4MzY0XV0sIFsnZXhjbCcsIFszM11dLCBbJ2V4aXN0JywgWzg3MDddXSwgWydFeGlzdHMnLCBbODcwN11dLCBbJ2V4cGVjdGF0aW9uJywgWzg0OTZdXSwgWydleHBvbmVudGlhbGUnLCBbODUxOV1dLCBbJ0V4cG9uZW50aWFsRScsIFs4NTE5XV0sIFsnZmFsbGluZ2RvdHNlcScsIFs4Nzg2XV0sIFsnRmN5JywgWzEwNjBdXSwgWydmY3knLCBbMTA5Ml1dLCBbJ2ZlbWFsZScsIFs5NzkyXV0sIFsnZmZpbGlnJywgWzY0MjU5XV0sIFsnZmZsaWcnLCBbNjQyNTZdXSwgWydmZmxsaWcnLCBbNjQyNjBdXSwgWydGZnInLCBbMTIwMDczXV0sIFsnZmZyJywgWzEyMDA5OV1dLCBbJ2ZpbGlnJywgWzY0MjU3XV0sIFsnRmlsbGVkU21hbGxTcXVhcmUnLCBbOTcyNF1dLCBbJ0ZpbGxlZFZlcnlTbWFsbFNxdWFyZScsIFs5NjQyXV0sIFsnZmpsaWcnLCBbMTAyLCAxMDZdXSwgWydmbGF0JywgWzk4MzddXSwgWydmbGxpZycsIFs2NDI1OF1dLCBbJ2ZsdG5zJywgWzk2NDldXSwgWydmbm9mJywgWzQwMl1dLCBbJ0ZvcGYnLCBbMTIwMTI1XV0sIFsnZm9wZicsIFsxMjAxNTFdXSwgWydmb3JhbGwnLCBbODcwNF1dLCBbJ0ZvckFsbCcsIFs4NzA0XV0sIFsnZm9yaycsIFs4OTE2XV0sIFsnZm9ya3YnLCBbMTA5NjldXSwgWydGb3VyaWVydHJmJywgWzg0OTddXSwgWydmcGFydGludCcsIFsxMDc2NV1dLCBbJ2ZyYWMxMicsIFsxODldXSwgWydmcmFjMTMnLCBbODUzMV1dLCBbJ2ZyYWMxNCcsIFsxODhdXSwgWydmcmFjMTUnLCBbODUzM11dLCBbJ2ZyYWMxNicsIFs4NTM3XV0sIFsnZnJhYzE4JywgWzg1MzldXSwgWydmcmFjMjMnLCBbODUzMl1dLCBbJ2ZyYWMyNScsIFs4NTM0XV0sIFsnZnJhYzM0JywgWzE5MF1dLCBbJ2ZyYWMzNScsIFs4NTM1XV0sIFsnZnJhYzM4JywgWzg1NDBdXSwgWydmcmFjNDUnLCBbODUzNl1dLCBbJ2ZyYWM1NicsIFs4NTM4XV0sIFsnZnJhYzU4JywgWzg1NDFdXSwgWydmcmFjNzgnLCBbODU0Ml1dLCBbJ2ZyYXNsJywgWzgyNjBdXSwgWydmcm93bicsIFs4OTk0XV0sIFsnZnNjcicsIFsxMTk5OTVdXSwgWydGc2NyJywgWzg0OTddXSwgWydnYWN1dGUnLCBbNTAxXV0sIFsnR2FtbWEnLCBbOTE1XV0sIFsnZ2FtbWEnLCBbOTQ3XV0sIFsnR2FtbWFkJywgWzk4OF1dLCBbJ2dhbW1hZCcsIFs5ODldXSwgWydnYXAnLCBbMTA4ODZdXSwgWydHYnJldmUnLCBbMjg2XV0sIFsnZ2JyZXZlJywgWzI4N11dLCBbJ0djZWRpbCcsIFsyOTBdXSwgWydHY2lyYycsIFsyODRdXSwgWydnY2lyYycsIFsyODVdXSwgWydHY3knLCBbMTA0M11dLCBbJ2djeScsIFsxMDc1XV0sIFsnR2RvdCcsIFsyODhdXSwgWydnZG90JywgWzI4OV1dLCBbJ2dlJywgWzg4MDVdXSwgWydnRScsIFs4ODA3XV0sIFsnZ0VsJywgWzEwODkyXV0sIFsnZ2VsJywgWzg5MjNdXSwgWydnZXEnLCBbODgwNV1dLCBbJ2dlcXEnLCBbODgwN11dLCBbJ2dlcXNsYW50JywgWzEwODc4XV0sIFsnZ2VzY2MnLCBbMTA5MjFdXSwgWydnZXMnLCBbMTA4NzhdXSwgWydnZXNkb3QnLCBbMTA4ODBdXSwgWydnZXNkb3RvJywgWzEwODgyXV0sIFsnZ2VzZG90b2wnLCBbMTA4ODRdXSwgWydnZXNsJywgWzg5MjMsIDY1MDI0XV0sIFsnZ2VzbGVzJywgWzEwOTAwXV0sIFsnR2ZyJywgWzEyMDA3NF1dLCBbJ2dmcicsIFsxMjAxMDBdXSwgWydnZycsIFs4ODExXV0sIFsnR2cnLCBbODkyMV1dLCBbJ2dnZycsIFs4OTIxXV0sIFsnZ2ltZWwnLCBbODUwM11dLCBbJ0dKY3knLCBbMTAyN11dLCBbJ2dqY3knLCBbMTEwN11dLCBbJ2dsYScsIFsxMDkxN11dLCBbJ2dsJywgWzg4MjNdXSwgWydnbEUnLCBbMTA4OThdXSwgWydnbGonLCBbMTA5MTZdXSwgWydnbmFwJywgWzEwODkwXV0sIFsnZ25hcHByb3gnLCBbMTA4OTBdXSwgWydnbmUnLCBbMTA4ODhdXSwgWydnbkUnLCBbODgwOV1dLCBbJ2duZXEnLCBbMTA4ODhdXSwgWydnbmVxcScsIFs4ODA5XV0sIFsnZ25zaW0nLCBbODkzNV1dLCBbJ0dvcGYnLCBbMTIwMTI2XV0sIFsnZ29wZicsIFsxMjAxNTJdXSwgWydncmF2ZScsIFs5Nl1dLCBbJ0dyZWF0ZXJFcXVhbCcsIFs4ODA1XV0sIFsnR3JlYXRlckVxdWFsTGVzcycsIFs4OTIzXV0sIFsnR3JlYXRlckZ1bGxFcXVhbCcsIFs4ODA3XV0sIFsnR3JlYXRlckdyZWF0ZXInLCBbMTA5MTRdXSwgWydHcmVhdGVyTGVzcycsIFs4ODIzXV0sIFsnR3JlYXRlclNsYW50RXF1YWwnLCBbMTA4NzhdXSwgWydHcmVhdGVyVGlsZGUnLCBbODgxOV1dLCBbJ0dzY3InLCBbMTE5OTcwXV0sIFsnZ3NjcicsIFs4NDU4XV0sIFsnZ3NpbScsIFs4ODE5XV0sIFsnZ3NpbWUnLCBbMTA4OTRdXSwgWydnc2ltbCcsIFsxMDg5Nl1dLCBbJ2d0Y2MnLCBbMTA5MTldXSwgWydndGNpcicsIFsxMDg3NF1dLCBbJ2d0JywgWzYyXV0sIFsnR1QnLCBbNjJdXSwgWydHdCcsIFs4ODExXV0sIFsnZ3Rkb3QnLCBbODkxOV1dLCBbJ2d0bFBhcicsIFsxMDY0NV1dLCBbJ2d0cXVlc3QnLCBbMTA4NzZdXSwgWydndHJhcHByb3gnLCBbMTA4ODZdXSwgWydndHJhcnInLCBbMTA2MTZdXSwgWydndHJkb3QnLCBbODkxOV1dLCBbJ2d0cmVxbGVzcycsIFs4OTIzXV0sIFsnZ3RyZXFxbGVzcycsIFsxMDg5Ml1dLCBbJ2d0cmxlc3MnLCBbODgyM11dLCBbJ2d0cnNpbScsIFs4ODE5XV0sIFsnZ3ZlcnRuZXFxJywgWzg4MDksIDY1MDI0XV0sIFsnZ3ZuRScsIFs4ODA5LCA2NTAyNF1dLCBbJ0hhY2VrJywgWzcxMV1dLCBbJ2hhaXJzcCcsIFs4MjAyXV0sIFsnaGFsZicsIFsxODldXSwgWydoYW1pbHQnLCBbODQ1OV1dLCBbJ0hBUkRjeScsIFsxMDY2XV0sIFsnaGFyZGN5JywgWzEwOThdXSwgWydoYXJyY2lyJywgWzEwNTY4XV0sIFsnaGFycicsIFs4NTk2XV0sIFsnaEFycicsIFs4NjYwXV0sIFsnaGFycncnLCBbODYyMV1dLCBbJ0hhdCcsIFs5NF1dLCBbJ2hiYXInLCBbODQ2M11dLCBbJ0hjaXJjJywgWzI5Ml1dLCBbJ2hjaXJjJywgWzI5M11dLCBbJ2hlYXJ0cycsIFs5ODI5XV0sIFsnaGVhcnRzdWl0JywgWzk4MjldXSwgWydoZWxsaXAnLCBbODIzMF1dLCBbJ2hlcmNvbicsIFs4ODg5XV0sIFsnaGZyJywgWzEyMDEwMV1dLCBbJ0hmcicsIFs4NDYwXV0sIFsnSGlsYmVydFNwYWNlJywgWzg0NTldXSwgWydoa3NlYXJvdycsIFsxMDUzM11dLCBbJ2hrc3dhcm93JywgWzEwNTM0XV0sIFsnaG9hcnInLCBbODcwM11dLCBbJ2hvbXRodCcsIFs4NzYzXV0sIFsnaG9va2xlZnRhcnJvdycsIFs4NjE3XV0sIFsnaG9va3JpZ2h0YXJyb3cnLCBbODYxOF1dLCBbJ2hvcGYnLCBbMTIwMTUzXV0sIFsnSG9wZicsIFs4NDYxXV0sIFsnaG9yYmFyJywgWzgyMTNdXSwgWydIb3Jpem9udGFsTGluZScsIFs5NDcyXV0sIFsnaHNjcicsIFsxMTk5OTddXSwgWydIc2NyJywgWzg0NTldXSwgWydoc2xhc2gnLCBbODQ2M11dLCBbJ0hzdHJvaycsIFsyOTRdXSwgWydoc3Ryb2snLCBbMjk1XV0sIFsnSHVtcERvd25IdW1wJywgWzg3ODJdXSwgWydIdW1wRXF1YWwnLCBbODc4M11dLCBbJ2h5YnVsbCcsIFs4MjU5XV0sIFsnaHlwaGVuJywgWzgyMDhdXSwgWydJYWN1dGUnLCBbMjA1XV0sIFsnaWFjdXRlJywgWzIzN11dLCBbJ2ljJywgWzgyOTFdXSwgWydJY2lyYycsIFsyMDZdXSwgWydpY2lyYycsIFsyMzhdXSwgWydJY3knLCBbMTA0OF1dLCBbJ2ljeScsIFsxMDgwXV0sIFsnSWRvdCcsIFszMDRdXSwgWydJRWN5JywgWzEwNDVdXSwgWydpZWN5JywgWzEwNzddXSwgWydpZXhjbCcsIFsxNjFdXSwgWydpZmYnLCBbODY2MF1dLCBbJ2lmcicsIFsxMjAxMDJdXSwgWydJZnInLCBbODQ2NV1dLCBbJ0lncmF2ZScsIFsyMDRdXSwgWydpZ3JhdmUnLCBbMjM2XV0sIFsnaWknLCBbODUyMF1dLCBbJ2lpaWludCcsIFsxMDc2NF1dLCBbJ2lpaW50JywgWzg3NDldXSwgWydpaW5maW4nLCBbMTA3MTZdXSwgWydpaW90YScsIFs4NDg5XV0sIFsnSUpsaWcnLCBbMzA2XV0sIFsnaWpsaWcnLCBbMzA3XV0sIFsnSW1hY3InLCBbMjk4XV0sIFsnaW1hY3InLCBbMjk5XV0sIFsnaW1hZ2UnLCBbODQ2NV1dLCBbJ0ltYWdpbmFyeUknLCBbODUyMF1dLCBbJ2ltYWdsaW5lJywgWzg0NjRdXSwgWydpbWFncGFydCcsIFs4NDY1XV0sIFsnaW1hdGgnLCBbMzA1XV0sIFsnSW0nLCBbODQ2NV1dLCBbJ2ltb2YnLCBbODg4N11dLCBbJ2ltcGVkJywgWzQzN11dLCBbJ0ltcGxpZXMnLCBbODY1OF1dLCBbJ2luY2FyZScsIFs4NDUzXV0sIFsnaW4nLCBbODcxMl1dLCBbJ2luZmluJywgWzg3MzRdXSwgWydpbmZpbnRpZScsIFsxMDcxN11dLCBbJ2lub2RvdCcsIFszMDVdXSwgWydpbnRjYWwnLCBbODg5MF1dLCBbJ2ludCcsIFs4NzQ3XV0sIFsnSW50JywgWzg3NDhdXSwgWydpbnRlZ2VycycsIFs4NDg0XV0sIFsnSW50ZWdyYWwnLCBbODc0N11dLCBbJ2ludGVyY2FsJywgWzg4OTBdXSwgWydJbnRlcnNlY3Rpb24nLCBbODg5OF1dLCBbJ2ludGxhcmhrJywgWzEwNzc1XV0sIFsnaW50cHJvZCcsIFsxMDgxMl1dLCBbJ0ludmlzaWJsZUNvbW1hJywgWzgyOTFdXSwgWydJbnZpc2libGVUaW1lcycsIFs4MjkwXV0sIFsnSU9jeScsIFsxMDI1XV0sIFsnaW9jeScsIFsxMTA1XV0sIFsnSW9nb24nLCBbMzAyXV0sIFsnaW9nb24nLCBbMzAzXV0sIFsnSW9wZicsIFsxMjAxMjhdXSwgWydpb3BmJywgWzEyMDE1NF1dLCBbJ0lvdGEnLCBbOTIxXV0sIFsnaW90YScsIFs5NTNdXSwgWydpcHJvZCcsIFsxMDgxMl1dLCBbJ2lxdWVzdCcsIFsxOTFdXSwgWydpc2NyJywgWzExOTk5OF1dLCBbJ0lzY3InLCBbODQ2NF1dLCBbJ2lzaW4nLCBbODcxMl1dLCBbJ2lzaW5kb3QnLCBbODk0OV1dLCBbJ2lzaW5FJywgWzg5NTNdXSwgWydpc2lucycsIFs4OTQ4XV0sIFsnaXNpbnN2JywgWzg5NDddXSwgWydpc2ludicsIFs4NzEyXV0sIFsnaXQnLCBbODI5MF1dLCBbJ0l0aWxkZScsIFsyOTZdXSwgWydpdGlsZGUnLCBbMjk3XV0sIFsnSXVrY3knLCBbMTAzMF1dLCBbJ2l1a2N5JywgWzExMTBdXSwgWydJdW1sJywgWzIwN11dLCBbJ2l1bWwnLCBbMjM5XV0sIFsnSmNpcmMnLCBbMzA4XV0sIFsnamNpcmMnLCBbMzA5XV0sIFsnSmN5JywgWzEwNDldXSwgWydqY3knLCBbMTA4MV1dLCBbJ0pmcicsIFsxMjAwNzddXSwgWydqZnInLCBbMTIwMTAzXV0sIFsnam1hdGgnLCBbNTY3XV0sIFsnSm9wZicsIFsxMjAxMjldXSwgWydqb3BmJywgWzEyMDE1NV1dLCBbJ0pzY3InLCBbMTE5OTczXV0sIFsnanNjcicsIFsxMTk5OTldXSwgWydKc2VyY3knLCBbMTAzMl1dLCBbJ2pzZXJjeScsIFsxMTEyXV0sIFsnSnVrY3knLCBbMTAyOF1dLCBbJ2p1a2N5JywgWzExMDhdXSwgWydLYXBwYScsIFs5MjJdXSwgWydrYXBwYScsIFs5NTRdXSwgWydrYXBwYXYnLCBbMTAwOF1dLCBbJ0tjZWRpbCcsIFszMTBdXSwgWydrY2VkaWwnLCBbMzExXV0sIFsnS2N5JywgWzEwNTBdXSwgWydrY3knLCBbMTA4Ml1dLCBbJ0tmcicsIFsxMjAwNzhdXSwgWydrZnInLCBbMTIwMTA0XV0sIFsna2dyZWVuJywgWzMxMl1dLCBbJ0tIY3knLCBbMTA2MV1dLCBbJ2toY3knLCBbMTA5M11dLCBbJ0tKY3knLCBbMTAzNl1dLCBbJ2tqY3knLCBbMTExNl1dLCBbJ0tvcGYnLCBbMTIwMTMwXV0sIFsna29wZicsIFsxMjAxNTZdXSwgWydLc2NyJywgWzExOTk3NF1dLCBbJ2tzY3InLCBbMTIwMDAwXV0sIFsnbEFhcnInLCBbODY2Nl1dLCBbJ0xhY3V0ZScsIFszMTNdXSwgWydsYWN1dGUnLCBbMzE0XV0sIFsnbGFlbXB0eXYnLCBbMTA2NzZdXSwgWydsYWdyYW4nLCBbODQ2Nl1dLCBbJ0xhbWJkYScsIFs5MjNdXSwgWydsYW1iZGEnLCBbOTU1XV0sIFsnbGFuZycsIFsxMDIxNl1dLCBbJ0xhbmcnLCBbMTAyMThdXSwgWydsYW5nZCcsIFsxMDY0MV1dLCBbJ2xhbmdsZScsIFsxMDIxNl1dLCBbJ2xhcCcsIFsxMDg4NV1dLCBbJ0xhcGxhY2V0cmYnLCBbODQ2Nl1dLCBbJ2xhcXVvJywgWzE3MV1dLCBbJ2xhcnJiJywgWzg2NzZdXSwgWydsYXJyYmZzJywgWzEwNTI3XV0sIFsnbGFycicsIFs4NTkyXV0sIFsnTGFycicsIFs4NjA2XV0sIFsnbEFycicsIFs4NjU2XV0sIFsnbGFycmZzJywgWzEwNTI1XV0sIFsnbGFycmhrJywgWzg2MTddXSwgWydsYXJybHAnLCBbODYxOV1dLCBbJ2xhcnJwbCcsIFsxMDU1M11dLCBbJ2xhcnJzaW0nLCBbMTA2MTFdXSwgWydsYXJydGwnLCBbODYxMF1dLCBbJ2xhdGFpbCcsIFsxMDUyMV1dLCBbJ2xBdGFpbCcsIFsxMDUyM11dLCBbJ2xhdCcsIFsxMDkyM11dLCBbJ2xhdGUnLCBbMTA5MjVdXSwgWydsYXRlcycsIFsxMDkyNSwgNjUwMjRdXSwgWydsYmFycicsIFsxMDUwOF1dLCBbJ2xCYXJyJywgWzEwNTEwXV0sIFsnbGJicmsnLCBbMTAwOThdXSwgWydsYnJhY2UnLCBbMTIzXV0sIFsnbGJyYWNrJywgWzkxXV0sIFsnbGJya2UnLCBbMTA2MzVdXSwgWydsYnJrc2xkJywgWzEwNjM5XV0sIFsnbGJya3NsdScsIFsxMDYzN11dLCBbJ0xjYXJvbicsIFszMTddXSwgWydsY2Fyb24nLCBbMzE4XV0sIFsnTGNlZGlsJywgWzMxNV1dLCBbJ2xjZWRpbCcsIFszMTZdXSwgWydsY2VpbCcsIFs4OTY4XV0sIFsnbGN1YicsIFsxMjNdXSwgWydMY3knLCBbMTA1MV1dLCBbJ2xjeScsIFsxMDgzXV0sIFsnbGRjYScsIFsxMDU1MF1dLCBbJ2xkcXVvJywgWzgyMjBdXSwgWydsZHF1b3InLCBbODIyMl1dLCBbJ2xkcmRoYXInLCBbMTA1OTldXSwgWydsZHJ1c2hhcicsIFsxMDU3MV1dLCBbJ2xkc2gnLCBbODYyNl1dLCBbJ2xlJywgWzg4MDRdXSwgWydsRScsIFs4ODA2XV0sIFsnTGVmdEFuZ2xlQnJhY2tldCcsIFsxMDIxNl1dLCBbJ0xlZnRBcnJvd0JhcicsIFs4Njc2XV0sIFsnbGVmdGFycm93JywgWzg1OTJdXSwgWydMZWZ0QXJyb3cnLCBbODU5Ml1dLCBbJ0xlZnRhcnJvdycsIFs4NjU2XV0sIFsnTGVmdEFycm93UmlnaHRBcnJvdycsIFs4NjQ2XV0sIFsnbGVmdGFycm93dGFpbCcsIFs4NjEwXV0sIFsnTGVmdENlaWxpbmcnLCBbODk2OF1dLCBbJ0xlZnREb3VibGVCcmFja2V0JywgWzEwMjE0XV0sIFsnTGVmdERvd25UZWVWZWN0b3InLCBbMTA1OTNdXSwgWydMZWZ0RG93blZlY3RvckJhcicsIFsxMDU4NV1dLCBbJ0xlZnREb3duVmVjdG9yJywgWzg2NDNdXSwgWydMZWZ0Rmxvb3InLCBbODk3MF1dLCBbJ2xlZnRoYXJwb29uZG93bicsIFs4NjM3XV0sIFsnbGVmdGhhcnBvb251cCcsIFs4NjM2XV0sIFsnbGVmdGxlZnRhcnJvd3MnLCBbODY0N11dLCBbJ2xlZnRyaWdodGFycm93JywgWzg1OTZdXSwgWydMZWZ0UmlnaHRBcnJvdycsIFs4NTk2XV0sIFsnTGVmdHJpZ2h0YXJyb3cnLCBbODY2MF1dLCBbJ2xlZnRyaWdodGFycm93cycsIFs4NjQ2XV0sIFsnbGVmdHJpZ2h0aGFycG9vbnMnLCBbODY1MV1dLCBbJ2xlZnRyaWdodHNxdWlnYXJyb3cnLCBbODYyMV1dLCBbJ0xlZnRSaWdodFZlY3RvcicsIFsxMDU3NF1dLCBbJ0xlZnRUZWVBcnJvdycsIFs4NjEyXV0sIFsnTGVmdFRlZScsIFs4ODY3XV0sIFsnTGVmdFRlZVZlY3RvcicsIFsxMDU4Nl1dLCBbJ2xlZnR0aHJlZXRpbWVzJywgWzg5MDddXSwgWydMZWZ0VHJpYW5nbGVCYXInLCBbMTA3MDNdXSwgWydMZWZ0VHJpYW5nbGUnLCBbODg4Ml1dLCBbJ0xlZnRUcmlhbmdsZUVxdWFsJywgWzg4ODRdXSwgWydMZWZ0VXBEb3duVmVjdG9yJywgWzEwNTc3XV0sIFsnTGVmdFVwVGVlVmVjdG9yJywgWzEwNTkyXV0sIFsnTGVmdFVwVmVjdG9yQmFyJywgWzEwNTg0XV0sIFsnTGVmdFVwVmVjdG9yJywgWzg2MzldXSwgWydMZWZ0VmVjdG9yQmFyJywgWzEwNTc4XV0sIFsnTGVmdFZlY3RvcicsIFs4NjM2XV0sIFsnbEVnJywgWzEwODkxXV0sIFsnbGVnJywgWzg5MjJdXSwgWydsZXEnLCBbODgwNF1dLCBbJ2xlcXEnLCBbODgwNl1dLCBbJ2xlcXNsYW50JywgWzEwODc3XV0sIFsnbGVzY2MnLCBbMTA5MjBdXSwgWydsZXMnLCBbMTA4NzddXSwgWydsZXNkb3QnLCBbMTA4NzldXSwgWydsZXNkb3RvJywgWzEwODgxXV0sIFsnbGVzZG90b3InLCBbMTA4ODNdXSwgWydsZXNnJywgWzg5MjIsIDY1MDI0XV0sIFsnbGVzZ2VzJywgWzEwODk5XV0sIFsnbGVzc2FwcHJveCcsIFsxMDg4NV1dLCBbJ2xlc3Nkb3QnLCBbODkxOF1dLCBbJ2xlc3NlcWd0cicsIFs4OTIyXV0sIFsnbGVzc2VxcWd0cicsIFsxMDg5MV1dLCBbJ0xlc3NFcXVhbEdyZWF0ZXInLCBbODkyMl1dLCBbJ0xlc3NGdWxsRXF1YWwnLCBbODgwNl1dLCBbJ0xlc3NHcmVhdGVyJywgWzg4MjJdXSwgWydsZXNzZ3RyJywgWzg4MjJdXSwgWydMZXNzTGVzcycsIFsxMDkxM11dLCBbJ2xlc3NzaW0nLCBbODgxOF1dLCBbJ0xlc3NTbGFudEVxdWFsJywgWzEwODc3XV0sIFsnTGVzc1RpbGRlJywgWzg4MThdXSwgWydsZmlzaHQnLCBbMTA2MjBdXSwgWydsZmxvb3InLCBbODk3MF1dLCBbJ0xmcicsIFsxMjAwNzldXSwgWydsZnInLCBbMTIwMTA1XV0sIFsnbGcnLCBbODgyMl1dLCBbJ2xnRScsIFsxMDg5N11dLCBbJ2xIYXInLCBbMTA1OTRdXSwgWydsaGFyZCcsIFs4NjM3XV0sIFsnbGhhcnUnLCBbODYzNl1dLCBbJ2xoYXJ1bCcsIFsxMDYwMl1dLCBbJ2xoYmxrJywgWzk2MDRdXSwgWydMSmN5JywgWzEwMzNdXSwgWydsamN5JywgWzExMTNdXSwgWydsbGFycicsIFs4NjQ3XV0sIFsnbGwnLCBbODgxMF1dLCBbJ0xsJywgWzg5MjBdXSwgWydsbGNvcm5lcicsIFs4OTkwXV0sIFsnTGxlZnRhcnJvdycsIFs4NjY2XV0sIFsnbGxoYXJkJywgWzEwNjAzXV0sIFsnbGx0cmknLCBbOTcyMl1dLCBbJ0xtaWRvdCcsIFszMTldXSwgWydsbWlkb3QnLCBbMzIwXV0sIFsnbG1vdXN0YWNoZScsIFs5MTM2XV0sIFsnbG1vdXN0JywgWzkxMzZdXSwgWydsbmFwJywgWzEwODg5XV0sIFsnbG5hcHByb3gnLCBbMTA4ODldXSwgWydsbmUnLCBbMTA4ODddXSwgWydsbkUnLCBbODgwOF1dLCBbJ2xuZXEnLCBbMTA4ODddXSwgWydsbmVxcScsIFs4ODA4XV0sIFsnbG5zaW0nLCBbODkzNF1dLCBbJ2xvYW5nJywgWzEwMjIwXV0sIFsnbG9hcnInLCBbODcwMV1dLCBbJ2xvYnJrJywgWzEwMjE0XV0sIFsnbG9uZ2xlZnRhcnJvdycsIFsxMDIyOV1dLCBbJ0xvbmdMZWZ0QXJyb3cnLCBbMTAyMjldXSwgWydMb25nbGVmdGFycm93JywgWzEwMjMyXV0sIFsnbG9uZ2xlZnRyaWdodGFycm93JywgWzEwMjMxXV0sIFsnTG9uZ0xlZnRSaWdodEFycm93JywgWzEwMjMxXV0sIFsnTG9uZ2xlZnRyaWdodGFycm93JywgWzEwMjM0XV0sIFsnbG9uZ21hcHN0bycsIFsxMDIzNl1dLCBbJ2xvbmdyaWdodGFycm93JywgWzEwMjMwXV0sIFsnTG9uZ1JpZ2h0QXJyb3cnLCBbMTAyMzBdXSwgWydMb25ncmlnaHRhcnJvdycsIFsxMDIzM11dLCBbJ2xvb3BhcnJvd2xlZnQnLCBbODYxOV1dLCBbJ2xvb3BhcnJvd3JpZ2h0JywgWzg2MjBdXSwgWydsb3BhcicsIFsxMDYyOV1dLCBbJ0xvcGYnLCBbMTIwMTMxXV0sIFsnbG9wZicsIFsxMjAxNTddXSwgWydsb3BsdXMnLCBbMTA3OTddXSwgWydsb3RpbWVzJywgWzEwODA0XV0sIFsnbG93YXN0JywgWzg3MjddXSwgWydsb3diYXInLCBbOTVdXSwgWydMb3dlckxlZnRBcnJvdycsIFs4NjAxXV0sIFsnTG93ZXJSaWdodEFycm93JywgWzg2MDBdXSwgWydsb3onLCBbOTY3NF1dLCBbJ2xvemVuZ2UnLCBbOTY3NF1dLCBbJ2xvemYnLCBbMTA3MzFdXSwgWydscGFyJywgWzQwXV0sIFsnbHBhcmx0JywgWzEwNjQzXV0sIFsnbHJhcnInLCBbODY0Nl1dLCBbJ2xyY29ybmVyJywgWzg5OTFdXSwgWydscmhhcicsIFs4NjUxXV0sIFsnbHJoYXJkJywgWzEwNjA1XV0sIFsnbHJtJywgWzgyMDZdXSwgWydscnRyaScsIFs4ODk1XV0sIFsnbHNhcXVvJywgWzgyNDldXSwgWydsc2NyJywgWzEyMDAwMV1dLCBbJ0xzY3InLCBbODQ2Nl1dLCBbJ2xzaCcsIFs4NjI0XV0sIFsnTHNoJywgWzg2MjRdXSwgWydsc2ltJywgWzg4MThdXSwgWydsc2ltZScsIFsxMDg5M11dLCBbJ2xzaW1nJywgWzEwODk1XV0sIFsnbHNxYicsIFs5MV1dLCBbJ2xzcXVvJywgWzgyMTZdXSwgWydsc3F1b3InLCBbODIxOF1dLCBbJ0xzdHJvaycsIFszMjFdXSwgWydsc3Ryb2snLCBbMzIyXV0sIFsnbHRjYycsIFsxMDkxOF1dLCBbJ2x0Y2lyJywgWzEwODczXV0sIFsnbHQnLCBbNjBdXSwgWydMVCcsIFs2MF1dLCBbJ0x0JywgWzg4MTBdXSwgWydsdGRvdCcsIFs4OTE4XV0sIFsnbHRocmVlJywgWzg5MDddXSwgWydsdGltZXMnLCBbODkwNV1dLCBbJ2x0bGFycicsIFsxMDYxNF1dLCBbJ2x0cXVlc3QnLCBbMTA4NzVdXSwgWydsdHJpJywgWzk2NjddXSwgWydsdHJpZScsIFs4ODg0XV0sIFsnbHRyaWYnLCBbOTY2Nl1dLCBbJ2x0clBhcicsIFsxMDY0Nl1dLCBbJ2x1cmRzaGFyJywgWzEwNTcwXV0sIFsnbHVydWhhcicsIFsxMDU5OF1dLCBbJ2x2ZXJ0bmVxcScsIFs4ODA4LCA2NTAyNF1dLCBbJ2x2bkUnLCBbODgwOCwgNjUwMjRdXSwgWydtYWNyJywgWzE3NV1dLCBbJ21hbGUnLCBbOTc5NF1dLCBbJ21hbHQnLCBbMTAwMTZdXSwgWydtYWx0ZXNlJywgWzEwMDE2XV0sIFsnTWFwJywgWzEwNTAxXV0sIFsnbWFwJywgWzg2MTRdXSwgWydtYXBzdG8nLCBbODYxNF1dLCBbJ21hcHN0b2Rvd24nLCBbODYxNV1dLCBbJ21hcHN0b2xlZnQnLCBbODYxMl1dLCBbJ21hcHN0b3VwJywgWzg2MTNdXSwgWydtYXJrZXInLCBbOTY0Nl1dLCBbJ21jb21tYScsIFsxMDc5M11dLCBbJ01jeScsIFsxMDUyXV0sIFsnbWN5JywgWzEwODRdXSwgWydtZGFzaCcsIFs4MjEyXV0sIFsnbUREb3QnLCBbODc2Ml1dLCBbJ21lYXN1cmVkYW5nbGUnLCBbODczN11dLCBbJ01lZGl1bVNwYWNlJywgWzgyODddXSwgWydNZWxsaW50cmYnLCBbODQ5OV1dLCBbJ01mcicsIFsxMjAwODBdXSwgWydtZnInLCBbMTIwMTA2XV0sIFsnbWhvJywgWzg0ODddXSwgWydtaWNybycsIFsxODFdXSwgWydtaWRhc3QnLCBbNDJdXSwgWydtaWRjaXInLCBbMTA5OTJdXSwgWydtaWQnLCBbODczOV1dLCBbJ21pZGRvdCcsIFsxODNdXSwgWydtaW51c2InLCBbODg2M11dLCBbJ21pbnVzJywgWzg3MjJdXSwgWydtaW51c2QnLCBbODc2MF1dLCBbJ21pbnVzZHUnLCBbMTA3OTRdXSwgWydNaW51c1BsdXMnLCBbODcyM11dLCBbJ21sY3AnLCBbMTA5NzFdXSwgWydtbGRyJywgWzgyMzBdXSwgWydtbnBsdXMnLCBbODcyM11dLCBbJ21vZGVscycsIFs4ODcxXV0sIFsnTW9wZicsIFsxMjAxMzJdXSwgWydtb3BmJywgWzEyMDE1OF1dLCBbJ21wJywgWzg3MjNdXSwgWydtc2NyJywgWzEyMDAwMl1dLCBbJ01zY3InLCBbODQ5OV1dLCBbJ21zdHBvcycsIFs4NzY2XV0sIFsnTXUnLCBbOTI0XV0sIFsnbXUnLCBbOTU2XV0sIFsnbXVsdGltYXAnLCBbODg4OF1dLCBbJ211bWFwJywgWzg4ODhdXSwgWyduYWJsYScsIFs4NzExXV0sIFsnTmFjdXRlJywgWzMyM11dLCBbJ25hY3V0ZScsIFszMjRdXSwgWyduYW5nJywgWzg3MzYsIDg0MDJdXSwgWyduYXAnLCBbODc3N11dLCBbJ25hcEUnLCBbMTA4NjQsIDgyNF1dLCBbJ25hcGlkJywgWzg3NzksIDgyNF1dLCBbJ25hcG9zJywgWzMyOV1dLCBbJ25hcHByb3gnLCBbODc3N11dLCBbJ25hdHVyYWwnLCBbOTgzOF1dLCBbJ25hdHVyYWxzJywgWzg0NjldXSwgWyduYXR1cicsIFs5ODM4XV0sIFsnbmJzcCcsIFsxNjBdXSwgWyduYnVtcCcsIFs4NzgyLCA4MjRdXSwgWyduYnVtcGUnLCBbODc4MywgODI0XV0sIFsnbmNhcCcsIFsxMDgxOV1dLCBbJ05jYXJvbicsIFszMjddXSwgWyduY2Fyb24nLCBbMzI4XV0sIFsnTmNlZGlsJywgWzMyNV1dLCBbJ25jZWRpbCcsIFszMjZdXSwgWyduY29uZycsIFs4Nzc1XV0sIFsnbmNvbmdkb3QnLCBbMTA4NjEsIDgyNF1dLCBbJ25jdXAnLCBbMTA4MThdXSwgWydOY3knLCBbMTA1M11dLCBbJ25jeScsIFsxMDg1XV0sIFsnbmRhc2gnLCBbODIxMV1dLCBbJ25lYXJoaycsIFsxMDUzMl1dLCBbJ25lYXJyJywgWzg1OTldXSwgWyduZUFycicsIFs4NjYzXV0sIFsnbmVhcnJvdycsIFs4NTk5XV0sIFsnbmUnLCBbODgwMF1dLCBbJ25lZG90JywgWzg3ODQsIDgyNF1dLCBbJ05lZ2F0aXZlTWVkaXVtU3BhY2UnLCBbODIwM11dLCBbJ05lZ2F0aXZlVGhpY2tTcGFjZScsIFs4MjAzXV0sIFsnTmVnYXRpdmVUaGluU3BhY2UnLCBbODIwM11dLCBbJ05lZ2F0aXZlVmVyeVRoaW5TcGFjZScsIFs4MjAzXV0sIFsnbmVxdWl2JywgWzg4MDJdXSwgWyduZXNlYXInLCBbMTA1MzZdXSwgWyduZXNpbScsIFs4NzcwLCA4MjRdXSwgWydOZXN0ZWRHcmVhdGVyR3JlYXRlcicsIFs4ODExXV0sIFsnTmVzdGVkTGVzc0xlc3MnLCBbODgxMF1dLCBbJ25leGlzdCcsIFs4NzA4XV0sIFsnbmV4aXN0cycsIFs4NzA4XV0sIFsnTmZyJywgWzEyMDA4MV1dLCBbJ25mcicsIFsxMjAxMDddXSwgWyduZ0UnLCBbODgwNywgODI0XV0sIFsnbmdlJywgWzg4MTddXSwgWyduZ2VxJywgWzg4MTddXSwgWyduZ2VxcScsIFs4ODA3LCA4MjRdXSwgWyduZ2Vxc2xhbnQnLCBbMTA4NzgsIDgyNF1dLCBbJ25nZXMnLCBbMTA4NzgsIDgyNF1dLCBbJ25HZycsIFs4OTIxLCA4MjRdXSwgWyduZ3NpbScsIFs4ODIxXV0sIFsnbkd0JywgWzg4MTEsIDg0MDJdXSwgWyduZ3QnLCBbODgxNV1dLCBbJ25ndHInLCBbODgxNV1dLCBbJ25HdHYnLCBbODgxMSwgODI0XV0sIFsnbmhhcnInLCBbODYyMl1dLCBbJ25oQXJyJywgWzg2NTRdXSwgWyduaHBhcicsIFsxMDk5NF1dLCBbJ25pJywgWzg3MTVdXSwgWyduaXMnLCBbODk1Nl1dLCBbJ25pc2QnLCBbODk1NF1dLCBbJ25pdicsIFs4NzE1XV0sIFsnTkpjeScsIFsxMDM0XV0sIFsnbmpjeScsIFsxMTE0XV0sIFsnbmxhcnInLCBbODYwMl1dLCBbJ25sQXJyJywgWzg2NTNdXSwgWydubGRyJywgWzgyMjldXSwgWydubEUnLCBbODgwNiwgODI0XV0sIFsnbmxlJywgWzg4MTZdXSwgWydubGVmdGFycm93JywgWzg2MDJdXSwgWyduTGVmdGFycm93JywgWzg2NTNdXSwgWydubGVmdHJpZ2h0YXJyb3cnLCBbODYyMl1dLCBbJ25MZWZ0cmlnaHRhcnJvdycsIFs4NjU0XV0sIFsnbmxlcScsIFs4ODE2XV0sIFsnbmxlcXEnLCBbODgwNiwgODI0XV0sIFsnbmxlcXNsYW50JywgWzEwODc3LCA4MjRdXSwgWydubGVzJywgWzEwODc3LCA4MjRdXSwgWydubGVzcycsIFs4ODE0XV0sIFsnbkxsJywgWzg5MjAsIDgyNF1dLCBbJ25sc2ltJywgWzg4MjBdXSwgWyduTHQnLCBbODgxMCwgODQwMl1dLCBbJ25sdCcsIFs4ODE0XV0sIFsnbmx0cmknLCBbODkzOF1dLCBbJ25sdHJpZScsIFs4OTQwXV0sIFsnbkx0dicsIFs4ODEwLCA4MjRdXSwgWydubWlkJywgWzg3NDBdXSwgWydOb0JyZWFrJywgWzgyODhdXSwgWydOb25CcmVha2luZ1NwYWNlJywgWzE2MF1dLCBbJ25vcGYnLCBbMTIwMTU5XV0sIFsnTm9wZicsIFs4NDY5XV0sIFsnTm90JywgWzEwOTg4XV0sIFsnbm90JywgWzE3Ml1dLCBbJ05vdENvbmdydWVudCcsIFs4ODAyXV0sIFsnTm90Q3VwQ2FwJywgWzg4MTNdXSwgWydOb3REb3VibGVWZXJ0aWNhbEJhcicsIFs4NzQyXV0sIFsnTm90RWxlbWVudCcsIFs4NzEzXV0sIFsnTm90RXF1YWwnLCBbODgwMF1dLCBbJ05vdEVxdWFsVGlsZGUnLCBbODc3MCwgODI0XV0sIFsnTm90RXhpc3RzJywgWzg3MDhdXSwgWydOb3RHcmVhdGVyJywgWzg4MTVdXSwgWydOb3RHcmVhdGVyRXF1YWwnLCBbODgxN11dLCBbJ05vdEdyZWF0ZXJGdWxsRXF1YWwnLCBbODgwNywgODI0XV0sIFsnTm90R3JlYXRlckdyZWF0ZXInLCBbODgxMSwgODI0XV0sIFsnTm90R3JlYXRlckxlc3MnLCBbODgyNV1dLCBbJ05vdEdyZWF0ZXJTbGFudEVxdWFsJywgWzEwODc4LCA4MjRdXSwgWydOb3RHcmVhdGVyVGlsZGUnLCBbODgyMV1dLCBbJ05vdEh1bXBEb3duSHVtcCcsIFs4NzgyLCA4MjRdXSwgWydOb3RIdW1wRXF1YWwnLCBbODc4MywgODI0XV0sIFsnbm90aW4nLCBbODcxM11dLCBbJ25vdGluZG90JywgWzg5NDksIDgyNF1dLCBbJ25vdGluRScsIFs4OTUzLCA4MjRdXSwgWydub3RpbnZhJywgWzg3MTNdXSwgWydub3RpbnZiJywgWzg5NTFdXSwgWydub3RpbnZjJywgWzg5NTBdXSwgWydOb3RMZWZ0VHJpYW5nbGVCYXInLCBbMTA3MDMsIDgyNF1dLCBbJ05vdExlZnRUcmlhbmdsZScsIFs4OTM4XV0sIFsnTm90TGVmdFRyaWFuZ2xlRXF1YWwnLCBbODk0MF1dLCBbJ05vdExlc3MnLCBbODgxNF1dLCBbJ05vdExlc3NFcXVhbCcsIFs4ODE2XV0sIFsnTm90TGVzc0dyZWF0ZXInLCBbODgyNF1dLCBbJ05vdExlc3NMZXNzJywgWzg4MTAsIDgyNF1dLCBbJ05vdExlc3NTbGFudEVxdWFsJywgWzEwODc3LCA4MjRdXSwgWydOb3RMZXNzVGlsZGUnLCBbODgyMF1dLCBbJ05vdE5lc3RlZEdyZWF0ZXJHcmVhdGVyJywgWzEwOTE0LCA4MjRdXSwgWydOb3ROZXN0ZWRMZXNzTGVzcycsIFsxMDkxMywgODI0XV0sIFsnbm90bmknLCBbODcxNl1dLCBbJ25vdG5pdmEnLCBbODcxNl1dLCBbJ25vdG5pdmInLCBbODk1OF1dLCBbJ25vdG5pdmMnLCBbODk1N11dLCBbJ05vdFByZWNlZGVzJywgWzg4MzJdXSwgWydOb3RQcmVjZWRlc0VxdWFsJywgWzEwOTI3LCA4MjRdXSwgWydOb3RQcmVjZWRlc1NsYW50RXF1YWwnLCBbODkyOF1dLCBbJ05vdFJldmVyc2VFbGVtZW50JywgWzg3MTZdXSwgWydOb3RSaWdodFRyaWFuZ2xlQmFyJywgWzEwNzA0LCA4MjRdXSwgWydOb3RSaWdodFRyaWFuZ2xlJywgWzg5MzldXSwgWydOb3RSaWdodFRyaWFuZ2xlRXF1YWwnLCBbODk0MV1dLCBbJ05vdFNxdWFyZVN1YnNldCcsIFs4ODQ3LCA4MjRdXSwgWydOb3RTcXVhcmVTdWJzZXRFcXVhbCcsIFs4OTMwXV0sIFsnTm90U3F1YXJlU3VwZXJzZXQnLCBbODg0OCwgODI0XV0sIFsnTm90U3F1YXJlU3VwZXJzZXRFcXVhbCcsIFs4OTMxXV0sIFsnTm90U3Vic2V0JywgWzg4MzQsIDg0MDJdXSwgWydOb3RTdWJzZXRFcXVhbCcsIFs4ODQwXV0sIFsnTm90U3VjY2VlZHMnLCBbODgzM11dLCBbJ05vdFN1Y2NlZWRzRXF1YWwnLCBbMTA5MjgsIDgyNF1dLCBbJ05vdFN1Y2NlZWRzU2xhbnRFcXVhbCcsIFs4OTI5XV0sIFsnTm90U3VjY2VlZHNUaWxkZScsIFs4ODMxLCA4MjRdXSwgWydOb3RTdXBlcnNldCcsIFs4ODM1LCA4NDAyXV0sIFsnTm90U3VwZXJzZXRFcXVhbCcsIFs4ODQxXV0sIFsnTm90VGlsZGUnLCBbODc2OV1dLCBbJ05vdFRpbGRlRXF1YWwnLCBbODc3Ml1dLCBbJ05vdFRpbGRlRnVsbEVxdWFsJywgWzg3NzVdXSwgWydOb3RUaWxkZVRpbGRlJywgWzg3NzddXSwgWydOb3RWZXJ0aWNhbEJhcicsIFs4NzQwXV0sIFsnbnBhcmFsbGVsJywgWzg3NDJdXSwgWyducGFyJywgWzg3NDJdXSwgWyducGFyc2wnLCBbMTEwMDUsIDg0MjFdXSwgWyducGFydCcsIFs4NzA2LCA4MjRdXSwgWyducG9saW50JywgWzEwNzcyXV0sIFsnbnByJywgWzg4MzJdXSwgWyducHJjdWUnLCBbODkyOF1dLCBbJ25wcmVjJywgWzg4MzJdXSwgWyducHJlY2VxJywgWzEwOTI3LCA4MjRdXSwgWyducHJlJywgWzEwOTI3LCA4MjRdXSwgWyducmFycmMnLCBbMTA1NDcsIDgyNF1dLCBbJ25yYXJyJywgWzg2MDNdXSwgWyduckFycicsIFs4NjU1XV0sIFsnbnJhcnJ3JywgWzg2MDUsIDgyNF1dLCBbJ25yaWdodGFycm93JywgWzg2MDNdXSwgWyduUmlnaHRhcnJvdycsIFs4NjU1XV0sIFsnbnJ0cmknLCBbODkzOV1dLCBbJ25ydHJpZScsIFs4OTQxXV0sIFsnbnNjJywgWzg4MzNdXSwgWyduc2NjdWUnLCBbODkyOV1dLCBbJ25zY2UnLCBbMTA5MjgsIDgyNF1dLCBbJ05zY3InLCBbMTE5OTc3XV0sIFsnbnNjcicsIFsxMjAwMDNdXSwgWyduc2hvcnRtaWQnLCBbODc0MF1dLCBbJ25zaG9ydHBhcmFsbGVsJywgWzg3NDJdXSwgWyduc2ltJywgWzg3NjldXSwgWyduc2ltZScsIFs4NzcyXV0sIFsnbnNpbWVxJywgWzg3NzJdXSwgWyduc21pZCcsIFs4NzQwXV0sIFsnbnNwYXInLCBbODc0Ml1dLCBbJ25zcXN1YmUnLCBbODkzMF1dLCBbJ25zcXN1cGUnLCBbODkzMV1dLCBbJ25zdWInLCBbODgzNl1dLCBbJ25zdWJFJywgWzEwOTQ5LCA4MjRdXSwgWyduc3ViZScsIFs4ODQwXV0sIFsnbnN1YnNldCcsIFs4ODM0LCA4NDAyXV0sIFsnbnN1YnNldGVxJywgWzg4NDBdXSwgWyduc3Vic2V0ZXFxJywgWzEwOTQ5LCA4MjRdXSwgWyduc3VjYycsIFs4ODMzXV0sIFsnbnN1Y2NlcScsIFsxMDkyOCwgODI0XV0sIFsnbnN1cCcsIFs4ODM3XV0sIFsnbnN1cEUnLCBbMTA5NTAsIDgyNF1dLCBbJ25zdXBlJywgWzg4NDFdXSwgWyduc3Vwc2V0JywgWzg4MzUsIDg0MDJdXSwgWyduc3Vwc2V0ZXEnLCBbODg0MV1dLCBbJ25zdXBzZXRlcXEnLCBbMTA5NTAsIDgyNF1dLCBbJ250Z2wnLCBbODgyNV1dLCBbJ050aWxkZScsIFsyMDldXSwgWydudGlsZGUnLCBbMjQxXV0sIFsnbnRsZycsIFs4ODI0XV0sIFsnbnRyaWFuZ2xlbGVmdCcsIFs4OTM4XV0sIFsnbnRyaWFuZ2xlbGVmdGVxJywgWzg5NDBdXSwgWydudHJpYW5nbGVyaWdodCcsIFs4OTM5XV0sIFsnbnRyaWFuZ2xlcmlnaHRlcScsIFs4OTQxXV0sIFsnTnUnLCBbOTI1XV0sIFsnbnUnLCBbOTU3XV0sIFsnbnVtJywgWzM1XV0sIFsnbnVtZXJvJywgWzg0NzBdXSwgWydudW1zcCcsIFs4MTk5XV0sIFsnbnZhcCcsIFs4NzgxLCA4NDAyXV0sIFsnbnZkYXNoJywgWzg4NzZdXSwgWydudkRhc2gnLCBbODg3N11dLCBbJ25WZGFzaCcsIFs4ODc4XV0sIFsnblZEYXNoJywgWzg4NzldXSwgWydudmdlJywgWzg4MDUsIDg0MDJdXSwgWydudmd0JywgWzYyLCA4NDAyXV0sIFsnbnZIYXJyJywgWzEwNTAwXV0sIFsnbnZpbmZpbicsIFsxMDcxOF1dLCBbJ252bEFycicsIFsxMDQ5OF1dLCBbJ252bGUnLCBbODgwNCwgODQwMl1dLCBbJ252bHQnLCBbNjAsIDg0MDJdXSwgWydudmx0cmllJywgWzg4ODQsIDg0MDJdXSwgWydudnJBcnInLCBbMTA0OTldXSwgWydudnJ0cmllJywgWzg4ODUsIDg0MDJdXSwgWydudnNpbScsIFs4NzY0LCA4NDAyXV0sIFsnbndhcmhrJywgWzEwNTMxXV0sIFsnbndhcnInLCBbODU5OF1dLCBbJ253QXJyJywgWzg2NjJdXSwgWydud2Fycm93JywgWzg1OThdXSwgWydud25lYXInLCBbMTA1MzVdXSwgWydPYWN1dGUnLCBbMjExXV0sIFsnb2FjdXRlJywgWzI0M11dLCBbJ29hc3QnLCBbODg1OV1dLCBbJ09jaXJjJywgWzIxMl1dLCBbJ29jaXJjJywgWzI0NF1dLCBbJ29jaXInLCBbODg1OF1dLCBbJ09jeScsIFsxMDU0XV0sIFsnb2N5JywgWzEwODZdXSwgWydvZGFzaCcsIFs4ODYxXV0sIFsnT2RibGFjJywgWzMzNl1dLCBbJ29kYmxhYycsIFszMzddXSwgWydvZGl2JywgWzEwODA4XV0sIFsnb2RvdCcsIFs4ODU3XV0sIFsnb2Rzb2xkJywgWzEwNjg0XV0sIFsnT0VsaWcnLCBbMzM4XV0sIFsnb2VsaWcnLCBbMzM5XV0sIFsnb2ZjaXInLCBbMTA2ODddXSwgWydPZnInLCBbMTIwMDgyXV0sIFsnb2ZyJywgWzEyMDEwOF1dLCBbJ29nb24nLCBbNzMxXV0sIFsnT2dyYXZlJywgWzIxMF1dLCBbJ29ncmF2ZScsIFsyNDJdXSwgWydvZ3QnLCBbMTA2ODldXSwgWydvaGJhcicsIFsxMDY3N11dLCBbJ29obScsIFs5MzddXSwgWydvaW50JywgWzg3NTBdXSwgWydvbGFycicsIFs4NjM0XV0sIFsnb2xjaXInLCBbMTA2ODZdXSwgWydvbGNyb3NzJywgWzEwNjgzXV0sIFsnb2xpbmUnLCBbODI1NF1dLCBbJ29sdCcsIFsxMDY4OF1dLCBbJ09tYWNyJywgWzMzMl1dLCBbJ29tYWNyJywgWzMzM11dLCBbJ09tZWdhJywgWzkzN11dLCBbJ29tZWdhJywgWzk2OV1dLCBbJ09taWNyb24nLCBbOTI3XV0sIFsnb21pY3JvbicsIFs5NTldXSwgWydvbWlkJywgWzEwNjc4XV0sIFsnb21pbnVzJywgWzg4NTRdXSwgWydPb3BmJywgWzEyMDEzNF1dLCBbJ29vcGYnLCBbMTIwMTYwXV0sIFsnb3BhcicsIFsxMDY3OV1dLCBbJ09wZW5DdXJseURvdWJsZVF1b3RlJywgWzgyMjBdXSwgWydPcGVuQ3VybHlRdW90ZScsIFs4MjE2XV0sIFsnb3BlcnAnLCBbMTA2ODFdXSwgWydvcGx1cycsIFs4ODUzXV0sIFsnb3JhcnInLCBbODYzNV1dLCBbJ09yJywgWzEwODM2XV0sIFsnb3InLCBbODc0NF1dLCBbJ29yZCcsIFsxMDg0NV1dLCBbJ29yZGVyJywgWzg1MDBdXSwgWydvcmRlcm9mJywgWzg1MDBdXSwgWydvcmRmJywgWzE3MF1dLCBbJ29yZG0nLCBbMTg2XV0sIFsnb3JpZ29mJywgWzg4ODZdXSwgWydvcm9yJywgWzEwODM4XV0sIFsnb3JzbG9wZScsIFsxMDgzOV1dLCBbJ29ydicsIFsxMDg0M11dLCBbJ29TJywgWzk0MTZdXSwgWydPc2NyJywgWzExOTk3OF1dLCBbJ29zY3InLCBbODUwMF1dLCBbJ09zbGFzaCcsIFsyMTZdXSwgWydvc2xhc2gnLCBbMjQ4XV0sIFsnb3NvbCcsIFs4ODU2XV0sIFsnT3RpbGRlJywgWzIxM11dLCBbJ290aWxkZScsIFsyNDVdXSwgWydvdGltZXNhcycsIFsxMDgwNl1dLCBbJ090aW1lcycsIFsxMDgwN11dLCBbJ290aW1lcycsIFs4ODU1XV0sIFsnT3VtbCcsIFsyMTRdXSwgWydvdW1sJywgWzI0Nl1dLCBbJ292YmFyJywgWzkwMjFdXSwgWydPdmVyQmFyJywgWzgyNTRdXSwgWydPdmVyQnJhY2UnLCBbOTE4Ml1dLCBbJ092ZXJCcmFja2V0JywgWzkxNDBdXSwgWydPdmVyUGFyZW50aGVzaXMnLCBbOTE4MF1dLCBbJ3BhcmEnLCBbMTgyXV0sIFsncGFyYWxsZWwnLCBbODc0MV1dLCBbJ3BhcicsIFs4NzQxXV0sIFsncGFyc2ltJywgWzEwOTk1XV0sIFsncGFyc2wnLCBbMTEwMDVdXSwgWydwYXJ0JywgWzg3MDZdXSwgWydQYXJ0aWFsRCcsIFs4NzA2XV0sIFsnUGN5JywgWzEwNTVdXSwgWydwY3knLCBbMTA4N11dLCBbJ3BlcmNudCcsIFszN11dLCBbJ3BlcmlvZCcsIFs0Nl1dLCBbJ3Blcm1pbCcsIFs4MjQwXV0sIFsncGVycCcsIFs4ODY5XV0sIFsncGVydGVuaycsIFs4MjQxXV0sIFsnUGZyJywgWzEyMDA4M11dLCBbJ3BmcicsIFsxMjAxMDldXSwgWydQaGknLCBbOTM0XV0sIFsncGhpJywgWzk2Nl1dLCBbJ3BoaXYnLCBbOTgxXV0sIFsncGhtbWF0JywgWzg0OTldXSwgWydwaG9uZScsIFs5NzQyXV0sIFsnUGknLCBbOTI4XV0sIFsncGknLCBbOTYwXV0sIFsncGl0Y2hmb3JrJywgWzg5MTZdXSwgWydwaXYnLCBbOTgyXV0sIFsncGxhbmNrJywgWzg0NjNdXSwgWydwbGFuY2toJywgWzg0NjJdXSwgWydwbGFua3YnLCBbODQ2M11dLCBbJ3BsdXNhY2lyJywgWzEwNzg3XV0sIFsncGx1c2InLCBbODg2Ml1dLCBbJ3BsdXNjaXInLCBbMTA3ODZdXSwgWydwbHVzJywgWzQzXV0sIFsncGx1c2RvJywgWzg3MjRdXSwgWydwbHVzZHUnLCBbMTA3ODldXSwgWydwbHVzZScsIFsxMDg2Nl1dLCBbJ1BsdXNNaW51cycsIFsxNzddXSwgWydwbHVzbW4nLCBbMTc3XV0sIFsncGx1c3NpbScsIFsxMDc5MF1dLCBbJ3BsdXN0d28nLCBbMTA3OTFdXSwgWydwbScsIFsxNzddXSwgWydQb2luY2FyZXBsYW5lJywgWzg0NjBdXSwgWydwb2ludGludCcsIFsxMDc3M11dLCBbJ3BvcGYnLCBbMTIwMTYxXV0sIFsnUG9wZicsIFs4NDczXV0sIFsncG91bmQnLCBbMTYzXV0sIFsncHJhcCcsIFsxMDkzNV1dLCBbJ1ByJywgWzEwOTM5XV0sIFsncHInLCBbODgyNl1dLCBbJ3ByY3VlJywgWzg4MjhdXSwgWydwcmVjYXBwcm94JywgWzEwOTM1XV0sIFsncHJlYycsIFs4ODI2XV0sIFsncHJlY2N1cmx5ZXEnLCBbODgyOF1dLCBbJ1ByZWNlZGVzJywgWzg4MjZdXSwgWydQcmVjZWRlc0VxdWFsJywgWzEwOTI3XV0sIFsnUHJlY2VkZXNTbGFudEVxdWFsJywgWzg4MjhdXSwgWydQcmVjZWRlc1RpbGRlJywgWzg4MzBdXSwgWydwcmVjZXEnLCBbMTA5MjddXSwgWydwcmVjbmFwcHJveCcsIFsxMDkzN11dLCBbJ3ByZWNuZXFxJywgWzEwOTMzXV0sIFsncHJlY25zaW0nLCBbODkzNl1dLCBbJ3ByZScsIFsxMDkyN11dLCBbJ3ByRScsIFsxMDkzMV1dLCBbJ3ByZWNzaW0nLCBbODgzMF1dLCBbJ3ByaW1lJywgWzgyNDJdXSwgWydQcmltZScsIFs4MjQzXV0sIFsncHJpbWVzJywgWzg0NzNdXSwgWydwcm5hcCcsIFsxMDkzN11dLCBbJ3BybkUnLCBbMTA5MzNdXSwgWydwcm5zaW0nLCBbODkzNl1dLCBbJ3Byb2QnLCBbODcxOV1dLCBbJ1Byb2R1Y3QnLCBbODcxOV1dLCBbJ3Byb2ZhbGFyJywgWzkwMDZdXSwgWydwcm9mbGluZScsIFs4OTc4XV0sIFsncHJvZnN1cmYnLCBbODk3OV1dLCBbJ3Byb3AnLCBbODczM11dLCBbJ1Byb3BvcnRpb25hbCcsIFs4NzMzXV0sIFsnUHJvcG9ydGlvbicsIFs4NzU5XV0sIFsncHJvcHRvJywgWzg3MzNdXSwgWydwcnNpbScsIFs4ODMwXV0sIFsncHJ1cmVsJywgWzg4ODBdXSwgWydQc2NyJywgWzExOTk3OV1dLCBbJ3BzY3InLCBbMTIwMDA1XV0sIFsnUHNpJywgWzkzNl1dLCBbJ3BzaScsIFs5NjhdXSwgWydwdW5jc3AnLCBbODIwMF1dLCBbJ1FmcicsIFsxMjAwODRdXSwgWydxZnInLCBbMTIwMTEwXV0sIFsncWludCcsIFsxMDc2NF1dLCBbJ3FvcGYnLCBbMTIwMTYyXV0sIFsnUW9wZicsIFs4NDc0XV0sIFsncXByaW1lJywgWzgyNzldXSwgWydRc2NyJywgWzExOTk4MF1dLCBbJ3FzY3InLCBbMTIwMDA2XV0sIFsncXVhdGVybmlvbnMnLCBbODQ2MV1dLCBbJ3F1YXRpbnQnLCBbMTA3NzRdXSwgWydxdWVzdCcsIFs2M11dLCBbJ3F1ZXN0ZXEnLCBbODc5OV1dLCBbJ3F1b3QnLCBbMzRdXSwgWydRVU9UJywgWzM0XV0sIFsnckFhcnInLCBbODY2N11dLCBbJ3JhY2UnLCBbODc2NSwgODE3XV0sIFsnUmFjdXRlJywgWzM0MF1dLCBbJ3JhY3V0ZScsIFszNDFdXSwgWydyYWRpYycsIFs4NzMwXV0sIFsncmFlbXB0eXYnLCBbMTA2NzVdXSwgWydyYW5nJywgWzEwMjE3XV0sIFsnUmFuZycsIFsxMDIxOV1dLCBbJ3JhbmdkJywgWzEwNjQyXV0sIFsncmFuZ2UnLCBbMTA2NjFdXSwgWydyYW5nbGUnLCBbMTAyMTddXSwgWydyYXF1bycsIFsxODddXSwgWydyYXJyYXAnLCBbMTA2MTNdXSwgWydyYXJyYicsIFs4Njc3XV0sIFsncmFycmJmcycsIFsxMDUyOF1dLCBbJ3JhcnJjJywgWzEwNTQ3XV0sIFsncmFycicsIFs4NTk0XV0sIFsnUmFycicsIFs4NjA4XV0sIFsnckFycicsIFs4NjU4XV0sIFsncmFycmZzJywgWzEwNTI2XV0sIFsncmFycmhrJywgWzg2MThdXSwgWydyYXJybHAnLCBbODYyMF1dLCBbJ3JhcnJwbCcsIFsxMDU2NV1dLCBbJ3JhcnJzaW0nLCBbMTA2MTJdXSwgWydSYXJydGwnLCBbMTA1MThdXSwgWydyYXJydGwnLCBbODYxMV1dLCBbJ3JhcnJ3JywgWzg2MDVdXSwgWydyYXRhaWwnLCBbMTA1MjJdXSwgWydyQXRhaWwnLCBbMTA1MjRdXSwgWydyYXRpbycsIFs4NzU4XV0sIFsncmF0aW9uYWxzJywgWzg0NzRdXSwgWydyYmFycicsIFsxMDUwOV1dLCBbJ3JCYXJyJywgWzEwNTExXV0sIFsnUkJhcnInLCBbMTA1MTJdXSwgWydyYmJyaycsIFsxMDA5OV1dLCBbJ3JicmFjZScsIFsxMjVdXSwgWydyYnJhY2snLCBbOTNdXSwgWydyYnJrZScsIFsxMDYzNl1dLCBbJ3JicmtzbGQnLCBbMTA2MzhdXSwgWydyYnJrc2x1JywgWzEwNjQwXV0sIFsnUmNhcm9uJywgWzM0NF1dLCBbJ3JjYXJvbicsIFszNDVdXSwgWydSY2VkaWwnLCBbMzQyXV0sIFsncmNlZGlsJywgWzM0M11dLCBbJ3JjZWlsJywgWzg5NjldXSwgWydyY3ViJywgWzEyNV1dLCBbJ1JjeScsIFsxMDU2XV0sIFsncmN5JywgWzEwODhdXSwgWydyZGNhJywgWzEwNTUxXV0sIFsncmRsZGhhcicsIFsxMDYwMV1dLCBbJ3JkcXVvJywgWzgyMjFdXSwgWydyZHF1b3InLCBbODIyMV1dLCBbJ0Nsb3NlQ3VybHlEb3VibGVRdW90ZScsIFs4MjIxXV0sIFsncmRzaCcsIFs4NjI3XV0sIFsncmVhbCcsIFs4NDc2XV0sIFsncmVhbGluZScsIFs4NDc1XV0sIFsncmVhbHBhcnQnLCBbODQ3Nl1dLCBbJ3JlYWxzJywgWzg0NzddXSwgWydSZScsIFs4NDc2XV0sIFsncmVjdCcsIFs5NjQ1XV0sIFsncmVnJywgWzE3NF1dLCBbJ1JFRycsIFsxNzRdXSwgWydSZXZlcnNlRWxlbWVudCcsIFs4NzE1XV0sIFsnUmV2ZXJzZUVxdWlsaWJyaXVtJywgWzg2NTFdXSwgWydSZXZlcnNlVXBFcXVpbGlicml1bScsIFsxMDYwN11dLCBbJ3JmaXNodCcsIFsxMDYyMV1dLCBbJ3JmbG9vcicsIFs4OTcxXV0sIFsncmZyJywgWzEyMDExMV1dLCBbJ1JmcicsIFs4NDc2XV0sIFsnckhhcicsIFsxMDU5Nl1dLCBbJ3JoYXJkJywgWzg2NDFdXSwgWydyaGFydScsIFs4NjQwXV0sIFsncmhhcnVsJywgWzEwNjA0XV0sIFsnUmhvJywgWzkyOV1dLCBbJ3JobycsIFs5NjFdXSwgWydyaG92JywgWzEwMDldXSwgWydSaWdodEFuZ2xlQnJhY2tldCcsIFsxMDIxN11dLCBbJ1JpZ2h0QXJyb3dCYXInLCBbODY3N11dLCBbJ3JpZ2h0YXJyb3cnLCBbODU5NF1dLCBbJ1JpZ2h0QXJyb3cnLCBbODU5NF1dLCBbJ1JpZ2h0YXJyb3cnLCBbODY1OF1dLCBbJ1JpZ2h0QXJyb3dMZWZ0QXJyb3cnLCBbODY0NF1dLCBbJ3JpZ2h0YXJyb3d0YWlsJywgWzg2MTFdXSwgWydSaWdodENlaWxpbmcnLCBbODk2OV1dLCBbJ1JpZ2h0RG91YmxlQnJhY2tldCcsIFsxMDIxNV1dLCBbJ1JpZ2h0RG93blRlZVZlY3RvcicsIFsxMDU4OV1dLCBbJ1JpZ2h0RG93blZlY3RvckJhcicsIFsxMDU4MV1dLCBbJ1JpZ2h0RG93blZlY3RvcicsIFs4NjQyXV0sIFsnUmlnaHRGbG9vcicsIFs4OTcxXV0sIFsncmlnaHRoYXJwb29uZG93bicsIFs4NjQxXV0sIFsncmlnaHRoYXJwb29udXAnLCBbODY0MF1dLCBbJ3JpZ2h0bGVmdGFycm93cycsIFs4NjQ0XV0sIFsncmlnaHRsZWZ0aGFycG9vbnMnLCBbODY1Ml1dLCBbJ3JpZ2h0cmlnaHRhcnJvd3MnLCBbODY0OV1dLCBbJ3JpZ2h0c3F1aWdhcnJvdycsIFs4NjA1XV0sIFsnUmlnaHRUZWVBcnJvdycsIFs4NjE0XV0sIFsnUmlnaHRUZWUnLCBbODg2Nl1dLCBbJ1JpZ2h0VGVlVmVjdG9yJywgWzEwNTg3XV0sIFsncmlnaHR0aHJlZXRpbWVzJywgWzg5MDhdXSwgWydSaWdodFRyaWFuZ2xlQmFyJywgWzEwNzA0XV0sIFsnUmlnaHRUcmlhbmdsZScsIFs4ODgzXV0sIFsnUmlnaHRUcmlhbmdsZUVxdWFsJywgWzg4ODVdXSwgWydSaWdodFVwRG93blZlY3RvcicsIFsxMDU3NV1dLCBbJ1JpZ2h0VXBUZWVWZWN0b3InLCBbMTA1ODhdXSwgWydSaWdodFVwVmVjdG9yQmFyJywgWzEwNTgwXV0sIFsnUmlnaHRVcFZlY3RvcicsIFs4NjM4XV0sIFsnUmlnaHRWZWN0b3JCYXInLCBbMTA1NzldXSwgWydSaWdodFZlY3RvcicsIFs4NjQwXV0sIFsncmluZycsIFs3MzBdXSwgWydyaXNpbmdkb3RzZXEnLCBbODc4N11dLCBbJ3JsYXJyJywgWzg2NDRdXSwgWydybGhhcicsIFs4NjUyXV0sIFsncmxtJywgWzgyMDddXSwgWydybW91c3RhY2hlJywgWzkxMzddXSwgWydybW91c3QnLCBbOTEzN11dLCBbJ3JubWlkJywgWzEwOTkwXV0sIFsncm9hbmcnLCBbMTAyMjFdXSwgWydyb2FycicsIFs4NzAyXV0sIFsncm9icmsnLCBbMTAyMTVdXSwgWydyb3BhcicsIFsxMDYzMF1dLCBbJ3JvcGYnLCBbMTIwMTYzXV0sIFsnUm9wZicsIFs4NDc3XV0sIFsncm9wbHVzJywgWzEwNzk4XV0sIFsncm90aW1lcycsIFsxMDgwNV1dLCBbJ1JvdW5kSW1wbGllcycsIFsxMDYwOF1dLCBbJ3JwYXInLCBbNDFdXSwgWydycGFyZ3QnLCBbMTA2NDRdXSwgWydycHBvbGludCcsIFsxMDc3MF1dLCBbJ3JyYXJyJywgWzg2NDldXSwgWydScmlnaHRhcnJvdycsIFs4NjY3XV0sIFsncnNhcXVvJywgWzgyNTBdXSwgWydyc2NyJywgWzEyMDAwN11dLCBbJ1JzY3InLCBbODQ3NV1dLCBbJ3JzaCcsIFs4NjI1XV0sIFsnUnNoJywgWzg2MjVdXSwgWydyc3FiJywgWzkzXV0sIFsncnNxdW8nLCBbODIxN11dLCBbJ3JzcXVvcicsIFs4MjE3XV0sIFsnQ2xvc2VDdXJseVF1b3RlJywgWzgyMTddXSwgWydydGhyZWUnLCBbODkwOF1dLCBbJ3J0aW1lcycsIFs4OTA2XV0sIFsncnRyaScsIFs5NjU3XV0sIFsncnRyaWUnLCBbODg4NV1dLCBbJ3J0cmlmJywgWzk2NTZdXSwgWydydHJpbHRyaScsIFsxMDcwMl1dLCBbJ1J1bGVEZWxheWVkJywgWzEwNzQwXV0sIFsncnVsdWhhcicsIFsxMDYwMF1dLCBbJ3J4JywgWzg0NzhdXSwgWydTYWN1dGUnLCBbMzQ2XV0sIFsnc2FjdXRlJywgWzM0N11dLCBbJ3NicXVvJywgWzgyMThdXSwgWydzY2FwJywgWzEwOTM2XV0sIFsnU2Nhcm9uJywgWzM1Ml1dLCBbJ3NjYXJvbicsIFszNTNdXSwgWydTYycsIFsxMDk0MF1dLCBbJ3NjJywgWzg4MjddXSwgWydzY2N1ZScsIFs4ODI5XV0sIFsnc2NlJywgWzEwOTI4XV0sIFsnc2NFJywgWzEwOTMyXV0sIFsnU2NlZGlsJywgWzM1MF1dLCBbJ3NjZWRpbCcsIFszNTFdXSwgWydTY2lyYycsIFszNDhdXSwgWydzY2lyYycsIFszNDldXSwgWydzY25hcCcsIFsxMDkzOF1dLCBbJ3NjbkUnLCBbMTA5MzRdXSwgWydzY25zaW0nLCBbODkzN11dLCBbJ3NjcG9saW50JywgWzEwNzcxXV0sIFsnc2NzaW0nLCBbODgzMV1dLCBbJ1NjeScsIFsxMDU3XV0sIFsnc2N5JywgWzEwODldXSwgWydzZG90YicsIFs4ODY1XV0sIFsnc2RvdCcsIFs4OTAxXV0sIFsnc2RvdGUnLCBbMTA4NTRdXSwgWydzZWFyaGsnLCBbMTA1MzNdXSwgWydzZWFycicsIFs4NjAwXV0sIFsnc2VBcnInLCBbODY2NF1dLCBbJ3NlYXJyb3cnLCBbODYwMF1dLCBbJ3NlY3QnLCBbMTY3XV0sIFsnc2VtaScsIFs1OV1dLCBbJ3Nlc3dhcicsIFsxMDUzN11dLCBbJ3NldG1pbnVzJywgWzg3MjZdXSwgWydzZXRtbicsIFs4NzI2XV0sIFsnc2V4dCcsIFsxMDAzOF1dLCBbJ1NmcicsIFsxMjAwODZdXSwgWydzZnInLCBbMTIwMTEyXV0sIFsnc2Zyb3duJywgWzg5OTRdXSwgWydzaGFycCcsIFs5ODM5XV0sIFsnU0hDSGN5JywgWzEwNjVdXSwgWydzaGNoY3knLCBbMTA5N11dLCBbJ1NIY3knLCBbMTA2NF1dLCBbJ3NoY3knLCBbMTA5Nl1dLCBbJ1Nob3J0RG93bkFycm93JywgWzg1OTVdXSwgWydTaG9ydExlZnRBcnJvdycsIFs4NTkyXV0sIFsnc2hvcnRtaWQnLCBbODczOV1dLCBbJ3Nob3J0cGFyYWxsZWwnLCBbODc0MV1dLCBbJ1Nob3J0UmlnaHRBcnJvdycsIFs4NTk0XV0sIFsnU2hvcnRVcEFycm93JywgWzg1OTNdXSwgWydzaHknLCBbMTczXV0sIFsnU2lnbWEnLCBbOTMxXV0sIFsnc2lnbWEnLCBbOTYzXV0sIFsnc2lnbWFmJywgWzk2Ml1dLCBbJ3NpZ21hdicsIFs5NjJdXSwgWydzaW0nLCBbODc2NF1dLCBbJ3NpbWRvdCcsIFsxMDg1OF1dLCBbJ3NpbWUnLCBbODc3MV1dLCBbJ3NpbWVxJywgWzg3NzFdXSwgWydzaW1nJywgWzEwOTEwXV0sIFsnc2ltZ0UnLCBbMTA5MTJdXSwgWydzaW1sJywgWzEwOTA5XV0sIFsnc2ltbEUnLCBbMTA5MTFdXSwgWydzaW1uZScsIFs4Nzc0XV0sIFsnc2ltcGx1cycsIFsxMDc4OF1dLCBbJ3NpbXJhcnInLCBbMTA2MTBdXSwgWydzbGFycicsIFs4NTkyXV0sIFsnU21hbGxDaXJjbGUnLCBbODcyOF1dLCBbJ3NtYWxsc2V0bWludXMnLCBbODcyNl1dLCBbJ3NtYXNocCcsIFsxMDgwM11dLCBbJ3NtZXBhcnNsJywgWzEwNzI0XV0sIFsnc21pZCcsIFs4NzM5XV0sIFsnc21pbGUnLCBbODk5NV1dLCBbJ3NtdCcsIFsxMDkyMl1dLCBbJ3NtdGUnLCBbMTA5MjRdXSwgWydzbXRlcycsIFsxMDkyNCwgNjUwMjRdXSwgWydTT0ZUY3knLCBbMTA2OF1dLCBbJ3NvZnRjeScsIFsxMTAwXV0sIFsnc29sYmFyJywgWzkwMjNdXSwgWydzb2xiJywgWzEwNjkyXV0sIFsnc29sJywgWzQ3XV0sIFsnU29wZicsIFsxMjAxMzhdXSwgWydzb3BmJywgWzEyMDE2NF1dLCBbJ3NwYWRlcycsIFs5ODI0XV0sIFsnc3BhZGVzdWl0JywgWzk4MjRdXSwgWydzcGFyJywgWzg3NDFdXSwgWydzcWNhcCcsIFs4ODUxXV0sIFsnc3FjYXBzJywgWzg4NTEsIDY1MDI0XV0sIFsnc3FjdXAnLCBbODg1Ml1dLCBbJ3NxY3VwcycsIFs4ODUyLCA2NTAyNF1dLCBbJ1NxcnQnLCBbODczMF1dLCBbJ3Nxc3ViJywgWzg4NDddXSwgWydzcXN1YmUnLCBbODg0OV1dLCBbJ3Nxc3Vic2V0JywgWzg4NDddXSwgWydzcXN1YnNldGVxJywgWzg4NDldXSwgWydzcXN1cCcsIFs4ODQ4XV0sIFsnc3FzdXBlJywgWzg4NTBdXSwgWydzcXN1cHNldCcsIFs4ODQ4XV0sIFsnc3FzdXBzZXRlcScsIFs4ODUwXV0sIFsnc3F1YXJlJywgWzk2MzNdXSwgWydTcXVhcmUnLCBbOTYzM11dLCBbJ1NxdWFyZUludGVyc2VjdGlvbicsIFs4ODUxXV0sIFsnU3F1YXJlU3Vic2V0JywgWzg4NDddXSwgWydTcXVhcmVTdWJzZXRFcXVhbCcsIFs4ODQ5XV0sIFsnU3F1YXJlU3VwZXJzZXQnLCBbODg0OF1dLCBbJ1NxdWFyZVN1cGVyc2V0RXF1YWwnLCBbODg1MF1dLCBbJ1NxdWFyZVVuaW9uJywgWzg4NTJdXSwgWydzcXVhcmYnLCBbOTY0Ml1dLCBbJ3NxdScsIFs5NjMzXV0sIFsnc3F1ZicsIFs5NjQyXV0sIFsnc3JhcnInLCBbODU5NF1dLCBbJ1NzY3InLCBbMTE5OTgyXV0sIFsnc3NjcicsIFsxMjAwMDhdXSwgWydzc2V0bW4nLCBbODcyNl1dLCBbJ3NzbWlsZScsIFs4OTk1XV0sIFsnc3N0YXJmJywgWzg5MDJdXSwgWydTdGFyJywgWzg5MDJdXSwgWydzdGFyJywgWzk3MzRdXSwgWydzdGFyZicsIFs5NzMzXV0sIFsnc3RyYWlnaHRlcHNpbG9uJywgWzEwMTNdXSwgWydzdHJhaWdodHBoaScsIFs5ODFdXSwgWydzdHJucycsIFsxNzVdXSwgWydzdWInLCBbODgzNF1dLCBbJ1N1YicsIFs4OTEyXV0sIFsnc3ViZG90JywgWzEwOTQxXV0sIFsnc3ViRScsIFsxMDk0OV1dLCBbJ3N1YmUnLCBbODgzOF1dLCBbJ3N1YmVkb3QnLCBbMTA5NDddXSwgWydzdWJtdWx0JywgWzEwOTQ1XV0sIFsnc3VibkUnLCBbMTA5NTVdXSwgWydzdWJuZScsIFs4ODQyXV0sIFsnc3VicGx1cycsIFsxMDk0M11dLCBbJ3N1YnJhcnInLCBbMTA2MTddXSwgWydzdWJzZXQnLCBbODgzNF1dLCBbJ1N1YnNldCcsIFs4OTEyXV0sIFsnc3Vic2V0ZXEnLCBbODgzOF1dLCBbJ3N1YnNldGVxcScsIFsxMDk0OV1dLCBbJ1N1YnNldEVxdWFsJywgWzg4MzhdXSwgWydzdWJzZXRuZXEnLCBbODg0Ml1dLCBbJ3N1YnNldG5lcXEnLCBbMTA5NTVdXSwgWydzdWJzaW0nLCBbMTA5NTFdXSwgWydzdWJzdWInLCBbMTA5NjVdXSwgWydzdWJzdXAnLCBbMTA5NjNdXSwgWydzdWNjYXBwcm94JywgWzEwOTM2XV0sIFsnc3VjYycsIFs4ODI3XV0sIFsnc3VjY2N1cmx5ZXEnLCBbODgyOV1dLCBbJ1N1Y2NlZWRzJywgWzg4MjddXSwgWydTdWNjZWVkc0VxdWFsJywgWzEwOTI4XV0sIFsnU3VjY2VlZHNTbGFudEVxdWFsJywgWzg4MjldXSwgWydTdWNjZWVkc1RpbGRlJywgWzg4MzFdXSwgWydzdWNjZXEnLCBbMTA5MjhdXSwgWydzdWNjbmFwcHJveCcsIFsxMDkzOF1dLCBbJ3N1Y2NuZXFxJywgWzEwOTM0XV0sIFsnc3VjY25zaW0nLCBbODkzN11dLCBbJ3N1Y2NzaW0nLCBbODgzMV1dLCBbJ1N1Y2hUaGF0JywgWzg3MTVdXSwgWydzdW0nLCBbODcyMV1dLCBbJ1N1bScsIFs4NzIxXV0sIFsnc3VuZycsIFs5ODM0XV0sIFsnc3VwMScsIFsxODVdXSwgWydzdXAyJywgWzE3OF1dLCBbJ3N1cDMnLCBbMTc5XV0sIFsnc3VwJywgWzg4MzVdXSwgWydTdXAnLCBbODkxM11dLCBbJ3N1cGRvdCcsIFsxMDk0Ml1dLCBbJ3N1cGRzdWInLCBbMTA5NjhdXSwgWydzdXBFJywgWzEwOTUwXV0sIFsnc3VwZScsIFs4ODM5XV0sIFsnc3VwZWRvdCcsIFsxMDk0OF1dLCBbJ1N1cGVyc2V0JywgWzg4MzVdXSwgWydTdXBlcnNldEVxdWFsJywgWzg4MzldXSwgWydzdXBoc29sJywgWzEwMTg1XV0sIFsnc3VwaHN1YicsIFsxMDk2N11dLCBbJ3N1cGxhcnInLCBbMTA2MTldXSwgWydzdXBtdWx0JywgWzEwOTQ2XV0sIFsnc3VwbkUnLCBbMTA5NTZdXSwgWydzdXBuZScsIFs4ODQzXV0sIFsnc3VwcGx1cycsIFsxMDk0NF1dLCBbJ3N1cHNldCcsIFs4ODM1XV0sIFsnU3Vwc2V0JywgWzg5MTNdXSwgWydzdXBzZXRlcScsIFs4ODM5XV0sIFsnc3Vwc2V0ZXFxJywgWzEwOTUwXV0sIFsnc3Vwc2V0bmVxJywgWzg4NDNdXSwgWydzdXBzZXRuZXFxJywgWzEwOTU2XV0sIFsnc3Vwc2ltJywgWzEwOTUyXV0sIFsnc3Vwc3ViJywgWzEwOTY0XV0sIFsnc3Vwc3VwJywgWzEwOTY2XV0sIFsnc3dhcmhrJywgWzEwNTM0XV0sIFsnc3dhcnInLCBbODYwMV1dLCBbJ3N3QXJyJywgWzg2NjVdXSwgWydzd2Fycm93JywgWzg2MDFdXSwgWydzd253YXInLCBbMTA1MzhdXSwgWydzemxpZycsIFsyMjNdXSwgWydUYWInLCBbOV1dLCBbJ3RhcmdldCcsIFs4OTgyXV0sIFsnVGF1JywgWzkzMl1dLCBbJ3RhdScsIFs5NjRdXSwgWyd0YnJrJywgWzkxNDBdXSwgWydUY2Fyb24nLCBbMzU2XV0sIFsndGNhcm9uJywgWzM1N11dLCBbJ1RjZWRpbCcsIFszNTRdXSwgWyd0Y2VkaWwnLCBbMzU1XV0sIFsnVGN5JywgWzEwNThdXSwgWyd0Y3knLCBbMTA5MF1dLCBbJ3Rkb3QnLCBbODQxMV1dLCBbJ3RlbHJlYycsIFs4OTgxXV0sIFsnVGZyJywgWzEyMDA4N11dLCBbJ3RmcicsIFsxMjAxMTNdXSwgWyd0aGVyZTQnLCBbODc1Nl1dLCBbJ3RoZXJlZm9yZScsIFs4NzU2XV0sIFsnVGhlcmVmb3JlJywgWzg3NTZdXSwgWydUaGV0YScsIFs5MjBdXSwgWyd0aGV0YScsIFs5NTJdXSwgWyd0aGV0YXN5bScsIFs5NzddXSwgWyd0aGV0YXYnLCBbOTc3XV0sIFsndGhpY2thcHByb3gnLCBbODc3Nl1dLCBbJ3RoaWNrc2ltJywgWzg3NjRdXSwgWydUaGlja1NwYWNlJywgWzgyODcsIDgyMDJdXSwgWydUaGluU3BhY2UnLCBbODIwMV1dLCBbJ3RoaW5zcCcsIFs4MjAxXV0sIFsndGhrYXAnLCBbODc3Nl1dLCBbJ3Roa3NpbScsIFs4NzY0XV0sIFsnVEhPUk4nLCBbMjIyXV0sIFsndGhvcm4nLCBbMjU0XV0sIFsndGlsZGUnLCBbNzMyXV0sIFsnVGlsZGUnLCBbODc2NF1dLCBbJ1RpbGRlRXF1YWwnLCBbODc3MV1dLCBbJ1RpbGRlRnVsbEVxdWFsJywgWzg3NzNdXSwgWydUaWxkZVRpbGRlJywgWzg3NzZdXSwgWyd0aW1lc2JhcicsIFsxMDgwMV1dLCBbJ3RpbWVzYicsIFs4ODY0XV0sIFsndGltZXMnLCBbMjE1XV0sIFsndGltZXNkJywgWzEwODAwXV0sIFsndGludCcsIFs4NzQ5XV0sIFsndG9lYScsIFsxMDUzNl1dLCBbJ3RvcGJvdCcsIFs5MDE0XV0sIFsndG9wY2lyJywgWzEwOTkzXV0sIFsndG9wJywgWzg4NjhdXSwgWydUb3BmJywgWzEyMDEzOV1dLCBbJ3RvcGYnLCBbMTIwMTY1XV0sIFsndG9wZm9yaycsIFsxMDk3MF1dLCBbJ3Rvc2EnLCBbMTA1MzddXSwgWyd0cHJpbWUnLCBbODI0NF1dLCBbJ3RyYWRlJywgWzg0ODJdXSwgWydUUkFERScsIFs4NDgyXV0sIFsndHJpYW5nbGUnLCBbOTY1M11dLCBbJ3RyaWFuZ2xlZG93bicsIFs5NjYzXV0sIFsndHJpYW5nbGVsZWZ0JywgWzk2NjddXSwgWyd0cmlhbmdsZWxlZnRlcScsIFs4ODg0XV0sIFsndHJpYW5nbGVxJywgWzg3OTZdXSwgWyd0cmlhbmdsZXJpZ2h0JywgWzk2NTddXSwgWyd0cmlhbmdsZXJpZ2h0ZXEnLCBbODg4NV1dLCBbJ3RyaWRvdCcsIFs5NzA4XV0sIFsndHJpZScsIFs4Nzk2XV0sIFsndHJpbWludXMnLCBbMTA4MTBdXSwgWydUcmlwbGVEb3QnLCBbODQxMV1dLCBbJ3RyaXBsdXMnLCBbMTA4MDldXSwgWyd0cmlzYicsIFsxMDcwMV1dLCBbJ3RyaXRpbWUnLCBbMTA4MTFdXSwgWyd0cnBleml1bScsIFs5MTg2XV0sIFsnVHNjcicsIFsxMTk5ODNdXSwgWyd0c2NyJywgWzEyMDAwOV1dLCBbJ1RTY3knLCBbMTA2Ml1dLCBbJ3RzY3knLCBbMTA5NF1dLCBbJ1RTSGN5JywgWzEwMzVdXSwgWyd0c2hjeScsIFsxMTE1XV0sIFsnVHN0cm9rJywgWzM1OF1dLCBbJ3RzdHJvaycsIFszNTldXSwgWyd0d2l4dCcsIFs4ODEyXV0sIFsndHdvaGVhZGxlZnRhcnJvdycsIFs4NjA2XV0sIFsndHdvaGVhZHJpZ2h0YXJyb3cnLCBbODYwOF1dLCBbJ1VhY3V0ZScsIFsyMThdXSwgWyd1YWN1dGUnLCBbMjUwXV0sIFsndWFycicsIFs4NTkzXV0sIFsnVWFycicsIFs4NjA3XV0sIFsndUFycicsIFs4NjU3XV0sIFsnVWFycm9jaXInLCBbMTA1NjldXSwgWydVYnJjeScsIFsxMDM4XV0sIFsndWJyY3knLCBbMTExOF1dLCBbJ1VicmV2ZScsIFszNjRdXSwgWyd1YnJldmUnLCBbMzY1XV0sIFsnVWNpcmMnLCBbMjE5XV0sIFsndWNpcmMnLCBbMjUxXV0sIFsnVWN5JywgWzEwNTldXSwgWyd1Y3knLCBbMTA5MV1dLCBbJ3VkYXJyJywgWzg2NDVdXSwgWydVZGJsYWMnLCBbMzY4XV0sIFsndWRibGFjJywgWzM2OV1dLCBbJ3VkaGFyJywgWzEwNjA2XV0sIFsndWZpc2h0JywgWzEwNjIyXV0sIFsnVWZyJywgWzEyMDA4OF1dLCBbJ3VmcicsIFsxMjAxMTRdXSwgWydVZ3JhdmUnLCBbMjE3XV0sIFsndWdyYXZlJywgWzI0OV1dLCBbJ3VIYXInLCBbMTA1OTVdXSwgWyd1aGFybCcsIFs4NjM5XV0sIFsndWhhcnInLCBbODYzOF1dLCBbJ3VoYmxrJywgWzk2MDBdXSwgWyd1bGNvcm4nLCBbODk4OF1dLCBbJ3VsY29ybmVyJywgWzg5ODhdXSwgWyd1bGNyb3AnLCBbODk3NV1dLCBbJ3VsdHJpJywgWzk3MjBdXSwgWydVbWFjcicsIFszNjJdXSwgWyd1bWFjcicsIFszNjNdXSwgWyd1bWwnLCBbMTY4XV0sIFsnVW5kZXJCYXInLCBbOTVdXSwgWydVbmRlckJyYWNlJywgWzkxODNdXSwgWydVbmRlckJyYWNrZXQnLCBbOTE0MV1dLCBbJ1VuZGVyUGFyZW50aGVzaXMnLCBbOTE4MV1dLCBbJ1VuaW9uJywgWzg4OTldXSwgWydVbmlvblBsdXMnLCBbODg0Nl1dLCBbJ1VvZ29uJywgWzM3MF1dLCBbJ3VvZ29uJywgWzM3MV1dLCBbJ1VvcGYnLCBbMTIwMTQwXV0sIFsndW9wZicsIFsxMjAxNjZdXSwgWydVcEFycm93QmFyJywgWzEwNTE0XV0sIFsndXBhcnJvdycsIFs4NTkzXV0sIFsnVXBBcnJvdycsIFs4NTkzXV0sIFsnVXBhcnJvdycsIFs4NjU3XV0sIFsnVXBBcnJvd0Rvd25BcnJvdycsIFs4NjQ1XV0sIFsndXBkb3duYXJyb3cnLCBbODU5N11dLCBbJ1VwRG93bkFycm93JywgWzg1OTddXSwgWydVcGRvd25hcnJvdycsIFs4NjYxXV0sIFsnVXBFcXVpbGlicml1bScsIFsxMDYwNl1dLCBbJ3VwaGFycG9vbmxlZnQnLCBbODYzOV1dLCBbJ3VwaGFycG9vbnJpZ2h0JywgWzg2MzhdXSwgWyd1cGx1cycsIFs4ODQ2XV0sIFsnVXBwZXJMZWZ0QXJyb3cnLCBbODU5OF1dLCBbJ1VwcGVyUmlnaHRBcnJvdycsIFs4NTk5XV0sIFsndXBzaScsIFs5NjVdXSwgWydVcHNpJywgWzk3OF1dLCBbJ3Vwc2loJywgWzk3OF1dLCBbJ1Vwc2lsb24nLCBbOTMzXV0sIFsndXBzaWxvbicsIFs5NjVdXSwgWydVcFRlZUFycm93JywgWzg2MTNdXSwgWydVcFRlZScsIFs4ODY5XV0sIFsndXB1cGFycm93cycsIFs4NjQ4XV0sIFsndXJjb3JuJywgWzg5ODldXSwgWyd1cmNvcm5lcicsIFs4OTg5XV0sIFsndXJjcm9wJywgWzg5NzRdXSwgWydVcmluZycsIFszNjZdXSwgWyd1cmluZycsIFszNjddXSwgWyd1cnRyaScsIFs5NzIxXV0sIFsnVXNjcicsIFsxMTk5ODRdXSwgWyd1c2NyJywgWzEyMDAxMF1dLCBbJ3V0ZG90JywgWzg5NDRdXSwgWydVdGlsZGUnLCBbMzYwXV0sIFsndXRpbGRlJywgWzM2MV1dLCBbJ3V0cmknLCBbOTY1M11dLCBbJ3V0cmlmJywgWzk2NTJdXSwgWyd1dWFycicsIFs4NjQ4XV0sIFsnVXVtbCcsIFsyMjBdXSwgWyd1dW1sJywgWzI1Ml1dLCBbJ3V3YW5nbGUnLCBbMTA2NjNdXSwgWyd2YW5ncnQnLCBbMTA2NTJdXSwgWyd2YXJlcHNpbG9uJywgWzEwMTNdXSwgWyd2YXJrYXBwYScsIFsxMDA4XV0sIFsndmFybm90aGluZycsIFs4NzA5XV0sIFsndmFycGhpJywgWzk4MV1dLCBbJ3ZhcnBpJywgWzk4Ml1dLCBbJ3ZhcnByb3B0bycsIFs4NzMzXV0sIFsndmFycicsIFs4NTk3XV0sIFsndkFycicsIFs4NjYxXV0sIFsndmFycmhvJywgWzEwMDldXSwgWyd2YXJzaWdtYScsIFs5NjJdXSwgWyd2YXJzdWJzZXRuZXEnLCBbODg0MiwgNjUwMjRdXSwgWyd2YXJzdWJzZXRuZXFxJywgWzEwOTU1LCA2NTAyNF1dLCBbJ3ZhcnN1cHNldG5lcScsIFs4ODQzLCA2NTAyNF1dLCBbJ3ZhcnN1cHNldG5lcXEnLCBbMTA5NTYsIDY1MDI0XV0sIFsndmFydGhldGEnLCBbOTc3XV0sIFsndmFydHJpYW5nbGVsZWZ0JywgWzg4ODJdXSwgWyd2YXJ0cmlhbmdsZXJpZ2h0JywgWzg4ODNdXSwgWyd2QmFyJywgWzEwOTg0XV0sIFsnVmJhcicsIFsxMDk4N11dLCBbJ3ZCYXJ2JywgWzEwOTg1XV0sIFsnVmN5JywgWzEwNDJdXSwgWyd2Y3knLCBbMTA3NF1dLCBbJ3ZkYXNoJywgWzg4NjZdXSwgWyd2RGFzaCcsIFs4ODcyXV0sIFsnVmRhc2gnLCBbODg3M11dLCBbJ1ZEYXNoJywgWzg4NzVdXSwgWydWZGFzaGwnLCBbMTA5ODJdXSwgWyd2ZWViYXInLCBbODg5MV1dLCBbJ3ZlZScsIFs4NzQ0XV0sIFsnVmVlJywgWzg4OTddXSwgWyd2ZWVlcScsIFs4Nzk0XV0sIFsndmVsbGlwJywgWzg5NDJdXSwgWyd2ZXJiYXInLCBbMTI0XV0sIFsnVmVyYmFyJywgWzgyMTRdXSwgWyd2ZXJ0JywgWzEyNF1dLCBbJ1ZlcnQnLCBbODIxNF1dLCBbJ1ZlcnRpY2FsQmFyJywgWzg3MzldXSwgWydWZXJ0aWNhbExpbmUnLCBbMTI0XV0sIFsnVmVydGljYWxTZXBhcmF0b3InLCBbMTAwNzJdXSwgWydWZXJ0aWNhbFRpbGRlJywgWzg3NjhdXSwgWydWZXJ5VGhpblNwYWNlJywgWzgyMDJdXSwgWydWZnInLCBbMTIwMDg5XV0sIFsndmZyJywgWzEyMDExNV1dLCBbJ3ZsdHJpJywgWzg4ODJdXSwgWyd2bnN1YicsIFs4ODM0LCA4NDAyXV0sIFsndm5zdXAnLCBbODgzNSwgODQwMl1dLCBbJ1ZvcGYnLCBbMTIwMTQxXV0sIFsndm9wZicsIFsxMjAxNjddXSwgWyd2cHJvcCcsIFs4NzMzXV0sIFsndnJ0cmknLCBbODg4M11dLCBbJ1ZzY3InLCBbMTE5OTg1XV0sIFsndnNjcicsIFsxMjAwMTFdXSwgWyd2c3VibkUnLCBbMTA5NTUsIDY1MDI0XV0sIFsndnN1Ym5lJywgWzg4NDIsIDY1MDI0XV0sIFsndnN1cG5FJywgWzEwOTU2LCA2NTAyNF1dLCBbJ3ZzdXBuZScsIFs4ODQzLCA2NTAyNF1dLCBbJ1Z2ZGFzaCcsIFs4ODc0XV0sIFsndnppZ3phZycsIFsxMDY1MF1dLCBbJ1djaXJjJywgWzM3Ml1dLCBbJ3djaXJjJywgWzM3M11dLCBbJ3dlZGJhcicsIFsxMDg0N11dLCBbJ3dlZGdlJywgWzg3NDNdXSwgWydXZWRnZScsIFs4ODk2XV0sIFsnd2VkZ2VxJywgWzg3OTNdXSwgWyd3ZWllcnAnLCBbODQ3Ml1dLCBbJ1dmcicsIFsxMjAwOTBdXSwgWyd3ZnInLCBbMTIwMTE2XV0sIFsnV29wZicsIFsxMjAxNDJdXSwgWyd3b3BmJywgWzEyMDE2OF1dLCBbJ3dwJywgWzg0NzJdXSwgWyd3cicsIFs4NzY4XV0sIFsnd3JlYXRoJywgWzg3NjhdXSwgWydXc2NyJywgWzExOTk4Nl1dLCBbJ3dzY3InLCBbMTIwMDEyXV0sIFsneGNhcCcsIFs4ODk4XV0sIFsneGNpcmMnLCBbOTcxMV1dLCBbJ3hjdXAnLCBbODg5OV1dLCBbJ3hkdHJpJywgWzk2NjFdXSwgWydYZnInLCBbMTIwMDkxXV0sIFsneGZyJywgWzEyMDExN11dLCBbJ3hoYXJyJywgWzEwMjMxXV0sIFsneGhBcnInLCBbMTAyMzRdXSwgWydYaScsIFs5MjZdXSwgWyd4aScsIFs5NThdXSwgWyd4bGFycicsIFsxMDIyOV1dLCBbJ3hsQXJyJywgWzEwMjMyXV0sIFsneG1hcCcsIFsxMDIzNl1dLCBbJ3huaXMnLCBbODk1NV1dLCBbJ3hvZG90JywgWzEwNzUyXV0sIFsnWG9wZicsIFsxMjAxNDNdXSwgWyd4b3BmJywgWzEyMDE2OV1dLCBbJ3hvcGx1cycsIFsxMDc1M11dLCBbJ3hvdGltZScsIFsxMDc1NF1dLCBbJ3hyYXJyJywgWzEwMjMwXV0sIFsneHJBcnInLCBbMTAyMzNdXSwgWydYc2NyJywgWzExOTk4N11dLCBbJ3hzY3InLCBbMTIwMDEzXV0sIFsneHNxY3VwJywgWzEwNzU4XV0sIFsneHVwbHVzJywgWzEwNzU2XV0sIFsneHV0cmknLCBbOTY1MV1dLCBbJ3h2ZWUnLCBbODg5N11dLCBbJ3h3ZWRnZScsIFs4ODk2XV0sIFsnWWFjdXRlJywgWzIyMV1dLCBbJ3lhY3V0ZScsIFsyNTNdXSwgWydZQWN5JywgWzEwNzFdXSwgWyd5YWN5JywgWzExMDNdXSwgWydZY2lyYycsIFszNzRdXSwgWyd5Y2lyYycsIFszNzVdXSwgWydZY3knLCBbMTA2N11dLCBbJ3ljeScsIFsxMDk5XV0sIFsneWVuJywgWzE2NV1dLCBbJ1lmcicsIFsxMjAwOTJdXSwgWyd5ZnInLCBbMTIwMTE4XV0sIFsnWUljeScsIFsxMDMxXV0sIFsneWljeScsIFsxMTExXV0sIFsnWW9wZicsIFsxMjAxNDRdXSwgWyd5b3BmJywgWzEyMDE3MF1dLCBbJ1lzY3InLCBbMTE5OTg4XV0sIFsneXNjcicsIFsxMjAwMTRdXSwgWydZVWN5JywgWzEwNzBdXSwgWyd5dWN5JywgWzExMDJdXSwgWyd5dW1sJywgWzI1NV1dLCBbJ1l1bWwnLCBbMzc2XV0sIFsnWmFjdXRlJywgWzM3N11dLCBbJ3phY3V0ZScsIFszNzhdXSwgWydaY2Fyb24nLCBbMzgxXV0sIFsnemNhcm9uJywgWzM4Ml1dLCBbJ1pjeScsIFsxMDQ3XV0sIFsnemN5JywgWzEwNzldXSwgWydaZG90JywgWzM3OV1dLCBbJ3pkb3QnLCBbMzgwXV0sIFsnemVldHJmJywgWzg0ODhdXSwgWydaZXJvV2lkdGhTcGFjZScsIFs4MjAzXV0sIFsnWmV0YScsIFs5MThdXSwgWyd6ZXRhJywgWzk1MF1dLCBbJ3pmcicsIFsxMjAxMTldXSwgWydaZnInLCBbODQ4OF1dLCBbJ1pIY3knLCBbMTA0Nl1dLCBbJ3poY3knLCBbMTA3OF1dLCBbJ3ppZ3JhcnInLCBbODY2OV1dLCBbJ3pvcGYnLCBbMTIwMTcxXV0sIFsnWm9wZicsIFs4NDg0XV0sIFsnWnNjcicsIFsxMTk5ODldXSwgWyd6c2NyJywgWzEyMDAxNV1dLCBbJ3p3aicsIFs4MjA1XV0sIFsnenduaicsIFs4MjA0XV1dO1xudmFyIGFscGhhSW5kZXggPSB7fTtcbnZhciBjaGFySW5kZXggPSB7fTtcbmNyZWF0ZUluZGV4ZXMoYWxwaGFJbmRleCwgY2hhckluZGV4KTtcbnZhciBIdG1sNUVudGl0aWVzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEh0bWw1RW50aXRpZXMoKSB7XG4gICAgfVxuICAgIEh0bWw1RW50aXRpZXMucHJvdG90eXBlLmRlY29kZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgaWYgKCFzdHIgfHwgIXN0ci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyYoIz9bXFx3XFxkXSspOz8vZywgZnVuY3Rpb24gKHMsIGVudGl0eSkge1xuICAgICAgICAgICAgdmFyIGNocjtcbiAgICAgICAgICAgIGlmIChlbnRpdHkuY2hhckF0KDApID09PSBcIiNcIikge1xuICAgICAgICAgICAgICAgIHZhciBjb2RlID0gZW50aXR5LmNoYXJBdCgxKSA9PT0gJ3gnID9cbiAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoZW50aXR5LnN1YnN0cigyKS50b0xvd2VyQ2FzZSgpLCAxNikgOlxuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChlbnRpdHkuc3Vic3RyKDEpKTtcbiAgICAgICAgICAgICAgICBpZiAoIShpc05hTihjb2RlKSB8fCBjb2RlIDwgLTMyNzY4IHx8IGNvZGUgPiA2NTUzNSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjaHIgPSBhbHBoYUluZGV4W2VudGl0eV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2hyIHx8IHM7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgSHRtbDVFbnRpdGllcy5kZWNvZGUgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHJldHVybiBuZXcgSHRtbDVFbnRpdGllcygpLmRlY29kZShzdHIpO1xuICAgIH07XG4gICAgSHRtbDVFbnRpdGllcy5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICBpZiAoIXN0ciB8fCAhc3RyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzdHJMZW5ndGggPSBzdHIubGVuZ3RoO1xuICAgICAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgd2hpbGUgKGkgPCBzdHJMZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciBjaGFySW5mbyA9IGNoYXJJbmRleFtzdHIuY2hhckNvZGVBdChpKV07XG4gICAgICAgICAgICBpZiAoY2hhckluZm8pIHtcbiAgICAgICAgICAgICAgICB2YXIgYWxwaGEgPSBjaGFySW5mb1tzdHIuY2hhckNvZGVBdChpICsgMSldO1xuICAgICAgICAgICAgICAgIGlmIChhbHBoYSkge1xuICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhbHBoYSA9IGNoYXJJbmZvWycnXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBcIiZcIiArIGFscGhhICsgXCI7XCI7XG4gICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ICs9IHN0ci5jaGFyQXQoaSk7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIEh0bWw1RW50aXRpZXMuZW5jb2RlID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gbmV3IEh0bWw1RW50aXRpZXMoKS5lbmNvZGUoc3RyKTtcbiAgICB9O1xuICAgIEh0bWw1RW50aXRpZXMucHJvdG90eXBlLmVuY29kZU5vblVURiA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgaWYgKCFzdHIgfHwgIXN0ci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgc3RyTGVuZ3RoID0gc3RyLmxlbmd0aDtcbiAgICAgICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHdoaWxlIChpIDwgc3RyTGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgYyA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgdmFyIGNoYXJJbmZvID0gY2hhckluZGV4W2NdO1xuICAgICAgICAgICAgaWYgKGNoYXJJbmZvKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFscGhhID0gY2hhckluZm9bc3RyLmNoYXJDb2RlQXQoaSArIDEpXTtcbiAgICAgICAgICAgICAgICBpZiAoYWxwaGEpIHtcbiAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYWxwaGEgPSBjaGFySW5mb1snJ107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhbHBoYSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gXCImXCIgKyBhbHBoYSArIFwiO1wiO1xuICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjIDwgMzIgfHwgYyA+IDEyNikge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnJiMnICsgYyArICc7JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdHIuY2hhckF0KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBIdG1sNUVudGl0aWVzLmVuY29kZU5vblVURiA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBIdG1sNUVudGl0aWVzKCkuZW5jb2RlTm9uVVRGKHN0cik7XG4gICAgfTtcbiAgICBIdG1sNUVudGl0aWVzLnByb3RvdHlwZS5lbmNvZGVOb25BU0NJSSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgaWYgKCFzdHIgfHwgIXN0ci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgc3RyTGVuZ3RoID0gc3RyLmxlbmd0aDtcbiAgICAgICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHdoaWxlIChpIDwgc3RyTGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgYyA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgaWYgKGMgPD0gMjU1KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cltpKytdO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ICs9ICcmIycgKyBjICsgJzsnO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBIdG1sNUVudGl0aWVzLmVuY29kZU5vbkFTQ0lJID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gbmV3IEh0bWw1RW50aXRpZXMoKS5lbmNvZGVOb25BU0NJSShzdHIpO1xuICAgIH07XG4gICAgcmV0dXJuIEh0bWw1RW50aXRpZXM7XG59KCkpO1xuZXhwb3J0cy5IdG1sNUVudGl0aWVzID0gSHRtbDVFbnRpdGllcztcbmZ1bmN0aW9uIGNyZWF0ZUluZGV4ZXMoYWxwaGFJbmRleCwgY2hhckluZGV4KSB7XG4gICAgdmFyIGkgPSBFTlRJVElFUy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgICB2YXIgZSA9IEVOVElUSUVTW2ldO1xuICAgICAgICB2YXIgYWxwaGEgPSBlWzBdO1xuICAgICAgICB2YXIgY2hhcnMgPSBlWzFdO1xuICAgICAgICB2YXIgY2hyID0gY2hhcnNbMF07XG4gICAgICAgIHZhciBhZGRDaGFyID0gKGNociA8IDMyIHx8IGNociA+IDEyNikgfHwgY2hyID09PSA2MiB8fCBjaHIgPT09IDYwIHx8IGNociA9PT0gMzggfHwgY2hyID09PSAzNCB8fCBjaHIgPT09IDM5O1xuICAgICAgICB2YXIgY2hhckluZm8gPSB2b2lkIDA7XG4gICAgICAgIGlmIChhZGRDaGFyKSB7XG4gICAgICAgICAgICBjaGFySW5mbyA9IGNoYXJJbmRleFtjaHJdID0gY2hhckluZGV4W2Nocl0gfHwge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYXJzWzFdKSB7XG4gICAgICAgICAgICB2YXIgY2hyMiA9IGNoYXJzWzFdO1xuICAgICAgICAgICAgYWxwaGFJbmRleFthbHBoYV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNocikgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjIpO1xuICAgICAgICAgICAgYWRkQ2hhciAmJiAoY2hhckluZm9bY2hyMl0gPSBhbHBoYSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhbHBoYUluZGV4W2FscGhhXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyKTtcbiAgICAgICAgICAgIGFkZENoYXIgJiYgKGNoYXJJbmZvWycnXSA9IGFscGhhKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/html-entities/lib/html5-entities.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/html-entities/lib/index.js":
|
|
/*!*************************************************!*\
|
|
!*** ./node_modules/html-entities/lib/index.js ***!
|
|
\*************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar xml_entities_1 = __webpack_require__(/*! ./xml-entities */ \"./node_modules/html-entities/lib/xml-entities.js\");\nexports.XmlEntities = xml_entities_1.XmlEntities;\nvar html4_entities_1 = __webpack_require__(/*! ./html4-entities */ \"./node_modules/html-entities/lib/html4-entities.js\");\nexports.Html4Entities = html4_entities_1.Html4Entities;\nvar html5_entities_1 = __webpack_require__(/*! ./html5-entities */ \"./node_modules/html-entities/lib/html5-entities.js\");\nexports.Html5Entities = html5_entities_1.Html5Entities;\nexports.AllHtmlEntities = html5_entities_1.Html5Entities;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvaHRtbC1lbnRpdGllcy9saWIvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaHRtbC1lbnRpdGllcy9saWIvaW5kZXguanM/YzJiZiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciB4bWxfZW50aXRpZXNfMSA9IHJlcXVpcmUoXCIuL3htbC1lbnRpdGllc1wiKTtcbmV4cG9ydHMuWG1sRW50aXRpZXMgPSB4bWxfZW50aXRpZXNfMS5YbWxFbnRpdGllcztcbnZhciBodG1sNF9lbnRpdGllc18xID0gcmVxdWlyZShcIi4vaHRtbDQtZW50aXRpZXNcIik7XG5leHBvcnRzLkh0bWw0RW50aXRpZXMgPSBodG1sNF9lbnRpdGllc18xLkh0bWw0RW50aXRpZXM7XG52YXIgaHRtbDVfZW50aXRpZXNfMSA9IHJlcXVpcmUoXCIuL2h0bWw1LWVudGl0aWVzXCIpO1xuZXhwb3J0cy5IdG1sNUVudGl0aWVzID0gaHRtbDVfZW50aXRpZXNfMS5IdG1sNUVudGl0aWVzO1xuZXhwb3J0cy5BbGxIdG1sRW50aXRpZXMgPSBodG1sNV9lbnRpdGllc18xLkh0bWw1RW50aXRpZXM7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/html-entities/lib/index.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/html-entities/lib/xml-entities.js":
|
|
/*!********************************************************!*\
|
|
!*** ./node_modules/html-entities/lib/xml-entities.js ***!
|
|
\********************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ALPHA_INDEX = {\n '<': '<',\n '>': '>',\n '"': '\"',\n '&apos': '\\'',\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': '\\'',\n '&': '&'\n};\nvar CHAR_INDEX = {\n 60: 'lt',\n 62: 'gt',\n 34: 'quot',\n 39: 'apos',\n 38: 'amp'\n};\nvar CHAR_S_INDEX = {\n '<': '<',\n '>': '>',\n '\"': '"',\n '\\'': ''',\n '&': '&'\n};\nvar XmlEntities = /** @class */ (function () {\n function XmlEntities() {\n }\n XmlEntities.prototype.encode = function (str) {\n if (!str || !str.length) {\n return '';\n }\n return str.replace(/[<>\"'&]/g, function (s) {\n return CHAR_S_INDEX[s];\n });\n };\n XmlEntities.encode = function (str) {\n return new XmlEntities().encode(str);\n };\n XmlEntities.prototype.decode = function (str) {\n if (!str || !str.length) {\n return '';\n }\n return str.replace(/&#?[0-9a-zA-Z]+;?/g, function (s) {\n if (s.charAt(1) === '#') {\n var code = s.charAt(2).toLowerCase() === 'x' ?\n parseInt(s.substr(3), 16) :\n parseInt(s.substr(2));\n if (isNaN(code) || code < -32768 || code > 65535) {\n return '';\n }\n return String.fromCharCode(code);\n }\n return ALPHA_INDEX[s] || s;\n });\n };\n XmlEntities.decode = function (str) {\n return new XmlEntities().decode(str);\n };\n XmlEntities.prototype.encodeNonUTF = function (str) {\n if (!str || !str.length) {\n return '';\n }\n var strLength = str.length;\n var result = '';\n var i = 0;\n while (i < strLength) {\n var c = str.charCodeAt(i);\n var alpha = CHAR_INDEX[c];\n if (alpha) {\n result += \"&\" + alpha + \";\";\n i++;\n continue;\n }\n if (c < 32 || c > 126) {\n result += '&#' + c + ';';\n }\n else {\n result += str.charAt(i);\n }\n i++;\n }\n return result;\n };\n XmlEntities.encodeNonUTF = function (str) {\n return new XmlEntities().encodeNonUTF(str);\n };\n XmlEntities.prototype.encodeNonASCII = function (str) {\n if (!str || !str.length) {\n return '';\n }\n var strLenght = str.length;\n var result = '';\n var i = 0;\n while (i < strLenght) {\n var c = str.charCodeAt(i);\n if (c <= 255) {\n result += str[i++];\n continue;\n }\n result += '&#' + c + ';';\n i++;\n }\n return result;\n };\n XmlEntities.encodeNonASCII = function (str) {\n return new XmlEntities().encodeNonASCII(str);\n };\n return XmlEntities;\n}());\nexports.XmlEntities = XmlEntities;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvaHRtbC1lbnRpdGllcy9saWIveG1sLWVudGl0aWVzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2h0bWwtZW50aXRpZXMvbGliL3htbC1lbnRpdGllcy5qcz81MDI5Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIEFMUEhBX0lOREVYID0ge1xuICAgICcmbHQnOiAnPCcsXG4gICAgJyZndCc6ICc+JyxcbiAgICAnJnF1b3QnOiAnXCInLFxuICAgICcmYXBvcyc6ICdcXCcnLFxuICAgICcmYW1wJzogJyYnLFxuICAgICcmbHQ7JzogJzwnLFxuICAgICcmZ3Q7JzogJz4nLFxuICAgICcmcXVvdDsnOiAnXCInLFxuICAgICcmYXBvczsnOiAnXFwnJyxcbiAgICAnJmFtcDsnOiAnJidcbn07XG52YXIgQ0hBUl9JTkRFWCA9IHtcbiAgICA2MDogJ2x0JyxcbiAgICA2MjogJ2d0JyxcbiAgICAzNDogJ3F1b3QnLFxuICAgIDM5OiAnYXBvcycsXG4gICAgMzg6ICdhbXAnXG59O1xudmFyIENIQVJfU19JTkRFWCA9IHtcbiAgICAnPCc6ICcmbHQ7JyxcbiAgICAnPic6ICcmZ3Q7JyxcbiAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICAnXFwnJzogJyZhcG9zOycsXG4gICAgJyYnOiAnJmFtcDsnXG59O1xudmFyIFhtbEVudGl0aWVzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFhtbEVudGl0aWVzKCkge1xuICAgIH1cbiAgICBYbWxFbnRpdGllcy5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICBpZiAoIXN0ciB8fCAhc3RyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvWzw+XCInJl0vZywgZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgICAgIHJldHVybiBDSEFSX1NfSU5ERVhbc107XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgWG1sRW50aXRpZXMuZW5jb2RlID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gbmV3IFhtbEVudGl0aWVzKCkuZW5jb2RlKHN0cik7XG4gICAgfTtcbiAgICBYbWxFbnRpdGllcy5wcm90b3R5cGUuZGVjb2RlID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICBpZiAoIXN0ciB8fCAhc3RyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvJiM/WzAtOWEtekEtWl0rOz8vZywgZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgICAgIGlmIChzLmNoYXJBdCgxKSA9PT0gJyMnKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvZGUgPSBzLmNoYXJBdCgyKS50b0xvd2VyQ2FzZSgpID09PSAneCcgP1xuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChzLnN1YnN0cigzKSwgMTYpIDpcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQocy5zdWJzdHIoMikpO1xuICAgICAgICAgICAgICAgIGlmIChpc05hTihjb2RlKSB8fCBjb2RlIDwgLTMyNzY4IHx8IGNvZGUgPiA2NTUzNSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIEFMUEhBX0lOREVYW3NdIHx8IHM7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgWG1sRW50aXRpZXMuZGVjb2RlID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gbmV3IFhtbEVudGl0aWVzKCkuZGVjb2RlKHN0cik7XG4gICAgfTtcbiAgICBYbWxFbnRpdGllcy5wcm90b3R5cGUuZW5jb2RlTm9uVVRGID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICBpZiAoIXN0ciB8fCAhc3RyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzdHJMZW5ndGggPSBzdHIubGVuZ3RoO1xuICAgICAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgd2hpbGUgKGkgPCBzdHJMZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciBjID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgICAgICB2YXIgYWxwaGEgPSBDSEFSX0lOREVYW2NdO1xuICAgICAgICAgICAgaWYgKGFscGhhKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IFwiJlwiICsgYWxwaGEgKyBcIjtcIjtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA8IDMyIHx8IGMgPiAxMjYpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyYjJyArIGMgKyAnOyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyLmNoYXJBdChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgWG1sRW50aXRpZXMuZW5jb2RlTm9uVVRGID0gZnVuY3Rpb24gKHN0cikge1xuICAgICAgICByZXR1cm4gbmV3IFhtbEVudGl0aWVzKCkuZW5jb2RlTm9uVVRGKHN0cik7XG4gICAgfTtcbiAgICBYbWxFbnRpdGllcy5wcm90b3R5cGUuZW5jb2RlTm9uQVNDSUkgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIGlmICghc3RyIHx8ICFzdHIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHN0ckxlbmdodCA9IHN0ci5sZW5ndGg7XG4gICAgICAgIHZhciByZXN1bHQgPSAnJztcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICB3aGlsZSAoaSA8IHN0ckxlbmdodCkge1xuICAgICAgICAgICAgdmFyIGMgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICAgIGlmIChjIDw9IDI1NSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdHJbaSsrXTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCArPSAnJiMnICsgYyArICc7JztcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgWG1sRW50aXRpZXMuZW5jb2RlTm9uQVNDSUkgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHJldHVybiBuZXcgWG1sRW50aXRpZXMoKS5lbmNvZGVOb25BU0NJSShzdHIpO1xuICAgIH07XG4gICAgcmV0dXJuIFhtbEVudGl0aWVzO1xufSgpKTtcbmV4cG9ydHMuWG1sRW50aXRpZXMgPSBYbWxFbnRpdGllcztcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/html-entities/lib/xml-entities.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/loglevel/lib/loglevel.js":
|
|
/*!***********************************************!*\
|
|
!*** ./node_modules/loglevel/lib/loglevel.js ***!
|
|
\***********************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*\n* loglevel - https://github.com/pimterry/loglevel\n*\n* Copyright (c) 2013 Tim Perry\n* Licensed under the MIT license.\n*/\n(function (root, definition) {\n \"use strict\";\n if (true) {\n !(__WEBPACK_AMD_DEFINE_FACTORY__ = (definition),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n}(this, function () {\n \"use strict\";\n\n // Slightly dubious tricks to cut down minimized file size\n var noop = function() {};\n var undefinedType = \"undefined\";\n var isIE = (typeof window !== undefinedType) && (typeof window.navigator !== undefinedType) && (\n /Trident\\/|MSIE /.test(window.navigator.userAgent)\n );\n\n var logMethods = [\n \"trace\",\n \"debug\",\n \"info\",\n \"warn\",\n \"error\"\n ];\n\n // Cross-browser bind equivalent that works at least back to IE6\n function bindMethod(obj, methodName) {\n var method = obj[methodName];\n if (typeof method.bind === 'function') {\n return method.bind(obj);\n } else {\n try {\n return Function.prototype.bind.call(method, obj);\n } catch (e) {\n // Missing bind shim or IE8 + Modernizr, fallback to wrapping\n return function() {\n return Function.prototype.apply.apply(method, [obj, arguments]);\n };\n }\n }\n }\n\n // Trace() doesn't print the message in IE, so for that case we need to wrap it\n function traceForIE() {\n if (console.log) {\n if (console.log.apply) {\n console.log.apply(console, arguments);\n } else {\n // In old IE, native console methods themselves don't have apply().\n Function.prototype.apply.apply(console.log, [console, arguments]);\n }\n }\n if (console.trace) console.trace();\n }\n\n // Build the best logging method possible for this env\n // Wherever possible we want to bind, not wrap, to preserve stack traces\n function realMethod(methodName) {\n if (methodName === 'debug') {\n methodName = 'log';\n }\n\n if (typeof console === undefinedType) {\n return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives\n } else if (methodName === 'trace' && isIE) {\n return traceForIE;\n } else if (console[methodName] !== undefined) {\n return bindMethod(console, methodName);\n } else if (console.log !== undefined) {\n return bindMethod(console, 'log');\n } else {\n return noop;\n }\n }\n\n // These private functions always need `this` to be set properly\n\n function replaceLoggingMethods(level, loggerName) {\n /*jshint validthis:true */\n for (var i = 0; i < logMethods.length; i++) {\n var methodName = logMethods[i];\n this[methodName] = (i < level) ?\n noop :\n this.methodFactory(methodName, level, loggerName);\n }\n\n // Define log.log as an alias for log.debug\n this.log = this.debug;\n }\n\n // In old IE versions, the console isn't present until you first open it.\n // We build realMethod() replacements here that regenerate logging methods\n function enableLoggingWhenConsoleArrives(methodName, level, loggerName) {\n return function () {\n if (typeof console !== undefinedType) {\n replaceLoggingMethods.call(this, level, loggerName);\n this[methodName].apply(this, arguments);\n }\n };\n }\n\n // By default, we use closely bound real methods wherever possible, and\n // otherwise we wait for a console to appear, and then try again.\n function defaultMethodFactory(methodName, level, loggerName) {\n /*jshint validthis:true */\n return realMethod(methodName) ||\n enableLoggingWhenConsoleArrives.apply(this, arguments);\n }\n\n function Logger(name, defaultLevel, factory) {\n var self = this;\n var currentLevel;\n\n var storageKey = \"loglevel\";\n if (typeof name === \"string\") {\n storageKey += \":\" + name;\n } else if (typeof name === \"symbol\") {\n storageKey = undefined;\n }\n\n function persistLevelIfPossible(levelNum) {\n var levelName = (logMethods[levelNum] || 'silent').toUpperCase();\n\n if (typeof window === undefinedType || !storageKey) return;\n\n // Use localStorage if available\n try {\n window.localStorage[storageKey] = levelName;\n return;\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=\" + levelName + \";\";\n } catch (ignore) {}\n }\n\n function getPersistedLevel() {\n var storedLevel;\n\n if (typeof window === undefinedType || !storageKey) return;\n\n try {\n storedLevel = window.localStorage[storageKey];\n } catch (ignore) {}\n\n // Fallback to cookies if local storage gives us nothing\n if (typeof storedLevel === undefinedType) {\n try {\n var cookie = window.document.cookie;\n var location = cookie.indexOf(\n encodeURIComponent(storageKey) + \"=\");\n if (location !== -1) {\n storedLevel = /^([^;]+)/.exec(cookie.slice(location))[1];\n }\n } catch (ignore) {}\n }\n\n // If the stored level is not valid, treat it as if nothing was stored.\n if (self.levels[storedLevel] === undefined) {\n storedLevel = undefined;\n }\n\n return storedLevel;\n }\n\n /*\n *\n * Public logger API - see https://github.com/pimterry/loglevel for details\n *\n */\n\n self.name = name;\n\n self.levels = { \"TRACE\": 0, \"DEBUG\": 1, \"INFO\": 2, \"WARN\": 3,\n \"ERROR\": 4, \"SILENT\": 5};\n\n self.methodFactory = factory || defaultMethodFactory;\n\n self.getLevel = function () {\n return currentLevel;\n };\n\n self.setLevel = function (level, persist) {\n if (typeof level === \"string\" && self.levels[level.toUpperCase()] !== undefined) {\n level = self.levels[level.toUpperCase()];\n }\n if (typeof level === \"number\" && level >= 0 && level <= self.levels.SILENT) {\n currentLevel = level;\n if (persist !== false) { // defaults to true\n persistLevelIfPossible(level);\n }\n replaceLoggingMethods.call(self, level, name);\n if (typeof console === undefinedType && level < self.levels.SILENT) {\n return \"No console available for logging\";\n }\n } else {\n throw \"log.setLevel() called with invalid level: \" + level;\n }\n };\n\n self.setDefaultLevel = function (level) {\n if (!getPersistedLevel()) {\n self.setLevel(level, false);\n }\n };\n\n self.enableAll = function(persist) {\n self.setLevel(self.levels.TRACE, persist);\n };\n\n self.disableAll = function(persist) {\n self.setLevel(self.levels.SILENT, persist);\n };\n\n // Initialize with the right level\n var initialLevel = getPersistedLevel();\n if (initialLevel == null) {\n initialLevel = defaultLevel == null ? \"WARN\" : defaultLevel;\n }\n self.setLevel(initialLevel, false);\n }\n\n /*\n *\n * Top-level API\n *\n */\n\n var defaultLogger = new Logger();\n\n var _loggersByName = {};\n defaultLogger.getLogger = function getLogger(name) {\n if ((typeof name !== \"symbol\" && typeof name !== \"string\") || name === \"\") {\n throw new TypeError(\"You must supply a name when creating a logger.\");\n }\n\n var logger = _loggersByName[name];\n if (!logger) {\n logger = _loggersByName[name] = new Logger(\n name, defaultLogger.getLevel(), defaultLogger.methodFactory);\n }\n return logger;\n };\n\n // Grab the current global log variable in case of overwrite\n var _log = (typeof window !== undefinedType) ? window.log : undefined;\n defaultLogger.noConflict = function() {\n if (typeof window !== undefinedType &&\n window.log === defaultLogger) {\n window.log = _log;\n }\n\n return defaultLogger;\n };\n\n defaultLogger.getLoggers = function getLoggers() {\n return _loggersByName;\n };\n\n // ES6 default export, for compatibility\n defaultLogger['default'] = defaultLogger;\n\n return defaultLogger;\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbG9nbGV2ZWwvbGliL2xvZ2xldmVsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZ2xldmVsL2xpYi9sb2dsZXZlbC5qcz81YzdkIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4qIGxvZ2xldmVsIC0gaHR0cHM6Ly9naXRodWIuY29tL3BpbXRlcnJ5L2xvZ2xldmVsXG4qXG4qIENvcHlyaWdodCAoYykgMjAxMyBUaW0gUGVycnlcbiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuKi9cbihmdW5jdGlvbiAocm9vdCwgZGVmaW5pdGlvbikge1xuICAgIFwidXNlIHN0cmljdFwiO1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKGRlZmluaXRpb24pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBkZWZpbml0aW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5sb2cgPSBkZWZpbml0aW9uKCk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbiAoKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAvLyBTbGlnaHRseSBkdWJpb3VzIHRyaWNrcyB0byBjdXQgZG93biBtaW5pbWl6ZWQgZmlsZSBzaXplXG4gICAgdmFyIG5vb3AgPSBmdW5jdGlvbigpIHt9O1xuICAgIHZhciB1bmRlZmluZWRUeXBlID0gXCJ1bmRlZmluZWRcIjtcbiAgICB2YXIgaXNJRSA9ICh0eXBlb2Ygd2luZG93ICE9PSB1bmRlZmluZWRUeXBlKSAmJiAodHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IHVuZGVmaW5lZFR5cGUpICYmIChcbiAgICAgICAgL1RyaWRlbnRcXC98TVNJRSAvLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpXG4gICAgKTtcblxuICAgIHZhciBsb2dNZXRob2RzID0gW1xuICAgICAgICBcInRyYWNlXCIsXG4gICAgICAgIFwiZGVidWdcIixcbiAgICAgICAgXCJpbmZvXCIsXG4gICAgICAgIFwid2FyblwiLFxuICAgICAgICBcImVycm9yXCJcbiAgICBdO1xuXG4gICAgLy8gQ3Jvc3MtYnJvd3NlciBiaW5kIGVxdWl2YWxlbnQgdGhhdCB3b3JrcyBhdCBsZWFzdCBiYWNrIHRvIElFNlxuICAgIGZ1bmN0aW9uIGJpbmRNZXRob2Qob2JqLCBtZXRob2ROYW1lKSB7XG4gICAgICAgIHZhciBtZXRob2QgPSBvYmpbbWV0aG9kTmFtZV07XG4gICAgICAgIGlmICh0eXBlb2YgbWV0aG9kLmJpbmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBtZXRob2QuYmluZChvYmopO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuY2FsbChtZXRob2QsIG9iaik7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gTWlzc2luZyBiaW5kIHNoaW0gb3IgSUU4ICsgTW9kZXJuaXpyLCBmYWxsYmFjayB0byB3cmFwcGluZ1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5hcHBseShtZXRob2QsIFtvYmosIGFyZ3VtZW50c10pO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcmFjZSgpIGRvZXNuJ3QgcHJpbnQgdGhlIG1lc3NhZ2UgaW4gSUUsIHNvIGZvciB0aGF0IGNhc2Ugd2UgbmVlZCB0byB3cmFwIGl0XG4gICAgZnVuY3Rpb24gdHJhY2VGb3JJRSgpIHtcbiAgICAgICAgaWYgKGNvbnNvbGUubG9nKSB7XG4gICAgICAgICAgICBpZiAoY29uc29sZS5sb2cuYXBwbHkpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBJbiBvbGQgSUUsIG5hdGl2ZSBjb25zb2xlIG1ldGhvZHMgdGhlbXNlbHZlcyBkb24ndCBoYXZlIGFwcGx5KCkuXG4gICAgICAgICAgICAgICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmFwcGx5KGNvbnNvbGUubG9nLCBbY29uc29sZSwgYXJndW1lbnRzXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnNvbGUudHJhY2UpIGNvbnNvbGUudHJhY2UoKTtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCB0aGUgYmVzdCBsb2dnaW5nIG1ldGhvZCBwb3NzaWJsZSBmb3IgdGhpcyBlbnZcbiAgICAvLyBXaGVyZXZlciBwb3NzaWJsZSB3ZSB3YW50IHRvIGJpbmQsIG5vdCB3cmFwLCB0byBwcmVzZXJ2ZSBzdGFjayB0cmFjZXNcbiAgICBmdW5jdGlvbiByZWFsTWV0aG9kKG1ldGhvZE5hbWUpIHtcbiAgICAgICAgaWYgKG1ldGhvZE5hbWUgPT09ICdkZWJ1ZycpIHtcbiAgICAgICAgICAgIG1ldGhvZE5hbWUgPSAnbG9nJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY29uc29sZSA9PT0gdW5kZWZpbmVkVHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBObyBtZXRob2QgcG9zc2libGUsIGZvciBub3cgLSBmaXhlZCBsYXRlciBieSBlbmFibGVMb2dnaW5nV2hlbkNvbnNvbGVBcnJpdmVzXG4gICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZSA9PT0gJ3RyYWNlJyAmJiBpc0lFKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJhY2VGb3JJRTtcbiAgICAgICAgfSBlbHNlIGlmIChjb25zb2xlW21ldGhvZE5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBiaW5kTWV0aG9kKGNvbnNvbGUsIG1ldGhvZE5hbWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnNvbGUubG9nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBiaW5kTWV0aG9kKGNvbnNvbGUsICdsb2cnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBub29wO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhlc2UgcHJpdmF0ZSBmdW5jdGlvbnMgYWx3YXlzIG5lZWQgYHRoaXNgIHRvIGJlIHNldCBwcm9wZXJseVxuXG4gICAgZnVuY3Rpb24gcmVwbGFjZUxvZ2dpbmdNZXRob2RzKGxldmVsLCBsb2dnZXJOYW1lKSB7XG4gICAgICAgIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9nTWV0aG9kcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIG1ldGhvZE5hbWUgPSBsb2dNZXRob2RzW2ldO1xuICAgICAgICAgICAgdGhpc1ttZXRob2ROYW1lXSA9IChpIDwgbGV2ZWwpID9cbiAgICAgICAgICAgICAgICBub29wIDpcbiAgICAgICAgICAgICAgICB0aGlzLm1ldGhvZEZhY3RvcnkobWV0aG9kTmFtZSwgbGV2ZWwsIGxvZ2dlck5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVmaW5lIGxvZy5sb2cgYXMgYW4gYWxpYXMgZm9yIGxvZy5kZWJ1Z1xuICAgICAgICB0aGlzLmxvZyA9IHRoaXMuZGVidWc7XG4gICAgfVxuXG4gICAgLy8gSW4gb2xkIElFIHZlcnNpb25zLCB0aGUgY29uc29sZSBpc24ndCBwcmVzZW50IHVudGlsIHlvdSBmaXJzdCBvcGVuIGl0LlxuICAgIC8vIFdlIGJ1aWxkIHJlYWxNZXRob2QoKSByZXBsYWNlbWVudHMgaGVyZSB0aGF0IHJlZ2VuZXJhdGUgbG9nZ2luZyBtZXRob2RzXG4gICAgZnVuY3Rpb24gZW5hYmxlTG9nZ2luZ1doZW5Db25zb2xlQXJyaXZlcyhtZXRob2ROYW1lLCBsZXZlbCwgbG9nZ2VyTmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSB1bmRlZmluZWRUeXBlKSB7XG4gICAgICAgICAgICAgICAgcmVwbGFjZUxvZ2dpbmdNZXRob2RzLmNhbGwodGhpcywgbGV2ZWwsIGxvZ2dlck5hbWUpO1xuICAgICAgICAgICAgICAgIHRoaXNbbWV0aG9kTmFtZV0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBCeSBkZWZhdWx0LCB3ZSB1c2UgY2xvc2VseSBib3VuZCByZWFsIG1ldGhvZHMgd2hlcmV2ZXIgcG9zc2libGUsIGFuZFxuICAgIC8vIG90aGVyd2lzZSB3ZSB3YWl0IGZvciBhIGNvbnNvbGUgdG8gYXBwZWFyLCBhbmQgdGhlbiB0cnkgYWdhaW4uXG4gICAgZnVuY3Rpb24gZGVmYXVsdE1ldGhvZEZhY3RvcnkobWV0aG9kTmFtZSwgbGV2ZWwsIGxvZ2dlck5hbWUpIHtcbiAgICAgICAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgICAgICAgcmV0dXJuIHJlYWxNZXRob2QobWV0aG9kTmFtZSkgfHxcbiAgICAgICAgICAgICAgIGVuYWJsZUxvZ2dpbmdXaGVuQ29uc29sZUFycml2ZXMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBMb2dnZXIobmFtZSwgZGVmYXVsdExldmVsLCBmYWN0b3J5KSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB2YXIgY3VycmVudExldmVsO1xuXG4gICAgICB2YXIgc3RvcmFnZUtleSA9IFwibG9nbGV2ZWxcIjtcbiAgICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBzdG9yYWdlS2V5ICs9IFwiOlwiICsgbmFtZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIHtcbiAgICAgICAgc3RvcmFnZUtleSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gcGVyc2lzdExldmVsSWZQb3NzaWJsZShsZXZlbE51bSkge1xuICAgICAgICAgIHZhciBsZXZlbE5hbWUgPSAobG9nTWV0aG9kc1tsZXZlbE51bV0gfHwgJ3NpbGVudCcpLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gdW5kZWZpbmVkVHlwZSB8fCAhc3RvcmFnZUtleSkgcmV0dXJuO1xuXG4gICAgICAgICAgLy8gVXNlIGxvY2FsU3RvcmFnZSBpZiBhdmFpbGFibGVcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlW3N0b3JhZ2VLZXldID0gbGV2ZWxOYW1lO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSBjYXRjaCAoaWdub3JlKSB7fVxuXG4gICAgICAgICAgLy8gVXNlIHNlc3Npb24gY29va2llIGFzIGZhbGxiYWNrXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmNvb2tpZSA9XG4gICAgICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0b3JhZ2VLZXkpICsgXCI9XCIgKyBsZXZlbE5hbWUgKyBcIjtcIjtcbiAgICAgICAgICB9IGNhdGNoIChpZ25vcmUpIHt9XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGdldFBlcnNpc3RlZExldmVsKCkge1xuICAgICAgICAgIHZhciBzdG9yZWRMZXZlbDtcblxuICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSB1bmRlZmluZWRUeXBlIHx8ICFzdG9yYWdlS2V5KSByZXR1cm47XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBzdG9yZWRMZXZlbCA9IHdpbmRvdy5sb2NhbFN0b3JhZ2Vbc3RvcmFnZUtleV07XG4gICAgICAgICAgfSBjYXRjaCAoaWdub3JlKSB7fVxuXG4gICAgICAgICAgLy8gRmFsbGJhY2sgdG8gY29va2llcyBpZiBsb2NhbCBzdG9yYWdlIGdpdmVzIHVzIG5vdGhpbmdcbiAgICAgICAgICBpZiAodHlwZW9mIHN0b3JlZExldmVsID09PSB1bmRlZmluZWRUeXBlKSB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICB2YXIgY29va2llID0gd2luZG93LmRvY3VtZW50LmNvb2tpZTtcbiAgICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9IGNvb2tpZS5pbmRleE9mKFxuICAgICAgICAgICAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChzdG9yYWdlS2V5KSArIFwiPVwiKTtcbiAgICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdG9yZWRMZXZlbCA9IC9eKFteO10rKS8uZXhlYyhjb29raWUuc2xpY2UobG9jYXRpb24pKVsxXTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBjYXRjaCAoaWdub3JlKSB7fVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIElmIHRoZSBzdG9yZWQgbGV2ZWwgaXMgbm90IHZhbGlkLCB0cmVhdCBpdCBhcyBpZiBub3RoaW5nIHdhcyBzdG9yZWQuXG4gICAgICAgICAgaWYgKHNlbGYubGV2ZWxzW3N0b3JlZExldmVsXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHN0b3JlZExldmVsID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzdG9yZWRMZXZlbDtcbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgICAqXG4gICAgICAgKiBQdWJsaWMgbG9nZ2VyIEFQSSAtIHNlZSBodHRwczovL2dpdGh1Yi5jb20vcGltdGVycnkvbG9nbGV2ZWwgZm9yIGRldGFpbHNcbiAgICAgICAqXG4gICAgICAgKi9cblxuICAgICAgc2VsZi5uYW1lID0gbmFtZTtcblxuICAgICAgc2VsZi5sZXZlbHMgPSB7IFwiVFJBQ0VcIjogMCwgXCJERUJVR1wiOiAxLCBcIklORk9cIjogMiwgXCJXQVJOXCI6IDMsXG4gICAgICAgICAgXCJFUlJPUlwiOiA0LCBcIlNJTEVOVFwiOiA1fTtcblxuICAgICAgc2VsZi5tZXRob2RGYWN0b3J5ID0gZmFjdG9yeSB8fCBkZWZhdWx0TWV0aG9kRmFjdG9yeTtcblxuICAgICAgc2VsZi5nZXRMZXZlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY3VycmVudExldmVsO1xuICAgICAgfTtcblxuICAgICAgc2VsZi5zZXRMZXZlbCA9IGZ1bmN0aW9uIChsZXZlbCwgcGVyc2lzdCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09IFwic3RyaW5nXCIgJiYgc2VsZi5sZXZlbHNbbGV2ZWwudG9VcHBlckNhc2UoKV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBsZXZlbCA9IHNlbGYubGV2ZWxzW2xldmVsLnRvVXBwZXJDYXNlKCldO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZW9mIGxldmVsID09PSBcIm51bWJlclwiICYmIGxldmVsID49IDAgJiYgbGV2ZWwgPD0gc2VsZi5sZXZlbHMuU0lMRU5UKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRMZXZlbCA9IGxldmVsO1xuICAgICAgICAgICAgICBpZiAocGVyc2lzdCAhPT0gZmFsc2UpIHsgIC8vIGRlZmF1bHRzIHRvIHRydWVcbiAgICAgICAgICAgICAgICAgIHBlcnNpc3RMZXZlbElmUG9zc2libGUobGV2ZWwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlcGxhY2VMb2dnaW5nTWV0aG9kcy5jYWxsKHNlbGYsIGxldmVsLCBuYW1lKTtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlID09PSB1bmRlZmluZWRUeXBlICYmIGxldmVsIDwgc2VsZi5sZXZlbHMuU0lMRU5UKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJObyBjb25zb2xlIGF2YWlsYWJsZSBmb3IgbG9nZ2luZ1wiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgXCJsb2cuc2V0TGV2ZWwoKSBjYWxsZWQgd2l0aCBpbnZhbGlkIGxldmVsOiBcIiArIGxldmVsO1xuICAgICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHNlbGYuc2V0RGVmYXVsdExldmVsID0gZnVuY3Rpb24gKGxldmVsKSB7XG4gICAgICAgICAgaWYgKCFnZXRQZXJzaXN0ZWRMZXZlbCgpKSB7XG4gICAgICAgICAgICAgIHNlbGYuc2V0TGV2ZWwobGV2ZWwsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBzZWxmLmVuYWJsZUFsbCA9IGZ1bmN0aW9uKHBlcnNpc3QpIHtcbiAgICAgICAgICBzZWxmLnNldExldmVsKHNlbGYubGV2ZWxzLlRSQUNFLCBwZXJzaXN0KTtcbiAgICAgIH07XG5cbiAgICAgIHNlbGYuZGlzYWJsZUFsbCA9IGZ1bmN0aW9uKHBlcnNpc3QpIHtcbiAgICAgICAgICBzZWxmLnNldExldmVsKHNlbGYubGV2ZWxzLlNJTEVOVCwgcGVyc2lzdCk7XG4gICAgICB9O1xuXG4gICAgICAvLyBJbml0aWFsaXplIHdpdGggdGhlIHJpZ2h0IGxldmVsXG4gICAgICB2YXIgaW5pdGlhbExldmVsID0gZ2V0UGVyc2lzdGVkTGV2ZWwoKTtcbiAgICAgIGlmIChpbml0aWFsTGV2ZWwgPT0gbnVsbCkge1xuICAgICAgICAgIGluaXRpYWxMZXZlbCA9IGRlZmF1bHRMZXZlbCA9PSBudWxsID8gXCJXQVJOXCIgOiBkZWZhdWx0TGV2ZWw7XG4gICAgICB9XG4gICAgICBzZWxmLnNldExldmVsKGluaXRpYWxMZXZlbCwgZmFsc2UpO1xuICAgIH1cblxuICAgIC8qXG4gICAgICpcbiAgICAgKiBUb3AtbGV2ZWwgQVBJXG4gICAgICpcbiAgICAgKi9cblxuICAgIHZhciBkZWZhdWx0TG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG4gICAgdmFyIF9sb2dnZXJzQnlOYW1lID0ge307XG4gICAgZGVmYXVsdExvZ2dlci5nZXRMb2dnZXIgPSBmdW5jdGlvbiBnZXRMb2dnZXIobmFtZSkge1xuICAgICAgICBpZiAoKHR5cGVvZiBuYW1lICE9PSBcInN5bWJvbFwiICYmIHR5cGVvZiBuYW1lICE9PSBcInN0cmluZ1wiKSB8fCBuYW1lID09PSBcIlwiKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIllvdSBtdXN0IHN1cHBseSBhIG5hbWUgd2hlbiBjcmVhdGluZyBhIGxvZ2dlci5cIik7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbG9nZ2VyID0gX2xvZ2dlcnNCeU5hbWVbbmFtZV07XG4gICAgICAgIGlmICghbG9nZ2VyKSB7XG4gICAgICAgICAgbG9nZ2VyID0gX2xvZ2dlcnNCeU5hbWVbbmFtZV0gPSBuZXcgTG9nZ2VyKFxuICAgICAgICAgICAgbmFtZSwgZGVmYXVsdExvZ2dlci5nZXRMZXZlbCgpLCBkZWZhdWx0TG9nZ2VyLm1ldGhvZEZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2dnZXI7XG4gICAgfTtcblxuICAgIC8vIEdyYWIgdGhlIGN1cnJlbnQgZ2xvYmFsIGxvZyB2YXJpYWJsZSBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxuICAgIHZhciBfbG9nID0gKHR5cGVvZiB3aW5kb3cgIT09IHVuZGVmaW5lZFR5cGUpID8gd2luZG93LmxvZyA6IHVuZGVmaW5lZDtcbiAgICBkZWZhdWx0TG9nZ2VyLm5vQ29uZmxpY3QgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IHVuZGVmaW5lZFR5cGUgJiZcbiAgICAgICAgICAgICAgIHdpbmRvdy5sb2cgPT09IGRlZmF1bHRMb2dnZXIpIHtcbiAgICAgICAgICAgIHdpbmRvdy5sb2cgPSBfbG9nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRMb2dnZXI7XG4gICAgfTtcblxuICAgIGRlZmF1bHRMb2dnZXIuZ2V0TG9nZ2VycyA9IGZ1bmN0aW9uIGdldExvZ2dlcnMoKSB7XG4gICAgICAgIHJldHVybiBfbG9nZ2Vyc0J5TmFtZTtcbiAgICB9O1xuXG4gICAgLy8gRVM2IGRlZmF1bHQgZXhwb3J0LCBmb3IgY29tcGF0aWJpbGl0eVxuICAgIGRlZmF1bHRMb2dnZXJbJ2RlZmF1bHQnXSA9IGRlZmF1bHRMb2dnZXI7XG5cbiAgICByZXR1cm4gZGVmYXVsdExvZ2dlcjtcbn0pKTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBLGFBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/loglevel/lib/loglevel.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/node-libs-browser/node_modules/punycode/punycode.js":
|
|
/*!**************************************************************************!*\
|
|
!*** ./node_modules/node-libs-browser/node_modules/punycode/punycode.js ***!
|
|
\**************************************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
eval("/* WEBPACK VAR INJECTION */(function(module, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = true && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = true && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttrue\n\t) {\n\t\t!(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {\n\t\t\treturn punycode;\n\t\t}).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else {}\n\n}(this));\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module), __webpack_require__(/*! ./../../../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbm9kZS1saWJzLWJyb3dzZXIvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL25vZGUtbGlicy1icm93c2VyL25vZGVfbW9kdWxlcy9wdW55Y29kZS9wdW55Y29kZS5qcz8xOTg1Il0sInNvdXJjZXNDb250ZW50IjpbIi8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4xIGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiZcblx0XHQhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0IW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChcblx0XHRmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fFxuXHRcdGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC5zZWxmID09PSBmcmVlR2xvYmFsXG5cdCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW15cXHgyMC1cXHg3RV0vLCAvLyB1bnByaW50YWJsZSBBU0NJSSBjaGFycyArIG5vbi1BU0NJSSBjaGFyc1xuXHRyZWdleFNlcGFyYXRvcnMgPSAvW1xceDJFXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nLCAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG5cblx0LyoqIEVycm9yIG1lc3NhZ2VzICovXG5cdGVycm9ycyA9IHtcblx0XHQnb3ZlcmZsb3cnOiAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnLFxuXHRcdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdFx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcblx0fSxcblxuXHQvKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5cdGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbixcblx0Zmxvb3IgPSBNYXRoLmZsb29yLFxuXHRzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLFxuXG5cdC8qKiBUZW1wb3JhcnkgdmFyaWFibGUgKi9cblx0a2V5O1xuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGVycm9yIHR5cGUuXG5cdCAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cblx0ICovXG5cdGZ1bmN0aW9uIGVycm9yKHR5cGUpIHtcblx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcblx0ICogaXRlbS5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBhcnJheSBvZiB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuXHQgKi9cblx0ZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRcdHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdFx0dmFyIHJlc3VsdCA9IFtdO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcblx0ICogYWRkcmVzc2VzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcblx0ICogY2hhcmFjdGVyLlxuXHQgKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuXHQgKiBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdFx0dmFyIHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdFx0cmVzdWx0ID0gcGFydHNbMF0gKyAnQCc7XG5cdFx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0XHR9XG5cdFx0Ly8gQXZvaWQgYHNwbGl0KHJlZ2V4KWAgZm9yIElFOCBjb21wYXRpYmlsaXR5LiBTZWUgIzE3LlxuXHRcdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdFx0dmFyIGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRcdHZhciBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0XHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG5cdCAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcblx0ICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcblx0ICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG5cdCAqIG1hdGNoaW5nIFVURi0xNi5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuNC4xJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykge1xuXHRcdFx0Ly8gaW4gTm9kZS5qcywgaW8uanMsIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKGtleSBpbiBwdW55Y29kZSkge1xuXHRcdFx0XHRwdW55Y29kZS5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gcHVueWNvZGVba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0EsVUFhQTtBQUNBO0FBQ0E7O0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/node-libs-browser/node_modules/punycode/punycode.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/querystring-es3/decode.js":
|
|
/*!************************************************!*\
|
|
!*** ./node_modules/querystring-es3/decode.js ***!
|
|
\************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2RlY29kZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvZGVjb2RlLmpzPzkxZGQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gSWYgb2JqLmhhc093blByb3BlcnR5IGhhcyBiZWVuIG92ZXJyaWRkZW4sIHRoZW4gY2FsbGluZ1xuLy8gb2JqLmhhc093blByb3BlcnR5KHByb3ApIHdpbGwgYnJlYWsuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvMTcwN1xuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihxcywgc2VwLCBlcSwgb3B0aW9ucykge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcXMgIT09ICdzdHJpbmcnIHx8IHFzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gL1xcKy9nO1xuICBxcyA9IHFzLnNwbGl0KHNlcCk7XG5cbiAgdmFyIG1heEtleXMgPSAxMDAwO1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5tYXhLZXlzID09PSAnbnVtYmVyJykge1xuICAgIG1heEtleXMgPSBvcHRpb25zLm1heEtleXM7XG4gIH1cblxuICB2YXIgbGVuID0gcXMubGVuZ3RoO1xuICAvLyBtYXhLZXlzIDw9IDAgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGxpbWl0IGtleXMgY291bnRcbiAgaWYgKG1heEtleXMgPiAwICYmIGxlbiA+IG1heEtleXMpIHtcbiAgICBsZW4gPSBtYXhLZXlzO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciB4ID0gcXNbaV0ucmVwbGFjZShyZWdleHAsICclMjAnKSxcbiAgICAgICAgaWR4ID0geC5pbmRleE9mKGVxKSxcbiAgICAgICAga3N0ciwgdnN0ciwgaywgdjtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAga3N0ciA9IHguc3Vic3RyKDAsIGlkeCk7XG4gICAgICB2c3RyID0geC5zdWJzdHIoaWR4ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtzdHIgPSB4O1xuICAgICAgdnN0ciA9ICcnO1xuICAgIH1cblxuICAgIGsgPSBkZWNvZGVVUklDb21wb25lbnQoa3N0cik7XG4gICAgdiA9IGRlY29kZVVSSUNvbXBvbmVudCh2c3RyKTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkob2JqLCBrKSkge1xuICAgICAgb2JqW2tdID0gdjtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgb2JqW2tdLnB1c2godik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrXSA9IFtvYmpba10sIHZdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHhzKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeHMpID09PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/querystring-es3/decode.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/querystring-es3/encode.js":
|
|
/*!************************************************!*\
|
|
!*** ./node_modules/querystring-es3/encode.js ***!
|
|
\************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return map(objectKeys(obj), function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (isArray(obj[k])) {\n return map(obj[k], function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map (xs, f) {\n if (xs.map) return xs.map(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n res.push(f(xs[i], i));\n }\n return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n var res = [];\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n }\n return res;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2VuY29kZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvZW5jb2RlLmpzP2UwOTkiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/querystring-es3/encode.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/querystring-es3/index.js":
|
|
/*!***********************************************!*\
|
|
!*** ./node_modules/querystring-es3/index.js ***!
|
|
\***********************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\n\nexports.decode = exports.parse = __webpack_require__(/*! ./decode */ \"./node_modules/querystring-es3/decode.js\");\nexports.encode = exports.stringify = __webpack_require__(/*! ./encode */ \"./node_modules/querystring-es3/encode.js\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9pbmRleC5qcz9iMzgzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5kZWNvZGUgPSBleHBvcnRzLnBhcnNlID0gcmVxdWlyZSgnLi9kZWNvZGUnKTtcbmV4cG9ydHMuZW5jb2RlID0gZXhwb3J0cy5zdHJpbmdpZnkgPSByZXF1aXJlKCcuL2VuY29kZScpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/querystring-es3/index.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/sockjs-client/dist/sockjs.js":
|
|
/*!***************************************************!*\
|
|
!*** ./node_modules/sockjs-client/dist/sockjs.js ***!
|
|
\***************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
eval("/* WEBPACK VAR INJECTION */(function(global) {var require;var require;/* sockjs-client v1.5.0 | http://sockjs.org | MIT license */\n(function(f){if(true){module.exports=f()}else { var g; }})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return require(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar transportList = require('./transport-list');\n\nmodule.exports = require('./main')(transportList);\n\n// TODO can't get rid of this until all servers do\nif ('_sockjs_onload' in global) {\n setTimeout(global._sockjs_onload, 1);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"./main\":14,\"./transport-list\":16}],2:[function(require,module,exports){\n'use strict';\n\nvar inherits = require('inherits')\n , Event = require('./event')\n ;\n\nfunction CloseEvent() {\n Event.call(this);\n this.initEvent('close', false, false);\n this.wasClean = false;\n this.code = 0;\n this.reason = '';\n}\n\ninherits(CloseEvent, Event);\n\nmodule.exports = CloseEvent;\n\n},{\"./event\":4,\"inherits\":57}],3:[function(require,module,exports){\n'use strict';\n\nvar inherits = require('inherits')\n , EventTarget = require('./eventtarget')\n ;\n\nfunction EventEmitter() {\n EventTarget.call(this);\n}\n\ninherits(EventEmitter, EventTarget);\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n if (type) {\n delete this._listeners[type];\n } else {\n this._listeners = {};\n }\n};\n\nEventEmitter.prototype.once = function(type, listener) {\n var self = this\n , fired = false;\n\n function g() {\n self.removeListener(type, g);\n\n if (!fired) {\n fired = true;\n listener.apply(this, arguments);\n }\n }\n\n this.on(type, g);\n};\n\nEventEmitter.prototype.emit = function() {\n var type = arguments[0];\n var listeners = this._listeners[type];\n if (!listeners) {\n return;\n }\n // equivalent of Array.prototype.slice.call(arguments, 1);\n var l = arguments.length;\n var args = new Array(l - 1);\n for (var ai = 1; ai < l; ai++) {\n args[ai - 1] = arguments[ai];\n }\n for (var i = 0; i < listeners.length; i++) {\n listeners[i].apply(this, args);\n }\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener = EventTarget.prototype.addEventListener;\nEventEmitter.prototype.removeListener = EventTarget.prototype.removeEventListener;\n\nmodule.exports.EventEmitter = EventEmitter;\n\n},{\"./eventtarget\":5,\"inherits\":57}],4:[function(require,module,exports){\n'use strict';\n\nfunction Event(eventType) {\n this.type = eventType;\n}\n\nEvent.prototype.initEvent = function(eventType, canBubble, cancelable) {\n this.type = eventType;\n this.bubbles = canBubble;\n this.cancelable = cancelable;\n this.timeStamp = +new Date();\n return this;\n};\n\nEvent.prototype.stopPropagation = function() {};\nEvent.prototype.preventDefault = function() {};\n\nEvent.CAPTURING_PHASE = 1;\nEvent.AT_TARGET = 2;\nEvent.BUBBLING_PHASE = 3;\n\nmodule.exports = Event;\n\n},{}],5:[function(require,module,exports){\n'use strict';\n\n/* Simplified implementation of DOM2 EventTarget.\n * http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-EventTarget\n */\n\nfunction EventTarget() {\n this._listeners = {};\n}\n\nEventTarget.prototype.addEventListener = function(eventType, listener) {\n if (!(eventType in this._listeners)) {\n this._listeners[eventType] = [];\n }\n var arr = this._listeners[eventType];\n // #4\n if (arr.indexOf(listener) === -1) {\n // Make a copy so as not to interfere with a current dispatchEvent.\n arr = arr.concat([listener]);\n }\n this._listeners[eventType] = arr;\n};\n\nEventTarget.prototype.removeEventListener = function(eventType, listener) {\n var arr = this._listeners[eventType];\n if (!arr) {\n return;\n }\n var idx = arr.indexOf(listener);\n if (idx !== -1) {\n if (arr.length > 1) {\n // Make a copy so as not to interfere with a current dispatchEvent.\n this._listeners[eventType] = arr.slice(0, idx).concat(arr.slice(idx + 1));\n } else {\n delete this._listeners[eventType];\n }\n return;\n }\n};\n\nEventTarget.prototype.dispatchEvent = function() {\n var event = arguments[0];\n var t = event.type;\n // equivalent of Array.prototype.slice.call(arguments, 0);\n var args = arguments.length === 1 ? [event] : Array.apply(null, arguments);\n // TODO: This doesn't match the real behavior; per spec, onfoo get\n // their place in line from the /first/ time they're set from\n // non-null. Although WebKit bumps it to the end every time it's\n // set.\n if (this['on' + t]) {\n this['on' + t].apply(this, args);\n }\n if (t in this._listeners) {\n // Grab a reference to the listeners list. removeEventListener may alter the list.\n var listeners = this._listeners[t];\n for (var i = 0; i < listeners.length; i++) {\n listeners[i].apply(this, args);\n }\n }\n};\n\nmodule.exports = EventTarget;\n\n},{}],6:[function(require,module,exports){\n'use strict';\n\nvar inherits = require('inherits')\n , Event = require('./event')\n ;\n\nfunction TransportMessageEvent(data) {\n Event.call(this);\n this.initEvent('message', false, false);\n this.data = data;\n}\n\ninherits(TransportMessageEvent, Event);\n\nmodule.exports = TransportMessageEvent;\n\n},{\"./event\":4,\"inherits\":57}],7:[function(require,module,exports){\n'use strict';\n\nvar JSON3 = require('json3')\n , iframeUtils = require('./utils/iframe')\n ;\n\nfunction FacadeJS(transport) {\n this._transport = transport;\n transport.on('message', this._transportMessage.bind(this));\n transport.on('close', this._transportClose.bind(this));\n}\n\nFacadeJS.prototype._transportClose = function(code, reason) {\n iframeUtils.postMessage('c', JSON3.stringify([code, reason]));\n};\nFacadeJS.prototype._transportMessage = function(frame) {\n iframeUtils.postMessage('t', frame);\n};\nFacadeJS.prototype._send = function(data) {\n this._transport.send(data);\n};\nFacadeJS.prototype._close = function() {\n this._transport.close();\n this._transport.removeAllListeners();\n};\n\nmodule.exports = FacadeJS;\n\n},{\"./utils/iframe\":47,\"json3\":58}],8:[function(require,module,exports){\n(function (process){\n'use strict';\n\nvar urlUtils = require('./utils/url')\n , eventUtils = require('./utils/event')\n , JSON3 = require('json3')\n , FacadeJS = require('./facade')\n , InfoIframeReceiver = require('./info-iframe-receiver')\n , iframeUtils = require('./utils/iframe')\n , loc = require('./location')\n ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n debug = require('debug')('sockjs-client:iframe-bootstrap');\n}\n\nmodule.exports = function(SockJS, availableTransports) {\n var transportMap = {};\n availableTransports.forEach(function(at) {\n if (at.facadeTransport) {\n transportMap[at.facadeTransport.transportName] = at.facadeTransport;\n }\n });\n\n // hard-coded for the info iframe\n // TODO see if we can make this more dynamic\n transportMap[InfoIframeReceiver.transportName] = InfoIframeReceiver;\n var parentOrigin;\n\n /* eslint-disable camelcase */\n SockJS.bootstrap_iframe = function() {\n /* eslint-enable camelcase */\n var facade;\n iframeUtils.currentWindowId = loc.hash.slice(1);\n var onMessage = function(e) {\n if (e.source !== parent) {\n return;\n }\n if (typeof parentOrigin === 'undefined') {\n parentOrigin = e.origin;\n }\n if (e.origin !== parentOrigin) {\n return;\n }\n\n var iframeMessage;\n try {\n iframeMessage = JSON3.parse(e.data);\n } catch (ignored) {\n debug('bad json', e.data);\n return;\n }\n\n if (iframeMessage.windowId !== iframeUtils.currentWindowId) {\n return;\n }\n switch (iframeMessage.type) {\n case 's':\n var p;\n try {\n p = JSON3.parse(iframeMessage.data);\n } catch (ignored) {\n debug('bad json', iframeMessage.data);\n break;\n }\n var version = p[0];\n var transport = p[1];\n var transUrl = p[2];\n var baseUrl = p[3];\n debug(version, transport, transUrl, baseUrl);\n // change this to semver logic\n if (version !== SockJS.version) {\n throw new Error('Incompatible SockJS! Main site uses:' +\n ' \"' + version + '\", the iframe:' +\n ' \"' + SockJS.version + '\".');\n }\n\n if (!urlUtils.isOriginEqual(transUrl, loc.href) ||\n !urlUtils.isOriginEqual(baseUrl, loc.href)) {\n throw new Error('Can\\'t connect to different domain from within an ' +\n 'iframe. (' + loc.href + ', ' + transUrl + ', ' + baseUrl + ')');\n }\n facade = new FacadeJS(new transportMap[transport](transUrl, baseUrl));\n break;\n case 'm':\n facade._send(iframeMessage.data);\n break;\n case 'c':\n if (facade) {\n facade._close();\n }\n facade = null;\n break;\n }\n };\n\n eventUtils.attachEvent('message', onMessage);\n\n // Start\n iframeUtils.postMessage('s');\n };\n};\n\n}).call(this,{ env: {} })\n\n},{\"./facade\":7,\"./info-iframe-receiver\":10,\"./location\":13,\"./utils/event\":46,\"./utils/iframe\":47,\"./utils/url\":52,\"debug\":55,\"json3\":58}],9:[function(require,module,exports){\n(function (process){\n'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n , inherits = require('inherits')\n , JSON3 = require('json3')\n , objectUtils = require('./utils/object')\n ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n debug = require('debug')('sockjs-client:info-ajax');\n}\n\nfunction InfoAjax(url, AjaxObject) {\n EventEmitter.call(this);\n\n var self = this;\n var t0 = +new Date();\n this.xo = new AjaxObject('GET', url);\n\n this.xo.once('finish', function(status, text) {\n var info, rtt;\n if (status === 200) {\n rtt = (+new Date()) - t0;\n if (text) {\n try {\n info = JSON3.parse(text);\n } catch (e) {\n debug('bad json', text);\n }\n }\n\n if (!objectUtils.isObject(info)) {\n info = {};\n }\n }\n self.emit('finish', info, rtt);\n self.removeAllListeners();\n });\n}\n\ninherits(InfoAjax, EventEmitter);\n\nInfoAjax.prototype.close = function() {\n this.removeAllListeners();\n this.xo.close();\n};\n\nmodule.exports = InfoAjax;\n\n}).call(this,{ env: {} })\n\n},{\"./utils/object\":49,\"debug\":55,\"events\":3,\"inherits\":57,\"json3\":58}],10:[function(require,module,exports){\n'use strict';\n\nvar inherits = require('inherits')\n , EventEmitter = require('events').EventEmitter\n , JSON3 = require('json3')\n , XHRLocalObject = require('./transport/sender/xhr-local')\n , InfoAjax = require('./info-ajax')\n ;\n\nfunction InfoReceiverIframe(transUrl) {\n var self = this;\n EventEmitter.call(this);\n\n this.ir = new InfoAjax(transUrl, XHRLocalObject);\n this.ir.once('finish', function(info, rtt) {\n self.ir = null;\n self.emit('message', JSON3.stringify([info, rtt]));\n });\n}\n\ninherits(InfoReceiverIframe, EventEmitter);\n\nInfoReceiverIframe.transportName = 'iframe-info-receiver';\n\nInfoReceiverIframe.prototype.close = function() {\n if (this.ir) {\n this.ir.close();\n this.ir = null;\n }\n this.removeAllListeners();\n};\n\nmodule.exports = InfoReceiverIframe;\n\n},{\"./info-ajax\":9,\"./transport/sender/xhr-local\":37,\"events\":3,\"inherits\":57,\"json3\":58}],11:[function(require,module,exports){\n(function (process,global){\n'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n , inherits = require('inherits')\n , JSON3 = require('json3')\n , utils = require('./utils/event')\n , IframeTransport = require('./transport/iframe')\n , InfoReceiverIframe = require('./info-iframe-receiver')\n ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n debug = require('debug')('sockjs-client:info-iframe');\n}\n\nfunction InfoIframe(baseUrl, url) {\n var self = this;\n EventEmitter.call(this);\n\n var go = function() {\n var ifr = self.ifr = new IframeTransport(InfoReceiverIframe.transportName, url, baseUrl);\n\n ifr.once('message', function(msg) {\n if (msg) {\n var d;\n try {\n d = JSON3.parse(msg);\n } catch (e) {\n debug('bad json', msg);\n self.emit('finish');\n self.close();\n return;\n }\n\n var info = d[0], rtt = d[1];\n self.emit('finish', info, rtt);\n }\n self.close();\n });\n\n ifr.once('close', function() {\n self.emit('finish');\n self.close();\n });\n };\n\n // TODO this seems the same as the 'needBody' from transports\n if (!global.document.body) {\n utils.attachEvent('load', go);\n } else {\n go();\n }\n}\n\ninherits(InfoIframe, EventEmitter);\n\nInfoIframe.enabled = function() {\n return IframeTransport.enabled();\n};\n\nInfoIframe.prototype.close = function() {\n if (this.ifr) {\n this.ifr.close();\n }\n this.removeAllListeners();\n this.ifr = null;\n};\n\nmodule.exports = InfoIframe;\n\n}).call(this,{ env: {} },typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"./info-iframe-receiver\":10,\"./transport/iframe\":22,\"./utils/event\":46,\"debug\":55,\"events\":3,\"inherits\":57,\"json3\":58}],12:[function(require,module,exports){\n(function (process){\n'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n , inherits = require('inherits')\n , urlUtils = require('./utils/url')\n , XDR = require('./transport/sender/xdr')\n , XHRCors = require('./transport/sender/xhr-cors')\n , XHRLocal = require('./transport/sender/xhr-local')\n , XHRFake = require('./transport/sender/xhr-fake')\n , InfoIframe = require('./info-iframe')\n , InfoAjax = require('./info-ajax')\n ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n debug = require('debug')('sockjs-client:info-receiver');\n}\n\nfunction InfoReceiver(baseUrl, urlInfo) {\n debug(baseUrl);\n var self = this;\n EventEmitter.call(this);\n\n setTimeout(function() {\n self.doXhr(baseUrl, urlInfo);\n }, 0);\n}\n\ninherits(InfoReceiver, EventEmitter);\n\n// TODO this is currently ignoring the list of available transports and the whitelist\n\nInfoReceiver._getReceiver = function(baseUrl, url, urlInfo) {\n // determine method of CORS support (if needed)\n if (urlInfo.sameOrigin) {\n return new InfoAjax(url, XHRLocal);\n }\n if (XHRCors.enabled) {\n return new InfoAjax(url, XHRCors);\n }\n if (XDR.enabled && urlInfo.sameScheme) {\n return new InfoAjax(url, XDR);\n }\n if (InfoIframe.enabled()) {\n return new InfoIframe(baseUrl, url);\n }\n return new InfoAjax(url, XHRFake);\n};\n\nInfoReceiver.prototype.doXhr = function(baseUrl, urlInfo) {\n var self = this\n , url = urlUtils.addPath(baseUrl, '/info')\n ;\n debug('doXhr', url);\n\n this.xo = InfoReceiver._getReceiver(baseUrl, url, urlInfo);\n\n this.timeoutRef = setTimeout(function() {\n debug('timeout');\n self._cleanup(false);\n self.emit('finish');\n }, InfoReceiver.timeout);\n\n this.xo.once('finish', function(info, rtt) {\n debug('finish', info, rtt);\n self._cleanup(true);\n self.emit('finish', info, rtt);\n });\n};\n\nInfoReceiver.prototype._cleanup = function(wasClean) {\n debug('_cleanup');\n clearTimeout(this.timeoutRef);\n this.timeoutRef = null;\n if (!wasClean && this.xo) {\n this.xo.close();\n }\n this.xo = null;\n};\n\nInfoReceiver.prototype.close = function() {\n debug('close');\n this.removeAllListeners();\n this._cleanup(false);\n};\n\nInfoReceiver.timeout = 8000;\n\nmodule.exports = InfoReceiver;\n\n}).call(this,{ env: {} })\n\n},{\"./info-ajax\":9,\"./info-iframe\":11,\"./transport/sender/xdr\":34,\"./transport/sender/xhr-cors\":35,\"./transport/sender/xhr-fake\":36,\"./transport/sender/xhr-local\":37,\"./utils/url\":52,\"debug\":55,\"events\":3,\"inherits\":57}],13:[function(require,module,exports){\n(function (global){\n'use strict';\n\nmodule.exports = global.location || {\n origin: 'http://localhost:80'\n, protocol: 'http:'\n, host: 'localhost'\n, port: 80\n, href: 'http://localhost/'\n, hash: ''\n};\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],14:[function(require,module,exports){\n(function (process,global){\n'use strict';\n\nrequire('./shims');\n\nvar URL = require('url-parse')\n , inherits = require('inherits')\n , JSON3 = require('json3')\n , random = require('./utils/random')\n , escape = require('./utils/escape')\n , urlUtils = require('./utils/url')\n , eventUtils = require('./utils/event')\n , transport = require('./utils/transport')\n , objectUtils = require('./utils/object')\n , browser = require('./utils/browser')\n , log = require('./utils/log')\n , Event = require('./event/event')\n , EventTarget = require('./event/eventtarget')\n , loc = require('./location')\n , CloseEvent = require('./event/close')\n , TransportMessageEvent = require('./event/trans-message')\n , InfoReceiver = require('./info-receiver')\n ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n debug = require('debug')('sockjs-client:main');\n}\n\nvar transports;\n\n// follow constructor steps defined at http://dev.w3.org/html5/websockets/#the-websocket-interface\nfunction SockJS(url, protocols, options) {\n if (!(this instanceof SockJS)) {\n return new SockJS(url, protocols, options);\n }\n if (arguments.length < 1) {\n throw new TypeError(\"Failed to construct 'SockJS: 1 argument required, but only 0 present\");\n }\n EventTarget.call(this);\n\n this.readyState = SockJS.CONNECTING;\n this.extensions = '';\n this.protocol = '';\n\n // non-standard extension\n options = options || {};\n if (options.protocols_whitelist) {\n log.warn(\"'protocols_whitelist' is DEPRECATED. Use 'transports' instead.\");\n }\n this._transportsWhitelist = options.transports;\n this._transportOptions = options.transportOptions || {};\n this._timeout = options.timeout || 0;\n\n var sessionId = options.sessionId || 8;\n if (typeof sessionId === 'function') {\n this._generateSessionId = sessionId;\n } else if (typeof sessionId === 'number') {\n this._generateSessionId = function() {\n return random.string(sessionId);\n };\n } else {\n throw new TypeError('If sessionId is used in the options, it needs to be a number or a function.');\n }\n\n this._server = options.server || random.numberString(1000);\n\n // Step 1 of WS spec - parse and validate the url. Issue #8\n var parsedUrl = new URL(url);\n if (!parsedUrl.host || !parsedUrl.protocol) {\n throw new SyntaxError(\"The URL '\" + url + \"' is invalid\");\n } else if (parsedUrl.hash) {\n throw new SyntaxError('The URL must not contain a fragment');\n } else if (parsedUrl.protocol !== 'http:' && parsedUrl.protocol !== 'https:') {\n throw new SyntaxError(\"The URL's scheme must be either 'http:' or 'https:'. '\" + parsedUrl.protocol + \"' is not allowed.\");\n }\n\n var secure = parsedUrl.protocol === 'https:';\n // Step 2 - don't allow secure origin with an insecure protocol\n if (loc.protocol === 'https:' && !secure) {\n // exception is 127.0.0.0/8 and ::1 urls\n if (!urlUtils.isLoopbackAddr(parsedUrl.hostname)) {\n throw new Error('SecurityError: An insecure SockJS connection may not be initiated from a page loaded over HTTPS');\n }\n }\n\n // Step 3 - check port access - no need here\n // Step 4 - parse protocols argument\n if (!protocols) {\n protocols = [];\n } else if (!Array.isArray(protocols)) {\n protocols = [protocols];\n }\n\n // Step 5 - check protocols argument\n var sortedProtocols = protocols.sort();\n sortedProtocols.forEach(function(proto, i) {\n if (!proto) {\n throw new SyntaxError(\"The protocols entry '\" + proto + \"' is invalid.\");\n }\n if (i < (sortedProtocols.length - 1) && proto === sortedProtocols[i + 1]) {\n throw new SyntaxError(\"The protocols entry '\" + proto + \"' is duplicated.\");\n }\n });\n\n // Step 6 - convert origin\n var o = urlUtils.getOrigin(loc.href);\n this._origin = o ? o.toLowerCase() : null;\n\n // remove the trailing slash\n parsedUrl.set('pathname', parsedUrl.pathname.replace(/\\/+$/, ''));\n\n // store the sanitized url\n this.url = parsedUrl.href;\n debug('using url', this.url);\n\n // Step 7 - start connection in background\n // obtain server info\n // http://sockjs.github.io/sockjs-protocol/sockjs-protocol-0.3.3.html#section-26\n this._urlInfo = {\n nullOrigin: !browser.hasDomain()\n , sameOrigin: urlUtils.isOriginEqual(this.url, loc.href)\n , sameScheme: urlUtils.isSchemeEqual(this.url, loc.href)\n };\n\n this._ir = new InfoReceiver(this.url, this._urlInfo);\n this._ir.once('finish', this._receiveInfo.bind(this));\n}\n\ninherits(SockJS, EventTarget);\n\nfunction userSetCode(code) {\n return code === 1000 || (code >= 3000 && code <= 4999);\n}\n\nSockJS.prototype.close = function(code, reason) {\n // Step 1\n if (code && !userSetCode(code)) {\n throw new Error('InvalidAccessError: Invalid code');\n }\n // Step 2.4 states the max is 123 bytes, but we are just checking length\n if (reason && reason.length > 123) {\n throw new SyntaxError('reason argument has an invalid length');\n }\n\n // Step 3.1\n if (this.readyState === SockJS.CLOSING || this.readyState === SockJS.CLOSED) {\n return;\n }\n\n // TODO look at docs to determine how to set this\n var wasClean = true;\n this._close(code || 1000, reason || 'Normal closure', wasClean);\n};\n\nSockJS.prototype.send = function(data) {\n // #13 - convert anything non-string to string\n // TODO this currently turns objects into [object Object]\n if (typeof data !== 'string') {\n data = '' + data;\n }\n if (this.readyState === SockJS.CONNECTING) {\n throw new Error('InvalidStateError: The connection has not been established yet');\n }\n if (this.readyState !== SockJS.OPEN) {\n return;\n }\n this._transport.send(escape.quote(data));\n};\n\nSockJS.version = require('./version');\n\nSockJS.CONNECTING = 0;\nSockJS.OPEN = 1;\nSockJS.CLOSING = 2;\nSockJS.CLOSED = 3;\n\nSockJS.prototype._receiveInfo = function(info, rtt) {\n debug('_receiveInfo', rtt);\n this._ir = null;\n if (!info) {\n this._close(1002, 'Cannot connect to server');\n return;\n }\n\n // establish a round-trip timeout (RTO) based on the\n // round-trip time (RTT)\n this._rto = this.countRTO(rtt);\n // allow server to override url used for the actual transport\n this._transUrl = info.base_url ? info.base_url : this.url;\n info = objectUtils.extend(info, this._urlInfo);\n debug('info', info);\n // determine list of desired and supported transports\n var enabledTransports = transports.filterToEnabled(this._transportsWhitelist, info);\n this._transports = enabledTransports.main;\n debug(this._transports.length + ' enabled transports');\n\n this._connect();\n};\n\nSockJS.prototype._connect = function() {\n for (var Transport = this._transports.shift(); Transport; Transport = this._transports.shift()) {\n debug('attempt', Transport.transportName);\n if (Transport.needBody) {\n if (!global.document.body ||\n (typeof global.document.readyState !== 'undefined' &&\n global.document.readyState !== 'complete' &&\n global.document.readyState !== 'interactive')) {\n debug('waiting for body');\n this._transports.unshift(Transport);\n eventUtils.attachEvent('load', this._connect.bind(this));\n return;\n }\n }\n\n // calculate timeout based on RTO and round trips. Default to 5s\n var timeoutMs = Math.max(this._timeout, (this._rto * Transport.roundTrips) || 5000);\n this._transportTimeoutId = setTimeout(this._transportTimeout.bind(this), timeoutMs);\n debug('using timeout', timeoutMs);\n\n var transportUrl = urlUtils.addPath(this._transUrl, '/' + this._server + '/' + this._generateSessionId());\n var options = this._transportOptions[Transport.transportName];\n debug('transport url', transportUrl);\n var transportObj = new Transport(transportUrl, this._transUrl, options);\n transportObj.on('message', this._transportMessage.bind(this));\n transportObj.once('close', this._transportClose.bind(this));\n transportObj.transportName = Transport.transportName;\n this._transport = transportObj;\n\n return;\n }\n this._close(2000, 'All transports failed', false);\n};\n\nSockJS.prototype._transportTimeout = function() {\n debug('_transportTimeout');\n if (this.readyState === SockJS.CONNECTING) {\n if (this._transport) {\n this._transport.close();\n }\n\n this._transportClose(2007, 'Transport timed out');\n }\n};\n\nSockJS.prototype._transportMessage = function(msg) {\n debug('_transportMessage', msg);\n var self = this\n , type = msg.slice(0, 1)\n , content = msg.slice(1)\n , payload\n ;\n\n // first check for messages that don't need a payload\n switch (type) {\n case 'o':\n this._open();\n return;\n case 'h':\n this.dispatchEvent(new Event('heartbeat'));\n debug('heartbeat', this.transport);\n return;\n }\n\n if (content) {\n try {\n payload = JSON3.parse(content);\n } catch (e) {\n debug('bad json', content);\n }\n }\n\n if (typeof payload === 'undefined') {\n debug('empty payload', content);\n return;\n }\n\n switch (type) {\n case 'a':\n if (Array.isArray(payload)) {\n payload.forEach(function(p) {\n debug('message', self.transport, p);\n self.dispatchEvent(new TransportMessageEvent(p));\n });\n }\n break;\n case 'm':\n debug('message', this.transport, payload);\n this.dispatchEvent(new TransportMessageEvent(payload));\n break;\n case 'c':\n if (Array.isArray(payload) && payload.length === 2) {\n this._close(payload[0], payload[1], true);\n }\n break;\n }\n};\n\nSockJS.prototype._transportClose = function(code, reason) {\n debug('_transportClose', this.transport, code, reason);\n if (this._transport) {\n this._transport.removeAllListeners();\n this._transport = null;\n this.transport = null;\n }\n\n if (!userSetCode(code) && code !== 2000 && this.readyState === SockJS.CONNECTING) {\n this._connect();\n return;\n }\n\n this._close(code, reason);\n};\n\nSockJS.prototype._open = function() {\n debug('_open', this._transport && this._transport.transportName, this.readyState);\n if (this.readyState === SockJS.CONNECTING) {\n if (this._transportTimeoutId) {\n clearTimeout(this._transportTimeoutId);\n this._transportTimeoutId = null;\n }\n this.readyState = SockJS.OPEN;\n this.transport = this._transport.transportName;\n this.dispatchEvent(new Event('open'));\n debug('connected', this.transport);\n } else {\n // The server might have been restarted, and lost track of our\n // connection.\n this._close(1006, 'Server lost session');\n }\n};\n\nSockJS.prototype._close = function(code, reason, wasClean) {\n debug('_close', this.transport, code, reason, wasClean, this.readyState);\n var forceFail = false;\n\n if (this._ir) {\n forceFail = true;\n this._ir.close();\n this._ir = null;\n }\n if (this._transport) {\n this._transport.close();\n this._transport = null;\n this.transport = null;\n }\n\n if (this.readyState === SockJS.CLOSED) {\n throw new Error('InvalidStateError: SockJS has already been closed');\n }\n\n this.readyState = SockJS.CLOSING;\n setTimeout(function() {\n this.readyState = SockJS.CLOSED;\n\n if (forceFail) {\n this.dispatchEvent(new Event('error'));\n }\n\n var e = new CloseEvent('close');\n e.wasClean = wasClean || false;\n e.code = code || 1000;\n e.reason = reason;\n\n this.dispatchEvent(e);\n this.onmessage = this.onclose = this.onerror = null;\n debug('disconnected');\n }.bind(this), 0);\n};\n\n// See: http://www.erg.abdn.ac.uk/~gerrit/dccp/notes/ccid2/rto_estimator/\n// and RFC 2988.\nSockJS.prototype.countRTO = function(rtt) {\n // In a local environment, when using IE8/9 and the `jsonp-polling`\n // transport the time needed to establish a connection (the time that pass\n // from the opening of the transport to the call of `_dispatchOpen`) is\n // around 200msec (the lower bound used in the article above) and this\n // causes spurious timeouts. For this reason we calculate a value slightly\n // larger than that used in the article.\n if (rtt > 100) {\n return 4 * rtt; // rto > 400msec\n }\n return 300 + rtt; // 300msec < rto <= 400msec\n};\n\nmodule.exports = function(availableTransports) {\n transports = transport(availableTransports);\n require('./iframe-bootstrap')(SockJS, availableTransports);\n return SockJS;\n};\n\n}).call(this,{ env: {} },typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"./event/close\":2,\"./event/event\":4,\"./event/eventtarget\":5,\"./event/trans-message\":6,\"./iframe-bootstrap\":8,\"./info-receiver\":12,\"./location\":13,\"./shims\":15,\"./utils/browser\":44,\"./utils/escape\":45,\"./utils/event\":46,\"./utils/log\":48,\"./utils/object\":49,\"./utils/random\":50,\"./utils/transport\":51,\"./utils/url\":52,\"./version\":53,\"debug\":55,\"inherits\":57,\"json3\":58,\"url-parse\":61}],15:[function(require,module,exports){\n/* eslint-disable */\n/* jscs: disable */\n'use strict';\n\n// pulled specific shims from https://github.com/es-shims/es5-shim\n\nvar ArrayPrototype = Array.prototype;\nvar ObjectPrototype = Object.prototype;\nvar FunctionPrototype = Function.prototype;\nvar StringPrototype = String.prototype;\nvar array_slice = ArrayPrototype.slice;\n\nvar _toString = ObjectPrototype.toString;\nvar isFunction = function (val) {\n return ObjectPrototype.toString.call(val) === '[object Function]';\n};\nvar isArray = function isArray(obj) {\n return _toString.call(obj) === '[object Array]';\n};\nvar isString = function isString(obj) {\n return _toString.call(obj) === '[object String]';\n};\n\nvar supportsDescriptors = Object.defineProperty && (function () {\n try {\n Object.defineProperty({}, 'x', {});\n return true;\n } catch (e) { /* this is ES3 */\n return false;\n }\n}());\n\n// Define configurable, writable and non-enumerable props\n// if they don't exist.\nvar defineProperty;\nif (supportsDescriptors) {\n defineProperty = function (object, name, method, forceAssign) {\n if (!forceAssign && (name in object)) { return; }\n Object.defineProperty(object, name, {\n configurable: true,\n enumerable: false,\n writable: true,\n value: method\n });\n };\n} else {\n defineProperty = function (object, name, method, forceAssign) {\n if (!forceAssign && (name in object)) { return; }\n object[name] = method;\n };\n}\nvar defineProperties = function (object, map, forceAssign) {\n for (var name in map) {\n if (ObjectPrototype.hasOwnProperty.call(map, name)) {\n defineProperty(object, name, map[name], forceAssign);\n }\n }\n};\n\nvar toObject = function (o) {\n if (o == null) { // this matches both null and undefined\n throw new TypeError(\"can't convert \" + o + ' to object');\n }\n return Object(o);\n};\n\n//\n// Util\n// ======\n//\n\n// ES5 9.4\n// http://es5.github.com/#x9.4\n// http://jsperf.com/to-integer\n\nfunction toInteger(num) {\n var n = +num;\n if (n !== n) { // isNaN\n n = 0;\n } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n return n;\n}\n\nfunction ToUint32(x) {\n return x >>> 0;\n}\n\n//\n// Function\n// ========\n//\n\n// ES-5 15.3.4.5\n// http://es5.github.com/#x15.3.4.5\n\nfunction Empty() {}\n\ndefineProperties(FunctionPrototype, {\n bind: function bind(that) { // .length is 1\n // 1. Let Target be the this value.\n var target = this;\n // 2. If IsCallable(Target) is false, throw a TypeError exception.\n if (!isFunction(target)) {\n throw new TypeError('Function.prototype.bind called on incompatible ' + target);\n }\n // 3. Let A be a new (possibly empty) internal list of all of the\n // argument values provided after thisArg (arg1, arg2 etc), in order.\n // XXX slicedArgs will stand in for \"A\" if used\n var args = array_slice.call(arguments, 1); // for normal call\n // 4. Let F be a new native ECMAScript object.\n // 11. Set the [[Prototype]] internal property of F to the standard\n // built-in Function prototype object as specified in 15.3.3.1.\n // 12. Set the [[Call]] internal property of F as described in\n // 15.3.4.5.1.\n // 13. Set the [[Construct]] internal property of F as described in\n // 15.3.4.5.2.\n // 14. Set the [[HasInstance]] internal property of F as described in\n // 15.3.4.5.3.\n var binder = function () {\n\n if (this instanceof bound) {\n // 15.3.4.5.2 [[Construct]]\n // When the [[Construct]] internal method of a function object,\n // F that was created using the bind function is called with a\n // list of arguments ExtraArgs, the following steps are taken:\n // 1. Let target be the value of F's [[TargetFunction]]\n // internal property.\n // 2. If target has no [[Construct]] internal method, a\n // TypeError exception is thrown.\n // 3. Let boundArgs be the value of F's [[BoundArgs]] internal\n // property.\n // 4. Let args be a new list containing the same values as the\n // list boundArgs in the same order followed by the same\n // values as the list ExtraArgs in the same order.\n // 5. Return the result of calling the [[Construct]] internal\n // method of target providing args as the arguments.\n\n var result = target.apply(\n this,\n args.concat(array_slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n\n } else {\n // 15.3.4.5.1 [[Call]]\n // When the [[Call]] internal method of a function object, F,\n // which was created using the bind function is called with a\n // this value and a list of arguments ExtraArgs, the following\n // steps are taken:\n // 1. Let boundArgs be the value of F's [[BoundArgs]] internal\n // property.\n // 2. Let boundThis be the value of F's [[BoundThis]] internal\n // property.\n // 3. Let target be the value of F's [[TargetFunction]] internal\n // property.\n // 4. Let args be a new list containing the same values as the\n // list boundArgs in the same order followed by the same\n // values as the list ExtraArgs in the same order.\n // 5. Return the result of calling the [[Call]] internal method\n // of target providing boundThis as the this value and\n // providing args as the arguments.\n\n // equiv: target.call(this, ...boundArgs, ...args)\n return target.apply(\n that,\n args.concat(array_slice.call(arguments))\n );\n\n }\n\n };\n\n // 15. If the [[Class]] internal property of Target is \"Function\", then\n // a. Let L be the length property of Target minus the length of A.\n // b. Set the length own property of F to either 0 or L, whichever is\n // larger.\n // 16. Else set the length own property of F to 0.\n\n var boundLength = Math.max(0, target.length - args.length);\n\n // 17. Set the attributes of the length own property of F to the values\n // specified in 15.3.5.1.\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n // XXX Build a dynamic function with desired amount of arguments is the only\n // way to set the length property of a function.\n // In environments where Content Security Policies enabled (Chrome extensions,\n // for ex.) all use of eval or Function costructor throws an exception.\n // However in all of these environments Function.prototype.bind exists\n // and so this code will never be executed.\n var bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this, arguments); }')(binder);\n\n if (target.prototype) {\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n // Clean up dangling references.\n Empty.prototype = null;\n }\n\n // TODO\n // 18. Set the [[Extensible]] internal property of F to true.\n\n // TODO\n // 19. Let thrower be the [[ThrowTypeError]] function Object (13.2.3).\n // 20. Call the [[DefineOwnProperty]] internal method of F with\n // arguments \"caller\", PropertyDescriptor {[[Get]]: thrower, [[Set]]:\n // thrower, [[Enumerable]]: false, [[Configurable]]: false}, and\n // false.\n // 21. Call the [[DefineOwnProperty]] internal method of F with\n // arguments \"arguments\", PropertyDescriptor {[[Get]]: thrower,\n // [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false},\n // and false.\n\n // TODO\n // NOTE Function objects created using Function.prototype.bind do not\n // have a prototype property or the [[Code]], [[FormalParameters]], and\n // [[Scope]] internal properties.\n // XXX can't delete prototype in pure-js.\n\n // 22. Return F.\n return bound;\n }\n});\n\n//\n// Array\n// =====\n//\n\n// ES5 15.4.3.2\n// http://es5.github.com/#x15.4.3.2\n// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray\ndefineProperties(Array, { isArray: isArray });\n\n\nvar boxedString = Object('a');\nvar splitString = boxedString[0] !== 'a' || !(0 in boxedString);\n\nvar properlyBoxesContext = function properlyBoxed(method) {\n // Check node 0.6.21 bug where third parameter is not boxed\n var properlyBoxesNonStrict = true;\n var properlyBoxesStrict = true;\n if (method) {\n method.call('foo', function (_, __, context) {\n if (typeof context !== 'object') { properlyBoxesNonStrict = false; }\n });\n\n method.call([1], function () {\n 'use strict';\n properlyBoxesStrict = typeof this === 'string';\n }, 'x');\n }\n return !!method && properlyBoxesNonStrict && properlyBoxesStrict;\n};\n\ndefineProperties(ArrayPrototype, {\n forEach: function forEach(fun /*, thisp*/) {\n var object = toObject(this),\n self = splitString && isString(this) ? this.split('') : object,\n thisp = arguments[1],\n i = -1,\n length = self.length >>> 0;\n\n // If no callback function or if callback is not a callable function\n if (!isFunction(fun)) {\n throw new TypeError(); // TODO message\n }\n\n while (++i < length) {\n if (i in self) {\n // Invoke the callback function with call, passing arguments:\n // context, property value, property key, thisArg object\n // context\n fun.call(thisp, self[i], i, object);\n }\n }\n }\n}, !properlyBoxesContext(ArrayPrototype.forEach));\n\n// ES5 15.4.4.14\n// http://es5.github.com/#x15.4.4.14\n// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf\nvar hasFirefox2IndexOfBug = Array.prototype.indexOf && [0, 1].indexOf(1, 2) !== -1;\ndefineProperties(ArrayPrototype, {\n indexOf: function indexOf(sought /*, fromIndex */ ) {\n var self = splitString && isString(this) ? this.split('') : toObject(this),\n length = self.length >>> 0;\n\n if (!length) {\n return -1;\n }\n\n var i = 0;\n if (arguments.length > 1) {\n i = toInteger(arguments[1]);\n }\n\n // handle negative indices\n i = i >= 0 ? i : Math.max(0, length + i);\n for (; i < length; i++) {\n if (i in self && self[i] === sought) {\n return i;\n }\n }\n return -1;\n }\n}, hasFirefox2IndexOfBug);\n\n//\n// String\n// ======\n//\n\n// ES5 15.5.4.14\n// http://es5.github.com/#x15.5.4.14\n\n// [bugfix, IE lt 9, firefox 4, Konqueror, Opera, obscure browsers]\n// Many browsers do not split properly with regular expressions or they\n// do not perform the split correctly under obscure conditions.\n// See http://blog.stevenlevithan.com/archives/cross-browser-split\n// I've tested in many browsers and this seems to cover the deviant ones:\n// 'ab'.split(/(?:ab)*/) should be [\"\", \"\"], not [\"\"]\n// '.'.split(/(.?)(.?)/) should be [\"\", \".\", \"\", \"\"], not [\"\", \"\"]\n// 'tesst'.split(/(s)*/) should be [\"t\", undefined, \"e\", \"s\", \"t\"], not\n// [undefined, \"t\", undefined, \"e\", ...]\n// ''.split(/.?/) should be [], not [\"\"]\n// '.'.split(/()()/) should be [\".\"], not [\"\", \"\", \".\"]\n\nvar string_split = StringPrototype.split;\nif (\n 'ab'.split(/(?:ab)*/).length !== 2 ||\n '.'.split(/(.?)(.?)/).length !== 4 ||\n 'tesst'.split(/(s)*/)[1] === 't' ||\n 'test'.split(/(?:)/, -1).length !== 4 ||\n ''.split(/.?/).length ||\n '.'.split(/()()/).length > 1\n) {\n (function () {\n var compliantExecNpcg = /()??/.exec('')[1] === void 0; // NPCG: nonparticipating capturing group\n\n StringPrototype.split = function (separator, limit) {\n var string = this;\n if (separator === void 0 && limit === 0) {\n return [];\n }\n\n // If `separator` is not a regex, use native split\n if (_toString.call(separator) !== '[object RegExp]') {\n return string_split.call(this, separator, limit);\n }\n\n var output = [],\n flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.extended ? 'x' : '') + // Proposed for ES6\n (separator.sticky ? 'y' : ''), // Firefox 3+\n lastLastIndex = 0,\n // Make `global` and avoid `lastIndex` issues by working with a copy\n separator2, match, lastIndex, lastLength;\n separator = new RegExp(separator.source, flags + 'g');\n string += ''; // Type-convert\n if (!compliantExecNpcg) {\n // Doesn't need flags gy, but they don't hurt\n separator2 = new RegExp('^' + separator.source + '$(?!\\\\s)', flags);\n }\n /* Values for `limit`, per the spec:\n * If undefined: 4294967295 // Math.pow(2, 32) - 1\n * If 0, Infinity, or NaN: 0\n * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;\n * If negative number: 4294967296 - Math.floor(Math.abs(limit))\n * If other: Type-convert, then use the above rules\n */\n limit = limit === void 0 ?\n -1 >>> 0 : // Math.pow(2, 32) - 1\n ToUint32(limit);\n while (match = separator.exec(string)) {\n // `separator.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0].length;\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for\n // nonparticipating capturing groups\n if (!compliantExecNpcg && match.length > 1) {\n match[0].replace(separator2, function () {\n for (var i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === void 0) {\n match[i] = void 0;\n }\n }\n });\n }\n if (match.length > 1 && match.index < string.length) {\n ArrayPrototype.push.apply(output, match.slice(1));\n }\n lastLength = match[0].length;\n lastLastIndex = lastIndex;\n if (output.length >= limit) {\n break;\n }\n }\n if (separator.lastIndex === match.index) {\n separator.lastIndex++; // Avoid an infinite loop\n }\n }\n if (lastLastIndex === string.length) {\n if (lastLength || !separator.test('')) {\n output.push('');\n }\n } else {\n output.push(string.slice(lastLastIndex));\n }\n return output.length > limit ? output.slice(0, limit) : output;\n };\n }());\n\n// [bugfix, chrome]\n// If separator is undefined, then the result array contains just one String,\n// which is the this value (converted to a String). If limit is not undefined,\n// then the output array is truncated so that it contains no more than limit\n// elements.\n// \"0\".split(undefined, 0) -> []\n} else if ('0'.split(void 0, 0).length) {\n StringPrototype.split = function split(separator, limit) {\n if (separator === void 0 && limit === 0) { return []; }\n return string_split.call(this, separator, limit);\n };\n}\n\n// ECMA-262, 3rd B.2.3\n// Not an ECMAScript standard, although ECMAScript 3rd Edition has a\n// non-normative section suggesting uniform semantics and it should be\n// normalized across all browsers\n// [bugfix, IE lt 9] IE < 9 substr() with negative value not working in IE\nvar string_substr = StringPrototype.substr;\nvar hasNegativeSubstrBug = ''.substr && '0b'.substr(-1) !== 'b';\ndefineProperties(StringPrototype, {\n substr: function substr(start, length) {\n return string_substr.call(\n this,\n start < 0 ? ((start = this.length + start) < 0 ? 0 : start) : start,\n length\n );\n }\n}, hasNegativeSubstrBug);\n\n},{}],16:[function(require,module,exports){\n'use strict';\n\nmodule.exports = [\n // streaming transports\n require('./transport/websocket')\n, require('./transport/xhr-streaming')\n, require('./transport/xdr-streaming')\n, require('./transport/eventsource')\n, require('./transport/lib/iframe-wrap')(require('./transport/eventsource'))\n\n // polling transports\n, require('./transport/htmlfile')\n, require('./transport/lib/iframe-wrap')(require('./transport/htmlfile'))\n, require('./transport/xhr-polling')\n, require('./transport/xdr-polling')\n, require('./transport/lib/iframe-wrap')(require('./transport/xhr-polling'))\n, require('./transport/jsonp-polling')\n];\n\n},{\"./transport/eventsource\":20,\"./transport/htmlfile\":21,\"./transport/jsonp-polling\":23,\"./transport/lib/iframe-wrap\":26,\"./transport/websocket\":38,\"./transport/xdr-polling\":39,\"./transport/xdr-streaming\":40,\"./transport/xhr-polling\":41,\"./transport/xhr-streaming\":42}],17:[function(require,module,exports){\n(function (process,global){\n'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n , inherits = require('inherits')\n , utils = require('../../utils/event')\n , urlUtils = require('../../utils/url')\n , XHR = global.XMLHttpRequest\n ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n debug = require('debug')('sockjs-client:browser:xhr');\n}\n\nfunction AbstractXHRObject(method, url, payload, opts) {\n debug(method, url);\n var self = this;\n EventEmitter.call(this);\n\n setTimeout(function () {\n self._start(method, url, payload, opts);\n }, 0);\n}\n\ninherits(AbstractXHRObject, EventEmitter);\n\nAbstractXHRObject.prototype._start = function(method, url, payload, opts) {\n var self = this;\n\n try {\n this.xhr = new XHR();\n } catch (x) {\n // intentionally empty\n }\n\n if (!this.xhr) {\n debug('no xhr');\n this.emit('finish', 0, 'no xhr support');\n this._cleanup();\n return;\n }\n\n // several browsers cache POSTs\n url = urlUtils.addQuery(url, 't=' + (+new Date()));\n\n // Explorer tends to keep connection open, even after the\n // tab gets closed: http://bugs.jquery.com/ticket/5280\n this.unloadRef = utils.unloadAdd(function() {\n debug('unload cleanup');\n self._cleanup(true);\n });\n try {\n this.xhr.open(method, url, true);\n if (this.timeout && 'timeout' in this.xhr) {\n this.xhr.timeout = this.timeout;\n this.xhr.ontimeout = function() {\n debug('xhr timeout');\n self.emit('finish', 0, '');\n self._cleanup(false);\n };\n }\n } catch (e) {\n debug('exception', e);\n // IE raises an exception on wrong port.\n this.emit('finish', 0, '');\n this._cleanup(false);\n return;\n }\n\n if ((!opts || !opts.noCredentials) && AbstractXHRObject.supportsCORS) {\n debug('withCredentials');\n // Mozilla docs says https://developer.mozilla.org/en/XMLHttpRequest :\n // \"This never affects same-site requests.\"\n\n this.xhr.withCredentials = true;\n }\n if (opts && opts.headers) {\n for (var key in opts.headers) {\n this.xhr.setRequestHeader(key, opts.headers[key]);\n }\n }\n\n this.xhr.onreadystatechange = function() {\n if (self.xhr) {\n var x = self.xhr;\n var text, status;\n debug('readyState', x.readyState);\n switch (x.readyState) {\n case 3:\n // IE doesn't like peeking into responseText or status\n // on Microsoft.XMLHTTP and readystate=3\n try {\n status = x.status;\n text = x.responseText;\n } catch (e) {\n // intentionally empty\n }\n debug('status', status);\n // IE returns 1223 for 204: http://bugs.jquery.com/ticket/1450\n if (status === 1223) {\n status = 204;\n }\n\n // IE does return readystate == 3 for 404 answers.\n if (status === 200 && text && text.length > 0) {\n debug('chunk');\n self.emit('chunk', status, text);\n }\n break;\n case 4:\n status = x.status;\n debug('status', status);\n // IE returns 1223 for 204: http://bugs.jquery.com/ticket/1450\n if (status === 1223) {\n status = 204;\n }\n // IE returns this for a bad port\n // http://msdn.microsoft.com/en-us/library/windows/desktop/aa383770(v=vs.85).aspx\n if (status === 12005 || status === 12029) {\n status = 0;\n }\n\n debug('finish', status, x.responseText);\n self.emit('finish', status, x.responseText);\n self._cleanup(false);\n break;\n }\n }\n };\n\n try {\n self.xhr.send(payload);\n } catch (e) {\n self.emit('finish', 0, '');\n self._cleanup(false);\n }\n};\n\nAbstractXHRObject.prototype._cleanup = function(abort) {\n debug('cleanup');\n if (!this.xhr) {\n return;\n }\n this.removeAllListeners();\n utils.unloadDel(this.unloadRef);\n\n // IE needs this field to be a function\n this.xhr.onreadystatechange = function() {};\n if (this.xhr.ontimeout) {\n this.xhr.ontimeout = null;\n }\n\n if (abort) {\n try {\n this.xhr.abort();\n } catch (x) {\n // intentionally empty\n }\n }\n this.unloadRef = this.xhr = null;\n};\n\nAbstractXHRObject.prototype.close = function() {\n debug('close');\n this._cleanup(true);\n};\n\nAbstractXHRObject.enabled = !!XHR;\n// override XMLHttpRequest for IE6/7\n// obfuscate to avoid firewalls\nvar axo = ['Active'].concat('Object').join('X');\nif (!AbstractXHRObject.enabled && (axo in global)) {\n debug('overriding xmlhttprequest');\n XHR = function() {\n try {\n return new global[axo]('Microsoft.XMLHTTP');\n } catch (e) {\n return null;\n }\n };\n AbstractXHRObject.enabled = !!new XHR();\n}\n\nvar cors = false;\ntry {\n cors = 'withCredentials' in new XHR();\n} catch (ignored) {\n // intentionally empty\n}\n\nAbstractXHRObject.supportsCORS = cors;\n\nmodule.exports = AbstractXHRObject;\n\n}).call(this,{ env: {} },typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"../../utils/event\":46,\"../../utils/url\":52,\"debug\":55,\"events\":3,\"inherits\":57}],18:[function(require,module,exports){\n(function (global){\nmodule.exports = global.EventSource;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],19:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar Driver = global.WebSocket || global.MozWebSocket;\nif (Driver) {\n\tmodule.exports = function WebSocketBrowserDriver(url) {\n\t\treturn new Driver(url);\n\t};\n} else {\n\tmodule.exports = undefined;\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],20:[function(require,module,exports){\n'use strict';\n\nvar inherits = require('inherits')\n , AjaxBasedTransport = require('./lib/ajax-based')\n , EventSourceReceiver = require('./receiver/eventsource')\n , XHRCorsObject = require('./sender/xhr-cors')\n , EventSourceDriver = require('eventsource')\n ;\n\nfunction EventSourceTransport(transUrl) {\n if (!EventSourceTransport.enabled()) {\n throw new Error('Transport created when disabled');\n }\n\n AjaxBasedTransport.call(this, transUrl, '/eventsource', EventSourceReceiver, XHRCorsObject);\n}\n\ninherits(EventSourceTransport, AjaxBasedTransport);\n\nEventSourceTransport.enabled = function() {\n return !!EventSourceDriver;\n};\n\nEventSourceTransport.transportName = 'eventsource';\nEventSourceTransport.roundTrips = 2;\n\nmodule.exports = EventSourceTransport;\n\n},{\"./lib/ajax-based\":24,\"./receiver/eventsource\":29,\"./sender/xhr-cors\":35,\"eventsource\":18,\"inherits\":57}],21:[function(require,module,exports){\n'use strict';\n\nvar inherits = require('inherits')\n , HtmlfileReceiver = require('./receiver/htmlfile')\n , XHRLocalObject = require('./sender/xhr-local')\n , AjaxBasedTransport = require('./lib/ajax-based')\n ;\n\nfunction HtmlFileTransport(transUrl) {\n if (!HtmlfileReceiver.enabled) {\n throw new Error('Transport created when disabled');\n }\n AjaxBasedTransport.call(this, transUrl, '/htmlfile', HtmlfileReceiver, XHRLocalObject);\n}\n\ninherits(HtmlFileTransport, AjaxBasedTransport);\n\nHtmlFileTransport.enabled = function(info) {\n return HtmlfileReceiver.enabled && info.sameOrigin;\n};\n\nHtmlFileTransport.transportName = 'htmlfile';\nHtmlFileTransport.roundTrips = 2;\n\nmodule.exports = HtmlFileTransport;\n\n},{\"./lib/ajax-based\":24,\"./receiver/htmlfile\":30,\"./sender/xhr-local\":37,\"inherits\":57}],22:[function(require,module,exports){\n(function (process){\n'use strict';\n\n// Few cool transports do work only for same-origin. In order to make\n// them work cross-domain we shall use iframe, served from the\n// remote domain. New browsers have capabilities to communicate with\n// cross domain iframe using postMessage(). In IE it was implemented\n// from IE 8+, but of course, IE got some details wrong:\n// http://msdn.microsoft.com/en-us/library/cc197015(v=VS.85).aspx\n// http://stevesouders.com/misc/test-postmessage.php\n\nvar inherits = require('inherits')\n , JSON3 = require('json3')\n , EventEmitter = require('events').EventEmitter\n , version = require('../version')\n , urlUtils = require('../utils/url')\n , iframeUtils = require('../utils/iframe')\n , eventUtils = require('../utils/event')\n , random = require('../utils/random')\n ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n debug = require('debug')('sockjs-client:transport:iframe');\n}\n\nfunction IframeTransport(transport, transUrl, baseUrl) {\n if (!IframeTransport.enabled()) {\n throw new Error('Transport created when disabled');\n }\n EventEmitter.call(this);\n\n var self = this;\n this.origin = urlUtils.getOrigin(baseUrl);\n this.baseUrl = baseUrl;\n this.transUrl = transUrl;\n this.transport = transport;\n this.windowId = random.string(8);\n\n var iframeUrl = urlUtils.addPath(baseUrl, '/iframe.html') + '#' + this.windowId;\n debug(transport, transUrl, iframeUrl);\n\n this.iframeObj = iframeUtils.createIframe(iframeUrl, function(r) {\n debug('err callback');\n self.emit('close', 1006, 'Unable to load an iframe (' + r + ')');\n self.close();\n });\n\n this.onmessageCallback = this._message.bind(this);\n eventUtils.attachEvent('message', this.onmessageCallback);\n}\n\ninherits(IframeTransport, EventEmitter);\n\nIframeTransport.prototype.close = function() {\n debug('close');\n this.removeAllListeners();\n if (this.iframeObj) {\n eventUtils.detachEvent('message', this.onmessageCallback);\n try {\n // When the iframe is not loaded, IE raises an exception\n // on 'contentWindow'.\n this.postMessage('c');\n } catch (x) {\n // intentionally empty\n }\n this.iframeObj.cleanup();\n this.iframeObj = null;\n this.onmessageCallback = this.iframeObj = null;\n }\n};\n\nIframeTransport.prototype._message = function(e) {\n debug('message', e.data);\n if (!urlUtils.isOriginEqual(e.origin, this.origin)) {\n debug('not same origin', e.origin, this.origin);\n return;\n }\n\n var iframeMessage;\n try {\n iframeMessage = JSON3.parse(e.data);\n } catch (ignored) {\n debug('bad json', e.data);\n return;\n }\n\n if (iframeMessage.windowId !== this.windowId) {\n debug('mismatched window id', iframeMessage.windowId, this.windowId);\n return;\n }\n\n switch (iframeMessage.type) {\n case 's':\n this.iframeObj.loaded();\n // window global dependency\n this.postMessage('s', JSON3.stringify([\n version\n , this.transport\n , this.transUrl\n , this.baseUrl\n ]));\n break;\n case 't':\n this.emit('message', iframeMessage.data);\n break;\n case 'c':\n var cdata;\n try {\n cdata = JSON3.parse(iframeMessage.data);\n } catch (ignored) {\n debug('bad json', iframeMessage.data);\n return;\n }\n this.emit('close', cdata[0], cdata[1]);\n this.close();\n break;\n }\n};\n\nIframeTransport.prototype.postMessage = function(type, data) {\n debug('postMessage', type, data);\n this.iframeObj.post(JSON3.stringify({\n windowId: this.windowId\n , type: type\n , data: data || ''\n }), this.origin);\n};\n\nIframeTransport.prototype.send = function(message) {\n debug('send', message);\n this.postMessage('m', message);\n};\n\nIframeTransport.enabled = function() {\n return iframeUtils.iframeEnabled;\n};\n\nIframeTransport.transportName = 'iframe';\nIframeTransport.roundTrips = 2;\n\nmodule.exports = IframeTransport;\n\n}).call(this,{ env: {} })\n\n},{\"../utils/event\":46,\"../utils/iframe\":47,\"../utils/random\":50,\"../utils/url\":52,\"../version\":53,\"debug\":55,\"events\":3,\"inherits\":57,\"json3\":58}],23:[function(require,module,exports){\n(function (global){\n'use strict';\n\n// The simplest and most robust transport, using the well-know cross\n// domain hack - JSONP. This transport is quite inefficient - one\n// message could use up to one http request. But at least it works almost\n// everywhere.\n// Known limitations:\n// o you will get a spinning cursor\n// o for Konqueror a dumb timer is needed to detect errors\n\nvar inherits = require('inherits')\n , SenderReceiver = require('./lib/sender-receiver')\n , JsonpReceiver = require('./receiver/jsonp')\n , jsonpSender = require('./sender/jsonp')\n ;\n\nfunction JsonPTransport(transUrl) {\n if (!JsonPTransport.enabled()) {\n throw new Error('Transport created when disabled');\n }\n SenderReceiver.call(this, transUrl, '/jsonp', jsonpSender, JsonpReceiver);\n}\n\ninherits(JsonPTransport, SenderReceiver);\n\nJsonPTransport.enabled = function() {\n return !!global.document;\n};\n\nJsonPTransport.transportName = 'jsonp-polling';\nJsonPTransport.roundTrips = 1;\nJsonPTransport.needBody = true;\n\nmodule.exports = JsonPTransport;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"./lib/sender-receiver\":28,\"./receiver/jsonp\":31,\"./sender/jsonp\":33,\"inherits\":57}],24:[function(require,module,exports){\n(function (process){\n'use strict';\n\nvar inherits = require('inherits')\n , urlUtils = require('../../utils/url')\n , SenderReceiver = require('./sender-receiver')\n ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n debug = require('debug')('sockjs-client:ajax-based');\n}\n\nfunction createAjaxSender(AjaxObject) {\n return function(url, payload, callback) {\n debug('create ajax sender', url, payload);\n var opt = {};\n if (typeof payload === 'string') {\n opt.headers = {'Content-type': 'text/plain'};\n }\n var ajaxUrl = urlUtils.addPath(url, '/xhr_send');\n var xo = new AjaxObject('POST', ajaxUrl, payload, opt);\n xo.once('finish', function(status) {\n debug('finish', status);\n xo = null;\n\n if (status !== 200 && status !== 204) {\n return callback(new Error('http status ' + status));\n }\n callback();\n });\n return function() {\n debug('abort');\n xo.close();\n xo = null;\n\n var err = new Error('Aborted');\n err.code = 1000;\n callback(err);\n };\n };\n}\n\nfunction AjaxBasedTransport(transUrl, urlSuffix, Receiver, AjaxObject) {\n SenderReceiver.call(this, transUrl, urlSuffix, createAjaxSender(AjaxObject), Receiver, AjaxObject);\n}\n\ninherits(AjaxBasedTransport, SenderReceiver);\n\nmodule.exports = AjaxBasedTransport;\n\n}).call(this,{ env: {} })\n\n},{\"../../utils/url\":52,\"./sender-receiver\":28,\"debug\":55,\"inherits\":57}],25:[function(require,module,exports){\n(function (process){\n'use strict';\n\nvar inherits = require('inherits')\n , EventEmitter = require('events').EventEmitter\n ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n debug = require('debug')('sockjs-client:buffered-sender');\n}\n\nfunction BufferedSender(url, sender) {\n debug(url);\n EventEmitter.call(this);\n this.sendBuffer = [];\n this.sender = sender;\n this.url = url;\n}\n\ninherits(BufferedSender, EventEmitter);\n\nBufferedSender.prototype.send = function(message) {\n debug('send', message);\n this.sendBuffer.push(message);\n if (!this.sendStop) {\n this.sendSchedule();\n }\n};\n\n// For polling transports in a situation when in the message callback,\n// new message is being send. If the sending connection was started\n// before receiving one, it is possible to saturate the network and\n// timeout due to the lack of receiving socket. To avoid that we delay\n// sending messages by some small time, in order to let receiving\n// connection be started beforehand. This is only a halfmeasure and\n// does not fix the big problem, but it does make the tests go more\n// stable on slow networks.\nBufferedSender.prototype.sendScheduleWait = function() {\n debug('sendScheduleWait');\n var self = this;\n var tref;\n this.sendStop = function() {\n debug('sendStop');\n self.sendStop = null;\n clearTimeout(tref);\n };\n tref = setTimeout(function() {\n debug('timeout');\n self.sendStop = null;\n self.sendSchedule();\n }, 25);\n};\n\nBufferedSender.prototype.sendSchedule = function() {\n debug('sendSchedule', this.sendBuffer.length);\n var self = this;\n if (this.sendBuffer.length > 0) {\n var payload = '[' + this.sendBuffer.join(',') + ']';\n this.sendStop = this.sender(this.url, payload, function(err) {\n self.sendStop = null;\n if (err) {\n debug('error', err);\n self.emit('close', err.code || 1006, 'Sending error: ' + err);\n self.close();\n } else {\n self.sendScheduleWait();\n }\n });\n this.sendBuffer = [];\n }\n};\n\nBufferedSender.prototype._cleanup = function() {\n debug('_cleanup');\n this.removeAllListeners();\n};\n\nBufferedSender.prototype.close = function() {\n debug('close');\n this._cleanup();\n if (this.sendStop) {\n this.sendStop();\n this.sendStop = null;\n }\n};\n\nmodule.exports = BufferedSender;\n\n}).call(this,{ env: {} })\n\n},{\"debug\":55,\"events\":3,\"inherits\":57}],26:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar inherits = require('inherits')\n , IframeTransport = require('../iframe')\n , objectUtils = require('../../utils/object')\n ;\n\nmodule.exports = function(transport) {\n\n function IframeWrapTransport(transUrl, baseUrl) {\n IframeTransport.call(this, transport.transportName, transUrl, baseUrl);\n }\n\n inherits(IframeWrapTransport, IframeTransport);\n\n IframeWrapTransport.enabled = function(url, info) {\n if (!global.document) {\n return false;\n }\n\n var iframeInfo = objectUtils.extend({}, info);\n iframeInfo.sameOrigin = true;\n return transport.enabled(iframeInfo) && IframeTransport.enabled();\n };\n\n IframeWrapTransport.transportName = 'iframe-' + transport.transportName;\n IframeWrapTransport.needBody = true;\n IframeWrapTransport.roundTrips = IframeTransport.roundTrips + transport.roundTrips - 1; // html, javascript (2) + transport - no CORS (1)\n\n IframeWrapTransport.facadeTransport = transport;\n\n return IframeWrapTransport;\n};\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"../../utils/object\":49,\"../iframe\":22,\"inherits\":57}],27:[function(require,module,exports){\n(function (process){\n'use strict';\n\nvar inherits = require('inherits')\n , EventEmitter = require('events').EventEmitter\n ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n debug = require('debug')('sockjs-client:polling');\n}\n\nfunction Polling(Receiver, receiveUrl, AjaxObject) {\n debug(receiveUrl);\n EventEmitter.call(this);\n this.Receiver = Receiver;\n this.receiveUrl = receiveUrl;\n this.AjaxObject = AjaxObject;\n this._scheduleReceiver();\n}\n\ninherits(Polling, EventEmitter);\n\nPolling.prototype._scheduleReceiver = function() {\n debug('_scheduleReceiver');\n var self = this;\n var poll = this.poll = new this.Receiver(this.receiveUrl, this.AjaxObject);\n\n poll.on('message', function(msg) {\n debug('message', msg);\n self.emit('message', msg);\n });\n\n poll.once('close', function(code, reason) {\n debug('close', code, reason, self.pollIsClosing);\n self.poll = poll = null;\n\n if (!self.pollIsClosing) {\n if (reason === 'network') {\n self._scheduleReceiver();\n } else {\n self.emit('close', code || 1006, reason);\n self.removeAllListeners();\n }\n }\n });\n};\n\nPolling.prototype.abort = function() {\n debug('abort');\n this.removeAllListeners();\n this.pollIsClosing = true;\n if (this.poll) {\n this.poll.abort();\n }\n};\n\nmodule.exports = Polling;\n\n}).call(this,{ env: {} })\n\n},{\"debug\":55,\"events\":3,\"inherits\":57}],28:[function(require,module,exports){\n(function (process){\n'use strict';\n\nvar inherits = require('inherits')\n , urlUtils = require('../../utils/url')\n , BufferedSender = require('./buffered-sender')\n , Polling = require('./polling')\n ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n debug = require('debug')('sockjs-client:sender-receiver');\n}\n\nfunction SenderReceiver(transUrl, urlSuffix, senderFunc, Receiver, AjaxObject) {\n var pollUrl = urlUtils.addPath(transUrl, urlSuffix);\n debug(pollUrl);\n var self = this;\n BufferedSender.call(this, transUrl, senderFunc);\n\n this.poll = new Polling(Receiver, pollUrl, AjaxObject);\n this.poll.on('message', function(msg) {\n debug('poll message', msg);\n self.emit('message', msg);\n });\n this.poll.once('close', function(code, reason) {\n debug('poll close', code, reason);\n self.poll = null;\n self.emit('close', code, reason);\n self.close();\n });\n}\n\ninherits(SenderReceiver, BufferedSender);\n\nSenderReceiver.prototype.close = function() {\n BufferedSender.prototype.close.call(this);\n debug('close');\n this.removeAllListeners();\n if (this.poll) {\n this.poll.abort();\n this.poll = null;\n }\n};\n\nmodule.exports = SenderReceiver;\n\n}).call(this,{ env: {} })\n\n},{\"../../utils/url\":52,\"./buffered-sender\":25,\"./polling\":27,\"debug\":55,\"inherits\":57}],29:[function(require,module,exports){\n(function (process){\n'use strict';\n\nvar inherits = require('inherits')\n , EventEmitter = require('events').EventEmitter\n , EventSourceDriver = require('eventsource')\n ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n debug = require('debug')('sockjs-client:receiver:eventsource');\n}\n\nfunction EventSourceReceiver(url) {\n debug(url);\n EventEmitter.call(this);\n\n var self = this;\n var es = this.es = new EventSourceDriver(url);\n es.onmessage = function(e) {\n debug('message', e.data);\n self.emit('message', decodeURI(e.data));\n };\n es.onerror = function(e) {\n debug('error', es.readyState, e);\n // ES on reconnection has readyState = 0 or 1.\n // on network error it's CLOSED = 2\n var reason = (es.readyState !== 2 ? 'network' : 'permanent');\n self._cleanup();\n self._close(reason);\n };\n}\n\ninherits(EventSourceReceiver, EventEmitter);\n\nEventSourceReceiver.prototype.abort = function() {\n debug('abort');\n this._cleanup();\n this._close('user');\n};\n\nEventSourceReceiver.prototype._cleanup = function() {\n debug('cleanup');\n var es = this.es;\n if (es) {\n es.onmessage = es.onerror = null;\n es.close();\n this.es = null;\n }\n};\n\nEventSourceReceiver.prototype._close = function(reason) {\n debug('close', reason);\n var self = this;\n // Safari and chrome < 15 crash if we close window before\n // waiting for ES cleanup. See:\n // https://code.google.com/p/chromium/issues/detail?id=89155\n setTimeout(function() {\n self.emit('close', null, reason);\n self.removeAllListeners();\n }, 200);\n};\n\nmodule.exports = EventSourceReceiver;\n\n}).call(this,{ env: {} })\n\n},{\"debug\":55,\"events\":3,\"eventsource\":18,\"inherits\":57}],30:[function(require,module,exports){\n(function (process,global){\n'use strict';\n\nvar inherits = require('inherits')\n , iframeUtils = require('../../utils/iframe')\n , urlUtils = require('../../utils/url')\n , EventEmitter = require('events').EventEmitter\n , random = require('../../utils/random')\n ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n debug = require('debug')('sockjs-client:receiver:htmlfile');\n}\n\nfunction HtmlfileReceiver(url) {\n debug(url);\n EventEmitter.call(this);\n var self = this;\n iframeUtils.polluteGlobalNamespace();\n\n this.id = 'a' + random.string(6);\n url = urlUtils.addQuery(url, 'c=' + decodeURIComponent(iframeUtils.WPrefix + '.' + this.id));\n\n debug('using htmlfile', HtmlfileReceiver.htmlfileEnabled);\n var constructFunc = HtmlfileReceiver.htmlfileEnabled ?\n iframeUtils.createHtmlfile : iframeUtils.createIframe;\n\n global[iframeUtils.WPrefix][this.id] = {\n start: function() {\n debug('start');\n self.iframeObj.loaded();\n }\n , message: function(data) {\n debug('message', data);\n self.emit('message', data);\n }\n , stop: function() {\n debug('stop');\n self._cleanup();\n self._close('network');\n }\n };\n this.iframeObj = constructFunc(url, function() {\n debug('callback');\n self._cleanup();\n self._close('permanent');\n });\n}\n\ninherits(HtmlfileReceiver, EventEmitter);\n\nHtmlfileReceiver.prototype.abort = function() {\n debug('abort');\n this._cleanup();\n this._close('user');\n};\n\nHtmlfileReceiver.prototype._cleanup = function() {\n debug('_cleanup');\n if (this.iframeObj) {\n this.iframeObj.cleanup();\n this.iframeObj = null;\n }\n delete global[iframeUtils.WPrefix][this.id];\n};\n\nHtmlfileReceiver.prototype._close = function(reason) {\n debug('_close', reason);\n this.emit('close', null, reason);\n this.removeAllListeners();\n};\n\nHtmlfileReceiver.htmlfileEnabled = false;\n\n// obfuscate to avoid firewalls\nvar axo = ['Active'].concat('Object').join('X');\nif (axo in global) {\n try {\n HtmlfileReceiver.htmlfileEnabled = !!new global[axo]('htmlfile');\n } catch (x) {\n // intentionally empty\n }\n}\n\nHtmlfileReceiver.enabled = HtmlfileReceiver.htmlfileEnabled || iframeUtils.iframeEnabled;\n\nmodule.exports = HtmlfileReceiver;\n\n}).call(this,{ env: {} },typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"../../utils/iframe\":47,\"../../utils/random\":50,\"../../utils/url\":52,\"debug\":55,\"events\":3,\"inherits\":57}],31:[function(require,module,exports){\n(function (process,global){\n'use strict';\n\nvar utils = require('../../utils/iframe')\n , random = require('../../utils/random')\n , browser = require('../../utils/browser')\n , urlUtils = require('../../utils/url')\n , inherits = require('inherits')\n , EventEmitter = require('events').EventEmitter\n ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n debug = require('debug')('sockjs-client:receiver:jsonp');\n}\n\nfunction JsonpReceiver(url) {\n debug(url);\n var self = this;\n EventEmitter.call(this);\n\n utils.polluteGlobalNamespace();\n\n this.id = 'a' + random.string(6);\n var urlWithId = urlUtils.addQuery(url, 'c=' + encodeURIComponent(utils.WPrefix + '.' + this.id));\n\n global[utils.WPrefix][this.id] = this._callback.bind(this);\n this._createScript(urlWithId);\n\n // Fallback mostly for Konqueror - stupid timer, 35 seconds shall be plenty.\n this.timeoutId = setTimeout(function() {\n debug('timeout');\n self._abort(new Error('JSONP script loaded abnormally (timeout)'));\n }, JsonpReceiver.timeout);\n}\n\ninherits(JsonpReceiver, EventEmitter);\n\nJsonpReceiver.prototype.abort = function() {\n debug('abort');\n if (global[utils.WPrefix][this.id]) {\n var err = new Error('JSONP user aborted read');\n err.code = 1000;\n this._abort(err);\n }\n};\n\nJsonpReceiver.timeout = 35000;\nJsonpReceiver.scriptErrorTimeout = 1000;\n\nJsonpReceiver.prototype._callback = function(data) {\n debug('_callback', data);\n this._cleanup();\n\n if (this.aborting) {\n return;\n }\n\n if (data) {\n debug('message', data);\n this.emit('message', data);\n }\n this.emit('close', null, 'network');\n this.removeAllListeners();\n};\n\nJsonpReceiver.prototype._abort = function(err) {\n debug('_abort', err);\n this._cleanup();\n this.aborting = true;\n this.emit('close', err.code, err.message);\n this.removeAllListeners();\n};\n\nJsonpReceiver.prototype._cleanup = function() {\n debug('_cleanup');\n clearTimeout(this.timeoutId);\n if (this.script2) {\n this.script2.parentNode.removeChild(this.script2);\n this.script2 = null;\n }\n if (this.script) {\n var script = this.script;\n // Unfortunately, you can't really abort script loading of\n // the script.\n script.parentNode.removeChild(script);\n script.onreadystatechange = script.onerror =\n script.onload = script.onclick = null;\n this.script = null;\n }\n delete global[utils.WPrefix][this.id];\n};\n\nJsonpReceiver.prototype._scriptError = function() {\n debug('_scriptError');\n var self = this;\n if (this.errorTimer) {\n return;\n }\n\n this.errorTimer = setTimeout(function() {\n if (!self.loadedOkay) {\n self._abort(new Error('JSONP script loaded abnormally (onerror)'));\n }\n }, JsonpReceiver.scriptErrorTimeout);\n};\n\nJsonpReceiver.prototype._createScript = function(url) {\n debug('_createScript', url);\n var self = this;\n var script = this.script = global.document.createElement('script');\n var script2; // Opera synchronous load trick.\n\n script.id = 'a' + random.string(8);\n script.src = url;\n script.type = 'text/javascript';\n script.charset = 'UTF-8';\n script.onerror = this._scriptError.bind(this);\n script.onload = function() {\n debug('onload');\n self._abort(new Error('JSONP script loaded abnormally (onload)'));\n };\n\n // IE9 fires 'error' event after onreadystatechange or before, in random order.\n // Use loadedOkay to determine if actually errored\n script.onreadystatechange = function() {\n debug('onreadystatechange', script.readyState);\n if (/loaded|closed/.test(script.readyState)) {\n if (script && script.htmlFor && script.onclick) {\n self.loadedOkay = true;\n try {\n // In IE, actually execute the script.\n script.onclick();\n } catch (x) {\n // intentionally empty\n }\n }\n if (script) {\n self._abort(new Error('JSONP script loaded abnormally (onreadystatechange)'));\n }\n }\n };\n // IE: event/htmlFor/onclick trick.\n // One can't rely on proper order for onreadystatechange. In order to\n // make sure, set a 'htmlFor' and 'event' properties, so that\n // script code will be installed as 'onclick' handler for the\n // script object. Later, onreadystatechange, manually execute this\n // code. FF and Chrome doesn't work with 'event' and 'htmlFor'\n // set. For reference see:\n // http://jaubourg.net/2010/07/loading-script-as-onclick-handler-of.html\n // Also, read on that about script ordering:\n // http://wiki.whatwg.org/wiki/Dynamic_Script_Execution_Order\n if (typeof script.async === 'undefined' && global.document.attachEvent) {\n // According to mozilla docs, in recent browsers script.async defaults\n // to 'true', so we may use it to detect a good browser:\n // https://developer.mozilla.org/en/HTML/Element/script\n if (!browser.isOpera()) {\n // Naively assume we're in IE\n try {\n script.htmlFor = script.id;\n script.event = 'onclick';\n } catch (x) {\n // intentionally empty\n }\n script.async = true;\n } else {\n // Opera, second sync script hack\n script2 = this.script2 = global.document.createElement('script');\n script2.text = \"try{var a = document.getElementById('\" + script.id + \"'); if(a)a.onerror();}catch(x){};\";\n script.async = script2.async = false;\n }\n }\n if (typeof script.async !== 'undefined') {\n script.async = true;\n }\n\n var head = global.document.getElementsByTagName('head')[0];\n head.insertBefore(script, head.firstChild);\n if (script2) {\n head.insertBefore(script2, head.firstChild);\n }\n};\n\nmodule.exports = JsonpReceiver;\n\n}).call(this,{ env: {} },typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"../../utils/browser\":44,\"../../utils/iframe\":47,\"../../utils/random\":50,\"../../utils/url\":52,\"debug\":55,\"events\":3,\"inherits\":57}],32:[function(require,module,exports){\n(function (process){\n'use strict';\n\nvar inherits = require('inherits')\n , EventEmitter = require('events').EventEmitter\n ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n debug = require('debug')('sockjs-client:receiver:xhr');\n}\n\nfunction XhrReceiver(url, AjaxObject) {\n debug(url);\n EventEmitter.call(this);\n var self = this;\n\n this.bufferPosition = 0;\n\n this.xo = new AjaxObject('POST', url, null);\n this.xo.on('chunk', this._chunkHandler.bind(this));\n this.xo.once('finish', function(status, text) {\n debug('finish', status, text);\n self._chunkHandler(status, text);\n self.xo = null;\n var reason = status === 200 ? 'network' : 'permanent';\n debug('close', reason);\n self.emit('close', null, reason);\n self._cleanup();\n });\n}\n\ninherits(XhrReceiver, EventEmitter);\n\nXhrReceiver.prototype._chunkHandler = function(status, text) {\n debug('_chunkHandler', status);\n if (status !== 200 || !text) {\n return;\n }\n\n for (var idx = -1; ; this.bufferPosition += idx + 1) {\n var buf = text.slice(this.bufferPosition);\n idx = buf.indexOf('\\n');\n if (idx === -1) {\n break;\n }\n var msg = buf.slice(0, idx);\n if (msg) {\n debug('message', msg);\n this.emit('message', msg);\n }\n }\n};\n\nXhrReceiver.prototype._cleanup = function() {\n debug('_cleanup');\n this.removeAllListeners();\n};\n\nXhrReceiver.prototype.abort = function() {\n debug('abort');\n if (this.xo) {\n this.xo.close();\n debug('close');\n this.emit('close', null, 'user');\n this.xo = null;\n }\n this._cleanup();\n};\n\nmodule.exports = XhrReceiver;\n\n}).call(this,{ env: {} })\n\n},{\"debug\":55,\"events\":3,\"inherits\":57}],33:[function(require,module,exports){\n(function (process,global){\n'use strict';\n\nvar random = require('../../utils/random')\n , urlUtils = require('../../utils/url')\n ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n debug = require('debug')('sockjs-client:sender:jsonp');\n}\n\nvar form, area;\n\nfunction createIframe(id) {\n debug('createIframe', id);\n try {\n // ie6 dynamic iframes with target=\"\" support (thanks Chris Lambacher)\n return global.document.createElement('<iframe name=\"' + id + '\">');\n } catch (x) {\n var iframe = global.document.createElement('iframe');\n iframe.name = id;\n return iframe;\n }\n}\n\nfunction createForm() {\n debug('createForm');\n form = global.document.createElement('form');\n form.style.display = 'none';\n form.style.position = 'absolute';\n form.method = 'POST';\n form.enctype = 'application/x-www-form-urlencoded';\n form.acceptCharset = 'UTF-8';\n\n area = global.document.createElement('textarea');\n area.name = 'd';\n form.appendChild(area);\n\n global.document.body.appendChild(form);\n}\n\nmodule.exports = function(url, payload, callback) {\n debug(url, payload);\n if (!form) {\n createForm();\n }\n var id = 'a' + random.string(8);\n form.target = id;\n form.action = urlUtils.addQuery(urlUtils.addPath(url, '/jsonp_send'), 'i=' + id);\n\n var iframe = createIframe(id);\n iframe.id = id;\n iframe.style.display = 'none';\n form.appendChild(iframe);\n\n try {\n area.value = payload;\n } catch (e) {\n // seriously broken browsers get here\n }\n form.submit();\n\n var completed = function(err) {\n debug('completed', id, err);\n if (!iframe.onerror) {\n return;\n }\n iframe.onreadystatechange = iframe.onerror = iframe.onload = null;\n // Opera mini doesn't like if we GC iframe\n // immediately, thus this timeout.\n setTimeout(function() {\n debug('cleaning up', id);\n iframe.parentNode.removeChild(iframe);\n iframe = null;\n }, 500);\n area.value = '';\n // It is not possible to detect if the iframe succeeded or\n // failed to submit our form.\n callback(err);\n };\n iframe.onerror = function() {\n debug('onerror', id);\n completed();\n };\n iframe.onload = function() {\n debug('onload', id);\n completed();\n };\n iframe.onreadystatechange = function(e) {\n debug('onreadystatechange', id, iframe.readyState, e);\n if (iframe.readyState === 'complete') {\n completed();\n }\n };\n return function() {\n debug('aborted', id);\n completed(new Error('Aborted'));\n };\n};\n\n}).call(this,{ env: {} },typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"../../utils/random\":50,\"../../utils/url\":52,\"debug\":55}],34:[function(require,module,exports){\n(function (process,global){\n'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n , inherits = require('inherits')\n , eventUtils = require('../../utils/event')\n , browser = require('../../utils/browser')\n , urlUtils = require('../../utils/url')\n ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n debug = require('debug')('sockjs-client:sender:xdr');\n}\n\n// References:\n// http://ajaxian.com/archives/100-line-ajax-wrapper\n// http://msdn.microsoft.com/en-us/library/cc288060(v=VS.85).aspx\n\nfunction XDRObject(method, url, payload) {\n debug(method, url);\n var self = this;\n EventEmitter.call(this);\n\n setTimeout(function() {\n self._start(method, url, payload);\n }, 0);\n}\n\ninherits(XDRObject, EventEmitter);\n\nXDRObject.prototype._start = function(method, url, payload) {\n debug('_start');\n var self = this;\n var xdr = new global.XDomainRequest();\n // IE caches even POSTs\n url = urlUtils.addQuery(url, 't=' + (+new Date()));\n\n xdr.onerror = function() {\n debug('onerror');\n self._error();\n };\n xdr.ontimeout = function() {\n debug('ontimeout');\n self._error();\n };\n xdr.onprogress = function() {\n debug('progress', xdr.responseText);\n self.emit('chunk', 200, xdr.responseText);\n };\n xdr.onload = function() {\n debug('load');\n self.emit('finish', 200, xdr.responseText);\n self._cleanup(false);\n };\n this.xdr = xdr;\n this.unloadRef = eventUtils.unloadAdd(function() {\n self._cleanup(true);\n });\n try {\n // Fails with AccessDenied if port number is bogus\n this.xdr.open(method, url);\n if (this.timeout) {\n this.xdr.timeout = this.timeout;\n }\n this.xdr.send(payload);\n } catch (x) {\n this._error();\n }\n};\n\nXDRObject.prototype._error = function() {\n this.emit('finish', 0, '');\n this._cleanup(false);\n};\n\nXDRObject.prototype._cleanup = function(abort) {\n debug('cleanup', abort);\n if (!this.xdr) {\n return;\n }\n this.removeAllListeners();\n eventUtils.unloadDel(this.unloadRef);\n\n this.xdr.ontimeout = this.xdr.onerror = this.xdr.onprogress = this.xdr.onload = null;\n if (abort) {\n try {\n this.xdr.abort();\n } catch (x) {\n // intentionally empty\n }\n }\n this.unloadRef = this.xdr = null;\n};\n\nXDRObject.prototype.close = function() {\n debug('close');\n this._cleanup(true);\n};\n\n// IE 8/9 if the request target uses the same scheme - #79\nXDRObject.enabled = !!(global.XDomainRequest && browser.hasDomain());\n\nmodule.exports = XDRObject;\n\n}).call(this,{ env: {} },typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"../../utils/browser\":44,\"../../utils/event\":46,\"../../utils/url\":52,\"debug\":55,\"events\":3,\"inherits\":57}],35:[function(require,module,exports){\n'use strict';\n\nvar inherits = require('inherits')\n , XhrDriver = require('../driver/xhr')\n ;\n\nfunction XHRCorsObject(method, url, payload, opts) {\n XhrDriver.call(this, method, url, payload, opts);\n}\n\ninherits(XHRCorsObject, XhrDriver);\n\nXHRCorsObject.enabled = XhrDriver.enabled && XhrDriver.supportsCORS;\n\nmodule.exports = XHRCorsObject;\n\n},{\"../driver/xhr\":17,\"inherits\":57}],36:[function(require,module,exports){\n'use strict';\n\nvar EventEmitter = require('events').EventEmitter\n , inherits = require('inherits')\n ;\n\nfunction XHRFake(/* method, url, payload, opts */) {\n var self = this;\n EventEmitter.call(this);\n\n this.to = setTimeout(function() {\n self.emit('finish', 200, '{}');\n }, XHRFake.timeout);\n}\n\ninherits(XHRFake, EventEmitter);\n\nXHRFake.prototype.close = function() {\n clearTimeout(this.to);\n};\n\nXHRFake.timeout = 2000;\n\nmodule.exports = XHRFake;\n\n},{\"events\":3,\"inherits\":57}],37:[function(require,module,exports){\n'use strict';\n\nvar inherits = require('inherits')\n , XhrDriver = require('../driver/xhr')\n ;\n\nfunction XHRLocalObject(method, url, payload /*, opts */) {\n XhrDriver.call(this, method, url, payload, {\n noCredentials: true\n });\n}\n\ninherits(XHRLocalObject, XhrDriver);\n\nXHRLocalObject.enabled = XhrDriver.enabled;\n\nmodule.exports = XHRLocalObject;\n\n},{\"../driver/xhr\":17,\"inherits\":57}],38:[function(require,module,exports){\n(function (process){\n'use strict';\n\nvar utils = require('../utils/event')\n , urlUtils = require('../utils/url')\n , inherits = require('inherits')\n , EventEmitter = require('events').EventEmitter\n , WebsocketDriver = require('./driver/websocket')\n ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n debug = require('debug')('sockjs-client:websocket');\n}\n\nfunction WebSocketTransport(transUrl, ignore, options) {\n if (!WebSocketTransport.enabled()) {\n throw new Error('Transport created when disabled');\n }\n\n EventEmitter.call(this);\n debug('constructor', transUrl);\n\n var self = this;\n var url = urlUtils.addPath(transUrl, '/websocket');\n if (url.slice(0, 5) === 'https') {\n url = 'wss' + url.slice(5);\n } else {\n url = 'ws' + url.slice(4);\n }\n this.url = url;\n\n this.ws = new WebsocketDriver(this.url, [], options);\n this.ws.onmessage = function(e) {\n debug('message event', e.data);\n self.emit('message', e.data);\n };\n // Firefox has an interesting bug. If a websocket connection is\n // created after onunload, it stays alive even when user\n // navigates away from the page. In such situation let's lie -\n // let's not open the ws connection at all. See:\n // https://github.com/sockjs/sockjs-client/issues/28\n // https://bugzilla.mozilla.org/show_bug.cgi?id=696085\n this.unloadRef = utils.unloadAdd(function() {\n debug('unload');\n self.ws.close();\n });\n this.ws.onclose = function(e) {\n debug('close event', e.code, e.reason);\n self.emit('close', e.code, e.reason);\n self._cleanup();\n };\n this.ws.onerror = function(e) {\n debug('error event', e);\n self.emit('close', 1006, 'WebSocket connection broken');\n self._cleanup();\n };\n}\n\ninherits(WebSocketTransport, EventEmitter);\n\nWebSocketTransport.prototype.send = function(data) {\n var msg = '[' + data + ']';\n debug('send', msg);\n this.ws.send(msg);\n};\n\nWebSocketTransport.prototype.close = function() {\n debug('close');\n var ws = this.ws;\n this._cleanup();\n if (ws) {\n ws.close();\n }\n};\n\nWebSocketTransport.prototype._cleanup = function() {\n debug('_cleanup');\n var ws = this.ws;\n if (ws) {\n ws.onmessage = ws.onclose = ws.onerror = null;\n }\n utils.unloadDel(this.unloadRef);\n this.unloadRef = this.ws = null;\n this.removeAllListeners();\n};\n\nWebSocketTransport.enabled = function() {\n debug('enabled');\n return !!WebsocketDriver;\n};\nWebSocketTransport.transportName = 'websocket';\n\n// In theory, ws should require 1 round trip. But in chrome, this is\n// not very stable over SSL. Most likely a ws connection requires a\n// separate SSL connection, in which case 2 round trips are an\n// absolute minumum.\nWebSocketTransport.roundTrips = 2;\n\nmodule.exports = WebSocketTransport;\n\n}).call(this,{ env: {} })\n\n},{\"../utils/event\":46,\"../utils/url\":52,\"./driver/websocket\":19,\"debug\":55,\"events\":3,\"inherits\":57}],39:[function(require,module,exports){\n'use strict';\n\nvar inherits = require('inherits')\n , AjaxBasedTransport = require('./lib/ajax-based')\n , XdrStreamingTransport = require('./xdr-streaming')\n , XhrReceiver = require('./receiver/xhr')\n , XDRObject = require('./sender/xdr')\n ;\n\nfunction XdrPollingTransport(transUrl) {\n if (!XDRObject.enabled) {\n throw new Error('Transport created when disabled');\n }\n AjaxBasedTransport.call(this, transUrl, '/xhr', XhrReceiver, XDRObject);\n}\n\ninherits(XdrPollingTransport, AjaxBasedTransport);\n\nXdrPollingTransport.enabled = XdrStreamingTransport.enabled;\nXdrPollingTransport.transportName = 'xdr-polling';\nXdrPollingTransport.roundTrips = 2; // preflight, ajax\n\nmodule.exports = XdrPollingTransport;\n\n},{\"./lib/ajax-based\":24,\"./receiver/xhr\":32,\"./sender/xdr\":34,\"./xdr-streaming\":40,\"inherits\":57}],40:[function(require,module,exports){\n'use strict';\n\nvar inherits = require('inherits')\n , AjaxBasedTransport = require('./lib/ajax-based')\n , XhrReceiver = require('./receiver/xhr')\n , XDRObject = require('./sender/xdr')\n ;\n\n// According to:\n// http://stackoverflow.com/questions/1641507/detect-browser-support-for-cross-domain-xmlhttprequests\n// http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/\n\nfunction XdrStreamingTransport(transUrl) {\n if (!XDRObject.enabled) {\n throw new Error('Transport created when disabled');\n }\n AjaxBasedTransport.call(this, transUrl, '/xhr_streaming', XhrReceiver, XDRObject);\n}\n\ninherits(XdrStreamingTransport, AjaxBasedTransport);\n\nXdrStreamingTransport.enabled = function(info) {\n if (info.cookie_needed || info.nullOrigin) {\n return false;\n }\n return XDRObject.enabled && info.sameScheme;\n};\n\nXdrStreamingTransport.transportName = 'xdr-streaming';\nXdrStreamingTransport.roundTrips = 2; // preflight, ajax\n\nmodule.exports = XdrStreamingTransport;\n\n},{\"./lib/ajax-based\":24,\"./receiver/xhr\":32,\"./sender/xdr\":34,\"inherits\":57}],41:[function(require,module,exports){\n'use strict';\n\nvar inherits = require('inherits')\n , AjaxBasedTransport = require('./lib/ajax-based')\n , XhrReceiver = require('./receiver/xhr')\n , XHRCorsObject = require('./sender/xhr-cors')\n , XHRLocalObject = require('./sender/xhr-local')\n ;\n\nfunction XhrPollingTransport(transUrl) {\n if (!XHRLocalObject.enabled && !XHRCorsObject.enabled) {\n throw new Error('Transport created when disabled');\n }\n AjaxBasedTransport.call(this, transUrl, '/xhr', XhrReceiver, XHRCorsObject);\n}\n\ninherits(XhrPollingTransport, AjaxBasedTransport);\n\nXhrPollingTransport.enabled = function(info) {\n if (info.nullOrigin) {\n return false;\n }\n\n if (XHRLocalObject.enabled && info.sameOrigin) {\n return true;\n }\n return XHRCorsObject.enabled;\n};\n\nXhrPollingTransport.transportName = 'xhr-polling';\nXhrPollingTransport.roundTrips = 2; // preflight, ajax\n\nmodule.exports = XhrPollingTransport;\n\n},{\"./lib/ajax-based\":24,\"./receiver/xhr\":32,\"./sender/xhr-cors\":35,\"./sender/xhr-local\":37,\"inherits\":57}],42:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar inherits = require('inherits')\n , AjaxBasedTransport = require('./lib/ajax-based')\n , XhrReceiver = require('./receiver/xhr')\n , XHRCorsObject = require('./sender/xhr-cors')\n , XHRLocalObject = require('./sender/xhr-local')\n , browser = require('../utils/browser')\n ;\n\nfunction XhrStreamingTransport(transUrl) {\n if (!XHRLocalObject.enabled && !XHRCorsObject.enabled) {\n throw new Error('Transport created when disabled');\n }\n AjaxBasedTransport.call(this, transUrl, '/xhr_streaming', XhrReceiver, XHRCorsObject);\n}\n\ninherits(XhrStreamingTransport, AjaxBasedTransport);\n\nXhrStreamingTransport.enabled = function(info) {\n if (info.nullOrigin) {\n return false;\n }\n // Opera doesn't support xhr-streaming #60\n // But it might be able to #92\n if (browser.isOpera()) {\n return false;\n }\n\n return XHRCorsObject.enabled;\n};\n\nXhrStreamingTransport.transportName = 'xhr-streaming';\nXhrStreamingTransport.roundTrips = 2; // preflight, ajax\n\n// Safari gets confused when a streaming ajax request is started\n// before onload. This causes the load indicator to spin indefinetely.\n// Only require body when used in a browser\nXhrStreamingTransport.needBody = !!global.document;\n\nmodule.exports = XhrStreamingTransport;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"../utils/browser\":44,\"./lib/ajax-based\":24,\"./receiver/xhr\":32,\"./sender/xhr-cors\":35,\"./sender/xhr-local\":37,\"inherits\":57}],43:[function(require,module,exports){\n(function (global){\n'use strict';\n\nif (global.crypto && global.crypto.getRandomValues) {\n module.exports.randomBytes = function(length) {\n var bytes = new Uint8Array(length);\n global.crypto.getRandomValues(bytes);\n return bytes;\n };\n} else {\n module.exports.randomBytes = function(length) {\n var bytes = new Array(length);\n for (var i = 0; i < length; i++) {\n bytes[i] = Math.floor(Math.random() * 256);\n }\n return bytes;\n };\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],44:[function(require,module,exports){\n(function (global){\n'use strict';\n\nmodule.exports = {\n isOpera: function() {\n return global.navigator &&\n /opera/i.test(global.navigator.userAgent);\n }\n\n, isKonqueror: function() {\n return global.navigator &&\n /konqueror/i.test(global.navigator.userAgent);\n }\n\n // #187 wrap document.domain in try/catch because of WP8 from file:///\n, hasDomain: function () {\n // non-browser client always has a domain\n if (!global.document) {\n return true;\n }\n\n try {\n return !!global.document.domain;\n } catch (e) {\n return false;\n }\n }\n};\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],45:[function(require,module,exports){\n'use strict';\n\nvar JSON3 = require('json3');\n\n// Some extra characters that Chrome gets wrong, and substitutes with\n// something else on the wire.\n// eslint-disable-next-line no-control-regex, no-misleading-character-class\nvar extraEscapable = /[\\x00-\\x1f\\ud800-\\udfff\\ufffe\\uffff\\u0300-\\u0333\\u033d-\\u0346\\u034a-\\u034c\\u0350-\\u0352\\u0357-\\u0358\\u035c-\\u0362\\u0374\\u037e\\u0387\\u0591-\\u05af\\u05c4\\u0610-\\u0617\\u0653-\\u0654\\u0657-\\u065b\\u065d-\\u065e\\u06df-\\u06e2\\u06eb-\\u06ec\\u0730\\u0732-\\u0733\\u0735-\\u0736\\u073a\\u073d\\u073f-\\u0741\\u0743\\u0745\\u0747\\u07eb-\\u07f1\\u0951\\u0958-\\u095f\\u09dc-\\u09dd\\u09df\\u0a33\\u0a36\\u0a59-\\u0a5b\\u0a5e\\u0b5c-\\u0b5d\\u0e38-\\u0e39\\u0f43\\u0f4d\\u0f52\\u0f57\\u0f5c\\u0f69\\u0f72-\\u0f76\\u0f78\\u0f80-\\u0f83\\u0f93\\u0f9d\\u0fa2\\u0fa7\\u0fac\\u0fb9\\u1939-\\u193a\\u1a17\\u1b6b\\u1cda-\\u1cdb\\u1dc0-\\u1dcf\\u1dfc\\u1dfe\\u1f71\\u1f73\\u1f75\\u1f77\\u1f79\\u1f7b\\u1f7d\\u1fbb\\u1fbe\\u1fc9\\u1fcb\\u1fd3\\u1fdb\\u1fe3\\u1feb\\u1fee-\\u1fef\\u1ff9\\u1ffb\\u1ffd\\u2000-\\u2001\\u20d0-\\u20d1\\u20d4-\\u20d7\\u20e7-\\u20e9\\u2126\\u212a-\\u212b\\u2329-\\u232a\\u2adc\\u302b-\\u302c\\uaab2-\\uaab3\\uf900-\\ufa0d\\ufa10\\ufa12\\ufa15-\\ufa1e\\ufa20\\ufa22\\ufa25-\\ufa26\\ufa2a-\\ufa2d\\ufa30-\\ufa6d\\ufa70-\\ufad9\\ufb1d\\ufb1f\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufb4e\\ufff0-\\uffff]/g\n , extraLookup;\n\n// This may be quite slow, so let's delay until user actually uses bad\n// characters.\nvar unrollLookup = function(escapable) {\n var i;\n var unrolled = {};\n var c = [];\n for (i = 0; i < 65536; i++) {\n c.push( String.fromCharCode(i) );\n }\n escapable.lastIndex = 0;\n c.join('').replace(escapable, function(a) {\n unrolled[ a ] = '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n return '';\n });\n escapable.lastIndex = 0;\n return unrolled;\n};\n\n// Quote string, also taking care of unicode characters that browsers\n// often break. Especially, take care of unicode surrogates:\n// http://en.wikipedia.org/wiki/Mapping_of_Unicode_characters#Surrogates\nmodule.exports = {\n quote: function(string) {\n var quoted = JSON3.stringify(string);\n\n // In most cases this should be very fast and good enough.\n extraEscapable.lastIndex = 0;\n if (!extraEscapable.test(quoted)) {\n return quoted;\n }\n\n if (!extraLookup) {\n extraLookup = unrollLookup(extraEscapable);\n }\n\n return quoted.replace(extraEscapable, function(a) {\n return extraLookup[a];\n });\n }\n};\n\n},{\"json3\":58}],46:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar random = require('./random');\n\nvar onUnload = {}\n , afterUnload = false\n // detect google chrome packaged apps because they don't allow the 'unload' event\n , isChromePackagedApp = global.chrome && global.chrome.app && global.chrome.app.runtime\n ;\n\nmodule.exports = {\n attachEvent: function(event, listener) {\n if (typeof global.addEventListener !== 'undefined') {\n global.addEventListener(event, listener, false);\n } else if (global.document && global.attachEvent) {\n // IE quirks.\n // According to: http://stevesouders.com/misc/test-postmessage.php\n // the message gets delivered only to 'document', not 'window'.\n global.document.attachEvent('on' + event, listener);\n // I get 'window' for ie8.\n global.attachEvent('on' + event, listener);\n }\n }\n\n, detachEvent: function(event, listener) {\n if (typeof global.addEventListener !== 'undefined') {\n global.removeEventListener(event, listener, false);\n } else if (global.document && global.detachEvent) {\n global.document.detachEvent('on' + event, listener);\n global.detachEvent('on' + event, listener);\n }\n }\n\n, unloadAdd: function(listener) {\n if (isChromePackagedApp) {\n return null;\n }\n\n var ref = random.string(8);\n onUnload[ref] = listener;\n if (afterUnload) {\n setTimeout(this.triggerUnloadCallbacks, 0);\n }\n return ref;\n }\n\n, unloadDel: function(ref) {\n if (ref in onUnload) {\n delete onUnload[ref];\n }\n }\n\n, triggerUnloadCallbacks: function() {\n for (var ref in onUnload) {\n onUnload[ref]();\n delete onUnload[ref];\n }\n }\n};\n\nvar unloadTriggered = function() {\n if (afterUnload) {\n return;\n }\n afterUnload = true;\n module.exports.triggerUnloadCallbacks();\n};\n\n// 'unload' alone is not reliable in opera within an iframe, but we\n// can't use `beforeunload` as IE fires it on javascript: links.\nif (!isChromePackagedApp) {\n module.exports.attachEvent('unload', unloadTriggered);\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"./random\":50}],47:[function(require,module,exports){\n(function (process,global){\n'use strict';\n\nvar eventUtils = require('./event')\n , JSON3 = require('json3')\n , browser = require('./browser')\n ;\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n debug = require('debug')('sockjs-client:utils:iframe');\n}\n\nmodule.exports = {\n WPrefix: '_jp'\n, currentWindowId: null\n\n, polluteGlobalNamespace: function() {\n if (!(module.exports.WPrefix in global)) {\n global[module.exports.WPrefix] = {};\n }\n }\n\n, postMessage: function(type, data) {\n if (global.parent !== global) {\n global.parent.postMessage(JSON3.stringify({\n windowId: module.exports.currentWindowId\n , type: type\n , data: data || ''\n }), '*');\n } else {\n debug('Cannot postMessage, no parent window.', type, data);\n }\n }\n\n, createIframe: function(iframeUrl, errorCallback) {\n var iframe = global.document.createElement('iframe');\n var tref, unloadRef;\n var unattach = function() {\n debug('unattach');\n clearTimeout(tref);\n // Explorer had problems with that.\n try {\n iframe.onload = null;\n } catch (x) {\n // intentionally empty\n }\n iframe.onerror = null;\n };\n var cleanup = function() {\n debug('cleanup');\n if (iframe) {\n unattach();\n // This timeout makes chrome fire onbeforeunload event\n // within iframe. Without the timeout it goes straight to\n // onunload.\n setTimeout(function() {\n if (iframe) {\n iframe.parentNode.removeChild(iframe);\n }\n iframe = null;\n }, 0);\n eventUtils.unloadDel(unloadRef);\n }\n };\n var onerror = function(err) {\n debug('onerror', err);\n if (iframe) {\n cleanup();\n errorCallback(err);\n }\n };\n var post = function(msg, origin) {\n debug('post', msg, origin);\n setTimeout(function() {\n try {\n // When the iframe is not loaded, IE raises an exception\n // on 'contentWindow'.\n if (iframe && iframe.contentWindow) {\n iframe.contentWindow.postMessage(msg, origin);\n }\n } catch (x) {\n // intentionally empty\n }\n }, 0);\n };\n\n iframe.src = iframeUrl;\n iframe.style.display = 'none';\n iframe.style.position = 'absolute';\n iframe.onerror = function() {\n onerror('onerror');\n };\n iframe.onload = function() {\n debug('onload');\n // `onload` is triggered before scripts on the iframe are\n // executed. Give it few seconds to actually load stuff.\n clearTimeout(tref);\n tref = setTimeout(function() {\n onerror('onload timeout');\n }, 2000);\n };\n global.document.body.appendChild(iframe);\n tref = setTimeout(function() {\n onerror('timeout');\n }, 15000);\n unloadRef = eventUtils.unloadAdd(cleanup);\n return {\n post: post\n , cleanup: cleanup\n , loaded: unattach\n };\n }\n\n/* eslint no-undef: \"off\", new-cap: \"off\" */\n, createHtmlfile: function(iframeUrl, errorCallback) {\n var axo = ['Active'].concat('Object').join('X');\n var doc = new global[axo]('htmlfile');\n var tref, unloadRef;\n var iframe;\n var unattach = function() {\n clearTimeout(tref);\n iframe.onerror = null;\n };\n var cleanup = function() {\n if (doc) {\n unattach();\n eventUtils.unloadDel(unloadRef);\n iframe.parentNode.removeChild(iframe);\n iframe = doc = null;\n CollectGarbage();\n }\n };\n var onerror = function(r) {\n debug('onerror', r);\n if (doc) {\n cleanup();\n errorCallback(r);\n }\n };\n var post = function(msg, origin) {\n try {\n // When the iframe is not loaded, IE raises an exception\n // on 'contentWindow'.\n setTimeout(function() {\n if (iframe && iframe.contentWindow) {\n iframe.contentWindow.postMessage(msg, origin);\n }\n }, 0);\n } catch (x) {\n // intentionally empty\n }\n };\n\n doc.open();\n doc.write('<html><s' + 'cript>' +\n 'document.domain=\"' + global.document.domain + '\";' +\n '</s' + 'cript></html>');\n doc.close();\n doc.parentWindow[module.exports.WPrefix] = global[module.exports.WPrefix];\n var c = doc.createElement('div');\n doc.body.appendChild(c);\n iframe = doc.createElement('iframe');\n c.appendChild(iframe);\n iframe.src = iframeUrl;\n iframe.onerror = function() {\n onerror('onerror');\n };\n tref = setTimeout(function() {\n onerror('timeout');\n }, 15000);\n unloadRef = eventUtils.unloadAdd(cleanup);\n return {\n post: post\n , cleanup: cleanup\n , loaded: unattach\n };\n }\n};\n\nmodule.exports.iframeEnabled = false;\nif (global.document) {\n // postMessage misbehaves in konqueror 4.6.5 - the messages are delivered with\n // huge delay, or not at all.\n module.exports.iframeEnabled = (typeof global.postMessage === 'function' ||\n typeof global.postMessage === 'object') && (!browser.isKonqueror());\n}\n\n}).call(this,{ env: {} },typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"./browser\":44,\"./event\":46,\"debug\":55,\"json3\":58}],48:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar logObject = {};\n['log', 'debug', 'warn'].forEach(function (level) {\n var levelExists;\n\n try {\n levelExists = global.console && global.console[level] && global.console[level].apply;\n } catch(e) {\n // do nothing\n }\n\n logObject[level] = levelExists ? function () {\n return global.console[level].apply(global.console, arguments);\n } : (level === 'log' ? function () {} : logObject.log);\n});\n\nmodule.exports = logObject;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],49:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n isObject: function(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n }\n\n, extend: function(obj) {\n if (!this.isObject(obj)) {\n return obj;\n }\n var source, prop;\n for (var i = 1, length = arguments.length; i < length; i++) {\n source = arguments[i];\n for (prop in source) {\n if (Object.prototype.hasOwnProperty.call(source, prop)) {\n obj[prop] = source[prop];\n }\n }\n }\n return obj;\n }\n};\n\n},{}],50:[function(require,module,exports){\n'use strict';\n\nvar crypto = require('crypto');\n\n// This string has length 32, a power of 2, so the modulus doesn't introduce a\n// bias.\nvar _randomStringChars = 'abcdefghijklmnopqrstuvwxyz012345';\nmodule.exports = {\n string: function(length) {\n var max = _randomStringChars.length;\n var bytes = crypto.randomBytes(length);\n var ret = [];\n for (var i = 0; i < length; i++) {\n ret.push(_randomStringChars.substr(bytes[i] % max, 1));\n }\n return ret.join('');\n }\n\n, number: function(max) {\n return Math.floor(Math.random() * max);\n }\n\n, numberString: function(max) {\n var t = ('' + (max - 1)).length;\n var p = new Array(t + 1).join('0');\n return (p + this.number(max)).slice(-t);\n }\n};\n\n},{\"crypto\":43}],51:[function(require,module,exports){\n(function (process){\n'use strict';\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n debug = require('debug')('sockjs-client:utils:transport');\n}\n\nmodule.exports = function(availableTransports) {\n return {\n filterToEnabled: function(transportsWhitelist, info) {\n var transports = {\n main: []\n , facade: []\n };\n if (!transportsWhitelist) {\n transportsWhitelist = [];\n } else if (typeof transportsWhitelist === 'string') {\n transportsWhitelist = [transportsWhitelist];\n }\n\n availableTransports.forEach(function(trans) {\n if (!trans) {\n return;\n }\n\n if (trans.transportName === 'websocket' && info.websocket === false) {\n debug('disabled from server', 'websocket');\n return;\n }\n\n if (transportsWhitelist.length &&\n transportsWhitelist.indexOf(trans.transportName) === -1) {\n debug('not in whitelist', trans.transportName);\n return;\n }\n\n if (trans.enabled(info)) {\n debug('enabled', trans.transportName);\n transports.main.push(trans);\n if (trans.facadeTransport) {\n transports.facade.push(trans.facadeTransport);\n }\n } else {\n debug('disabled', trans.transportName);\n }\n });\n return transports;\n }\n };\n};\n\n}).call(this,{ env: {} })\n\n},{\"debug\":55}],52:[function(require,module,exports){\n(function (process){\n'use strict';\n\nvar URL = require('url-parse');\n\nvar debug = function() {};\nif (process.env.NODE_ENV !== 'production') {\n debug = require('debug')('sockjs-client:utils:url');\n}\n\nmodule.exports = {\n getOrigin: function(url) {\n if (!url) {\n return null;\n }\n\n var p = new URL(url);\n if (p.protocol === 'file:') {\n return null;\n }\n\n var port = p.port;\n if (!port) {\n port = (p.protocol === 'https:') ? '443' : '80';\n }\n\n return p.protocol + '//' + p.hostname + ':' + port;\n }\n\n, isOriginEqual: function(a, b) {\n var res = this.getOrigin(a) === this.getOrigin(b);\n debug('same', a, b, res);\n return res;\n }\n\n, isSchemeEqual: function(a, b) {\n return (a.split(':')[0] === b.split(':')[0]);\n }\n\n, addPath: function (url, path) {\n var qs = url.split('?');\n return qs[0] + path + (qs[1] ? '?' + qs[1] : '');\n }\n\n, addQuery: function (url, q) {\n return url + (url.indexOf('?') === -1 ? ('?' + q) : ('&' + q));\n }\n\n, isLoopbackAddr: function (addr) {\n return /^127\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})$/i.test(addr) || /^\\[::1\\]$/.test(addr);\n }\n};\n\n}).call(this,{ env: {} })\n\n},{\"debug\":55,\"url-parse\":61}],53:[function(require,module,exports){\nmodule.exports = '1.5.0';\n\n},{}],54:[function(require,module,exports){\n/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n\n},{}],55:[function(require,module,exports){\n(function (process){\n\"use strict\";\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\n/**\n * Colors.\n */\n\nexports.colors = ['#0000CC', '#0000FF', '#0033CC', '#0033FF', '#0066CC', '#0066FF', '#0099CC', '#0099FF', '#00CC00', '#00CC33', '#00CC66', '#00CC99', '#00CCCC', '#00CCFF', '#3300CC', '#3300FF', '#3333CC', '#3333FF', '#3366CC', '#3366FF', '#3399CC', '#3399FF', '#33CC00', '#33CC33', '#33CC66', '#33CC99', '#33CCCC', '#33CCFF', '#6600CC', '#6600FF', '#6633CC', '#6633FF', '#66CC00', '#66CC33', '#9900CC', '#9900FF', '#9933CC', '#9933FF', '#99CC00', '#99CC33', '#CC0000', '#CC0033', '#CC0066', '#CC0099', '#CC00CC', '#CC00FF', '#CC3300', '#CC3333', '#CC3366', '#CC3399', '#CC33CC', '#CC33FF', '#CC6600', '#CC6633', '#CC9900', '#CC9933', '#CCCC00', '#CCCC33', '#FF0000', '#FF0033', '#FF0066', '#FF0099', '#FF00CC', '#FF00FF', '#FF3300', '#FF3333', '#FF3366', '#FF3399', '#FF33CC', '#FF33FF', '#FF6600', '#FF6633', '#FF9900', '#FF9933', '#FFCC00', '#FFCC33'];\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n// eslint-disable-next-line complexity\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n return true;\n } // Internet Explorer and Edge do not support colors.\n\n\n if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n return false;\n } // Is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\n\n return typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773\n typeof window !== 'undefined' && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker\n typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/);\n}\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\n\nfunction formatArgs(args) {\n args[0] = (this.useColors ? '%c' : '') + this.namespace + (this.useColors ? ' %c' : ' ') + args[0] + (this.useColors ? '%c ' : ' ') + '+' + module.exports.humanize(this.diff);\n\n if (!this.useColors) {\n return;\n }\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit'); // The final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function (match) {\n if (match === '%%') {\n return;\n }\n\n index++;\n\n if (match === '%c') {\n // We only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n args.splice(lastC, 0, c);\n}\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\n\nfunction log() {\n var _console;\n\n // This hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return (typeof console === \"undefined\" ? \"undefined\" : _typeof(console)) === 'object' && console.log && (_console = console).log.apply(_console, arguments);\n}\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\n\nfunction save(namespaces) {\n try {\n if (namespaces) {\n exports.storage.setItem('debug', namespaces);\n } else {\n exports.storage.removeItem('debug');\n }\n } catch (error) {// Swallow\n // XXX (@Qix-) should we be logging these?\n }\n}\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\n\nfunction load() {\n var r;\n\n try {\n r = exports.storage.getItem('debug');\n } catch (error) {} // Swallow\n // XXX (@Qix-) should we be logging these?\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\n\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\n\nfunction localstorage() {\n try {\n // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n // The Browser also has localStorage in the global context.\n return localStorage;\n } catch (error) {// Swallow\n // XXX (@Qix-) should we be logging these?\n }\n}\n\nmodule.exports = require('./common')(exports);\nvar formatters = module.exports.formatters;\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n try {\n return JSON.stringify(v);\n } catch (error) {\n return '[UnexpectedJSONParseError]: ' + error.message;\n }\n};\n\n\n}).call(this,{ env: {} })\n\n},{\"./common\":56}],56:[function(require,module,exports){\n\"use strict\";\n\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\nfunction setup(env) {\n createDebug.debug = createDebug;\n createDebug.default = createDebug;\n createDebug.coerce = coerce;\n createDebug.disable = disable;\n createDebug.enable = enable;\n createDebug.enabled = enabled;\n createDebug.humanize = require('ms');\n Object.keys(env).forEach(function (key) {\n createDebug[key] = env[key];\n });\n /**\n * Active `debug` instances.\n */\n\n createDebug.instances = [];\n /**\n * The currently active debug mode names, and names to skip.\n */\n\n createDebug.names = [];\n createDebug.skips = [];\n /**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\n createDebug.formatters = {};\n /**\n * Selects a color for a debug namespace\n * @param {String} namespace The namespace string for the for the debug instance to be colored\n * @return {Number|String} An ANSI color code for the given namespace\n * @api private\n */\n\n function selectColor(namespace) {\n var hash = 0;\n\n for (var i = 0; i < namespace.length; i++) {\n hash = (hash << 5) - hash + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n }\n\n createDebug.selectColor = selectColor;\n /**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\n function createDebug(namespace) {\n var prevTime;\n\n function debug() {\n // Disabled?\n if (!debug.enabled) {\n return;\n }\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var self = debug; // Set `diff` timestamp\n\n var curr = Number(new Date());\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n args[0] = createDebug.coerce(args[0]);\n\n if (typeof args[0] !== 'string') {\n // Anything else let's inspect with %O\n args.unshift('%O');\n } // Apply any `formatters` transformations\n\n\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function (match, format) {\n // If we encounter an escaped % then don't increase the array index\n if (match === '%%') {\n return match;\n }\n\n index++;\n var formatter = createDebug.formatters[format];\n\n if (typeof formatter === 'function') {\n var val = args[index];\n match = formatter.call(self, val); // Now we need to remove `args[index]` since it's inlined in the `format`\n\n args.splice(index, 1);\n index--;\n }\n\n return match;\n }); // Apply env-specific formatting (colors, etc.)\n\n createDebug.formatArgs.call(self, args);\n var logFn = self.log || createDebug.log;\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = createDebug.enabled(namespace);\n debug.useColors = createDebug.useColors();\n debug.color = selectColor(namespace);\n debug.destroy = destroy;\n debug.extend = extend; // Debug.formatArgs = formatArgs;\n // debug.rawLog = rawLog;\n // env-specific initialization logic for debug instances\n\n if (typeof createDebug.init === 'function') {\n createDebug.init(debug);\n }\n\n createDebug.instances.push(debug);\n return debug;\n }\n\n function destroy() {\n var index = createDebug.instances.indexOf(this);\n\n if (index !== -1) {\n createDebug.instances.splice(index, 1);\n return true;\n }\n\n return false;\n }\n\n function extend(namespace, delimiter) {\n return createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n }\n /**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\n\n function enable(namespaces) {\n createDebug.save(namespaces);\n createDebug.names = [];\n createDebug.skips = [];\n var i;\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (i = 0; i < len; i++) {\n if (!split[i]) {\n // ignore empty strings\n continue;\n }\n\n namespaces = split[i].replace(/\\*/g, '.*?');\n\n if (namespaces[0] === '-') {\n createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n createDebug.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n\n for (i = 0; i < createDebug.instances.length; i++) {\n var instance = createDebug.instances[i];\n instance.enabled = createDebug.enabled(instance.namespace);\n }\n }\n /**\n * Disable debug output.\n *\n * @api public\n */\n\n\n function disable() {\n createDebug.enable('');\n }\n /**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\n\n function enabled(name) {\n if (name[name.length - 1] === '*') {\n return true;\n }\n\n var i;\n var len;\n\n for (i = 0, len = createDebug.skips.length; i < len; i++) {\n if (createDebug.skips[i].test(name)) {\n return false;\n }\n }\n\n for (i = 0, len = createDebug.names.length; i < len; i++) {\n if (createDebug.names[i].test(name)) {\n return true;\n }\n }\n\n return false;\n }\n /**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\n\n function coerce(val) {\n if (val instanceof Error) {\n return val.stack || val.message;\n }\n\n return val;\n }\n\n createDebug.enable(createDebug.load());\n return createDebug;\n}\n\nmodule.exports = setup;\n\n\n},{\"ms\":54}],57:[function(require,module,exports){\nif (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n\n},{}],58:[function(require,module,exports){\n(function (global){\n/*! JSON v3.3.2 | https://bestiejs.github.io/json3 | Copyright 2012-2015, Kit Cambridge, Benjamin Tan | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root.Object());\n exports || (exports = root.Object());\n\n // Native constructor aliases.\n var Number = context.Number || root.Number,\n String = context.String || root.String,\n Object = context.Object || root.Object,\n Date = context.Date || root.Date,\n SyntaxError = context.SyntaxError || root.SyntaxError,\n TypeError = context.TypeError || root.TypeError,\n Math = context.Math || root.Math,\n nativeJSON = context.JSON || root.JSON;\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty = objectProto.hasOwnProperty,\n undefined;\n\n // Internal: Contains `try...catch` logic used by other functions.\n // This prevents other functions from being deoptimized.\n function attempt(func, errorFunc) {\n try {\n func();\n } catch (exception) {\n if (errorFunc) {\n errorFunc();\n }\n }\n }\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n attempt(function () {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n });\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] != null) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"date-serialization\") && has(\"json-parse\");\n } else if (name == \"date-serialization\") {\n // Indicates whether `Date`s can be serialized accurately by `JSON.stringify`.\n isSupported = has(\"json-stringify\") && isExtended;\n if (isSupported) {\n var stringify = exports.stringify;\n attempt(function () {\n isSupported =\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n });\n }\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\";\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n attempt(function () {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undefined &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undefined) === undefined &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undefined &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undefined]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undefined, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\";\n }, function () {\n stringifySupported = false;\n });\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse, parseSupported;\n if (typeof parse == \"function\") {\n attempt(function () {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n attempt(function () {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n });\n if (parseSupported) {\n attempt(function () {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n });\n }\n if (parseSupported) {\n attempt(function () {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n });\n }\n }\n }\n }, function () {\n parseSupported = false;\n });\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n has[\"bug-string-char-index\"] = has[\"date-serialization\"] = has[\"json\"] = has[\"json-stringify\"] = has[\"json-parse\"] = null;\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n var forOwn = function (object, callback) {\n var size = 0, Properties, dontEnums, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n dontEnums = new Properties();\n for (property in dontEnums) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(dontEnums, property)) {\n size++;\n }\n }\n Properties = dontEnums = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n dontEnums = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forOwn = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = dontEnums.length; property = dontEnums[--length];) {\n if (hasProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forOwn = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forOwn(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\") && !has(\"date-serialization\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Serializes a date object.\n var serializeDate = function (value) {\n var getData, year, month, date, time, hours, minutes, seconds, milliseconds;\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n getData = function (value) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n };\n } else {\n getData = function (value) {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n };\n }\n serializeDate = function (value) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n getData(value);\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n year = month = date = hours = minutes = seconds = milliseconds = null;\n } else {\n value = null;\n }\n return value;\n };\n return serializeDate(value);\n };\n\n // For environments with `JSON.stringify` but buggy date serialization,\n // we override the native `Date#toJSON` implementation with a\n // spec-compliant one.\n if (has(\"json-stringify\") && !has(\"date-serialization\")) {\n // Internal: the `Date#toJSON` implementation used to override the native one.\n function dateToJSON (key) {\n return serializeDate(this);\n }\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n var nativeStringify = exports.stringify;\n exports.stringify = function (source, filter, width) {\n var nativeToJSON = Date.prototype.toJSON;\n Date.prototype.toJSON = dateToJSON;\n var result = nativeStringify(source, filter, width);\n Date.prototype.toJSON = nativeToJSON;\n return result;\n }\n } else {\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var escapeChar = function (character) {\n var charCode = character.charCodeAt(0), escaped = Escapes[charCode];\n if (escaped) {\n return escaped;\n }\n return unicodePrefix + toPaddedString(2, charCode.toString(16));\n };\n var reEscape = /[\\x00-\\x1f\\x22\\x5c]/g;\n var quote = function (value) {\n reEscape.lastIndex = 0;\n return '\"' +\n (\n reEscape.test(value)\n ? value.replace(reEscape, escapeChar)\n : value\n ) +\n '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, type, className, results, element, index, length, prefix, result;\n attempt(function () {\n // Necessary for host object support.\n value = object[property];\n });\n if (typeof value == \"object\" && value) {\n if (value.getUTCFullYear && getClass.call(value) == dateClass && value.toJSON === Date.prototype.toJSON) {\n value = serializeDate(value);\n } else if (typeof value.toJSON == \"function\") {\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n // Exit early if value is `undefined` or `null`.\n if (value == undefined) {\n return value === undefined ? value : \"null\";\n }\n type = typeof value;\n // Only call `getClass` if the value is an object.\n if (type == \"object\") {\n className = getClass.call(value);\n }\n switch (className || type) {\n case \"boolean\":\n case booleanClass:\n // Booleans are represented literally.\n return \"\" + value;\n case \"number\":\n case numberClass:\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n case \"string\":\n case stringClass:\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undefined ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forOwn(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undefined) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n className = getClass.call(filter);\n if (className == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length;) {\n value = filter[index++];\n className = getClass.call(value);\n if (className == \"[object String]\" || className == \"[object Number]\") {\n properties[value] = 1;\n }\n }\n }\n }\n if (width) {\n className = getClass.call(width);\n if (className == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n if (width > 10) {\n width = 10;\n }\n for (whitespace = \"\"; whitespace.length < width;) {\n whitespace += \" \";\n }\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length; position++) {\n charCode = source.charCodeAt(position);\n if (charCode < 48 || charCode > 57) {\n break;\n }\n }\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length; position++) {\n charCode = source.charCodeAt(position);\n if (charCode < 48 || charCode > 57) {\n break;\n }\n }\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n var temp = source.slice(Index, Index + 4);\n if (temp == \"true\") {\n Index += 4;\n return true;\n } else if (temp == \"fals\" && source.charCodeAt(Index + 4 ) == 101) {\n Index += 5;\n return false;\n } else if (temp == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;;) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n } else {\n hasMembers = true;\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;;) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n } else {\n hasMembers = true;\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undefined) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forOwn` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(getClass, forOwn, value, length, callback);\n }\n } else {\n forOwn(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports.runInContext = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root.JSON3,\n isRestored = false;\n\n var JSON3 = runInContext(root, (root.JSON3 = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root.JSON3 = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],59:[function(require,module,exports){\n'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n try {\n return decodeURIComponent(input.replace(/\\+/g, ' '));\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n try {\n return encodeURIComponent(input);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n var parser = /([^=?&]+)=?([^&]*)/g\n , result = {}\n , part;\n\n while (part = parser.exec(query)) {\n var key = decode(part[1])\n , value = decode(part[2]);\n\n //\n // Prevent overriding of existing properties. This ensures that build-in\n // methods like `toString` or __proto__ are not overriden by malicious\n // querystrings.\n //\n // In the case if failed decoding, we want to omit the key/value pairs\n // from the result.\n //\n if (key === null || value === null || key in result) continue;\n result[key] = value;\n }\n\n return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n prefix = prefix || '';\n\n var pairs = []\n , value\n , key;\n\n //\n // Optionally prefix with a '?' if needed\n //\n if ('string' !== typeof prefix) prefix = '?';\n\n for (key in obj) {\n if (has.call(obj, key)) {\n value = obj[key];\n\n //\n // Edge cases where we actually want to encode the value to an empty\n // string instead of the stringified value.\n //\n if (!value && (value === null || value === undef || isNaN(value))) {\n value = '';\n }\n\n key = encodeURIComponent(key);\n value = encodeURIComponent(value);\n\n //\n // If we failed to encode the strings, we should bail out as we don't\n // want to add invalid strings to the query.\n //\n if (key === null || value === null) continue;\n pairs.push(key +'='+ value);\n }\n }\n\n return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n\n},{}],60:[function(require,module,exports){\n'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n protocol = protocol.split(':')[0];\n port = +port;\n\n if (!port) return false;\n\n switch (protocol) {\n case 'http':\n case 'ws':\n return port !== 80;\n\n case 'https':\n case 'wss':\n return port !== 443;\n\n case 'ftp':\n return port !== 21;\n\n case 'gopher':\n return port !== 70;\n\n case 'file':\n return false;\n }\n\n return port !== 0;\n};\n\n},{}],61:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar required = require('requires-port')\n , qs = require('querystringify')\n , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//\n , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\S\\s]*)/i\n , whitespace = '[\\\\x09\\\\x0A\\\\x0B\\\\x0C\\\\x0D\\\\x20\\\\xA0\\\\u1680\\\\u180E\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200A\\\\u202F\\\\u205F\\\\u3000\\\\u2028\\\\u2029\\\\uFEFF]'\n , left = new RegExp('^'+ whitespace +'+');\n\n/**\n * Trim a given string.\n *\n * @param {String} str String to trim.\n * @public\n */\nfunction trimLeft(str) {\n return (str ? str : '').toString().replace(left, '');\n}\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n * indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n * the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n ['#', 'hash'], // Extract from the back.\n ['?', 'query'], // Extract from the back.\n function sanitize(address) { // Sanitize what is left of the address\n return address.replace('\\\\', '/');\n },\n ['/', 'pathname'], // Extract from the back.\n ['@', 'auth', 1], // Extract from the front.\n [NaN, 'host', undefined, 1, 1], // Set left over value.\n [/:(\\d+)$/, 'port', undefined, 1], // RegExp the back.\n [NaN, 'hostname', undefined, 1, 1] // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n var globalVar;\n\n if (typeof window !== 'undefined') globalVar = window;\n else if (typeof global !== 'undefined') globalVar = global;\n else if (typeof self !== 'undefined') globalVar = self;\n else globalVar = {};\n\n var location = globalVar.location || {};\n loc = loc || location;\n\n var finaldestination = {}\n , type = typeof loc\n , key;\n\n if ('blob:' === loc.protocol) {\n finaldestination = new Url(unescape(loc.pathname), {});\n } else if ('string' === type) {\n finaldestination = new Url(loc, {});\n for (key in ignore) delete finaldestination[key];\n } else if ('object' === type) {\n for (key in loc) {\n if (key in ignore) continue;\n finaldestination[key] = loc[key];\n }\n\n if (finaldestination.slashes === undefined) {\n finaldestination.slashes = slashes.test(loc.href);\n }\n }\n\n return finaldestination;\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address) {\n address = trimLeft(address);\n var match = protocolre.exec(address);\n\n return {\n protocol: match[1] ? match[1].toLowerCase() : '',\n slashes: !!match[2],\n rest: match[3]\n };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n if (relative === '') return base;\n\n var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n , i = path.length\n , last = path[i - 1]\n , unshift = false\n , up = 0;\n\n while (i--) {\n if (path[i] === '.') {\n path.splice(i, 1);\n } else if (path[i] === '..') {\n path.splice(i, 1);\n up++;\n } else if (up) {\n if (i === 0) unshift = true;\n path.splice(i, 1);\n up--;\n }\n }\n\n if (unshift) path.unshift('');\n if (last === '.' || last === '..') path.push('');\n\n return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} [location] Location defaults for relative paths.\n * @param {Boolean|Function} [parser] Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n address = trimLeft(address);\n\n if (!(this instanceof Url)) {\n return new Url(address, location, parser);\n }\n\n var relative, extracted, parse, instruction, index, key\n , instructions = rules.slice()\n , type = typeof location\n , url = this\n , i = 0;\n\n //\n // The following if statements allows this module two have compatibility with\n // 2 different API:\n //\n // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n // where the boolean indicates that the query string should also be parsed.\n //\n // 2. The `URL` interface of the browser which accepts a URL, object as\n // arguments. The supplied object will be used as default values / fall-back\n // for relative paths.\n //\n if ('object' !== type && 'string' !== type) {\n parser = location;\n location = null;\n }\n\n if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n location = lolcation(location);\n\n //\n // Extract protocol information before running the instructions.\n //\n extracted = extractProtocol(address || '');\n relative = !extracted.protocol && !extracted.slashes;\n url.slashes = extracted.slashes || relative && location.slashes;\n url.protocol = extracted.protocol || location.protocol || '';\n address = extracted.rest;\n\n //\n // When the authority component is absent the URL starts with a path\n // component.\n //\n if (!extracted.slashes) instructions[3] = [/(.*)/, 'pathname'];\n\n for (; i < instructions.length; i++) {\n instruction = instructions[i];\n\n if (typeof instruction === 'function') {\n address = instruction(address);\n continue;\n }\n\n parse = instruction[0];\n key = instruction[1];\n\n if (parse !== parse) {\n url[key] = address;\n } else if ('string' === typeof parse) {\n if (~(index = address.indexOf(parse))) {\n if ('number' === typeof instruction[2]) {\n url[key] = address.slice(0, index);\n address = address.slice(index + instruction[2]);\n } else {\n url[key] = address.slice(index);\n address = address.slice(0, index);\n }\n }\n } else if ((index = parse.exec(address))) {\n url[key] = index[1];\n address = address.slice(0, index.index);\n }\n\n url[key] = url[key] || (\n relative && instruction[3] ? location[key] || '' : ''\n );\n\n //\n // Hostname, host and protocol should be lowercased so they can be used to\n // create a proper `origin`.\n //\n if (instruction[4]) url[key] = url[key].toLowerCase();\n }\n\n //\n // Also parse the supplied query string in to an object. If we're supplied\n // with a custom parser as function use that instead of the default build-in\n // parser.\n //\n if (parser) url.query = parser(url.query);\n\n //\n // If the URL is relative, resolve the pathname against the base URL.\n //\n if (\n relative\n && location.slashes\n && url.pathname.charAt(0) !== '/'\n && (url.pathname !== '' || location.pathname !== '')\n ) {\n url.pathname = resolve(url.pathname, location.pathname);\n }\n\n //\n // We should not add port numbers if they are already the default port number\n // for a given protocol. As the host also contains the port number we're going\n // override it with the hostname which contains no port number.\n //\n if (!required(url.port, url.protocol)) {\n url.host = url.hostname;\n url.port = '';\n }\n\n //\n // Parse down the `auth` for the username and password.\n //\n url.username = url.password = '';\n if (url.auth) {\n instruction = url.auth.split(':');\n url.username = instruction[0] || '';\n url.password = instruction[1] || '';\n }\n\n url.origin = url.protocol && url.host && url.protocol !== 'file:'\n ? url.protocol +'//'+ url.host\n : 'null';\n\n //\n // The href is just the compiled result.\n //\n url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part Property we need to adjust.\n * @param {Mixed} value The newly assigned value.\n * @param {Boolean|Function} fn When setting the query, it will be the function\n * used to parse the query.\n * When setting the protocol, double slash will be\n * removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n var url = this;\n\n switch (part) {\n case 'query':\n if ('string' === typeof value && value.length) {\n value = (fn || qs.parse)(value);\n }\n\n url[part] = value;\n break;\n\n case 'port':\n url[part] = value;\n\n if (!required(value, url.protocol)) {\n url.host = url.hostname;\n url[part] = '';\n } else if (value) {\n url.host = url.hostname +':'+ value;\n }\n\n break;\n\n case 'hostname':\n url[part] = value;\n\n if (url.port) value += ':'+ url.port;\n url.host = value;\n break;\n\n case 'host':\n url[part] = value;\n\n if (/:\\d+$/.test(value)) {\n value = value.split(':');\n url.port = value.pop();\n url.hostname = value.join(':');\n } else {\n url.hostname = value;\n url.port = '';\n }\n\n break;\n\n case 'protocol':\n url.protocol = value.toLowerCase();\n url.slashes = !fn;\n break;\n\n case 'pathname':\n case 'hash':\n if (value) {\n var char = part === 'pathname' ? '/' : '#';\n url[part] = value.charAt(0) !== char ? char + value : value;\n } else {\n url[part] = value;\n }\n break;\n\n default:\n url[part] = value;\n }\n\n for (var i = 0; i < rules.length; i++) {\n var ins = rules[i];\n\n if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n }\n\n url.origin = url.protocol && url.host && url.protocol !== 'file:'\n ? url.protocol +'//'+ url.host\n : 'null';\n\n url.href = url.toString();\n\n return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n var query\n , url = this\n , protocol = url.protocol;\n\n if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n var result = protocol + (url.slashes ? '//' : '');\n\n if (url.username) {\n result += url.username;\n if (url.password) result += ':'+ url.password;\n result += '@';\n }\n\n result += url.host + url.pathname;\n\n query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n if (url.hash) result += url.hash;\n\n return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.trimLeft = trimLeft;\nUrl.qs = qs;\n\nmodule.exports = Url;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"querystringify\":59,\"requires-port\":60}]},{},[1])(1)\n});\n\n\n//# sourceMappingURL=sockjs.js.map\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc29ja2pzLWNsaWVudC9kaXN0L3NvY2tqcy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zb2NranMtY2xpZW50L2Rpc3Qvc29ja2pzLmpzPzliZTIiXSwic291cmNlc0NvbnRlbnQiOlsiLyogc29ja2pzLWNsaWVudCB2MS41LjAgfCBodHRwOi8vc29ja2pzLm9yZyB8IE1JVCBsaWNlbnNlICovXG4oZnVuY3Rpb24oZil7aWYodHlwZW9mIGV4cG9ydHM9PT1cIm9iamVjdFwiJiZ0eXBlb2YgbW9kdWxlIT09XCJ1bmRlZmluZWRcIil7bW9kdWxlLmV4cG9ydHM9ZigpfWVsc2UgaWYodHlwZW9mIGRlZmluZT09PVwiZnVuY3Rpb25cIiYmZGVmaW5lLmFtZCl7ZGVmaW5lKFtdLGYpfWVsc2V7dmFyIGc7aWYodHlwZW9mIHdpbmRvdyE9PVwidW5kZWZpbmVkXCIpe2c9d2luZG93fWVsc2UgaWYodHlwZW9mIGdsb2JhbCE9PVwidW5kZWZpbmVkXCIpe2c9Z2xvYmFsfWVsc2UgaWYodHlwZW9mIHNlbGYhPT1cInVuZGVmaW5lZFwiKXtnPXNlbGZ9ZWxzZXtnPXRoaXN9Zy5Tb2NrSlMgPSBmKCl9fSkoZnVuY3Rpb24oKXt2YXIgZGVmaW5lLG1vZHVsZSxleHBvcnRzO3JldHVybiAoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpKHsxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAoZ2xvYmFsKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIHRyYW5zcG9ydExpc3QgPSByZXF1aXJlKCcuL3RyYW5zcG9ydC1saXN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9tYWluJykodHJhbnNwb3J0TGlzdCk7XG5cbi8vIFRPRE8gY2FuJ3QgZ2V0IHJpZCBvZiB0aGlzIHVudGlsIGFsbCBzZXJ2ZXJzIGRvXG5pZiAoJ19zb2NranNfb25sb2FkJyBpbiBnbG9iYWwpIHtcbiAgc2V0VGltZW91dChnbG9iYWwuX3NvY2tqc19vbmxvYWQsIDEpO1xufVxuXG59KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcblxufSx7XCIuL21haW5cIjoxNCxcIi4vdHJhbnNwb3J0LWxpc3RcIjoxNn1dLDI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG4gICwgRXZlbnQgPSByZXF1aXJlKCcuL2V2ZW50JylcbiAgO1xuXG5mdW5jdGlvbiBDbG9zZUV2ZW50KCkge1xuICBFdmVudC5jYWxsKHRoaXMpO1xuICB0aGlzLmluaXRFdmVudCgnY2xvc2UnLCBmYWxzZSwgZmFsc2UpO1xuICB0aGlzLndhc0NsZWFuID0gZmFsc2U7XG4gIHRoaXMuY29kZSA9IDA7XG4gIHRoaXMucmVhc29uID0gJyc7XG59XG5cbmluaGVyaXRzKENsb3NlRXZlbnQsIEV2ZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBDbG9zZUV2ZW50O1xuXG59LHtcIi4vZXZlbnRcIjo0LFwiaW5oZXJpdHNcIjo1N31dLDM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG4gICwgRXZlbnRUYXJnZXQgPSByZXF1aXJlKCcuL2V2ZW50dGFyZ2V0JylcbiAgO1xuXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIEV2ZW50VGFyZ2V0LmNhbGwodGhpcyk7XG59XG5cbmluaGVyaXRzKEV2ZW50RW1pdHRlciwgRXZlbnRUYXJnZXQpO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgaWYgKHR5cGUpIHtcbiAgICBkZWxldGUgdGhpcy5fbGlzdGVuZXJzW3R5cGVdO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX2xpc3RlbmVycyA9IHt9O1xuICB9XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgICAsIGZpcmVkID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gZygpIHtcbiAgICBzZWxmLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGcpO1xuXG4gICAgaWYgKCFmaXJlZCkge1xuICAgICAgZmlyZWQgPSB0cnVlO1xuICAgICAgbGlzdGVuZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH1cblxuICB0aGlzLm9uKHR5cGUsIGcpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciB0eXBlID0gYXJndW1lbnRzWzBdO1xuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzW3R5cGVdO1xuICBpZiAoIWxpc3RlbmVycykge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBlcXVpdmFsZW50IG9mIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gIHZhciBsID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobCAtIDEpO1xuICBmb3IgKHZhciBhaSA9IDE7IGFpIDwgbDsgYWkrKykge1xuICAgIGFyZ3NbYWkgLSAxXSA9IGFyZ3VtZW50c1thaV07XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICBsaXN0ZW5lcnNbaV0uYXBwbHkodGhpcywgYXJncyk7XG4gIH1cbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gRXZlbnRUYXJnZXQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gRXZlbnRUYXJnZXQucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXI7XG5cbm1vZHVsZS5leHBvcnRzLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxufSx7XCIuL2V2ZW50dGFyZ2V0XCI6NSxcImluaGVyaXRzXCI6NTd9XSw0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gRXZlbnQoZXZlbnRUeXBlKSB7XG4gIHRoaXMudHlwZSA9IGV2ZW50VHlwZTtcbn1cblxuRXZlbnQucHJvdG90eXBlLmluaXRFdmVudCA9IGZ1bmN0aW9uKGV2ZW50VHlwZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxlKSB7XG4gIHRoaXMudHlwZSA9IGV2ZW50VHlwZTtcbiAgdGhpcy5idWJibGVzID0gY2FuQnViYmxlO1xuICB0aGlzLmNhbmNlbGFibGUgPSBjYW5jZWxhYmxlO1xuICB0aGlzLnRpbWVTdGFtcCA9ICtuZXcgRGF0ZSgpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50LnByb3RvdHlwZS5zdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbigpIHt9O1xuRXZlbnQucHJvdG90eXBlLnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oKSB7fTtcblxuRXZlbnQuQ0FQVFVSSU5HX1BIQVNFID0gMTtcbkV2ZW50LkFUX1RBUkdFVCA9IDI7XG5FdmVudC5CVUJCTElOR19QSEFTRSA9IDM7XG5cbm1vZHVsZS5leHBvcnRzID0gRXZlbnQ7XG5cbn0se31dLDU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG4vKiBTaW1wbGlmaWVkIGltcGxlbWVudGF0aW9uIG9mIERPTTIgRXZlbnRUYXJnZXQuXG4gKiAgIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUV2ZW50cy9ldmVudHMuaHRtbCNFdmVudHMtRXZlbnRUYXJnZXRcbiAqL1xuXG5mdW5jdGlvbiBFdmVudFRhcmdldCgpIHtcbiAgdGhpcy5fbGlzdGVuZXJzID0ge307XG59XG5cbkV2ZW50VGFyZ2V0LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24oZXZlbnRUeXBlLCBsaXN0ZW5lcikge1xuICBpZiAoIShldmVudFR5cGUgaW4gdGhpcy5fbGlzdGVuZXJzKSkge1xuICAgIHRoaXMuX2xpc3RlbmVyc1tldmVudFR5cGVdID0gW107XG4gIH1cbiAgdmFyIGFyciA9IHRoaXMuX2xpc3RlbmVyc1tldmVudFR5cGVdO1xuICAvLyAjNFxuICBpZiAoYXJyLmluZGV4T2YobGlzdGVuZXIpID09PSAtMSkge1xuICAgIC8vIE1ha2UgYSBjb3B5IHNvIGFzIG5vdCB0byBpbnRlcmZlcmUgd2l0aCBhIGN1cnJlbnQgZGlzcGF0Y2hFdmVudC5cbiAgICBhcnIgPSBhcnIuY29uY2F0KFtsaXN0ZW5lcl0pO1xuICB9XG4gIHRoaXMuX2xpc3RlbmVyc1tldmVudFR5cGVdID0gYXJyO1xufTtcblxuRXZlbnRUYXJnZXQucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudFR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBhcnIgPSB0aGlzLl9saXN0ZW5lcnNbZXZlbnRUeXBlXTtcbiAgaWYgKCFhcnIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGlkeCA9IGFyci5pbmRleE9mKGxpc3RlbmVyKTtcbiAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICBpZiAoYXJyLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIE1ha2UgYSBjb3B5IHNvIGFzIG5vdCB0byBpbnRlcmZlcmUgd2l0aCBhIGN1cnJlbnQgZGlzcGF0Y2hFdmVudC5cbiAgICAgIHRoaXMuX2xpc3RlbmVyc1tldmVudFR5cGVdID0gYXJyLnNsaWNlKDAsIGlkeCkuY29uY2F0KGFyci5zbGljZShpZHggKyAxKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0aGlzLl9saXN0ZW5lcnNbZXZlbnRUeXBlXTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG59O1xuXG5FdmVudFRhcmdldC5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgZXZlbnQgPSBhcmd1bWVudHNbMF07XG4gIHZhciB0ID0gZXZlbnQudHlwZTtcbiAgLy8gZXF1aXZhbGVudCBvZiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBbZXZlbnRdIDogQXJyYXkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgLy8gVE9ETzogVGhpcyBkb2Vzbid0IG1hdGNoIHRoZSByZWFsIGJlaGF2aW9yOyBwZXIgc3BlYywgb25mb28gZ2V0XG4gIC8vIHRoZWlyIHBsYWNlIGluIGxpbmUgZnJvbSB0aGUgL2ZpcnN0LyB0aW1lIHRoZXkncmUgc2V0IGZyb21cbiAgLy8gbm9uLW51bGwuIEFsdGhvdWdoIFdlYktpdCBidW1wcyBpdCB0byB0aGUgZW5kIGV2ZXJ5IHRpbWUgaXQnc1xuICAvLyBzZXQuXG4gIGlmICh0aGlzWydvbicgKyB0XSkge1xuICAgIHRoaXNbJ29uJyArIHRdLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICB9XG4gIGlmICh0IGluIHRoaXMuX2xpc3RlbmVycykge1xuICAgIC8vIEdyYWIgYSByZWZlcmVuY2UgdG8gdGhlIGxpc3RlbmVycyBsaXN0LiByZW1vdmVFdmVudExpc3RlbmVyIG1heSBhbHRlciB0aGUgbGlzdC5cbiAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzW3RdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsaXN0ZW5lcnNbaV0uYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50VGFyZ2V0O1xuXG59LHt9XSw2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuICAsIEV2ZW50ID0gcmVxdWlyZSgnLi9ldmVudCcpXG4gIDtcblxuZnVuY3Rpb24gVHJhbnNwb3J0TWVzc2FnZUV2ZW50KGRhdGEpIHtcbiAgRXZlbnQuY2FsbCh0aGlzKTtcbiAgdGhpcy5pbml0RXZlbnQoJ21lc3NhZ2UnLCBmYWxzZSwgZmFsc2UpO1xuICB0aGlzLmRhdGEgPSBkYXRhO1xufVxuXG5pbmhlcml0cyhUcmFuc3BvcnRNZXNzYWdlRXZlbnQsIEV2ZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc3BvcnRNZXNzYWdlRXZlbnQ7XG5cbn0se1wiLi9ldmVudFwiOjQsXCJpbmhlcml0c1wiOjU3fV0sNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBKU09OMyA9IHJlcXVpcmUoJ2pzb24zJylcbiAgLCBpZnJhbWVVdGlscyA9IHJlcXVpcmUoJy4vdXRpbHMvaWZyYW1lJylcbiAgO1xuXG5mdW5jdGlvbiBGYWNhZGVKUyh0cmFuc3BvcnQpIHtcbiAgdGhpcy5fdHJhbnNwb3J0ID0gdHJhbnNwb3J0O1xuICB0cmFuc3BvcnQub24oJ21lc3NhZ2UnLCB0aGlzLl90cmFuc3BvcnRNZXNzYWdlLmJpbmQodGhpcykpO1xuICB0cmFuc3BvcnQub24oJ2Nsb3NlJywgdGhpcy5fdHJhbnNwb3J0Q2xvc2UuYmluZCh0aGlzKSk7XG59XG5cbkZhY2FkZUpTLnByb3RvdHlwZS5fdHJhbnNwb3J0Q2xvc2UgPSBmdW5jdGlvbihjb2RlLCByZWFzb24pIHtcbiAgaWZyYW1lVXRpbHMucG9zdE1lc3NhZ2UoJ2MnLCBKU09OMy5zdHJpbmdpZnkoW2NvZGUsIHJlYXNvbl0pKTtcbn07XG5GYWNhZGVKUy5wcm90b3R5cGUuX3RyYW5zcG9ydE1lc3NhZ2UgPSBmdW5jdGlvbihmcmFtZSkge1xuICBpZnJhbWVVdGlscy5wb3N0TWVzc2FnZSgndCcsIGZyYW1lKTtcbn07XG5GYWNhZGVKUy5wcm90b3R5cGUuX3NlbmQgPSBmdW5jdGlvbihkYXRhKSB7XG4gIHRoaXMuX3RyYW5zcG9ydC5zZW5kKGRhdGEpO1xufTtcbkZhY2FkZUpTLnByb3RvdHlwZS5fY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fdHJhbnNwb3J0LmNsb3NlKCk7XG4gIHRoaXMuX3RyYW5zcG9ydC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRmFjYWRlSlM7XG5cbn0se1wiLi91dGlscy9pZnJhbWVcIjo0NyxcImpzb24zXCI6NTh9XSw4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAocHJvY2Vzcyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciB1cmxVdGlscyA9IHJlcXVpcmUoJy4vdXRpbHMvdXJsJylcbiAgLCBldmVudFV0aWxzID0gcmVxdWlyZSgnLi91dGlscy9ldmVudCcpXG4gICwgSlNPTjMgPSByZXF1aXJlKCdqc29uMycpXG4gICwgRmFjYWRlSlMgPSByZXF1aXJlKCcuL2ZhY2FkZScpXG4gICwgSW5mb0lmcmFtZVJlY2VpdmVyID0gcmVxdWlyZSgnLi9pbmZvLWlmcmFtZS1yZWNlaXZlcicpXG4gICwgaWZyYW1lVXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzL2lmcmFtZScpXG4gICwgbG9jID0gcmVxdWlyZSgnLi9sb2NhdGlvbicpXG4gIDtcblxudmFyIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc29ja2pzLWNsaWVudDppZnJhbWUtYm9vdHN0cmFwJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oU29ja0pTLCBhdmFpbGFibGVUcmFuc3BvcnRzKSB7XG4gIHZhciB0cmFuc3BvcnRNYXAgPSB7fTtcbiAgYXZhaWxhYmxlVHJhbnNwb3J0cy5mb3JFYWNoKGZ1bmN0aW9uKGF0KSB7XG4gICAgaWYgKGF0LmZhY2FkZVRyYW5zcG9ydCkge1xuICAgICAgdHJhbnNwb3J0TWFwW2F0LmZhY2FkZVRyYW5zcG9ydC50cmFuc3BvcnROYW1lXSA9IGF0LmZhY2FkZVRyYW5zcG9ydDtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGhhcmQtY29kZWQgZm9yIHRoZSBpbmZvIGlmcmFtZVxuICAvLyBUT0RPIHNlZSBpZiB3ZSBjYW4gbWFrZSB0aGlzIG1vcmUgZHluYW1pY1xuICB0cmFuc3BvcnRNYXBbSW5mb0lmcmFtZVJlY2VpdmVyLnRyYW5zcG9ydE5hbWVdID0gSW5mb0lmcmFtZVJlY2VpdmVyO1xuICB2YXIgcGFyZW50T3JpZ2luO1xuXG4gIC8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuICBTb2NrSlMuYm9vdHN0cmFwX2lmcmFtZSA9IGZ1bmN0aW9uKCkge1xuICAgIC8qIGVzbGludC1lbmFibGUgY2FtZWxjYXNlICovXG4gICAgdmFyIGZhY2FkZTtcbiAgICBpZnJhbWVVdGlscy5jdXJyZW50V2luZG93SWQgPSBsb2MuaGFzaC5zbGljZSgxKTtcbiAgICB2YXIgb25NZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgaWYgKGUuc291cmNlICE9PSBwYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBwYXJlbnRPcmlnaW4gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHBhcmVudE9yaWdpbiA9IGUub3JpZ2luO1xuICAgICAgfVxuICAgICAgaWYgKGUub3JpZ2luICE9PSBwYXJlbnRPcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgaWZyYW1lTWVzc2FnZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmcmFtZU1lc3NhZ2UgPSBKU09OMy5wYXJzZShlLmRhdGEpO1xuICAgICAgfSBjYXRjaCAoaWdub3JlZCkge1xuICAgICAgICBkZWJ1ZygnYmFkIGpzb24nLCBlLmRhdGEpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpZnJhbWVNZXNzYWdlLndpbmRvd0lkICE9PSBpZnJhbWVVdGlscy5jdXJyZW50V2luZG93SWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChpZnJhbWVNZXNzYWdlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3MnOlxuICAgICAgICB2YXIgcDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwID0gSlNPTjMucGFyc2UoaWZyYW1lTWVzc2FnZS5kYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoaWdub3JlZCkge1xuICAgICAgICAgIGRlYnVnKCdiYWQganNvbicsIGlmcmFtZU1lc3NhZ2UuZGF0YSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHZlcnNpb24gPSBwWzBdO1xuICAgICAgICB2YXIgdHJhbnNwb3J0ID0gcFsxXTtcbiAgICAgICAgdmFyIHRyYW5zVXJsID0gcFsyXTtcbiAgICAgICAgdmFyIGJhc2VVcmwgPSBwWzNdO1xuICAgICAgICBkZWJ1Zyh2ZXJzaW9uLCB0cmFuc3BvcnQsIHRyYW5zVXJsLCBiYXNlVXJsKTtcbiAgICAgICAgLy8gY2hhbmdlIHRoaXMgdG8gc2VtdmVyIGxvZ2ljXG4gICAgICAgIGlmICh2ZXJzaW9uICE9PSBTb2NrSlMudmVyc2lvbikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5jb21wYXRpYmxlIFNvY2tKUyEgTWFpbiBzaXRlIHVzZXM6JyArXG4gICAgICAgICAgICAgICAgICAgICcgXCInICsgdmVyc2lvbiArICdcIiwgdGhlIGlmcmFtZTonICtcbiAgICAgICAgICAgICAgICAgICAgJyBcIicgKyBTb2NrSlMudmVyc2lvbiArICdcIi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdXJsVXRpbHMuaXNPcmlnaW5FcXVhbCh0cmFuc1VybCwgbG9jLmhyZWYpIHx8XG4gICAgICAgICAgICAhdXJsVXRpbHMuaXNPcmlnaW5FcXVhbChiYXNlVXJsLCBsb2MuaHJlZikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgY29ubmVjdCB0byBkaWZmZXJlbnQgZG9tYWluIGZyb20gd2l0aGluIGFuICcgK1xuICAgICAgICAgICAgICAgICAgICAnaWZyYW1lLiAoJyArIGxvYy5ocmVmICsgJywgJyArIHRyYW5zVXJsICsgJywgJyArIGJhc2VVcmwgKyAnKScpO1xuICAgICAgICB9XG4gICAgICAgIGZhY2FkZSA9IG5ldyBGYWNhZGVKUyhuZXcgdHJhbnNwb3J0TWFwW3RyYW5zcG9ydF0odHJhbnNVcmwsIGJhc2VVcmwpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtJzpcbiAgICAgICAgZmFjYWRlLl9zZW5kKGlmcmFtZU1lc3NhZ2UuZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYyc6XG4gICAgICAgIGlmIChmYWNhZGUpIHtcbiAgICAgICAgICBmYWNhZGUuX2Nsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZmFjYWRlID0gbnVsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGV2ZW50VXRpbHMuYXR0YWNoRXZlbnQoJ21lc3NhZ2UnLCBvbk1lc3NhZ2UpO1xuXG4gICAgLy8gU3RhcnRcbiAgICBpZnJhbWVVdGlscy5wb3N0TWVzc2FnZSgncycpO1xuICB9O1xufTtcblxufSkuY2FsbCh0aGlzLHsgZW52OiB7fSB9KVxuXG59LHtcIi4vZmFjYWRlXCI6NyxcIi4vaW5mby1pZnJhbWUtcmVjZWl2ZXJcIjoxMCxcIi4vbG9jYXRpb25cIjoxMyxcIi4vdXRpbHMvZXZlbnRcIjo0NixcIi4vdXRpbHMvaWZyYW1lXCI6NDcsXCIuL3V0aWxzL3VybFwiOjUyLFwiZGVidWdcIjo1NSxcImpzb24zXCI6NTh9XSw5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAocHJvY2Vzcyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXJcbiAgLCBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbiAgLCBKU09OMyA9IHJlcXVpcmUoJ2pzb24zJylcbiAgLCBvYmplY3RVdGlscyA9IHJlcXVpcmUoJy4vdXRpbHMvb2JqZWN0JylcbiAgO1xuXG52YXIgZGVidWcgPSBmdW5jdGlvbigpIHt9O1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzb2NranMtY2xpZW50OmluZm8tYWpheCcpO1xufVxuXG5mdW5jdGlvbiBJbmZvQWpheCh1cmwsIEFqYXhPYmplY3QpIHtcbiAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgdDAgPSArbmV3IERhdGUoKTtcbiAgdGhpcy54byA9IG5ldyBBamF4T2JqZWN0KCdHRVQnLCB1cmwpO1xuXG4gIHRoaXMueG8ub25jZSgnZmluaXNoJywgZnVuY3Rpb24oc3RhdHVzLCB0ZXh0KSB7XG4gICAgdmFyIGluZm8sIHJ0dDtcbiAgICBpZiAoc3RhdHVzID09PSAyMDApIHtcbiAgICAgIHJ0dCA9ICgrbmV3IERhdGUoKSkgLSB0MDtcbiAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaW5mbyA9IEpTT04zLnBhcnNlKHRleHQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgZGVidWcoJ2JhZCBqc29uJywgdGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFvYmplY3RVdGlscy5pc09iamVjdChpbmZvKSkge1xuICAgICAgICBpbmZvID0ge307XG4gICAgICB9XG4gICAgfVxuICAgIHNlbGYuZW1pdCgnZmluaXNoJywgaW5mbywgcnR0KTtcbiAgICBzZWxmLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICB9KTtcbn1cblxuaW5oZXJpdHMoSW5mb0FqYXgsIEV2ZW50RW1pdHRlcik7XG5cbkluZm9BamF4LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICB0aGlzLnhvLmNsb3NlKCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEluZm9BamF4O1xuXG59KS5jYWxsKHRoaXMseyBlbnY6IHt9IH0pXG5cbn0se1wiLi91dGlscy9vYmplY3RcIjo0OSxcImRlYnVnXCI6NTUsXCJldmVudHNcIjozLFwiaW5oZXJpdHNcIjo1NyxcImpzb24zXCI6NTh9XSwxMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbiAgLCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXJcbiAgLCBKU09OMyA9IHJlcXVpcmUoJ2pzb24zJylcbiAgLCBYSFJMb2NhbE9iamVjdCA9IHJlcXVpcmUoJy4vdHJhbnNwb3J0L3NlbmRlci94aHItbG9jYWwnKVxuICAsIEluZm9BamF4ID0gcmVxdWlyZSgnLi9pbmZvLWFqYXgnKVxuICA7XG5cbmZ1bmN0aW9uIEluZm9SZWNlaXZlcklmcmFtZSh0cmFuc1VybCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gIHRoaXMuaXIgPSBuZXcgSW5mb0FqYXgodHJhbnNVcmwsIFhIUkxvY2FsT2JqZWN0KTtcbiAgdGhpcy5pci5vbmNlKCdmaW5pc2gnLCBmdW5jdGlvbihpbmZvLCBydHQpIHtcbiAgICBzZWxmLmlyID0gbnVsbDtcbiAgICBzZWxmLmVtaXQoJ21lc3NhZ2UnLCBKU09OMy5zdHJpbmdpZnkoW2luZm8sIHJ0dF0pKTtcbiAgfSk7XG59XG5cbmluaGVyaXRzKEluZm9SZWNlaXZlcklmcmFtZSwgRXZlbnRFbWl0dGVyKTtcblxuSW5mb1JlY2VpdmVySWZyYW1lLnRyYW5zcG9ydE5hbWUgPSAnaWZyYW1lLWluZm8tcmVjZWl2ZXInO1xuXG5JbmZvUmVjZWl2ZXJJZnJhbWUucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLmlyKSB7XG4gICAgdGhpcy5pci5jbG9zZSgpO1xuICAgIHRoaXMuaXIgPSBudWxsO1xuICB9XG4gIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEluZm9SZWNlaXZlcklmcmFtZTtcblxufSx7XCIuL2luZm8tYWpheFwiOjksXCIuL3RyYW5zcG9ydC9zZW5kZXIveGhyLWxvY2FsXCI6MzcsXCJldmVudHNcIjozLFwiaW5oZXJpdHNcIjo1NyxcImpzb24zXCI6NTh9XSwxMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKHByb2Nlc3MsZ2xvYmFsKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlclxuICAsIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuICAsIEpTT04zID0gcmVxdWlyZSgnanNvbjMnKVxuICAsIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscy9ldmVudCcpXG4gICwgSWZyYW1lVHJhbnNwb3J0ID0gcmVxdWlyZSgnLi90cmFuc3BvcnQvaWZyYW1lJylcbiAgLCBJbmZvUmVjZWl2ZXJJZnJhbWUgPSByZXF1aXJlKCcuL2luZm8taWZyYW1lLXJlY2VpdmVyJylcbiAgO1xuXG52YXIgZGVidWcgPSBmdW5jdGlvbigpIHt9O1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzb2NranMtY2xpZW50OmluZm8taWZyYW1lJyk7XG59XG5cbmZ1bmN0aW9uIEluZm9JZnJhbWUoYmFzZVVybCwgdXJsKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgdmFyIGdvID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGlmciA9IHNlbGYuaWZyID0gbmV3IElmcmFtZVRyYW5zcG9ydChJbmZvUmVjZWl2ZXJJZnJhbWUudHJhbnNwb3J0TmFtZSwgdXJsLCBiYXNlVXJsKTtcblxuICAgIGlmci5vbmNlKCdtZXNzYWdlJywgZnVuY3Rpb24obXNnKSB7XG4gICAgICBpZiAobXNnKSB7XG4gICAgICAgIHZhciBkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGQgPSBKU09OMy5wYXJzZShtc2cpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgZGVidWcoJ2JhZCBqc29uJywgbXNnKTtcbiAgICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpO1xuICAgICAgICAgIHNlbGYuY2xvc2UoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaW5mbyA9IGRbMF0sIHJ0dCA9IGRbMV07XG4gICAgICAgIHNlbGYuZW1pdCgnZmluaXNoJywgaW5mbywgcnR0KTtcbiAgICAgIH1cbiAgICAgIHNlbGYuY2xvc2UoKTtcbiAgICB9KTtcblxuICAgIGlmci5vbmNlKCdjbG9zZScsIGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5lbWl0KCdmaW5pc2gnKTtcbiAgICAgIHNlbGYuY2xvc2UoKTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBUT0RPIHRoaXMgc2VlbXMgdGhlIHNhbWUgYXMgdGhlICduZWVkQm9keScgZnJvbSB0cmFuc3BvcnRzXG4gIGlmICghZ2xvYmFsLmRvY3VtZW50LmJvZHkpIHtcbiAgICB1dGlscy5hdHRhY2hFdmVudCgnbG9hZCcsIGdvKTtcbiAgfSBlbHNlIHtcbiAgICBnbygpO1xuICB9XG59XG5cbmluaGVyaXRzKEluZm9JZnJhbWUsIEV2ZW50RW1pdHRlcik7XG5cbkluZm9JZnJhbWUuZW5hYmxlZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gSWZyYW1lVHJhbnNwb3J0LmVuYWJsZWQoKTtcbn07XG5cbkluZm9JZnJhbWUucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLmlmcikge1xuICAgIHRoaXMuaWZyLmNsb3NlKCk7XG4gIH1cbiAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgdGhpcy5pZnIgPSBudWxsO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbmZvSWZyYW1lO1xuXG59KS5jYWxsKHRoaXMseyBlbnY6IHt9IH0sdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcblxufSx7XCIuL2luZm8taWZyYW1lLXJlY2VpdmVyXCI6MTAsXCIuL3RyYW5zcG9ydC9pZnJhbWVcIjoyMixcIi4vdXRpbHMvZXZlbnRcIjo0NixcImRlYnVnXCI6NTUsXCJldmVudHNcIjozLFwiaW5oZXJpdHNcIjo1NyxcImpzb24zXCI6NTh9XSwxMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKHByb2Nlc3Mpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyXG4gICwgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG4gICwgdXJsVXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzL3VybCcpXG4gICwgWERSID0gcmVxdWlyZSgnLi90cmFuc3BvcnQvc2VuZGVyL3hkcicpXG4gICwgWEhSQ29ycyA9IHJlcXVpcmUoJy4vdHJhbnNwb3J0L3NlbmRlci94aHItY29ycycpXG4gICwgWEhSTG9jYWwgPSByZXF1aXJlKCcuL3RyYW5zcG9ydC9zZW5kZXIveGhyLWxvY2FsJylcbiAgLCBYSFJGYWtlID0gcmVxdWlyZSgnLi90cmFuc3BvcnQvc2VuZGVyL3hoci1mYWtlJylcbiAgLCBJbmZvSWZyYW1lID0gcmVxdWlyZSgnLi9pbmZvLWlmcmFtZScpXG4gICwgSW5mb0FqYXggPSByZXF1aXJlKCcuL2luZm8tYWpheCcpXG4gIDtcblxudmFyIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc29ja2pzLWNsaWVudDppbmZvLXJlY2VpdmVyJyk7XG59XG5cbmZ1bmN0aW9uIEluZm9SZWNlaXZlcihiYXNlVXJsLCB1cmxJbmZvKSB7XG4gIGRlYnVnKGJhc2VVcmwpO1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgc2VsZi5kb1hocihiYXNlVXJsLCB1cmxJbmZvKTtcbiAgfSwgMCk7XG59XG5cbmluaGVyaXRzKEluZm9SZWNlaXZlciwgRXZlbnRFbWl0dGVyKTtcblxuLy8gVE9ETyB0aGlzIGlzIGN1cnJlbnRseSBpZ25vcmluZyB0aGUgbGlzdCBvZiBhdmFpbGFibGUgdHJhbnNwb3J0cyBhbmQgdGhlIHdoaXRlbGlzdFxuXG5JbmZvUmVjZWl2ZXIuX2dldFJlY2VpdmVyID0gZnVuY3Rpb24oYmFzZVVybCwgdXJsLCB1cmxJbmZvKSB7XG4gIC8vIGRldGVybWluZSBtZXRob2Qgb2YgQ09SUyBzdXBwb3J0IChpZiBuZWVkZWQpXG4gIGlmICh1cmxJbmZvLnNhbWVPcmlnaW4pIHtcbiAgICByZXR1cm4gbmV3IEluZm9BamF4KHVybCwgWEhSTG9jYWwpO1xuICB9XG4gIGlmIChYSFJDb3JzLmVuYWJsZWQpIHtcbiAgICByZXR1cm4gbmV3IEluZm9BamF4KHVybCwgWEhSQ29ycyk7XG4gIH1cbiAgaWYgKFhEUi5lbmFibGVkICYmIHVybEluZm8uc2FtZVNjaGVtZSkge1xuICAgIHJldHVybiBuZXcgSW5mb0FqYXgodXJsLCBYRFIpO1xuICB9XG4gIGlmIChJbmZvSWZyYW1lLmVuYWJsZWQoKSkge1xuICAgIHJldHVybiBuZXcgSW5mb0lmcmFtZShiYXNlVXJsLCB1cmwpO1xuICB9XG4gIHJldHVybiBuZXcgSW5mb0FqYXgodXJsLCBYSFJGYWtlKTtcbn07XG5cbkluZm9SZWNlaXZlci5wcm90b3R5cGUuZG9YaHIgPSBmdW5jdGlvbihiYXNlVXJsLCB1cmxJbmZvKSB7XG4gIHZhciBzZWxmID0gdGhpc1xuICAgICwgdXJsID0gdXJsVXRpbHMuYWRkUGF0aChiYXNlVXJsLCAnL2luZm8nKVxuICAgIDtcbiAgZGVidWcoJ2RvWGhyJywgdXJsKTtcblxuICB0aGlzLnhvID0gSW5mb1JlY2VpdmVyLl9nZXRSZWNlaXZlcihiYXNlVXJsLCB1cmwsIHVybEluZm8pO1xuXG4gIHRoaXMudGltZW91dFJlZiA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgZGVidWcoJ3RpbWVvdXQnKTtcbiAgICBzZWxmLl9jbGVhbnVwKGZhbHNlKTtcbiAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpO1xuICB9LCBJbmZvUmVjZWl2ZXIudGltZW91dCk7XG5cbiAgdGhpcy54by5vbmNlKCdmaW5pc2gnLCBmdW5jdGlvbihpbmZvLCBydHQpIHtcbiAgICBkZWJ1ZygnZmluaXNoJywgaW5mbywgcnR0KTtcbiAgICBzZWxmLl9jbGVhbnVwKHRydWUpO1xuICAgIHNlbGYuZW1pdCgnZmluaXNoJywgaW5mbywgcnR0KTtcbiAgfSk7XG59O1xuXG5JbmZvUmVjZWl2ZXIucHJvdG90eXBlLl9jbGVhbnVwID0gZnVuY3Rpb24od2FzQ2xlYW4pIHtcbiAgZGVidWcoJ19jbGVhbnVwJyk7XG4gIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRSZWYpO1xuICB0aGlzLnRpbWVvdXRSZWYgPSBudWxsO1xuICBpZiAoIXdhc0NsZWFuICYmIHRoaXMueG8pIHtcbiAgICB0aGlzLnhvLmNsb3NlKCk7XG4gIH1cbiAgdGhpcy54byA9IG51bGw7XG59O1xuXG5JbmZvUmVjZWl2ZXIucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIGRlYnVnKCdjbG9zZScpO1xuICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICB0aGlzLl9jbGVhbnVwKGZhbHNlKTtcbn07XG5cbkluZm9SZWNlaXZlci50aW1lb3V0ID0gODAwMDtcblxubW9kdWxlLmV4cG9ydHMgPSBJbmZvUmVjZWl2ZXI7XG5cbn0pLmNhbGwodGhpcyx7IGVudjoge30gfSlcblxufSx7XCIuL2luZm8tYWpheFwiOjksXCIuL2luZm8taWZyYW1lXCI6MTEsXCIuL3RyYW5zcG9ydC9zZW5kZXIveGRyXCI6MzQsXCIuL3RyYW5zcG9ydC9zZW5kZXIveGhyLWNvcnNcIjozNSxcIi4vdHJhbnNwb3J0L3NlbmRlci94aHItZmFrZVwiOjM2LFwiLi90cmFuc3BvcnQvc2VuZGVyL3hoci1sb2NhbFwiOjM3LFwiLi91dGlscy91cmxcIjo1MixcImRlYnVnXCI6NTUsXCJldmVudHNcIjozLFwiaW5oZXJpdHNcIjo1N31dLDEzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAoZ2xvYmFsKXtcbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwubG9jYXRpb24gfHwge1xuICBvcmlnaW46ICdodHRwOi8vbG9jYWxob3N0OjgwJ1xuLCBwcm90b2NvbDogJ2h0dHA6J1xuLCBob3N0OiAnbG9jYWxob3N0J1xuLCBwb3J0OiA4MFxuLCBocmVmOiAnaHR0cDovL2xvY2FsaG9zdC8nXG4sIGhhc2g6ICcnXG59O1xuXG59KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcblxufSx7fV0sMTQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChwcm9jZXNzLGdsb2JhbCl7XG4ndXNlIHN0cmljdCc7XG5cbnJlcXVpcmUoJy4vc2hpbXMnKTtcblxudmFyIFVSTCA9IHJlcXVpcmUoJ3VybC1wYXJzZScpXG4gICwgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG4gICwgSlNPTjMgPSByZXF1aXJlKCdqc29uMycpXG4gICwgcmFuZG9tID0gcmVxdWlyZSgnLi91dGlscy9yYW5kb20nKVxuICAsIGVzY2FwZSA9IHJlcXVpcmUoJy4vdXRpbHMvZXNjYXBlJylcbiAgLCB1cmxVdGlscyA9IHJlcXVpcmUoJy4vdXRpbHMvdXJsJylcbiAgLCBldmVudFV0aWxzID0gcmVxdWlyZSgnLi91dGlscy9ldmVudCcpXG4gICwgdHJhbnNwb3J0ID0gcmVxdWlyZSgnLi91dGlscy90cmFuc3BvcnQnKVxuICAsIG9iamVjdFV0aWxzID0gcmVxdWlyZSgnLi91dGlscy9vYmplY3QnKVxuICAsIGJyb3dzZXIgPSByZXF1aXJlKCcuL3V0aWxzL2Jyb3dzZXInKVxuICAsIGxvZyA9IHJlcXVpcmUoJy4vdXRpbHMvbG9nJylcbiAgLCBFdmVudCA9IHJlcXVpcmUoJy4vZXZlbnQvZXZlbnQnKVxuICAsIEV2ZW50VGFyZ2V0ID0gcmVxdWlyZSgnLi9ldmVudC9ldmVudHRhcmdldCcpXG4gICwgbG9jID0gcmVxdWlyZSgnLi9sb2NhdGlvbicpXG4gICwgQ2xvc2VFdmVudCA9IHJlcXVpcmUoJy4vZXZlbnQvY2xvc2UnKVxuICAsIFRyYW5zcG9ydE1lc3NhZ2VFdmVudCA9IHJlcXVpcmUoJy4vZXZlbnQvdHJhbnMtbWVzc2FnZScpXG4gICwgSW5mb1JlY2VpdmVyID0gcmVxdWlyZSgnLi9pbmZvLXJlY2VpdmVyJylcbiAgO1xuXG52YXIgZGVidWcgPSBmdW5jdGlvbigpIHt9O1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzb2NranMtY2xpZW50Om1haW4nKTtcbn1cblxudmFyIHRyYW5zcG9ydHM7XG5cbi8vIGZvbGxvdyBjb25zdHJ1Y3RvciBzdGVwcyBkZWZpbmVkIGF0IGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3dlYnNvY2tldHMvI3RoZS13ZWJzb2NrZXQtaW50ZXJmYWNlXG5mdW5jdGlvbiBTb2NrSlModXJsLCBwcm90b2NvbHMsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNvY2tKUykpIHtcbiAgICByZXR1cm4gbmV3IFNvY2tKUyh1cmwsIHByb3RvY29scywgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1NvY2tKUzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgMCBwcmVzZW50XCIpO1xuICB9XG4gIEV2ZW50VGFyZ2V0LmNhbGwodGhpcyk7XG5cbiAgdGhpcy5yZWFkeVN0YXRlID0gU29ja0pTLkNPTk5FQ1RJTkc7XG4gIHRoaXMuZXh0ZW5zaW9ucyA9ICcnO1xuICB0aGlzLnByb3RvY29sID0gJyc7XG5cbiAgLy8gbm9uLXN0YW5kYXJkIGV4dGVuc2lvblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgaWYgKG9wdGlvbnMucHJvdG9jb2xzX3doaXRlbGlzdCkge1xuICAgIGxvZy53YXJuKFwiJ3Byb3RvY29sc193aGl0ZWxpc3QnIGlzIERFUFJFQ0FURUQuIFVzZSAndHJhbnNwb3J0cycgaW5zdGVhZC5cIik7XG4gIH1cbiAgdGhpcy5fdHJhbnNwb3J0c1doaXRlbGlzdCA9IG9wdGlvbnMudHJhbnNwb3J0cztcbiAgdGhpcy5fdHJhbnNwb3J0T3B0aW9ucyA9IG9wdGlvbnMudHJhbnNwb3J0T3B0aW9ucyB8fCB7fTtcbiAgdGhpcy5fdGltZW91dCA9IG9wdGlvbnMudGltZW91dCB8fCAwO1xuXG4gIHZhciBzZXNzaW9uSWQgPSBvcHRpb25zLnNlc3Npb25JZCB8fCA4O1xuICBpZiAodHlwZW9mIHNlc3Npb25JZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMuX2dlbmVyYXRlU2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBzZXNzaW9uSWQgPT09ICdudW1iZXInKSB7XG4gICAgdGhpcy5fZ2VuZXJhdGVTZXNzaW9uSWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiByYW5kb20uc3RyaW5nKHNlc3Npb25JZCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJZiBzZXNzaW9uSWQgaXMgdXNlZCBpbiB0aGUgb3B0aW9ucywgaXQgbmVlZHMgdG8gYmUgYSBudW1iZXIgb3IgYSBmdW5jdGlvbi4nKTtcbiAgfVxuXG4gIHRoaXMuX3NlcnZlciA9IG9wdGlvbnMuc2VydmVyIHx8IHJhbmRvbS5udW1iZXJTdHJpbmcoMTAwMCk7XG5cbiAgLy8gU3RlcCAxIG9mIFdTIHNwZWMgLSBwYXJzZSBhbmQgdmFsaWRhdGUgdGhlIHVybC4gSXNzdWUgIzhcbiAgdmFyIHBhcnNlZFVybCA9IG5ldyBVUkwodXJsKTtcbiAgaWYgKCFwYXJzZWRVcmwuaG9zdCB8fCAhcGFyc2VkVXJsLnByb3RvY29sKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiVGhlIFVSTCAnXCIgKyB1cmwgKyBcIicgaXMgaW52YWxpZFwiKTtcbiAgfSBlbHNlIGlmIChwYXJzZWRVcmwuaGFzaCkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVGhlIFVSTCBtdXN0IG5vdCBjb250YWluIGEgZnJhZ21lbnQnKTtcbiAgfSBlbHNlIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgIT09ICdodHRwOicgJiYgcGFyc2VkVXJsLnByb3RvY29sICE9PSAnaHR0cHM6Jykge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcIlRoZSBVUkwncyBzY2hlbWUgbXVzdCBiZSBlaXRoZXIgJ2h0dHA6JyBvciAnaHR0cHM6Jy4gJ1wiICsgcGFyc2VkVXJsLnByb3RvY29sICsgXCInIGlzIG5vdCBhbGxvd2VkLlwiKTtcbiAgfVxuXG4gIHZhciBzZWN1cmUgPSBwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAvLyBTdGVwIDIgLSBkb24ndCBhbGxvdyBzZWN1cmUgb3JpZ2luIHdpdGggYW4gaW5zZWN1cmUgcHJvdG9jb2xcbiAgaWYgKGxvYy5wcm90b2NvbCA9PT0gJ2h0dHBzOicgJiYgIXNlY3VyZSkge1xuICAgIC8vIGV4Y2VwdGlvbiBpcyAxMjcuMC4wLjAvOCBhbmQgOjoxIHVybHNcbiAgICBpZiAoIXVybFV0aWxzLmlzTG9vcGJhY2tBZGRyKHBhcnNlZFVybC5ob3N0bmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2VjdXJpdHlFcnJvcjogQW4gaW5zZWN1cmUgU29ja0pTIGNvbm5lY3Rpb24gbWF5IG5vdCBiZSBpbml0aWF0ZWQgZnJvbSBhIHBhZ2UgbG9hZGVkIG92ZXIgSFRUUFMnKTtcbiAgICB9XG4gIH1cblxuICAvLyBTdGVwIDMgLSBjaGVjayBwb3J0IGFjY2VzcyAtIG5vIG5lZWQgaGVyZVxuICAvLyBTdGVwIDQgLSBwYXJzZSBwcm90b2NvbHMgYXJndW1lbnRcbiAgaWYgKCFwcm90b2NvbHMpIHtcbiAgICBwcm90b2NvbHMgPSBbXTtcbiAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShwcm90b2NvbHMpKSB7XG4gICAgcHJvdG9jb2xzID0gW3Byb3RvY29sc107XG4gIH1cblxuICAvLyBTdGVwIDUgLSBjaGVjayBwcm90b2NvbHMgYXJndW1lbnRcbiAgdmFyIHNvcnRlZFByb3RvY29scyA9IHByb3RvY29scy5zb3J0KCk7XG4gIHNvcnRlZFByb3RvY29scy5mb3JFYWNoKGZ1bmN0aW9uKHByb3RvLCBpKSB7XG4gICAgaWYgKCFwcm90bykge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiVGhlIHByb3RvY29scyBlbnRyeSAnXCIgKyBwcm90byArIFwiJyBpcyBpbnZhbGlkLlwiKTtcbiAgICB9XG4gICAgaWYgKGkgPCAoc29ydGVkUHJvdG9jb2xzLmxlbmd0aCAtIDEpICYmIHByb3RvID09PSBzb3J0ZWRQcm90b2NvbHNbaSArIDFdKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJUaGUgcHJvdG9jb2xzIGVudHJ5ICdcIiArIHByb3RvICsgXCInIGlzIGR1cGxpY2F0ZWQuXCIpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gU3RlcCA2IC0gY29udmVydCBvcmlnaW5cbiAgdmFyIG8gPSB1cmxVdGlscy5nZXRPcmlnaW4obG9jLmhyZWYpO1xuICB0aGlzLl9vcmlnaW4gPSBvID8gby50b0xvd2VyQ2FzZSgpIDogbnVsbDtcblxuICAvLyByZW1vdmUgdGhlIHRyYWlsaW5nIHNsYXNoXG4gIHBhcnNlZFVybC5zZXQoJ3BhdGhuYW1lJywgcGFyc2VkVXJsLnBhdGhuYW1lLnJlcGxhY2UoL1xcLyskLywgJycpKTtcblxuICAvLyBzdG9yZSB0aGUgc2FuaXRpemVkIHVybFxuICB0aGlzLnVybCA9IHBhcnNlZFVybC5ocmVmO1xuICBkZWJ1ZygndXNpbmcgdXJsJywgdGhpcy51cmwpO1xuXG4gIC8vIFN0ZXAgNyAtIHN0YXJ0IGNvbm5lY3Rpb24gaW4gYmFja2dyb3VuZFxuICAvLyBvYnRhaW4gc2VydmVyIGluZm9cbiAgLy8gaHR0cDovL3NvY2tqcy5naXRodWIuaW8vc29ja2pzLXByb3RvY29sL3NvY2tqcy1wcm90b2NvbC0wLjMuMy5odG1sI3NlY3Rpb24tMjZcbiAgdGhpcy5fdXJsSW5mbyA9IHtcbiAgICBudWxsT3JpZ2luOiAhYnJvd3Nlci5oYXNEb21haW4oKVxuICAsIHNhbWVPcmlnaW46IHVybFV0aWxzLmlzT3JpZ2luRXF1YWwodGhpcy51cmwsIGxvYy5ocmVmKVxuICAsIHNhbWVTY2hlbWU6IHVybFV0aWxzLmlzU2NoZW1lRXF1YWwodGhpcy51cmwsIGxvYy5ocmVmKVxuICB9O1xuXG4gIHRoaXMuX2lyID0gbmV3IEluZm9SZWNlaXZlcih0aGlzLnVybCwgdGhpcy5fdXJsSW5mbyk7XG4gIHRoaXMuX2lyLm9uY2UoJ2ZpbmlzaCcsIHRoaXMuX3JlY2VpdmVJbmZvLmJpbmQodGhpcykpO1xufVxuXG5pbmhlcml0cyhTb2NrSlMsIEV2ZW50VGFyZ2V0KTtcblxuZnVuY3Rpb24gdXNlclNldENvZGUoY29kZSkge1xuICByZXR1cm4gY29kZSA9PT0gMTAwMCB8fCAoY29kZSA+PSAzMDAwICYmIGNvZGUgPD0gNDk5OSk7XG59XG5cblNvY2tKUy5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbihjb2RlLCByZWFzb24pIHtcbiAgLy8gU3RlcCAxXG4gIGlmIChjb2RlICYmICF1c2VyU2V0Q29kZShjb2RlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZEFjY2Vzc0Vycm9yOiBJbnZhbGlkIGNvZGUnKTtcbiAgfVxuICAvLyBTdGVwIDIuNCBzdGF0ZXMgdGhlIG1heCBpcyAxMjMgYnl0ZXMsIGJ1dCB3ZSBhcmUganVzdCBjaGVja2luZyBsZW5ndGhcbiAgaWYgKHJlYXNvbiAmJiByZWFzb24ubGVuZ3RoID4gMTIzKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdyZWFzb24gYXJndW1lbnQgaGFzIGFuIGludmFsaWQgbGVuZ3RoJyk7XG4gIH1cblxuICAvLyBTdGVwIDMuMVxuICBpZiAodGhpcy5yZWFkeVN0YXRlID09PSBTb2NrSlMuQ0xPU0lORyB8fCB0aGlzLnJlYWR5U3RhdGUgPT09IFNvY2tKUy5DTE9TRUQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBUT0RPIGxvb2sgYXQgZG9jcyB0byBkZXRlcm1pbmUgaG93IHRvIHNldCB0aGlzXG4gIHZhciB3YXNDbGVhbiA9IHRydWU7XG4gIHRoaXMuX2Nsb3NlKGNvZGUgfHwgMTAwMCwgcmVhc29uIHx8ICdOb3JtYWwgY2xvc3VyZScsIHdhc0NsZWFuKTtcbn07XG5cblNvY2tKUy5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgLy8gIzEzIC0gY29udmVydCBhbnl0aGluZyBub24tc3RyaW5nIHRvIHN0cmluZ1xuICAvLyBUT0RPIHRoaXMgY3VycmVudGx5IHR1cm5zIG9iamVjdHMgaW50byBbb2JqZWN0IE9iamVjdF1cbiAgaWYgKHR5cGVvZiBkYXRhICE9PSAnc3RyaW5nJykge1xuICAgIGRhdGEgPSAnJyArIGRhdGE7XG4gIH1cbiAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gU29ja0pTLkNPTk5FQ1RJTkcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWRTdGF0ZUVycm9yOiBUaGUgY29ubmVjdGlvbiBoYXMgbm90IGJlZW4gZXN0YWJsaXNoZWQgeWV0Jyk7XG4gIH1cbiAgaWYgKHRoaXMucmVhZHlTdGF0ZSAhPT0gU29ja0pTLk9QRU4pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5fdHJhbnNwb3J0LnNlbmQoZXNjYXBlLnF1b3RlKGRhdGEpKTtcbn07XG5cblNvY2tKUy52ZXJzaW9uID0gcmVxdWlyZSgnLi92ZXJzaW9uJyk7XG5cblNvY2tKUy5DT05ORUNUSU5HID0gMDtcblNvY2tKUy5PUEVOID0gMTtcblNvY2tKUy5DTE9TSU5HID0gMjtcblNvY2tKUy5DTE9TRUQgPSAzO1xuXG5Tb2NrSlMucHJvdG90eXBlLl9yZWNlaXZlSW5mbyA9IGZ1bmN0aW9uKGluZm8sIHJ0dCkge1xuICBkZWJ1ZygnX3JlY2VpdmVJbmZvJywgcnR0KTtcbiAgdGhpcy5faXIgPSBudWxsO1xuICBpZiAoIWluZm8pIHtcbiAgICB0aGlzLl9jbG9zZSgxMDAyLCAnQ2Fubm90IGNvbm5lY3QgdG8gc2VydmVyJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gZXN0YWJsaXNoIGEgcm91bmQtdHJpcCB0aW1lb3V0IChSVE8pIGJhc2VkIG9uIHRoZVxuICAvLyByb3VuZC10cmlwIHRpbWUgKFJUVClcbiAgdGhpcy5fcnRvID0gdGhpcy5jb3VudFJUTyhydHQpO1xuICAvLyBhbGxvdyBzZXJ2ZXIgdG8gb3ZlcnJpZGUgdXJsIHVzZWQgZm9yIHRoZSBhY3R1YWwgdHJhbnNwb3J0XG4gIHRoaXMuX3RyYW5zVXJsID0gaW5mby5iYXNlX3VybCA/IGluZm8uYmFzZV91cmwgOiB0aGlzLnVybDtcbiAgaW5mbyA9IG9iamVjdFV0aWxzLmV4dGVuZChpbmZvLCB0aGlzLl91cmxJbmZvKTtcbiAgZGVidWcoJ2luZm8nLCBpbmZvKTtcbiAgLy8gZGV0ZXJtaW5lIGxpc3Qgb2YgZGVzaXJlZCBhbmQgc3VwcG9ydGVkIHRyYW5zcG9ydHNcbiAgdmFyIGVuYWJsZWRUcmFuc3BvcnRzID0gdHJhbnNwb3J0cy5maWx0ZXJUb0VuYWJsZWQodGhpcy5fdHJhbnNwb3J0c1doaXRlbGlzdCwgaW5mbyk7XG4gIHRoaXMuX3RyYW5zcG9ydHMgPSBlbmFibGVkVHJhbnNwb3J0cy5tYWluO1xuICBkZWJ1Zyh0aGlzLl90cmFuc3BvcnRzLmxlbmd0aCArICcgZW5hYmxlZCB0cmFuc3BvcnRzJyk7XG5cbiAgdGhpcy5fY29ubmVjdCgpO1xufTtcblxuU29ja0pTLnByb3RvdHlwZS5fY29ubmVjdCA9IGZ1bmN0aW9uKCkge1xuICBmb3IgKHZhciBUcmFuc3BvcnQgPSB0aGlzLl90cmFuc3BvcnRzLnNoaWZ0KCk7IFRyYW5zcG9ydDsgVHJhbnNwb3J0ID0gdGhpcy5fdHJhbnNwb3J0cy5zaGlmdCgpKSB7XG4gICAgZGVidWcoJ2F0dGVtcHQnLCBUcmFuc3BvcnQudHJhbnNwb3J0TmFtZSk7XG4gICAgaWYgKFRyYW5zcG9ydC5uZWVkQm9keSkge1xuICAgICAgaWYgKCFnbG9iYWwuZG9jdW1lbnQuYm9keSB8fFxuICAgICAgICAgICh0eXBlb2YgZ2xvYmFsLmRvY3VtZW50LnJlYWR5U3RhdGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBnbG9iYWwuZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gJ2NvbXBsZXRlJyAmJlxuICAgICAgICAgICAgZ2xvYmFsLmRvY3VtZW50LnJlYWR5U3RhdGUgIT09ICdpbnRlcmFjdGl2ZScpKSB7XG4gICAgICAgIGRlYnVnKCd3YWl0aW5nIGZvciBib2R5Jyk7XG4gICAgICAgIHRoaXMuX3RyYW5zcG9ydHMudW5zaGlmdChUcmFuc3BvcnQpO1xuICAgICAgICBldmVudFV0aWxzLmF0dGFjaEV2ZW50KCdsb2FkJywgdGhpcy5fY29ubmVjdC5iaW5kKHRoaXMpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNhbGN1bGF0ZSB0aW1lb3V0IGJhc2VkIG9uIFJUTyBhbmQgcm91bmQgdHJpcHMuIERlZmF1bHQgdG8gNXNcbiAgICB2YXIgdGltZW91dE1zID0gTWF0aC5tYXgodGhpcy5fdGltZW91dCwgKHRoaXMuX3J0byAqIFRyYW5zcG9ydC5yb3VuZFRyaXBzKSB8fCA1MDAwKTtcbiAgICB0aGlzLl90cmFuc3BvcnRUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KHRoaXMuX3RyYW5zcG9ydFRpbWVvdXQuYmluZCh0aGlzKSwgdGltZW91dE1zKTtcbiAgICBkZWJ1ZygndXNpbmcgdGltZW91dCcsIHRpbWVvdXRNcyk7XG5cbiAgICB2YXIgdHJhbnNwb3J0VXJsID0gdXJsVXRpbHMuYWRkUGF0aCh0aGlzLl90cmFuc1VybCwgJy8nICsgdGhpcy5fc2VydmVyICsgJy8nICsgdGhpcy5fZ2VuZXJhdGVTZXNzaW9uSWQoKSk7XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLl90cmFuc3BvcnRPcHRpb25zW1RyYW5zcG9ydC50cmFuc3BvcnROYW1lXTtcbiAgICBkZWJ1ZygndHJhbnNwb3J0IHVybCcsIHRyYW5zcG9ydFVybCk7XG4gICAgdmFyIHRyYW5zcG9ydE9iaiA9IG5ldyBUcmFuc3BvcnQodHJhbnNwb3J0VXJsLCB0aGlzLl90cmFuc1VybCwgb3B0aW9ucyk7XG4gICAgdHJhbnNwb3J0T2JqLm9uKCdtZXNzYWdlJywgdGhpcy5fdHJhbnNwb3J0TWVzc2FnZS5iaW5kKHRoaXMpKTtcbiAgICB0cmFuc3BvcnRPYmoub25jZSgnY2xvc2UnLCB0aGlzLl90cmFuc3BvcnRDbG9zZS5iaW5kKHRoaXMpKTtcbiAgICB0cmFuc3BvcnRPYmoudHJhbnNwb3J0TmFtZSA9IFRyYW5zcG9ydC50cmFuc3BvcnROYW1lO1xuICAgIHRoaXMuX3RyYW5zcG9ydCA9IHRyYW5zcG9ydE9iajtcblxuICAgIHJldHVybjtcbiAgfVxuICB0aGlzLl9jbG9zZSgyMDAwLCAnQWxsIHRyYW5zcG9ydHMgZmFpbGVkJywgZmFsc2UpO1xufTtcblxuU29ja0pTLnByb3RvdHlwZS5fdHJhbnNwb3J0VGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICBkZWJ1ZygnX3RyYW5zcG9ydFRpbWVvdXQnKTtcbiAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gU29ja0pTLkNPTk5FQ1RJTkcpIHtcbiAgICBpZiAodGhpcy5fdHJhbnNwb3J0KSB7XG4gICAgICB0aGlzLl90cmFuc3BvcnQuY2xvc2UoKTtcbiAgICB9XG5cbiAgICB0aGlzLl90cmFuc3BvcnRDbG9zZSgyMDA3LCAnVHJhbnNwb3J0IHRpbWVkIG91dCcpO1xuICB9XG59O1xuXG5Tb2NrSlMucHJvdG90eXBlLl90cmFuc3BvcnRNZXNzYWdlID0gZnVuY3Rpb24obXNnKSB7XG4gIGRlYnVnKCdfdHJhbnNwb3J0TWVzc2FnZScsIG1zZyk7XG4gIHZhciBzZWxmID0gdGhpc1xuICAgICwgdHlwZSA9IG1zZy5zbGljZSgwLCAxKVxuICAgICwgY29udGVudCA9IG1zZy5zbGljZSgxKVxuICAgICwgcGF5bG9hZFxuICAgIDtcblxuICAvLyBmaXJzdCBjaGVjayBmb3IgbWVzc2FnZXMgdGhhdCBkb24ndCBuZWVkIGEgcGF5bG9hZFxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdvJzpcbiAgICAgIHRoaXMuX29wZW4oKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlICdoJzpcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2hlYXJ0YmVhdCcpKTtcbiAgICAgIGRlYnVnKCdoZWFydGJlYXQnLCB0aGlzLnRyYW5zcG9ydCk7XG4gICAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY29udGVudCkge1xuICAgIHRyeSB7XG4gICAgICBwYXlsb2FkID0gSlNPTjMucGFyc2UoY29udGVudCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZGVidWcoJ2JhZCBqc29uJywgY29udGVudCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBwYXlsb2FkID09PSAndW5kZWZpbmVkJykge1xuICAgIGRlYnVnKCdlbXB0eSBwYXlsb2FkJywgY29udGVudCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnYSc6XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXlsb2FkKSkge1xuICAgICAgICBwYXlsb2FkLmZvckVhY2goZnVuY3Rpb24ocCkge1xuICAgICAgICAgIGRlYnVnKCdtZXNzYWdlJywgc2VsZi50cmFuc3BvcnQsIHApO1xuICAgICAgICAgIHNlbGYuZGlzcGF0Y2hFdmVudChuZXcgVHJhbnNwb3J0TWVzc2FnZUV2ZW50KHApKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdtJzpcbiAgICAgIGRlYnVnKCdtZXNzYWdlJywgdGhpcy50cmFuc3BvcnQsIHBheWxvYWQpO1xuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBUcmFuc3BvcnRNZXNzYWdlRXZlbnQocGF5bG9hZCkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYyc6XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXlsb2FkKSAmJiBwYXlsb2FkLmxlbmd0aCA9PT0gMikge1xuICAgICAgICB0aGlzLl9jbG9zZShwYXlsb2FkWzBdLCBwYXlsb2FkWzFdLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICB9XG59O1xuXG5Tb2NrSlMucHJvdG90eXBlLl90cmFuc3BvcnRDbG9zZSA9IGZ1bmN0aW9uKGNvZGUsIHJlYXNvbikge1xuICBkZWJ1ZygnX3RyYW5zcG9ydENsb3NlJywgdGhpcy50cmFuc3BvcnQsIGNvZGUsIHJlYXNvbik7XG4gIGlmICh0aGlzLl90cmFuc3BvcnQpIHtcbiAgICB0aGlzLl90cmFuc3BvcnQucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgdGhpcy5fdHJhbnNwb3J0ID0gbnVsbDtcbiAgICB0aGlzLnRyYW5zcG9ydCA9IG51bGw7XG4gIH1cblxuICBpZiAoIXVzZXJTZXRDb2RlKGNvZGUpICYmIGNvZGUgIT09IDIwMDAgJiYgdGhpcy5yZWFkeVN0YXRlID09PSBTb2NrSlMuQ09OTkVDVElORykge1xuICAgIHRoaXMuX2Nvbm5lY3QoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9jbG9zZShjb2RlLCByZWFzb24pO1xufTtcblxuU29ja0pTLnByb3RvdHlwZS5fb3BlbiA9IGZ1bmN0aW9uKCkge1xuICBkZWJ1ZygnX29wZW4nLCB0aGlzLl90cmFuc3BvcnQgJiYgdGhpcy5fdHJhbnNwb3J0LnRyYW5zcG9ydE5hbWUsIHRoaXMucmVhZHlTdGF0ZSk7XG4gIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IFNvY2tKUy5DT05ORUNUSU5HKSB7XG4gICAgaWYgKHRoaXMuX3RyYW5zcG9ydFRpbWVvdXRJZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RyYW5zcG9ydFRpbWVvdXRJZCk7XG4gICAgICB0aGlzLl90cmFuc3BvcnRUaW1lb3V0SWQgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnJlYWR5U3RhdGUgPSBTb2NrSlMuT1BFTjtcbiAgICB0aGlzLnRyYW5zcG9ydCA9IHRoaXMuX3RyYW5zcG9ydC50cmFuc3BvcnROYW1lO1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ29wZW4nKSk7XG4gICAgZGVidWcoJ2Nvbm5lY3RlZCcsIHRoaXMudHJhbnNwb3J0KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGUgc2VydmVyIG1pZ2h0IGhhdmUgYmVlbiByZXN0YXJ0ZWQsIGFuZCBsb3N0IHRyYWNrIG9mIG91clxuICAgIC8vIGNvbm5lY3Rpb24uXG4gICAgdGhpcy5fY2xvc2UoMTAwNiwgJ1NlcnZlciBsb3N0IHNlc3Npb24nKTtcbiAgfVxufTtcblxuU29ja0pTLnByb3RvdHlwZS5fY2xvc2UgPSBmdW5jdGlvbihjb2RlLCByZWFzb24sIHdhc0NsZWFuKSB7XG4gIGRlYnVnKCdfY2xvc2UnLCB0aGlzLnRyYW5zcG9ydCwgY29kZSwgcmVhc29uLCB3YXNDbGVhbiwgdGhpcy5yZWFkeVN0YXRlKTtcbiAgdmFyIGZvcmNlRmFpbCA9IGZhbHNlO1xuXG4gIGlmICh0aGlzLl9pcikge1xuICAgIGZvcmNlRmFpbCA9IHRydWU7XG4gICAgdGhpcy5faXIuY2xvc2UoKTtcbiAgICB0aGlzLl9pciA9IG51bGw7XG4gIH1cbiAgaWYgKHRoaXMuX3RyYW5zcG9ydCkge1xuICAgIHRoaXMuX3RyYW5zcG9ydC5jbG9zZSgpO1xuICAgIHRoaXMuX3RyYW5zcG9ydCA9IG51bGw7XG4gICAgdGhpcy50cmFuc3BvcnQgPSBudWxsO1xuICB9XG5cbiAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gU29ja0pTLkNMT1NFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZFN0YXRlRXJyb3I6IFNvY2tKUyBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCcpO1xuICB9XG5cbiAgdGhpcy5yZWFkeVN0YXRlID0gU29ja0pTLkNMT1NJTkc7XG4gIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZWFkeVN0YXRlID0gU29ja0pTLkNMT1NFRDtcblxuICAgIGlmIChmb3JjZUZhaWwpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2Vycm9yJykpO1xuICAgIH1cblxuICAgIHZhciBlID0gbmV3IENsb3NlRXZlbnQoJ2Nsb3NlJyk7XG4gICAgZS53YXNDbGVhbiA9IHdhc0NsZWFuIHx8IGZhbHNlO1xuICAgIGUuY29kZSA9IGNvZGUgfHwgMTAwMDtcbiAgICBlLnJlYXNvbiA9IHJlYXNvbjtcblxuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChlKTtcbiAgICB0aGlzLm9ubWVzc2FnZSA9IHRoaXMub25jbG9zZSA9IHRoaXMub25lcnJvciA9IG51bGw7XG4gICAgZGVidWcoJ2Rpc2Nvbm5lY3RlZCcpO1xuICB9LmJpbmQodGhpcyksIDApO1xufTtcblxuLy8gU2VlOiBodHRwOi8vd3d3LmVyZy5hYmRuLmFjLnVrL35nZXJyaXQvZGNjcC9ub3Rlcy9jY2lkMi9ydG9fZXN0aW1hdG9yL1xuLy8gYW5kIFJGQyAyOTg4LlxuU29ja0pTLnByb3RvdHlwZS5jb3VudFJUTyA9IGZ1bmN0aW9uKHJ0dCkge1xuICAvLyBJbiBhIGxvY2FsIGVudmlyb25tZW50LCB3aGVuIHVzaW5nIElFOC85IGFuZCB0aGUgYGpzb25wLXBvbGxpbmdgXG4gIC8vIHRyYW5zcG9ydCB0aGUgdGltZSBuZWVkZWQgdG8gZXN0YWJsaXNoIGEgY29ubmVjdGlvbiAodGhlIHRpbWUgdGhhdCBwYXNzXG4gIC8vIGZyb20gdGhlIG9wZW5pbmcgb2YgdGhlIHRyYW5zcG9ydCB0byB0aGUgY2FsbCBvZiBgX2Rpc3BhdGNoT3BlbmApIGlzXG4gIC8vIGFyb3VuZCAyMDBtc2VjICh0aGUgbG93ZXIgYm91bmQgdXNlZCBpbiB0aGUgYXJ0aWNsZSBhYm92ZSkgYW5kIHRoaXNcbiAgLy8gY2F1c2VzIHNwdXJpb3VzIHRpbWVvdXRzLiBGb3IgdGhpcyByZWFzb24gd2UgY2FsY3VsYXRlIGEgdmFsdWUgc2xpZ2h0bHlcbiAgLy8gbGFyZ2VyIHRoYW4gdGhhdCB1c2VkIGluIHRoZSBhcnRpY2xlLlxuICBpZiAocnR0ID4gMTAwKSB7XG4gICAgcmV0dXJuIDQgKiBydHQ7IC8vIHJ0byA+IDQwMG1zZWNcbiAgfVxuICByZXR1cm4gMzAwICsgcnR0OyAvLyAzMDBtc2VjIDwgcnRvIDw9IDQwMG1zZWNcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oYXZhaWxhYmxlVHJhbnNwb3J0cykge1xuICB0cmFuc3BvcnRzID0gdHJhbnNwb3J0KGF2YWlsYWJsZVRyYW5zcG9ydHMpO1xuICByZXF1aXJlKCcuL2lmcmFtZS1ib290c3RyYXAnKShTb2NrSlMsIGF2YWlsYWJsZVRyYW5zcG9ydHMpO1xuICByZXR1cm4gU29ja0pTO1xufTtcblxufSkuY2FsbCh0aGlzLHsgZW52OiB7fSB9LHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG5cbn0se1wiLi9ldmVudC9jbG9zZVwiOjIsXCIuL2V2ZW50L2V2ZW50XCI6NCxcIi4vZXZlbnQvZXZlbnR0YXJnZXRcIjo1LFwiLi9ldmVudC90cmFucy1tZXNzYWdlXCI6NixcIi4vaWZyYW1lLWJvb3RzdHJhcFwiOjgsXCIuL2luZm8tcmVjZWl2ZXJcIjoxMixcIi4vbG9jYXRpb25cIjoxMyxcIi4vc2hpbXNcIjoxNSxcIi4vdXRpbHMvYnJvd3NlclwiOjQ0LFwiLi91dGlscy9lc2NhcGVcIjo0NSxcIi4vdXRpbHMvZXZlbnRcIjo0NixcIi4vdXRpbHMvbG9nXCI6NDgsXCIuL3V0aWxzL29iamVjdFwiOjQ5LFwiLi91dGlscy9yYW5kb21cIjo1MCxcIi4vdXRpbHMvdHJhbnNwb3J0XCI6NTEsXCIuL3V0aWxzL3VybFwiOjUyLFwiLi92ZXJzaW9uXCI6NTMsXCJkZWJ1Z1wiOjU1LFwiaW5oZXJpdHNcIjo1NyxcImpzb24zXCI6NTgsXCJ1cmwtcGFyc2VcIjo2MX1dLDE1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbi8qIGVzbGludC1kaXNhYmxlICovXG4vKiBqc2NzOiBkaXNhYmxlICovXG4ndXNlIHN0cmljdCc7XG5cbi8vIHB1bGxlZCBzcGVjaWZpYyBzaGltcyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbVxuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBTdHJpbmdQcm90b3R5cGUgPSBTdHJpbmcucHJvdG90eXBlO1xudmFyIGFycmF5X3NsaWNlID0gQXJyYXlQcm90b3R5cGUuc2xpY2U7XG5cbnZhciBfdG9TdHJpbmcgPSBPYmplY3RQcm90b3R5cGUudG9TdHJpbmc7XG52YXIgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICByZXR1cm4gT2JqZWN0UHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn07XG52YXIgaXNBcnJheSA9IGZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7XG4gICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xudmFyIGlzU3RyaW5nID0gZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7XG4gICAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IFN0cmluZ10nO1xufTtcblxudmFyIHN1cHBvcnRzRGVzY3JpcHRvcnMgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICd4Jywge30pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7IC8qIHRoaXMgaXMgRVMzICovXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59KCkpO1xuXG4vLyBEZWZpbmUgY29uZmlndXJhYmxlLCB3cml0YWJsZSBhbmQgbm9uLWVudW1lcmFibGUgcHJvcHNcbi8vIGlmIHRoZXkgZG9uJ3QgZXhpc3QuXG52YXIgZGVmaW5lUHJvcGVydHk7XG5pZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuICAgIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgbWV0aG9kLCBmb3JjZUFzc2lnbikge1xuICAgICAgICBpZiAoIWZvcmNlQXNzaWduICYmIChuYW1lIGluIG9iamVjdCkpIHsgcmV0dXJuOyB9XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbWV0aG9kXG4gICAgICAgIH0pO1xuICAgIH07XG59IGVsc2Uge1xuICAgIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgbWV0aG9kLCBmb3JjZUFzc2lnbikge1xuICAgICAgICBpZiAoIWZvcmNlQXNzaWduICYmIChuYW1lIGluIG9iamVjdCkpIHsgcmV0dXJuOyB9XG4gICAgICAgIG9iamVjdFtuYW1lXSA9IG1ldGhvZDtcbiAgICB9O1xufVxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXAsIGZvcmNlQXNzaWduKSB7XG4gICAgZm9yICh2YXIgbmFtZSBpbiBtYXApIHtcbiAgICAgICAgaWYgKE9iamVjdFByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1hcCwgbmFtZSkpIHtcbiAgICAgICAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIG1hcFtuYW1lXSwgZm9yY2VBc3NpZ24pO1xuICAgICAgICB9XG4gICAgfVxufTtcblxudmFyIHRvT2JqZWN0ID0gZnVuY3Rpb24gKG8pIHtcbiAgICBpZiAobyA9PSBudWxsKSB7IC8vIHRoaXMgbWF0Y2hlcyBib3RoIG51bGwgYW5kIHVuZGVmaW5lZFxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiY2FuJ3QgY29udmVydCBcIiArIG8gKyAnIHRvIG9iamVjdCcpO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0KG8pO1xufTtcblxuLy9cbi8vIFV0aWxcbi8vID09PT09PVxuLy9cblxuLy8gRVM1IDkuNFxuLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4OS40XG4vLyBodHRwOi8vanNwZXJmLmNvbS90by1pbnRlZ2VyXG5cbmZ1bmN0aW9uIHRvSW50ZWdlcihudW0pIHtcbiAgICB2YXIgbiA9ICtudW07XG4gICAgaWYgKG4gIT09IG4pIHsgLy8gaXNOYU5cbiAgICAgICAgbiA9IDA7XG4gICAgfSBlbHNlIGlmIChuICE9PSAwICYmIG4gIT09ICgxIC8gMCkgJiYgbiAhPT0gLSgxIC8gMCkpIHtcbiAgICAgICAgbiA9IChuID4gMCB8fCAtMSkgKiBNYXRoLmZsb29yKE1hdGguYWJzKG4pKTtcbiAgICB9XG4gICAgcmV0dXJuIG47XG59XG5cbmZ1bmN0aW9uIFRvVWludDMyKHgpIHtcbiAgICByZXR1cm4geCA+Pj4gMDtcbn1cblxuLy9cbi8vIEZ1bmN0aW9uXG4vLyA9PT09PT09PVxuLy9cblxuLy8gRVMtNSAxNS4zLjQuNVxuLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMy40LjVcblxuZnVuY3Rpb24gRW1wdHkoKSB7fVxuXG5kZWZpbmVQcm9wZXJ0aWVzKEZ1bmN0aW9uUHJvdG90eXBlLCB7XG4gICAgYmluZDogZnVuY3Rpb24gYmluZCh0aGF0KSB7IC8vIC5sZW5ndGggaXMgMVxuICAgICAgICAvLyAxLiBMZXQgVGFyZ2V0IGJlIHRoZSB0aGlzIHZhbHVlLlxuICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICAgICAgLy8gMi4gSWYgSXNDYWxsYWJsZShUYXJnZXQpIGlzIGZhbHNlLCB0aHJvdyBhIFR5cGVFcnJvciBleGNlcHRpb24uXG4gICAgICAgIGlmICghaXNGdW5jdGlvbih0YXJnZXQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICcgKyB0YXJnZXQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIDMuIExldCBBIGJlIGEgbmV3IChwb3NzaWJseSBlbXB0eSkgaW50ZXJuYWwgbGlzdCBvZiBhbGwgb2YgdGhlXG4gICAgICAgIC8vICAgYXJndW1lbnQgdmFsdWVzIHByb3ZpZGVkIGFmdGVyIHRoaXNBcmcgKGFyZzEsIGFyZzIgZXRjKSwgaW4gb3JkZXIuXG4gICAgICAgIC8vIFhYWCBzbGljZWRBcmdzIHdpbGwgc3RhbmQgaW4gZm9yIFwiQVwiIGlmIHVzZWRcbiAgICAgICAgdmFyIGFyZ3MgPSBhcnJheV9zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7IC8vIGZvciBub3JtYWwgY2FsbFxuICAgICAgICAvLyA0LiBMZXQgRiBiZSBhIG5ldyBuYXRpdmUgRUNNQVNjcmlwdCBvYmplY3QuXG4gICAgICAgIC8vIDExLiBTZXQgdGhlIFtbUHJvdG90eXBlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgRiB0byB0aGUgc3RhbmRhcmRcbiAgICAgICAgLy8gICBidWlsdC1pbiBGdW5jdGlvbiBwcm90b3R5cGUgb2JqZWN0IGFzIHNwZWNpZmllZCBpbiAxNS4zLjMuMS5cbiAgICAgICAgLy8gMTIuIFNldCB0aGUgW1tDYWxsXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgRiBhcyBkZXNjcmliZWQgaW5cbiAgICAgICAgLy8gICAxNS4zLjQuNS4xLlxuICAgICAgICAvLyAxMy4gU2V0IHRoZSBbW0NvbnN0cnVjdF1dIGludGVybmFsIHByb3BlcnR5IG9mIEYgYXMgZGVzY3JpYmVkIGluXG4gICAgICAgIC8vICAgMTUuMy40LjUuMi5cbiAgICAgICAgLy8gMTQuIFNldCB0aGUgW1tIYXNJbnN0YW5jZV1dIGludGVybmFsIHByb3BlcnR5IG9mIEYgYXMgZGVzY3JpYmVkIGluXG4gICAgICAgIC8vICAgMTUuMy40LjUuMy5cbiAgICAgICAgdmFyIGJpbmRlciA9IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCkge1xuICAgICAgICAgICAgICAgIC8vIDE1LjMuNC41LjIgW1tDb25zdHJ1Y3RdXVxuICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIFtbQ29uc3RydWN0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIGEgZnVuY3Rpb24gb2JqZWN0LFxuICAgICAgICAgICAgICAgIC8vIEYgdGhhdCB3YXMgY3JlYXRlZCB1c2luZyB0aGUgYmluZCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhXG4gICAgICAgICAgICAgICAgLy8gbGlzdCBvZiBhcmd1bWVudHMgRXh0cmFBcmdzLCB0aGUgZm9sbG93aW5nIHN0ZXBzIGFyZSB0YWtlbjpcbiAgICAgICAgICAgICAgICAvLyAxLiBMZXQgdGFyZ2V0IGJlIHRoZSB2YWx1ZSBvZiBGJ3MgW1tUYXJnZXRGdW5jdGlvbl1dXG4gICAgICAgICAgICAgICAgLy8gICBpbnRlcm5hbCBwcm9wZXJ0eS5cbiAgICAgICAgICAgICAgICAvLyAyLiBJZiB0YXJnZXQgaGFzIG5vIFtbQ29uc3RydWN0XV0gaW50ZXJuYWwgbWV0aG9kLCBhXG4gICAgICAgICAgICAgICAgLy8gICBUeXBlRXJyb3IgZXhjZXB0aW9uIGlzIHRocm93bi5cbiAgICAgICAgICAgICAgICAvLyAzLiBMZXQgYm91bmRBcmdzIGJlIHRoZSB2YWx1ZSBvZiBGJ3MgW1tCb3VuZEFyZ3NdXSBpbnRlcm5hbFxuICAgICAgICAgICAgICAgIC8vICAgcHJvcGVydHkuXG4gICAgICAgICAgICAgICAgLy8gNC4gTGV0IGFyZ3MgYmUgYSBuZXcgbGlzdCBjb250YWluaW5nIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGVcbiAgICAgICAgICAgICAgICAvLyAgIGxpc3QgYm91bmRBcmdzIGluIHRoZSBzYW1lIG9yZGVyIGZvbGxvd2VkIGJ5IHRoZSBzYW1lXG4gICAgICAgICAgICAgICAgLy8gICB2YWx1ZXMgYXMgdGhlIGxpc3QgRXh0cmFBcmdzIGluIHRoZSBzYW1lIG9yZGVyLlxuICAgICAgICAgICAgICAgIC8vIDUuIFJldHVybiB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbQ29uc3RydWN0XV0gaW50ZXJuYWxcbiAgICAgICAgICAgICAgICAvLyAgIG1ldGhvZCBvZiB0YXJnZXQgcHJvdmlkaW5nIGFyZ3MgYXMgdGhlIGFyZ3VtZW50cy5cblxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KGFycmF5X3NsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChPYmplY3QocmVzdWx0KSA9PT0gcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIDE1LjMuNC41LjEgW1tDYWxsXV1cbiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2Qgb2YgYSBmdW5jdGlvbiBvYmplY3QsIEYsXG4gICAgICAgICAgICAgICAgLy8gd2hpY2ggd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIGJpbmQgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYVxuICAgICAgICAgICAgICAgIC8vIHRoaXMgdmFsdWUgYW5kIGEgbGlzdCBvZiBhcmd1bWVudHMgRXh0cmFBcmdzLCB0aGUgZm9sbG93aW5nXG4gICAgICAgICAgICAgICAgLy8gc3RlcHMgYXJlIHRha2VuOlxuICAgICAgICAgICAgICAgIC8vIDEuIExldCBib3VuZEFyZ3MgYmUgdGhlIHZhbHVlIG9mIEYncyBbW0JvdW5kQXJnc11dIGludGVybmFsXG4gICAgICAgICAgICAgICAgLy8gICBwcm9wZXJ0eS5cbiAgICAgICAgICAgICAgICAvLyAyLiBMZXQgYm91bmRUaGlzIGJlIHRoZSB2YWx1ZSBvZiBGJ3MgW1tCb3VuZFRoaXNdXSBpbnRlcm5hbFxuICAgICAgICAgICAgICAgIC8vICAgcHJvcGVydHkuXG4gICAgICAgICAgICAgICAgLy8gMy4gTGV0IHRhcmdldCBiZSB0aGUgdmFsdWUgb2YgRidzIFtbVGFyZ2V0RnVuY3Rpb25dXSBpbnRlcm5hbFxuICAgICAgICAgICAgICAgIC8vICAgcHJvcGVydHkuXG4gICAgICAgICAgICAgICAgLy8gNC4gTGV0IGFyZ3MgYmUgYSBuZXcgbGlzdCBjb250YWluaW5nIHRoZSBzYW1lIHZhbHVlcyBhcyB0aGVcbiAgICAgICAgICAgICAgICAvLyAgIGxpc3QgYm91bmRBcmdzIGluIHRoZSBzYW1lIG9yZGVyIGZvbGxvd2VkIGJ5IHRoZSBzYW1lXG4gICAgICAgICAgICAgICAgLy8gICB2YWx1ZXMgYXMgdGhlIGxpc3QgRXh0cmFBcmdzIGluIHRoZSBzYW1lIG9yZGVyLlxuICAgICAgICAgICAgICAgIC8vIDUuIFJldHVybiB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbQ2FsbF1dIGludGVybmFsIG1ldGhvZFxuICAgICAgICAgICAgICAgIC8vICAgb2YgdGFyZ2V0IHByb3ZpZGluZyBib3VuZFRoaXMgYXMgdGhlIHRoaXMgdmFsdWUgYW5kXG4gICAgICAgICAgICAgICAgLy8gICBwcm92aWRpbmcgYXJncyBhcyB0aGUgYXJndW1lbnRzLlxuXG4gICAgICAgICAgICAgICAgLy8gZXF1aXY6IHRhcmdldC5jYWxsKHRoaXMsIC4uLmJvdW5kQXJncywgLi4uYXJncylcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgICAgICB0aGF0LFxuICAgICAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChhcnJheV9zbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gMTUuIElmIHRoZSBbW0NsYXNzXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgVGFyZ2V0IGlzIFwiRnVuY3Rpb25cIiwgdGhlblxuICAgICAgICAvLyAgICAgYS4gTGV0IEwgYmUgdGhlIGxlbmd0aCBwcm9wZXJ0eSBvZiBUYXJnZXQgbWludXMgdGhlIGxlbmd0aCBvZiBBLlxuICAgICAgICAvLyAgICAgYi4gU2V0IHRoZSBsZW5ndGggb3duIHByb3BlcnR5IG9mIEYgdG8gZWl0aGVyIDAgb3IgTCwgd2hpY2hldmVyIGlzXG4gICAgICAgIC8vICAgICAgIGxhcmdlci5cbiAgICAgICAgLy8gMTYuIEVsc2Ugc2V0IHRoZSBsZW5ndGggb3duIHByb3BlcnR5IG9mIEYgdG8gMC5cblxuICAgICAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuXG4gICAgICAgIC8vIDE3LiBTZXQgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGxlbmd0aCBvd24gcHJvcGVydHkgb2YgRiB0byB0aGUgdmFsdWVzXG4gICAgICAgIC8vICAgc3BlY2lmaWVkIGluIDE1LjMuNS4xLlxuICAgICAgICB2YXIgYm91bmRBcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm91bmRMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBYWFggQnVpbGQgYSBkeW5hbWljIGZ1bmN0aW9uIHdpdGggZGVzaXJlZCBhbW91bnQgb2YgYXJndW1lbnRzIGlzIHRoZSBvbmx5XG4gICAgICAgIC8vIHdheSB0byBzZXQgdGhlIGxlbmd0aCBwcm9wZXJ0eSBvZiBhIGZ1bmN0aW9uLlxuICAgICAgICAvLyBJbiBlbnZpcm9ubWVudHMgd2hlcmUgQ29udGVudCBTZWN1cml0eSBQb2xpY2llcyBlbmFibGVkIChDaHJvbWUgZXh0ZW5zaW9ucyxcbiAgICAgICAgLy8gZm9yIGV4LikgYWxsIHVzZSBvZiBldmFsIG9yIEZ1bmN0aW9uIGNvc3RydWN0b3IgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cbiAgICAgICAgLy8gSG93ZXZlciBpbiBhbGwgb2YgdGhlc2UgZW52aXJvbm1lbnRzIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGV4aXN0c1xuICAgICAgICAvLyBhbmQgc28gdGhpcyBjb2RlIHdpbGwgbmV2ZXIgYmUgZXhlY3V0ZWQuXG4gICAgICAgIHZhciBib3VuZCA9IEZ1bmN0aW9uKCdiaW5kZXInLCAncmV0dXJuIGZ1bmN0aW9uICgnICsgYm91bmRBcmdzLmpvaW4oJywnKSArICcpeyByZXR1cm4gYmluZGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgICAgIGlmICh0YXJnZXQucHJvdG90eXBlKSB7XG4gICAgICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlO1xuICAgICAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgICAgICAvLyBDbGVhbiB1cCBkYW5nbGluZyByZWZlcmVuY2VzLlxuICAgICAgICAgICAgRW1wdHkucHJvdG90eXBlID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE9cbiAgICAgICAgLy8gMTguIFNldCB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgRiB0byB0cnVlLlxuXG4gICAgICAgIC8vIFRPRE9cbiAgICAgICAgLy8gMTkuIExldCB0aHJvd2VyIGJlIHRoZSBbW1Rocm93VHlwZUVycm9yXV0gZnVuY3Rpb24gT2JqZWN0ICgxMy4yLjMpLlxuICAgICAgICAvLyAyMC4gQ2FsbCB0aGUgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBGIHdpdGhcbiAgICAgICAgLy8gICBhcmd1bWVudHMgXCJjYWxsZXJcIiwgUHJvcGVydHlEZXNjcmlwdG9yIHtbW0dldF1dOiB0aHJvd2VyLCBbW1NldF1dOlxuICAgICAgICAvLyAgIHRocm93ZXIsIFtbRW51bWVyYWJsZV1dOiBmYWxzZSwgW1tDb25maWd1cmFibGVdXTogZmFsc2V9LCBhbmRcbiAgICAgICAgLy8gICBmYWxzZS5cbiAgICAgICAgLy8gMjEuIENhbGwgdGhlIFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgRiB3aXRoXG4gICAgICAgIC8vICAgYXJndW1lbnRzIFwiYXJndW1lbnRzXCIsIFByb3BlcnR5RGVzY3JpcHRvciB7W1tHZXRdXTogdGhyb3dlcixcbiAgICAgICAgLy8gICBbW1NldF1dOiB0aHJvd2VyLCBbW0VudW1lcmFibGVdXTogZmFsc2UsIFtbQ29uZmlndXJhYmxlXV06IGZhbHNlfSxcbiAgICAgICAgLy8gICBhbmQgZmFsc2UuXG5cbiAgICAgICAgLy8gVE9ET1xuICAgICAgICAvLyBOT1RFIEZ1bmN0aW9uIG9iamVjdHMgY3JlYXRlZCB1c2luZyBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBkbyBub3RcbiAgICAgICAgLy8gaGF2ZSBhIHByb3RvdHlwZSBwcm9wZXJ0eSBvciB0aGUgW1tDb2RlXV0sIFtbRm9ybWFsUGFyYW1ldGVyc11dLCBhbmRcbiAgICAgICAgLy8gW1tTY29wZV1dIGludGVybmFsIHByb3BlcnRpZXMuXG4gICAgICAgIC8vIFhYWCBjYW4ndCBkZWxldGUgcHJvdG90eXBlIGluIHB1cmUtanMuXG5cbiAgICAgICAgLy8gMjIuIFJldHVybiBGLlxuICAgICAgICByZXR1cm4gYm91bmQ7XG4gICAgfVxufSk7XG5cbi8vXG4vLyBBcnJheVxuLy8gPT09PT1cbi8vXG5cbi8vIEVTNSAxNS40LjMuMlxuLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC4zLjJcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2lzQXJyYXlcbmRlZmluZVByb3BlcnRpZXMoQXJyYXksIHsgaXNBcnJheTogaXNBcnJheSB9KTtcblxuXG52YXIgYm94ZWRTdHJpbmcgPSBPYmplY3QoJ2EnKTtcbnZhciBzcGxpdFN0cmluZyA9IGJveGVkU3RyaW5nWzBdICE9PSAnYScgfHwgISgwIGluIGJveGVkU3RyaW5nKTtcblxudmFyIHByb3Blcmx5Qm94ZXNDb250ZXh0ID0gZnVuY3Rpb24gcHJvcGVybHlCb3hlZChtZXRob2QpIHtcbiAgICAvLyBDaGVjayBub2RlIDAuNi4yMSBidWcgd2hlcmUgdGhpcmQgcGFyYW1ldGVyIGlzIG5vdCBib3hlZFxuICAgIHZhciBwcm9wZXJseUJveGVzTm9uU3RyaWN0ID0gdHJ1ZTtcbiAgICB2YXIgcHJvcGVybHlCb3hlc1N0cmljdCA9IHRydWU7XG4gICAgaWYgKG1ldGhvZCkge1xuICAgICAgICBtZXRob2QuY2FsbCgnZm9vJywgZnVuY3Rpb24gKF8sIF9fLCBjb250ZXh0KSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRleHQgIT09ICdvYmplY3QnKSB7IHByb3Blcmx5Qm94ZXNOb25TdHJpY3QgPSBmYWxzZTsgfVxuICAgICAgICB9KTtcblxuICAgICAgICBtZXRob2QuY2FsbChbMV0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICd1c2Ugc3RyaWN0JztcbiAgICAgICAgICAgIHByb3Blcmx5Qm94ZXNTdHJpY3QgPSB0eXBlb2YgdGhpcyA9PT0gJ3N0cmluZyc7XG4gICAgICAgIH0sICd4Jyk7XG4gICAgfVxuICAgIHJldHVybiAhIW1ldGhvZCAmJiBwcm9wZXJseUJveGVzTm9uU3RyaWN0ICYmIHByb3Blcmx5Qm94ZXNTdHJpY3Q7XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzKEFycmF5UHJvdG90eXBlLCB7XG4gICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChmdW4gLyosIHRoaXNwKi8pIHtcbiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLFxuICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIGlzU3RyaW5nKHRoaXMpID8gdGhpcy5zcGxpdCgnJykgOiBvYmplY3QsXG4gICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXSxcbiAgICAgICAgICAgIGkgPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwO1xuXG4gICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5vdCBhIGNhbGxhYmxlIGZ1bmN0aW9uXG4gICAgICAgIGlmICghaXNGdW5jdGlvbihmdW4pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZVxuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKCsraSA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikge1xuICAgICAgICAgICAgICAgIC8vIEludm9rZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCBjYWxsLCBwYXNzaW5nIGFyZ3VtZW50czpcbiAgICAgICAgICAgICAgICAvLyBjb250ZXh0LCBwcm9wZXJ0eSB2YWx1ZSwgcHJvcGVydHkga2V5LCB0aGlzQXJnIG9iamVjdFxuICAgICAgICAgICAgICAgIC8vIGNvbnRleHRcbiAgICAgICAgICAgICAgICBmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgb2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0sICFwcm9wZXJseUJveGVzQ29udGV4dChBcnJheVByb3RvdHlwZS5mb3JFYWNoKSk7XG5cbi8vIEVTNSAxNS40LjQuMTRcbi8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuNC4xNFxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvaW5kZXhPZlxudmFyIGhhc0ZpcmVmb3gySW5kZXhPZkJ1ZyA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mICYmIFswLCAxXS5pbmRleE9mKDEsIDIpICE9PSAtMTtcbmRlZmluZVByb3BlcnRpZXMoQXJyYXlQcm90b3R5cGUsIHtcbiAgICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNvdWdodCAvKiwgZnJvbUluZGV4ICovICkge1xuICAgICAgICB2YXIgc2VsZiA9IHNwbGl0U3RyaW5nICYmIGlzU3RyaW5nKHRoaXMpID8gdGhpcy5zcGxpdCgnJykgOiB0b09iamVjdCh0aGlzKSxcbiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwO1xuXG4gICAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgaSA9IHRvSW50ZWdlcihhcmd1bWVudHNbMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaGFuZGxlIG5lZ2F0aXZlIGluZGljZXNcbiAgICAgICAgaSA9IGkgPj0gMCA/IGkgOiBNYXRoLm1heCgwLCBsZW5ndGggKyBpKTtcbiAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBzZWxmW2ldID09PSBzb3VnaHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxufSwgaGFzRmlyZWZveDJJbmRleE9mQnVnKTtcblxuLy9cbi8vIFN0cmluZ1xuLy8gPT09PT09XG4vL1xuXG4vLyBFUzUgMTUuNS40LjE0XG4vLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS41LjQuMTRcblxuLy8gW2J1Z2ZpeCwgSUUgbHQgOSwgZmlyZWZveCA0LCBLb25xdWVyb3IsIE9wZXJhLCBvYnNjdXJlIGJyb3dzZXJzXVxuLy8gTWFueSBicm93c2VycyBkbyBub3Qgc3BsaXQgcHJvcGVybHkgd2l0aCByZWd1bGFyIGV4cHJlc3Npb25zIG9yIHRoZXlcbi8vIGRvIG5vdCBwZXJmb3JtIHRoZSBzcGxpdCBjb3JyZWN0bHkgdW5kZXIgb2JzY3VyZSBjb25kaXRpb25zLlxuLy8gU2VlIGh0dHA6Ly9ibG9nLnN0ZXZlbmxldml0aGFuLmNvbS9hcmNoaXZlcy9jcm9zcy1icm93c2VyLXNwbGl0XG4vLyBJJ3ZlIHRlc3RlZCBpbiBtYW55IGJyb3dzZXJzIGFuZCB0aGlzIHNlZW1zIHRvIGNvdmVyIHRoZSBkZXZpYW50IG9uZXM6XG4vLyAgICAnYWInLnNwbGl0KC8oPzphYikqLykgc2hvdWxkIGJlIFtcIlwiLCBcIlwiXSwgbm90IFtcIlwiXVxuLy8gICAgJy4nLnNwbGl0KC8oLj8pKC4/KS8pIHNob3VsZCBiZSBbXCJcIiwgXCIuXCIsIFwiXCIsIFwiXCJdLCBub3QgW1wiXCIsIFwiXCJdXG4vLyAgICAndGVzc3QnLnNwbGl0KC8ocykqLykgc2hvdWxkIGJlIFtcInRcIiwgdW5kZWZpbmVkLCBcImVcIiwgXCJzXCIsIFwidFwiXSwgbm90XG4vLyAgICAgICBbdW5kZWZpbmVkLCBcInRcIiwgdW5kZWZpbmVkLCBcImVcIiwgLi4uXVxuLy8gICAgJycuc3BsaXQoLy4/Lykgc2hvdWxkIGJlIFtdLCBub3QgW1wiXCJdXG4vLyAgICAnLicuc3BsaXQoLygpKCkvKSBzaG91bGQgYmUgW1wiLlwiXSwgbm90IFtcIlwiLCBcIlwiLCBcIi5cIl1cblxudmFyIHN0cmluZ19zcGxpdCA9IFN0cmluZ1Byb3RvdHlwZS5zcGxpdDtcbmlmIChcbiAgICAnYWInLnNwbGl0KC8oPzphYikqLykubGVuZ3RoICE9PSAyIHx8XG4gICAgJy4nLnNwbGl0KC8oLj8pKC4/KS8pLmxlbmd0aCAhPT0gNCB8fFxuICAgICd0ZXNzdCcuc3BsaXQoLyhzKSovKVsxXSA9PT0gJ3QnIHx8XG4gICAgJ3Rlc3QnLnNwbGl0KC8oPzopLywgLTEpLmxlbmd0aCAhPT0gNCB8fFxuICAgICcnLnNwbGl0KC8uPy8pLmxlbmd0aCB8fFxuICAgICcuJy5zcGxpdCgvKCkoKS8pLmxlbmd0aCA+IDFcbikge1xuICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjb21wbGlhbnRFeGVjTnBjZyA9IC8oKT8/Ly5leGVjKCcnKVsxXSA9PT0gdm9pZCAwOyAvLyBOUENHOiBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cFxuXG4gICAgICAgIFN0cmluZ1Byb3RvdHlwZS5zcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICAgICAgICB2YXIgc3RyaW5nID0gdGhpcztcbiAgICAgICAgICAgIGlmIChzZXBhcmF0b3IgPT09IHZvaWQgMCAmJiBsaW1pdCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgYHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBuYXRpdmUgc3BsaXRcbiAgICAgICAgICAgIGlmIChfdG9TdHJpbmcuY2FsbChzZXBhcmF0b3IpICE9PSAnW29iamVjdCBSZWdFeHBdJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmdfc3BsaXQuY2FsbCh0aGlzLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG91dHB1dCA9IFtdLFxuICAgICAgICAgICAgICAgIGZsYWdzID0gKHNlcGFyYXRvci5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IubXVsdGlsaW5lICA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLmV4dGVuZGVkICAgPyAneCcgOiAnJykgKyAvLyBQcm9wb3NlZCBmb3IgRVM2XG4gICAgICAgICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnN0aWNreSAgICAgPyAneScgOiAnJyksIC8vIEZpcmVmb3ggMytcbiAgICAgICAgICAgICAgICBsYXN0TGFzdEluZGV4ID0gMCxcbiAgICAgICAgICAgICAgICAvLyBNYWtlIGBnbG9iYWxgIGFuZCBhdm9pZCBgbGFzdEluZGV4YCBpc3N1ZXMgYnkgd29ya2luZyB3aXRoIGEgY29weVxuICAgICAgICAgICAgICAgIHNlcGFyYXRvcjIsIG1hdGNoLCBsYXN0SW5kZXgsIGxhc3RMZW5ndGg7XG4gICAgICAgICAgICBzZXBhcmF0b3IgPSBuZXcgUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIGZsYWdzICsgJ2cnKTtcbiAgICAgICAgICAgIHN0cmluZyArPSAnJzsgLy8gVHlwZS1jb252ZXJ0XG4gICAgICAgICAgICBpZiAoIWNvbXBsaWFudEV4ZWNOcGNnKSB7XG4gICAgICAgICAgICAgICAgLy8gRG9lc24ndCBuZWVkIGZsYWdzIGd5LCBidXQgdGhleSBkb24ndCBodXJ0XG4gICAgICAgICAgICAgICAgc2VwYXJhdG9yMiA9IG5ldyBSZWdFeHAoJ14nICsgc2VwYXJhdG9yLnNvdXJjZSArICckKD8hXFxcXHMpJywgZmxhZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogVmFsdWVzIGZvciBgbGltaXRgLCBwZXIgdGhlIHNwZWM6XG4gICAgICAgICAgICAgKiBJZiB1bmRlZmluZWQ6IDQyOTQ5NjcyOTUgLy8gTWF0aC5wb3coMiwgMzIpIC0gMVxuICAgICAgICAgICAgICogSWYgMCwgSW5maW5pdHksIG9yIE5hTjogMFxuICAgICAgICAgICAgICogSWYgcG9zaXRpdmUgbnVtYmVyOiBsaW1pdCA9IE1hdGguZmxvb3IobGltaXQpOyBpZiAobGltaXQgPiA0Mjk0OTY3Mjk1KSBsaW1pdCAtPSA0Mjk0OTY3Mjk2O1xuICAgICAgICAgICAgICogSWYgbmVnYXRpdmUgbnVtYmVyOiA0Mjk0OTY3Mjk2IC0gTWF0aC5mbG9vcihNYXRoLmFicyhsaW1pdCkpXG4gICAgICAgICAgICAgKiBJZiBvdGhlcjogVHlwZS1jb252ZXJ0LCB0aGVuIHVzZSB0aGUgYWJvdmUgcnVsZXNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbGltaXQgPSBsaW1pdCA9PT0gdm9pZCAwID9cbiAgICAgICAgICAgICAgICAtMSA+Pj4gMCA6IC8vIE1hdGgucG93KDIsIDMyKSAtIDFcbiAgICAgICAgICAgICAgICBUb1VpbnQzMihsaW1pdCk7XG4gICAgICAgICAgICB3aGlsZSAobWF0Y2ggPSBzZXBhcmF0b3IuZXhlYyhzdHJpbmcpKSB7XG4gICAgICAgICAgICAgICAgLy8gYHNlcGFyYXRvci5sYXN0SW5kZXhgIGlzIG5vdCByZWxpYWJsZSBjcm9zcy1icm93c2VyXG4gICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKGxhc3RJbmRleCA+IGxhc3RMYXN0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgsIG1hdGNoLmluZGV4KSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgIGZvclxuICAgICAgICAgICAgICAgICAgICAvLyBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cHNcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21wbGlhbnRFeGVjTnBjZyAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFswXS5yZXBsYWNlKHNlcGFyYXRvcjIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFtpXSA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaC5sZW5ndGggPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlQcm90b3R5cGUucHVzaC5hcHBseShvdXRwdXQsIG1hdGNoLnNsaWNlKDEpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsYXN0TGVuZ3RoID0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBsYXN0TGFzdEluZGV4ID0gbGFzdEluZGV4O1xuICAgICAgICAgICAgICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aCA+PSBsaW1pdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlcGFyYXRvci5sYXN0SW5kZXggPT09IG1hdGNoLmluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHNlcGFyYXRvci5sYXN0SW5kZXgrKzsgLy8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsYXN0TGFzdEluZGV4ID09PSBzdHJpbmcubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxhc3RMZW5ndGggfHwgIXNlcGFyYXRvci50ZXN0KCcnKSkge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQucHVzaCgnJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dC5sZW5ndGggPiBsaW1pdCA/IG91dHB1dC5zbGljZSgwLCBsaW1pdCkgOiBvdXRwdXQ7XG4gICAgICAgIH07XG4gICAgfSgpKTtcblxuLy8gW2J1Z2ZpeCwgY2hyb21lXVxuLy8gSWYgc2VwYXJhdG9yIGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgcmVzdWx0IGFycmF5IGNvbnRhaW5zIGp1c3Qgb25lIFN0cmluZyxcbi8vIHdoaWNoIGlzIHRoZSB0aGlzIHZhbHVlIChjb252ZXJ0ZWQgdG8gYSBTdHJpbmcpLiBJZiBsaW1pdCBpcyBub3QgdW5kZWZpbmVkLFxuLy8gdGhlbiB0aGUgb3V0cHV0IGFycmF5IGlzIHRydW5jYXRlZCBzbyB0aGF0IGl0IGNvbnRhaW5zIG5vIG1vcmUgdGhhbiBsaW1pdFxuLy8gZWxlbWVudHMuXG4vLyBcIjBcIi5zcGxpdCh1bmRlZmluZWQsIDApIC0+IFtdXG59IGVsc2UgaWYgKCcwJy5zcGxpdCh2b2lkIDAsIDApLmxlbmd0aCkge1xuICAgIFN0cmluZ1Byb3RvdHlwZS5zcGxpdCA9IGZ1bmN0aW9uIHNwbGl0KHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdm9pZCAwICYmIGxpbWl0ID09PSAwKSB7IHJldHVybiBbXTsgfVxuICAgICAgICByZXR1cm4gc3RyaW5nX3NwbGl0LmNhbGwodGhpcywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfTtcbn1cblxuLy8gRUNNQS0yNjIsIDNyZCBCLjIuM1xuLy8gTm90IGFuIEVDTUFTY3JpcHQgc3RhbmRhcmQsIGFsdGhvdWdoIEVDTUFTY3JpcHQgM3JkIEVkaXRpb24gaGFzIGFcbi8vIG5vbi1ub3JtYXRpdmUgc2VjdGlvbiBzdWdnZXN0aW5nIHVuaWZvcm0gc2VtYW50aWNzIGFuZCBpdCBzaG91bGQgYmVcbi8vIG5vcm1hbGl6ZWQgYWNyb3NzIGFsbCBicm93c2Vyc1xuLy8gW2J1Z2ZpeCwgSUUgbHQgOV0gSUUgPCA5IHN1YnN0cigpIHdpdGggbmVnYXRpdmUgdmFsdWUgbm90IHdvcmtpbmcgaW4gSUVcbnZhciBzdHJpbmdfc3Vic3RyID0gU3RyaW5nUHJvdG90eXBlLnN1YnN0cjtcbnZhciBoYXNOZWdhdGl2ZVN1YnN0ckJ1ZyA9ICcnLnN1YnN0ciAmJiAnMGInLnN1YnN0cigtMSkgIT09ICdiJztcbmRlZmluZVByb3BlcnRpZXMoU3RyaW5nUHJvdG90eXBlLCB7XG4gICAgc3Vic3RyOiBmdW5jdGlvbiBzdWJzdHIoc3RhcnQsIGxlbmd0aCkge1xuICAgICAgICByZXR1cm4gc3RyaW5nX3N1YnN0ci5jYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIHN0YXJ0IDwgMCA/ICgoc3RhcnQgPSB0aGlzLmxlbmd0aCArIHN0YXJ0KSA8IDAgPyAwIDogc3RhcnQpIDogc3RhcnQsXG4gICAgICAgICAgICBsZW5ndGhcbiAgICAgICAgKTtcbiAgICB9XG59LCBoYXNOZWdhdGl2ZVN1YnN0ckJ1Zyk7XG5cbn0se31dLDE2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBbXG4gIC8vIHN0cmVhbWluZyB0cmFuc3BvcnRzXG4gIHJlcXVpcmUoJy4vdHJhbnNwb3J0L3dlYnNvY2tldCcpXG4sIHJlcXVpcmUoJy4vdHJhbnNwb3J0L3hoci1zdHJlYW1pbmcnKVxuLCByZXF1aXJlKCcuL3RyYW5zcG9ydC94ZHItc3RyZWFtaW5nJylcbiwgcmVxdWlyZSgnLi90cmFuc3BvcnQvZXZlbnRzb3VyY2UnKVxuLCByZXF1aXJlKCcuL3RyYW5zcG9ydC9saWIvaWZyYW1lLXdyYXAnKShyZXF1aXJlKCcuL3RyYW5zcG9ydC9ldmVudHNvdXJjZScpKVxuXG4gIC8vIHBvbGxpbmcgdHJhbnNwb3J0c1xuLCByZXF1aXJlKCcuL3RyYW5zcG9ydC9odG1sZmlsZScpXG4sIHJlcXVpcmUoJy4vdHJhbnNwb3J0L2xpYi9pZnJhbWUtd3JhcCcpKHJlcXVpcmUoJy4vdHJhbnNwb3J0L2h0bWxmaWxlJykpXG4sIHJlcXVpcmUoJy4vdHJhbnNwb3J0L3hoci1wb2xsaW5nJylcbiwgcmVxdWlyZSgnLi90cmFuc3BvcnQveGRyLXBvbGxpbmcnKVxuLCByZXF1aXJlKCcuL3RyYW5zcG9ydC9saWIvaWZyYW1lLXdyYXAnKShyZXF1aXJlKCcuL3RyYW5zcG9ydC94aHItcG9sbGluZycpKVxuLCByZXF1aXJlKCcuL3RyYW5zcG9ydC9qc29ucC1wb2xsaW5nJylcbl07XG5cbn0se1wiLi90cmFuc3BvcnQvZXZlbnRzb3VyY2VcIjoyMCxcIi4vdHJhbnNwb3J0L2h0bWxmaWxlXCI6MjEsXCIuL3RyYW5zcG9ydC9qc29ucC1wb2xsaW5nXCI6MjMsXCIuL3RyYW5zcG9ydC9saWIvaWZyYW1lLXdyYXBcIjoyNixcIi4vdHJhbnNwb3J0L3dlYnNvY2tldFwiOjM4LFwiLi90cmFuc3BvcnQveGRyLXBvbGxpbmdcIjozOSxcIi4vdHJhbnNwb3J0L3hkci1zdHJlYW1pbmdcIjo0MCxcIi4vdHJhbnNwb3J0L3hoci1wb2xsaW5nXCI6NDEsXCIuL3RyYW5zcG9ydC94aHItc3RyZWFtaW5nXCI6NDJ9XSwxNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKHByb2Nlc3MsZ2xvYmFsKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlclxuICAsIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuICAsIHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvZXZlbnQnKVxuICAsIHVybFV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvdXJsJylcbiAgLCBYSFIgPSBnbG9iYWwuWE1MSHR0cFJlcXVlc3RcbiAgO1xuXG52YXIgZGVidWcgPSBmdW5jdGlvbigpIHt9O1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzb2NranMtY2xpZW50OmJyb3dzZXI6eGhyJyk7XG59XG5cbmZ1bmN0aW9uIEFic3RyYWN0WEhST2JqZWN0KG1ldGhvZCwgdXJsLCBwYXlsb2FkLCBvcHRzKSB7XG4gIGRlYnVnKG1ldGhvZCwgdXJsKTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICBzZWxmLl9zdGFydChtZXRob2QsIHVybCwgcGF5bG9hZCwgb3B0cyk7XG4gIH0sIDApO1xufVxuXG5pbmhlcml0cyhBYnN0cmFjdFhIUk9iamVjdCwgRXZlbnRFbWl0dGVyKTtcblxuQWJzdHJhY3RYSFJPYmplY3QucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uKG1ldGhvZCwgdXJsLCBwYXlsb2FkLCBvcHRzKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICB0cnkge1xuICAgIHRoaXMueGhyID0gbmV3IFhIUigpO1xuICB9IGNhdGNoICh4KSB7XG4gICAgLy8gaW50ZW50aW9uYWxseSBlbXB0eVxuICB9XG5cbiAgaWYgKCF0aGlzLnhocikge1xuICAgIGRlYnVnKCdubyB4aHInKTtcbiAgICB0aGlzLmVtaXQoJ2ZpbmlzaCcsIDAsICdubyB4aHIgc3VwcG9ydCcpO1xuICAgIHRoaXMuX2NsZWFudXAoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBzZXZlcmFsIGJyb3dzZXJzIGNhY2hlIFBPU1RzXG4gIHVybCA9IHVybFV0aWxzLmFkZFF1ZXJ5KHVybCwgJ3Q9JyArICgrbmV3IERhdGUoKSkpO1xuXG4gIC8vIEV4cGxvcmVyIHRlbmRzIHRvIGtlZXAgY29ubmVjdGlvbiBvcGVuLCBldmVuIGFmdGVyIHRoZVxuICAvLyB0YWIgZ2V0cyBjbG9zZWQ6IGh0dHA6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzUyODBcbiAgdGhpcy51bmxvYWRSZWYgPSB1dGlscy51bmxvYWRBZGQoZnVuY3Rpb24oKSB7XG4gICAgZGVidWcoJ3VubG9hZCBjbGVhbnVwJyk7XG4gICAgc2VsZi5fY2xlYW51cCh0cnVlKTtcbiAgfSk7XG4gIHRyeSB7XG4gICAgdGhpcy54aHIub3BlbihtZXRob2QsIHVybCwgdHJ1ZSk7XG4gICAgaWYgKHRoaXMudGltZW91dCAmJiAndGltZW91dCcgaW4gdGhpcy54aHIpIHtcbiAgICAgIHRoaXMueGhyLnRpbWVvdXQgPSB0aGlzLnRpbWVvdXQ7XG4gICAgICB0aGlzLnhoci5vbnRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZGVidWcoJ3hociB0aW1lb3V0Jyk7XG4gICAgICAgIHNlbGYuZW1pdCgnZmluaXNoJywgMCwgJycpO1xuICAgICAgICBzZWxmLl9jbGVhbnVwKGZhbHNlKTtcbiAgICAgIH07XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgZGVidWcoJ2V4Y2VwdGlvbicsIGUpO1xuICAgIC8vIElFIHJhaXNlcyBhbiBleGNlcHRpb24gb24gd3JvbmcgcG9ydC5cbiAgICB0aGlzLmVtaXQoJ2ZpbmlzaCcsIDAsICcnKTtcbiAgICB0aGlzLl9jbGVhbnVwKGZhbHNlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoKCFvcHRzIHx8ICFvcHRzLm5vQ3JlZGVudGlhbHMpICYmIEFic3RyYWN0WEhST2JqZWN0LnN1cHBvcnRzQ09SUykge1xuICAgIGRlYnVnKCd3aXRoQ3JlZGVudGlhbHMnKTtcbiAgICAvLyBNb3ppbGxhIGRvY3Mgc2F5cyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9YTUxIdHRwUmVxdWVzdCA6XG4gICAgLy8gXCJUaGlzIG5ldmVyIGFmZmVjdHMgc2FtZS1zaXRlIHJlcXVlc3RzLlwiXG5cbiAgICB0aGlzLnhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuICB9XG4gIGlmIChvcHRzICYmIG9wdHMuaGVhZGVycykge1xuICAgIGZvciAodmFyIGtleSBpbiBvcHRzLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMueGhyLnNldFJlcXVlc3RIZWFkZXIoa2V5LCBvcHRzLmhlYWRlcnNba2V5XSk7XG4gICAgfVxuICB9XG5cbiAgdGhpcy54aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHNlbGYueGhyKSB7XG4gICAgICB2YXIgeCA9IHNlbGYueGhyO1xuICAgICAgdmFyIHRleHQsIHN0YXR1cztcbiAgICAgIGRlYnVnKCdyZWFkeVN0YXRlJywgeC5yZWFkeVN0YXRlKTtcbiAgICAgIHN3aXRjaCAoeC5yZWFkeVN0YXRlKSB7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIC8vIElFIGRvZXNuJ3QgbGlrZSBwZWVraW5nIGludG8gcmVzcG9uc2VUZXh0IG9yIHN0YXR1c1xuICAgICAgICAvLyBvbiBNaWNyb3NvZnQuWE1MSFRUUCBhbmQgcmVhZHlzdGF0ZT0zXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc3RhdHVzID0geC5zdGF0dXM7XG4gICAgICAgICAgdGV4dCA9IHgucmVzcG9uc2VUZXh0O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gaW50ZW50aW9uYWxseSBlbXB0eVxuICAgICAgICB9XG4gICAgICAgIGRlYnVnKCdzdGF0dXMnLCBzdGF0dXMpO1xuICAgICAgICAvLyBJRSByZXR1cm5zIDEyMjMgZm9yIDIwNDogaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTQ1MFxuICAgICAgICBpZiAoc3RhdHVzID09PSAxMjIzKSB7XG4gICAgICAgICAgc3RhdHVzID0gMjA0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSUUgZG9lcyByZXR1cm4gcmVhZHlzdGF0ZSA9PSAzIGZvciA0MDQgYW5zd2Vycy5cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMjAwICYmIHRleHQgJiYgdGV4dC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZGVidWcoJ2NodW5rJyk7XG4gICAgICAgICAgc2VsZi5lbWl0KCdjaHVuaycsIHN0YXR1cywgdGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDQ6XG4gICAgICAgIHN0YXR1cyA9IHguc3RhdHVzO1xuICAgICAgICBkZWJ1Zygnc3RhdHVzJywgc3RhdHVzKTtcbiAgICAgICAgLy8gSUUgcmV0dXJucyAxMjIzIGZvciAyMDQ6IGh0dHA6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzE0NTBcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gMTIyMykge1xuICAgICAgICAgIHN0YXR1cyA9IDIwNDtcbiAgICAgICAgfVxuICAgICAgICAvLyBJRSByZXR1cm5zIHRoaXMgZm9yIGEgYmFkIHBvcnRcbiAgICAgICAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9hYTM4Mzc3MCh2PXZzLjg1KS5hc3B4XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDEyMDA1IHx8IHN0YXR1cyA9PT0gMTIwMjkpIHtcbiAgICAgICAgICBzdGF0dXMgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVidWcoJ2ZpbmlzaCcsIHN0YXR1cywgeC5yZXNwb25zZVRleHQpO1xuICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcsIHN0YXR1cywgeC5yZXNwb25zZVRleHQpO1xuICAgICAgICBzZWxmLl9jbGVhbnVwKGZhbHNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHRyeSB7XG4gICAgc2VsZi54aHIuc2VuZChwYXlsb2FkKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHNlbGYuZW1pdCgnZmluaXNoJywgMCwgJycpO1xuICAgIHNlbGYuX2NsZWFudXAoZmFsc2UpO1xuICB9XG59O1xuXG5BYnN0cmFjdFhIUk9iamVjdC5wcm90b3R5cGUuX2NsZWFudXAgPSBmdW5jdGlvbihhYm9ydCkge1xuICBkZWJ1ZygnY2xlYW51cCcpO1xuICBpZiAoIXRoaXMueGhyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gIHV0aWxzLnVubG9hZERlbCh0aGlzLnVubG9hZFJlZik7XG5cbiAgLy8gSUUgbmVlZHMgdGhpcyBmaWVsZCB0byBiZSBhIGZ1bmN0aW9uXG4gIHRoaXMueGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge307XG4gIGlmICh0aGlzLnhoci5vbnRpbWVvdXQpIHtcbiAgICB0aGlzLnhoci5vbnRpbWVvdXQgPSBudWxsO1xuICB9XG5cbiAgaWYgKGFib3J0KSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMueGhyLmFib3J0KCk7XG4gICAgfSBjYXRjaCAoeCkge1xuICAgICAgLy8gaW50ZW50aW9uYWxseSBlbXB0eVxuICAgIH1cbiAgfVxuICB0aGlzLnVubG9hZFJlZiA9IHRoaXMueGhyID0gbnVsbDtcbn07XG5cbkFic3RyYWN0WEhST2JqZWN0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuICBkZWJ1ZygnY2xvc2UnKTtcbiAgdGhpcy5fY2xlYW51cCh0cnVlKTtcbn07XG5cbkFic3RyYWN0WEhST2JqZWN0LmVuYWJsZWQgPSAhIVhIUjtcbi8vIG92ZXJyaWRlIFhNTEh0dHBSZXF1ZXN0IGZvciBJRTYvN1xuLy8gb2JmdXNjYXRlIHRvIGF2b2lkIGZpcmV3YWxsc1xudmFyIGF4byA9IFsnQWN0aXZlJ10uY29uY2F0KCdPYmplY3QnKS5qb2luKCdYJyk7XG5pZiAoIUFic3RyYWN0WEhST2JqZWN0LmVuYWJsZWQgJiYgKGF4byBpbiBnbG9iYWwpKSB7XG4gIGRlYnVnKCdvdmVycmlkaW5nIHhtbGh0dHByZXF1ZXN0Jyk7XG4gIFhIUiA9IGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gbmV3IGdsb2JhbFtheG9dKCdNaWNyb3NvZnQuWE1MSFRUUCcpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcbiAgQWJzdHJhY3RYSFJPYmplY3QuZW5hYmxlZCA9ICEhbmV3IFhIUigpO1xufVxuXG52YXIgY29ycyA9IGZhbHNlO1xudHJ5IHtcbiAgY29ycyA9ICd3aXRoQ3JlZGVudGlhbHMnIGluIG5ldyBYSFIoKTtcbn0gY2F0Y2ggKGlnbm9yZWQpIHtcbiAgLy8gaW50ZW50aW9uYWxseSBlbXB0eVxufVxuXG5BYnN0cmFjdFhIUk9iamVjdC5zdXBwb3J0c0NPUlMgPSBjb3JzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFic3RyYWN0WEhST2JqZWN0O1xuXG59KS5jYWxsKHRoaXMseyBlbnY6IHt9IH0sdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcblxufSx7XCIuLi8uLi91dGlscy9ldmVudFwiOjQ2LFwiLi4vLi4vdXRpbHMvdXJsXCI6NTIsXCJkZWJ1Z1wiOjU1LFwiZXZlbnRzXCI6MyxcImluaGVyaXRzXCI6NTd9XSwxODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKGdsb2JhbCl7XG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5FdmVudFNvdXJjZTtcblxufSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG5cbn0se31dLDE5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAoZ2xvYmFsKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIERyaXZlciA9IGdsb2JhbC5XZWJTb2NrZXQgfHwgZ2xvYmFsLk1veldlYlNvY2tldDtcbmlmIChEcml2ZXIpIHtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBXZWJTb2NrZXRCcm93c2VyRHJpdmVyKHVybCkge1xuXHRcdHJldHVybiBuZXcgRHJpdmVyKHVybCk7XG5cdH07XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cyA9IHVuZGVmaW5lZDtcbn1cblxufSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG5cbn0se31dLDIwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuICAsIEFqYXhCYXNlZFRyYW5zcG9ydCA9IHJlcXVpcmUoJy4vbGliL2FqYXgtYmFzZWQnKVxuICAsIEV2ZW50U291cmNlUmVjZWl2ZXIgPSByZXF1aXJlKCcuL3JlY2VpdmVyL2V2ZW50c291cmNlJylcbiAgLCBYSFJDb3JzT2JqZWN0ID0gcmVxdWlyZSgnLi9zZW5kZXIveGhyLWNvcnMnKVxuICAsIEV2ZW50U291cmNlRHJpdmVyID0gcmVxdWlyZSgnZXZlbnRzb3VyY2UnKVxuICA7XG5cbmZ1bmN0aW9uIEV2ZW50U291cmNlVHJhbnNwb3J0KHRyYW5zVXJsKSB7XG4gIGlmICghRXZlbnRTb3VyY2VUcmFuc3BvcnQuZW5hYmxlZCgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUcmFuc3BvcnQgY3JlYXRlZCB3aGVuIGRpc2FibGVkJyk7XG4gIH1cblxuICBBamF4QmFzZWRUcmFuc3BvcnQuY2FsbCh0aGlzLCB0cmFuc1VybCwgJy9ldmVudHNvdXJjZScsIEV2ZW50U291cmNlUmVjZWl2ZXIsIFhIUkNvcnNPYmplY3QpO1xufVxuXG5pbmhlcml0cyhFdmVudFNvdXJjZVRyYW5zcG9ydCwgQWpheEJhc2VkVHJhbnNwb3J0KTtcblxuRXZlbnRTb3VyY2VUcmFuc3BvcnQuZW5hYmxlZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gISFFdmVudFNvdXJjZURyaXZlcjtcbn07XG5cbkV2ZW50U291cmNlVHJhbnNwb3J0LnRyYW5zcG9ydE5hbWUgPSAnZXZlbnRzb3VyY2UnO1xuRXZlbnRTb3VyY2VUcmFuc3BvcnQucm91bmRUcmlwcyA9IDI7XG5cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRTb3VyY2VUcmFuc3BvcnQ7XG5cbn0se1wiLi9saWIvYWpheC1iYXNlZFwiOjI0LFwiLi9yZWNlaXZlci9ldmVudHNvdXJjZVwiOjI5LFwiLi9zZW5kZXIveGhyLWNvcnNcIjozNSxcImV2ZW50c291cmNlXCI6MTgsXCJpbmhlcml0c1wiOjU3fV0sMjE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG4gICwgSHRtbGZpbGVSZWNlaXZlciA9IHJlcXVpcmUoJy4vcmVjZWl2ZXIvaHRtbGZpbGUnKVxuICAsIFhIUkxvY2FsT2JqZWN0ID0gcmVxdWlyZSgnLi9zZW5kZXIveGhyLWxvY2FsJylcbiAgLCBBamF4QmFzZWRUcmFuc3BvcnQgPSByZXF1aXJlKCcuL2xpYi9hamF4LWJhc2VkJylcbiAgO1xuXG5mdW5jdGlvbiBIdG1sRmlsZVRyYW5zcG9ydCh0cmFuc1VybCkge1xuICBpZiAoIUh0bWxmaWxlUmVjZWl2ZXIuZW5hYmxlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVHJhbnNwb3J0IGNyZWF0ZWQgd2hlbiBkaXNhYmxlZCcpO1xuICB9XG4gIEFqYXhCYXNlZFRyYW5zcG9ydC5jYWxsKHRoaXMsIHRyYW5zVXJsLCAnL2h0bWxmaWxlJywgSHRtbGZpbGVSZWNlaXZlciwgWEhSTG9jYWxPYmplY3QpO1xufVxuXG5pbmhlcml0cyhIdG1sRmlsZVRyYW5zcG9ydCwgQWpheEJhc2VkVHJhbnNwb3J0KTtcblxuSHRtbEZpbGVUcmFuc3BvcnQuZW5hYmxlZCA9IGZ1bmN0aW9uKGluZm8pIHtcbiAgcmV0dXJuIEh0bWxmaWxlUmVjZWl2ZXIuZW5hYmxlZCAmJiBpbmZvLnNhbWVPcmlnaW47XG59O1xuXG5IdG1sRmlsZVRyYW5zcG9ydC50cmFuc3BvcnROYW1lID0gJ2h0bWxmaWxlJztcbkh0bWxGaWxlVHJhbnNwb3J0LnJvdW5kVHJpcHMgPSAyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEh0bWxGaWxlVHJhbnNwb3J0O1xuXG59LHtcIi4vbGliL2FqYXgtYmFzZWRcIjoyNCxcIi4vcmVjZWl2ZXIvaHRtbGZpbGVcIjozMCxcIi4vc2VuZGVyL3hoci1sb2NhbFwiOjM3LFwiaW5oZXJpdHNcIjo1N31dLDIyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAocHJvY2Vzcyl7XG4ndXNlIHN0cmljdCc7XG5cbi8vIEZldyBjb29sIHRyYW5zcG9ydHMgZG8gd29yayBvbmx5IGZvciBzYW1lLW9yaWdpbi4gSW4gb3JkZXIgdG8gbWFrZVxuLy8gdGhlbSB3b3JrIGNyb3NzLWRvbWFpbiB3ZSBzaGFsbCB1c2UgaWZyYW1lLCBzZXJ2ZWQgZnJvbSB0aGVcbi8vIHJlbW90ZSBkb21haW4uIE5ldyBicm93c2VycyBoYXZlIGNhcGFiaWxpdGllcyB0byBjb21tdW5pY2F0ZSB3aXRoXG4vLyBjcm9zcyBkb21haW4gaWZyYW1lIHVzaW5nIHBvc3RNZXNzYWdlKCkuIEluIElFIGl0IHdhcyBpbXBsZW1lbnRlZFxuLy8gZnJvbSBJRSA4KywgYnV0IG9mIGNvdXJzZSwgSUUgZ290IHNvbWUgZGV0YWlscyB3cm9uZzpcbi8vICAgIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9jYzE5NzAxNSh2PVZTLjg1KS5hc3B4XG4vLyAgICBodHRwOi8vc3RldmVzb3VkZXJzLmNvbS9taXNjL3Rlc3QtcG9zdG1lc3NhZ2UucGhwXG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbiAgLCBKU09OMyA9IHJlcXVpcmUoJ2pzb24zJylcbiAgLCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXJcbiAgLCB2ZXJzaW9uID0gcmVxdWlyZSgnLi4vdmVyc2lvbicpXG4gICwgdXJsVXRpbHMgPSByZXF1aXJlKCcuLi91dGlscy91cmwnKVxuICAsIGlmcmFtZVV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMvaWZyYW1lJylcbiAgLCBldmVudFV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMvZXZlbnQnKVxuICAsIHJhbmRvbSA9IHJlcXVpcmUoJy4uL3V0aWxzL3JhbmRvbScpXG4gIDtcblxudmFyIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc29ja2pzLWNsaWVudDp0cmFuc3BvcnQ6aWZyYW1lJyk7XG59XG5cbmZ1bmN0aW9uIElmcmFtZVRyYW5zcG9ydCh0cmFuc3BvcnQsIHRyYW5zVXJsLCBiYXNlVXJsKSB7XG4gIGlmICghSWZyYW1lVHJhbnNwb3J0LmVuYWJsZWQoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVHJhbnNwb3J0IGNyZWF0ZWQgd2hlbiBkaXNhYmxlZCcpO1xuICB9XG4gIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy5vcmlnaW4gPSB1cmxVdGlscy5nZXRPcmlnaW4oYmFzZVVybCk7XG4gIHRoaXMuYmFzZVVybCA9IGJhc2VVcmw7XG4gIHRoaXMudHJhbnNVcmwgPSB0cmFuc1VybDtcbiAgdGhpcy50cmFuc3BvcnQgPSB0cmFuc3BvcnQ7XG4gIHRoaXMud2luZG93SWQgPSByYW5kb20uc3RyaW5nKDgpO1xuXG4gIHZhciBpZnJhbWVVcmwgPSB1cmxVdGlscy5hZGRQYXRoKGJhc2VVcmwsICcvaWZyYW1lLmh0bWwnKSArICcjJyArIHRoaXMud2luZG93SWQ7XG4gIGRlYnVnKHRyYW5zcG9ydCwgdHJhbnNVcmwsIGlmcmFtZVVybCk7XG5cbiAgdGhpcy5pZnJhbWVPYmogPSBpZnJhbWVVdGlscy5jcmVhdGVJZnJhbWUoaWZyYW1lVXJsLCBmdW5jdGlvbihyKSB7XG4gICAgZGVidWcoJ2VyciBjYWxsYmFjaycpO1xuICAgIHNlbGYuZW1pdCgnY2xvc2UnLCAxMDA2LCAnVW5hYmxlIHRvIGxvYWQgYW4gaWZyYW1lICgnICsgciArICcpJyk7XG4gICAgc2VsZi5jbG9zZSgpO1xuICB9KTtcblxuICB0aGlzLm9ubWVzc2FnZUNhbGxiYWNrID0gdGhpcy5fbWVzc2FnZS5iaW5kKHRoaXMpO1xuICBldmVudFV0aWxzLmF0dGFjaEV2ZW50KCdtZXNzYWdlJywgdGhpcy5vbm1lc3NhZ2VDYWxsYmFjayk7XG59XG5cbmluaGVyaXRzKElmcmFtZVRyYW5zcG9ydCwgRXZlbnRFbWl0dGVyKTtcblxuSWZyYW1lVHJhbnNwb3J0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuICBkZWJ1ZygnY2xvc2UnKTtcbiAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgaWYgKHRoaXMuaWZyYW1lT2JqKSB7XG4gICAgZXZlbnRVdGlscy5kZXRhY2hFdmVudCgnbWVzc2FnZScsIHRoaXMub25tZXNzYWdlQ2FsbGJhY2spO1xuICAgIHRyeSB7XG4gICAgICAvLyBXaGVuIHRoZSBpZnJhbWUgaXMgbm90IGxvYWRlZCwgSUUgcmFpc2VzIGFuIGV4Y2VwdGlvblxuICAgICAgLy8gb24gJ2NvbnRlbnRXaW5kb3cnLlxuICAgICAgdGhpcy5wb3N0TWVzc2FnZSgnYycpO1xuICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgIC8vIGludGVudGlvbmFsbHkgZW1wdHlcbiAgICB9XG4gICAgdGhpcy5pZnJhbWVPYmouY2xlYW51cCgpO1xuICAgIHRoaXMuaWZyYW1lT2JqID0gbnVsbDtcbiAgICB0aGlzLm9ubWVzc2FnZUNhbGxiYWNrID0gdGhpcy5pZnJhbWVPYmogPSBudWxsO1xuICB9XG59O1xuXG5JZnJhbWVUcmFuc3BvcnQucHJvdG90eXBlLl9tZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICBkZWJ1ZygnbWVzc2FnZScsIGUuZGF0YSk7XG4gIGlmICghdXJsVXRpbHMuaXNPcmlnaW5FcXVhbChlLm9yaWdpbiwgdGhpcy5vcmlnaW4pKSB7XG4gICAgZGVidWcoJ25vdCBzYW1lIG9yaWdpbicsIGUub3JpZ2luLCB0aGlzLm9yaWdpbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGlmcmFtZU1lc3NhZ2U7XG4gIHRyeSB7XG4gICAgaWZyYW1lTWVzc2FnZSA9IEpTT04zLnBhcnNlKGUuZGF0YSk7XG4gIH0gY2F0Y2ggKGlnbm9yZWQpIHtcbiAgICBkZWJ1ZygnYmFkIGpzb24nLCBlLmRhdGEpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChpZnJhbWVNZXNzYWdlLndpbmRvd0lkICE9PSB0aGlzLndpbmRvd0lkKSB7XG4gICAgZGVidWcoJ21pc21hdGNoZWQgd2luZG93IGlkJywgaWZyYW1lTWVzc2FnZS53aW5kb3dJZCwgdGhpcy53aW5kb3dJZCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3dpdGNoIChpZnJhbWVNZXNzYWdlLnR5cGUpIHtcbiAgY2FzZSAncyc6XG4gICAgdGhpcy5pZnJhbWVPYmoubG9hZGVkKCk7XG4gICAgLy8gd2luZG93IGdsb2JhbCBkZXBlbmRlbmN5XG4gICAgdGhpcy5wb3N0TWVzc2FnZSgncycsIEpTT04zLnN0cmluZ2lmeShbXG4gICAgICB2ZXJzaW9uXG4gICAgLCB0aGlzLnRyYW5zcG9ydFxuICAgICwgdGhpcy50cmFuc1VybFxuICAgICwgdGhpcy5iYXNlVXJsXG4gICAgXSkpO1xuICAgIGJyZWFrO1xuICBjYXNlICd0JzpcbiAgICB0aGlzLmVtaXQoJ21lc3NhZ2UnLCBpZnJhbWVNZXNzYWdlLmRhdGEpO1xuICAgIGJyZWFrO1xuICBjYXNlICdjJzpcbiAgICB2YXIgY2RhdGE7XG4gICAgdHJ5IHtcbiAgICAgIGNkYXRhID0gSlNPTjMucGFyc2UoaWZyYW1lTWVzc2FnZS5kYXRhKTtcbiAgICB9IGNhdGNoIChpZ25vcmVkKSB7XG4gICAgICBkZWJ1ZygnYmFkIGpzb24nLCBpZnJhbWVNZXNzYWdlLmRhdGEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmVtaXQoJ2Nsb3NlJywgY2RhdGFbMF0sIGNkYXRhWzFdKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gICAgYnJlYWs7XG4gIH1cbn07XG5cbklmcmFtZVRyYW5zcG9ydC5wcm90b3R5cGUucG9zdE1lc3NhZ2UgPSBmdW5jdGlvbih0eXBlLCBkYXRhKSB7XG4gIGRlYnVnKCdwb3N0TWVzc2FnZScsIHR5cGUsIGRhdGEpO1xuICB0aGlzLmlmcmFtZU9iai5wb3N0KEpTT04zLnN0cmluZ2lmeSh7XG4gICAgd2luZG93SWQ6IHRoaXMud2luZG93SWRcbiAgLCB0eXBlOiB0eXBlXG4gICwgZGF0YTogZGF0YSB8fCAnJ1xuICB9KSwgdGhpcy5vcmlnaW4pO1xufTtcblxuSWZyYW1lVHJhbnNwb3J0LnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24obWVzc2FnZSkge1xuICBkZWJ1Zygnc2VuZCcsIG1lc3NhZ2UpO1xuICB0aGlzLnBvc3RNZXNzYWdlKCdtJywgbWVzc2FnZSk7XG59O1xuXG5JZnJhbWVUcmFuc3BvcnQuZW5hYmxlZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gaWZyYW1lVXRpbHMuaWZyYW1lRW5hYmxlZDtcbn07XG5cbklmcmFtZVRyYW5zcG9ydC50cmFuc3BvcnROYW1lID0gJ2lmcmFtZSc7XG5JZnJhbWVUcmFuc3BvcnQucm91bmRUcmlwcyA9IDI7XG5cbm1vZHVsZS5leHBvcnRzID0gSWZyYW1lVHJhbnNwb3J0O1xuXG59KS5jYWxsKHRoaXMseyBlbnY6IHt9IH0pXG5cbn0se1wiLi4vdXRpbHMvZXZlbnRcIjo0NixcIi4uL3V0aWxzL2lmcmFtZVwiOjQ3LFwiLi4vdXRpbHMvcmFuZG9tXCI6NTAsXCIuLi91dGlscy91cmxcIjo1MixcIi4uL3ZlcnNpb25cIjo1MyxcImRlYnVnXCI6NTUsXCJldmVudHNcIjozLFwiaW5oZXJpdHNcIjo1NyxcImpzb24zXCI6NTh9XSwyMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKGdsb2JhbCl7XG4ndXNlIHN0cmljdCc7XG5cbi8vIFRoZSBzaW1wbGVzdCBhbmQgbW9zdCByb2J1c3QgdHJhbnNwb3J0LCB1c2luZyB0aGUgd2VsbC1rbm93IGNyb3NzXG4vLyBkb21haW4gaGFjayAtIEpTT05QLiBUaGlzIHRyYW5zcG9ydCBpcyBxdWl0ZSBpbmVmZmljaWVudCAtIG9uZVxuLy8gbWVzc2FnZSBjb3VsZCB1c2UgdXAgdG8gb25lIGh0dHAgcmVxdWVzdC4gQnV0IGF0IGxlYXN0IGl0IHdvcmtzIGFsbW9zdFxuLy8gZXZlcnl3aGVyZS5cbi8vIEtub3duIGxpbWl0YXRpb25zOlxuLy8gICBvIHlvdSB3aWxsIGdldCBhIHNwaW5uaW5nIGN1cnNvclxuLy8gICBvIGZvciBLb25xdWVyb3IgYSBkdW1iIHRpbWVyIGlzIG5lZWRlZCB0byBkZXRlY3QgZXJyb3JzXG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbiAgLCBTZW5kZXJSZWNlaXZlciA9IHJlcXVpcmUoJy4vbGliL3NlbmRlci1yZWNlaXZlcicpXG4gICwgSnNvbnBSZWNlaXZlciA9IHJlcXVpcmUoJy4vcmVjZWl2ZXIvanNvbnAnKVxuICAsIGpzb25wU2VuZGVyID0gcmVxdWlyZSgnLi9zZW5kZXIvanNvbnAnKVxuICA7XG5cbmZ1bmN0aW9uIEpzb25QVHJhbnNwb3J0KHRyYW5zVXJsKSB7XG4gIGlmICghSnNvblBUcmFuc3BvcnQuZW5hYmxlZCgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUcmFuc3BvcnQgY3JlYXRlZCB3aGVuIGRpc2FibGVkJyk7XG4gIH1cbiAgU2VuZGVyUmVjZWl2ZXIuY2FsbCh0aGlzLCB0cmFuc1VybCwgJy9qc29ucCcsIGpzb25wU2VuZGVyLCBKc29ucFJlY2VpdmVyKTtcbn1cblxuaW5oZXJpdHMoSnNvblBUcmFuc3BvcnQsIFNlbmRlclJlY2VpdmVyKTtcblxuSnNvblBUcmFuc3BvcnQuZW5hYmxlZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gISFnbG9iYWwuZG9jdW1lbnQ7XG59O1xuXG5Kc29uUFRyYW5zcG9ydC50cmFuc3BvcnROYW1lID0gJ2pzb25wLXBvbGxpbmcnO1xuSnNvblBUcmFuc3BvcnQucm91bmRUcmlwcyA9IDE7XG5Kc29uUFRyYW5zcG9ydC5uZWVkQm9keSA9IHRydWU7XG5cbm1vZHVsZS5leHBvcnRzID0gSnNvblBUcmFuc3BvcnQ7XG5cbn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KVxuXG59LHtcIi4vbGliL3NlbmRlci1yZWNlaXZlclwiOjI4LFwiLi9yZWNlaXZlci9qc29ucFwiOjMxLFwiLi9zZW5kZXIvanNvbnBcIjozMyxcImluaGVyaXRzXCI6NTd9XSwyNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKHByb2Nlc3Mpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG4gICwgdXJsVXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy91cmwnKVxuICAsIFNlbmRlclJlY2VpdmVyID0gcmVxdWlyZSgnLi9zZW5kZXItcmVjZWl2ZXInKVxuICA7XG5cbnZhciBkZWJ1ZyA9IGZ1bmN0aW9uKCkge307XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ3NvY2tqcy1jbGllbnQ6YWpheC1iYXNlZCcpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBamF4U2VuZGVyKEFqYXhPYmplY3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHVybCwgcGF5bG9hZCwgY2FsbGJhY2spIHtcbiAgICBkZWJ1ZygnY3JlYXRlIGFqYXggc2VuZGVyJywgdXJsLCBwYXlsb2FkKTtcbiAgICB2YXIgb3B0ID0ge307XG4gICAgaWYgKHR5cGVvZiBwYXlsb2FkID09PSAnc3RyaW5nJykge1xuICAgICAgb3B0LmhlYWRlcnMgPSB7J0NvbnRlbnQtdHlwZSc6ICd0ZXh0L3BsYWluJ307XG4gICAgfVxuICAgIHZhciBhamF4VXJsID0gdXJsVXRpbHMuYWRkUGF0aCh1cmwsICcveGhyX3NlbmQnKTtcbiAgICB2YXIgeG8gPSBuZXcgQWpheE9iamVjdCgnUE9TVCcsIGFqYXhVcmwsIHBheWxvYWQsIG9wdCk7XG4gICAgeG8ub25jZSgnZmluaXNoJywgZnVuY3Rpb24oc3RhdHVzKSB7XG4gICAgICBkZWJ1ZygnZmluaXNoJywgc3RhdHVzKTtcbiAgICAgIHhvID0gbnVsbDtcblxuICAgICAgaWYgKHN0YXR1cyAhPT0gMjAwICYmIHN0YXR1cyAhPT0gMjA0KSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoJ2h0dHAgc3RhdHVzICcgKyBzdGF0dXMpKTtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgZGVidWcoJ2Fib3J0Jyk7XG4gICAgICB4by5jbG9zZSgpO1xuICAgICAgeG8gPSBudWxsO1xuXG4gICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdBYm9ydGVkJyk7XG4gICAgICBlcnIuY29kZSA9IDEwMDA7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgIH07XG4gIH07XG59XG5cbmZ1bmN0aW9uIEFqYXhCYXNlZFRyYW5zcG9ydCh0cmFuc1VybCwgdXJsU3VmZml4LCBSZWNlaXZlciwgQWpheE9iamVjdCkge1xuICBTZW5kZXJSZWNlaXZlci5jYWxsKHRoaXMsIHRyYW5zVXJsLCB1cmxTdWZmaXgsIGNyZWF0ZUFqYXhTZW5kZXIoQWpheE9iamVjdCksIFJlY2VpdmVyLCBBamF4T2JqZWN0KTtcbn1cblxuaW5oZXJpdHMoQWpheEJhc2VkVHJhbnNwb3J0LCBTZW5kZXJSZWNlaXZlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gQWpheEJhc2VkVHJhbnNwb3J0O1xuXG59KS5jYWxsKHRoaXMseyBlbnY6IHt9IH0pXG5cbn0se1wiLi4vLi4vdXRpbHMvdXJsXCI6NTIsXCIuL3NlbmRlci1yZWNlaXZlclwiOjI4LFwiZGVidWdcIjo1NSxcImluaGVyaXRzXCI6NTd9XSwyNTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKHByb2Nlc3Mpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG4gICwgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyXG4gIDtcblxudmFyIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc29ja2pzLWNsaWVudDpidWZmZXJlZC1zZW5kZXInKTtcbn1cblxuZnVuY3Rpb24gQnVmZmVyZWRTZW5kZXIodXJsLCBzZW5kZXIpIHtcbiAgZGVidWcodXJsKTtcbiAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG4gIHRoaXMuc2VuZEJ1ZmZlciA9IFtdO1xuICB0aGlzLnNlbmRlciA9IHNlbmRlcjtcbiAgdGhpcy51cmwgPSB1cmw7XG59XG5cbmluaGVyaXRzKEJ1ZmZlcmVkU2VuZGVyLCBFdmVudEVtaXR0ZXIpO1xuXG5CdWZmZXJlZFNlbmRlci5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcbiAgZGVidWcoJ3NlbmQnLCBtZXNzYWdlKTtcbiAgdGhpcy5zZW5kQnVmZmVyLnB1c2gobWVzc2FnZSk7XG4gIGlmICghdGhpcy5zZW5kU3RvcCkge1xuICAgIHRoaXMuc2VuZFNjaGVkdWxlKCk7XG4gIH1cbn07XG5cbi8vIEZvciBwb2xsaW5nIHRyYW5zcG9ydHMgaW4gYSBzaXR1YXRpb24gd2hlbiBpbiB0aGUgbWVzc2FnZSBjYWxsYmFjayxcbi8vIG5ldyBtZXNzYWdlIGlzIGJlaW5nIHNlbmQuIElmIHRoZSBzZW5kaW5nIGNvbm5lY3Rpb24gd2FzIHN0YXJ0ZWRcbi8vIGJlZm9yZSByZWNlaXZpbmcgb25lLCBpdCBpcyBwb3NzaWJsZSB0byBzYXR1cmF0ZSB0aGUgbmV0d29yayBhbmRcbi8vIHRpbWVvdXQgZHVlIHRvIHRoZSBsYWNrIG9mIHJlY2VpdmluZyBzb2NrZXQuIFRvIGF2b2lkIHRoYXQgd2UgZGVsYXlcbi8vIHNlbmRpbmcgbWVzc2FnZXMgYnkgc29tZSBzbWFsbCB0aW1lLCBpbiBvcmRlciB0byBsZXQgcmVjZWl2aW5nXG4vLyBjb25uZWN0aW9uIGJlIHN0YXJ0ZWQgYmVmb3JlaGFuZC4gVGhpcyBpcyBvbmx5IGEgaGFsZm1lYXN1cmUgYW5kXG4vLyBkb2VzIG5vdCBmaXggdGhlIGJpZyBwcm9ibGVtLCBidXQgaXQgZG9lcyBtYWtlIHRoZSB0ZXN0cyBnbyBtb3JlXG4vLyBzdGFibGUgb24gc2xvdyBuZXR3b3Jrcy5cbkJ1ZmZlcmVkU2VuZGVyLnByb3RvdHlwZS5zZW5kU2NoZWR1bGVXYWl0ID0gZnVuY3Rpb24oKSB7XG4gIGRlYnVnKCdzZW5kU2NoZWR1bGVXYWl0Jyk7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHRyZWY7XG4gIHRoaXMuc2VuZFN0b3AgPSBmdW5jdGlvbigpIHtcbiAgICBkZWJ1Zygnc2VuZFN0b3AnKTtcbiAgICBzZWxmLnNlbmRTdG9wID0gbnVsbDtcbiAgICBjbGVhclRpbWVvdXQodHJlZik7XG4gIH07XG4gIHRyZWYgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgIGRlYnVnKCd0aW1lb3V0Jyk7XG4gICAgc2VsZi5zZW5kU3RvcCA9IG51bGw7XG4gICAgc2VsZi5zZW5kU2NoZWR1bGUoKTtcbiAgfSwgMjUpO1xufTtcblxuQnVmZmVyZWRTZW5kZXIucHJvdG90eXBlLnNlbmRTY2hlZHVsZSA9IGZ1bmN0aW9uKCkge1xuICBkZWJ1Zygnc2VuZFNjaGVkdWxlJywgdGhpcy5zZW5kQnVmZmVyLmxlbmd0aCk7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgaWYgKHRoaXMuc2VuZEJ1ZmZlci5sZW5ndGggPiAwKSB7XG4gICAgdmFyIHBheWxvYWQgPSAnWycgKyB0aGlzLnNlbmRCdWZmZXIuam9pbignLCcpICsgJ10nO1xuICAgIHRoaXMuc2VuZFN0b3AgPSB0aGlzLnNlbmRlcih0aGlzLnVybCwgcGF5bG9hZCwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICBzZWxmLnNlbmRTdG9wID0gbnVsbDtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgZGVidWcoJ2Vycm9yJywgZXJyKTtcbiAgICAgICAgc2VsZi5lbWl0KCdjbG9zZScsIGVyci5jb2RlIHx8IDEwMDYsICdTZW5kaW5nIGVycm9yOiAnICsgZXJyKTtcbiAgICAgICAgc2VsZi5jbG9zZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZi5zZW5kU2NoZWR1bGVXYWl0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5zZW5kQnVmZmVyID0gW107XG4gIH1cbn07XG5cbkJ1ZmZlcmVkU2VuZGVyLnByb3RvdHlwZS5fY2xlYW51cCA9IGZ1bmN0aW9uKCkge1xuICBkZWJ1ZygnX2NsZWFudXAnKTtcbiAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbn07XG5cbkJ1ZmZlcmVkU2VuZGVyLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuICBkZWJ1ZygnY2xvc2UnKTtcbiAgdGhpcy5fY2xlYW51cCgpO1xuICBpZiAodGhpcy5zZW5kU3RvcCkge1xuICAgIHRoaXMuc2VuZFN0b3AoKTtcbiAgICB0aGlzLnNlbmRTdG9wID0gbnVsbDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBCdWZmZXJlZFNlbmRlcjtcblxufSkuY2FsbCh0aGlzLHsgZW52OiB7fSB9KVxuXG59LHtcImRlYnVnXCI6NTUsXCJldmVudHNcIjozLFwiaW5oZXJpdHNcIjo1N31dLDI2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAoZ2xvYmFsKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuICAsIElmcmFtZVRyYW5zcG9ydCA9IHJlcXVpcmUoJy4uL2lmcmFtZScpXG4gICwgb2JqZWN0VXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9vYmplY3QnKVxuICA7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odHJhbnNwb3J0KSB7XG5cbiAgZnVuY3Rpb24gSWZyYW1lV3JhcFRyYW5zcG9ydCh0cmFuc1VybCwgYmFzZVVybCkge1xuICAgIElmcmFtZVRyYW5zcG9ydC5jYWxsKHRoaXMsIHRyYW5zcG9ydC50cmFuc3BvcnROYW1lLCB0cmFuc1VybCwgYmFzZVVybCk7XG4gIH1cblxuICBpbmhlcml0cyhJZnJhbWVXcmFwVHJhbnNwb3J0LCBJZnJhbWVUcmFuc3BvcnQpO1xuXG4gIElmcmFtZVdyYXBUcmFuc3BvcnQuZW5hYmxlZCA9IGZ1bmN0aW9uKHVybCwgaW5mbykge1xuICAgIGlmICghZ2xvYmFsLmRvY3VtZW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGlmcmFtZUluZm8gPSBvYmplY3RVdGlscy5leHRlbmQoe30sIGluZm8pO1xuICAgIGlmcmFtZUluZm8uc2FtZU9yaWdpbiA9IHRydWU7XG4gICAgcmV0dXJuIHRyYW5zcG9ydC5lbmFibGVkKGlmcmFtZUluZm8pICYmIElmcmFtZVRyYW5zcG9ydC5lbmFibGVkKCk7XG4gIH07XG5cbiAgSWZyYW1lV3JhcFRyYW5zcG9ydC50cmFuc3BvcnROYW1lID0gJ2lmcmFtZS0nICsgdHJhbnNwb3J0LnRyYW5zcG9ydE5hbWU7XG4gIElmcmFtZVdyYXBUcmFuc3BvcnQubmVlZEJvZHkgPSB0cnVlO1xuICBJZnJhbWVXcmFwVHJhbnNwb3J0LnJvdW5kVHJpcHMgPSBJZnJhbWVUcmFuc3BvcnQucm91bmRUcmlwcyArIHRyYW5zcG9ydC5yb3VuZFRyaXBzIC0gMTsgLy8gaHRtbCwgamF2YXNjcmlwdCAoMikgKyB0cmFuc3BvcnQgLSBubyBDT1JTICgxKVxuXG4gIElmcmFtZVdyYXBUcmFuc3BvcnQuZmFjYWRlVHJhbnNwb3J0ID0gdHJhbnNwb3J0O1xuXG4gIHJldHVybiBJZnJhbWVXcmFwVHJhbnNwb3J0O1xufTtcblxufSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG5cbn0se1wiLi4vLi4vdXRpbHMvb2JqZWN0XCI6NDksXCIuLi9pZnJhbWVcIjoyMixcImluaGVyaXRzXCI6NTd9XSwyNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKHByb2Nlc3Mpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG4gICwgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyXG4gIDtcblxudmFyIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc29ja2pzLWNsaWVudDpwb2xsaW5nJyk7XG59XG5cbmZ1bmN0aW9uIFBvbGxpbmcoUmVjZWl2ZXIsIHJlY2VpdmVVcmwsIEFqYXhPYmplY3QpIHtcbiAgZGVidWcocmVjZWl2ZVVybCk7XG4gIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuICB0aGlzLlJlY2VpdmVyID0gUmVjZWl2ZXI7XG4gIHRoaXMucmVjZWl2ZVVybCA9IHJlY2VpdmVVcmw7XG4gIHRoaXMuQWpheE9iamVjdCA9IEFqYXhPYmplY3Q7XG4gIHRoaXMuX3NjaGVkdWxlUmVjZWl2ZXIoKTtcbn1cblxuaW5oZXJpdHMoUG9sbGluZywgRXZlbnRFbWl0dGVyKTtcblxuUG9sbGluZy5wcm90b3R5cGUuX3NjaGVkdWxlUmVjZWl2ZXIgPSBmdW5jdGlvbigpIHtcbiAgZGVidWcoJ19zY2hlZHVsZVJlY2VpdmVyJyk7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHBvbGwgPSB0aGlzLnBvbGwgPSBuZXcgdGhpcy5SZWNlaXZlcih0aGlzLnJlY2VpdmVVcmwsIHRoaXMuQWpheE9iamVjdCk7XG5cbiAgcG9sbC5vbignbWVzc2FnZScsIGZ1bmN0aW9uKG1zZykge1xuICAgIGRlYnVnKCdtZXNzYWdlJywgbXNnKTtcbiAgICBzZWxmLmVtaXQoJ21lc3NhZ2UnLCBtc2cpO1xuICB9KTtcblxuICBwb2xsLm9uY2UoJ2Nsb3NlJywgZnVuY3Rpb24oY29kZSwgcmVhc29uKSB7XG4gICAgZGVidWcoJ2Nsb3NlJywgY29kZSwgcmVhc29uLCBzZWxmLnBvbGxJc0Nsb3NpbmcpO1xuICAgIHNlbGYucG9sbCA9IHBvbGwgPSBudWxsO1xuXG4gICAgaWYgKCFzZWxmLnBvbGxJc0Nsb3NpbmcpIHtcbiAgICAgIGlmIChyZWFzb24gPT09ICduZXR3b3JrJykge1xuICAgICAgICBzZWxmLl9zY2hlZHVsZVJlY2VpdmVyKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxmLmVtaXQoJ2Nsb3NlJywgY29kZSB8fCAxMDA2LCByZWFzb24pO1xuICAgICAgICBzZWxmLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59O1xuXG5Qb2xsaW5nLnByb3RvdHlwZS5hYm9ydCA9IGZ1bmN0aW9uKCkge1xuICBkZWJ1ZygnYWJvcnQnKTtcbiAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgdGhpcy5wb2xsSXNDbG9zaW5nID0gdHJ1ZTtcbiAgaWYgKHRoaXMucG9sbCkge1xuICAgIHRoaXMucG9sbC5hYm9ydCgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBvbGxpbmc7XG5cbn0pLmNhbGwodGhpcyx7IGVudjoge30gfSlcblxufSx7XCJkZWJ1Z1wiOjU1LFwiZXZlbnRzXCI6MyxcImluaGVyaXRzXCI6NTd9XSwyODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKHByb2Nlc3Mpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG4gICwgdXJsVXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy91cmwnKVxuICAsIEJ1ZmZlcmVkU2VuZGVyID0gcmVxdWlyZSgnLi9idWZmZXJlZC1zZW5kZXInKVxuICAsIFBvbGxpbmcgPSByZXF1aXJlKCcuL3BvbGxpbmcnKVxuICA7XG5cbnZhciBkZWJ1ZyA9IGZ1bmN0aW9uKCkge307XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ3NvY2tqcy1jbGllbnQ6c2VuZGVyLXJlY2VpdmVyJyk7XG59XG5cbmZ1bmN0aW9uIFNlbmRlclJlY2VpdmVyKHRyYW5zVXJsLCB1cmxTdWZmaXgsIHNlbmRlckZ1bmMsIFJlY2VpdmVyLCBBamF4T2JqZWN0KSB7XG4gIHZhciBwb2xsVXJsID0gdXJsVXRpbHMuYWRkUGF0aCh0cmFuc1VybCwgdXJsU3VmZml4KTtcbiAgZGVidWcocG9sbFVybCk7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgQnVmZmVyZWRTZW5kZXIuY2FsbCh0aGlzLCB0cmFuc1VybCwgc2VuZGVyRnVuYyk7XG5cbiAgdGhpcy5wb2xsID0gbmV3IFBvbGxpbmcoUmVjZWl2ZXIsIHBvbGxVcmwsIEFqYXhPYmplY3QpO1xuICB0aGlzLnBvbGwub24oJ21lc3NhZ2UnLCBmdW5jdGlvbihtc2cpIHtcbiAgICBkZWJ1ZygncG9sbCBtZXNzYWdlJywgbXNnKTtcbiAgICBzZWxmLmVtaXQoJ21lc3NhZ2UnLCBtc2cpO1xuICB9KTtcbiAgdGhpcy5wb2xsLm9uY2UoJ2Nsb3NlJywgZnVuY3Rpb24oY29kZSwgcmVhc29uKSB7XG4gICAgZGVidWcoJ3BvbGwgY2xvc2UnLCBjb2RlLCByZWFzb24pO1xuICAgIHNlbGYucG9sbCA9IG51bGw7XG4gICAgc2VsZi5lbWl0KCdjbG9zZScsIGNvZGUsIHJlYXNvbik7XG4gICAgc2VsZi5jbG9zZSgpO1xuICB9KTtcbn1cblxuaW5oZXJpdHMoU2VuZGVyUmVjZWl2ZXIsIEJ1ZmZlcmVkU2VuZGVyKTtcblxuU2VuZGVyUmVjZWl2ZXIucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIEJ1ZmZlcmVkU2VuZGVyLnByb3RvdHlwZS5jbG9zZS5jYWxsKHRoaXMpO1xuICBkZWJ1ZygnY2xvc2UnKTtcbiAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgaWYgKHRoaXMucG9sbCkge1xuICAgIHRoaXMucG9sbC5hYm9ydCgpO1xuICAgIHRoaXMucG9sbCA9IG51bGw7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gU2VuZGVyUmVjZWl2ZXI7XG5cbn0pLmNhbGwodGhpcyx7IGVudjoge30gfSlcblxufSx7XCIuLi8uLi91dGlscy91cmxcIjo1MixcIi4vYnVmZmVyZWQtc2VuZGVyXCI6MjUsXCIuL3BvbGxpbmdcIjoyNyxcImRlYnVnXCI6NTUsXCJpbmhlcml0c1wiOjU3fV0sMjk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChwcm9jZXNzKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuICAsIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlclxuICAsIEV2ZW50U291cmNlRHJpdmVyID0gcmVxdWlyZSgnZXZlbnRzb3VyY2UnKVxuICA7XG5cbnZhciBkZWJ1ZyA9IGZ1bmN0aW9uKCkge307XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ3NvY2tqcy1jbGllbnQ6cmVjZWl2ZXI6ZXZlbnRzb3VyY2UnKTtcbn1cblxuZnVuY3Rpb24gRXZlbnRTb3VyY2VSZWNlaXZlcih1cmwpIHtcbiAgZGVidWcodXJsKTtcbiAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgZXMgPSB0aGlzLmVzID0gbmV3IEV2ZW50U291cmNlRHJpdmVyKHVybCk7XG4gIGVzLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICBkZWJ1ZygnbWVzc2FnZScsIGUuZGF0YSk7XG4gICAgc2VsZi5lbWl0KCdtZXNzYWdlJywgZGVjb2RlVVJJKGUuZGF0YSkpO1xuICB9O1xuICBlcy5vbmVycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIGRlYnVnKCdlcnJvcicsIGVzLnJlYWR5U3RhdGUsIGUpO1xuICAgIC8vIEVTIG9uIHJlY29ubmVjdGlvbiBoYXMgcmVhZHlTdGF0ZSA9IDAgb3IgMS5cbiAgICAvLyBvbiBuZXR3b3JrIGVycm9yIGl0J3MgQ0xPU0VEID0gMlxuICAgIHZhciByZWFzb24gPSAoZXMucmVhZHlTdGF0ZSAhPT0gMiA/ICduZXR3b3JrJyA6ICdwZXJtYW5lbnQnKTtcbiAgICBzZWxmLl9jbGVhbnVwKCk7XG4gICAgc2VsZi5fY2xvc2UocmVhc29uKTtcbiAgfTtcbn1cblxuaW5oZXJpdHMoRXZlbnRTb3VyY2VSZWNlaXZlciwgRXZlbnRFbWl0dGVyKTtcblxuRXZlbnRTb3VyY2VSZWNlaXZlci5wcm90b3R5cGUuYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgZGVidWcoJ2Fib3J0Jyk7XG4gIHRoaXMuX2NsZWFudXAoKTtcbiAgdGhpcy5fY2xvc2UoJ3VzZXInKTtcbn07XG5cbkV2ZW50U291cmNlUmVjZWl2ZXIucHJvdG90eXBlLl9jbGVhbnVwID0gZnVuY3Rpb24oKSB7XG4gIGRlYnVnKCdjbGVhbnVwJyk7XG4gIHZhciBlcyA9IHRoaXMuZXM7XG4gIGlmIChlcykge1xuICAgIGVzLm9ubWVzc2FnZSA9IGVzLm9uZXJyb3IgPSBudWxsO1xuICAgIGVzLmNsb3NlKCk7XG4gICAgdGhpcy5lcyA9IG51bGw7XG4gIH1cbn07XG5cbkV2ZW50U291cmNlUmVjZWl2ZXIucHJvdG90eXBlLl9jbG9zZSA9IGZ1bmN0aW9uKHJlYXNvbikge1xuICBkZWJ1ZygnY2xvc2UnLCByZWFzb24pO1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIC8vIFNhZmFyaSBhbmQgY2hyb21lIDwgMTUgY3Jhc2ggaWYgd2UgY2xvc2Ugd2luZG93IGJlZm9yZVxuICAvLyB3YWl0aW5nIGZvciBFUyBjbGVhbnVwLiBTZWU6XG4gIC8vIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04OTE1NVxuICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuZW1pdCgnY2xvc2UnLCBudWxsLCByZWFzb24pO1xuICAgIHNlbGYucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gIH0sIDIwMCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50U291cmNlUmVjZWl2ZXI7XG5cbn0pLmNhbGwodGhpcyx7IGVudjoge30gfSlcblxufSx7XCJkZWJ1Z1wiOjU1LFwiZXZlbnRzXCI6MyxcImV2ZW50c291cmNlXCI6MTgsXCJpbmhlcml0c1wiOjU3fV0sMzA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChwcm9jZXNzLGdsb2JhbCl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbiAgLCBpZnJhbWVVdGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL2lmcmFtZScpXG4gICwgdXJsVXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy91cmwnKVxuICAsIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlclxuICAsIHJhbmRvbSA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL3JhbmRvbScpXG4gIDtcblxudmFyIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc29ja2pzLWNsaWVudDpyZWNlaXZlcjpodG1sZmlsZScpO1xufVxuXG5mdW5jdGlvbiBIdG1sZmlsZVJlY2VpdmVyKHVybCkge1xuICBkZWJ1Zyh1cmwpO1xuICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBpZnJhbWVVdGlscy5wb2xsdXRlR2xvYmFsTmFtZXNwYWNlKCk7XG5cbiAgdGhpcy5pZCA9ICdhJyArIHJhbmRvbS5zdHJpbmcoNik7XG4gIHVybCA9IHVybFV0aWxzLmFkZFF1ZXJ5KHVybCwgJ2M9JyArIGRlY29kZVVSSUNvbXBvbmVudChpZnJhbWVVdGlscy5XUHJlZml4ICsgJy4nICsgdGhpcy5pZCkpO1xuXG4gIGRlYnVnKCd1c2luZyBodG1sZmlsZScsIEh0bWxmaWxlUmVjZWl2ZXIuaHRtbGZpbGVFbmFibGVkKTtcbiAgdmFyIGNvbnN0cnVjdEZ1bmMgPSBIdG1sZmlsZVJlY2VpdmVyLmh0bWxmaWxlRW5hYmxlZCA/XG4gICAgICBpZnJhbWVVdGlscy5jcmVhdGVIdG1sZmlsZSA6IGlmcmFtZVV0aWxzLmNyZWF0ZUlmcmFtZTtcblxuICBnbG9iYWxbaWZyYW1lVXRpbHMuV1ByZWZpeF1bdGhpcy5pZF0gPSB7XG4gICAgc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgZGVidWcoJ3N0YXJ0Jyk7XG4gICAgICBzZWxmLmlmcmFtZU9iai5sb2FkZWQoKTtcbiAgICB9XG4gICwgbWVzc2FnZTogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgZGVidWcoJ21lc3NhZ2UnLCBkYXRhKTtcbiAgICAgIHNlbGYuZW1pdCgnbWVzc2FnZScsIGRhdGEpO1xuICAgIH1cbiAgLCBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIGRlYnVnKCdzdG9wJyk7XG4gICAgICBzZWxmLl9jbGVhbnVwKCk7XG4gICAgICBzZWxmLl9jbG9zZSgnbmV0d29yaycpO1xuICAgIH1cbiAgfTtcbiAgdGhpcy5pZnJhbWVPYmogPSBjb25zdHJ1Y3RGdW5jKHVybCwgZnVuY3Rpb24oKSB7XG4gICAgZGVidWcoJ2NhbGxiYWNrJyk7XG4gICAgc2VsZi5fY2xlYW51cCgpO1xuICAgIHNlbGYuX2Nsb3NlKCdwZXJtYW5lbnQnKTtcbiAgfSk7XG59XG5cbmluaGVyaXRzKEh0bWxmaWxlUmVjZWl2ZXIsIEV2ZW50RW1pdHRlcik7XG5cbkh0bWxmaWxlUmVjZWl2ZXIucHJvdG90eXBlLmFib3J0ID0gZnVuY3Rpb24oKSB7XG4gIGRlYnVnKCdhYm9ydCcpO1xuICB0aGlzLl9jbGVhbnVwKCk7XG4gIHRoaXMuX2Nsb3NlKCd1c2VyJyk7XG59O1xuXG5IdG1sZmlsZVJlY2VpdmVyLnByb3RvdHlwZS5fY2xlYW51cCA9IGZ1bmN0aW9uKCkge1xuICBkZWJ1ZygnX2NsZWFudXAnKTtcbiAgaWYgKHRoaXMuaWZyYW1lT2JqKSB7XG4gICAgdGhpcy5pZnJhbWVPYmouY2xlYW51cCgpO1xuICAgIHRoaXMuaWZyYW1lT2JqID0gbnVsbDtcbiAgfVxuICBkZWxldGUgZ2xvYmFsW2lmcmFtZVV0aWxzLldQcmVmaXhdW3RoaXMuaWRdO1xufTtcblxuSHRtbGZpbGVSZWNlaXZlci5wcm90b3R5cGUuX2Nsb3NlID0gZnVuY3Rpb24ocmVhc29uKSB7XG4gIGRlYnVnKCdfY2xvc2UnLCByZWFzb24pO1xuICB0aGlzLmVtaXQoJ2Nsb3NlJywgbnVsbCwgcmVhc29uKTtcbiAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbn07XG5cbkh0bWxmaWxlUmVjZWl2ZXIuaHRtbGZpbGVFbmFibGVkID0gZmFsc2U7XG5cbi8vIG9iZnVzY2F0ZSB0byBhdm9pZCBmaXJld2FsbHNcbnZhciBheG8gPSBbJ0FjdGl2ZSddLmNvbmNhdCgnT2JqZWN0Jykuam9pbignWCcpO1xuaWYgKGF4byBpbiBnbG9iYWwpIHtcbiAgdHJ5IHtcbiAgICBIdG1sZmlsZVJlY2VpdmVyLmh0bWxmaWxlRW5hYmxlZCA9ICEhbmV3IGdsb2JhbFtheG9dKCdodG1sZmlsZScpO1xuICB9IGNhdGNoICh4KSB7XG4gICAgLy8gaW50ZW50aW9uYWxseSBlbXB0eVxuICB9XG59XG5cbkh0bWxmaWxlUmVjZWl2ZXIuZW5hYmxlZCA9IEh0bWxmaWxlUmVjZWl2ZXIuaHRtbGZpbGVFbmFibGVkIHx8IGlmcmFtZVV0aWxzLmlmcmFtZUVuYWJsZWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gSHRtbGZpbGVSZWNlaXZlcjtcblxufSkuY2FsbCh0aGlzLHsgZW52OiB7fSB9LHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG5cbn0se1wiLi4vLi4vdXRpbHMvaWZyYW1lXCI6NDcsXCIuLi8uLi91dGlscy9yYW5kb21cIjo1MCxcIi4uLy4uL3V0aWxzL3VybFwiOjUyLFwiZGVidWdcIjo1NSxcImV2ZW50c1wiOjMsXCJpbmhlcml0c1wiOjU3fV0sMzE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChwcm9jZXNzLGdsb2JhbCl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL2lmcmFtZScpXG4gICwgcmFuZG9tID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvcmFuZG9tJylcbiAgLCBicm93c2VyID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvYnJvd3NlcicpXG4gICwgdXJsVXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy91cmwnKVxuICAsIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuICAsIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlclxuICA7XG5cbnZhciBkZWJ1ZyA9IGZ1bmN0aW9uKCkge307XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBkZWJ1ZyA9IHJlcXVpcmUoJ2RlYnVnJykoJ3NvY2tqcy1jbGllbnQ6cmVjZWl2ZXI6anNvbnAnKTtcbn1cblxuZnVuY3Rpb24gSnNvbnBSZWNlaXZlcih1cmwpIHtcbiAgZGVidWcodXJsKTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICB1dGlscy5wb2xsdXRlR2xvYmFsTmFtZXNwYWNlKCk7XG5cbiAgdGhpcy5pZCA9ICdhJyArIHJhbmRvbS5zdHJpbmcoNik7XG4gIHZhciB1cmxXaXRoSWQgPSB1cmxVdGlscy5hZGRRdWVyeSh1cmwsICdjPScgKyBlbmNvZGVVUklDb21wb25lbnQodXRpbHMuV1ByZWZpeCArICcuJyArIHRoaXMuaWQpKTtcblxuICBnbG9iYWxbdXRpbHMuV1ByZWZpeF1bdGhpcy5pZF0gPSB0aGlzLl9jYWxsYmFjay5iaW5kKHRoaXMpO1xuICB0aGlzLl9jcmVhdGVTY3JpcHQodXJsV2l0aElkKTtcblxuICAvLyBGYWxsYmFjayBtb3N0bHkgZm9yIEtvbnF1ZXJvciAtIHN0dXBpZCB0aW1lciwgMzUgc2Vjb25kcyBzaGFsbCBiZSBwbGVudHkuXG4gIHRoaXMudGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICBkZWJ1ZygndGltZW91dCcpO1xuICAgIHNlbGYuX2Fib3J0KG5ldyBFcnJvcignSlNPTlAgc2NyaXB0IGxvYWRlZCBhYm5vcm1hbGx5ICh0aW1lb3V0KScpKTtcbiAgfSwgSnNvbnBSZWNlaXZlci50aW1lb3V0KTtcbn1cblxuaW5oZXJpdHMoSnNvbnBSZWNlaXZlciwgRXZlbnRFbWl0dGVyKTtcblxuSnNvbnBSZWNlaXZlci5wcm90b3R5cGUuYWJvcnQgPSBmdW5jdGlvbigpIHtcbiAgZGVidWcoJ2Fib3J0Jyk7XG4gIGlmIChnbG9iYWxbdXRpbHMuV1ByZWZpeF1bdGhpcy5pZF0pIHtcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdKU09OUCB1c2VyIGFib3J0ZWQgcmVhZCcpO1xuICAgIGVyci5jb2RlID0gMTAwMDtcbiAgICB0aGlzLl9hYm9ydChlcnIpO1xuICB9XG59O1xuXG5Kc29ucFJlY2VpdmVyLnRpbWVvdXQgPSAzNTAwMDtcbkpzb25wUmVjZWl2ZXIuc2NyaXB0RXJyb3JUaW1lb3V0ID0gMTAwMDtcblxuSnNvbnBSZWNlaXZlci5wcm90b3R5cGUuX2NhbGxiYWNrID0gZnVuY3Rpb24oZGF0YSkge1xuICBkZWJ1ZygnX2NhbGxiYWNrJywgZGF0YSk7XG4gIHRoaXMuX2NsZWFudXAoKTtcblxuICBpZiAodGhpcy5hYm9ydGluZykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChkYXRhKSB7XG4gICAgZGVidWcoJ21lc3NhZ2UnLCBkYXRhKTtcbiAgICB0aGlzLmVtaXQoJ21lc3NhZ2UnLCBkYXRhKTtcbiAgfVxuICB0aGlzLmVtaXQoJ2Nsb3NlJywgbnVsbCwgJ25ldHdvcmsnKTtcbiAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbn07XG5cbkpzb25wUmVjZWl2ZXIucHJvdG90eXBlLl9hYm9ydCA9IGZ1bmN0aW9uKGVycikge1xuICBkZWJ1ZygnX2Fib3J0JywgZXJyKTtcbiAgdGhpcy5fY2xlYW51cCgpO1xuICB0aGlzLmFib3J0aW5nID0gdHJ1ZTtcbiAgdGhpcy5lbWl0KCdjbG9zZScsIGVyci5jb2RlLCBlcnIubWVzc2FnZSk7XG4gIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG59O1xuXG5Kc29ucFJlY2VpdmVyLnByb3RvdHlwZS5fY2xlYW51cCA9IGZ1bmN0aW9uKCkge1xuICBkZWJ1ZygnX2NsZWFudXAnKTtcbiAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dElkKTtcbiAgaWYgKHRoaXMuc2NyaXB0Mikge1xuICAgIHRoaXMuc2NyaXB0Mi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuc2NyaXB0Mik7XG4gICAgdGhpcy5zY3JpcHQyID0gbnVsbDtcbiAgfVxuICBpZiAodGhpcy5zY3JpcHQpIHtcbiAgICB2YXIgc2NyaXB0ID0gdGhpcy5zY3JpcHQ7XG4gICAgLy8gVW5mb3J0dW5hdGVseSwgeW91IGNhbid0IHJlYWxseSBhYm9ydCBzY3JpcHQgbG9hZGluZyBvZlxuICAgIC8vIHRoZSBzY3JpcHQuXG4gICAgc2NyaXB0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcbiAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gc2NyaXB0Lm9uZXJyb3IgPVxuICAgICAgICBzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9uY2xpY2sgPSBudWxsO1xuICAgIHRoaXMuc2NyaXB0ID0gbnVsbDtcbiAgfVxuICBkZWxldGUgZ2xvYmFsW3V0aWxzLldQcmVmaXhdW3RoaXMuaWRdO1xufTtcblxuSnNvbnBSZWNlaXZlci5wcm90b3R5cGUuX3NjcmlwdEVycm9yID0gZnVuY3Rpb24oKSB7XG4gIGRlYnVnKCdfc2NyaXB0RXJyb3InKTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBpZiAodGhpcy5lcnJvclRpbWVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5lcnJvclRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICBpZiAoIXNlbGYubG9hZGVkT2theSkge1xuICAgICAgc2VsZi5fYWJvcnQobmV3IEVycm9yKCdKU09OUCBzY3JpcHQgbG9hZGVkIGFibm9ybWFsbHkgKG9uZXJyb3IpJykpO1xuICAgIH1cbiAgfSwgSnNvbnBSZWNlaXZlci5zY3JpcHRFcnJvclRpbWVvdXQpO1xufTtcblxuSnNvbnBSZWNlaXZlci5wcm90b3R5cGUuX2NyZWF0ZVNjcmlwdCA9IGZ1bmN0aW9uKHVybCkge1xuICBkZWJ1ZygnX2NyZWF0ZVNjcmlwdCcsIHVybCk7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHNjcmlwdCA9IHRoaXMuc2NyaXB0ID0gZ2xvYmFsLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICB2YXIgc2NyaXB0MjsgIC8vIE9wZXJhIHN5bmNocm9ub3VzIGxvYWQgdHJpY2suXG5cbiAgc2NyaXB0LmlkID0gJ2EnICsgcmFuZG9tLnN0cmluZyg4KTtcbiAgc2NyaXB0LnNyYyA9IHVybDtcbiAgc2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiAgc2NyaXB0LmNoYXJzZXQgPSAnVVRGLTgnO1xuICBzY3JpcHQub25lcnJvciA9IHRoaXMuX3NjcmlwdEVycm9yLmJpbmQodGhpcyk7XG4gIHNjcmlwdC5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICBkZWJ1Zygnb25sb2FkJyk7XG4gICAgc2VsZi5fYWJvcnQobmV3IEVycm9yKCdKU09OUCBzY3JpcHQgbG9hZGVkIGFibm9ybWFsbHkgKG9ubG9hZCknKSk7XG4gIH07XG5cbiAgLy8gSUU5IGZpcmVzICdlcnJvcicgZXZlbnQgYWZ0ZXIgb25yZWFkeXN0YXRlY2hhbmdlIG9yIGJlZm9yZSwgaW4gcmFuZG9tIG9yZGVyLlxuICAvLyBVc2UgbG9hZGVkT2theSB0byBkZXRlcm1pbmUgaWYgYWN0dWFsbHkgZXJyb3JlZFxuICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgZGVidWcoJ29ucmVhZHlzdGF0ZWNoYW5nZScsIHNjcmlwdC5yZWFkeVN0YXRlKTtcbiAgICBpZiAoL2xvYWRlZHxjbG9zZWQvLnRlc3Qoc2NyaXB0LnJlYWR5U3RhdGUpKSB7XG4gICAgICBpZiAoc2NyaXB0ICYmIHNjcmlwdC5odG1sRm9yICYmIHNjcmlwdC5vbmNsaWNrKSB7XG4gICAgICAgIHNlbGYubG9hZGVkT2theSA9IHRydWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gSW4gSUUsIGFjdHVhbGx5IGV4ZWN1dGUgdGhlIHNjcmlwdC5cbiAgICAgICAgICBzY3JpcHQub25jbGljaygpO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgLy8gaW50ZW50aW9uYWxseSBlbXB0eVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc2NyaXB0KSB7XG4gICAgICAgIHNlbGYuX2Fib3J0KG5ldyBFcnJvcignSlNPTlAgc2NyaXB0IGxvYWRlZCBhYm5vcm1hbGx5IChvbnJlYWR5c3RhdGVjaGFuZ2UpJykpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgLy8gSUU6IGV2ZW50L2h0bWxGb3Ivb25jbGljayB0cmljay5cbiAgLy8gT25lIGNhbid0IHJlbHkgb24gcHJvcGVyIG9yZGVyIGZvciBvbnJlYWR5c3RhdGVjaGFuZ2UuIEluIG9yZGVyIHRvXG4gIC8vIG1ha2Ugc3VyZSwgc2V0IGEgJ2h0bWxGb3InIGFuZCAnZXZlbnQnIHByb3BlcnRpZXMsIHNvIHRoYXRcbiAgLy8gc2NyaXB0IGNvZGUgd2lsbCBiZSBpbnN0YWxsZWQgYXMgJ29uY2xpY2snIGhhbmRsZXIgZm9yIHRoZVxuICAvLyBzY3JpcHQgb2JqZWN0LiBMYXRlciwgb25yZWFkeXN0YXRlY2hhbmdlLCBtYW51YWxseSBleGVjdXRlIHRoaXNcbiAgLy8gY29kZS4gRkYgYW5kIENocm9tZSBkb2Vzbid0IHdvcmsgd2l0aCAnZXZlbnQnIGFuZCAnaHRtbEZvcidcbiAgLy8gc2V0LiBGb3IgcmVmZXJlbmNlIHNlZTpcbiAgLy8gICBodHRwOi8vamF1Ym91cmcubmV0LzIwMTAvMDcvbG9hZGluZy1zY3JpcHQtYXMtb25jbGljay1oYW5kbGVyLW9mLmh0bWxcbiAgLy8gQWxzbywgcmVhZCBvbiB0aGF0IGFib3V0IHNjcmlwdCBvcmRlcmluZzpcbiAgLy8gICBodHRwOi8vd2lraS53aGF0d2cub3JnL3dpa2kvRHluYW1pY19TY3JpcHRfRXhlY3V0aW9uX09yZGVyXG4gIGlmICh0eXBlb2Ygc2NyaXB0LmFzeW5jID09PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwuZG9jdW1lbnQuYXR0YWNoRXZlbnQpIHtcbiAgICAvLyBBY2NvcmRpbmcgdG8gbW96aWxsYSBkb2NzLCBpbiByZWNlbnQgYnJvd3NlcnMgc2NyaXB0LmFzeW5jIGRlZmF1bHRzXG4gICAgLy8gdG8gJ3RydWUnLCBzbyB3ZSBtYXkgdXNlIGl0IHRvIGRldGVjdCBhIGdvb2QgYnJvd3NlcjpcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9IVE1ML0VsZW1lbnQvc2NyaXB0XG4gICAgaWYgKCFicm93c2VyLmlzT3BlcmEoKSkge1xuICAgICAgLy8gTmFpdmVseSBhc3N1bWUgd2UncmUgaW4gSUVcbiAgICAgIHRyeSB7XG4gICAgICAgIHNjcmlwdC5odG1sRm9yID0gc2NyaXB0LmlkO1xuICAgICAgICBzY3JpcHQuZXZlbnQgPSAnb25jbGljayc7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIC8vIGludGVudGlvbmFsbHkgZW1wdHlcbiAgICAgIH1cbiAgICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE9wZXJhLCBzZWNvbmQgc3luYyBzY3JpcHQgaGFja1xuICAgICAgc2NyaXB0MiA9IHRoaXMuc2NyaXB0MiA9IGdsb2JhbC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgIHNjcmlwdDIudGV4dCA9IFwidHJ5e3ZhciBhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1wiICsgc2NyaXB0LmlkICsgXCInKTsgaWYoYSlhLm9uZXJyb3IoKTt9Y2F0Y2goeCl7fTtcIjtcbiAgICAgIHNjcmlwdC5hc3luYyA9IHNjcmlwdDIuYXN5bmMgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiBzY3JpcHQuYXN5bmMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBoZWFkID0gZ2xvYmFsLmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gIGhlYWQuaW5zZXJ0QmVmb3JlKHNjcmlwdCwgaGVhZC5maXJzdENoaWxkKTtcbiAgaWYgKHNjcmlwdDIpIHtcbiAgICBoZWFkLmluc2VydEJlZm9yZShzY3JpcHQyLCBoZWFkLmZpcnN0Q2hpbGQpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEpzb25wUmVjZWl2ZXI7XG5cbn0pLmNhbGwodGhpcyx7IGVudjoge30gfSx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KVxuXG59LHtcIi4uLy4uL3V0aWxzL2Jyb3dzZXJcIjo0NCxcIi4uLy4uL3V0aWxzL2lmcmFtZVwiOjQ3LFwiLi4vLi4vdXRpbHMvcmFuZG9tXCI6NTAsXCIuLi8uLi91dGlscy91cmxcIjo1MixcImRlYnVnXCI6NTUsXCJldmVudHNcIjozLFwiaW5oZXJpdHNcIjo1N31dLDMyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAocHJvY2Vzcyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbiAgLCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXJcbiAgO1xuXG52YXIgZGVidWcgPSBmdW5jdGlvbigpIHt9O1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzb2NranMtY2xpZW50OnJlY2VpdmVyOnhocicpO1xufVxuXG5mdW5jdGlvbiBYaHJSZWNlaXZlcih1cmwsIEFqYXhPYmplY3QpIHtcbiAgZGVidWcodXJsKTtcbiAgRXZlbnRFbWl0dGVyLmNhbGwodGhpcyk7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICB0aGlzLmJ1ZmZlclBvc2l0aW9uID0gMDtcblxuICB0aGlzLnhvID0gbmV3IEFqYXhPYmplY3QoJ1BPU1QnLCB1cmwsIG51bGwpO1xuICB0aGlzLnhvLm9uKCdjaHVuaycsIHRoaXMuX2NodW5rSGFuZGxlci5iaW5kKHRoaXMpKTtcbiAgdGhpcy54by5vbmNlKCdmaW5pc2gnLCBmdW5jdGlvbihzdGF0dXMsIHRleHQpIHtcbiAgICBkZWJ1ZygnZmluaXNoJywgc3RhdHVzLCB0ZXh0KTtcbiAgICBzZWxmLl9jaHVua0hhbmRsZXIoc3RhdHVzLCB0ZXh0KTtcbiAgICBzZWxmLnhvID0gbnVsbDtcbiAgICB2YXIgcmVhc29uID0gc3RhdHVzID09PSAyMDAgPyAnbmV0d29yaycgOiAncGVybWFuZW50JztcbiAgICBkZWJ1ZygnY2xvc2UnLCByZWFzb24pO1xuICAgIHNlbGYuZW1pdCgnY2xvc2UnLCBudWxsLCByZWFzb24pO1xuICAgIHNlbGYuX2NsZWFudXAoKTtcbiAgfSk7XG59XG5cbmluaGVyaXRzKFhoclJlY2VpdmVyLCBFdmVudEVtaXR0ZXIpO1xuXG5YaHJSZWNlaXZlci5wcm90b3R5cGUuX2NodW5rSGFuZGxlciA9IGZ1bmN0aW9uKHN0YXR1cywgdGV4dCkge1xuICBkZWJ1ZygnX2NodW5rSGFuZGxlcicsIHN0YXR1cyk7XG4gIGlmIChzdGF0dXMgIT09IDIwMCB8fCAhdGV4dCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAodmFyIGlkeCA9IC0xOyA7IHRoaXMuYnVmZmVyUG9zaXRpb24gKz0gaWR4ICsgMSkge1xuICAgIHZhciBidWYgPSB0ZXh0LnNsaWNlKHRoaXMuYnVmZmVyUG9zaXRpb24pO1xuICAgIGlkeCA9IGJ1Zi5pbmRleE9mKCdcXG4nKTtcbiAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBtc2cgPSBidWYuc2xpY2UoMCwgaWR4KTtcbiAgICBpZiAobXNnKSB7XG4gICAgICBkZWJ1ZygnbWVzc2FnZScsIG1zZyk7XG4gICAgICB0aGlzLmVtaXQoJ21lc3NhZ2UnLCBtc2cpO1xuICAgIH1cbiAgfVxufTtcblxuWGhyUmVjZWl2ZXIucHJvdG90eXBlLl9jbGVhbnVwID0gZnVuY3Rpb24oKSB7XG4gIGRlYnVnKCdfY2xlYW51cCcpO1xuICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygpO1xufTtcblxuWGhyUmVjZWl2ZXIucHJvdG90eXBlLmFib3J0ID0gZnVuY3Rpb24oKSB7XG4gIGRlYnVnKCdhYm9ydCcpO1xuICBpZiAodGhpcy54bykge1xuICAgIHRoaXMueG8uY2xvc2UoKTtcbiAgICBkZWJ1ZygnY2xvc2UnKTtcbiAgICB0aGlzLmVtaXQoJ2Nsb3NlJywgbnVsbCwgJ3VzZXInKTtcbiAgICB0aGlzLnhvID0gbnVsbDtcbiAgfVxuICB0aGlzLl9jbGVhbnVwKCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFhoclJlY2VpdmVyO1xuXG59KS5jYWxsKHRoaXMseyBlbnY6IHt9IH0pXG5cbn0se1wiZGVidWdcIjo1NSxcImV2ZW50c1wiOjMsXCJpbmhlcml0c1wiOjU3fV0sMzM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChwcm9jZXNzLGdsb2JhbCl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciByYW5kb20gPSByZXF1aXJlKCcuLi8uLi91dGlscy9yYW5kb20nKVxuICAsIHVybFV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvdXJsJylcbiAgO1xuXG52YXIgZGVidWcgPSBmdW5jdGlvbigpIHt9O1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzb2NranMtY2xpZW50OnNlbmRlcjpqc29ucCcpO1xufVxuXG52YXIgZm9ybSwgYXJlYTtcblxuZnVuY3Rpb24gY3JlYXRlSWZyYW1lKGlkKSB7XG4gIGRlYnVnKCdjcmVhdGVJZnJhbWUnLCBpZCk7XG4gIHRyeSB7XG4gICAgLy8gaWU2IGR5bmFtaWMgaWZyYW1lcyB3aXRoIHRhcmdldD1cIlwiIHN1cHBvcnQgKHRoYW5rcyBDaHJpcyBMYW1iYWNoZXIpXG4gICAgcmV0dXJuIGdsb2JhbC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCc8aWZyYW1lIG5hbWU9XCInICsgaWQgKyAnXCI+Jyk7XG4gIH0gY2F0Y2ggKHgpIHtcbiAgICB2YXIgaWZyYW1lID0gZ2xvYmFsLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICAgIGlmcmFtZS5uYW1lID0gaWQ7XG4gICAgcmV0dXJuIGlmcmFtZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVGb3JtKCkge1xuICBkZWJ1ZygnY3JlYXRlRm9ybScpO1xuICBmb3JtID0gZ2xvYmFsLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTtcbiAgZm9ybS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBmb3JtLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgZm9ybS5tZXRob2QgPSAnUE9TVCc7XG4gIGZvcm0uZW5jdHlwZSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnO1xuICBmb3JtLmFjY2VwdENoYXJzZXQgPSAnVVRGLTgnO1xuXG4gIGFyZWEgPSBnbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgYXJlYS5uYW1lID0gJ2QnO1xuICBmb3JtLmFwcGVuZENoaWxkKGFyZWEpO1xuXG4gIGdsb2JhbC5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZvcm0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHVybCwgcGF5bG9hZCwgY2FsbGJhY2spIHtcbiAgZGVidWcodXJsLCBwYXlsb2FkKTtcbiAgaWYgKCFmb3JtKSB7XG4gICAgY3JlYXRlRm9ybSgpO1xuICB9XG4gIHZhciBpZCA9ICdhJyArIHJhbmRvbS5zdHJpbmcoOCk7XG4gIGZvcm0udGFyZ2V0ID0gaWQ7XG4gIGZvcm0uYWN0aW9uID0gdXJsVXRpbHMuYWRkUXVlcnkodXJsVXRpbHMuYWRkUGF0aCh1cmwsICcvanNvbnBfc2VuZCcpLCAnaT0nICsgaWQpO1xuXG4gIHZhciBpZnJhbWUgPSBjcmVhdGVJZnJhbWUoaWQpO1xuICBpZnJhbWUuaWQgPSBpZDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGZvcm0uYXBwZW5kQ2hpbGQoaWZyYW1lKTtcblxuICB0cnkge1xuICAgIGFyZWEudmFsdWUgPSBwYXlsb2FkO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gc2VyaW91c2x5IGJyb2tlbiBicm93c2VycyBnZXQgaGVyZVxuICB9XG4gIGZvcm0uc3VibWl0KCk7XG5cbiAgdmFyIGNvbXBsZXRlZCA9IGZ1bmN0aW9uKGVycikge1xuICAgIGRlYnVnKCdjb21wbGV0ZWQnLCBpZCwgZXJyKTtcbiAgICBpZiAoIWlmcmFtZS5vbmVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmcmFtZS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBpZnJhbWUub25lcnJvciA9IGlmcmFtZS5vbmxvYWQgPSBudWxsO1xuICAgIC8vIE9wZXJhIG1pbmkgZG9lc24ndCBsaWtlIGlmIHdlIEdDIGlmcmFtZVxuICAgIC8vIGltbWVkaWF0ZWx5LCB0aHVzIHRoaXMgdGltZW91dC5cbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgZGVidWcoJ2NsZWFuaW5nIHVwJywgaWQpO1xuICAgICAgaWZyYW1lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgICAgIGlmcmFtZSA9IG51bGw7XG4gICAgfSwgNTAwKTtcbiAgICBhcmVhLnZhbHVlID0gJyc7XG4gICAgLy8gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGRldGVjdCBpZiB0aGUgaWZyYW1lIHN1Y2NlZWRlZCBvclxuICAgIC8vIGZhaWxlZCB0byBzdWJtaXQgb3VyIGZvcm0uXG4gICAgY2FsbGJhY2soZXJyKTtcbiAgfTtcbiAgaWZyYW1lLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICBkZWJ1Zygnb25lcnJvcicsIGlkKTtcbiAgICBjb21wbGV0ZWQoKTtcbiAgfTtcbiAgaWZyYW1lLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgIGRlYnVnKCdvbmxvYWQnLCBpZCk7XG4gICAgY29tcGxldGVkKCk7XG4gIH07XG4gIGlmcmFtZS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgZGVidWcoJ29ucmVhZHlzdGF0ZWNoYW5nZScsIGlkLCBpZnJhbWUucmVhZHlTdGF0ZSwgZSk7XG4gICAgaWYgKGlmcmFtZS5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnKSB7XG4gICAgICBjb21wbGV0ZWQoKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBkZWJ1ZygnYWJvcnRlZCcsIGlkKTtcbiAgICBjb21wbGV0ZWQobmV3IEVycm9yKCdBYm9ydGVkJykpO1xuICB9O1xufTtcblxufSkuY2FsbCh0aGlzLHsgZW52OiB7fSB9LHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG5cbn0se1wiLi4vLi4vdXRpbHMvcmFuZG9tXCI6NTAsXCIuLi8uLi91dGlscy91cmxcIjo1MixcImRlYnVnXCI6NTV9XSwzNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKHByb2Nlc3MsZ2xvYmFsKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlclxuICAsIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuICAsIGV2ZW50VXRpbHMgPSByZXF1aXJlKCcuLi8uLi91dGlscy9ldmVudCcpXG4gICwgYnJvd3NlciA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL2Jyb3dzZXInKVxuICAsIHVybFV0aWxzID0gcmVxdWlyZSgnLi4vLi4vdXRpbHMvdXJsJylcbiAgO1xuXG52YXIgZGVidWcgPSBmdW5jdGlvbigpIHt9O1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzb2NranMtY2xpZW50OnNlbmRlcjp4ZHInKTtcbn1cblxuLy8gUmVmZXJlbmNlczpcbi8vICAgaHR0cDovL2FqYXhpYW4uY29tL2FyY2hpdmVzLzEwMC1saW5lLWFqYXgtd3JhcHBlclxuLy8gICBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvY2MyODgwNjAodj1WUy44NSkuYXNweFxuXG5mdW5jdGlvbiBYRFJPYmplY3QobWV0aG9kLCB1cmwsIHBheWxvYWQpIHtcbiAgZGVidWcobWV0aG9kLCB1cmwpO1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgc2VsZi5fc3RhcnQobWV0aG9kLCB1cmwsIHBheWxvYWQpO1xuICB9LCAwKTtcbn1cblxuaW5oZXJpdHMoWERST2JqZWN0LCBFdmVudEVtaXR0ZXIpO1xuXG5YRFJPYmplY3QucHJvdG90eXBlLl9zdGFydCA9IGZ1bmN0aW9uKG1ldGhvZCwgdXJsLCBwYXlsb2FkKSB7XG4gIGRlYnVnKCdfc3RhcnQnKTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgeGRyID0gbmV3IGdsb2JhbC5YRG9tYWluUmVxdWVzdCgpO1xuICAvLyBJRSBjYWNoZXMgZXZlbiBQT1NUc1xuICB1cmwgPSB1cmxVdGlscy5hZGRRdWVyeSh1cmwsICd0PScgKyAoK25ldyBEYXRlKCkpKTtcblxuICB4ZHIub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgIGRlYnVnKCdvbmVycm9yJyk7XG4gICAgc2VsZi5fZXJyb3IoKTtcbiAgfTtcbiAgeGRyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgIGRlYnVnKCdvbnRpbWVvdXQnKTtcbiAgICBzZWxmLl9lcnJvcigpO1xuICB9O1xuICB4ZHIub25wcm9ncmVzcyA9IGZ1bmN0aW9uKCkge1xuICAgIGRlYnVnKCdwcm9ncmVzcycsIHhkci5yZXNwb25zZVRleHQpO1xuICAgIHNlbGYuZW1pdCgnY2h1bmsnLCAyMDAsIHhkci5yZXNwb25zZVRleHQpO1xuICB9O1xuICB4ZHIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgZGVidWcoJ2xvYWQnKTtcbiAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcsIDIwMCwgeGRyLnJlc3BvbnNlVGV4dCk7XG4gICAgc2VsZi5fY2xlYW51cChmYWxzZSk7XG4gIH07XG4gIHRoaXMueGRyID0geGRyO1xuICB0aGlzLnVubG9hZFJlZiA9IGV2ZW50VXRpbHMudW5sb2FkQWRkKGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuX2NsZWFudXAodHJ1ZSk7XG4gIH0pO1xuICB0cnkge1xuICAgIC8vIEZhaWxzIHdpdGggQWNjZXNzRGVuaWVkIGlmIHBvcnQgbnVtYmVyIGlzIGJvZ3VzXG4gICAgdGhpcy54ZHIub3BlbihtZXRob2QsIHVybCk7XG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgdGhpcy54ZHIudGltZW91dCA9IHRoaXMudGltZW91dDtcbiAgICB9XG4gICAgdGhpcy54ZHIuc2VuZChwYXlsb2FkKTtcbiAgfSBjYXRjaCAoeCkge1xuICAgIHRoaXMuX2Vycm9yKCk7XG4gIH1cbn07XG5cblhEUk9iamVjdC5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuZW1pdCgnZmluaXNoJywgMCwgJycpO1xuICB0aGlzLl9jbGVhbnVwKGZhbHNlKTtcbn07XG5cblhEUk9iamVjdC5wcm90b3R5cGUuX2NsZWFudXAgPSBmdW5jdGlvbihhYm9ydCkge1xuICBkZWJ1ZygnY2xlYW51cCcsIGFib3J0KTtcbiAgaWYgKCF0aGlzLnhkcikge1xuICAgIHJldHVybjtcbiAgfVxuICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICBldmVudFV0aWxzLnVubG9hZERlbCh0aGlzLnVubG9hZFJlZik7XG5cbiAgdGhpcy54ZHIub250aW1lb3V0ID0gdGhpcy54ZHIub25lcnJvciA9IHRoaXMueGRyLm9ucHJvZ3Jlc3MgPSB0aGlzLnhkci5vbmxvYWQgPSBudWxsO1xuICBpZiAoYWJvcnQpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy54ZHIuYWJvcnQoKTtcbiAgICB9IGNhdGNoICh4KSB7XG4gICAgICAvLyBpbnRlbnRpb25hbGx5IGVtcHR5XG4gICAgfVxuICB9XG4gIHRoaXMudW5sb2FkUmVmID0gdGhpcy54ZHIgPSBudWxsO1xufTtcblxuWERST2JqZWN0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuICBkZWJ1ZygnY2xvc2UnKTtcbiAgdGhpcy5fY2xlYW51cCh0cnVlKTtcbn07XG5cbi8vIElFIDgvOSBpZiB0aGUgcmVxdWVzdCB0YXJnZXQgdXNlcyB0aGUgc2FtZSBzY2hlbWUgLSAjNzlcblhEUk9iamVjdC5lbmFibGVkID0gISEoZ2xvYmFsLlhEb21haW5SZXF1ZXN0ICYmIGJyb3dzZXIuaGFzRG9tYWluKCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFhEUk9iamVjdDtcblxufSkuY2FsbCh0aGlzLHsgZW52OiB7fSB9LHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG5cbn0se1wiLi4vLi4vdXRpbHMvYnJvd3NlclwiOjQ0LFwiLi4vLi4vdXRpbHMvZXZlbnRcIjo0NixcIi4uLy4uL3V0aWxzL3VybFwiOjUyLFwiZGVidWdcIjo1NSxcImV2ZW50c1wiOjMsXCJpbmhlcml0c1wiOjU3fV0sMzU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG4gICwgWGhyRHJpdmVyID0gcmVxdWlyZSgnLi4vZHJpdmVyL3hocicpXG4gIDtcblxuZnVuY3Rpb24gWEhSQ29yc09iamVjdChtZXRob2QsIHVybCwgcGF5bG9hZCwgb3B0cykge1xuICBYaHJEcml2ZXIuY2FsbCh0aGlzLCBtZXRob2QsIHVybCwgcGF5bG9hZCwgb3B0cyk7XG59XG5cbmluaGVyaXRzKFhIUkNvcnNPYmplY3QsIFhockRyaXZlcik7XG5cblhIUkNvcnNPYmplY3QuZW5hYmxlZCA9IFhockRyaXZlci5lbmFibGVkICYmIFhockRyaXZlci5zdXBwb3J0c0NPUlM7XG5cbm1vZHVsZS5leHBvcnRzID0gWEhSQ29yc09iamVjdDtcblxufSx7XCIuLi9kcml2ZXIveGhyXCI6MTcsXCJpbmhlcml0c1wiOjU3fV0sMzY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyXG4gICwgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG4gIDtcblxuZnVuY3Rpb24gWEhSRmFrZSgvKiBtZXRob2QsIHVybCwgcGF5bG9hZCwgb3B0cyAqLykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpO1xuXG4gIHRoaXMudG8gPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuZW1pdCgnZmluaXNoJywgMjAwLCAne30nKTtcbiAgfSwgWEhSRmFrZS50aW1lb3V0KTtcbn1cblxuaW5oZXJpdHMoWEhSRmFrZSwgRXZlbnRFbWl0dGVyKTtcblxuWEhSRmFrZS5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgY2xlYXJUaW1lb3V0KHRoaXMudG8pO1xufTtcblxuWEhSRmFrZS50aW1lb3V0ID0gMjAwMDtcblxubW9kdWxlLmV4cG9ydHMgPSBYSFJGYWtlO1xuXG59LHtcImV2ZW50c1wiOjMsXCJpbmhlcml0c1wiOjU3fV0sMzc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG4gICwgWGhyRHJpdmVyID0gcmVxdWlyZSgnLi4vZHJpdmVyL3hocicpXG4gIDtcblxuZnVuY3Rpb24gWEhSTG9jYWxPYmplY3QobWV0aG9kLCB1cmwsIHBheWxvYWQgLyosIG9wdHMgKi8pIHtcbiAgWGhyRHJpdmVyLmNhbGwodGhpcywgbWV0aG9kLCB1cmwsIHBheWxvYWQsIHtcbiAgICBub0NyZWRlbnRpYWxzOiB0cnVlXG4gIH0pO1xufVxuXG5pbmhlcml0cyhYSFJMb2NhbE9iamVjdCwgWGhyRHJpdmVyKTtcblxuWEhSTG9jYWxPYmplY3QuZW5hYmxlZCA9IFhockRyaXZlci5lbmFibGVkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFhIUkxvY2FsT2JqZWN0O1xuXG59LHtcIi4uL2RyaXZlci94aHJcIjoxNyxcImluaGVyaXRzXCI6NTd9XSwzODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKHByb2Nlc3Mpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscy9ldmVudCcpXG4gICwgdXJsVXRpbHMgPSByZXF1aXJlKCcuLi91dGlscy91cmwnKVxuICAsIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuICAsIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlclxuICAsIFdlYnNvY2tldERyaXZlciA9IHJlcXVpcmUoJy4vZHJpdmVyL3dlYnNvY2tldCcpXG4gIDtcblxudmFyIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc29ja2pzLWNsaWVudDp3ZWJzb2NrZXQnKTtcbn1cblxuZnVuY3Rpb24gV2ViU29ja2V0VHJhbnNwb3J0KHRyYW5zVXJsLCBpZ25vcmUsIG9wdGlvbnMpIHtcbiAgaWYgKCFXZWJTb2NrZXRUcmFuc3BvcnQuZW5hYmxlZCgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUcmFuc3BvcnQgY3JlYXRlZCB3aGVuIGRpc2FibGVkJyk7XG4gIH1cblxuICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcbiAgZGVidWcoJ2NvbnN0cnVjdG9yJywgdHJhbnNVcmwpO1xuXG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHVybCA9IHVybFV0aWxzLmFkZFBhdGgodHJhbnNVcmwsICcvd2Vic29ja2V0Jyk7XG4gIGlmICh1cmwuc2xpY2UoMCwgNSkgPT09ICdodHRwcycpIHtcbiAgICB1cmwgPSAnd3NzJyArIHVybC5zbGljZSg1KTtcbiAgfSBlbHNlIHtcbiAgICB1cmwgPSAnd3MnICsgdXJsLnNsaWNlKDQpO1xuICB9XG4gIHRoaXMudXJsID0gdXJsO1xuXG4gIHRoaXMud3MgPSBuZXcgV2Vic29ja2V0RHJpdmVyKHRoaXMudXJsLCBbXSwgb3B0aW9ucyk7XG4gIHRoaXMud3Mub25tZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICAgIGRlYnVnKCdtZXNzYWdlIGV2ZW50JywgZS5kYXRhKTtcbiAgICBzZWxmLmVtaXQoJ21lc3NhZ2UnLCBlLmRhdGEpO1xuICB9O1xuICAvLyBGaXJlZm94IGhhcyBhbiBpbnRlcmVzdGluZyBidWcuIElmIGEgd2Vic29ja2V0IGNvbm5lY3Rpb24gaXNcbiAgLy8gY3JlYXRlZCBhZnRlciBvbnVubG9hZCwgaXQgc3RheXMgYWxpdmUgZXZlbiB3aGVuIHVzZXJcbiAgLy8gbmF2aWdhdGVzIGF3YXkgZnJvbSB0aGUgcGFnZS4gSW4gc3VjaCBzaXR1YXRpb24gbGV0J3MgbGllIC1cbiAgLy8gbGV0J3Mgbm90IG9wZW4gdGhlIHdzIGNvbm5lY3Rpb24gYXQgYWxsLiBTZWU6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zb2NranMvc29ja2pzLWNsaWVudC9pc3N1ZXMvMjhcbiAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk2MDg1XG4gIHRoaXMudW5sb2FkUmVmID0gdXRpbHMudW5sb2FkQWRkKGZ1bmN0aW9uKCkge1xuICAgIGRlYnVnKCd1bmxvYWQnKTtcbiAgICBzZWxmLndzLmNsb3NlKCk7XG4gIH0pO1xuICB0aGlzLndzLm9uY2xvc2UgPSBmdW5jdGlvbihlKSB7XG4gICAgZGVidWcoJ2Nsb3NlIGV2ZW50JywgZS5jb2RlLCBlLnJlYXNvbik7XG4gICAgc2VsZi5lbWl0KCdjbG9zZScsIGUuY29kZSwgZS5yZWFzb24pO1xuICAgIHNlbGYuX2NsZWFudXAoKTtcbiAgfTtcbiAgdGhpcy53cy5vbmVycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIGRlYnVnKCdlcnJvciBldmVudCcsIGUpO1xuICAgIHNlbGYuZW1pdCgnY2xvc2UnLCAxMDA2LCAnV2ViU29ja2V0IGNvbm5lY3Rpb24gYnJva2VuJyk7XG4gICAgc2VsZi5fY2xlYW51cCgpO1xuICB9O1xufVxuXG5pbmhlcml0cyhXZWJTb2NrZXRUcmFuc3BvcnQsIEV2ZW50RW1pdHRlcik7XG5cbldlYlNvY2tldFRyYW5zcG9ydC5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgdmFyIG1zZyA9ICdbJyArIGRhdGEgKyAnXSc7XG4gIGRlYnVnKCdzZW5kJywgbXNnKTtcbiAgdGhpcy53cy5zZW5kKG1zZyk7XG59O1xuXG5XZWJTb2NrZXRUcmFuc3BvcnQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIGRlYnVnKCdjbG9zZScpO1xuICB2YXIgd3MgPSB0aGlzLndzO1xuICB0aGlzLl9jbGVhbnVwKCk7XG4gIGlmICh3cykge1xuICAgIHdzLmNsb3NlKCk7XG4gIH1cbn07XG5cbldlYlNvY2tldFRyYW5zcG9ydC5wcm90b3R5cGUuX2NsZWFudXAgPSBmdW5jdGlvbigpIHtcbiAgZGVidWcoJ19jbGVhbnVwJyk7XG4gIHZhciB3cyA9IHRoaXMud3M7XG4gIGlmICh3cykge1xuICAgIHdzLm9ubWVzc2FnZSA9IHdzLm9uY2xvc2UgPSB3cy5vbmVycm9yID0gbnVsbDtcbiAgfVxuICB1dGlscy51bmxvYWREZWwodGhpcy51bmxvYWRSZWYpO1xuICB0aGlzLnVubG9hZFJlZiA9IHRoaXMud3MgPSBudWxsO1xuICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygpO1xufTtcblxuV2ViU29ja2V0VHJhbnNwb3J0LmVuYWJsZWQgPSBmdW5jdGlvbigpIHtcbiAgZGVidWcoJ2VuYWJsZWQnKTtcbiAgcmV0dXJuICEhV2Vic29ja2V0RHJpdmVyO1xufTtcbldlYlNvY2tldFRyYW5zcG9ydC50cmFuc3BvcnROYW1lID0gJ3dlYnNvY2tldCc7XG5cbi8vIEluIHRoZW9yeSwgd3Mgc2hvdWxkIHJlcXVpcmUgMSByb3VuZCB0cmlwLiBCdXQgaW4gY2hyb21lLCB0aGlzIGlzXG4vLyBub3QgdmVyeSBzdGFibGUgb3ZlciBTU0wuIE1vc3QgbGlrZWx5IGEgd3MgY29ubmVjdGlvbiByZXF1aXJlcyBhXG4vLyBzZXBhcmF0ZSBTU0wgY29ubmVjdGlvbiwgaW4gd2hpY2ggY2FzZSAyIHJvdW5kIHRyaXBzIGFyZSBhblxuLy8gYWJzb2x1dGUgbWludW11bS5cbldlYlNvY2tldFRyYW5zcG9ydC5yb3VuZFRyaXBzID0gMjtcblxubW9kdWxlLmV4cG9ydHMgPSBXZWJTb2NrZXRUcmFuc3BvcnQ7XG5cbn0pLmNhbGwodGhpcyx7IGVudjoge30gfSlcblxufSx7XCIuLi91dGlscy9ldmVudFwiOjQ2LFwiLi4vdXRpbHMvdXJsXCI6NTIsXCIuL2RyaXZlci93ZWJzb2NrZXRcIjoxOSxcImRlYnVnXCI6NTUsXCJldmVudHNcIjozLFwiaW5oZXJpdHNcIjo1N31dLDM5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKVxuICAsIEFqYXhCYXNlZFRyYW5zcG9ydCA9IHJlcXVpcmUoJy4vbGliL2FqYXgtYmFzZWQnKVxuICAsIFhkclN0cmVhbWluZ1RyYW5zcG9ydCA9IHJlcXVpcmUoJy4veGRyLXN0cmVhbWluZycpXG4gICwgWGhyUmVjZWl2ZXIgPSByZXF1aXJlKCcuL3JlY2VpdmVyL3hocicpXG4gICwgWERST2JqZWN0ID0gcmVxdWlyZSgnLi9zZW5kZXIveGRyJylcbiAgO1xuXG5mdW5jdGlvbiBYZHJQb2xsaW5nVHJhbnNwb3J0KHRyYW5zVXJsKSB7XG4gIGlmICghWERST2JqZWN0LmVuYWJsZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zcG9ydCBjcmVhdGVkIHdoZW4gZGlzYWJsZWQnKTtcbiAgfVxuICBBamF4QmFzZWRUcmFuc3BvcnQuY2FsbCh0aGlzLCB0cmFuc1VybCwgJy94aHInLCBYaHJSZWNlaXZlciwgWERST2JqZWN0KTtcbn1cblxuaW5oZXJpdHMoWGRyUG9sbGluZ1RyYW5zcG9ydCwgQWpheEJhc2VkVHJhbnNwb3J0KTtcblxuWGRyUG9sbGluZ1RyYW5zcG9ydC5lbmFibGVkID0gWGRyU3RyZWFtaW5nVHJhbnNwb3J0LmVuYWJsZWQ7XG5YZHJQb2xsaW5nVHJhbnNwb3J0LnRyYW5zcG9ydE5hbWUgPSAneGRyLXBvbGxpbmcnO1xuWGRyUG9sbGluZ1RyYW5zcG9ydC5yb3VuZFRyaXBzID0gMjsgLy8gcHJlZmxpZ2h0LCBhamF4XG5cbm1vZHVsZS5leHBvcnRzID0gWGRyUG9sbGluZ1RyYW5zcG9ydDtcblxufSx7XCIuL2xpYi9hamF4LWJhc2VkXCI6MjQsXCIuL3JlY2VpdmVyL3hoclwiOjMyLFwiLi9zZW5kZXIveGRyXCI6MzQsXCIuL3hkci1zdHJlYW1pbmdcIjo0MCxcImluaGVyaXRzXCI6NTd9XSw0MDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbiAgLCBBamF4QmFzZWRUcmFuc3BvcnQgPSByZXF1aXJlKCcuL2xpYi9hamF4LWJhc2VkJylcbiAgLCBYaHJSZWNlaXZlciA9IHJlcXVpcmUoJy4vcmVjZWl2ZXIveGhyJylcbiAgLCBYRFJPYmplY3QgPSByZXF1aXJlKCcuL3NlbmRlci94ZHInKVxuICA7XG5cbi8vIEFjY29yZGluZyB0bzpcbi8vICAgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNjQxNTA3L2RldGVjdC1icm93c2VyLXN1cHBvcnQtZm9yLWNyb3NzLWRvbWFpbi14bWxodHRwcmVxdWVzdHNcbi8vICAgaHR0cDovL2hhY2tzLm1vemlsbGEub3JnLzIwMDkvMDcvY3Jvc3Mtc2l0ZS14bWxodHRwcmVxdWVzdC13aXRoLWNvcnMvXG5cbmZ1bmN0aW9uIFhkclN0cmVhbWluZ1RyYW5zcG9ydCh0cmFuc1VybCkge1xuICBpZiAoIVhEUk9iamVjdC5lbmFibGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUcmFuc3BvcnQgY3JlYXRlZCB3aGVuIGRpc2FibGVkJyk7XG4gIH1cbiAgQWpheEJhc2VkVHJhbnNwb3J0LmNhbGwodGhpcywgdHJhbnNVcmwsICcveGhyX3N0cmVhbWluZycsIFhoclJlY2VpdmVyLCBYRFJPYmplY3QpO1xufVxuXG5pbmhlcml0cyhYZHJTdHJlYW1pbmdUcmFuc3BvcnQsIEFqYXhCYXNlZFRyYW5zcG9ydCk7XG5cblhkclN0cmVhbWluZ1RyYW5zcG9ydC5lbmFibGVkID0gZnVuY3Rpb24oaW5mbykge1xuICBpZiAoaW5mby5jb29raWVfbmVlZGVkIHx8IGluZm8ubnVsbE9yaWdpbikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gWERST2JqZWN0LmVuYWJsZWQgJiYgaW5mby5zYW1lU2NoZW1lO1xufTtcblxuWGRyU3RyZWFtaW5nVHJhbnNwb3J0LnRyYW5zcG9ydE5hbWUgPSAneGRyLXN0cmVhbWluZyc7XG5YZHJTdHJlYW1pbmdUcmFuc3BvcnQucm91bmRUcmlwcyA9IDI7IC8vIHByZWZsaWdodCwgYWpheFxuXG5tb2R1bGUuZXhwb3J0cyA9IFhkclN0cmVhbWluZ1RyYW5zcG9ydDtcblxufSx7XCIuL2xpYi9hamF4LWJhc2VkXCI6MjQsXCIuL3JlY2VpdmVyL3hoclwiOjMyLFwiLi9zZW5kZXIveGRyXCI6MzQsXCJpbmhlcml0c1wiOjU3fV0sNDE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG4gICwgQWpheEJhc2VkVHJhbnNwb3J0ID0gcmVxdWlyZSgnLi9saWIvYWpheC1iYXNlZCcpXG4gICwgWGhyUmVjZWl2ZXIgPSByZXF1aXJlKCcuL3JlY2VpdmVyL3hocicpXG4gICwgWEhSQ29yc09iamVjdCA9IHJlcXVpcmUoJy4vc2VuZGVyL3hoci1jb3JzJylcbiAgLCBYSFJMb2NhbE9iamVjdCA9IHJlcXVpcmUoJy4vc2VuZGVyL3hoci1sb2NhbCcpXG4gIDtcblxuZnVuY3Rpb24gWGhyUG9sbGluZ1RyYW5zcG9ydCh0cmFuc1VybCkge1xuICBpZiAoIVhIUkxvY2FsT2JqZWN0LmVuYWJsZWQgJiYgIVhIUkNvcnNPYmplY3QuZW5hYmxlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVHJhbnNwb3J0IGNyZWF0ZWQgd2hlbiBkaXNhYmxlZCcpO1xuICB9XG4gIEFqYXhCYXNlZFRyYW5zcG9ydC5jYWxsKHRoaXMsIHRyYW5zVXJsLCAnL3hocicsIFhoclJlY2VpdmVyLCBYSFJDb3JzT2JqZWN0KTtcbn1cblxuaW5oZXJpdHMoWGhyUG9sbGluZ1RyYW5zcG9ydCwgQWpheEJhc2VkVHJhbnNwb3J0KTtcblxuWGhyUG9sbGluZ1RyYW5zcG9ydC5lbmFibGVkID0gZnVuY3Rpb24oaW5mbykge1xuICBpZiAoaW5mby5udWxsT3JpZ2luKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFhIUkxvY2FsT2JqZWN0LmVuYWJsZWQgJiYgaW5mby5zYW1lT3JpZ2luKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIFhIUkNvcnNPYmplY3QuZW5hYmxlZDtcbn07XG5cblhoclBvbGxpbmdUcmFuc3BvcnQudHJhbnNwb3J0TmFtZSA9ICd4aHItcG9sbGluZyc7XG5YaHJQb2xsaW5nVHJhbnNwb3J0LnJvdW5kVHJpcHMgPSAyOyAvLyBwcmVmbGlnaHQsIGFqYXhcblxubW9kdWxlLmV4cG9ydHMgPSBYaHJQb2xsaW5nVHJhbnNwb3J0O1xuXG59LHtcIi4vbGliL2FqYXgtYmFzZWRcIjoyNCxcIi4vcmVjZWl2ZXIveGhyXCI6MzIsXCIuL3NlbmRlci94aHItY29yc1wiOjM1LFwiLi9zZW5kZXIveGhyLWxvY2FsXCI6MzcsXCJpbmhlcml0c1wiOjU3fV0sNDI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChnbG9iYWwpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG4gICwgQWpheEJhc2VkVHJhbnNwb3J0ID0gcmVxdWlyZSgnLi9saWIvYWpheC1iYXNlZCcpXG4gICwgWGhyUmVjZWl2ZXIgPSByZXF1aXJlKCcuL3JlY2VpdmVyL3hocicpXG4gICwgWEhSQ29yc09iamVjdCA9IHJlcXVpcmUoJy4vc2VuZGVyL3hoci1jb3JzJylcbiAgLCBYSFJMb2NhbE9iamVjdCA9IHJlcXVpcmUoJy4vc2VuZGVyL3hoci1sb2NhbCcpXG4gICwgYnJvd3NlciA9IHJlcXVpcmUoJy4uL3V0aWxzL2Jyb3dzZXInKVxuICA7XG5cbmZ1bmN0aW9uIFhoclN0cmVhbWluZ1RyYW5zcG9ydCh0cmFuc1VybCkge1xuICBpZiAoIVhIUkxvY2FsT2JqZWN0LmVuYWJsZWQgJiYgIVhIUkNvcnNPYmplY3QuZW5hYmxlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVHJhbnNwb3J0IGNyZWF0ZWQgd2hlbiBkaXNhYmxlZCcpO1xuICB9XG4gIEFqYXhCYXNlZFRyYW5zcG9ydC5jYWxsKHRoaXMsIHRyYW5zVXJsLCAnL3hocl9zdHJlYW1pbmcnLCBYaHJSZWNlaXZlciwgWEhSQ29yc09iamVjdCk7XG59XG5cbmluaGVyaXRzKFhoclN0cmVhbWluZ1RyYW5zcG9ydCwgQWpheEJhc2VkVHJhbnNwb3J0KTtcblxuWGhyU3RyZWFtaW5nVHJhbnNwb3J0LmVuYWJsZWQgPSBmdW5jdGlvbihpbmZvKSB7XG4gIGlmIChpbmZvLm51bGxPcmlnaW4pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gT3BlcmEgZG9lc24ndCBzdXBwb3J0IHhoci1zdHJlYW1pbmcgIzYwXG4gIC8vIEJ1dCBpdCBtaWdodCBiZSBhYmxlIHRvICM5MlxuICBpZiAoYnJvd3Nlci5pc09wZXJhKCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gWEhSQ29yc09iamVjdC5lbmFibGVkO1xufTtcblxuWGhyU3RyZWFtaW5nVHJhbnNwb3J0LnRyYW5zcG9ydE5hbWUgPSAneGhyLXN0cmVhbWluZyc7XG5YaHJTdHJlYW1pbmdUcmFuc3BvcnQucm91bmRUcmlwcyA9IDI7IC8vIHByZWZsaWdodCwgYWpheFxuXG4vLyBTYWZhcmkgZ2V0cyBjb25mdXNlZCB3aGVuIGEgc3RyZWFtaW5nIGFqYXggcmVxdWVzdCBpcyBzdGFydGVkXG4vLyBiZWZvcmUgb25sb2FkLiBUaGlzIGNhdXNlcyB0aGUgbG9hZCBpbmRpY2F0b3IgdG8gc3BpbiBpbmRlZmluZXRlbHkuXG4vLyBPbmx5IHJlcXVpcmUgYm9keSB3aGVuIHVzZWQgaW4gYSBicm93c2VyXG5YaHJTdHJlYW1pbmdUcmFuc3BvcnQubmVlZEJvZHkgPSAhIWdsb2JhbC5kb2N1bWVudDtcblxubW9kdWxlLmV4cG9ydHMgPSBYaHJTdHJlYW1pbmdUcmFuc3BvcnQ7XG5cbn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KVxuXG59LHtcIi4uL3V0aWxzL2Jyb3dzZXJcIjo0NCxcIi4vbGliL2FqYXgtYmFzZWRcIjoyNCxcIi4vcmVjZWl2ZXIveGhyXCI6MzIsXCIuL3NlbmRlci94aHItY29yc1wiOjM1LFwiLi9zZW5kZXIveGhyLWxvY2FsXCI6MzcsXCJpbmhlcml0c1wiOjU3fV0sNDM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChnbG9iYWwpe1xuJ3VzZSBzdHJpY3QnO1xuXG5pZiAoZ2xvYmFsLmNyeXB0byAmJiBnbG9iYWwuY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuICBtb2R1bGUuZXhwb3J0cy5yYW5kb21CeXRlcyA9IGZ1bmN0aW9uKGxlbmd0aCkge1xuICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG4gICAgZ2xvYmFsLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYnl0ZXMpO1xuICAgIHJldHVybiBieXRlcztcbiAgfTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzLnJhbmRvbUJ5dGVzID0gZnVuY3Rpb24obGVuZ3RoKSB7XG4gICAgdmFyIGJ5dGVzID0gbmV3IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgYnl0ZXNbaV0gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyNTYpO1xuICAgIH1cbiAgICByZXR1cm4gYnl0ZXM7XG4gIH07XG59XG5cbn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KVxuXG59LHt9XSw0NDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKGdsb2JhbCl7XG4ndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc09wZXJhOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZ2xvYmFsLm5hdmlnYXRvciAmJlxuICAgICAgL29wZXJhL2kudGVzdChnbG9iYWwubmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gIH1cblxuLCBpc0tvbnF1ZXJvcjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGdsb2JhbC5uYXZpZ2F0b3IgJiZcbiAgICAgIC9rb25xdWVyb3IvaS50ZXN0KGdsb2JhbC5uYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgfVxuXG4gIC8vICMxODcgd3JhcCBkb2N1bWVudC5kb21haW4gaW4gdHJ5L2NhdGNoIGJlY2F1c2Ugb2YgV1A4IGZyb20gZmlsZTovLy9cbiwgaGFzRG9tYWluOiBmdW5jdGlvbiAoKSB7XG4gICAgLy8gbm9uLWJyb3dzZXIgY2xpZW50IGFsd2F5cyBoYXMgYSBkb21haW5cbiAgICBpZiAoIWdsb2JhbC5kb2N1bWVudCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAhIWdsb2JhbC5kb2N1bWVudC5kb21haW47XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufTtcblxufSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG5cbn0se31dLDQ1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0JztcblxudmFyIEpTT04zID0gcmVxdWlyZSgnanNvbjMnKTtcblxuLy8gU29tZSBleHRyYSBjaGFyYWN0ZXJzIHRoYXQgQ2hyb21lIGdldHMgd3JvbmcsIGFuZCBzdWJzdGl0dXRlcyB3aXRoXG4vLyBzb21ldGhpbmcgZWxzZSBvbiB0aGUgd2lyZS5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4LCBuby1taXNsZWFkaW5nLWNoYXJhY3Rlci1jbGFzc1xudmFyIGV4dHJhRXNjYXBhYmxlID0gL1tcXHgwMC1cXHgxZlxcdWQ4MDAtXFx1ZGZmZlxcdWZmZmVcXHVmZmZmXFx1MDMwMC1cXHUwMzMzXFx1MDMzZC1cXHUwMzQ2XFx1MDM0YS1cXHUwMzRjXFx1MDM1MC1cXHUwMzUyXFx1MDM1Ny1cXHUwMzU4XFx1MDM1Yy1cXHUwMzYyXFx1MDM3NFxcdTAzN2VcXHUwMzg3XFx1MDU5MS1cXHUwNWFmXFx1MDVjNFxcdTA2MTAtXFx1MDYxN1xcdTA2NTMtXFx1MDY1NFxcdTA2NTctXFx1MDY1YlxcdTA2NWQtXFx1MDY1ZVxcdTA2ZGYtXFx1MDZlMlxcdTA2ZWItXFx1MDZlY1xcdTA3MzBcXHUwNzMyLVxcdTA3MzNcXHUwNzM1LVxcdTA3MzZcXHUwNzNhXFx1MDczZFxcdTA3M2YtXFx1MDc0MVxcdTA3NDNcXHUwNzQ1XFx1MDc0N1xcdTA3ZWItXFx1MDdmMVxcdTA5NTFcXHUwOTU4LVxcdTA5NWZcXHUwOWRjLVxcdTA5ZGRcXHUwOWRmXFx1MGEzM1xcdTBhMzZcXHUwYTU5LVxcdTBhNWJcXHUwYTVlXFx1MGI1Yy1cXHUwYjVkXFx1MGUzOC1cXHUwZTM5XFx1MGY0M1xcdTBmNGRcXHUwZjUyXFx1MGY1N1xcdTBmNWNcXHUwZjY5XFx1MGY3Mi1cXHUwZjc2XFx1MGY3OFxcdTBmODAtXFx1MGY4M1xcdTBmOTNcXHUwZjlkXFx1MGZhMlxcdTBmYTdcXHUwZmFjXFx1MGZiOVxcdTE5MzktXFx1MTkzYVxcdTFhMTdcXHUxYjZiXFx1MWNkYS1cXHUxY2RiXFx1MWRjMC1cXHUxZGNmXFx1MWRmY1xcdTFkZmVcXHUxZjcxXFx1MWY3M1xcdTFmNzVcXHUxZjc3XFx1MWY3OVxcdTFmN2JcXHUxZjdkXFx1MWZiYlxcdTFmYmVcXHUxZmM5XFx1MWZjYlxcdTFmZDNcXHUxZmRiXFx1MWZlM1xcdTFmZWJcXHUxZmVlLVxcdTFmZWZcXHUxZmY5XFx1MWZmYlxcdTFmZmRcXHUyMDAwLVxcdTIwMDFcXHUyMGQwLVxcdTIwZDFcXHUyMGQ0LVxcdTIwZDdcXHUyMGU3LVxcdTIwZTlcXHUyMTI2XFx1MjEyYS1cXHUyMTJiXFx1MjMyOS1cXHUyMzJhXFx1MmFkY1xcdTMwMmItXFx1MzAyY1xcdWFhYjItXFx1YWFiM1xcdWY5MDAtXFx1ZmEwZFxcdWZhMTBcXHVmYTEyXFx1ZmExNS1cXHVmYTFlXFx1ZmEyMFxcdWZhMjJcXHVmYTI1LVxcdWZhMjZcXHVmYTJhLVxcdWZhMmRcXHVmYTMwLVxcdWZhNmRcXHVmYTcwLVxcdWZhZDlcXHVmYjFkXFx1ZmIxZlxcdWZiMmEtXFx1ZmIzNlxcdWZiMzgtXFx1ZmIzY1xcdWZiM2VcXHVmYjQwLVxcdWZiNDFcXHVmYjQzLVxcdWZiNDRcXHVmYjQ2LVxcdWZiNGVcXHVmZmYwLVxcdWZmZmZdL2dcbiAgLCBleHRyYUxvb2t1cDtcblxuLy8gVGhpcyBtYXkgYmUgcXVpdGUgc2xvdywgc28gbGV0J3MgZGVsYXkgdW50aWwgdXNlciBhY3R1YWxseSB1c2VzIGJhZFxuLy8gY2hhcmFjdGVycy5cbnZhciB1bnJvbGxMb29rdXAgPSBmdW5jdGlvbihlc2NhcGFibGUpIHtcbiAgdmFyIGk7XG4gIHZhciB1bnJvbGxlZCA9IHt9O1xuICB2YXIgYyA9IFtdO1xuICBmb3IgKGkgPSAwOyBpIDwgNjU1MzY7IGkrKykge1xuICAgIGMucHVzaCggU3RyaW5nLmZyb21DaGFyQ29kZShpKSApO1xuICB9XG4gIGVzY2FwYWJsZS5sYXN0SW5kZXggPSAwO1xuICBjLmpvaW4oJycpLnJlcGxhY2UoZXNjYXBhYmxlLCBmdW5jdGlvbihhKSB7XG4gICAgdW5yb2xsZWRbIGEgXSA9ICdcXFxcdScgKyAoJzAwMDAnICsgYS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpO1xuICAgIHJldHVybiAnJztcbiAgfSk7XG4gIGVzY2FwYWJsZS5sYXN0SW5kZXggPSAwO1xuICByZXR1cm4gdW5yb2xsZWQ7XG59O1xuXG4vLyBRdW90ZSBzdHJpbmcsIGFsc28gdGFraW5nIGNhcmUgb2YgdW5pY29kZSBjaGFyYWN0ZXJzIHRoYXQgYnJvd3NlcnNcbi8vIG9mdGVuIGJyZWFrLiBFc3BlY2lhbGx5LCB0YWtlIGNhcmUgb2YgdW5pY29kZSBzdXJyb2dhdGVzOlxuLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NYXBwaW5nX29mX1VuaWNvZGVfY2hhcmFjdGVycyNTdXJyb2dhdGVzXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcXVvdGU6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgIHZhciBxdW90ZWQgPSBKU09OMy5zdHJpbmdpZnkoc3RyaW5nKTtcblxuICAgIC8vIEluIG1vc3QgY2FzZXMgdGhpcyBzaG91bGQgYmUgdmVyeSBmYXN0IGFuZCBnb29kIGVub3VnaC5cbiAgICBleHRyYUVzY2FwYWJsZS5sYXN0SW5kZXggPSAwO1xuICAgIGlmICghZXh0cmFFc2NhcGFibGUudGVzdChxdW90ZWQpKSB7XG4gICAgICByZXR1cm4gcXVvdGVkO1xuICAgIH1cblxuICAgIGlmICghZXh0cmFMb29rdXApIHtcbiAgICAgIGV4dHJhTG9va3VwID0gdW5yb2xsTG9va3VwKGV4dHJhRXNjYXBhYmxlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcXVvdGVkLnJlcGxhY2UoZXh0cmFFc2NhcGFibGUsIGZ1bmN0aW9uKGEpIHtcbiAgICAgIHJldHVybiBleHRyYUxvb2t1cFthXTtcbiAgICB9KTtcbiAgfVxufTtcblxufSx7XCJqc29uM1wiOjU4fV0sNDY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChnbG9iYWwpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmFuZG9tID0gcmVxdWlyZSgnLi9yYW5kb20nKTtcblxudmFyIG9uVW5sb2FkID0ge31cbiAgLCBhZnRlclVubG9hZCA9IGZhbHNlXG4gICAgLy8gZGV0ZWN0IGdvb2dsZSBjaHJvbWUgcGFja2FnZWQgYXBwcyBiZWNhdXNlIHRoZXkgZG9uJ3QgYWxsb3cgdGhlICd1bmxvYWQnIGV2ZW50XG4gICwgaXNDaHJvbWVQYWNrYWdlZEFwcCA9IGdsb2JhbC5jaHJvbWUgJiYgZ2xvYmFsLmNocm9tZS5hcHAgJiYgZ2xvYmFsLmNocm9tZS5hcHAucnVudGltZVxuICA7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhdHRhY2hFdmVudDogZnVuY3Rpb24oZXZlbnQsIGxpc3RlbmVyKSB7XG4gICAgaWYgKHR5cGVvZiBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lciwgZmFsc2UpO1xuICAgIH0gZWxzZSBpZiAoZ2xvYmFsLmRvY3VtZW50ICYmIGdsb2JhbC5hdHRhY2hFdmVudCkge1xuICAgICAgLy8gSUUgcXVpcmtzLlxuICAgICAgLy8gQWNjb3JkaW5nIHRvOiBodHRwOi8vc3RldmVzb3VkZXJzLmNvbS9taXNjL3Rlc3QtcG9zdG1lc3NhZ2UucGhwXG4gICAgICAvLyB0aGUgbWVzc2FnZSBnZXRzIGRlbGl2ZXJlZCBvbmx5IHRvICdkb2N1bWVudCcsIG5vdCAnd2luZG93Jy5cbiAgICAgIGdsb2JhbC5kb2N1bWVudC5hdHRhY2hFdmVudCgnb24nICsgZXZlbnQsIGxpc3RlbmVyKTtcbiAgICAgIC8vIEkgZ2V0ICd3aW5kb3cnIGZvciBpZTguXG4gICAgICBnbG9iYWwuYXR0YWNoRXZlbnQoJ29uJyArIGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgfVxuICB9XG5cbiwgZGV0YWNoRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50LCBsaXN0ZW5lcikge1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBnbG9iYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIsIGZhbHNlKTtcbiAgICB9IGVsc2UgaWYgKGdsb2JhbC5kb2N1bWVudCAmJiBnbG9iYWwuZGV0YWNoRXZlbnQpIHtcbiAgICAgIGdsb2JhbC5kb2N1bWVudC5kZXRhY2hFdmVudCgnb24nICsgZXZlbnQsIGxpc3RlbmVyKTtcbiAgICAgIGdsb2JhbC5kZXRhY2hFdmVudCgnb24nICsgZXZlbnQsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH1cblxuLCB1bmxvYWRBZGQ6IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYgKGlzQ2hyb21lUGFja2FnZWRBcHApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciByZWYgPSByYW5kb20uc3RyaW5nKDgpO1xuICAgIG9uVW5sb2FkW3JlZl0gPSBsaXN0ZW5lcjtcbiAgICBpZiAoYWZ0ZXJVbmxvYWQpIHtcbiAgICAgIHNldFRpbWVvdXQodGhpcy50cmlnZ2VyVW5sb2FkQ2FsbGJhY2tzLCAwKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZjtcbiAgfVxuXG4sIHVubG9hZERlbDogZnVuY3Rpb24ocmVmKSB7XG4gICAgaWYgKHJlZiBpbiBvblVubG9hZCkge1xuICAgICAgZGVsZXRlIG9uVW5sb2FkW3JlZl07XG4gICAgfVxuICB9XG5cbiwgdHJpZ2dlclVubG9hZENhbGxiYWNrczogZnVuY3Rpb24oKSB7XG4gICAgZm9yICh2YXIgcmVmIGluIG9uVW5sb2FkKSB7XG4gICAgICBvblVubG9hZFtyZWZdKCk7XG4gICAgICBkZWxldGUgb25VbmxvYWRbcmVmXTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciB1bmxvYWRUcmlnZ2VyZWQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKGFmdGVyVW5sb2FkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGFmdGVyVW5sb2FkID0gdHJ1ZTtcbiAgbW9kdWxlLmV4cG9ydHMudHJpZ2dlclVubG9hZENhbGxiYWNrcygpO1xufTtcblxuLy8gJ3VubG9hZCcgYWxvbmUgaXMgbm90IHJlbGlhYmxlIGluIG9wZXJhIHdpdGhpbiBhbiBpZnJhbWUsIGJ1dCB3ZVxuLy8gY2FuJ3QgdXNlIGBiZWZvcmV1bmxvYWRgIGFzIElFIGZpcmVzIGl0IG9uIGphdmFzY3JpcHQ6IGxpbmtzLlxuaWYgKCFpc0Nocm9tZVBhY2thZ2VkQXBwKSB7XG4gIG1vZHVsZS5leHBvcnRzLmF0dGFjaEV2ZW50KCd1bmxvYWQnLCB1bmxvYWRUcmlnZ2VyZWQpO1xufVxuXG59KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcblxufSx7XCIuL3JhbmRvbVwiOjUwfV0sNDc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChwcm9jZXNzLGdsb2JhbCl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBldmVudFV0aWxzID0gcmVxdWlyZSgnLi9ldmVudCcpXG4gICwgSlNPTjMgPSByZXF1aXJlKCdqc29uMycpXG4gICwgYnJvd3NlciA9IHJlcXVpcmUoJy4vYnJvd3NlcicpXG4gIDtcblxudmFyIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc29ja2pzLWNsaWVudDp1dGlsczppZnJhbWUnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFdQcmVmaXg6ICdfanAnXG4sIGN1cnJlbnRXaW5kb3dJZDogbnVsbFxuXG4sIHBvbGx1dGVHbG9iYWxOYW1lc3BhY2U6IGZ1bmN0aW9uKCkge1xuICAgIGlmICghKG1vZHVsZS5leHBvcnRzLldQcmVmaXggaW4gZ2xvYmFsKSkge1xuICAgICAgZ2xvYmFsW21vZHVsZS5leHBvcnRzLldQcmVmaXhdID0ge307XG4gICAgfVxuICB9XG5cbiwgcG9zdE1lc3NhZ2U6IGZ1bmN0aW9uKHR5cGUsIGRhdGEpIHtcbiAgICBpZiAoZ2xvYmFsLnBhcmVudCAhPT0gZ2xvYmFsKSB7XG4gICAgICBnbG9iYWwucGFyZW50LnBvc3RNZXNzYWdlKEpTT04zLnN0cmluZ2lmeSh7XG4gICAgICAgIHdpbmRvd0lkOiBtb2R1bGUuZXhwb3J0cy5jdXJyZW50V2luZG93SWRcbiAgICAgICwgdHlwZTogdHlwZVxuICAgICAgLCBkYXRhOiBkYXRhIHx8ICcnXG4gICAgICB9KSwgJyonKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWcoJ0Nhbm5vdCBwb3N0TWVzc2FnZSwgbm8gcGFyZW50IHdpbmRvdy4nLCB0eXBlLCBkYXRhKTtcbiAgICB9XG4gIH1cblxuLCBjcmVhdGVJZnJhbWU6IGZ1bmN0aW9uKGlmcmFtZVVybCwgZXJyb3JDYWxsYmFjaykge1xuICAgIHZhciBpZnJhbWUgPSBnbG9iYWwuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gICAgdmFyIHRyZWYsIHVubG9hZFJlZjtcbiAgICB2YXIgdW5hdHRhY2ggPSBmdW5jdGlvbigpIHtcbiAgICAgIGRlYnVnKCd1bmF0dGFjaCcpO1xuICAgICAgY2xlYXJUaW1lb3V0KHRyZWYpO1xuICAgICAgLy8gRXhwbG9yZXIgaGFkIHByb2JsZW1zIHdpdGggdGhhdC5cbiAgICAgIHRyeSB7XG4gICAgICAgIGlmcmFtZS5vbmxvYWQgPSBudWxsO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAvLyBpbnRlbnRpb25hbGx5IGVtcHR5XG4gICAgICB9XG4gICAgICBpZnJhbWUub25lcnJvciA9IG51bGw7XG4gICAgfTtcbiAgICB2YXIgY2xlYW51cCA9IGZ1bmN0aW9uKCkge1xuICAgICAgZGVidWcoJ2NsZWFudXAnKTtcbiAgICAgIGlmIChpZnJhbWUpIHtcbiAgICAgICAgdW5hdHRhY2goKTtcbiAgICAgICAgLy8gVGhpcyB0aW1lb3V0IG1ha2VzIGNocm9tZSBmaXJlIG9uYmVmb3JldW5sb2FkIGV2ZW50XG4gICAgICAgIC8vIHdpdGhpbiBpZnJhbWUuIFdpdGhvdXQgdGhlIHRpbWVvdXQgaXQgZ29lcyBzdHJhaWdodCB0b1xuICAgICAgICAvLyBvbnVubG9hZC5cbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoaWZyYW1lKSB7XG4gICAgICAgICAgICBpZnJhbWUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZnJhbWUgPSBudWxsO1xuICAgICAgICB9LCAwKTtcbiAgICAgICAgZXZlbnRVdGlscy51bmxvYWREZWwodW5sb2FkUmVmKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBvbmVycm9yID0gZnVuY3Rpb24oZXJyKSB7XG4gICAgICBkZWJ1Zygnb25lcnJvcicsIGVycik7XG4gICAgICBpZiAoaWZyYW1lKSB7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgZXJyb3JDYWxsYmFjayhlcnIpO1xuICAgICAgfVxuICAgIH07XG4gICAgdmFyIHBvc3QgPSBmdW5jdGlvbihtc2csIG9yaWdpbikge1xuICAgICAgZGVidWcoJ3Bvc3QnLCBtc2csIG9yaWdpbik7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFdoZW4gdGhlIGlmcmFtZSBpcyBub3QgbG9hZGVkLCBJRSByYWlzZXMgYW4gZXhjZXB0aW9uXG4gICAgICAgICAgLy8gb24gJ2NvbnRlbnRXaW5kb3cnLlxuICAgICAgICAgIGlmIChpZnJhbWUgJiYgaWZyYW1lLmNvbnRlbnRXaW5kb3cpIHtcbiAgICAgICAgICAgIGlmcmFtZS5jb250ZW50V2luZG93LnBvc3RNZXNzYWdlKG1zZywgb3JpZ2luKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAvLyBpbnRlbnRpb25hbGx5IGVtcHR5XG4gICAgICAgIH1cbiAgICAgIH0sIDApO1xuICAgIH07XG5cbiAgICBpZnJhbWUuc3JjID0gaWZyYW1lVXJsO1xuICAgIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIGlmcmFtZS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgaWZyYW1lLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIG9uZXJyb3IoJ29uZXJyb3InKTtcbiAgICB9O1xuICAgIGlmcmFtZS5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIGRlYnVnKCdvbmxvYWQnKTtcbiAgICAgIC8vIGBvbmxvYWRgIGlzIHRyaWdnZXJlZCBiZWZvcmUgc2NyaXB0cyBvbiB0aGUgaWZyYW1lIGFyZVxuICAgICAgLy8gZXhlY3V0ZWQuIEdpdmUgaXQgZmV3IHNlY29uZHMgdG8gYWN0dWFsbHkgbG9hZCBzdHVmZi5cbiAgICAgIGNsZWFyVGltZW91dCh0cmVmKTtcbiAgICAgIHRyZWYgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICBvbmVycm9yKCdvbmxvYWQgdGltZW91dCcpO1xuICAgICAgfSwgMjAwMCk7XG4gICAgfTtcbiAgICBnbG9iYWwuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICAgIHRyZWYgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgb25lcnJvcigndGltZW91dCcpO1xuICAgIH0sIDE1MDAwKTtcbiAgICB1bmxvYWRSZWYgPSBldmVudFV0aWxzLnVubG9hZEFkZChjbGVhbnVwKTtcbiAgICByZXR1cm4ge1xuICAgICAgcG9zdDogcG9zdFxuICAgICwgY2xlYW51cDogY2xlYW51cFxuICAgICwgbG9hZGVkOiB1bmF0dGFjaFxuICAgIH07XG4gIH1cblxuLyogZXNsaW50IG5vLXVuZGVmOiBcIm9mZlwiLCBuZXctY2FwOiBcIm9mZlwiICovXG4sIGNyZWF0ZUh0bWxmaWxlOiBmdW5jdGlvbihpZnJhbWVVcmwsIGVycm9yQ2FsbGJhY2spIHtcbiAgICB2YXIgYXhvID0gWydBY3RpdmUnXS5jb25jYXQoJ09iamVjdCcpLmpvaW4oJ1gnKTtcbiAgICB2YXIgZG9jID0gbmV3IGdsb2JhbFtheG9dKCdodG1sZmlsZScpO1xuICAgIHZhciB0cmVmLCB1bmxvYWRSZWY7XG4gICAgdmFyIGlmcmFtZTtcbiAgICB2YXIgdW5hdHRhY2ggPSBmdW5jdGlvbigpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0cmVmKTtcbiAgICAgIGlmcmFtZS5vbmVycm9yID0gbnVsbDtcbiAgICB9O1xuICAgIHZhciBjbGVhbnVwID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoZG9jKSB7XG4gICAgICAgIHVuYXR0YWNoKCk7XG4gICAgICAgIGV2ZW50VXRpbHMudW5sb2FkRGVsKHVubG9hZFJlZik7XG4gICAgICAgIGlmcmFtZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gICAgICAgIGlmcmFtZSA9IGRvYyA9IG51bGw7XG4gICAgICAgIENvbGxlY3RHYXJiYWdlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB2YXIgb25lcnJvciA9IGZ1bmN0aW9uKHIpIHtcbiAgICAgIGRlYnVnKCdvbmVycm9yJywgcik7XG4gICAgICBpZiAoZG9jKSB7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgZXJyb3JDYWxsYmFjayhyKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBwb3N0ID0gZnVuY3Rpb24obXNnLCBvcmlnaW4pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFdoZW4gdGhlIGlmcmFtZSBpcyBub3QgbG9hZGVkLCBJRSByYWlzZXMgYW4gZXhjZXB0aW9uXG4gICAgICAgIC8vIG9uICdjb250ZW50V2luZG93Jy5cbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoaWZyYW1lICYmIGlmcmFtZS5jb250ZW50V2luZG93KSB7XG4gICAgICAgICAgICAgIGlmcmFtZS5jb250ZW50V2luZG93LnBvc3RNZXNzYWdlKG1zZywgb3JpZ2luKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDApO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAvLyBpbnRlbnRpb25hbGx5IGVtcHR5XG4gICAgICB9XG4gICAgfTtcblxuICAgIGRvYy5vcGVuKCk7XG4gICAgZG9jLndyaXRlKCc8aHRtbD48cycgKyAnY3JpcHQ+JyArXG4gICAgICAgICAgICAgICdkb2N1bWVudC5kb21haW49XCInICsgZ2xvYmFsLmRvY3VtZW50LmRvbWFpbiArICdcIjsnICtcbiAgICAgICAgICAgICAgJzwvcycgKyAnY3JpcHQ+PC9odG1sPicpO1xuICAgIGRvYy5jbG9zZSgpO1xuICAgIGRvYy5wYXJlbnRXaW5kb3dbbW9kdWxlLmV4cG9ydHMuV1ByZWZpeF0gPSBnbG9iYWxbbW9kdWxlLmV4cG9ydHMuV1ByZWZpeF07XG4gICAgdmFyIGMgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoYyk7XG4gICAgaWZyYW1lID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICAgIGMuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgICBpZnJhbWUuc3JjID0gaWZyYW1lVXJsO1xuICAgIGlmcmFtZS5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICBvbmVycm9yKCdvbmVycm9yJyk7XG4gICAgfTtcbiAgICB0cmVmID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIG9uZXJyb3IoJ3RpbWVvdXQnKTtcbiAgICB9LCAxNTAwMCk7XG4gICAgdW5sb2FkUmVmID0gZXZlbnRVdGlscy51bmxvYWRBZGQoY2xlYW51cCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvc3Q6IHBvc3RcbiAgICAsIGNsZWFudXA6IGNsZWFudXBcbiAgICAsIGxvYWRlZDogdW5hdHRhY2hcbiAgICB9O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5pZnJhbWVFbmFibGVkID0gZmFsc2U7XG5pZiAoZ2xvYmFsLmRvY3VtZW50KSB7XG4gIC8vIHBvc3RNZXNzYWdlIG1pc2JlaGF2ZXMgaW4ga29ucXVlcm9yIDQuNi41IC0gdGhlIG1lc3NhZ2VzIGFyZSBkZWxpdmVyZWQgd2l0aFxuICAvLyBodWdlIGRlbGF5LCBvciBub3QgYXQgYWxsLlxuICBtb2R1bGUuZXhwb3J0cy5pZnJhbWVFbmFibGVkID0gKHR5cGVvZiBnbG9iYWwucG9zdE1lc3NhZ2UgPT09ICdmdW5jdGlvbicgfHxcbiAgICB0eXBlb2YgZ2xvYmFsLnBvc3RNZXNzYWdlID09PSAnb2JqZWN0JykgJiYgKCFicm93c2VyLmlzS29ucXVlcm9yKCkpO1xufVxuXG59KS5jYWxsKHRoaXMseyBlbnY6IHt9IH0sdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcblxufSx7XCIuL2Jyb3dzZXJcIjo0NCxcIi4vZXZlbnRcIjo0NixcImRlYnVnXCI6NTUsXCJqc29uM1wiOjU4fV0sNDg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChnbG9iYWwpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgbG9nT2JqZWN0ID0ge307XG5bJ2xvZycsICdkZWJ1ZycsICd3YXJuJ10uZm9yRWFjaChmdW5jdGlvbiAobGV2ZWwpIHtcbiAgdmFyIGxldmVsRXhpc3RzO1xuXG4gIHRyeSB7XG4gICAgbGV2ZWxFeGlzdHMgPSBnbG9iYWwuY29uc29sZSAmJiBnbG9iYWwuY29uc29sZVtsZXZlbF0gJiYgZ2xvYmFsLmNvbnNvbGVbbGV2ZWxdLmFwcGx5O1xuICB9IGNhdGNoKGUpIHtcbiAgICAvLyBkbyBub3RoaW5nXG4gIH1cblxuICBsb2dPYmplY3RbbGV2ZWxdID0gbGV2ZWxFeGlzdHMgPyBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdsb2JhbC5jb25zb2xlW2xldmVsXS5hcHBseShnbG9iYWwuY29uc29sZSwgYXJndW1lbnRzKTtcbiAgfSA6IChsZXZlbCA9PT0gJ2xvZycgPyBmdW5jdGlvbiAoKSB7fSA6IGxvZ09iamVjdC5sb2cpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbG9nT2JqZWN0O1xuXG59KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcblxufSx7fV0sNDk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNPYmplY3Q6IGZ1bmN0aW9uKG9iaikge1xuICAgIHZhciB0eXBlID0gdHlwZW9mIG9iajtcbiAgICByZXR1cm4gdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlID09PSAnb2JqZWN0JyAmJiAhIW9iajtcbiAgfVxuXG4sIGV4dGVuZDogZnVuY3Rpb24ob2JqKSB7XG4gICAgaWYgKCF0aGlzLmlzT2JqZWN0KG9iaikpIHtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIHZhciBzb3VyY2UsIHByb3A7XG4gICAgZm9yICh2YXIgaSA9IDEsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgc291cmNlID0gYXJndW1lbnRzW2ldO1xuICAgICAgZm9yIChwcm9wIGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwgcHJvcCkpIHtcbiAgICAgICAgICBvYmpbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxufTtcblxufSx7fV0sNTA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG5cbi8vIFRoaXMgc3RyaW5nIGhhcyBsZW5ndGggMzIsIGEgcG93ZXIgb2YgMiwgc28gdGhlIG1vZHVsdXMgZG9lc24ndCBpbnRyb2R1Y2UgYVxuLy8gYmlhcy5cbnZhciBfcmFuZG9tU3RyaW5nQ2hhcnMgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDUnO1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0cmluZzogZnVuY3Rpb24obGVuZ3RoKSB7XG4gICAgdmFyIG1heCA9IF9yYW5kb21TdHJpbmdDaGFycy5sZW5ndGg7XG4gICAgdmFyIGJ5dGVzID0gY3J5cHRvLnJhbmRvbUJ5dGVzKGxlbmd0aCk7XG4gICAgdmFyIHJldCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHJldC5wdXNoKF9yYW5kb21TdHJpbmdDaGFycy5zdWJzdHIoYnl0ZXNbaV0gJSBtYXgsIDEpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldC5qb2luKCcnKTtcbiAgfVxuXG4sIG51bWJlcjogZnVuY3Rpb24obWF4KSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG1heCk7XG4gIH1cblxuLCBudW1iZXJTdHJpbmc6IGZ1bmN0aW9uKG1heCkge1xuICAgIHZhciB0ID0gKCcnICsgKG1heCAtIDEpKS5sZW5ndGg7XG4gICAgdmFyIHAgPSBuZXcgQXJyYXkodCArIDEpLmpvaW4oJzAnKTtcbiAgICByZXR1cm4gKHAgKyB0aGlzLm51bWJlcihtYXgpKS5zbGljZSgtdCk7XG4gIH1cbn07XG5cbn0se1wiY3J5cHRvXCI6NDN9XSw1MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKHByb2Nlc3Mpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVidWcgPSBmdW5jdGlvbigpIHt9O1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgZGVidWcgPSByZXF1aXJlKCdkZWJ1ZycpKCdzb2NranMtY2xpZW50OnV0aWxzOnRyYW5zcG9ydCcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGF2YWlsYWJsZVRyYW5zcG9ydHMpIHtcbiAgcmV0dXJuIHtcbiAgICBmaWx0ZXJUb0VuYWJsZWQ6IGZ1bmN0aW9uKHRyYW5zcG9ydHNXaGl0ZWxpc3QsIGluZm8pIHtcbiAgICAgIHZhciB0cmFuc3BvcnRzID0ge1xuICAgICAgICBtYWluOiBbXVxuICAgICAgLCBmYWNhZGU6IFtdXG4gICAgICB9O1xuICAgICAgaWYgKCF0cmFuc3BvcnRzV2hpdGVsaXN0KSB7XG4gICAgICAgIHRyYW5zcG9ydHNXaGl0ZWxpc3QgPSBbXTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRyYW5zcG9ydHNXaGl0ZWxpc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRyYW5zcG9ydHNXaGl0ZWxpc3QgPSBbdHJhbnNwb3J0c1doaXRlbGlzdF07XG4gICAgICB9XG5cbiAgICAgIGF2YWlsYWJsZVRyYW5zcG9ydHMuZm9yRWFjaChmdW5jdGlvbih0cmFucykge1xuICAgICAgICBpZiAoIXRyYW5zKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRyYW5zLnRyYW5zcG9ydE5hbWUgPT09ICd3ZWJzb2NrZXQnICYmIGluZm8ud2Vic29ja2V0ID09PSBmYWxzZSkge1xuICAgICAgICAgIGRlYnVnKCdkaXNhYmxlZCBmcm9tIHNlcnZlcicsICd3ZWJzb2NrZXQnKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHJhbnNwb3J0c1doaXRlbGlzdC5sZW5ndGggJiZcbiAgICAgICAgICAgIHRyYW5zcG9ydHNXaGl0ZWxpc3QuaW5kZXhPZih0cmFucy50cmFuc3BvcnROYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICBkZWJ1Zygnbm90IGluIHdoaXRlbGlzdCcsIHRyYW5zLnRyYW5zcG9ydE5hbWUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0cmFucy5lbmFibGVkKGluZm8pKSB7XG4gICAgICAgICAgZGVidWcoJ2VuYWJsZWQnLCB0cmFucy50cmFuc3BvcnROYW1lKTtcbiAgICAgICAgICB0cmFuc3BvcnRzLm1haW4ucHVzaCh0cmFucyk7XG4gICAgICAgICAgaWYgKHRyYW5zLmZhY2FkZVRyYW5zcG9ydCkge1xuICAgICAgICAgICAgdHJhbnNwb3J0cy5mYWNhZGUucHVzaCh0cmFucy5mYWNhZGVUcmFuc3BvcnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWJ1ZygnZGlzYWJsZWQnLCB0cmFucy50cmFuc3BvcnROYW1lKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gdHJhbnNwb3J0cztcbiAgICB9XG4gIH07XG59O1xuXG59KS5jYWxsKHRoaXMseyBlbnY6IHt9IH0pXG5cbn0se1wiZGVidWdcIjo1NX1dLDUyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAocHJvY2Vzcyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBVUkwgPSByZXF1aXJlKCd1cmwtcGFyc2UnKTtcblxudmFyIGRlYnVnID0gZnVuY3Rpb24oKSB7fTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgnc29ja2pzLWNsaWVudDp1dGlsczp1cmwnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldE9yaWdpbjogZnVuY3Rpb24odXJsKSB7XG4gICAgaWYgKCF1cmwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBwID0gbmV3IFVSTCh1cmwpO1xuICAgIGlmIChwLnByb3RvY29sID09PSAnZmlsZTonKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgcG9ydCA9IHAucG9ydDtcbiAgICBpZiAoIXBvcnQpIHtcbiAgICAgIHBvcnQgPSAocC5wcm90b2NvbCA9PT0gJ2h0dHBzOicpID8gJzQ0MycgOiAnODAnO1xuICAgIH1cblxuICAgIHJldHVybiBwLnByb3RvY29sICsgJy8vJyArIHAuaG9zdG5hbWUgKyAnOicgKyBwb3J0O1xuICB9XG5cbiwgaXNPcmlnaW5FcXVhbDogZnVuY3Rpb24oYSwgYikge1xuICAgIHZhciByZXMgPSB0aGlzLmdldE9yaWdpbihhKSA9PT0gdGhpcy5nZXRPcmlnaW4oYik7XG4gICAgZGVidWcoJ3NhbWUnLCBhLCBiLCByZXMpO1xuICAgIHJldHVybiByZXM7XG4gIH1cblxuLCBpc1NjaGVtZUVxdWFsOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIChhLnNwbGl0KCc6JylbMF0gPT09IGIuc3BsaXQoJzonKVswXSk7XG4gIH1cblxuLCBhZGRQYXRoOiBmdW5jdGlvbiAodXJsLCBwYXRoKSB7XG4gICAgdmFyIHFzID0gdXJsLnNwbGl0KCc/Jyk7XG4gICAgcmV0dXJuIHFzWzBdICsgcGF0aCArIChxc1sxXSA/ICc/JyArIHFzWzFdIDogJycpO1xuICB9XG5cbiwgYWRkUXVlcnk6IGZ1bmN0aW9uICh1cmwsIHEpIHtcbiAgICByZXR1cm4gdXJsICsgKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gKCc/JyArIHEpIDogKCcmJyArIHEpKTtcbiAgfVxuXG4sIGlzTG9vcGJhY2tBZGRyOiBmdW5jdGlvbiAoYWRkcikge1xuICAgIHJldHVybiAvXjEyN1xcLihbMC05XXsxLDN9KVxcLihbMC05XXsxLDN9KVxcLihbMC05XXsxLDN9KSQvaS50ZXN0KGFkZHIpIHx8IC9eXFxbOjoxXFxdJC8udGVzdChhZGRyKTtcbiAgfVxufTtcblxufSkuY2FsbCh0aGlzLHsgZW52OiB7fSB9KVxuXG59LHtcImRlYnVnXCI6NTUsXCJ1cmwtcGFyc2VcIjo2MX1dLDUzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbm1vZHVsZS5leHBvcnRzID0gJzEuNS4wJztcblxufSx7fV0sNTQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuLyoqXG4gKiBIZWxwZXJzLlxuICovXG5cbnZhciBzID0gMTAwMDtcbnZhciBtID0gcyAqIDYwO1xudmFyIGggPSBtICogNjA7XG52YXIgZCA9IGggKiAyNDtcbnZhciB3ID0gZCAqIDc7XG52YXIgeSA9IGQgKiAzNjUuMjU7XG5cbi8qKlxuICogUGFyc2Ugb3IgZm9ybWF0IHRoZSBnaXZlbiBgdmFsYC5cbiAqXG4gKiBPcHRpb25zOlxuICpcbiAqICAtIGBsb25nYCB2ZXJib3NlIGZvcm1hdHRpbmcgW2ZhbHNlXVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gdmFsXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhyb3cgYW4gZXJyb3IgaWYgdmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSBudW1iZXJcbiAqIEByZXR1cm4ge1N0cmluZ3xOdW1iZXJ9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odmFsLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7XG4gIGlmICh0eXBlID09PSAnc3RyaW5nJyAmJiB2YWwubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBwYXJzZSh2YWwpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHZhbCkpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5sb25nID8gZm10TG9uZyh2YWwpIDogZm10U2hvcnQodmFsKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ3ZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgdmFsaWQgbnVtYmVyLiB2YWw9JyArXG4gICAgICBKU09OLnN0cmluZ2lmeSh2YWwpXG4gICk7XG59O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBnaXZlbiBgc3RyYCBhbmQgcmV0dXJuIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZShzdHIpIHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChzdHIubGVuZ3RoID4gMTAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBtYXRjaCA9IC9eKC0/KD86XFxkKyk/XFwuP1xcZCspICoobWlsbGlzZWNvbmRzP3xtc2Vjcz98bXN8c2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx3ZWVrcz98d3x5ZWFycz98eXJzP3x5KT8kL2kuZXhlYyhcbiAgICBzdHJcbiAgKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbiA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pO1xuICB2YXIgdHlwZSA9IChtYXRjaFsyXSB8fCAnbXMnKS50b0xvd2VyQ2FzZSgpO1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICd5ZWFycyc6XG4gICAgY2FzZSAneWVhcic6XG4gICAgY2FzZSAneXJzJzpcbiAgICBjYXNlICd5cic6XG4gICAgY2FzZSAneSc6XG4gICAgICByZXR1cm4gbiAqIHk7XG4gICAgY2FzZSAnd2Vla3MnOlxuICAgIGNhc2UgJ3dlZWsnOlxuICAgIGNhc2UgJ3cnOlxuICAgICAgcmV0dXJuIG4gKiB3O1xuICAgIGNhc2UgJ2RheXMnOlxuICAgIGNhc2UgJ2RheSc6XG4gICAgY2FzZSAnZCc6XG4gICAgICByZXR1cm4gbiAqIGQ7XG4gICAgY2FzZSAnaG91cnMnOlxuICAgIGNhc2UgJ2hvdXInOlxuICAgIGNhc2UgJ2hycyc6XG4gICAgY2FzZSAnaHInOlxuICAgIGNhc2UgJ2gnOlxuICAgICAgcmV0dXJuIG4gKiBoO1xuICAgIGNhc2UgJ21pbnV0ZXMnOlxuICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgY2FzZSAnbWlucyc6XG4gICAgY2FzZSAnbWluJzpcbiAgICBjYXNlICdtJzpcbiAgICAgIHJldHVybiBuICogbTtcbiAgICBjYXNlICdzZWNvbmRzJzpcbiAgICBjYXNlICdzZWNvbmQnOlxuICAgIGNhc2UgJ3NlY3MnOlxuICAgIGNhc2UgJ3NlYyc6XG4gICAgY2FzZSAncyc6XG4gICAgICByZXR1cm4gbiAqIHM7XG4gICAgY2FzZSAnbWlsbGlzZWNvbmRzJzpcbiAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgY2FzZSAnbXNlY3MnOlxuICAgIGNhc2UgJ21zZWMnOlxuICAgIGNhc2UgJ21zJzpcbiAgICAgIHJldHVybiBuO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogU2hvcnQgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZm10U2hvcnQobXMpIHtcbiAgdmFyIG1zQWJzID0gTWF0aC5hYnMobXMpO1xuICBpZiAobXNBYnMgPj0gZCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gZCkgKyAnZCc7XG4gIH1cbiAgaWYgKG1zQWJzID49IGgpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGgpICsgJ2gnO1xuICB9XG4gIGlmIChtc0FicyA+PSBtKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBtKSArICdtJztcbiAgfVxuICBpZiAobXNBYnMgPj0gcykge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gcykgKyAncyc7XG4gIH1cbiAgcmV0dXJuIG1zICsgJ21zJztcbn1cblxuLyoqXG4gKiBMb25nIGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdExvbmcobXMpIHtcbiAgdmFyIG1zQWJzID0gTWF0aC5hYnMobXMpO1xuICBpZiAobXNBYnMgPj0gZCkge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBkLCAnZGF5Jyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IGgpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgaCwgJ2hvdXInKTtcbiAgfVxuICBpZiAobXNBYnMgPj0gbSkge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBtLCAnbWludXRlJyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IHMpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgcywgJ3NlY29uZCcpO1xuICB9XG4gIHJldHVybiBtcyArICcgbXMnO1xufVxuXG4vKipcbiAqIFBsdXJhbGl6YXRpb24gaGVscGVyLlxuICovXG5cbmZ1bmN0aW9uIHBsdXJhbChtcywgbXNBYnMsIG4sIG5hbWUpIHtcbiAgdmFyIGlzUGx1cmFsID0gbXNBYnMgPj0gbiAqIDEuNTtcbiAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBuKSArICcgJyArIG5hbWUgKyAoaXNQbHVyYWwgPyAncycgOiAnJyk7XG59XG5cbn0se31dLDU1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAocHJvY2Vzcyl7XG5cInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuLyogZXNsaW50LWVudiBicm93c2VyICovXG5cbi8qKlxuICogVGhpcyBpcyB0aGUgd2ViIGJyb3dzZXIgaW1wbGVtZW50YXRpb24gb2YgYGRlYnVnKClgLlxuICovXG5leHBvcnRzLmxvZyA9IGxvZztcbmV4cG9ydHMuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzLnNhdmUgPSBzYXZlO1xuZXhwb3J0cy5sb2FkID0gbG9hZDtcbmV4cG9ydHMudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuZXhwb3J0cy5zdG9yYWdlID0gbG9jYWxzdG9yYWdlKCk7XG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFsnIzAwMDBDQycsICcjMDAwMEZGJywgJyMwMDMzQ0MnLCAnIzAwMzNGRicsICcjMDA2NkNDJywgJyMwMDY2RkYnLCAnIzAwOTlDQycsICcjMDA5OUZGJywgJyMwMENDMDAnLCAnIzAwQ0MzMycsICcjMDBDQzY2JywgJyMwMENDOTknLCAnIzAwQ0NDQycsICcjMDBDQ0ZGJywgJyMzMzAwQ0MnLCAnIzMzMDBGRicsICcjMzMzM0NDJywgJyMzMzMzRkYnLCAnIzMzNjZDQycsICcjMzM2NkZGJywgJyMzMzk5Q0MnLCAnIzMzOTlGRicsICcjMzNDQzAwJywgJyMzM0NDMzMnLCAnIzMzQ0M2NicsICcjMzNDQzk5JywgJyMzM0NDQ0MnLCAnIzMzQ0NGRicsICcjNjYwMENDJywgJyM2NjAwRkYnLCAnIzY2MzNDQycsICcjNjYzM0ZGJywgJyM2NkNDMDAnLCAnIzY2Q0MzMycsICcjOTkwMENDJywgJyM5OTAwRkYnLCAnIzk5MzNDQycsICcjOTkzM0ZGJywgJyM5OUNDMDAnLCAnIzk5Q0MzMycsICcjQ0MwMDAwJywgJyNDQzAwMzMnLCAnI0NDMDA2NicsICcjQ0MwMDk5JywgJyNDQzAwQ0MnLCAnI0NDMDBGRicsICcjQ0MzMzAwJywgJyNDQzMzMzMnLCAnI0NDMzM2NicsICcjQ0MzMzk5JywgJyNDQzMzQ0MnLCAnI0NDMzNGRicsICcjQ0M2NjAwJywgJyNDQzY2MzMnLCAnI0NDOTkwMCcsICcjQ0M5OTMzJywgJyNDQ0NDMDAnLCAnI0NDQ0MzMycsICcjRkYwMDAwJywgJyNGRjAwMzMnLCAnI0ZGMDA2NicsICcjRkYwMDk5JywgJyNGRjAwQ0MnLCAnI0ZGMDBGRicsICcjRkYzMzAwJywgJyNGRjMzMzMnLCAnI0ZGMzM2NicsICcjRkYzMzk5JywgJyNGRjMzQ0MnLCAnI0ZGMzNGRicsICcjRkY2NjAwJywgJyNGRjY2MzMnLCAnI0ZGOTkwMCcsICcjRkY5OTMzJywgJyNGRkNDMDAnLCAnI0ZGQ0MzMyddO1xuLyoqXG4gKiBDdXJyZW50bHkgb25seSBXZWJLaXQtYmFzZWQgV2ViIEluc3BlY3RvcnMsIEZpcmVmb3ggPj0gdjMxLFxuICogYW5kIHRoZSBGaXJlYnVnIGV4dGVuc2lvbiAoYW55IEZpcmVmb3ggdmVyc2lvbikgYXJlIGtub3duXG4gKiB0byBzdXBwb3J0IFwiJWNcIiBDU1MgY3VzdG9taXphdGlvbnMuXG4gKlxuICogVE9ETzogYWRkIGEgYGxvY2FsU3RvcmFnZWAgdmFyaWFibGUgdG8gZXhwbGljaXRseSBlbmFibGUvZGlzYWJsZSBjb2xvcnNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcblxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuICAvLyBOQjogSW4gYW4gRWxlY3Ryb24gcHJlbG9hZCBzY3JpcHQsIGRvY3VtZW50IHdpbGwgYmUgZGVmaW5lZCBidXQgbm90IGZ1bGx5XG4gIC8vIGluaXRpYWxpemVkLiBTaW5jZSB3ZSBrbm93IHdlJ3JlIGluIENocm9tZSwgd2UnbGwganVzdCBkZXRlY3QgdGhpcyBjYXNlXG4gIC8vIGV4cGxpY2l0bHlcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wcm9jZXNzICYmICh3aW5kb3cucHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHdpbmRvdy5wcm9jZXNzLl9fbndqcykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBJbnRlcm5ldCBFeHBsb3JlciBhbmQgRWRnZSBkbyBub3Qgc3VwcG9ydCBjb2xvcnMuXG5cblxuICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goLyhlZGdlfHRyaWRlbnQpXFwvKFxcZCspLykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gSXMgd2Via2l0PyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xNjQ1OTYwNi8zNzY3NzNcbiAgLy8gZG9jdW1lbnQgaXMgdW5kZWZpbmVkIGluIHJlYWN0LW5hdGl2ZTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0LW5hdGl2ZS9wdWxsLzE2MzJcblxuXG4gIHJldHVybiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2UgfHwgLy8gSXMgZmlyZWJ1Zz8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzk4MTIwLzM3Njc3M1xuICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUuZmlyZWJ1ZyB8fCB3aW5kb3cuY29uc29sZS5leGNlcHRpb24gJiYgd2luZG93LmNvbnNvbGUudGFibGUpIHx8IC8vIElzIGZpcmVmb3ggPj0gdjMxP1xuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1Rvb2xzL1dlYl9Db25zb2xlI1N0eWxpbmdfbWVzc2FnZXNcbiAgdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKSAmJiBwYXJzZUludChSZWdFeHAuJDEsIDEwKSA+PSAzMSB8fCAvLyBEb3VibGUgY2hlY2sgd2Via2l0IGluIHVzZXJBZ2VudCBqdXN0IGluIGNhc2Ugd2UgYXJlIGluIGEgd29ya2VyXG4gIHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9hcHBsZXdlYmtpdFxcLyhcXGQrKS8pO1xufVxuLyoqXG4gKiBDb2xvcml6ZSBsb2cgYXJndW1lbnRzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuICBhcmdzWzBdID0gKHRoaXMudXNlQ29sb3JzID8gJyVjJyA6ICcnKSArIHRoaXMubmFtZXNwYWNlICsgKHRoaXMudXNlQ29sb3JzID8gJyAlYycgOiAnICcpICsgYXJnc1swXSArICh0aGlzLnVzZUNvbG9ycyA/ICclYyAnIDogJyAnKSArICcrJyArIG1vZHVsZS5leHBvcnRzLmh1bWFuaXplKHRoaXMuZGlmZik7XG5cbiAgaWYgKCF0aGlzLnVzZUNvbG9ycykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBjID0gJ2NvbG9yOiAnICsgdGhpcy5jb2xvcjtcbiAgYXJncy5zcGxpY2UoMSwgMCwgYywgJ2NvbG9yOiBpbmhlcml0Jyk7IC8vIFRoZSBmaW5hbCBcIiVjXCIgaXMgc29tZXdoYXQgdHJpY2t5LCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG90aGVyXG4gIC8vIGFyZ3VtZW50cyBwYXNzZWQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgJWMsIHNvIHdlIG5lZWQgdG9cbiAgLy8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBpbmRleCB0byBpbnNlcnQgdGhlIENTUyBpbnRvXG5cbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxhc3RDID0gMDtcbiAgYXJnc1swXS5yZXBsYWNlKC8lW2EtekEtWiVdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIGlmIChtYXRjaCA9PT0gJyUlJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGluZGV4Kys7XG5cbiAgICBpZiAobWF0Y2ggPT09ICclYycpIHtcbiAgICAgIC8vIFdlIG9ubHkgYXJlIGludGVyZXN0ZWQgaW4gdGhlICpsYXN0KiAlY1xuICAgICAgLy8gKHRoZSB1c2VyIG1heSBoYXZlIHByb3ZpZGVkIHRoZWlyIG93bilcbiAgICAgIGxhc3RDID0gaW5kZXg7XG4gICAgfVxuICB9KTtcbiAgYXJncy5zcGxpY2UobGFzdEMsIDAsIGMpO1xufVxuLyoqXG4gKiBJbnZva2VzIGBjb25zb2xlLmxvZygpYCB3aGVuIGF2YWlsYWJsZS5cbiAqIE5vLW9wIHdoZW4gYGNvbnNvbGUubG9nYCBpcyBub3QgYSBcImZ1bmN0aW9uXCIuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5cbmZ1bmN0aW9uIGxvZygpIHtcbiAgdmFyIF9jb25zb2xlO1xuXG4gIC8vIFRoaXMgaGFja2VyeSBpcyByZXF1aXJlZCBmb3IgSUU4LzksIHdoZXJlXG4gIC8vIHRoZSBgY29uc29sZS5sb2dgIGZ1bmN0aW9uIGRvZXNuJ3QgaGF2ZSAnYXBwbHknXG4gIHJldHVybiAodHlwZW9mIGNvbnNvbGUgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihjb25zb2xlKSkgPT09ICdvYmplY3QnICYmIGNvbnNvbGUubG9nICYmIChfY29uc29sZSA9IGNvbnNvbGUpLmxvZy5hcHBseShfY29uc29sZSwgYXJndW1lbnRzKTtcbn1cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblxuZnVuY3Rpb24gc2F2ZShuYW1lc3BhY2VzKSB7XG4gIHRyeSB7XG4gICAgaWYgKG5hbWVzcGFjZXMpIHtcbiAgICAgIGV4cG9ydHMuc3RvcmFnZS5zZXRJdGVtKCdkZWJ1ZycsIG5hbWVzcGFjZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleHBvcnRzLnN0b3JhZ2UucmVtb3ZlSXRlbSgnZGVidWcnKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7Ly8gU3dhbGxvd1xuICAgIC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuICB9XG59XG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cblxuZnVuY3Rpb24gbG9hZCgpIHtcbiAgdmFyIHI7XG5cbiAgdHJ5IHtcbiAgICByID0gZXhwb3J0cy5zdG9yYWdlLmdldEl0ZW0oJ2RlYnVnJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7fSAvLyBTd2FsbG93XG4gIC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuICAvLyBJZiBkZWJ1ZyBpc24ndCBzZXQgaW4gTFMsIGFuZCB3ZSdyZSBpbiBFbGVjdHJvbiwgdHJ5IHRvIGxvYWQgJERFQlVHXG5cblxuICBpZiAoIXIgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICdlbnYnIGluIHByb2Nlc3MpIHtcbiAgICByID0gcHJvY2Vzcy5lbnYuREVCVUc7XG4gIH1cblxuICByZXR1cm4gcjtcbn1cbi8qKlxuICogTG9jYWxzdG9yYWdlIGF0dGVtcHRzIHRvIHJldHVybiB0aGUgbG9jYWxzdG9yYWdlLlxuICpcbiAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugc2FmYXJpIHRocm93c1xuICogd2hlbiBhIHVzZXIgZGlzYWJsZXMgY29va2llcy9sb2NhbHN0b3JhZ2VcbiAqIGFuZCB5b3UgYXR0ZW1wdCB0byBhY2Nlc3MgaXQuXG4gKlxuICogQHJldHVybiB7TG9jYWxTdG9yYWdlfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBsb2NhbHN0b3JhZ2UoKSB7XG4gIHRyeSB7XG4gICAgLy8gVFZNTEtpdCAoQXBwbGUgVFYgSlMgUnVudGltZSkgZG9lcyBub3QgaGF2ZSBhIHdpbmRvdyBvYmplY3QsIGp1c3QgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dFxuICAgIC8vIFRoZSBCcm93c2VyIGFsc28gaGFzIGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHQuXG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsvLyBTd2FsbG93XG4gICAgLy8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xudmFyIGZvcm1hdHRlcnMgPSBtb2R1bGUuZXhwb3J0cy5mb3JtYXR0ZXJzO1xuLyoqXG4gKiBNYXAgJWogdG8gYEpTT04uc3RyaW5naWZ5KClgLCBzaW5jZSBubyBXZWIgSW5zcGVjdG9ycyBkbyB0aGF0IGJ5IGRlZmF1bHQuXG4gKi9cblxuZm9ybWF0dGVycy5qID0gZnVuY3Rpb24gKHYpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogJyArIGVycm9yLm1lc3NhZ2U7XG4gIH1cbn07XG5cblxufSkuY2FsbCh0aGlzLHsgZW52OiB7fSB9KVxuXG59LHtcIi4vY29tbW9uXCI6NTZ9XSw1NjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBjb21tb24gbG9naWMgZm9yIGJvdGggdGhlIE5vZGUuanMgYW5kIHdlYiBicm93c2VyXG4gKiBpbXBsZW1lbnRhdGlvbnMgb2YgYGRlYnVnKClgLlxuICovXG5mdW5jdGlvbiBzZXR1cChlbnYpIHtcbiAgY3JlYXRlRGVidWcuZGVidWcgPSBjcmVhdGVEZWJ1ZztcbiAgY3JlYXRlRGVidWcuZGVmYXVsdCA9IGNyZWF0ZURlYnVnO1xuICBjcmVhdGVEZWJ1Zy5jb2VyY2UgPSBjb2VyY2U7XG4gIGNyZWF0ZURlYnVnLmRpc2FibGUgPSBkaXNhYmxlO1xuICBjcmVhdGVEZWJ1Zy5lbmFibGUgPSBlbmFibGU7XG4gIGNyZWF0ZURlYnVnLmVuYWJsZWQgPSBlbmFibGVkO1xuICBjcmVhdGVEZWJ1Zy5odW1hbml6ZSA9IHJlcXVpcmUoJ21zJyk7XG4gIE9iamVjdC5rZXlzKGVudikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgY3JlYXRlRGVidWdba2V5XSA9IGVudltrZXldO1xuICB9KTtcbiAgLyoqXG4gICogQWN0aXZlIGBkZWJ1Z2AgaW5zdGFuY2VzLlxuICAqL1xuXG4gIGNyZWF0ZURlYnVnLmluc3RhbmNlcyA9IFtdO1xuICAvKipcbiAgKiBUaGUgY3VycmVudGx5IGFjdGl2ZSBkZWJ1ZyBtb2RlIG5hbWVzLCBhbmQgbmFtZXMgdG8gc2tpcC5cbiAgKi9cblxuICBjcmVhdGVEZWJ1Zy5uYW1lcyA9IFtdO1xuICBjcmVhdGVEZWJ1Zy5za2lwcyA9IFtdO1xuICAvKipcbiAgKiBNYXAgb2Ygc3BlY2lhbCBcIiVuXCIgaGFuZGxpbmcgZnVuY3Rpb25zLCBmb3IgdGhlIGRlYnVnIFwiZm9ybWF0XCIgYXJndW1lbnQuXG4gICpcbiAgKiBWYWxpZCBrZXkgbmFtZXMgYXJlIGEgc2luZ2xlLCBsb3dlciBvciB1cHBlci1jYXNlIGxldHRlciwgaS5lLiBcIm5cIiBhbmQgXCJOXCIuXG4gICovXG5cbiAgY3JlYXRlRGVidWcuZm9ybWF0dGVycyA9IHt9O1xuICAvKipcbiAgKiBTZWxlY3RzIGEgY29sb3IgZm9yIGEgZGVidWcgbmFtZXNwYWNlXG4gICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZSBUaGUgbmFtZXNwYWNlIHN0cmluZyBmb3IgdGhlIGZvciB0aGUgZGVidWcgaW5zdGFuY2UgdG8gYmUgY29sb3JlZFxuICAqIEByZXR1cm4ge051bWJlcnxTdHJpbmd9IEFuIEFOU0kgY29sb3IgY29kZSBmb3IgdGhlIGdpdmVuIG5hbWVzcGFjZVxuICAqIEBhcGkgcHJpdmF0ZVxuICAqL1xuXG4gIGZ1bmN0aW9uIHNlbGVjdENvbG9yKG5hbWVzcGFjZSkge1xuICAgIHZhciBoYXNoID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXNwYWNlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBoYXNoID0gKGhhc2ggPDwgNSkgLSBoYXNoICsgbmFtZXNwYWNlLmNoYXJDb2RlQXQoaSk7XG4gICAgICBoYXNoIHw9IDA7IC8vIENvbnZlcnQgdG8gMzJiaXQgaW50ZWdlclxuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVEZWJ1Zy5jb2xvcnNbTWF0aC5hYnMoaGFzaCkgJSBjcmVhdGVEZWJ1Zy5jb2xvcnMubGVuZ3RoXTtcbiAgfVxuXG4gIGNyZWF0ZURlYnVnLnNlbGVjdENvbG9yID0gc2VsZWN0Q29sb3I7XG4gIC8qKlxuICAqIENyZWF0ZSBhIGRlYnVnZ2VyIHdpdGggdGhlIGdpdmVuIGBuYW1lc3BhY2VgLlxuICAqXG4gICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVxuICAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICAqIEBhcGkgcHVibGljXG4gICovXG5cbiAgZnVuY3Rpb24gY3JlYXRlRGVidWcobmFtZXNwYWNlKSB7XG4gICAgdmFyIHByZXZUaW1lO1xuXG4gICAgZnVuY3Rpb24gZGVidWcoKSB7XG4gICAgICAvLyBEaXNhYmxlZD9cbiAgICAgIGlmICghZGVidWcuZW5hYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2VsZiA9IGRlYnVnOyAvLyBTZXQgYGRpZmZgIHRpbWVzdGFtcFxuXG4gICAgICB2YXIgY3VyciA9IE51bWJlcihuZXcgRGF0ZSgpKTtcbiAgICAgIHZhciBtcyA9IGN1cnIgLSAocHJldlRpbWUgfHwgY3Vycik7XG4gICAgICBzZWxmLmRpZmYgPSBtcztcbiAgICAgIHNlbGYucHJldiA9IHByZXZUaW1lO1xuICAgICAgc2VsZi5jdXJyID0gY3VycjtcbiAgICAgIHByZXZUaW1lID0gY3VycjtcbiAgICAgIGFyZ3NbMF0gPSBjcmVhdGVEZWJ1Zy5jb2VyY2UoYXJnc1swXSk7XG5cbiAgICAgIGlmICh0eXBlb2YgYXJnc1swXSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gQW55dGhpbmcgZWxzZSBsZXQncyBpbnNwZWN0IHdpdGggJU9cbiAgICAgICAgYXJncy51bnNoaWZ0KCclTycpO1xuICAgICAgfSAvLyBBcHBseSBhbnkgYGZvcm1hdHRlcnNgIHRyYW5zZm9ybWF0aW9uc1xuXG5cbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICBhcmdzWzBdID0gYXJnc1swXS5yZXBsYWNlKC8lKFthLXpBLVolXSkvZywgZnVuY3Rpb24gKG1hdGNoLCBmb3JtYXQpIHtcbiAgICAgICAgLy8gSWYgd2UgZW5jb3VudGVyIGFuIGVzY2FwZWQgJSB0aGVuIGRvbid0IGluY3JlYXNlIHRoZSBhcnJheSBpbmRleFxuICAgICAgICBpZiAobWF0Y2ggPT09ICclJScpIHtcbiAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgIH1cblxuICAgICAgICBpbmRleCsrO1xuICAgICAgICB2YXIgZm9ybWF0dGVyID0gY3JlYXRlRGVidWcuZm9ybWF0dGVyc1tmb3JtYXRdO1xuXG4gICAgICAgIGlmICh0eXBlb2YgZm9ybWF0dGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIHZhbCA9IGFyZ3NbaW5kZXhdO1xuICAgICAgICAgIG1hdGNoID0gZm9ybWF0dGVyLmNhbGwoc2VsZiwgdmFsKTsgLy8gTm93IHdlIG5lZWQgdG8gcmVtb3ZlIGBhcmdzW2luZGV4XWAgc2luY2UgaXQncyBpbmxpbmVkIGluIHRoZSBgZm9ybWF0YFxuXG4gICAgICAgICAgYXJncy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIGluZGV4LS07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICB9KTsgLy8gQXBwbHkgZW52LXNwZWNpZmljIGZvcm1hdHRpbmcgKGNvbG9ycywgZXRjLilcblxuICAgICAgY3JlYXRlRGVidWcuZm9ybWF0QXJncy5jYWxsKHNlbGYsIGFyZ3MpO1xuICAgICAgdmFyIGxvZ0ZuID0gc2VsZi5sb2cgfHwgY3JlYXRlRGVidWcubG9nO1xuICAgICAgbG9nRm4uYXBwbHkoc2VsZiwgYXJncyk7XG4gICAgfVxuXG4gICAgZGVidWcubmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuICAgIGRlYnVnLmVuYWJsZWQgPSBjcmVhdGVEZWJ1Zy5lbmFibGVkKG5hbWVzcGFjZSk7XG4gICAgZGVidWcudXNlQ29sb3JzID0gY3JlYXRlRGVidWcudXNlQ29sb3JzKCk7XG4gICAgZGVidWcuY29sb3IgPSBzZWxlY3RDb2xvcihuYW1lc3BhY2UpO1xuICAgIGRlYnVnLmRlc3Ryb3kgPSBkZXN0cm95O1xuICAgIGRlYnVnLmV4dGVuZCA9IGV4dGVuZDsgLy8gRGVidWcuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG4gICAgLy8gZGVidWcucmF3TG9nID0gcmF3TG9nO1xuICAgIC8vIGVudi1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBsb2dpYyBmb3IgZGVidWcgaW5zdGFuY2VzXG5cbiAgICBpZiAodHlwZW9mIGNyZWF0ZURlYnVnLmluaXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNyZWF0ZURlYnVnLmluaXQoZGVidWcpO1xuICAgIH1cblxuICAgIGNyZWF0ZURlYnVnLmluc3RhbmNlcy5wdXNoKGRlYnVnKTtcbiAgICByZXR1cm4gZGVidWc7XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHZhciBpbmRleCA9IGNyZWF0ZURlYnVnLmluc3RhbmNlcy5pbmRleE9mKHRoaXMpO1xuXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgY3JlYXRlRGVidWcuaW5zdGFuY2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBleHRlbmQobmFtZXNwYWNlLCBkZWxpbWl0ZXIpIHtcbiAgICByZXR1cm4gY3JlYXRlRGVidWcodGhpcy5uYW1lc3BhY2UgKyAodHlwZW9mIGRlbGltaXRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnOicgOiBkZWxpbWl0ZXIpICsgbmFtZXNwYWNlKTtcbiAgfVxuICAvKipcbiAgKiBFbmFibGVzIGEgZGVidWcgbW9kZSBieSBuYW1lc3BhY2VzLiBUaGlzIGNhbiBpbmNsdWRlIG1vZGVzXG4gICogc2VwYXJhdGVkIGJ5IGEgY29sb24gYW5kIHdpbGRjYXJkcy5cbiAgKlxuICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gICogQGFwaSBwdWJsaWNcbiAgKi9cblxuXG4gIGZ1bmN0aW9uIGVuYWJsZShuYW1lc3BhY2VzKSB7XG4gICAgY3JlYXRlRGVidWcuc2F2ZShuYW1lc3BhY2VzKTtcbiAgICBjcmVhdGVEZWJ1Zy5uYW1lcyA9IFtdO1xuICAgIGNyZWF0ZURlYnVnLnNraXBzID0gW107XG4gICAgdmFyIGk7XG4gICAgdmFyIHNwbGl0ID0gKHR5cGVvZiBuYW1lc3BhY2VzID09PSAnc3RyaW5nJyA/IG5hbWVzcGFjZXMgOiAnJykuc3BsaXQoL1tcXHMsXSsvKTtcbiAgICB2YXIgbGVuID0gc3BsaXQubGVuZ3RoO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpZiAoIXNwbGl0W2ldKSB7XG4gICAgICAgIC8vIGlnbm9yZSBlbXB0eSBzdHJpbmdzXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBuYW1lc3BhY2VzID0gc3BsaXRbaV0ucmVwbGFjZSgvXFwqL2csICcuKj8nKTtcblxuICAgICAgaWYgKG5hbWVzcGFjZXNbMF0gPT09ICctJykge1xuICAgICAgICBjcmVhdGVEZWJ1Zy5za2lwcy5wdXNoKG5ldyBSZWdFeHAoJ14nICsgbmFtZXNwYWNlcy5zdWJzdHIoMSkgKyAnJCcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNyZWF0ZURlYnVnLm5hbWVzLnB1c2gobmV3IFJlZ0V4cCgnXicgKyBuYW1lc3BhY2VzICsgJyQnKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IGNyZWF0ZURlYnVnLmluc3RhbmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGluc3RhbmNlID0gY3JlYXRlRGVidWcuaW5zdGFuY2VzW2ldO1xuICAgICAgaW5zdGFuY2UuZW5hYmxlZCA9IGNyZWF0ZURlYnVnLmVuYWJsZWQoaW5zdGFuY2UubmFtZXNwYWNlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICogRGlzYWJsZSBkZWJ1ZyBvdXRwdXQuXG4gICpcbiAgKiBAYXBpIHB1YmxpY1xuICAqL1xuXG5cbiAgZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgICBjcmVhdGVEZWJ1Zy5lbmFibGUoJycpO1xuICB9XG4gIC8qKlxuICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gbW9kZSBuYW1lIGlzIGVuYWJsZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgKlxuICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gICogQHJldHVybiB7Qm9vbGVhbn1cbiAgKiBAYXBpIHB1YmxpY1xuICAqL1xuXG5cbiAgZnVuY3Rpb24gZW5hYmxlZChuYW1lKSB7XG4gICAgaWYgKG5hbWVbbmFtZS5sZW5ndGggLSAxXSA9PT0gJyonKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgaTtcbiAgICB2YXIgbGVuO1xuXG4gICAgZm9yIChpID0gMCwgbGVuID0gY3JlYXRlRGVidWcuc2tpcHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChjcmVhdGVEZWJ1Zy5za2lwc1tpXS50ZXN0KG5hbWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBjcmVhdGVEZWJ1Zy5uYW1lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKGNyZWF0ZURlYnVnLm5hbWVzW2ldLnRlc3QobmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8qKlxuICAqIENvZXJjZSBgdmFsYC5cbiAgKlxuICAqIEBwYXJhbSB7TWl4ZWR9IHZhbFxuICAqIEByZXR1cm4ge01peGVkfVxuICAqIEBhcGkgcHJpdmF0ZVxuICAqL1xuXG5cbiAgZnVuY3Rpb24gY29lcmNlKHZhbCkge1xuICAgIGlmICh2YWwgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgcmV0dXJuIHZhbC5zdGFjayB8fCB2YWwubWVzc2FnZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsO1xuICB9XG5cbiAgY3JlYXRlRGVidWcuZW5hYmxlKGNyZWF0ZURlYnVnLmxvYWQoKSk7XG4gIHJldHVybiBjcmVhdGVEZWJ1Zztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXR1cDtcblxuXG59LHtcIm1zXCI6NTR9XSw1NzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG5pZiAodHlwZW9mIE9iamVjdC5jcmVhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgLy8gaW1wbGVtZW50YXRpb24gZnJvbSBzdGFuZGFyZCBub2RlLmpzICd1dGlsJyBtb2R1bGVcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBpZiAoc3VwZXJDdG9yKSB7XG4gICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgICAgY3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUsIHtcbiAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICB2YWx1ZTogY3RvcixcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGlmIChzdXBlckN0b3IpIHtcbiAgICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgICB2YXIgVGVtcEN0b3IgPSBmdW5jdGlvbiAoKSB7fVxuICAgICAgVGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZVxuICAgICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgICAgY3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yXG4gICAgfVxuICB9XG59XG5cbn0se31dLDU4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAoZ2xvYmFsKXtcbi8qISBKU09OIHYzLjMuMiB8IGh0dHBzOi8vYmVzdGllanMuZ2l0aHViLmlvL2pzb24zIHwgQ29weXJpZ2h0IDIwMTItMjAxNSwgS2l0IENhbWJyaWRnZSwgQmVuamFtaW4gVGFuIHwgaHR0cDovL2tpdC5taXQtbGljZW5zZS5vcmcgKi9cbjsoZnVuY3Rpb24gKCkge1xuICAvLyBEZXRlY3QgdGhlIGBkZWZpbmVgIGZ1bmN0aW9uIGV4cG9zZWQgYnkgYXN5bmNocm9ub3VzIG1vZHVsZSBsb2FkZXJzLiBUaGVcbiAgLy8gc3RyaWN0IGBkZWZpbmVgIGNoZWNrIGlzIG5lY2Vzc2FyeSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGByLmpzYC5cbiAgdmFyIGlzTG9hZGVyID0gdHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQ7XG5cbiAgLy8gQSBzZXQgb2YgdHlwZXMgdXNlZCB0byBkaXN0aW5ndWlzaCBvYmplY3RzIGZyb20gcHJpbWl0aXZlcy5cbiAgdmFyIG9iamVjdFR5cGVzID0ge1xuICAgIFwiZnVuY3Rpb25cIjogdHJ1ZSxcbiAgICBcIm9iamVjdFwiOiB0cnVlXG4gIH07XG5cbiAgLy8gRGV0ZWN0IHRoZSBgZXhwb3J0c2Agb2JqZWN0IGV4cG9zZWQgYnkgQ29tbW9uSlMgaW1wbGVtZW50YXRpb25zLlxuICB2YXIgZnJlZUV4cG9ydHMgPSBvYmplY3RUeXBlc1t0eXBlb2YgZXhwb3J0c10gJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4gIC8vIFVzZSB0aGUgYGdsb2JhbGAgb2JqZWN0IGV4cG9zZWQgYnkgTm9kZSAoaW5jbHVkaW5nIEJyb3dzZXJpZnkgdmlhXG4gIC8vIGBpbnNlcnQtbW9kdWxlLWdsb2JhbHNgKSwgTmFyd2hhbCwgYW5kIFJpbmdvIGFzIHRoZSBkZWZhdWx0IGNvbnRleHQsXG4gIC8vIGFuZCB0aGUgYHdpbmRvd2Agb2JqZWN0IGluIGJyb3dzZXJzLiBSaGlubyBleHBvcnRzIGEgYGdsb2JhbGAgZnVuY3Rpb25cbiAgLy8gaW5zdGVhZC5cbiAgdmFyIHJvb3QgPSBvYmplY3RUeXBlc1t0eXBlb2Ygd2luZG93XSAmJiB3aW5kb3cgfHwgdGhpcyxcbiAgICAgIGZyZWVHbG9iYWwgPSBmcmVlRXhwb3J0cyAmJiBvYmplY3RUeXBlc1t0eXBlb2YgbW9kdWxlXSAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiB0eXBlb2YgZ2xvYmFsID09IFwib2JqZWN0XCIgJiYgZ2xvYmFsO1xuXG4gIGlmIChmcmVlR2xvYmFsICYmIChmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fCBmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCB8fCBmcmVlR2xvYmFsLnNlbGYgPT09IGZyZWVHbG9iYWwpKSB7XG4gICAgcm9vdCA9IGZyZWVHbG9iYWw7XG4gIH1cblxuICAvLyBQdWJsaWM6IEluaXRpYWxpemVzIEpTT04gMyB1c2luZyB0aGUgZ2l2ZW4gYGNvbnRleHRgIG9iamVjdCwgYXR0YWNoaW5nIHRoZVxuICAvLyBgc3RyaW5naWZ5YCBhbmQgYHBhcnNlYCBmdW5jdGlvbnMgdG8gdGhlIHNwZWNpZmllZCBgZXhwb3J0c2Agb2JqZWN0LlxuICBmdW5jdGlvbiBydW5JbkNvbnRleHQoY29udGV4dCwgZXhwb3J0cykge1xuICAgIGNvbnRleHQgfHwgKGNvbnRleHQgPSByb290Lk9iamVjdCgpKTtcbiAgICBleHBvcnRzIHx8IChleHBvcnRzID0gcm9vdC5PYmplY3QoKSk7XG5cbiAgICAvLyBOYXRpdmUgY29uc3RydWN0b3IgYWxpYXNlcy5cbiAgICB2YXIgTnVtYmVyID0gY29udGV4dC5OdW1iZXIgfHwgcm9vdC5OdW1iZXIsXG4gICAgICAgIFN0cmluZyA9IGNvbnRleHQuU3RyaW5nIHx8IHJvb3QuU3RyaW5nLFxuICAgICAgICBPYmplY3QgPSBjb250ZXh0Lk9iamVjdCB8fCByb290Lk9iamVjdCxcbiAgICAgICAgRGF0ZSA9IGNvbnRleHQuRGF0ZSB8fCByb290LkRhdGUsXG4gICAgICAgIFN5bnRheEVycm9yID0gY29udGV4dC5TeW50YXhFcnJvciB8fCByb290LlN5bnRheEVycm9yLFxuICAgICAgICBUeXBlRXJyb3IgPSBjb250ZXh0LlR5cGVFcnJvciB8fCByb290LlR5cGVFcnJvcixcbiAgICAgICAgTWF0aCA9IGNvbnRleHQuTWF0aCB8fCByb290Lk1hdGgsXG4gICAgICAgIG5hdGl2ZUpTT04gPSBjb250ZXh0LkpTT04gfHwgcm9vdC5KU09OO1xuXG4gICAgLy8gRGVsZWdhdGUgdG8gdGhlIG5hdGl2ZSBgc3RyaW5naWZ5YCBhbmQgYHBhcnNlYCBpbXBsZW1lbnRhdGlvbnMuXG4gICAgaWYgKHR5cGVvZiBuYXRpdmVKU09OID09IFwib2JqZWN0XCIgJiYgbmF0aXZlSlNPTikge1xuICAgICAgZXhwb3J0cy5zdHJpbmdpZnkgPSBuYXRpdmVKU09OLnN0cmluZ2lmeTtcbiAgICAgIGV4cG9ydHMucGFyc2UgPSBuYXRpdmVKU09OLnBhcnNlO1xuICAgIH1cblxuICAgIC8vIENvbnZlbmllbmNlIGFsaWFzZXMuXG4gICAgdmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZSxcbiAgICAgICAgZ2V0Q2xhc3MgPSBvYmplY3RQcm90by50b1N0cmluZyxcbiAgICAgICAgaXNQcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5LFxuICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAvLyBJbnRlcm5hbDogQ29udGFpbnMgYHRyeS4uLmNhdGNoYCBsb2dpYyB1c2VkIGJ5IG90aGVyIGZ1bmN0aW9ucy5cbiAgICAvLyBUaGlzIHByZXZlbnRzIG90aGVyIGZ1bmN0aW9ucyBmcm9tIGJlaW5nIGRlb3B0aW1pemVkLlxuICAgIGZ1bmN0aW9uIGF0dGVtcHQoZnVuYywgZXJyb3JGdW5jKSB7XG4gICAgICB0cnkge1xuICAgICAgICBmdW5jKCk7XG4gICAgICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICAgICAgaWYgKGVycm9yRnVuYykge1xuICAgICAgICAgIGVycm9yRnVuYygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGVzdCB0aGUgYERhdGUjZ2V0VVRDKmAgbWV0aG9kcy4gQmFzZWQgb24gd29yayBieSBAWWFmZmxlLlxuICAgIHZhciBpc0V4dGVuZGVkID0gbmV3IERhdGUoLTM1MDk4MjczMzQ1NzMyOTIpO1xuICAgIGF0dGVtcHQoZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGhlIGBnZXRVVENGdWxsWWVhcmAsIGBNb250aGAsIGFuZCBgRGF0ZWAgbWV0aG9kcyByZXR1cm4gbm9uc2Vuc2ljYWxcbiAgICAgIC8vIHJlc3VsdHMgZm9yIGNlcnRhaW4gZGF0ZXMgaW4gT3BlcmEgPj0gMTAuNTMuXG4gICAgICBpc0V4dGVuZGVkID0gaXNFeHRlbmRlZC5nZXRVVENGdWxsWWVhcigpID09IC0xMDkyNTIgJiYgaXNFeHRlbmRlZC5nZXRVVENNb250aCgpID09PSAwICYmIGlzRXh0ZW5kZWQuZ2V0VVRDRGF0ZSgpID09PSAxICYmXG4gICAgICAgIGlzRXh0ZW5kZWQuZ2V0VVRDSG91cnMoKSA9PSAxMCAmJiBpc0V4dGVuZGVkLmdldFVUQ01pbnV0ZXMoKSA9PSAzNyAmJiBpc0V4dGVuZGVkLmdldFVUQ1NlY29uZHMoKSA9PSA2ICYmIGlzRXh0ZW5kZWQuZ2V0VVRDTWlsbGlzZWNvbmRzKCkgPT0gNzA4O1xuICAgIH0pO1xuXG4gICAgLy8gSW50ZXJuYWw6IERldGVybWluZXMgd2hldGhlciB0aGUgbmF0aXZlIGBKU09OLnN0cmluZ2lmeWAgYW5kIGBwYXJzZWBcbiAgICAvLyBpbXBsZW1lbnRhdGlvbnMgYXJlIHNwZWMtY29tcGxpYW50LiBCYXNlZCBvbiB3b3JrIGJ5IEtlbiBTbnlkZXIuXG4gICAgZnVuY3Rpb24gaGFzKG5hbWUpIHtcbiAgICAgIGlmIChoYXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAvLyBSZXR1cm4gY2FjaGVkIGZlYXR1cmUgdGVzdCByZXN1bHQuXG4gICAgICAgIHJldHVybiBoYXNbbmFtZV07XG4gICAgICB9XG4gICAgICB2YXIgaXNTdXBwb3J0ZWQ7XG4gICAgICBpZiAobmFtZSA9PSBcImJ1Zy1zdHJpbmctY2hhci1pbmRleFwiKSB7XG4gICAgICAgIC8vIElFIDw9IDcgZG9lc24ndCBzdXBwb3J0IGFjY2Vzc2luZyBzdHJpbmcgY2hhcmFjdGVycyB1c2luZyBzcXVhcmVcbiAgICAgICAgLy8gYnJhY2tldCBub3RhdGlvbi4gSUUgOCBvbmx5IHN1cHBvcnRzIHRoaXMgZm9yIHByaW1pdGl2ZXMuXG4gICAgICAgIGlzU3VwcG9ydGVkID0gXCJhXCJbMF0gIT0gXCJhXCI7XG4gICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gXCJqc29uXCIpIHtcbiAgICAgICAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgYm90aCBgSlNPTi5zdHJpbmdpZnlgIGFuZCBgSlNPTi5wYXJzZWAgYXJlXG4gICAgICAgIC8vIHN1cHBvcnRlZC5cbiAgICAgICAgaXNTdXBwb3J0ZWQgPSBoYXMoXCJqc29uLXN0cmluZ2lmeVwiKSAmJiBoYXMoXCJkYXRlLXNlcmlhbGl6YXRpb25cIikgJiYgaGFzKFwianNvbi1wYXJzZVwiKTtcbiAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBcImRhdGUtc2VyaWFsaXphdGlvblwiKSB7XG4gICAgICAgIC8vIEluZGljYXRlcyB3aGV0aGVyIGBEYXRlYHMgY2FuIGJlIHNlcmlhbGl6ZWQgYWNjdXJhdGVseSBieSBgSlNPTi5zdHJpbmdpZnlgLlxuICAgICAgICBpc1N1cHBvcnRlZCA9IGhhcyhcImpzb24tc3RyaW5naWZ5XCIpICYmIGlzRXh0ZW5kZWQ7XG4gICAgICAgIGlmIChpc1N1cHBvcnRlZCkge1xuICAgICAgICAgIHZhciBzdHJpbmdpZnkgPSBleHBvcnRzLnN0cmluZ2lmeTtcbiAgICAgICAgICBhdHRlbXB0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlzU3VwcG9ydGVkID1cbiAgICAgICAgICAgICAgLy8gSlNPTiAyLCBQcm90b3R5cGUgPD0gMS43LCBhbmQgb2xkZXIgV2ViS2l0IGJ1aWxkcyBpbmNvcnJlY3RseVxuICAgICAgICAgICAgICAvLyBzZXJpYWxpemUgZXh0ZW5kZWQgeWVhcnMuXG4gICAgICAgICAgICAgIHN0cmluZ2lmeShuZXcgRGF0ZSgtOC42NGUxNSkpID09ICdcIi0yNzE4MjEtMDQtMjBUMDA6MDA6MDAuMDAwWlwiJyAmJlxuICAgICAgICAgICAgICAvLyBUaGUgbWlsbGlzZWNvbmRzIGFyZSBvcHRpb25hbCBpbiBFUyA1LCBidXQgcmVxdWlyZWQgaW4gNS4xLlxuICAgICAgICAgICAgICBzdHJpbmdpZnkobmV3IERhdGUoOC42NGUxNSkpID09ICdcIisyNzU3NjAtMDktMTNUMDA6MDA6MDAuMDAwWlwiJyAmJlxuICAgICAgICAgICAgICAvLyBGaXJlZm94IDw9IDExLjAgaW5jb3JyZWN0bHkgc2VyaWFsaXplcyB5ZWFycyBwcmlvciB0byAwIGFzIG5lZ2F0aXZlXG4gICAgICAgICAgICAgIC8vIGZvdXItZGlnaXQgeWVhcnMgaW5zdGVhZCBvZiBzaXgtZGlnaXQgeWVhcnMuIENyZWRpdHM6IEBZYWZmbGUuXG4gICAgICAgICAgICAgIHN0cmluZ2lmeShuZXcgRGF0ZSgtNjIxOTg3NTUyZTUpKSA9PSAnXCItMDAwMDAxLTAxLTAxVDAwOjAwOjAwLjAwMFpcIicgJiZcbiAgICAgICAgICAgICAgLy8gU2FmYXJpIDw9IDUuMS41IGFuZCBPcGVyYSA+PSAxMC41MyBpbmNvcnJlY3RseSBzZXJpYWxpemUgbWlsbGlzZWNvbmRcbiAgICAgICAgICAgICAgLy8gdmFsdWVzIGxlc3MgdGhhbiAxMDAwLiBDcmVkaXRzOiBAWWFmZmxlLlxuICAgICAgICAgICAgICBzdHJpbmdpZnkobmV3IERhdGUoLTEpKSA9PSAnXCIxOTY5LTEyLTMxVDIzOjU5OjU5Ljk5OVpcIic7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciB2YWx1ZSwgc2VyaWFsaXplZCA9ICd7XCJhXCI6WzEsdHJ1ZSxmYWxzZSxudWxsLFwiXFxcXHUwMDAwXFxcXGJcXFxcblxcXFxmXFxcXHJcXFxcdFwiXX0nO1xuICAgICAgICAvLyBUZXN0IGBKU09OLnN0cmluZ2lmeWAuXG4gICAgICAgIGlmIChuYW1lID09IFwianNvbi1zdHJpbmdpZnlcIikge1xuICAgICAgICAgIHZhciBzdHJpbmdpZnkgPSBleHBvcnRzLnN0cmluZ2lmeSwgc3RyaW5naWZ5U3VwcG9ydGVkID0gdHlwZW9mIHN0cmluZ2lmeSA9PSBcImZ1bmN0aW9uXCI7XG4gICAgICAgICAgaWYgKHN0cmluZ2lmeVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgLy8gQSB0ZXN0IGZ1bmN0aW9uIG9iamVjdCB3aXRoIGEgY3VzdG9tIGB0b0pTT05gIG1ldGhvZC5cbiAgICAgICAgICAgICh2YWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICB9KS50b0pTT04gPSB2YWx1ZTtcbiAgICAgICAgICAgIGF0dGVtcHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBzdHJpbmdpZnlTdXBwb3J0ZWQgPVxuICAgICAgICAgICAgICAgIC8vIEZpcmVmb3ggMy4xYjEgYW5kIGIyIHNlcmlhbGl6ZSBzdHJpbmcsIG51bWJlciwgYW5kIGJvb2xlYW5cbiAgICAgICAgICAgICAgICAvLyBwcmltaXRpdmVzIGFzIG9iamVjdCBsaXRlcmFscy5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoMCkgPT09IFwiMFwiICYmXG4gICAgICAgICAgICAgICAgLy8gRkYgMy4xYjEsIGIyLCBhbmQgSlNPTiAyIHNlcmlhbGl6ZSB3cmFwcGVkIHByaW1pdGl2ZXMgYXMgb2JqZWN0XG4gICAgICAgICAgICAgICAgLy8gbGl0ZXJhbHMuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KG5ldyBOdW1iZXIoKSkgPT09IFwiMFwiICYmXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KG5ldyBTdHJpbmcoKSkgPT0gJ1wiXCInICYmXG4gICAgICAgICAgICAgICAgLy8gRkYgMy4xYjEsIDIgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIHZhbHVlIGlzIGBudWxsYCwgYHVuZGVmaW5lZGAsIG9yXG4gICAgICAgICAgICAgICAgLy8gZG9lcyBub3QgZGVmaW5lIGEgY2Fub25pY2FsIEpTT04gcmVwcmVzZW50YXRpb24gKHRoaXMgYXBwbGllcyB0b1xuICAgICAgICAgICAgICAgIC8vIG9iamVjdHMgd2l0aCBgdG9KU09OYCBwcm9wZXJ0aWVzIGFzIHdlbGwsICp1bmxlc3MqIHRoZXkgYXJlIG5lc3RlZFxuICAgICAgICAgICAgICAgIC8vIHdpdGhpbiBhbiBvYmplY3Qgb3IgYXJyYXkpLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShnZXRDbGFzcykgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIC8vIElFIDggc2VyaWFsaXplcyBgdW5kZWZpbmVkYCBhcyBgXCJ1bmRlZmluZWRcImAuIFNhZmFyaSA8PSA1LjEuNyBhbmRcbiAgICAgICAgICAgICAgICAvLyBGRiAzLjFiMyBwYXNzIHRoaXMgdGVzdC5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkodW5kZWZpbmVkKSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgLy8gU2FmYXJpIDw9IDUuMS43IGFuZCBGRiAzLjFiMyB0aHJvdyBgRXJyb3JgcyBhbmQgYFR5cGVFcnJvcmBzLFxuICAgICAgICAgICAgICAgIC8vIHJlc3BlY3RpdmVseSwgaWYgdGhlIHZhbHVlIGlzIG9taXR0ZWQgZW50aXJlbHkuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KCkgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIC8vIEZGIDMuMWIxLCAyIHRocm93IGFuIGVycm9yIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBub3QgYSBudW1iZXIsXG4gICAgICAgICAgICAgICAgLy8gc3RyaW5nLCBhcnJheSwgb2JqZWN0LCBCb29sZWFuLCBvciBgbnVsbGAgbGl0ZXJhbC4gVGhpcyBhcHBsaWVzIHRvXG4gICAgICAgICAgICAgICAgLy8gb2JqZWN0cyB3aXRoIGN1c3RvbSBgdG9KU09OYCBtZXRob2RzIGFzIHdlbGwsIHVubGVzcyB0aGV5IGFyZSBuZXN0ZWRcbiAgICAgICAgICAgICAgICAvLyBpbnNpZGUgb2JqZWN0IG9yIGFycmF5IGxpdGVyYWxzLiBZVUkgMy4wLjBiMSBpZ25vcmVzIGN1c3RvbSBgdG9KU09OYFxuICAgICAgICAgICAgICAgIC8vIG1ldGhvZHMgZW50aXJlbHkuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KHZhbHVlKSA9PT0gXCIxXCIgJiZcbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoW3ZhbHVlXSkgPT0gXCJbMV1cIiAmJlxuICAgICAgICAgICAgICAgIC8vIFByb3RvdHlwZSA8PSAxLjYuMSBzZXJpYWxpemVzIGBbdW5kZWZpbmVkXWAgYXMgYFwiW11cImAgaW5zdGVhZCBvZlxuICAgICAgICAgICAgICAgIC8vIGBcIltudWxsXVwiYC5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoW3VuZGVmaW5lZF0pID09IFwiW251bGxdXCIgJiZcbiAgICAgICAgICAgICAgICAvLyBZVUkgMy4wLjBiMSBmYWlscyB0byBzZXJpYWxpemUgYG51bGxgIGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShudWxsKSA9PSBcIm51bGxcIiAmJlxuICAgICAgICAgICAgICAgIC8vIEZGIDMuMWIxLCAyIGhhbHRzIHNlcmlhbGl6YXRpb24gaWYgYW4gYXJyYXkgY29udGFpbnMgYSBmdW5jdGlvbjpcbiAgICAgICAgICAgICAgICAvLyBgWzEsIHRydWUsIGdldENsYXNzLCAxXWAgc2VyaWFsaXplcyBhcyBcIlsxLHRydWUsXSxcIi4gRkYgMy4xYjNcbiAgICAgICAgICAgICAgICAvLyBlbGlkZXMgbm9uLUpTT04gdmFsdWVzIGZyb20gb2JqZWN0cyBhbmQgYXJyYXlzLCB1bmxlc3MgdGhleVxuICAgICAgICAgICAgICAgIC8vIGRlZmluZSBjdXN0b20gYHRvSlNPTmAgbWV0aG9kcy5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoW3VuZGVmaW5lZCwgZ2V0Q2xhc3MsIG51bGxdKSA9PSBcIltudWxsLG51bGwsbnVsbF1cIiAmJlxuICAgICAgICAgICAgICAgIC8vIFNpbXBsZSBzZXJpYWxpemF0aW9uIHRlc3QuIEZGIDMuMWIxIHVzZXMgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2VzXG4gICAgICAgICAgICAgICAgLy8gd2hlcmUgY2hhcmFjdGVyIGVzY2FwZSBjb2RlcyBhcmUgZXhwZWN0ZWQgKGUuZy4sIGBcXGJgID0+IGBcXHUwMDA4YCkuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KHsgXCJhXCI6IFt2YWx1ZSwgdHJ1ZSwgZmFsc2UsIG51bGwsIFwiXFx4MDBcXGJcXG5cXGZcXHJcXHRcIl0gfSkgPT0gc2VyaWFsaXplZCAmJlxuICAgICAgICAgICAgICAgIC8vIEZGIDMuMWIxIGFuZCBiMiBpZ25vcmUgdGhlIGBmaWx0ZXJgIGFuZCBgd2lkdGhgIGFyZ3VtZW50cy5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkobnVsbCwgdmFsdWUpID09PSBcIjFcIiAmJlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShbMSwgMl0sIG51bGwsIDEpID09IFwiW1xcbiAxLFxcbiAyXFxuXVwiO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBzdHJpbmdpZnlTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpc1N1cHBvcnRlZCA9IHN0cmluZ2lmeVN1cHBvcnRlZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBUZXN0IGBKU09OLnBhcnNlYC5cbiAgICAgICAgaWYgKG5hbWUgPT0gXCJqc29uLXBhcnNlXCIpIHtcbiAgICAgICAgICB2YXIgcGFyc2UgPSBleHBvcnRzLnBhcnNlLCBwYXJzZVN1cHBvcnRlZDtcbiAgICAgICAgICBpZiAodHlwZW9mIHBhcnNlID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgYXR0ZW1wdChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIC8vIEZGIDMuMWIxLCBiMiB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhIGJhcmUgbGl0ZXJhbCBpcyBwcm92aWRlZC5cbiAgICAgICAgICAgICAgLy8gQ29uZm9ybWluZyBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkIGFsc28gY29lcmNlIHRoZSBpbml0aWFsIGFyZ3VtZW50IHRvXG4gICAgICAgICAgICAgIC8vIGEgc3RyaW5nIHByaW9yIHRvIHBhcnNpbmcuXG4gICAgICAgICAgICAgIGlmIChwYXJzZShcIjBcIikgPT09IDAgJiYgIXBhcnNlKGZhbHNlKSkge1xuICAgICAgICAgICAgICAgIC8vIFNpbXBsZSBwYXJzaW5nIHRlc3QuXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZShzZXJpYWxpemVkKTtcbiAgICAgICAgICAgICAgICBwYXJzZVN1cHBvcnRlZCA9IHZhbHVlW1wiYVwiXS5sZW5ndGggPT0gNSAmJiB2YWx1ZVtcImFcIl1bMF0gPT09IDE7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICBhdHRlbXB0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2FmYXJpIDw9IDUuMS4yIGFuZCBGRiAzLjFiMSBhbGxvdyB1bmVzY2FwZWQgdGFicyBpbiBzdHJpbmdzLlxuICAgICAgICAgICAgICAgICAgICBwYXJzZVN1cHBvcnRlZCA9ICFwYXJzZSgnXCJcXHRcIicpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBpZiAocGFyc2VTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gRkYgNC4wIGFuZCA0LjAuMSBhbGxvdyBsZWFkaW5nIGArYCBzaWducyBhbmQgbGVhZGluZ1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGRlY2ltYWwgcG9pbnRzLiBGRiA0LjAsIDQuMC4xLCBhbmQgSUUgOS0xMCBhbHNvIGFsbG93XG4gICAgICAgICAgICAgICAgICAgICAgLy8gY2VydGFpbiBvY3RhbCBsaXRlcmFscy5cbiAgICAgICAgICAgICAgICAgICAgICBwYXJzZVN1cHBvcnRlZCA9IHBhcnNlKFwiMDFcIikgIT09IDE7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dGVtcHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEZGIDQuMCwgNC4wLjEsIGFuZCBSaGlubyAxLjdSMy1SNCBhbGxvdyB0cmFpbGluZyBkZWNpbWFsXG4gICAgICAgICAgICAgICAgICAgICAgLy8gcG9pbnRzLiBUaGVzZSBlbnZpcm9ubWVudHMsIGFsb25nIHdpdGggRkYgMy4xYjEgYW5kIDIsXG4gICAgICAgICAgICAgICAgICAgICAgLy8gYWxzbyBhbGxvdyB0cmFpbGluZyBjb21tYXMgaW4gSlNPTiBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgICAgICAgICAgICAgICAgICAgcGFyc2VTdXBwb3J0ZWQgPSBwYXJzZShcIjEuXCIpICE9PSAxO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcGFyc2VTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpc1N1cHBvcnRlZCA9IHBhcnNlU3VwcG9ydGVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFzW25hbWVdID0gISFpc1N1cHBvcnRlZDtcbiAgICB9XG4gICAgaGFzW1wiYnVnLXN0cmluZy1jaGFyLWluZGV4XCJdID0gaGFzW1wiZGF0ZS1zZXJpYWxpemF0aW9uXCJdID0gaGFzW1wianNvblwiXSA9IGhhc1tcImpzb24tc3RyaW5naWZ5XCJdID0gaGFzW1wianNvbi1wYXJzZVwiXSA9IG51bGw7XG5cbiAgICBpZiAoIWhhcyhcImpzb25cIikpIHtcbiAgICAgIC8vIENvbW1vbiBgW1tDbGFzc11dYCBuYW1lIGFsaWFzZXMuXG4gICAgICB2YXIgZnVuY3Rpb25DbGFzcyA9IFwiW29iamVjdCBGdW5jdGlvbl1cIixcbiAgICAgICAgICBkYXRlQ2xhc3MgPSBcIltvYmplY3QgRGF0ZV1cIixcbiAgICAgICAgICBudW1iZXJDbGFzcyA9IFwiW29iamVjdCBOdW1iZXJdXCIsXG4gICAgICAgICAgc3RyaW5nQ2xhc3MgPSBcIltvYmplY3QgU3RyaW5nXVwiLFxuICAgICAgICAgIGFycmF5Q2xhc3MgPSBcIltvYmplY3QgQXJyYXldXCIsXG4gICAgICAgICAgYm9vbGVhbkNsYXNzID0gXCJbb2JqZWN0IEJvb2xlYW5dXCI7XG5cbiAgICAgIC8vIERldGVjdCBpbmNvbXBsZXRlIHN1cHBvcnQgZm9yIGFjY2Vzc2luZyBzdHJpbmcgY2hhcmFjdGVycyBieSBpbmRleC5cbiAgICAgIHZhciBjaGFySW5kZXhCdWdneSA9IGhhcyhcImJ1Zy1zdHJpbmctY2hhci1pbmRleFwiKTtcblxuICAgICAgLy8gSW50ZXJuYWw6IE5vcm1hbGl6ZXMgdGhlIGBmb3IuLi5pbmAgaXRlcmF0aW9uIGFsZ29yaXRobSBhY3Jvc3NcbiAgICAgIC8vIGVudmlyb25tZW50cy4gRWFjaCBlbnVtZXJhdGVkIGtleSBpcyB5aWVsZGVkIHRvIGEgYGNhbGxiYWNrYCBmdW5jdGlvbi5cbiAgICAgIHZhciBmb3JPd24gPSBmdW5jdGlvbiAob2JqZWN0LCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgc2l6ZSA9IDAsIFByb3BlcnRpZXMsIGRvbnRFbnVtcywgcHJvcGVydHk7XG5cbiAgICAgICAgLy8gVGVzdHMgZm9yIGJ1Z3MgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQncyBgZm9yLi4uaW5gIGFsZ29yaXRobS4gVGhlXG4gICAgICAgIC8vIGB2YWx1ZU9mYCBwcm9wZXJ0eSBpbmhlcml0cyB0aGUgbm9uLWVudW1lcmFibGUgZmxhZyBmcm9tXG4gICAgICAgIC8vIGBPYmplY3QucHJvdG90eXBlYCBpbiBvbGRlciB2ZXJzaW9ucyBvZiBJRSwgTmV0c2NhcGUsIGFuZCBNb3ppbGxhLlxuICAgICAgICAoUHJvcGVydGllcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlT2YgPSAwO1xuICAgICAgICB9KS5wcm90b3R5cGUudmFsdWVPZiA9IDA7XG5cbiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBgUHJvcGVydGllc2AgY2xhc3MuXG4gICAgICAgIGRvbnRFbnVtcyA9IG5ldyBQcm9wZXJ0aWVzKCk7XG4gICAgICAgIGZvciAocHJvcGVydHkgaW4gZG9udEVudW1zKSB7XG4gICAgICAgICAgLy8gSWdub3JlIGFsbCBwcm9wZXJ0aWVzIGluaGVyaXRlZCBmcm9tIGBPYmplY3QucHJvdG90eXBlYC5cbiAgICAgICAgICBpZiAoaXNQcm9wZXJ0eS5jYWxsKGRvbnRFbnVtcywgcHJvcGVydHkpKSB7XG4gICAgICAgICAgICBzaXplKys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFByb3BlcnRpZXMgPSBkb250RW51bXMgPSBudWxsO1xuXG4gICAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgaXRlcmF0aW9uIGFsZ29yaXRobS5cbiAgICAgICAgaWYgKCFzaXplKSB7XG4gICAgICAgICAgLy8gQSBsaXN0IG9mIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMgaW5oZXJpdGVkIGZyb20gYE9iamVjdC5wcm90b3R5cGVgLlxuICAgICAgICAgIGRvbnRFbnVtcyA9IFtcInZhbHVlT2ZcIiwgXCJ0b1N0cmluZ1wiLCBcInRvTG9jYWxlU3RyaW5nXCIsIFwicHJvcGVydHlJc0VudW1lcmFibGVcIiwgXCJpc1Byb3RvdHlwZU9mXCIsIFwiaGFzT3duUHJvcGVydHlcIiwgXCJjb25zdHJ1Y3RvclwiXTtcbiAgICAgICAgICAvLyBJRSA8PSA4LCBNb3ppbGxhIDEuMCwgYW5kIE5ldHNjYXBlIDYuMiBpZ25vcmUgc2hhZG93ZWQgbm9uLWVudW1lcmFibGVcbiAgICAgICAgICAvLyBwcm9wZXJ0aWVzLlxuICAgICAgICAgIGZvck93biA9IGZ1bmN0aW9uIChvYmplY3QsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgaXNGdW5jdGlvbiA9IGdldENsYXNzLmNhbGwob2JqZWN0KSA9PSBmdW5jdGlvbkNsYXNzLCBwcm9wZXJ0eSwgbGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGhhc1Byb3BlcnR5ID0gIWlzRnVuY3Rpb24gJiYgdHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciAhPSBcImZ1bmN0aW9uXCIgJiYgb2JqZWN0VHlwZXNbdHlwZW9mIG9iamVjdC5oYXNPd25Qcm9wZXJ0eV0gJiYgb2JqZWN0Lmhhc093blByb3BlcnR5IHx8IGlzUHJvcGVydHk7XG4gICAgICAgICAgICBmb3IgKHByb3BlcnR5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICAvLyBHZWNrbyA8PSAxLjAgZW51bWVyYXRlcyB0aGUgYHByb3RvdHlwZWAgcHJvcGVydHkgb2YgZnVuY3Rpb25zIHVuZGVyXG4gICAgICAgICAgICAgIC8vIGNlcnRhaW4gY29uZGl0aW9uczsgSUUgZG9lcyBub3QuXG4gICAgICAgICAgICAgIGlmICghKGlzRnVuY3Rpb24gJiYgcHJvcGVydHkgPT0gXCJwcm90b3R5cGVcIikgJiYgaGFzUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTWFudWFsbHkgaW52b2tlIHRoZSBjYWxsYmFjayBmb3IgZWFjaCBub24tZW51bWVyYWJsZSBwcm9wZXJ0eS5cbiAgICAgICAgICAgIGZvciAobGVuZ3RoID0gZG9udEVudW1zLmxlbmd0aDsgcHJvcGVydHkgPSBkb250RW51bXNbLS1sZW5ndGhdOykge1xuICAgICAgICAgICAgICBpZiAoaGFzUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTm8gYnVncyBkZXRlY3RlZDsgdXNlIHRoZSBzdGFuZGFyZCBgZm9yLi4uaW5gIGFsZ29yaXRobS5cbiAgICAgICAgICBmb3JPd24gPSBmdW5jdGlvbiAob2JqZWN0LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgdmFyIGlzRnVuY3Rpb24gPSBnZXRDbGFzcy5jYWxsKG9iamVjdCkgPT0gZnVuY3Rpb25DbGFzcywgcHJvcGVydHksIGlzQ29uc3RydWN0b3I7XG4gICAgICAgICAgICBmb3IgKHByb3BlcnR5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICBpZiAoIShpc0Z1bmN0aW9uICYmIHByb3BlcnR5ID09IFwicHJvdG90eXBlXCIpICYmIGlzUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSAmJiAhKGlzQ29uc3RydWN0b3IgPSBwcm9wZXJ0eSA9PT0gXCJjb25zdHJ1Y3RvclwiKSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTWFudWFsbHkgaW52b2tlIHRoZSBjYWxsYmFjayBmb3IgdGhlIGBjb25zdHJ1Y3RvcmAgcHJvcGVydHkgZHVlIHRvXG4gICAgICAgICAgICAvLyBjcm9zcy1lbnZpcm9ubWVudCBpbmNvbnNpc3RlbmNpZXMuXG4gICAgICAgICAgICBpZiAoaXNDb25zdHJ1Y3RvciB8fCBpc1Byb3BlcnR5LmNhbGwob2JqZWN0LCAocHJvcGVydHkgPSBcImNvbnN0cnVjdG9yXCIpKSkge1xuICAgICAgICAgICAgICBjYWxsYmFjayhwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9yT3duKG9iamVjdCwgY2FsbGJhY2spO1xuICAgICAgfTtcblxuICAgICAgLy8gUHVibGljOiBTZXJpYWxpemVzIGEgSmF2YVNjcmlwdCBgdmFsdWVgIGFzIGEgSlNPTiBzdHJpbmcuIFRoZSBvcHRpb25hbFxuICAgICAgLy8gYGZpbHRlcmAgYXJndW1lbnQgbWF5IHNwZWNpZnkgZWl0aGVyIGEgZnVuY3Rpb24gdGhhdCBhbHRlcnMgaG93IG9iamVjdCBhbmRcbiAgICAgIC8vIGFycmF5IG1lbWJlcnMgYXJlIHNlcmlhbGl6ZWQsIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MgYW5kIG51bWJlcnMgdGhhdFxuICAgICAgLy8gaW5kaWNhdGVzIHdoaWNoIHByb3BlcnRpZXMgc2hvdWxkIGJlIHNlcmlhbGl6ZWQuIFRoZSBvcHRpb25hbCBgd2lkdGhgXG4gICAgICAvLyBhcmd1bWVudCBtYXkgYmUgZWl0aGVyIGEgc3RyaW5nIG9yIG51bWJlciB0aGF0IHNwZWNpZmllcyB0aGUgaW5kZW50YXRpb25cbiAgICAgIC8vIGxldmVsIG9mIHRoZSBvdXRwdXQuXG4gICAgICBpZiAoIWhhcyhcImpzb24tc3RyaW5naWZ5XCIpICYmICFoYXMoXCJkYXRlLXNlcmlhbGl6YXRpb25cIikpIHtcbiAgICAgICAgLy8gSW50ZXJuYWw6IEEgbWFwIG9mIGNvbnRyb2wgY2hhcmFjdGVycyBhbmQgdGhlaXIgZXNjYXBlZCBlcXVpdmFsZW50cy5cbiAgICAgICAgdmFyIEVzY2FwZXMgPSB7XG4gICAgICAgICAgOTI6IFwiXFxcXFxcXFxcIixcbiAgICAgICAgICAzNDogJ1xcXFxcIicsXG4gICAgICAgICAgODogXCJcXFxcYlwiLFxuICAgICAgICAgIDEyOiBcIlxcXFxmXCIsXG4gICAgICAgICAgMTA6IFwiXFxcXG5cIixcbiAgICAgICAgICAxMzogXCJcXFxcclwiLFxuICAgICAgICAgIDk6IFwiXFxcXHRcIlxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEludGVybmFsOiBDb252ZXJ0cyBgdmFsdWVgIGludG8gYSB6ZXJvLXBhZGRlZCBzdHJpbmcgc3VjaCB0aGF0IGl0c1xuICAgICAgICAvLyBsZW5ndGggaXMgYXQgbGVhc3QgZXF1YWwgdG8gYHdpZHRoYC4gVGhlIGB3aWR0aGAgbXVzdCBiZSA8PSA2LlxuICAgICAgICB2YXIgbGVhZGluZ1plcm9lcyA9IFwiMDAwMDAwXCI7XG4gICAgICAgIHZhciB0b1BhZGRlZFN0cmluZyA9IGZ1bmN0aW9uICh3aWR0aCwgdmFsdWUpIHtcbiAgICAgICAgICAvLyBUaGUgYHx8IDBgIGV4cHJlc3Npb24gaXMgbmVjZXNzYXJ5IHRvIHdvcmsgYXJvdW5kIGEgYnVnIGluXG4gICAgICAgICAgLy8gT3BlcmEgPD0gNy41NHUyIHdoZXJlIGAwID09IC0wYCwgYnV0IGBTdHJpbmcoLTApICE9PSBcIjBcImAuXG4gICAgICAgICAgcmV0dXJuIChsZWFkaW5nWmVyb2VzICsgKHZhbHVlIHx8IDApKS5zbGljZSgtd2lkdGgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEludGVybmFsOiBTZXJpYWxpemVzIGEgZGF0ZSBvYmplY3QuXG4gICAgICAgIHZhciBzZXJpYWxpemVEYXRlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgdmFyIGdldERhdGEsIHllYXIsIG1vbnRoLCBkYXRlLCB0aW1lLCBob3VycywgbWludXRlcywgc2Vjb25kcywgbWlsbGlzZWNvbmRzO1xuICAgICAgICAgIC8vIERlZmluZSBhZGRpdGlvbmFsIHV0aWxpdHkgbWV0aG9kcyBpZiB0aGUgYERhdGVgIG1ldGhvZHMgYXJlIGJ1Z2d5LlxuICAgICAgICAgIGlmICghaXNFeHRlbmRlZCkge1xuICAgICAgICAgICAgdmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbiAgICAgICAgICAgIC8vIEEgbWFwcGluZyBiZXR3ZWVuIHRoZSBtb250aHMgb2YgdGhlIHllYXIgYW5kIHRoZSBudW1iZXIgb2YgZGF5cyBiZXR3ZWVuXG4gICAgICAgICAgICAvLyBKYW51YXJ5IDFzdCBhbmQgdGhlIGZpcnN0IG9mIHRoZSByZXNwZWN0aXZlIG1vbnRoLlxuICAgICAgICAgICAgdmFyIE1vbnRocyA9IFswLCAzMSwgNTksIDkwLCAxMjAsIDE1MSwgMTgxLCAyMTIsIDI0MywgMjczLCAzMDQsIDMzNF07XG4gICAgICAgICAgICAvLyBJbnRlcm5hbDogQ2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mIGRheXMgYmV0d2VlbiB0aGUgVW5peCBlcG9jaCBhbmQgdGhlXG4gICAgICAgICAgICAvLyBmaXJzdCBkYXkgb2YgdGhlIGdpdmVuIG1vbnRoLlxuICAgICAgICAgICAgdmFyIGdldERheSA9IGZ1bmN0aW9uICh5ZWFyLCBtb250aCkge1xuICAgICAgICAgICAgICByZXR1cm4gTW9udGhzW21vbnRoXSArIDM2NSAqICh5ZWFyIC0gMTk3MCkgKyBmbG9vcigoeWVhciAtIDE5NjkgKyAobW9udGggPSArKG1vbnRoID4gMSkpKSAvIDQpIC0gZmxvb3IoKHllYXIgLSAxOTAxICsgbW9udGgpIC8gMTAwKSArIGZsb29yKCh5ZWFyIC0gMTYwMSArIG1vbnRoKSAvIDQwMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZ2V0RGF0YSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAvLyBNYW51YWxseSBjb21wdXRlIHRoZSB5ZWFyLCBtb250aCwgZGF0ZSwgaG91cnMsIG1pbnV0ZXMsXG4gICAgICAgICAgICAgIC8vIHNlY29uZHMsIGFuZCBtaWxsaXNlY29uZHMgaWYgdGhlIGBnZXRVVEMqYCBtZXRob2RzIGFyZVxuICAgICAgICAgICAgICAvLyBidWdneS4gQWRhcHRlZCBmcm9tIEBZYWZmbGUncyBgZGF0ZS1zaGltYCBwcm9qZWN0LlxuICAgICAgICAgICAgICBkYXRlID0gZmxvb3IodmFsdWUgLyA4NjRlNSk7XG4gICAgICAgICAgICAgIGZvciAoeWVhciA9IGZsb29yKGRhdGUgLyAzNjUuMjQyNSkgKyAxOTcwIC0gMTsgZ2V0RGF5KHllYXIgKyAxLCAwKSA8PSBkYXRlOyB5ZWFyKyspO1xuICAgICAgICAgICAgICBmb3IgKG1vbnRoID0gZmxvb3IoKGRhdGUgLSBnZXREYXkoeWVhciwgMCkpIC8gMzAuNDIpOyBnZXREYXkoeWVhciwgbW9udGggKyAxKSA8PSBkYXRlOyBtb250aCsrKTtcbiAgICAgICAgICAgICAgZGF0ZSA9IDEgKyBkYXRlIC0gZ2V0RGF5KHllYXIsIG1vbnRoKTtcbiAgICAgICAgICAgICAgLy8gVGhlIGB0aW1lYCB2YWx1ZSBzcGVjaWZpZXMgdGhlIHRpbWUgd2l0aGluIHRoZSBkYXkgKHNlZSBFU1xuICAgICAgICAgICAgICAvLyA1LjEgc2VjdGlvbiAxNS45LjEuMikuIFRoZSBmb3JtdWxhIGAoQSAlIEIgKyBCKSAlIEJgIGlzIHVzZWRcbiAgICAgICAgICAgICAgLy8gdG8gY29tcHV0ZSBgQSBtb2R1bG8gQmAsIGFzIHRoZSBgJWAgb3BlcmF0b3IgZG9lcyBub3RcbiAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZCB0byB0aGUgYG1vZHVsb2Agb3BlcmF0aW9uIGZvciBuZWdhdGl2ZSBudW1iZXJzLlxuICAgICAgICAgICAgICB0aW1lID0gKHZhbHVlICUgODY0ZTUgKyA4NjRlNSkgJSA4NjRlNTtcbiAgICAgICAgICAgICAgLy8gVGhlIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBhbmQgbWlsbGlzZWNvbmRzIGFyZSBvYnRhaW5lZCBieVxuICAgICAgICAgICAgICAvLyBkZWNvbXBvc2luZyB0aGUgdGltZSB3aXRoaW4gdGhlIGRheS4gU2VlIHNlY3Rpb24gMTUuOS4xLjEwLlxuICAgICAgICAgICAgICBob3VycyA9IGZsb29yKHRpbWUgLyAzNmU1KSAlIDI0O1xuICAgICAgICAgICAgICBtaW51dGVzID0gZmxvb3IodGltZSAvIDZlNCkgJSA2MDtcbiAgICAgICAgICAgICAgc2Vjb25kcyA9IGZsb29yKHRpbWUgLyAxZTMpICUgNjA7XG4gICAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IHRpbWUgJSAxZTM7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXREYXRhID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgIHllYXIgPSB2YWx1ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgICAgICAgICBtb250aCA9IHZhbHVlLmdldFVUQ01vbnRoKCk7XG4gICAgICAgICAgICAgIGRhdGUgPSB2YWx1ZS5nZXRVVENEYXRlKCk7XG4gICAgICAgICAgICAgIGhvdXJzID0gdmFsdWUuZ2V0VVRDSG91cnMoKTtcbiAgICAgICAgICAgICAgbWludXRlcyA9IHZhbHVlLmdldFVUQ01pbnV0ZXMoKTtcbiAgICAgICAgICAgICAgc2Vjb25kcyA9IHZhbHVlLmdldFVUQ1NlY29uZHMoKTtcbiAgICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gdmFsdWUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZXJpYWxpemVEYXRlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPiAtMSAvIDAgJiYgdmFsdWUgPCAxIC8gMCkge1xuICAgICAgICAgICAgICAvLyBEYXRlcyBhcmUgc2VyaWFsaXplZCBhY2NvcmRpbmcgdG8gdGhlIGBEYXRlI3RvSlNPTmAgbWV0aG9kXG4gICAgICAgICAgICAgIC8vIHNwZWNpZmllZCBpbiBFUyA1LjEgc2VjdGlvbiAxNS45LjUuNDQuIFNlZSBzZWN0aW9uIDE1LjkuMS4xNVxuICAgICAgICAgICAgICAvLyBmb3IgdGhlIElTTyA4NjAxIGRhdGUgdGltZSBzdHJpbmcgZm9ybWF0LlxuICAgICAgICAgICAgICBnZXREYXRhKHZhbHVlKTtcbiAgICAgICAgICAgICAgLy8gU2VyaWFsaXplIGV4dGVuZGVkIHllYXJzIGNvcnJlY3RseS5cbiAgICAgICAgICAgICAgdmFsdWUgPSAoeWVhciA8PSAwIHx8IHllYXIgPj0gMWU0ID8gKHllYXIgPCAwID8gXCItXCIgOiBcIitcIikgKyB0b1BhZGRlZFN0cmluZyg2LCB5ZWFyIDwgMCA/IC15ZWFyIDogeWVhcikgOiB0b1BhZGRlZFN0cmluZyg0LCB5ZWFyKSkgK1xuICAgICAgICAgICAgICBcIi1cIiArIHRvUGFkZGVkU3RyaW5nKDIsIG1vbnRoICsgMSkgKyBcIi1cIiArIHRvUGFkZGVkU3RyaW5nKDIsIGRhdGUpICtcbiAgICAgICAgICAgICAgLy8gTW9udGhzLCBkYXRlcywgaG91cnMsIG1pbnV0ZXMsIGFuZCBzZWNvbmRzIHNob3VsZCBoYXZlIHR3b1xuICAgICAgICAgICAgICAvLyBkaWdpdHM7IG1pbGxpc2Vjb25kcyBzaG91bGQgaGF2ZSB0aHJlZS5cbiAgICAgICAgICAgICAgXCJUXCIgKyB0b1BhZGRlZFN0cmluZygyLCBob3VycykgKyBcIjpcIiArIHRvUGFkZGVkU3RyaW5nKDIsIG1pbnV0ZXMpICsgXCI6XCIgKyB0b1BhZGRlZFN0cmluZygyLCBzZWNvbmRzKSArXG4gICAgICAgICAgICAgIC8vIE1pbGxpc2Vjb25kcyBhcmUgb3B0aW9uYWwgaW4gRVMgNS4wLCBidXQgcmVxdWlyZWQgaW4gNS4xLlxuICAgICAgICAgICAgICBcIi5cIiArIHRvUGFkZGVkU3RyaW5nKDMsIG1pbGxpc2Vjb25kcykgKyBcIlpcIjtcbiAgICAgICAgICAgICAgeWVhciA9IG1vbnRoID0gZGF0ZSA9IGhvdXJzID0gbWludXRlcyA9IHNlY29uZHMgPSBtaWxsaXNlY29uZHMgPSBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZURhdGUodmFsdWUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEZvciBlbnZpcm9ubWVudHMgd2l0aCBgSlNPTi5zdHJpbmdpZnlgIGJ1dCBidWdneSBkYXRlIHNlcmlhbGl6YXRpb24sXG4gICAgICAgIC8vIHdlIG92ZXJyaWRlIHRoZSBuYXRpdmUgYERhdGUjdG9KU09OYCBpbXBsZW1lbnRhdGlvbiB3aXRoIGFcbiAgICAgICAgLy8gc3BlYy1jb21wbGlhbnQgb25lLlxuICAgICAgICBpZiAoaGFzKFwianNvbi1zdHJpbmdpZnlcIikgJiYgIWhhcyhcImRhdGUtc2VyaWFsaXphdGlvblwiKSkge1xuICAgICAgICAgIC8vIEludGVybmFsOiB0aGUgYERhdGUjdG9KU09OYCBpbXBsZW1lbnRhdGlvbiB1c2VkIHRvIG92ZXJyaWRlIHRoZSBuYXRpdmUgb25lLlxuICAgICAgICAgIGZ1bmN0aW9uIGRhdGVUb0pTT04gKGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZURhdGUodGhpcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gUHVibGljOiBgSlNPTi5zdHJpbmdpZnlgLiBTZWUgRVMgNS4xIHNlY3Rpb24gMTUuMTIuMy5cbiAgICAgICAgICB2YXIgbmF0aXZlU3RyaW5naWZ5ID0gZXhwb3J0cy5zdHJpbmdpZnk7XG4gICAgICAgICAgZXhwb3J0cy5zdHJpbmdpZnkgPSBmdW5jdGlvbiAoc291cmNlLCBmaWx0ZXIsIHdpZHRoKSB7XG4gICAgICAgICAgICB2YXIgbmF0aXZlVG9KU09OID0gRGF0ZS5wcm90b3R5cGUudG9KU09OO1xuICAgICAgICAgICAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZGF0ZVRvSlNPTjtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBuYXRpdmVTdHJpbmdpZnkoc291cmNlLCBmaWx0ZXIsIHdpZHRoKTtcbiAgICAgICAgICAgIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IG5hdGl2ZVRvSlNPTjtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEludGVybmFsOiBEb3VibGUtcXVvdGVzIGEgc3RyaW5nIGB2YWx1ZWAsIHJlcGxhY2luZyBhbGwgQVNDSUkgY29udHJvbFxuICAgICAgICAgIC8vIGNoYXJhY3RlcnMgKGNoYXJhY3RlcnMgd2l0aCBjb2RlIHVuaXQgdmFsdWVzIGJldHdlZW4gMCBhbmQgMzEpIHdpdGhcbiAgICAgICAgICAvLyB0aGVpciBlc2NhcGVkIGVxdWl2YWxlbnRzLiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZVxuICAgICAgICAgIC8vIGBRdW90ZSh2YWx1ZSlgIG9wZXJhdGlvbiBkZWZpbmVkIGluIEVTIDUuMSBzZWN0aW9uIDE1LjEyLjMuXG4gICAgICAgICAgdmFyIHVuaWNvZGVQcmVmaXggPSBcIlxcXFx1MDBcIjtcbiAgICAgICAgICB2YXIgZXNjYXBlQ2hhciA9IGZ1bmN0aW9uIChjaGFyYWN0ZXIpIHtcbiAgICAgICAgICAgIHZhciBjaGFyQ29kZSA9IGNoYXJhY3Rlci5jaGFyQ29kZUF0KDApLCBlc2NhcGVkID0gRXNjYXBlc1tjaGFyQ29kZV07XG4gICAgICAgICAgICBpZiAoZXNjYXBlZCkge1xuICAgICAgICAgICAgICByZXR1cm4gZXNjYXBlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmljb2RlUHJlZml4ICsgdG9QYWRkZWRTdHJpbmcoMiwgY2hhckNvZGUudG9TdHJpbmcoMTYpKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHZhciByZUVzY2FwZSA9IC9bXFx4MDAtXFx4MWZcXHgyMlxceDVjXS9nO1xuICAgICAgICAgIHZhciBxdW90ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmVFc2NhcGUubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIHJldHVybiAnXCInICtcbiAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIHJlRXNjYXBlLnRlc3QodmFsdWUpXG4gICAgICAgICAgICAgICAgICA/IHZhbHVlLnJlcGxhY2UocmVFc2NhcGUsIGVzY2FwZUNoYXIpXG4gICAgICAgICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgICAnXCInO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICAvLyBJbnRlcm5hbDogUmVjdXJzaXZlbHkgc2VyaWFsaXplcyBhbiBvYmplY3QuIEltcGxlbWVudHMgdGhlXG4gICAgICAgICAgLy8gYFN0cihrZXksIGhvbGRlcilgLCBgSk8odmFsdWUpYCwgYW5kIGBKQSh2YWx1ZSlgIG9wZXJhdGlvbnMuXG4gICAgICAgICAgdmFyIHNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSwgb2JqZWN0LCBjYWxsYmFjaywgcHJvcGVydGllcywgd2hpdGVzcGFjZSwgaW5kZW50YXRpb24sIHN0YWNrKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUsIHR5cGUsIGNsYXNzTmFtZSwgcmVzdWx0cywgZWxlbWVudCwgaW5kZXgsIGxlbmd0aCwgcHJlZml4LCByZXN1bHQ7XG4gICAgICAgICAgICBhdHRlbXB0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgLy8gTmVjZXNzYXJ5IGZvciBob3N0IG9iamVjdCBzdXBwb3J0LlxuICAgICAgICAgICAgICB2YWx1ZSA9IG9iamVjdFtwcm9wZXJ0eV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIiAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgICBpZiAodmFsdWUuZ2V0VVRDRnVsbFllYXIgJiYgZ2V0Q2xhc3MuY2FsbCh2YWx1ZSkgPT0gZGF0ZUNsYXNzICYmIHZhbHVlLnRvSlNPTiA9PT0gRGF0ZS5wcm90b3R5cGUudG9KU09OKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBzZXJpYWxpemVEYXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUudG9KU09OID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9KU09OKHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIC8vIElmIGEgcmVwbGFjZW1lbnQgZnVuY3Rpb24gd2FzIHByb3ZpZGVkLCBjYWxsIGl0IHRvIG9idGFpbiB0aGUgdmFsdWVcbiAgICAgICAgICAgICAgLy8gZm9yIHNlcmlhbGl6YXRpb24uXG4gICAgICAgICAgICAgIHZhbHVlID0gY2FsbGJhY2suY2FsbChvYmplY3QsIHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBFeGl0IGVhcmx5IGlmIHZhbHVlIGlzIGB1bmRlZmluZWRgIG9yIGBudWxsYC5cbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB2YWx1ZSA6IFwibnVsbFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgICAgICAgICAgIC8vIE9ubHkgY2FsbCBgZ2V0Q2xhc3NgIGlmIHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QuXG4gICAgICAgICAgICBpZiAodHlwZSA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZSA9IGdldENsYXNzLmNhbGwodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChjbGFzc05hbWUgfHwgdHlwZSkge1xuICAgICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICBjYXNlIGJvb2xlYW5DbGFzczpcbiAgICAgICAgICAgICAgICAvLyBCb29sZWFucyBhcmUgcmVwcmVzZW50ZWQgbGl0ZXJhbGx5LlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiICsgdmFsdWU7XG4gICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgY2FzZSBudW1iZXJDbGFzczpcbiAgICAgICAgICAgICAgICAvLyBKU09OIG51bWJlcnMgbXVzdCBiZSBmaW5pdGUuIGBJbmZpbml0eWAgYW5kIGBOYU5gIGFyZSBzZXJpYWxpemVkIGFzXG4gICAgICAgICAgICAgICAgLy8gYFwibnVsbFwiYC5cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPiAtMSAvIDAgJiYgdmFsdWUgPCAxIC8gMCA/IFwiXCIgKyB2YWx1ZSA6IFwibnVsbFwiO1xuICAgICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgIGNhc2Ugc3RyaW5nQ2xhc3M6XG4gICAgICAgICAgICAgICAgLy8gU3RyaW5ncyBhcmUgZG91YmxlLXF1b3RlZCBhbmQgZXNjYXBlZC5cbiAgICAgICAgICAgICAgICByZXR1cm4gcXVvdGUoXCJcIiArIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHNlcmlhbGl6ZSBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGN5Y2xpYyBzdHJ1Y3R1cmVzLiBUaGlzIGlzIGEgbGluZWFyIHNlYXJjaDsgcGVyZm9ybWFuY2VcbiAgICAgICAgICAgICAgLy8gaXMgaW52ZXJzZWx5IHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mIHVuaXF1ZSBuZXN0ZWQgb2JqZWN0cy5cbiAgICAgICAgICAgICAgZm9yIChsZW5ndGggPSBzdGFjay5sZW5ndGg7IGxlbmd0aC0tOykge1xuICAgICAgICAgICAgICAgIGlmIChzdGFja1tsZW5ndGhdID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgLy8gQ3ljbGljIHN0cnVjdHVyZXMgY2Fubm90IGJlIHNlcmlhbGl6ZWQgYnkgYEpTT04uc3RyaW5naWZ5YC5cbiAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBBZGQgdGhlIG9iamVjdCB0byB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgICAgICAgICAgIHN0YWNrLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICByZXN1bHRzID0gW107XG4gICAgICAgICAgICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgaW5kZW50YXRpb24gbGV2ZWwgYW5kIGluZGVudCBvbmUgYWRkaXRpb25hbCBsZXZlbC5cbiAgICAgICAgICAgICAgcHJlZml4ID0gaW5kZW50YXRpb247XG4gICAgICAgICAgICAgIGluZGVudGF0aW9uICs9IHdoaXRlc3BhY2U7XG4gICAgICAgICAgICAgIGlmIChjbGFzc05hbWUgPT0gYXJyYXlDbGFzcykge1xuICAgICAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHNlcmlhbGl6ZSBhcnJheSBlbGVtZW50cy5cbiAgICAgICAgICAgICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gdmFsdWUubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IHNlcmlhbGl6ZShpbmRleCwgdmFsdWUsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzLCB3aGl0ZXNwYWNlLCBpbmRlbnRhdGlvbiwgc3RhY2spO1xuICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGVsZW1lbnQgPT09IHVuZGVmaW5lZCA/IFwibnVsbFwiIDogZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdHMubGVuZ3RoID8gKHdoaXRlc3BhY2UgPyBcIltcXG5cIiArIGluZGVudGF0aW9uICsgcmVzdWx0cy5qb2luKFwiLFxcblwiICsgaW5kZW50YXRpb24pICsgXCJcXG5cIiArIHByZWZpeCArIFwiXVwiIDogKFwiW1wiICsgcmVzdWx0cy5qb2luKFwiLFwiKSArIFwiXVwiKSkgOiBcIltdXCI7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgc2VyaWFsaXplIG9iamVjdCBtZW1iZXJzLiBNZW1iZXJzIGFyZSBzZWxlY3RlZCBmcm9tXG4gICAgICAgICAgICAgICAgLy8gZWl0aGVyIGEgdXNlci1zcGVjaWZpZWQgbGlzdCBvZiBwcm9wZXJ0eSBuYW1lcywgb3IgdGhlIG9iamVjdFxuICAgICAgICAgICAgICAgIC8vIGl0c2VsZi5cbiAgICAgICAgICAgICAgICBmb3JPd24ocHJvcGVydGllcyB8fCB2YWx1ZSwgZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IHNlcmlhbGl6ZShwcm9wZXJ0eSwgdmFsdWUsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzLCB3aGl0ZXNwYWNlLCBpbmRlbnRhdGlvbiwgc3RhY2spO1xuICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMzogXCJJZiBgZ2FwYCB7d2hpdGVzcGFjZX1cbiAgICAgICAgICAgICAgICAgICAgLy8gaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIGxldCBgbWVtYmVyYCB7cXVvdGUocHJvcGVydHkpICsgXCI6XCJ9XG4gICAgICAgICAgICAgICAgICAgIC8vIGJlIHRoZSBjb25jYXRlbmF0aW9uIG9mIGBtZW1iZXJgIGFuZCB0aGUgYHNwYWNlYCBjaGFyYWN0ZXIuXCJcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIFwiYHNwYWNlYCBjaGFyYWN0ZXJcIiByZWZlcnMgdG8gdGhlIGxpdGVyYWwgc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVyLCBub3QgdGhlIGBzcGFjZWAge3dpZHRofSBhcmd1bWVudCBwcm92aWRlZCB0b1xuICAgICAgICAgICAgICAgICAgICAvLyBgSlNPTi5zdHJpbmdpZnlgLlxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2gocXVvdGUocHJvcGVydHkpICsgXCI6XCIgKyAod2hpdGVzcGFjZSA/IFwiIFwiIDogXCJcIikgKyBlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRzLmxlbmd0aCA/ICh3aGl0ZXNwYWNlID8gXCJ7XFxuXCIgKyBpbmRlbnRhdGlvbiArIHJlc3VsdHMuam9pbihcIixcXG5cIiArIGluZGVudGF0aW9uKSArIFwiXFxuXCIgKyBwcmVmaXggKyBcIn1cIiA6IChcIntcIiArIHJlc3VsdHMuam9pbihcIixcIikgKyBcIn1cIikpIDogXCJ7fVwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgb2JqZWN0IGZyb20gdGhlIHRyYXZlcnNlZCBvYmplY3Qgc3RhY2suXG4gICAgICAgICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICAvLyBQdWJsaWM6IGBKU09OLnN0cmluZ2lmeWAuIFNlZSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLlxuICAgICAgICAgIGV4cG9ydHMuc3RyaW5naWZ5ID0gZnVuY3Rpb24gKHNvdXJjZSwgZmlsdGVyLCB3aWR0aCkge1xuICAgICAgICAgICAgdmFyIHdoaXRlc3BhY2UsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzLCBjbGFzc05hbWU7XG4gICAgICAgICAgICBpZiAob2JqZWN0VHlwZXNbdHlwZW9mIGZpbHRlcl0gJiYgZmlsdGVyKSB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZSA9IGdldENsYXNzLmNhbGwoZmlsdGVyKTtcbiAgICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSBmdW5jdGlvbkNsYXNzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmaWx0ZXI7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lID09IGFycmF5Q2xhc3MpIHtcbiAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lcyBhcnJheSBpbnRvIGEgbWFrZXNoaWZ0IHNldC5cbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwLCBsZW5ndGggPSBmaWx0ZXIubGVuZ3RoLCB2YWx1ZTsgaW5kZXggPCBsZW5ndGg7KSB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IGZpbHRlcltpbmRleCsrXTtcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9IGdldENsYXNzLmNhbGwodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSBcIltvYmplY3QgU3RyaW5nXVwiIHx8IGNsYXNzTmFtZSA9PSBcIltvYmplY3QgTnVtYmVyXVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNbdmFsdWVdID0gMTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh3aWR0aCkge1xuICAgICAgICAgICAgICBjbGFzc05hbWUgPSBnZXRDbGFzcy5jYWxsKHdpZHRoKTtcbiAgICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSBudW1iZXJDbGFzcykge1xuICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIGB3aWR0aGAgdG8gYW4gaW50ZWdlciBhbmQgY3JlYXRlIGEgc3RyaW5nIGNvbnRhaW5pbmdcbiAgICAgICAgICAgICAgICAvLyBgd2lkdGhgIG51bWJlciBvZiBzcGFjZSBjaGFyYWN0ZXJzLlxuICAgICAgICAgICAgICAgIGlmICgod2lkdGggLT0gd2lkdGggJSAxKSA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IDEwKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoID0gMTA7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBmb3IgKHdoaXRlc3BhY2UgPSBcIlwiOyB3aGl0ZXNwYWNlLmxlbmd0aCA8IHdpZHRoOykge1xuICAgICAgICAgICAgICAgICAgICB3aGl0ZXNwYWNlICs9IFwiIFwiO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjbGFzc05hbWUgPT0gc3RyaW5nQ2xhc3MpIHtcbiAgICAgICAgICAgICAgICB3aGl0ZXNwYWNlID0gd2lkdGgubGVuZ3RoIDw9IDEwID8gd2lkdGggOiB3aWR0aC5zbGljZSgwLCAxMCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE9wZXJhIDw9IDcuNTR1MiBkaXNjYXJkcyB0aGUgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCBlbXB0eSBzdHJpbmcga2V5c1xuICAgICAgICAgICAgLy8gKGBcIlwiYCkgb25seSBpZiB0aGV5IGFyZSB1c2VkIGRpcmVjdGx5IHdpdGhpbiBhbiBvYmplY3QgbWVtYmVyIGxpc3RcbiAgICAgICAgICAgIC8vIChlLmcuLCBgIShcIlwiIGluIHsgXCJcIjogMX0pYCkuXG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplKFwiXCIsICh2YWx1ZSA9IHt9LCB2YWx1ZVtcIlwiXSA9IHNvdXJjZSwgdmFsdWUpLCBjYWxsYmFjaywgcHJvcGVydGllcywgd2hpdGVzcGFjZSwgXCJcIiwgW10pO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUHVibGljOiBQYXJzZXMgYSBKU09OIHNvdXJjZSBzdHJpbmcuXG4gICAgICBpZiAoIWhhcyhcImpzb24tcGFyc2VcIikpIHtcbiAgICAgICAgdmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IEEgbWFwIG9mIGVzY2FwZWQgY29udHJvbCBjaGFyYWN0ZXJzIGFuZCB0aGVpciB1bmVzY2FwZWRcbiAgICAgICAgLy8gZXF1aXZhbGVudHMuXG4gICAgICAgIHZhciBVbmVzY2FwZXMgPSB7XG4gICAgICAgICAgOTI6IFwiXFxcXFwiLFxuICAgICAgICAgIDM0OiAnXCInLFxuICAgICAgICAgIDQ3OiBcIi9cIixcbiAgICAgICAgICA5ODogXCJcXGJcIixcbiAgICAgICAgICAxMTY6IFwiXFx0XCIsXG4gICAgICAgICAgMTEwOiBcIlxcblwiLFxuICAgICAgICAgIDEwMjogXCJcXGZcIixcbiAgICAgICAgICAxMTQ6IFwiXFxyXCJcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogU3RvcmVzIHRoZSBwYXJzZXIgc3RhdGUuXG4gICAgICAgIHZhciBJbmRleCwgU291cmNlO1xuXG4gICAgICAgIC8vIEludGVybmFsOiBSZXNldHMgdGhlIHBhcnNlciBzdGF0ZSBhbmQgdGhyb3dzIGEgYFN5bnRheEVycm9yYC5cbiAgICAgICAgdmFyIGFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIEluZGV4ID0gU291cmNlID0gbnVsbDtcbiAgICAgICAgICB0aHJvdyBTeW50YXhFcnJvcigpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEludGVybmFsOiBSZXR1cm5zIHRoZSBuZXh0IHRva2VuLCBvciBgXCIkXCJgIGlmIHRoZSBwYXJzZXIgaGFzIHJlYWNoZWRcbiAgICAgICAgLy8gdGhlIGVuZCBvZiB0aGUgc291cmNlIHN0cmluZy4gQSB0b2tlbiBtYXkgYmUgYSBzdHJpbmcsIG51bWJlciwgYG51bGxgXG4gICAgICAgIC8vIGxpdGVyYWwsIG9yIEJvb2xlYW4gbGl0ZXJhbC5cbiAgICAgICAgdmFyIGxleCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgc291cmNlID0gU291cmNlLCBsZW5ndGggPSBzb3VyY2UubGVuZ3RoLCB2YWx1ZSwgYmVnaW4sIHBvc2l0aW9uLCBpc1NpZ25lZCwgY2hhckNvZGU7XG4gICAgICAgICAgd2hpbGUgKEluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KTtcbiAgICAgICAgICAgIHN3aXRjaCAoY2hhckNvZGUpIHtcbiAgICAgICAgICAgICAgY2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEzOiBjYXNlIDMyOlxuICAgICAgICAgICAgICAgIC8vIFNraXAgd2hpdGVzcGFjZSB0b2tlbnMsIGluY2x1ZGluZyB0YWJzLCBjYXJyaWFnZSByZXR1cm5zLCBsaW5lXG4gICAgICAgICAgICAgICAgLy8gZmVlZHMsIGFuZCBzcGFjZSBjaGFyYWN0ZXJzLlxuICAgICAgICAgICAgICAgIEluZGV4Kys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgMTIzOiBjYXNlIDEyNTogY2FzZSA5MTogY2FzZSA5MzogY2FzZSA1ODogY2FzZSA0NDpcbiAgICAgICAgICAgICAgICAvLyBQYXJzZSBhIHB1bmN0dWF0b3IgdG9rZW4gKGB7YCwgYH1gLCBgW2AsIGBdYCwgYDpgLCBvciBgLGApIGF0XG4gICAgICAgICAgICAgICAgLy8gdGhlIGN1cnJlbnQgcG9zaXRpb24uXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBjaGFySW5kZXhCdWdneSA/IHNvdXJjZS5jaGFyQXQoSW5kZXgpIDogc291cmNlW0luZGV4XTtcbiAgICAgICAgICAgICAgICBJbmRleCsrO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgICAgICAvLyBgXCJgIGRlbGltaXRzIGEgSlNPTiBzdHJpbmc7IGFkdmFuY2UgdG8gdGhlIG5leHQgY2hhcmFjdGVyIGFuZFxuICAgICAgICAgICAgICAgIC8vIGJlZ2luIHBhcnNpbmcgdGhlIHN0cmluZy4gU3RyaW5nIHRva2VucyBhcmUgcHJlZml4ZWQgd2l0aCB0aGVcbiAgICAgICAgICAgICAgICAvLyBzZW50aW5lbCBgQGAgY2hhcmFjdGVyIHRvIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbSBwdW5jdHVhdG9ycyBhbmRcbiAgICAgICAgICAgICAgICAvLyBlbmQtb2Ytc3RyaW5nIHRva2Vucy5cbiAgICAgICAgICAgICAgICBmb3IgKHZhbHVlID0gXCJAXCIsIEluZGV4Kys7IEluZGV4IDwgbGVuZ3RoOykge1xuICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCk7XG4gICAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPCAzMikge1xuICAgICAgICAgICAgICAgICAgICAvLyBVbmVzY2FwZWQgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzICh0aG9zZSB3aXRoIGEgY29kZSB1bml0XG4gICAgICAgICAgICAgICAgICAgIC8vIGxlc3MgdGhhbiB0aGUgc3BhY2UgY2hhcmFjdGVyKSBhcmUgbm90IHBlcm1pdHRlZC5cbiAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhckNvZGUgPT0gOTIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQSByZXZlcnNlIHNvbGlkdXMgKGBcXGApIG1hcmtzIHRoZSBiZWdpbm5pbmcgb2YgYW4gZXNjYXBlZFxuICAgICAgICAgICAgICAgICAgICAvLyBjb250cm9sIGNoYXJhY3RlciAoaW5jbHVkaW5nIGBcImAsIGBcXGAsIGFuZCBgL2ApIG9yIFVuaWNvZGVcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNjYXBlIHNlcXVlbmNlLlxuICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KCsrSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoYXJDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSA5MjogY2FzZSAzNDogY2FzZSA0NzogY2FzZSA5ODogY2FzZSAxMTY6IGNhc2UgMTEwOiBjYXNlIDEwMjogY2FzZSAxMTQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXZpdmUgZXNjYXBlZCBjb250cm9sIGNoYXJhY3RlcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSBVbmVzY2FwZXNbY2hhckNvZGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTE3OlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYFxcdWAgbWFya3MgdGhlIGJlZ2lubmluZyBvZiBhIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWR2YW5jZSB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFuZCB2YWxpZGF0ZSB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvdXItZGlnaXQgY29kZSBwb2ludC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luID0gKytJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocG9zaXRpb24gPSBJbmRleCArIDQ7IEluZGV4IDwgcG9zaXRpb247IEluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgdmFsaWQgc2VxdWVuY2UgY29tcHJpc2VzIGZvdXIgaGV4ZGlnaXRzIChjYXNlLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnNlbnNpdGl2ZSkgdGhhdCBmb3JtIGEgc2luZ2xlIGhleGFkZWNpbWFsIHZhbHVlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1NyB8fCBjaGFyQ29kZSA+PSA5NyAmJiBjaGFyQ29kZSA8PSAxMDIgfHwgY2hhckNvZGUgPj0gNjUgJiYgY2hhckNvZGUgPD0gNzApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW52YWxpZCBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXZpdmUgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gZnJvbUNoYXJDb2RlKFwiMHhcIiArIHNvdXJjZS5zbGljZShiZWdpbiwgSW5kZXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSA9PSAzNCkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEFuIHVuZXNjYXBlZCBkb3VibGUtcXVvdGUgY2hhcmFjdGVyIG1hcmtzIHRoZSBlbmQgb2YgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgLy8gc3RyaW5nLlxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBiZWdpbiA9IEluZGV4O1xuICAgICAgICAgICAgICAgICAgICAvLyBPcHRpbWl6ZSBmb3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIGEgc3RyaW5nIGlzIHZhbGlkLlxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2hhckNvZGUgPj0gMzIgJiYgY2hhckNvZGUgIT0gOTIgJiYgY2hhckNvZGUgIT0gMzQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KCsrSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZCB0aGUgc3RyaW5nIGFzLWlzLlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSBzb3VyY2Uuc2xpY2UoYmVnaW4sIEluZGV4KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KSA9PSAzNCkge1xuICAgICAgICAgICAgICAgICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCBjaGFyYWN0ZXIgYW5kIHJldHVybiB0aGUgcmV2aXZlZCBzdHJpbmcuXG4gICAgICAgICAgICAgICAgICBJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBVbnRlcm1pbmF0ZWQgc3RyaW5nLlxuICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgLy8gUGFyc2UgbnVtYmVycyBhbmQgbGl0ZXJhbHMuXG4gICAgICAgICAgICAgICAgYmVnaW4gPSBJbmRleDtcbiAgICAgICAgICAgICAgICAvLyBBZHZhbmNlIHBhc3QgdGhlIG5lZ2F0aXZlIHNpZ24sIGlmIG9uZSBpcyBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlID09IDQ1KSB7XG4gICAgICAgICAgICAgICAgICBpc1NpZ25lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KCsrSW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBQYXJzZSBhbiBpbnRlZ2VyIG9yIGZsb2F0aW5nLXBvaW50IHZhbHVlLlxuICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1Nykge1xuICAgICAgICAgICAgICAgICAgLy8gTGVhZGluZyB6ZXJvZXMgYXJlIGludGVycHJldGVkIGFzIG9jdGFsIGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlID09IDQ4ICYmICgoY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCArIDEpKSwgY2hhckNvZGUgPj0gNDggJiYgY2hhckNvZGUgPD0gNTcpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElsbGVnYWwgb2N0YWwgbGl0ZXJhbC5cbiAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlzU2lnbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAvLyBQYXJzZSB0aGUgaW50ZWdlciBjb21wb25lbnQuXG4gICAgICAgICAgICAgICAgICBmb3IgKDsgSW5kZXggPCBsZW5ndGggJiYgKChjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KSksIGNoYXJDb2RlID49IDQ4ICYmIGNoYXJDb2RlIDw9IDU3KTsgSW5kZXgrKyk7XG4gICAgICAgICAgICAgICAgICAvLyBGbG9hdHMgY2Fubm90IGNvbnRhaW4gYSBsZWFkaW5nIGRlY2ltYWwgcG9pbnQ7IGhvd2V2ZXIsIHRoaXNcbiAgICAgICAgICAgICAgICAgIC8vIGNhc2UgaXMgYWxyZWFkeSBhY2NvdW50ZWQgZm9yIGJ5IHRoZSBwYXJzZXIuXG4gICAgICAgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpID09IDQ2KSB7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gKytJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgdGhlIGRlY2ltYWwgY29tcG9uZW50LlxuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgcG9zaXRpb24gPCBsZW5ndGg7IHBvc2l0aW9uKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPCA0OCB8fCBjaGFyQ29kZSA+IDU3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uID09IEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gSWxsZWdhbCB0cmFpbGluZyBkZWNpbWFsLlxuICAgICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgSW5kZXggPSBwb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8vIFBhcnNlIGV4cG9uZW50cy4gVGhlIGBlYCBkZW5vdGluZyB0aGUgZXhwb25lbnQgaXNcbiAgICAgICAgICAgICAgICAgIC8vIGNhc2UtaW5zZW5zaXRpdmUuXG4gICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KTtcbiAgICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSA9PSAxMDEgfHwgY2hhckNvZGUgPT0gNjkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdCgrK0luZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2tpcCBwYXN0IHRoZSBzaWduIGZvbGxvd2luZyB0aGUgZXhwb25lbnQsIGlmIG9uZSBpc1xuICAgICAgICAgICAgICAgICAgICAvLyBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSA9PSA0MyB8fCBjaGFyQ29kZSA9PSA0NSkge1xuICAgICAgICAgICAgICAgICAgICAgIEluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgdGhlIGV4cG9uZW50aWFsIGNvbXBvbmVudC5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChwb3NpdGlvbiA9IEluZGV4OyBwb3NpdGlvbiA8IGxlbmd0aDsgcG9zaXRpb24rKykge1xuICAgICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQocG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSA8IDQ4IHx8IGNoYXJDb2RlID4gNTcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPT0gSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBJbGxlZ2FsIGVtcHR5IGV4cG9uZW50LlxuICAgICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgSW5kZXggPSBwb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8vIENvZXJjZSB0aGUgcGFyc2VkIHZhbHVlIHRvIGEgSmF2YVNjcmlwdCBudW1iZXIuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gK3NvdXJjZS5zbGljZShiZWdpbiwgSW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBBIG5lZ2F0aXZlIHNpZ24gbWF5IG9ubHkgcHJlY2VkZSBudW1iZXJzLlxuICAgICAgICAgICAgICAgIGlmIChpc1NpZ25lZCkge1xuICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gYHRydWVgLCBgZmFsc2VgLCBhbmQgYG51bGxgIGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gc291cmNlLnNsaWNlKEluZGV4LCBJbmRleCArIDQpO1xuICAgICAgICAgICAgICAgIGlmICh0ZW1wID09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICAgICAgICBJbmRleCArPSA0O1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZW1wID09IFwiZmFsc1wiICYmIHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4ICsgNCApID09IDEwMSkge1xuICAgICAgICAgICAgICAgICAgSW5kZXggKz0gNTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRlbXAgPT0gXCJudWxsXCIpIHtcbiAgICAgICAgICAgICAgICAgIEluZGV4ICs9IDQ7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVW5yZWNvZ25pemVkIHRva2VuLlxuICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFJldHVybiB0aGUgc2VudGluZWwgYCRgIGNoYXJhY3RlciBpZiB0aGUgcGFyc2VyIGhhcyByZWFjaGVkIHRoZSBlbmRcbiAgICAgICAgICAvLyBvZiB0aGUgc291cmNlIHN0cmluZy5cbiAgICAgICAgICByZXR1cm4gXCIkXCI7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IFBhcnNlcyBhIEpTT04gYHZhbHVlYCB0b2tlbi5cbiAgICAgICAgdmFyIGdldCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHZhciByZXN1bHRzLCBoYXNNZW1iZXJzO1xuICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIiRcIikge1xuICAgICAgICAgICAgLy8gVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQuXG4gICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGlmICgoY2hhckluZGV4QnVnZ3kgPyB2YWx1ZS5jaGFyQXQoMCkgOiB2YWx1ZVswXSkgPT0gXCJAXCIpIHtcbiAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzZW50aW5lbCBgQGAgY2hhcmFjdGVyLlxuICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuc2xpY2UoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBQYXJzZSBvYmplY3QgYW5kIGFycmF5IGxpdGVyYWxzLlxuICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiW1wiKSB7XG4gICAgICAgICAgICAgIC8vIFBhcnNlcyBhIEpTT04gYXJyYXksIHJldHVybmluZyBhIG5ldyBKYXZhU2NyaXB0IGFycmF5LlxuICAgICAgICAgICAgICByZXN1bHRzID0gW107XG4gICAgICAgICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGxleCgpO1xuICAgICAgICAgICAgICAgIC8vIEEgY2xvc2luZyBzcXVhcmUgYnJhY2tldCBtYXJrcyB0aGUgZW5kIG9mIHRoZSBhcnJheSBsaXRlcmFsLlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIl1cIikge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBhcnJheSBsaXRlcmFsIGNvbnRhaW5zIGVsZW1lbnRzLCB0aGUgY3VycmVudCB0b2tlblxuICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSBhIGNvbW1hIHNlcGFyYXRpbmcgdGhlIHByZXZpb3VzIGVsZW1lbnQgZnJvbSB0aGVcbiAgICAgICAgICAgICAgICAvLyBuZXh0LlxuICAgICAgICAgICAgICAgIGlmIChoYXNNZW1iZXJzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIsXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiXVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gVW5leHBlY3RlZCB0cmFpbGluZyBgLGAgaW4gYXJyYXkgbGl0ZXJhbC5cbiAgICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBBIGAsYCBtdXN0IHNlcGFyYXRlIGVhY2ggYXJyYXkgZWxlbWVudC5cbiAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgaGFzTWVtYmVycyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEVsaXNpb25zIGFuZCBsZWFkaW5nIGNvbW1hcyBhcmUgbm90IHBlcm1pdHRlZC5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIsXCIpIHtcbiAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChnZXQodmFsdWUpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gXCJ7XCIpIHtcbiAgICAgICAgICAgICAgLy8gUGFyc2VzIGEgSlNPTiBvYmplY3QsIHJldHVybmluZyBhIG5ldyBKYXZhU2NyaXB0IG9iamVjdC5cbiAgICAgICAgICAgICAgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICBmb3IgKDs7KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBsZXgoKTtcbiAgICAgICAgICAgICAgICAvLyBBIGNsb3NpbmcgY3VybHkgYnJhY2UgbWFya3MgdGhlIGVuZCBvZiB0aGUgb2JqZWN0IGxpdGVyYWwuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwifVwiKSB7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG9iamVjdCBsaXRlcmFsIGNvbnRhaW5zIG1lbWJlcnMsIHRoZSBjdXJyZW50IHRva2VuXG4gICAgICAgICAgICAgICAgLy8gc2hvdWxkIGJlIGEgY29tbWEgc2VwYXJhdG9yLlxuICAgICAgICAgICAgICAgIGlmIChoYXNNZW1iZXJzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIsXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwifVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gVW5leHBlY3RlZCB0cmFpbGluZyBgLGAgaW4gb2JqZWN0IGxpdGVyYWwuXG4gICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQSBgLGAgbXVzdCBzZXBhcmF0ZSBlYWNoIG9iamVjdCBtZW1iZXIuXG4gICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGhhc01lbWJlcnMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBMZWFkaW5nIGNvbW1hcyBhcmUgbm90IHBlcm1pdHRlZCwgb2JqZWN0IHByb3BlcnR5IG5hbWVzIG11c3QgYmVcbiAgICAgICAgICAgICAgICAvLyBkb3VibGUtcXVvdGVkIHN0cmluZ3MsIGFuZCBhIGA6YCBtdXN0IHNlcGFyYXRlIGVhY2ggcHJvcGVydHlcbiAgICAgICAgICAgICAgICAvLyBuYW1lIGFuZCB2YWx1ZS5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIsXCIgfHwgdHlwZW9mIHZhbHVlICE9IFwic3RyaW5nXCIgfHwgKGNoYXJJbmRleEJ1Z2d5ID8gdmFsdWUuY2hhckF0KDApIDogdmFsdWVbMF0pICE9IFwiQFwiIHx8IGxleCgpICE9IFwiOlwiKSB7XG4gICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW3ZhbHVlLnNsaWNlKDEpXSA9IGdldChsZXgoKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBVbmV4cGVjdGVkIHRva2VuIGVuY291bnRlcmVkLlxuICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEludGVybmFsOiBVcGRhdGVzIGEgdHJhdmVyc2VkIG9iamVjdCBtZW1iZXIuXG4gICAgICAgIHZhciB1cGRhdGUgPSBmdW5jdGlvbiAoc291cmNlLCBwcm9wZXJ0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICB2YXIgZWxlbWVudCA9IHdhbGsoc291cmNlLCBwcm9wZXJ0eSwgY2FsbGJhY2spO1xuICAgICAgICAgIGlmIChlbGVtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBzb3VyY2VbcHJvcGVydHldO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzb3VyY2VbcHJvcGVydHldID0gZWxlbWVudDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IFJlY3Vyc2l2ZWx5IHRyYXZlcnNlcyBhIHBhcnNlZCBKU09OIG9iamVjdCwgaW52b2tpbmcgdGhlXG4gICAgICAgIC8vIGBjYWxsYmFja2AgZnVuY3Rpb24gZm9yIGVhY2ggdmFsdWUuIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlXG4gICAgICAgIC8vIGBXYWxrKGhvbGRlciwgbmFtZSlgIG9wZXJhdGlvbiBkZWZpbmVkIGluIEVTIDUuMSBzZWN0aW9uIDE1LjEyLjIuXG4gICAgICAgIHZhciB3YWxrID0gZnVuY3Rpb24gKHNvdXJjZSwgcHJvcGVydHksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gc291cmNlW3Byb3BlcnR5XSwgbGVuZ3RoO1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIiAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgLy8gYGZvck93bmAgY2FuJ3QgYmUgdXNlZCB0byB0cmF2ZXJzZSBhbiBhcnJheSBpbiBPcGVyYSA8PSA4LjU0XG4gICAgICAgICAgICAvLyBiZWNhdXNlIGl0cyBgT2JqZWN0I2hhc093blByb3BlcnR5YCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIGBmYWxzZWBcbiAgICAgICAgICAgIC8vIGZvciBhcnJheSBpbmRpY2VzIChlLmcuLCBgIVsxLCAyLCAzXS5oYXNPd25Qcm9wZXJ0eShcIjBcIilgKS5cbiAgICAgICAgICAgIGlmIChnZXRDbGFzcy5jYWxsKHZhbHVlKSA9PSBhcnJheUNsYXNzKSB7XG4gICAgICAgICAgICAgIGZvciAobGVuZ3RoID0gdmFsdWUubGVuZ3RoOyBsZW5ndGgtLTspIHtcbiAgICAgICAgICAgICAgICB1cGRhdGUoZ2V0Q2xhc3MsIGZvck93biwgdmFsdWUsIGxlbmd0aCwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmb3JPd24odmFsdWUsIGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZSh2YWx1ZSwgcHJvcGVydHksIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKHNvdXJjZSwgcHJvcGVydHksIHZhbHVlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQdWJsaWM6IGBKU09OLnBhcnNlYC4gU2VlIEVTIDUuMSBzZWN0aW9uIDE1LjEyLjIuXG4gICAgICAgIGV4cG9ydHMucGFyc2UgPSBmdW5jdGlvbiAoc291cmNlLCBjYWxsYmFjaykge1xuICAgICAgICAgIHZhciByZXN1bHQsIHZhbHVlO1xuICAgICAgICAgIEluZGV4ID0gMDtcbiAgICAgICAgICBTb3VyY2UgPSBcIlwiICsgc291cmNlO1xuICAgICAgICAgIHJlc3VsdCA9IGdldChsZXgoKSk7XG4gICAgICAgICAgLy8gSWYgYSBKU09OIHN0cmluZyBjb250YWlucyBtdWx0aXBsZSB0b2tlbnMsIGl0IGlzIGludmFsaWQuXG4gICAgICAgICAgaWYgKGxleCgpICE9IFwiJFwiKSB7XG4gICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBSZXNldCB0aGUgcGFyc2VyIHN0YXRlLlxuICAgICAgICAgIEluZGV4ID0gU291cmNlID0gbnVsbDtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sgJiYgZ2V0Q2xhc3MuY2FsbChjYWxsYmFjaykgPT0gZnVuY3Rpb25DbGFzcyA/IHdhbGsoKHZhbHVlID0ge30sIHZhbHVlW1wiXCJdID0gcmVzdWx0LCB2YWx1ZSksIFwiXCIsIGNhbGxiYWNrKSA6IHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBleHBvcnRzLnJ1bkluQ29udGV4dCA9IHJ1bkluQ29udGV4dDtcbiAgICByZXR1cm4gZXhwb3J0cztcbiAgfVxuXG4gIGlmIChmcmVlRXhwb3J0cyAmJiAhaXNMb2FkZXIpIHtcbiAgICAvLyBFeHBvcnQgZm9yIENvbW1vbkpTIGVudmlyb25tZW50cy5cbiAgICBydW5JbkNvbnRleHQocm9vdCwgZnJlZUV4cG9ydHMpO1xuICB9IGVsc2Uge1xuICAgIC8vIEV4cG9ydCBmb3Igd2ViIGJyb3dzZXJzIGFuZCBKYXZhU2NyaXB0IGVuZ2luZXMuXG4gICAgdmFyIG5hdGl2ZUpTT04gPSByb290LkpTT04sXG4gICAgICAgIHByZXZpb3VzSlNPTiA9IHJvb3QuSlNPTjMsXG4gICAgICAgIGlzUmVzdG9yZWQgPSBmYWxzZTtcblxuICAgIHZhciBKU09OMyA9IHJ1bkluQ29udGV4dChyb290LCAocm9vdC5KU09OMyA9IHtcbiAgICAgIC8vIFB1YmxpYzogUmVzdG9yZXMgdGhlIG9yaWdpbmFsIHZhbHVlIG9mIHRoZSBnbG9iYWwgYEpTT05gIG9iamVjdCBhbmRcbiAgICAgIC8vIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGBKU09OM2Agb2JqZWN0LlxuICAgICAgXCJub0NvbmZsaWN0XCI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFpc1Jlc3RvcmVkKSB7XG4gICAgICAgICAgaXNSZXN0b3JlZCA9IHRydWU7XG4gICAgICAgICAgcm9vdC5KU09OID0gbmF0aXZlSlNPTjtcbiAgICAgICAgICByb290LkpTT04zID0gcHJldmlvdXNKU09OO1xuICAgICAgICAgIG5hdGl2ZUpTT04gPSBwcmV2aW91c0pTT04gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBKU09OMztcbiAgICAgIH1cbiAgICB9KSk7XG5cbiAgICByb290LkpTT04gPSB7XG4gICAgICBcInBhcnNlXCI6IEpTT04zLnBhcnNlLFxuICAgICAgXCJzdHJpbmdpZnlcIjogSlNPTjMuc3RyaW5naWZ5XG4gICAgfTtcbiAgfVxuXG4gIC8vIEV4cG9ydCBmb3IgYXN5bmNocm9ub3VzIG1vZHVsZSBsb2FkZXJzLlxuICBpZiAoaXNMb2FkZXIpIHtcbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIEpTT04zO1xuICAgIH0pO1xuICB9XG59KS5jYWxsKHRoaXMpO1xuXG59KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcblxufSx7fV0sNTk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuICAsIHVuZGVmO1xuXG4vKipcbiAqIERlY29kZSBhIFVSSSBlbmNvZGVkIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFVSSSBlbmNvZGVkIHN0cmluZy5cbiAqIEByZXR1cm5zIHtTdHJpbmd8TnVsbH0gVGhlIGRlY29kZWQgc3RyaW5nLlxuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRlY29kZShpbnB1dCkge1xuICB0cnkge1xuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoaW5wdXQucmVwbGFjZSgvXFwrL2csICcgJykpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBBdHRlbXB0cyB0byBlbmNvZGUgYSBnaXZlbiBpbnB1dC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIHN0cmluZyB0aGF0IG5lZWRzIHRvIGJlIGVuY29kZWQuXG4gKiBAcmV0dXJucyB7U3RyaW5nfE51bGx9IFRoZSBlbmNvZGVkIHN0cmluZy5cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBlbmNvZGUoaW5wdXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGlucHV0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogU2ltcGxlIHF1ZXJ5IHN0cmluZyBwYXJzZXIuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHF1ZXJ5IFRoZSBxdWVyeSBzdHJpbmcgdGhhdCBuZWVkcyB0byBiZSBwYXJzZWQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gcXVlcnlzdHJpbmcocXVlcnkpIHtcbiAgdmFyIHBhcnNlciA9IC8oW149PyZdKyk9PyhbXiZdKikvZ1xuICAgICwgcmVzdWx0ID0ge31cbiAgICAsIHBhcnQ7XG5cbiAgd2hpbGUgKHBhcnQgPSBwYXJzZXIuZXhlYyhxdWVyeSkpIHtcbiAgICB2YXIga2V5ID0gZGVjb2RlKHBhcnRbMV0pXG4gICAgICAsIHZhbHVlID0gZGVjb2RlKHBhcnRbMl0pO1xuXG4gICAgLy9cbiAgICAvLyBQcmV2ZW50IG92ZXJyaWRpbmcgb2YgZXhpc3RpbmcgcHJvcGVydGllcy4gVGhpcyBlbnN1cmVzIHRoYXQgYnVpbGQtaW5cbiAgICAvLyBtZXRob2RzIGxpa2UgYHRvU3RyaW5nYCBvciBfX3Byb3RvX18gYXJlIG5vdCBvdmVycmlkZW4gYnkgbWFsaWNpb3VzXG4gICAgLy8gcXVlcnlzdHJpbmdzLlxuICAgIC8vXG4gICAgLy8gSW4gdGhlIGNhc2UgaWYgZmFpbGVkIGRlY29kaW5nLCB3ZSB3YW50IHRvIG9taXQgdGhlIGtleS92YWx1ZSBwYWlyc1xuICAgIC8vIGZyb20gdGhlIHJlc3VsdC5cbiAgICAvL1xuICAgIGlmIChrZXkgPT09IG51bGwgfHwgdmFsdWUgPT09IG51bGwgfHwga2V5IGluIHJlc3VsdCkgY29udGludWU7XG4gICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogVHJhbnNmb3JtIGEgcXVlcnkgc3RyaW5nIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIE9iamVjdCB0aGF0IHNob3VsZCBiZSB0cmFuc2Zvcm1lZC5cbiAqIEBwYXJhbSB7U3RyaW5nfSBwcmVmaXggT3B0aW9uYWwgcHJlZml4LlxuICogQHJldHVybnMge1N0cmluZ31cbiAqIEBhcGkgcHVibGljXG4gKi9cbmZ1bmN0aW9uIHF1ZXJ5c3RyaW5naWZ5KG9iaiwgcHJlZml4KSB7XG4gIHByZWZpeCA9IHByZWZpeCB8fCAnJztcblxuICB2YXIgcGFpcnMgPSBbXVxuICAgICwgdmFsdWVcbiAgICAsIGtleTtcblxuICAvL1xuICAvLyBPcHRpb25hbGx5IHByZWZpeCB3aXRoIGEgJz8nIGlmIG5lZWRlZFxuICAvL1xuICBpZiAoJ3N0cmluZycgIT09IHR5cGVvZiBwcmVmaXgpIHByZWZpeCA9ICc/JztcblxuICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICBpZiAoaGFzLmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICB2YWx1ZSA9IG9ialtrZXldO1xuXG4gICAgICAvL1xuICAgICAgLy8gRWRnZSBjYXNlcyB3aGVyZSB3ZSBhY3R1YWxseSB3YW50IHRvIGVuY29kZSB0aGUgdmFsdWUgdG8gYW4gZW1wdHlcbiAgICAgIC8vIHN0cmluZyBpbnN0ZWFkIG9mIHRoZSBzdHJpbmdpZmllZCB2YWx1ZS5cbiAgICAgIC8vXG4gICAgICBpZiAoIXZhbHVlICYmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWYgfHwgaXNOYU4odmFsdWUpKSkge1xuICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgfVxuXG4gICAgICBrZXkgPSBlbmNvZGVVUklDb21wb25lbnQoa2V5KTtcbiAgICAgIHZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcblxuICAgICAgLy9cbiAgICAgIC8vIElmIHdlIGZhaWxlZCB0byBlbmNvZGUgdGhlIHN0cmluZ3MsIHdlIHNob3VsZCBiYWlsIG91dCBhcyB3ZSBkb24ndFxuICAgICAgLy8gd2FudCB0byBhZGQgaW52YWxpZCBzdHJpbmdzIHRvIHRoZSBxdWVyeS5cbiAgICAgIC8vXG4gICAgICBpZiAoa2V5ID09PSBudWxsIHx8IHZhbHVlID09PSBudWxsKSBjb250aW51ZTtcbiAgICAgIHBhaXJzLnB1c2goa2V5ICsnPScrIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFpcnMubGVuZ3RoID8gcHJlZml4ICsgcGFpcnMuam9pbignJicpIDogJyc7XG59XG5cbi8vXG4vLyBFeHBvc2UgdGhlIG1vZHVsZS5cbi8vXG5leHBvcnRzLnN0cmluZ2lmeSA9IHF1ZXJ5c3RyaW5naWZ5O1xuZXhwb3J0cy5wYXJzZSA9IHF1ZXJ5c3RyaW5nO1xuXG59LHt9XSw2MDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ2hlY2sgaWYgd2UncmUgcmVxdWlyZWQgdG8gYWRkIGEgcG9ydCBudW1iZXIuXG4gKlxuICogQHNlZSBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RlZmF1bHQtcG9ydFxuICogQHBhcmFtIHtOdW1iZXJ8U3RyaW5nfSBwb3J0IFBvcnQgbnVtYmVyIHdlIG5lZWQgdG8gY2hlY2tcbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm90b2NvbCBQcm90b2NvbCB3ZSBuZWVkIHRvIGNoZWNrIGFnYWluc3QuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gSXMgaXQgYSBkZWZhdWx0IHBvcnQgZm9yIHRoZSBnaXZlbiBwcm90b2NvbFxuICogQGFwaSBwcml2YXRlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVxdWlyZWQocG9ydCwgcHJvdG9jb2wpIHtcbiAgcHJvdG9jb2wgPSBwcm90b2NvbC5zcGxpdCgnOicpWzBdO1xuICBwb3J0ID0gK3BvcnQ7XG5cbiAgaWYgKCFwb3J0KSByZXR1cm4gZmFsc2U7XG5cbiAgc3dpdGNoIChwcm90b2NvbCkge1xuICAgIGNhc2UgJ2h0dHAnOlxuICAgIGNhc2UgJ3dzJzpcbiAgICByZXR1cm4gcG9ydCAhPT0gODA7XG5cbiAgICBjYXNlICdodHRwcyc6XG4gICAgY2FzZSAnd3NzJzpcbiAgICByZXR1cm4gcG9ydCAhPT0gNDQzO1xuXG4gICAgY2FzZSAnZnRwJzpcbiAgICByZXR1cm4gcG9ydCAhPT0gMjE7XG5cbiAgICBjYXNlICdnb3BoZXInOlxuICAgIHJldHVybiBwb3J0ICE9PSA3MDtcblxuICAgIGNhc2UgJ2ZpbGUnOlxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBwb3J0ICE9PSAwO1xufTtcblxufSx7fV0sNjE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChnbG9iYWwpe1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVxdWlyZWQgPSByZXF1aXJlKCdyZXF1aXJlcy1wb3J0JylcbiAgLCBxcyA9IHJlcXVpcmUoJ3F1ZXJ5c3RyaW5naWZ5JylcbiAgLCBzbGFzaGVzID0gL15bQS1aYS16XVtBLVphLXowLTkrLS5dKjpcXC9cXC8vXG4gICwgcHJvdG9jb2xyZSA9IC9eKFthLXpdW2EtejAtOS4rLV0qOik/KFxcL1xcLyk/KFtcXFNcXHNdKikvaVxuICAsIHdoaXRlc3BhY2UgPSAnW1xcXFx4MDlcXFxceDBBXFxcXHgwQlxcXFx4MENcXFxceDBEXFxcXHgyMFxcXFx4QTBcXFxcdTE2ODBcXFxcdTE4MEVcXFxcdTIwMDBcXFxcdTIwMDFcXFxcdTIwMDJcXFxcdTIwMDNcXFxcdTIwMDRcXFxcdTIwMDVcXFxcdTIwMDZcXFxcdTIwMDdcXFxcdTIwMDhcXFxcdTIwMDlcXFxcdTIwMEFcXFxcdTIwMkZcXFxcdTIwNUZcXFxcdTMwMDBcXFxcdTIwMjhcXFxcdTIwMjlcXFxcdUZFRkZdJ1xuICAsIGxlZnQgPSBuZXcgUmVnRXhwKCdeJysgd2hpdGVzcGFjZSArJysnKTtcblxuLyoqXG4gKiBUcmltIGEgZ2l2ZW4gc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgU3RyaW5nIHRvIHRyaW0uXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIHRyaW1MZWZ0KHN0cikge1xuICByZXR1cm4gKHN0ciA/IHN0ciA6ICcnKS50b1N0cmluZygpLnJlcGxhY2UobGVmdCwgJycpO1xufVxuXG4vKipcbiAqIFRoZXNlIGFyZSB0aGUgcGFyc2UgcnVsZXMgZm9yIHRoZSBVUkwgcGFyc2VyLCBpdCBpbmZvcm1zIHRoZSBwYXJzZXJcbiAqIGFib3V0OlxuICpcbiAqIDAuIFRoZSBjaGFyIGl0IE5lZWRzIHRvIHBhcnNlLCBpZiBpdCdzIGEgc3RyaW5nIGl0IHNob3VsZCBiZSBkb25lIHVzaW5nXG4gKiAgICBpbmRleE9mLCBSZWdFeHAgdXNpbmcgZXhlYyBhbmQgTmFOIG1lYW5zIHNldCBhcyBjdXJyZW50IHZhbHVlLlxuICogMS4gVGhlIHByb3BlcnR5IHdlIHNob3VsZCBzZXQgd2hlbiBwYXJzaW5nIHRoaXMgdmFsdWUuXG4gKiAyLiBJbmRpY2F0aW9uIGlmIGl0J3MgYmFja3dhcmRzIG9yIGZvcndhcmQgcGFyc2luZywgd2hlbiBzZXQgYXMgbnVtYmVyIGl0J3NcbiAqICAgIHRoZSB2YWx1ZSBvZiBleHRyYSBjaGFycyB0aGF0IHNob3VsZCBiZSBzcGxpdCBvZmYuXG4gKiAzLiBJbmhlcml0IGZyb20gbG9jYXRpb24gaWYgbm9uIGV4aXN0aW5nIGluIHRoZSBwYXJzZXIuXG4gKiA0LiBgdG9Mb3dlckNhc2VgIHRoZSByZXN1bHRpbmcgdmFsdWUuXG4gKi9cbnZhciBydWxlcyA9IFtcbiAgWycjJywgJ2hhc2gnXSwgICAgICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGZyb20gdGhlIGJhY2suXG4gIFsnPycsICdxdWVyeSddLCAgICAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCBmcm9tIHRoZSBiYWNrLlxuICBmdW5jdGlvbiBzYW5pdGl6ZShhZGRyZXNzKSB7ICAgICAgICAgIC8vIFNhbml0aXplIHdoYXQgaXMgbGVmdCBvZiB0aGUgYWRkcmVzc1xuICAgIHJldHVybiBhZGRyZXNzLnJlcGxhY2UoJ1xcXFwnLCAnLycpO1xuICB9LFxuICBbJy8nLCAncGF0aG5hbWUnXSwgICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgZnJvbSB0aGUgYmFjay5cbiAgWydAJywgJ2F1dGgnLCAxXSwgICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IGZyb20gdGhlIGZyb250LlxuICBbTmFOLCAnaG9zdCcsIHVuZGVmaW5lZCwgMSwgMV0sICAgICAgIC8vIFNldCBsZWZ0IG92ZXIgdmFsdWUuXG4gIFsvOihcXGQrKSQvLCAncG9ydCcsIHVuZGVmaW5lZCwgMV0sICAgIC8vIFJlZ0V4cCB0aGUgYmFjay5cbiAgW05hTiwgJ2hvc3RuYW1lJywgdW5kZWZpbmVkLCAxLCAxXSAgICAvLyBTZXQgbGVmdCBvdmVyLlxuXTtcblxuLyoqXG4gKiBUaGVzZSBwcm9wZXJ0aWVzIHNob3VsZCBub3QgYmUgY29waWVkIG9yIGluaGVyaXRlZCBmcm9tLiBUaGlzIGlzIG9ubHkgbmVlZGVkXG4gKiBmb3IgYWxsIG5vbiBibG9iIFVSTCdzIGFzIGEgYmxvYiBVUkwgZG9lcyBub3QgaW5jbHVkZSBhIGhhc2gsIG9ubHkgdGhlXG4gKiBvcmlnaW4uXG4gKlxuICogQHR5cGUge09iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cbnZhciBpZ25vcmUgPSB7IGhhc2g6IDEsIHF1ZXJ5OiAxIH07XG5cbi8qKlxuICogVGhlIGxvY2F0aW9uIG9iamVjdCBkaWZmZXJzIHdoZW4geW91ciBjb2RlIGlzIGxvYWRlZCB0aHJvdWdoIGEgbm9ybWFsIHBhZ2UsXG4gKiBXb3JrZXIgb3IgdGhyb3VnaCBhIHdvcmtlciB1c2luZyBhIGJsb2IuIEFuZCB3aXRoIHRoZSBibG9iYmxlIGJlZ2lucyB0aGVcbiAqIHRyb3VibGUgYXMgdGhlIGxvY2F0aW9uIG9iamVjdCB3aWxsIGNvbnRhaW4gdGhlIFVSTCBvZiB0aGUgYmxvYiwgbm90IHRoZVxuICogbG9jYXRpb24gb2YgdGhlIHBhZ2Ugd2hlcmUgb3VyIGNvZGUgaXMgbG9hZGVkIGluLiBUaGUgYWN0dWFsIG9yaWdpbiBpc1xuICogZW5jb2RlZCBpbiB0aGUgYHBhdGhuYW1lYCBzbyB3ZSBjYW4gdGhhbmtmdWxseSBnZW5lcmF0ZSBhIGdvb2QgXCJkZWZhdWx0XCJcbiAqIGxvY2F0aW9uIGZyb20gaXQgc28gd2UgY2FuIGdlbmVyYXRlIHByb3BlciByZWxhdGl2ZSBVUkwncyBhZ2Fpbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxTdHJpbmd9IGxvYyBPcHRpb25hbCBkZWZhdWx0IGxvY2F0aW9uIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IGxvbGNhdGlvbiBvYmplY3QuXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIGxvbGNhdGlvbihsb2MpIHtcbiAgdmFyIGdsb2JhbFZhcjtcblxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIGdsb2JhbFZhciA9IHdpbmRvdztcbiAgZWxzZSBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIGdsb2JhbFZhciA9IGdsb2JhbDtcbiAgZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSBnbG9iYWxWYXIgPSBzZWxmO1xuICBlbHNlIGdsb2JhbFZhciA9IHt9O1xuXG4gIHZhciBsb2NhdGlvbiA9IGdsb2JhbFZhci5sb2NhdGlvbiB8fCB7fTtcbiAgbG9jID0gbG9jIHx8IGxvY2F0aW9uO1xuXG4gIHZhciBmaW5hbGRlc3RpbmF0aW9uID0ge31cbiAgICAsIHR5cGUgPSB0eXBlb2YgbG9jXG4gICAgLCBrZXk7XG5cbiAgaWYgKCdibG9iOicgPT09IGxvYy5wcm90b2NvbCkge1xuICAgIGZpbmFsZGVzdGluYXRpb24gPSBuZXcgVXJsKHVuZXNjYXBlKGxvYy5wYXRobmFtZSksIHt9KTtcbiAgfSBlbHNlIGlmICgnc3RyaW5nJyA9PT0gdHlwZSkge1xuICAgIGZpbmFsZGVzdGluYXRpb24gPSBuZXcgVXJsKGxvYywge30pO1xuICAgIGZvciAoa2V5IGluIGlnbm9yZSkgZGVsZXRlIGZpbmFsZGVzdGluYXRpb25ba2V5XTtcbiAgfSBlbHNlIGlmICgnb2JqZWN0JyA9PT0gdHlwZSkge1xuICAgIGZvciAoa2V5IGluIGxvYykge1xuICAgICAgaWYgKGtleSBpbiBpZ25vcmUpIGNvbnRpbnVlO1xuICAgICAgZmluYWxkZXN0aW5hdGlvbltrZXldID0gbG9jW2tleV07XG4gICAgfVxuXG4gICAgaWYgKGZpbmFsZGVzdGluYXRpb24uc2xhc2hlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmaW5hbGRlc3RpbmF0aW9uLnNsYXNoZXMgPSBzbGFzaGVzLnRlc3QobG9jLmhyZWYpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmaW5hbGRlc3RpbmF0aW9uO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIFByb3RvY29sRXh0cmFjdFxuICogQHR5cGUgT2JqZWN0XG4gKiBAcHJvcGVydHkge1N0cmluZ30gcHJvdG9jb2wgUHJvdG9jb2wgbWF0Y2hlZCBpbiB0aGUgVVJMLCBpbiBsb3dlcmNhc2UuXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IHNsYXNoZXMgYHRydWVgIGlmIHByb3RvY29sIGlzIGZvbGxvd2VkIGJ5IFwiLy9cIiwgZWxzZSBgZmFsc2VgLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IHJlc3QgUmVzdCBvZiB0aGUgVVJMIHRoYXQgaXMgbm90IHBhcnQgb2YgdGhlIHByb3RvY29sLlxuICovXG5cbi8qKlxuICogRXh0cmFjdCBwcm90b2NvbCBpbmZvcm1hdGlvbiBmcm9tIGEgVVJMIHdpdGgvd2l0aG91dCBkb3VibGUgc2xhc2ggKFwiLy9cIikuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGFkZHJlc3MgVVJMIHdlIHdhbnQgdG8gZXh0cmFjdCBmcm9tLlxuICogQHJldHVybiB7UHJvdG9jb2xFeHRyYWN0fSBFeHRyYWN0ZWQgaW5mb3JtYXRpb24uXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBleHRyYWN0UHJvdG9jb2woYWRkcmVzcykge1xuICBhZGRyZXNzID0gdHJpbUxlZnQoYWRkcmVzcyk7XG4gIHZhciBtYXRjaCA9IHByb3RvY29scmUuZXhlYyhhZGRyZXNzKTtcblxuICByZXR1cm4ge1xuICAgIHByb3RvY29sOiBtYXRjaFsxXSA/IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCkgOiAnJyxcbiAgICBzbGFzaGVzOiAhIW1hdGNoWzJdLFxuICAgIHJlc3Q6IG1hdGNoWzNdXG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIHJlbGF0aXZlIFVSTCBwYXRobmFtZSBhZ2FpbnN0IGEgYmFzZSBVUkwgcGF0aG5hbWUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHJlbGF0aXZlIFBhdGhuYW1lIG9mIHRoZSByZWxhdGl2ZSBVUkwuXG4gKiBAcGFyYW0ge1N0cmluZ30gYmFzZSBQYXRobmFtZSBvZiB0aGUgYmFzZSBVUkwuXG4gKiBAcmV0dXJuIHtTdHJpbmd9IFJlc29sdmVkIHBhdGhuYW1lLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZShyZWxhdGl2ZSwgYmFzZSkge1xuICBpZiAocmVsYXRpdmUgPT09ICcnKSByZXR1cm4gYmFzZTtcblxuICB2YXIgcGF0aCA9IChiYXNlIHx8ICcvJykuc3BsaXQoJy8nKS5zbGljZSgwLCAtMSkuY29uY2F0KHJlbGF0aXZlLnNwbGl0KCcvJykpXG4gICAgLCBpID0gcGF0aC5sZW5ndGhcbiAgICAsIGxhc3QgPSBwYXRoW2kgLSAxXVxuICAgICwgdW5zaGlmdCA9IGZhbHNlXG4gICAgLCB1cCA9IDA7XG5cbiAgd2hpbGUgKGktLSkge1xuICAgIGlmIChwYXRoW2ldID09PSAnLicpIHtcbiAgICAgIHBhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAocGF0aFtpXSA9PT0gJy4uJykge1xuICAgICAgcGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIGlmIChpID09PSAwKSB1bnNoaWZ0ID0gdHJ1ZTtcbiAgICAgIHBhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICBpZiAodW5zaGlmdCkgcGF0aC51bnNoaWZ0KCcnKTtcbiAgaWYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSBwYXRoLnB1c2goJycpO1xuXG4gIHJldHVybiBwYXRoLmpvaW4oJy8nKTtcbn1cblxuLyoqXG4gKiBUaGUgYWN0dWFsIFVSTCBpbnN0YW5jZS4gSW5zdGVhZCBvZiByZXR1cm5pbmcgYW4gb2JqZWN0IHdlJ3ZlIG9wdGVkLWluIHRvXG4gKiBjcmVhdGUgYW4gYWN0dWFsIGNvbnN0cnVjdG9yIGFzIGl0J3MgbXVjaCBtb3JlIG1lbW9yeSBlZmZpY2llbnQgYW5kXG4gKiBmYXN0ZXIgYW5kIGl0IHBsZWFzZXMgbXkgT0NELlxuICpcbiAqIEl0IGlzIHdvcnRoIG5vdGluZyB0aGF0IHdlIHNob3VsZCBub3QgdXNlIGBVUkxgIGFzIGNsYXNzIG5hbWUgdG8gcHJldmVudFxuICogY2xhc2hlcyB3aXRoIHRoZSBnbG9iYWwgVVJMIGluc3RhbmNlIHRoYXQgZ290IGludHJvZHVjZWQgaW4gYnJvd3NlcnMuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge1N0cmluZ30gYWRkcmVzcyBVUkwgd2Ugd2FudCB0byBwYXJzZS5cbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gW2xvY2F0aW9uXSBMb2NhdGlvbiBkZWZhdWx0cyBmb3IgcmVsYXRpdmUgcGF0aHMuXG4gKiBAcGFyYW0ge0Jvb2xlYW58RnVuY3Rpb259IFtwYXJzZXJdIFBhcnNlciBmb3IgdGhlIHF1ZXJ5IHN0cmluZy5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIFVybChhZGRyZXNzLCBsb2NhdGlvbiwgcGFyc2VyKSB7XG4gIGFkZHJlc3MgPSB0cmltTGVmdChhZGRyZXNzKTtcblxuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVXJsKSkge1xuICAgIHJldHVybiBuZXcgVXJsKGFkZHJlc3MsIGxvY2F0aW9uLCBwYXJzZXIpO1xuICB9XG5cbiAgdmFyIHJlbGF0aXZlLCBleHRyYWN0ZWQsIHBhcnNlLCBpbnN0cnVjdGlvbiwgaW5kZXgsIGtleVxuICAgICwgaW5zdHJ1Y3Rpb25zID0gcnVsZXMuc2xpY2UoKVxuICAgICwgdHlwZSA9IHR5cGVvZiBsb2NhdGlvblxuICAgICwgdXJsID0gdGhpc1xuICAgICwgaSA9IDA7XG5cbiAgLy9cbiAgLy8gVGhlIGZvbGxvd2luZyBpZiBzdGF0ZW1lbnRzIGFsbG93cyB0aGlzIG1vZHVsZSB0d28gaGF2ZSBjb21wYXRpYmlsaXR5IHdpdGhcbiAgLy8gMiBkaWZmZXJlbnQgQVBJOlxuICAvL1xuICAvLyAxLiBOb2RlLmpzJ3MgYHVybC5wYXJzZWAgYXBpIHdoaWNoIGFjY2VwdHMgYSBVUkwsIGJvb2xlYW4gYXMgYXJndW1lbnRzXG4gIC8vICAgIHdoZXJlIHRoZSBib29sZWFuIGluZGljYXRlcyB0aGF0IHRoZSBxdWVyeSBzdHJpbmcgc2hvdWxkIGFsc28gYmUgcGFyc2VkLlxuICAvL1xuICAvLyAyLiBUaGUgYFVSTGAgaW50ZXJmYWNlIG9mIHRoZSBicm93c2VyIHdoaWNoIGFjY2VwdHMgYSBVUkwsIG9iamVjdCBhc1xuICAvLyAgICBhcmd1bWVudHMuIFRoZSBzdXBwbGllZCBvYmplY3Qgd2lsbCBiZSB1c2VkIGFzIGRlZmF1bHQgdmFsdWVzIC8gZmFsbC1iYWNrXG4gIC8vICAgIGZvciByZWxhdGl2ZSBwYXRocy5cbiAgLy9cbiAgaWYgKCdvYmplY3QnICE9PSB0eXBlICYmICdzdHJpbmcnICE9PSB0eXBlKSB7XG4gICAgcGFyc2VyID0gbG9jYXRpb247XG4gICAgbG9jYXRpb24gPSBudWxsO1xuICB9XG5cbiAgaWYgKHBhcnNlciAmJiAnZnVuY3Rpb24nICE9PSB0eXBlb2YgcGFyc2VyKSBwYXJzZXIgPSBxcy5wYXJzZTtcblxuICBsb2NhdGlvbiA9IGxvbGNhdGlvbihsb2NhdGlvbik7XG5cbiAgLy9cbiAgLy8gRXh0cmFjdCBwcm90b2NvbCBpbmZvcm1hdGlvbiBiZWZvcmUgcnVubmluZyB0aGUgaW5zdHJ1Y3Rpb25zLlxuICAvL1xuICBleHRyYWN0ZWQgPSBleHRyYWN0UHJvdG9jb2woYWRkcmVzcyB8fCAnJyk7XG4gIHJlbGF0aXZlID0gIWV4dHJhY3RlZC5wcm90b2NvbCAmJiAhZXh0cmFjdGVkLnNsYXNoZXM7XG4gIHVybC5zbGFzaGVzID0gZXh0cmFjdGVkLnNsYXNoZXMgfHwgcmVsYXRpdmUgJiYgbG9jYXRpb24uc2xhc2hlcztcbiAgdXJsLnByb3RvY29sID0gZXh0cmFjdGVkLnByb3RvY29sIHx8IGxvY2F0aW9uLnByb3RvY29sIHx8ICcnO1xuICBhZGRyZXNzID0gZXh0cmFjdGVkLnJlc3Q7XG5cbiAgLy9cbiAgLy8gV2hlbiB0aGUgYXV0aG9yaXR5IGNvbXBvbmVudCBpcyBhYnNlbnQgdGhlIFVSTCBzdGFydHMgd2l0aCBhIHBhdGhcbiAgLy8gY29tcG9uZW50LlxuICAvL1xuICBpZiAoIWV4dHJhY3RlZC5zbGFzaGVzKSBpbnN0cnVjdGlvbnNbM10gPSBbLyguKikvLCAncGF0aG5hbWUnXTtcblxuICBmb3IgKDsgaSA8IGluc3RydWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25zW2ldO1xuXG4gICAgaWYgKHR5cGVvZiBpbnN0cnVjdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYWRkcmVzcyA9IGluc3RydWN0aW9uKGFkZHJlc3MpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcGFyc2UgPSBpbnN0cnVjdGlvblswXTtcbiAgICBrZXkgPSBpbnN0cnVjdGlvblsxXTtcblxuICAgIGlmIChwYXJzZSAhPT0gcGFyc2UpIHtcbiAgICAgIHVybFtrZXldID0gYWRkcmVzcztcbiAgICB9IGVsc2UgaWYgKCdzdHJpbmcnID09PSB0eXBlb2YgcGFyc2UpIHtcbiAgICAgIGlmICh+KGluZGV4ID0gYWRkcmVzcy5pbmRleE9mKHBhcnNlKSkpIHtcbiAgICAgICAgaWYgKCdudW1iZXInID09PSB0eXBlb2YgaW5zdHJ1Y3Rpb25bMl0pIHtcbiAgICAgICAgICB1cmxba2V5XSA9IGFkZHJlc3Muc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgICAgIGFkZHJlc3MgPSBhZGRyZXNzLnNsaWNlKGluZGV4ICsgaW5zdHJ1Y3Rpb25bMl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVybFtrZXldID0gYWRkcmVzcy5zbGljZShpbmRleCk7XG4gICAgICAgICAgYWRkcmVzcyA9IGFkZHJlc3Muc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgoaW5kZXggPSBwYXJzZS5leGVjKGFkZHJlc3MpKSkge1xuICAgICAgdXJsW2tleV0gPSBpbmRleFsxXTtcbiAgICAgIGFkZHJlc3MgPSBhZGRyZXNzLnNsaWNlKDAsIGluZGV4LmluZGV4KTtcbiAgICB9XG5cbiAgICB1cmxba2V5XSA9IHVybFtrZXldIHx8IChcbiAgICAgIHJlbGF0aXZlICYmIGluc3RydWN0aW9uWzNdID8gbG9jYXRpb25ba2V5XSB8fCAnJyA6ICcnXG4gICAgKTtcblxuICAgIC8vXG4gICAgLy8gSG9zdG5hbWUsIGhvc3QgYW5kIHByb3RvY29sIHNob3VsZCBiZSBsb3dlcmNhc2VkIHNvIHRoZXkgY2FuIGJlIHVzZWQgdG9cbiAgICAvLyBjcmVhdGUgYSBwcm9wZXIgYG9yaWdpbmAuXG4gICAgLy9cbiAgICBpZiAoaW5zdHJ1Y3Rpb25bNF0pIHVybFtrZXldID0gdXJsW2tleV0udG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIC8vXG4gIC8vIEFsc28gcGFyc2UgdGhlIHN1cHBsaWVkIHF1ZXJ5IHN0cmluZyBpbiB0byBhbiBvYmplY3QuIElmIHdlJ3JlIHN1cHBsaWVkXG4gIC8vIHdpdGggYSBjdXN0b20gcGFyc2VyIGFzIGZ1bmN0aW9uIHVzZSB0aGF0IGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYnVpbGQtaW5cbiAgLy8gcGFyc2VyLlxuICAvL1xuICBpZiAocGFyc2VyKSB1cmwucXVlcnkgPSBwYXJzZXIodXJsLnF1ZXJ5KTtcblxuICAvL1xuICAvLyBJZiB0aGUgVVJMIGlzIHJlbGF0aXZlLCByZXNvbHZlIHRoZSBwYXRobmFtZSBhZ2FpbnN0IHRoZSBiYXNlIFVSTC5cbiAgLy9cbiAgaWYgKFxuICAgICAgcmVsYXRpdmVcbiAgICAmJiBsb2NhdGlvbi5zbGFzaGVzXG4gICAgJiYgdXJsLnBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nXG4gICAgJiYgKHVybC5wYXRobmFtZSAhPT0gJycgfHwgbG9jYXRpb24ucGF0aG5hbWUgIT09ICcnKVxuICApIHtcbiAgICB1cmwucGF0aG5hbWUgPSByZXNvbHZlKHVybC5wYXRobmFtZSwgbG9jYXRpb24ucGF0aG5hbWUpO1xuICB9XG5cbiAgLy9cbiAgLy8gV2Ugc2hvdWxkIG5vdCBhZGQgcG9ydCBudW1iZXJzIGlmIHRoZXkgYXJlIGFscmVhZHkgdGhlIGRlZmF1bHQgcG9ydCBudW1iZXJcbiAgLy8gZm9yIGEgZ2l2ZW4gcHJvdG9jb2wuIEFzIHRoZSBob3N0IGFsc28gY29udGFpbnMgdGhlIHBvcnQgbnVtYmVyIHdlJ3JlIGdvaW5nXG4gIC8vIG92ZXJyaWRlIGl0IHdpdGggdGhlIGhvc3RuYW1lIHdoaWNoIGNvbnRhaW5zIG5vIHBvcnQgbnVtYmVyLlxuICAvL1xuICBpZiAoIXJlcXVpcmVkKHVybC5wb3J0LCB1cmwucHJvdG9jb2wpKSB7XG4gICAgdXJsLmhvc3QgPSB1cmwuaG9zdG5hbWU7XG4gICAgdXJsLnBvcnQgPSAnJztcbiAgfVxuXG4gIC8vXG4gIC8vIFBhcnNlIGRvd24gdGhlIGBhdXRoYCBmb3IgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZC5cbiAgLy9cbiAgdXJsLnVzZXJuYW1lID0gdXJsLnBhc3N3b3JkID0gJyc7XG4gIGlmICh1cmwuYXV0aCkge1xuICAgIGluc3RydWN0aW9uID0gdXJsLmF1dGguc3BsaXQoJzonKTtcbiAgICB1cmwudXNlcm5hbWUgPSBpbnN0cnVjdGlvblswXSB8fCAnJztcbiAgICB1cmwucGFzc3dvcmQgPSBpbnN0cnVjdGlvblsxXSB8fCAnJztcbiAgfVxuXG4gIHVybC5vcmlnaW4gPSB1cmwucHJvdG9jb2wgJiYgdXJsLmhvc3QgJiYgdXJsLnByb3RvY29sICE9PSAnZmlsZTonXG4gICAgPyB1cmwucHJvdG9jb2wgKycvLycrIHVybC5ob3N0XG4gICAgOiAnbnVsbCc7XG5cbiAgLy9cbiAgLy8gVGhlIGhyZWYgaXMganVzdCB0aGUgY29tcGlsZWQgcmVzdWx0LlxuICAvL1xuICB1cmwuaHJlZiA9IHVybC50b1N0cmluZygpO1xufVxuXG4vKipcbiAqIFRoaXMgaXMgY29udmVuaWVuY2UgbWV0aG9kIGZvciBjaGFuZ2luZyBwcm9wZXJ0aWVzIGluIHRoZSBVUkwgaW5zdGFuY2UgdG9cbiAqIGluc3VyZSB0aGF0IHRoZXkgYWxsIHByb3BhZ2F0ZSBjb3JyZWN0bHkuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHBhcnQgICAgICAgICAgUHJvcGVydHkgd2UgbmVlZCB0byBhZGp1c3QuXG4gKiBAcGFyYW0ge01peGVkfSB2YWx1ZSAgICAgICAgICBUaGUgbmV3bHkgYXNzaWduZWQgdmFsdWUuXG4gKiBAcGFyYW0ge0Jvb2xlYW58RnVuY3Rpb259IGZuICBXaGVuIHNldHRpbmcgdGhlIHF1ZXJ5LCBpdCB3aWxsIGJlIHRoZSBmdW5jdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBwYXJzZSB0aGUgcXVlcnkuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHNldHRpbmcgdGhlIHByb3RvY29sLCBkb3VibGUgc2xhc2ggd2lsbCBiZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCBmcm9tIHRoZSBmaW5hbCB1cmwgaWYgaXQgaXMgdHJ1ZS5cbiAqIEByZXR1cm5zIHtVUkx9IFVSTCBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIHNldChwYXJ0LCB2YWx1ZSwgZm4pIHtcbiAgdmFyIHVybCA9IHRoaXM7XG5cbiAgc3dpdGNoIChwYXJ0KSB7XG4gICAgY2FzZSAncXVlcnknOlxuICAgICAgaWYgKCdzdHJpbmcnID09PSB0eXBlb2YgdmFsdWUgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlID0gKGZuIHx8IHFzLnBhcnNlKSh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdwb3J0JzpcbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuXG4gICAgICBpZiAoIXJlcXVpcmVkKHZhbHVlLCB1cmwucHJvdG9jb2wpKSB7XG4gICAgICAgIHVybC5ob3N0ID0gdXJsLmhvc3RuYW1lO1xuICAgICAgICB1cmxbcGFydF0gPSAnJztcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgICAgdXJsLmhvc3QgPSB1cmwuaG9zdG5hbWUgKyc6JysgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaG9zdG5hbWUnOlxuICAgICAgdXJsW3BhcnRdID0gdmFsdWU7XG5cbiAgICAgIGlmICh1cmwucG9ydCkgdmFsdWUgKz0gJzonKyB1cmwucG9ydDtcbiAgICAgIHVybC5ob3N0ID0gdmFsdWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2hvc3QnOlxuICAgICAgdXJsW3BhcnRdID0gdmFsdWU7XG5cbiAgICAgIGlmICgvOlxcZCskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCc6Jyk7XG4gICAgICAgIHVybC5wb3J0ID0gdmFsdWUucG9wKCk7XG4gICAgICAgIHVybC5ob3N0bmFtZSA9IHZhbHVlLmpvaW4oJzonKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybC5ob3N0bmFtZSA9IHZhbHVlO1xuICAgICAgICB1cmwucG9ydCA9ICcnO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3Byb3RvY29sJzpcbiAgICAgIHVybC5wcm90b2NvbCA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICB1cmwuc2xhc2hlcyA9ICFmbjtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncGF0aG5hbWUnOlxuICAgIGNhc2UgJ2hhc2gnOlxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHZhciBjaGFyID0gcGFydCA9PT0gJ3BhdGhuYW1lJyA/ICcvJyA6ICcjJztcbiAgICAgICAgdXJsW3BhcnRdID0gdmFsdWUuY2hhckF0KDApICE9PSBjaGFyID8gY2hhciArIHZhbHVlIDogdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cmxbcGFydF0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHVybFtwYXJ0XSA9IHZhbHVlO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpbnMgPSBydWxlc1tpXTtcblxuICAgIGlmIChpbnNbNF0pIHVybFtpbnNbMV1dID0gdXJsW2luc1sxXV0udG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIHVybC5vcmlnaW4gPSB1cmwucHJvdG9jb2wgJiYgdXJsLmhvc3QgJiYgdXJsLnByb3RvY29sICE9PSAnZmlsZTonXG4gICAgPyB1cmwucHJvdG9jb2wgKycvLycrIHVybC5ob3N0XG4gICAgOiAnbnVsbCc7XG5cbiAgdXJsLmhyZWYgPSB1cmwudG9TdHJpbmcoKTtcblxuICByZXR1cm4gdXJsO1xufVxuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgcHJvcGVydGllcyBiYWNrIGluIHRvIGEgdmFsaWQgYW5kIGZ1bGwgVVJMIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmdpZnkgT3B0aW9uYWwgcXVlcnkgc3RyaW5naWZ5IGZ1bmN0aW9uLlxuICogQHJldHVybnMge1N0cmluZ30gQ29tcGlsZWQgdmVyc2lvbiBvZiB0aGUgVVJMLlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiB0b1N0cmluZyhzdHJpbmdpZnkpIHtcbiAgaWYgKCFzdHJpbmdpZnkgfHwgJ2Z1bmN0aW9uJyAhPT0gdHlwZW9mIHN0cmluZ2lmeSkgc3RyaW5naWZ5ID0gcXMuc3RyaW5naWZ5O1xuXG4gIHZhciBxdWVyeVxuICAgICwgdXJsID0gdGhpc1xuICAgICwgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2w7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLmNoYXJBdChwcm90b2NvbC5sZW5ndGggLSAxKSAhPT0gJzonKSBwcm90b2NvbCArPSAnOic7XG5cbiAgdmFyIHJlc3VsdCA9IHByb3RvY29sICsgKHVybC5zbGFzaGVzID8gJy8vJyA6ICcnKTtcblxuICBpZiAodXJsLnVzZXJuYW1lKSB7XG4gICAgcmVzdWx0ICs9IHVybC51c2VybmFtZTtcbiAgICBpZiAodXJsLnBhc3N3b3JkKSByZXN1bHQgKz0gJzonKyB1cmwucGFzc3dvcmQ7XG4gICAgcmVzdWx0ICs9ICdAJztcbiAgfVxuXG4gIHJlc3VsdCArPSB1cmwuaG9zdCArIHVybC5wYXRobmFtZTtcblxuICBxdWVyeSA9ICdvYmplY3QnID09PSB0eXBlb2YgdXJsLnF1ZXJ5ID8gc3RyaW5naWZ5KHVybC5xdWVyeSkgOiB1cmwucXVlcnk7XG4gIGlmIChxdWVyeSkgcmVzdWx0ICs9ICc/JyAhPT0gcXVlcnkuY2hhckF0KDApID8gJz8nKyBxdWVyeSA6IHF1ZXJ5O1xuXG4gIGlmICh1cmwuaGFzaCkgcmVzdWx0ICs9IHVybC5oYXNoO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cblVybC5wcm90b3R5cGUgPSB7IHNldDogc2V0LCB0b1N0cmluZzogdG9TdHJpbmcgfTtcblxuLy9cbi8vIEV4cG9zZSB0aGUgVVJMIHBhcnNlciBhbmQgc29tZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdGhhdCBtaWdodCBiZSB1c2VmdWwgZm9yXG4vLyBvdGhlcnMgb3IgdGVzdGluZy5cbi8vXG5VcmwuZXh0cmFjdFByb3RvY29sID0gZXh0cmFjdFByb3RvY29sO1xuVXJsLmxvY2F0aW9uID0gbG9sY2F0aW9uO1xuVXJsLnRyaW1MZWZ0ID0gdHJpbUxlZnQ7XG5VcmwucXMgPSBxcztcblxubW9kdWxlLmV4cG9ydHMgPSBVcmw7XG5cbn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KVxuXG59LHtcInF1ZXJ5c3RyaW5naWZ5XCI6NTksXCJyZXF1aXJlcy1wb3J0XCI6NjB9XX0se30sWzFdKSgxKVxufSk7XG5cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c29ja2pzLmpzLm1hcFxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/sockjs-client/dist/sockjs.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/tslib/tslib.js":
|
|
/*!*************************************!*\
|
|
!*** ./node_modules/tslib/tslib.js ***!
|
|
\*************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
eval("/* WEBPACK VAR INJECTION */(function(global) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global global, define, System, Reflect, Promise */\r\nvar __extends;\r\nvar __assign;\r\nvar __rest;\r\nvar __decorate;\r\nvar __param;\r\nvar __metadata;\r\nvar __awaiter;\r\nvar __generator;\r\nvar __exportStar;\r\nvar __values;\r\nvar __read;\r\nvar __spread;\r\nvar __spreadArrays;\r\nvar __spreadArray;\r\nvar __await;\r\nvar __asyncGenerator;\r\nvar __asyncDelegator;\r\nvar __asyncValues;\r\nvar __makeTemplateObject;\r\nvar __importStar;\r\nvar __importDefault;\r\nvar __classPrivateFieldGet;\r\nvar __classPrivateFieldSet;\r\nvar __createBinding;\r\n(function (factory) {\r\n var root = typeof global === \"object\" ? global : typeof self === \"object\" ? self : typeof this === \"object\" ? this : {};\r\n if (true) {\r\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports], __WEBPACK_AMD_DEFINE_RESULT__ = (function (exports) { factory(createExporter(root, createExporter(exports))); }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n }\r\n else {}\r\n function createExporter(exports, previous) {\r\n if (exports !== root) {\r\n if (typeof Object.create === \"function\") {\r\n Object.defineProperty(exports, \"__esModule\", { value: true });\r\n }\r\n else {\r\n exports.__esModule = true;\r\n }\r\n }\r\n return function (id, v) { return exports[id] = previous ? previous(id, v) : v; };\r\n }\r\n})\r\n(function (exporter) {\r\n var extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n\r\n __extends = function (d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n\r\n __assign = Object.assign || function (t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n\r\n __rest = function (s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n };\r\n\r\n __decorate = function (decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n };\r\n\r\n __param = function (paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n };\r\n\r\n __metadata = function (metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n };\r\n\r\n __awaiter = function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n };\r\n\r\n __generator = function (thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n };\r\n\r\n __exportStar = function(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n };\r\n\r\n __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n }) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n });\r\n\r\n __values = function (o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n };\r\n\r\n __read = function (o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n };\r\n\r\n /** @deprecated */\r\n __spread = function () {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n };\r\n\r\n /** @deprecated */\r\n __spreadArrays = function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n };\r\n\r\n __spreadArray = function (to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n };\r\n\r\n __await = function (v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n };\r\n\r\n __asyncGenerator = function (thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n };\r\n\r\n __asyncDelegator = function (o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n };\r\n\r\n __asyncValues = function (o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n };\r\n\r\n __makeTemplateObject = function (cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n };\r\n\r\n var __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n }) : function(o, v) {\r\n o[\"default\"] = v;\r\n };\r\n\r\n __importStar = function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n };\r\n\r\n __importDefault = function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n };\r\n\r\n __classPrivateFieldGet = function (receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n };\r\n\r\n __classPrivateFieldSet = function (receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n };\r\n\r\n exporter(\"__extends\", __extends);\r\n exporter(\"__assign\", __assign);\r\n exporter(\"__rest\", __rest);\r\n exporter(\"__decorate\", __decorate);\r\n exporter(\"__param\", __param);\r\n exporter(\"__metadata\", __metadata);\r\n exporter(\"__awaiter\", __awaiter);\r\n exporter(\"__generator\", __generator);\r\n exporter(\"__exportStar\", __exportStar);\r\n exporter(\"__createBinding\", __createBinding);\r\n exporter(\"__values\", __values);\r\n exporter(\"__read\", __read);\r\n exporter(\"__spread\", __spread);\r\n exporter(\"__spreadArrays\", __spreadArrays);\r\n exporter(\"__spreadArray\", __spreadArray);\r\n exporter(\"__await\", __await);\r\n exporter(\"__asyncGenerator\", __asyncGenerator);\r\n exporter(\"__asyncDelegator\", __asyncDelegator);\r\n exporter(\"__asyncValues\", __asyncValues);\r\n exporter(\"__makeTemplateObject\", __makeTemplateObject);\r\n exporter(\"__importStar\", __importStar);\r\n exporter(\"__importDefault\", __importDefault);\r\n exporter(\"__classPrivateFieldGet\", __classPrivateFieldGet);\r\n exporter(\"__classPrivateFieldSet\", __classPrivateFieldSet);\r\n});\r\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuanM/Y2NlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgZ2xvYmFsLCBkZWZpbmUsIFN5c3RlbSwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG52YXIgX19leHRlbmRzO1xyXG52YXIgX19hc3NpZ247XHJcbnZhciBfX3Jlc3Q7XHJcbnZhciBfX2RlY29yYXRlO1xyXG52YXIgX19wYXJhbTtcclxudmFyIF9fbWV0YWRhdGE7XHJcbnZhciBfX2F3YWl0ZXI7XHJcbnZhciBfX2dlbmVyYXRvcjtcclxudmFyIF9fZXhwb3J0U3RhcjtcclxudmFyIF9fdmFsdWVzO1xyXG52YXIgX19yZWFkO1xyXG52YXIgX19zcHJlYWQ7XHJcbnZhciBfX3NwcmVhZEFycmF5cztcclxudmFyIF9fc3ByZWFkQXJyYXk7XHJcbnZhciBfX2F3YWl0O1xyXG52YXIgX19hc3luY0dlbmVyYXRvcjtcclxudmFyIF9fYXN5bmNEZWxlZ2F0b3I7XHJcbnZhciBfX2FzeW5jVmFsdWVzO1xyXG52YXIgX19tYWtlVGVtcGxhdGVPYmplY3Q7XHJcbnZhciBfX2ltcG9ydFN0YXI7XHJcbnZhciBfX2ltcG9ydERlZmF1bHQ7XHJcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0O1xyXG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZFNldDtcclxudmFyIF9fY3JlYXRlQmluZGluZztcclxuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XHJcbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiA/IHNlbGYgOiB0eXBlb2YgdGhpcyA9PT0gXCJvYmplY3RcIiA/IHRoaXMgOiB7fTtcclxuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xyXG4gICAgICAgIGRlZmluZShcInRzbGliXCIsIFtcImV4cG9ydHNcIl0sIGZ1bmN0aW9uIChleHBvcnRzKSB7IGZhY3RvcnkoY3JlYXRlRXhwb3J0ZXIocm9vdCwgY3JlYXRlRXhwb3J0ZXIoZXhwb3J0cykpKTsgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIGZhY3RvcnkoY3JlYXRlRXhwb3J0ZXIocm9vdCwgY3JlYXRlRXhwb3J0ZXIobW9kdWxlLmV4cG9ydHMpKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBmYWN0b3J5KGNyZWF0ZUV4cG9ydGVyKHJvb3QpKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGNyZWF0ZUV4cG9ydGVyKGV4cG9ydHMsIHByZXZpb3VzKSB7XHJcbiAgICAgICAgaWYgKGV4cG9ydHMgIT09IHJvb3QpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChpZCwgdikgeyByZXR1cm4gZXhwb3J0c1tpZF0gPSBwcmV2aW91cyA/IHByZXZpb3VzKGlkLCB2KSA6IHY7IH07XHJcbiAgICB9XHJcbn0pXHJcbihmdW5jdGlvbiAoZXhwb3J0ZXIpIHtcclxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcblxyXG4gICAgX19leHRlbmRzID0gZnVuY3Rpb24gKGQsIGIpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XHJcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH07XHJcblxyXG4gICAgX19yZXN0ID0gZnVuY3Rpb24gKHMsIGUpIHtcclxuICAgICAgICB2YXIgdCA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgICAgICB0W3BdID0gc1twXTtcclxuICAgICAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2RlY29yYXRlID0gZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICAgICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICAgICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxuICAgIH07XHJcblxyXG4gICAgX19wYXJhbSA9IGZ1bmN0aW9uIChwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxuICAgIH07XHJcblxyXG4gICAgX19tZXRhZGF0YSA9IGZ1bmN0aW9uIChtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYXdhaXRlciA9IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgICAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgICAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2dlbmVyYXRvciA9IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XHJcbiAgICAgICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgICAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgICAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIF9fZXhwb3J0U3RhciA9IGZ1bmN0aW9uKG0sIG8pIHtcclxuICAgICAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgICAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcclxuICAgIH0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICAgICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgICAgICBvW2syXSA9IG1ba107XHJcbiAgICB9KTtcclxuXHJcbiAgICBfX3ZhbHVlcyA9IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAgICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgICAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgICAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIH07XHJcblxyXG4gICAgX19yZWFkID0gZnVuY3Rpb24gKG8sIG4pIHtcclxuICAgICAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICAgICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgICAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFyO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKiogQGRlcHJlY2F0ZWQgKi9cclxuICAgIF9fc3ByZWFkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICAgICAgcmV0dXJuIGFyO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKiogQGRlcHJlY2F0ZWQgKi9cclxuICAgIF9fc3ByZWFkQXJyYXlzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcclxuICAgICAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgICAgICByZXR1cm4gcjtcclxuICAgIH07XHJcblxyXG4gICAgX19zcHJlYWRBcnJheSA9IGZ1bmN0aW9uICh0bywgZnJvbSkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpIDwgaWw7IGkrKywgaisrKVxyXG4gICAgICAgICAgICB0b1tqXSA9IGZyb21baV07XHJcbiAgICAgICAgcmV0dXJuIHRvO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2F3YWl0ID0gZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxuICAgIH07XHJcblxyXG4gICAgX19hc3luY0dlbmVyYXRvciA9IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgICAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICAgICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7ICB9XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgICAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYXN5bmNEZWxlZ2F0b3IgPSBmdW5jdGlvbiAobykge1xyXG4gICAgICAgIHZhciBpLCBwO1xyXG4gICAgICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICAgICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG4gICAgfTtcclxuXHJcbiAgICBfX2FzeW5jVmFsdWVzID0gZnVuY3Rpb24gKG8pIHtcclxuICAgICAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICAgICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgICAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbiAgICB9O1xyXG5cclxuICAgIF9fbWFrZVRlbXBsYXRlT2JqZWN0ID0gZnVuY3Rpb24gKGNvb2tlZCwgcmF3KSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgICAgICByZXR1cm4gY29va2VkO1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG4gICAgfSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICAgICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2ltcG9ydFN0YXIgPSBmdW5jdGlvbiAobW9kKSB7XHJcbiAgICAgICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgICAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICAgICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH07XHJcblxyXG4gICAgX19pbXBvcnREZWZhdWx0ID0gZnVuY3Rpb24gKG1vZCkge1xyXG4gICAgICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0ID0gZnVuY3Rpb24gKHJlY2VpdmVyLCBwcml2YXRlTWFwKSB7XHJcbiAgICAgICAgaWYgKCFwcml2YXRlTWFwLmhhcyhyZWNlaXZlcikpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwcml2YXRlTWFwLmdldChyZWNlaXZlcik7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQgPSBmdW5jdGlvbiAocmVjZWl2ZXIsIHByaXZhdGVNYXAsIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCFwcml2YXRlTWFwLmhhcyhyZWNlaXZlcikpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBzZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHByaXZhdGVNYXAuc2V0KHJlY2VpdmVyLCB2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfTtcclxuXHJcbiAgICBleHBvcnRlcihcIl9fZXh0ZW5kc1wiLCBfX2V4dGVuZHMpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2Fzc2lnblwiLCBfX2Fzc2lnbik7XHJcbiAgICBleHBvcnRlcihcIl9fcmVzdFwiLCBfX3Jlc3QpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2RlY29yYXRlXCIsIF9fZGVjb3JhdGUpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3BhcmFtXCIsIF9fcGFyYW0pO1xyXG4gICAgZXhwb3J0ZXIoXCJfX21ldGFkYXRhXCIsIF9fbWV0YWRhdGEpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2F3YWl0ZXJcIiwgX19hd2FpdGVyKTtcclxuICAgIGV4cG9ydGVyKFwiX19nZW5lcmF0b3JcIiwgX19nZW5lcmF0b3IpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2V4cG9ydFN0YXJcIiwgX19leHBvcnRTdGFyKTtcclxuICAgIGV4cG9ydGVyKFwiX19jcmVhdGVCaW5kaW5nXCIsIF9fY3JlYXRlQmluZGluZyk7XHJcbiAgICBleHBvcnRlcihcIl9fdmFsdWVzXCIsIF9fdmFsdWVzKTtcclxuICAgIGV4cG9ydGVyKFwiX19yZWFkXCIsIF9fcmVhZCk7XHJcbiAgICBleHBvcnRlcihcIl9fc3ByZWFkXCIsIF9fc3ByZWFkKTtcclxuICAgIGV4cG9ydGVyKFwiX19zcHJlYWRBcnJheXNcIiwgX19zcHJlYWRBcnJheXMpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3NwcmVhZEFycmF5XCIsIF9fc3ByZWFkQXJyYXkpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2F3YWl0XCIsIF9fYXdhaXQpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2FzeW5jR2VuZXJhdG9yXCIsIF9fYXN5bmNHZW5lcmF0b3IpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2FzeW5jRGVsZWdhdG9yXCIsIF9fYXN5bmNEZWxlZ2F0b3IpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2FzeW5jVmFsdWVzXCIsIF9fYXN5bmNWYWx1ZXMpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX21ha2VUZW1wbGF0ZU9iamVjdFwiLCBfX21ha2VUZW1wbGF0ZU9iamVjdCk7XHJcbiAgICBleHBvcnRlcihcIl9faW1wb3J0U3RhclwiLCBfX2ltcG9ydFN0YXIpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2ltcG9ydERlZmF1bHRcIiwgX19pbXBvcnREZWZhdWx0KTtcclxuICAgIGV4cG9ydGVyKFwiX19jbGFzc1ByaXZhdGVGaWVsZEdldFwiLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KTtcclxuICAgIGV4cG9ydGVyKFwiX19jbGFzc1ByaXZhdGVGaWVsZFNldFwiLCBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KTtcclxufSk7XHJcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0EsV0FLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/tslib/tslib.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/url/url.js":
|
|
/*!*********************************!*\
|
|
!*** ./node_modules/url/url.js ***!
|
|
\*********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n\nvar punycode = __webpack_require__(/*! punycode */ \"./node_modules/node-libs-browser/node_modules/punycode/punycode.js\");\nvar util = __webpack_require__(/*! ./util */ \"./node_modules/url/util.js\");\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.host = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.query = null;\n this.pathname = null;\n this.path = null;\n this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = ['\\''].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n hostEndingChars = ['/', '?', '#'],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n unsafeProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n },\n querystring = __webpack_require__(/*! querystring */ \"./node_modules/querystring-es3/index.js\");\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n if (url && util.isObject(url) && url instanceof Url) return url;\n\n var u = new Url;\n u.parse(url, parseQueryString, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n if (!util.isString(url)) {\n throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n }\n\n // Copy chrome, IE, opera backslash-handling behavior.\n // Back slashes before the query string get converted to forward slashes\n // See: https://code.google.com/p/chromium/issues/detail?id=25916\n var queryIndex = url.indexOf('?'),\n splitter =\n (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',\n uSplit = url.split(splitter),\n slashRegex = /\\\\/g;\n uSplit[0] = uSplit[0].replace(slashRegex, '/');\n url = uSplit.join(splitter);\n\n var rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.path = rest;\n this.href = rest;\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n if (parseQueryString) {\n this.query = querystring.parse(this.search.substr(1));\n } else {\n this.query = this.search.substr(1);\n }\n } else if (parseQueryString) {\n this.search = '';\n this.query = {};\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n var lowerProto = proto.toLowerCase();\n this.protocol = lowerProto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n var slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (var i = 0; i < hostEndingChars.length; i++) {\n var hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = decodeURIComponent(auth);\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (var i = 0; i < nonHostChars.length; i++) {\n var hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1)\n hostEnd = rest.length;\n\n this.host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost();\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (var i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) continue;\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = '/' + notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n } else {\n // hostnames are always lower case.\n this.hostname = this.hostname.toLowerCase();\n }\n\n if (!ipv6Hostname) {\n // IDNA Support: Returns a punycoded representation of \"domain\".\n // It only converts parts of the domain name that\n // have non-ASCII characters, i.e. it doesn't matter if\n // you call it with a domain that already is ASCII-only.\n this.hostname = punycode.toASCII(this.hostname);\n }\n\n var p = this.port ? ':' + this.port : '';\n var h = this.hostname || '';\n this.host = h + p;\n this.href += this.host;\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n if (rest[0] !== '/') {\n rest = '/' + rest;\n }\n }\n }\n\n // now rest is set to the post-host stuff.\n // chop off any delim chars.\n if (!unsafeProtocol[lowerProto]) {\n\n // First, make 100% sure that any \"autoEscape\" chars get\n // escaped, even if encodeURIComponent doesn't think they\n // need to be.\n for (var i = 0, l = autoEscape.length; i < l; i++) {\n var ae = autoEscape[i];\n if (rest.indexOf(ae) === -1)\n continue;\n var esc = encodeURIComponent(ae);\n if (esc === ae) {\n esc = escape(ae);\n }\n rest = rest.split(ae).join(esc);\n }\n }\n\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n this.query = rest.substr(qm + 1);\n if (parseQueryString) {\n this.query = querystring.parse(this.query);\n }\n rest = rest.slice(0, qm);\n } else if (parseQueryString) {\n // no query string, but parseQueryString still requested\n this.search = '';\n this.query = {};\n }\n if (rest) this.pathname = rest;\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '/';\n }\n\n //to support http.request\n if (this.pathname || this.search) {\n var p = this.pathname || '';\n var s = this.search || '';\n this.path = p + s;\n }\n\n // finally, reconstruct the href based on what has been validated.\n this.href = this.format();\n return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n // ensure it's an object, and not a string url.\n // If it's an obj, this is a no-op.\n // this way, you can call url_format() on strings\n // to clean up potentially wonky urls.\n if (util.isString(obj)) obj = urlParse(obj);\n if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n return obj.format();\n}\n\nUrl.prototype.format = function() {\n var auth = this.auth || '';\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, ':');\n auth += '@';\n }\n\n var protocol = this.protocol || '',\n pathname = this.pathname || '',\n hash = this.hash || '',\n host = false,\n query = '';\n\n if (this.host) {\n host = auth + this.host;\n } else if (this.hostname) {\n host = auth + (this.hostname.indexOf(':') === -1 ?\n this.hostname :\n '[' + this.hostname + ']');\n if (this.port) {\n host += ':' + this.port;\n }\n }\n\n if (this.query &&\n util.isObject(this.query) &&\n Object.keys(this.query).length) {\n query = querystring.stringify(this.query);\n }\n\n var search = this.search || (query && ('?' + query)) || '';\n\n if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\n // unless they had them to begin with.\n if (this.slashes ||\n (!protocol || slashedProtocol[protocol]) && host !== false) {\n host = '//' + (host || '');\n if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n } else if (!host) {\n host = '';\n }\n\n if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n if (search && search.charAt(0) !== '?') search = '?' + search;\n\n pathname = pathname.replace(/[?#]/g, function(match) {\n return encodeURIComponent(match);\n });\n search = search.replace('#', '%23');\n\n return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n if (!source) return relative;\n return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n if (util.isString(relative)) {\n var rel = new Url();\n rel.parse(relative, false, true);\n relative = rel;\n }\n\n var result = new Url();\n var tkeys = Object.keys(this);\n for (var tk = 0; tk < tkeys.length; tk++) {\n var tkey = tkeys[tk];\n result[tkey] = this[tkey];\n }\n\n // hash is always overridden, no matter what.\n // even href=\"\" will remove it.\n result.hash = relative.hash;\n\n // if the relative url is empty, then there's nothing left to do here.\n if (relative.href === '') {\n result.href = result.format();\n return result;\n }\n\n // hrefs like //foo/bar always cut to the protocol.\n if (relative.slashes && !relative.protocol) {\n // take everything except the protocol from relative\n var rkeys = Object.keys(relative);\n for (var rk = 0; rk < rkeys.length; rk++) {\n var rkey = rkeys[rk];\n if (rkey !== 'protocol')\n result[rkey] = relative[rkey];\n }\n\n //urlParse appends trailing / to urls like http://www.example.com\n if (slashedProtocol[result.protocol] &&\n result.hostname && !result.pathname) {\n result.path = result.pathname = '/';\n }\n\n result.href = result.format();\n return result;\n }\n\n if (relative.protocol && relative.protocol !== result.protocol) {\n // if it's a known url protocol, then changing\n // the protocol does weird things\n // first, if it's not file:, then we MUST have a host,\n // and if there was a path\n // to begin with, then we MUST have a path.\n // if it is file:, then the host is dropped,\n // because that's known to be hostless.\n // anything else is assumed to be absolute.\n if (!slashedProtocol[relative.protocol]) {\n var keys = Object.keys(relative);\n for (var v = 0; v < keys.length; v++) {\n var k = keys[v];\n result[k] = relative[k];\n }\n result.href = result.format();\n return result;\n }\n\n result.protocol = relative.protocol;\n if (!relative.host && !hostlessProtocol[relative.protocol]) {\n var relPath = (relative.pathname || '').split('/');\n while (relPath.length && !(relative.host = relPath.shift()));\n if (!relative.host) relative.host = '';\n if (!relative.hostname) relative.hostname = '';\n if (relPath[0] !== '') relPath.unshift('');\n if (relPath.length < 2) relPath.unshift('');\n result.pathname = relPath.join('/');\n } else {\n result.pathname = relative.pathname;\n }\n result.search = relative.search;\n result.query = relative.query;\n result.host = relative.host || '';\n result.auth = relative.auth;\n result.hostname = relative.hostname || relative.host;\n result.port = relative.port;\n // to support http.request\n if (result.pathname || result.search) {\n var p = result.pathname || '';\n var s = result.search || '';\n result.path = p + s;\n }\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n }\n\n var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n isRelAbs = (\n relative.host ||\n relative.pathname && relative.pathname.charAt(0) === '/'\n ),\n mustEndAbs = (isRelAbs || isSourceAbs ||\n (result.host && relative.pathname)),\n removeAllDots = mustEndAbs,\n srcPath = result.pathname && result.pathname.split('/') || [],\n relPath = relative.pathname && relative.pathname.split('/') || [],\n psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n // if the url is a non-slashed url, then relative\n // links like ../.. should be able\n // to crawl up to the hostname, as well. This is strange.\n // result.protocol has already been set by now.\n // Later on, put the first path part into the host field.\n if (psychotic) {\n result.hostname = '';\n result.port = null;\n if (result.host) {\n if (srcPath[0] === '') srcPath[0] = result.host;\n else srcPath.unshift(result.host);\n }\n result.host = '';\n if (relative.protocol) {\n relative.hostname = null;\n relative.port = null;\n if (relative.host) {\n if (relPath[0] === '') relPath[0] = relative.host;\n else relPath.unshift(relative.host);\n }\n relative.host = null;\n }\n mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n }\n\n if (isRelAbs) {\n // it's absolute.\n result.host = (relative.host || relative.host === '') ?\n relative.host : result.host;\n result.hostname = (relative.hostname || relative.hostname === '') ?\n relative.hostname : result.hostname;\n result.search = relative.search;\n result.query = relative.query;\n srcPath = relPath;\n // fall through to the dot-handling below.\n } else if (relPath.length) {\n // it's relative\n // throw away the existing file, and take the new path instead.\n if (!srcPath) srcPath = [];\n srcPath.pop();\n srcPath = srcPath.concat(relPath);\n result.search = relative.search;\n result.query = relative.query;\n } else if (!util.isNullOrUndefined(relative.search)) {\n // just pull out the search.\n // like href='?foo'.\n // Put this after the other two cases because it simplifies the booleans\n if (psychotic) {\n result.hostname = result.host = srcPath.shift();\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n result.search = relative.search;\n result.query = relative.query;\n //to support http.request\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.href = result.format();\n return result;\n }\n\n if (!srcPath.length) {\n // no path at all. easy.\n // we've already handled the other stuff above.\n result.pathname = null;\n //to support http.request\n if (result.search) {\n result.path = '/' + result.search;\n } else {\n result.path = null;\n }\n result.href = result.format();\n return result;\n }\n\n // if a url ENDs in . or .., then it must get a trailing slash.\n // however, if it ends in anything else non-slashy,\n // then it must NOT get a trailing slash.\n var last = srcPath.slice(-1)[0];\n var hasTrailingSlash = (\n (result.host || relative.host || srcPath.length > 1) &&\n (last === '.' || last === '..') || last === '');\n\n // strip single dots, resolve double dots to parent dir\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = srcPath.length; i >= 0; i--) {\n last = srcPath[i];\n if (last === '.') {\n srcPath.splice(i, 1);\n } else if (last === '..') {\n srcPath.splice(i, 1);\n up++;\n } else if (up) {\n srcPath.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (!mustEndAbs && !removeAllDots) {\n for (; up--; up) {\n srcPath.unshift('..');\n }\n }\n\n if (mustEndAbs && srcPath[0] !== '' &&\n (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n srcPath.unshift('');\n }\n\n if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n srcPath.push('');\n }\n\n var isAbsolute = srcPath[0] === '' ||\n (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n // put the host back\n if (psychotic) {\n result.hostname = result.host = isAbsolute ? '' :\n srcPath.length ? srcPath.shift() : '';\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n\n mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n if (mustEndAbs && !isAbsolute) {\n srcPath.unshift('');\n }\n\n if (!srcPath.length) {\n result.pathname = null;\n result.path = null;\n } else {\n result.pathname = srcPath.join('/');\n }\n\n //to support request.http\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.auth = relative.auth || result.auth;\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n};\n\nUrl.prototype.parseHost = function() {\n var host = this.host;\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) this.hostname = host;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdXJsL3VybC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91cmwvdXJsLmpzPzBiMTYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbmV4cG9ydHMucGFyc2UgPSB1cmxQYXJzZTtcbmV4cG9ydHMucmVzb2x2ZSA9IHVybFJlc29sdmU7XG5leHBvcnRzLnJlc29sdmVPYmplY3QgPSB1cmxSZXNvbHZlT2JqZWN0O1xuZXhwb3J0cy5mb3JtYXQgPSB1cmxGb3JtYXQ7XG5cbmV4cG9ydHMuVXJsID0gVXJsO1xuXG5mdW5jdGlvbiBVcmwoKSB7XG4gIHRoaXMucHJvdG9jb2wgPSBudWxsO1xuICB0aGlzLnNsYXNoZXMgPSBudWxsO1xuICB0aGlzLmF1dGggPSBudWxsO1xuICB0aGlzLmhvc3QgPSBudWxsO1xuICB0aGlzLnBvcnQgPSBudWxsO1xuICB0aGlzLmhvc3RuYW1lID0gbnVsbDtcbiAgdGhpcy5oYXNoID0gbnVsbDtcbiAgdGhpcy5zZWFyY2ggPSBudWxsO1xuICB0aGlzLnF1ZXJ5ID0gbnVsbDtcbiAgdGhpcy5wYXRobmFtZSA9IG51bGw7XG4gIHRoaXMucGF0aCA9IG51bGw7XG4gIHRoaXMuaHJlZiA9IG51bGw7XG59XG5cbi8vIFJlZmVyZW5jZTogUkZDIDM5ODYsIFJGQyAxODA4LCBSRkMgMjM5NlxuXG4vLyBkZWZpbmUgdGhlc2UgaGVyZSBzbyBhdCBsZWFzdCB0aGV5IG9ubHkgaGF2ZSB0byBiZVxuLy8gY29tcGlsZWQgb25jZSBvbiB0aGUgZmlyc3QgbW9kdWxlIGxvYWQuXG52YXIgcHJvdG9jb2xQYXR0ZXJuID0gL14oW2EtejAtOS4rLV0rOikvaSxcbiAgICBwb3J0UGF0dGVybiA9IC86WzAtOV0qJC8sXG5cbiAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGEgc2ltcGxlIHBhdGggVVJMXG4gICAgc2ltcGxlUGF0aFBhdHRlcm4gPSAvXihcXC9cXC8/KD8hXFwvKVteXFw/XFxzXSopKFxcP1teXFxzXSopPyQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eWythLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFsrYS16MC05QS1aXy1dezAsNjN9KSguKikkLyxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBjYW4gYWxsb3cgXCJ1bnNhZmVcIiBhbmQgXCJ1bndpc2VcIiBjaGFycy5cbiAgICB1bnNhZmVQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IG5ldmVyIGhhdmUgYSBob3N0bmFtZS5cbiAgICBob3N0bGVzc1Byb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgYWx3YXlzIGNvbnRhaW4gYSAvLyBiaXQuXG4gICAgc2xhc2hlZFByb3RvY29sID0ge1xuICAgICAgJ2h0dHAnOiB0cnVlLFxuICAgICAgJ2h0dHBzJzogdHJ1ZSxcbiAgICAgICdmdHAnOiB0cnVlLFxuICAgICAgJ2dvcGhlcic6IHRydWUsXG4gICAgICAnZmlsZSc6IHRydWUsXG4gICAgICAnaHR0cDonOiB0cnVlLFxuICAgICAgJ2h0dHBzOic6IHRydWUsXG4gICAgICAnZnRwOic6IHRydWUsXG4gICAgICAnZ29waGVyOic6IHRydWUsXG4gICAgICAnZmlsZTonOiB0cnVlXG4gICAgfSxcbiAgICBxdWVyeXN0cmluZyA9IHJlcXVpcmUoJ3F1ZXJ5c3RyaW5nJyk7XG5cbmZ1bmN0aW9uIHVybFBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKHVybCAmJiB1dGlsLmlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghdXRpbC5pc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIC8vIENvcHkgY2hyb21lLCBJRSwgb3BlcmEgYmFja3NsYXNoLWhhbmRsaW5nIGJlaGF2aW9yLlxuICAvLyBCYWNrIHNsYXNoZXMgYmVmb3JlIHRoZSBxdWVyeSBzdHJpbmcgZ2V0IGNvbnZlcnRlZCB0byBmb3J3YXJkIHNsYXNoZXNcbiAgLy8gU2VlOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MjU5MTZcbiAgdmFyIHF1ZXJ5SW5kZXggPSB1cmwuaW5kZXhPZignPycpLFxuICAgICAgc3BsaXR0ZXIgPVxuICAgICAgICAgIChxdWVyeUluZGV4ICE9PSAtMSAmJiBxdWVyeUluZGV4IDwgdXJsLmluZGV4T2YoJyMnKSkgPyAnPycgOiAnIycsXG4gICAgICB1U3BsaXQgPSB1cmwuc3BsaXQoc3BsaXR0ZXIpLFxuICAgICAgc2xhc2hSZWdleCA9IC9cXFxcL2c7XG4gIHVTcGxpdFswXSA9IHVTcGxpdFswXS5yZXBsYWNlKHNsYXNoUmVnZXgsICcvJyk7XG4gIHVybCA9IHVTcGxpdC5qb2luKHNwbGl0dGVyKTtcblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICBpZiAoIXNsYXNoZXNEZW5vdGVIb3N0ICYmIHVybC5zcGxpdCgnIycpLmxlbmd0aCA9PT0gMSkge1xuICAgIC8vIFRyeSBmYXN0IHBhdGggcmVnZXhwXG4gICAgdmFyIHNpbXBsZVBhdGggPSBzaW1wbGVQYXRoUGF0dGVybi5leGVjKHJlc3QpO1xuICAgIGlmIChzaW1wbGVQYXRoKSB7XG4gICAgICB0aGlzLnBhdGggPSByZXN0O1xuICAgICAgdGhpcy5ocmVmID0gcmVzdDtcbiAgICAgIHRoaXMucGF0aG5hbWUgPSBzaW1wbGVQYXRoWzFdO1xuICAgICAgaWYgKHNpbXBsZVBhdGhbMl0pIHtcbiAgICAgICAgdGhpcy5zZWFyY2ggPSBzaW1wbGVQYXRoWzJdO1xuICAgICAgICBpZiAocGFyc2VRdWVyeVN0cmluZykge1xuICAgICAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnNlYXJjaC5zdWJzdHIoMSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucXVlcnkgPSB0aGlzLnNlYXJjaC5zdWJzdHIoMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocGFyc2VRdWVyeVN0cmluZykge1xuICAgICAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgICAgICB0aGlzLnF1ZXJ5ID0ge307XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH1cblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueWNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHBhcnRzIG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXZlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLCBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmXG4gICAgICAvLyB5b3UgY2FsbCBpdCB3aXRoIGEgZG9tYWluIHRoYXQgYWxyZWFkeSBpcyBBU0NJSS1vbmx5LlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHB1bnljb2RlLnRvQVNDSUkodGhpcy5ob3N0bmFtZSk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgaWYgKHJlc3QuaW5kZXhPZihhZSkgPT09IC0xKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIHZhciBlc2MgPSBlbmNvZGVVUklDb21wb25lbnQoYWUpO1xuICAgICAgaWYgKGVzYyA9PT0gYWUpIHtcbiAgICAgICAgZXNjID0gZXNjYXBlKGFlKTtcbiAgICAgIH1cbiAgICAgIHJlc3QgPSByZXN0LnNwbGl0KGFlKS5qb2luKGVzYyk7XG4gICAgfVxuICB9XG5cblxuICAvLyBjaG9wIG9mZiBmcm9tIHRoZSB0YWlsIGZpcnN0LlxuICB2YXIgaGFzaCA9IHJlc3QuaW5kZXhPZignIycpO1xuICBpZiAoaGFzaCAhPT0gLTEpIHtcbiAgICAvLyBnb3QgYSBmcmFnbWVudCBzdHJpbmcuXG4gICAgdGhpcy5oYXNoID0gcmVzdC5zdWJzdHIoaGFzaCk7XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgaGFzaCk7XG4gIH1cbiAgdmFyIHFtID0gcmVzdC5pbmRleE9mKCc/Jyk7XG4gIGlmIChxbSAhPT0gLTEpIHtcbiAgICB0aGlzLnNlYXJjaCA9IHJlc3Quc3Vic3RyKHFtKTtcbiAgICB0aGlzLnF1ZXJ5ID0gcmVzdC5zdWJzdHIocW0gKyAxKTtcbiAgICBpZiAocGFyc2VRdWVyeVN0cmluZykge1xuICAgICAgdGhpcy5xdWVyeSA9IHF1ZXJ5c3RyaW5nLnBhcnNlKHRoaXMucXVlcnkpO1xuICAgIH1cbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBxbSk7XG4gIH0gZWxzZSBpZiAocGFyc2VRdWVyeVN0cmluZykge1xuICAgIC8vIG5vIHF1ZXJ5IHN0cmluZywgYnV0IHBhcnNlUXVlcnlTdHJpbmcgc3RpbGwgcmVxdWVzdGVkXG4gICAgdGhpcy5zZWFyY2ggPSAnJztcbiAgICB0aGlzLnF1ZXJ5ID0ge307XG4gIH1cbiAgaWYgKHJlc3QpIHRoaXMucGF0aG5hbWUgPSByZXN0O1xuICBpZiAoc2xhc2hlZFByb3RvY29sW2xvd2VyUHJvdG9dICYmXG4gICAgICB0aGlzLmhvc3RuYW1lICYmICF0aGlzLnBhdGhuYW1lKSB7XG4gICAgdGhpcy5wYXRobmFtZSA9ICcvJztcbiAgfVxuXG4gIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgaWYgKHRoaXMucGF0aG5hbWUgfHwgdGhpcy5zZWFyY2gpIHtcbiAgICB2YXIgcCA9IHRoaXMucGF0aG5hbWUgfHwgJyc7XG4gICAgdmFyIHMgPSB0aGlzLnNlYXJjaCB8fCAnJztcbiAgICB0aGlzLnBhdGggPSBwICsgcztcbiAgfVxuXG4gIC8vIGZpbmFsbHksIHJlY29uc3RydWN0IHRoZSBocmVmIGJhc2VkIG9uIHdoYXQgaGFzIGJlZW4gdmFsaWRhdGVkLlxuICB0aGlzLmhyZWYgPSB0aGlzLmZvcm1hdCgpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIGZvcm1hdCBhIHBhcnNlZCBvYmplY3QgaW50byBhIHVybCBzdHJpbmdcbmZ1bmN0aW9uIHVybEZvcm1hdChvYmopIHtcbiAgLy8gZW5zdXJlIGl0J3MgYW4gb2JqZWN0LCBhbmQgbm90IGEgc3RyaW5nIHVybC5cbiAgLy8gSWYgaXQncyBhbiBvYmosIHRoaXMgaXMgYSBuby1vcC5cbiAgLy8gdGhpcyB3YXksIHlvdSBjYW4gY2FsbCB1cmxfZm9ybWF0KCkgb24gc3RyaW5nc1xuICAvLyB0byBjbGVhbiB1cCBwb3RlbnRpYWxseSB3b25reSB1cmxzLlxuICBpZiAodXRpbC5pc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICB1dGlsLmlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmICh1dGlsLmlzU3RyaW5nKHJlbGF0aXZlKSkge1xuICAgIHZhciByZWwgPSBuZXcgVXJsKCk7XG4gICAgcmVsLnBhcnNlKHJlbGF0aXZlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgcmVsYXRpdmUgPSByZWw7XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gbmV3IFVybCgpO1xuICB2YXIgdGtleXMgPSBPYmplY3Qua2V5cyh0aGlzKTtcbiAgZm9yICh2YXIgdGsgPSAwOyB0ayA8IHRrZXlzLmxlbmd0aDsgdGsrKykge1xuICAgIHZhciB0a2V5ID0gdGtleXNbdGtdO1xuICAgIHJlc3VsdFt0a2V5XSA9IHRoaXNbdGtleV07XG4gIH1cblxuICAvLyBoYXNoIGlzIGFsd2F5cyBvdmVycmlkZGVuLCBubyBtYXR0ZXIgd2hhdC5cbiAgLy8gZXZlbiBocmVmPVwiXCIgd2lsbCByZW1vdmUgaXQuXG4gIHJlc3VsdC5oYXNoID0gcmVsYXRpdmUuaGFzaDtcblxuICAvLyBpZiB0aGUgcmVsYXRpdmUgdXJsIGlzIGVtcHR5LCB0aGVuIHRoZXJlJ3Mgbm90aGluZyBsZWZ0IHRvIGRvIGhlcmUuXG4gIGlmIChyZWxhdGl2ZS5ocmVmID09PSAnJykge1xuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBocmVmcyBsaWtlIC8vZm9vL2JhciBhbHdheXMgY3V0IHRvIHRoZSBwcm90b2NvbC5cbiAgaWYgKHJlbGF0aXZlLnNsYXNoZXMgJiYgIXJlbGF0aXZlLnByb3RvY29sKSB7XG4gICAgLy8gdGFrZSBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgcHJvdG9jb2wgZnJvbSByZWxhdGl2ZVxuICAgIHZhciBya2V5cyA9IE9iamVjdC5rZXlzKHJlbGF0aXZlKTtcbiAgICBmb3IgKHZhciByayA9IDA7IHJrIDwgcmtleXMubGVuZ3RoOyByaysrKSB7XG4gICAgICB2YXIgcmtleSA9IHJrZXlzW3JrXTtcbiAgICAgIGlmIChya2V5ICE9PSAncHJvdG9jb2wnKVxuICAgICAgICByZXN1bHRbcmtleV0gPSByZWxhdGl2ZVtya2V5XTtcbiAgICB9XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhyZWxhdGl2ZSk7XG4gICAgICBmb3IgKHZhciB2ID0gMDsgdiA8IGtleXMubGVuZ3RoOyB2KyspIHtcbiAgICAgICAgdmFyIGsgPSBrZXlzW3ZdO1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIXV0aWwuaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFsbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIXV0aWwuaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIXV0aWwuaXNOdWxsKHJlc3VsdC5zZWFyY2gpKSB7XG4gICAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgLy8gbm8gcGF0aCBhdCBhbGwuICBlYXN5LlxuICAgIC8vIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCB0aGUgb3RoZXIgc3R1ZmYgYWJvdmUuXG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5zZWFyY2gpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gJy8nICsgcmVzdWx0LnNlYXJjaDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaWYgYSB1cmwgRU5EcyBpbiAuIG9yIC4uLCB0aGVuIGl0IG11c3QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIC8vIGhvd2V2ZXIsIGlmIGl0IGVuZHMgaW4gYW55dGhpbmcgZWxzZSBub24tc2xhc2h5LFxuICAvLyB0aGVuIGl0IG11c3QgTk9UIGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICB2YXIgbGFzdCA9IHNyY1BhdGguc2xpY2UoLTEpWzBdO1xuICB2YXIgaGFzVHJhaWxpbmdTbGFzaCA9IChcbiAgICAgIChyZXN1bHQuaG9zdCB8fCByZWxhdGl2ZS5ob3N0IHx8IHNyY1BhdGgubGVuZ3RoID4gMSkgJiZcbiAgICAgIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHwgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbGx5IGhhcHBlbnMgaW4gY2FzZXMgbGlrZVxuICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ob3N0LnNwbGl0KCdAJykgOiBmYWxzZTtcbiAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICByZXN1bHQuaG9zdCA9IHJlc3VsdC5ob3N0bmFtZSA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICB9XG4gIH1cblxuICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyB8fCAocmVzdWx0Lmhvc3QgJiYgc3JjUGF0aC5sZW5ndGgpO1xuXG4gIGlmIChtdXN0RW5kQWJzICYmICFpc0Fic29sdXRlKSB7XG4gICAgc3JjUGF0aC51bnNoaWZ0KCcnKTtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQucGF0aG5hbWUgPSBzcmNQYXRoLmpvaW4oJy8nKTtcbiAgfVxuXG4gIC8vdG8gc3VwcG9ydCByZXF1ZXN0Lmh0dHBcbiAgaWYgKCF1dGlsLmlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICF1dGlsLmlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/url/url.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/url/util.js":
|
|
/*!**********************************!*\
|
|
!*** ./node_modules/url/util.js ***!
|
|
\**********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\n\nmodule.exports = {\n isString: function(arg) {\n return typeof(arg) === 'string';\n },\n isObject: function(arg) {\n return typeof(arg) === 'object' && arg !== null;\n },\n isNull: function(arg) {\n return arg === null;\n },\n isNullOrUndefined: function(arg) {\n return arg == null;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdXJsL3V0aWwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdXJsL3V0aWwuanM/MzVlOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc1N0cmluZzogZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHR5cGVvZihhcmcpID09PSAnc3RyaW5nJztcbiAgfSxcbiAgaXNPYmplY3Q6IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB0eXBlb2YoYXJnKSA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xuICB9LFxuICBpc051bGw6IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBhcmcgPT09IG51bGw7XG4gIH0sXG4gIGlzTnVsbE9yVW5kZWZpbmVkOiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gYXJnID09IG51bGw7XG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/url/util.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/webpack-dev-server/client/clients/BaseClient.js":
|
|
/*!*********************************************************!*\
|
|
!*** (webpack)-dev-server/client/clients/BaseClient.js ***!
|
|
\*********************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\n/* eslint-disable\n no-unused-vars\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); return Constructor; }\n\nmodule.exports = /*#__PURE__*/function () {\n function BaseClient() {\n _classCallCheck(this, BaseClient);\n }\n\n _createClass(BaseClient, null, [{\n key: \"getClientPath\",\n value: function getClientPath(options) {\n throw new Error('Client needs implementation');\n }\n }]);\n\n return BaseClient;\n}();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay1kZXYtc2VydmVyL2NsaWVudC9jbGllbnRzL0Jhc2VDbGllbnQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spLWRldi1zZXJ2ZXIvY2xpZW50L2NsaWVudHMvQmFzZUNsaWVudC5qcz83ZDlhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlXG4gIG5vLXVudXNlZC12YXJzXG4qL1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbm1vZHVsZS5leHBvcnRzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQmFzZUNsaWVudCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQmFzZUNsaWVudCk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoQmFzZUNsaWVudCwgbnVsbCwgW3tcbiAgICBrZXk6IFwiZ2V0Q2xpZW50UGF0aFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDbGllbnRQYXRoKG9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50IG5lZWRzIGltcGxlbWVudGF0aW9uJyk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEJhc2VDbGllbnQ7XG59KCk7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/webpack-dev-server/client/clients/BaseClient.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/webpack-dev-server/client/clients/SockJSClient.js":
|
|
/*!***********************************************************!*\
|
|
!*** (webpack)-dev-server/client/clients/SockJSClient.js ***!
|
|
\***********************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\n/* eslint-disable\n no-unused-vars\n*/\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\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); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nvar SockJS = __webpack_require__(/*! sockjs-client/dist/sockjs */ \"./node_modules/sockjs-client/dist/sockjs.js\");\n\nvar BaseClient = __webpack_require__(/*! ./BaseClient */ \"./node_modules/webpack-dev-server/client/clients/BaseClient.js\");\n\nmodule.exports = /*#__PURE__*/function (_BaseClient) {\n _inherits(SockJSClient, _BaseClient);\n\n var _super = _createSuper(SockJSClient);\n\n function SockJSClient(url) {\n var _this;\n\n _classCallCheck(this, SockJSClient);\n\n _this = _super.call(this);\n _this.sock = new SockJS(url);\n\n _this.sock.onerror = function (err) {// TODO: use logger to log the error event once client and client-src\n // are reorganized to have the same directory structure\n };\n\n return _this;\n }\n\n _createClass(SockJSClient, [{\n key: \"onOpen\",\n value: function onOpen(f) {\n this.sock.onopen = f;\n }\n }, {\n key: \"onClose\",\n value: function onClose(f) {\n this.sock.onclose = f;\n } // call f with the message string as the first argument\n\n }, {\n key: \"onMessage\",\n value: function onMessage(f) {\n this.sock.onmessage = function (e) {\n f(e.data);\n };\n }\n }], [{\n key: \"getClientPath\",\n value: function getClientPath(options) {\n return /*require.resolve*/(/*! ./SockJSClient */ \"./node_modules/webpack-dev-server/client/clients/SockJSClient.js\");\n }\n }]);\n\n return SockJSClient;\n}(BaseClient);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay1kZXYtc2VydmVyL2NsaWVudC9jbGllbnRzL1NvY2tKU0NsaWVudC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8od2VicGFjayktZGV2LXNlcnZlci9jbGllbnQvY2xpZW50cy9Tb2NrSlNDbGllbnQuanM/MGEzMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZVxuICBuby11bnVzZWQtdmFyc1xuKi9cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG52YXIgU29ja0pTID0gcmVxdWlyZSgnc29ja2pzLWNsaWVudC9kaXN0L3NvY2tqcycpO1xuXG52YXIgQmFzZUNsaWVudCA9IHJlcXVpcmUoJy4vQmFzZUNsaWVudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0Jhc2VDbGllbnQpIHtcbiAgX2luaGVyaXRzKFNvY2tKU0NsaWVudCwgX0Jhc2VDbGllbnQpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoU29ja0pTQ2xpZW50KTtcblxuICBmdW5jdGlvbiBTb2NrSlNDbGllbnQodXJsKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNvY2tKU0NsaWVudCk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpO1xuICAgIF90aGlzLnNvY2sgPSBuZXcgU29ja0pTKHVybCk7XG5cbiAgICBfdGhpcy5zb2NrLm9uZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7Ly8gVE9ETzogdXNlIGxvZ2dlciB0byBsb2cgdGhlIGVycm9yIGV2ZW50IG9uY2UgY2xpZW50IGFuZCBjbGllbnQtc3JjXG4gICAgICAvLyBhcmUgcmVvcmdhbml6ZWQgdG8gaGF2ZSB0aGUgc2FtZSBkaXJlY3Rvcnkgc3RydWN0dXJlXG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhTb2NrSlNDbGllbnQsIFt7XG4gICAga2V5OiBcIm9uT3BlblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbk9wZW4oZikge1xuICAgICAgdGhpcy5zb2NrLm9ub3BlbiA9IGY7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uQ2xvc2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25DbG9zZShmKSB7XG4gICAgICB0aGlzLnNvY2sub25jbG9zZSA9IGY7XG4gICAgfSAvLyBjYWxsIGYgd2l0aCB0aGUgbWVzc2FnZSBzdHJpbmcgYXMgdGhlIGZpcnN0IGFyZ3VtZW50XG5cbiAgfSwge1xuICAgIGtleTogXCJvbk1lc3NhZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25NZXNzYWdlKGYpIHtcbiAgICAgIHRoaXMuc29jay5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICBmKGUuZGF0YSk7XG4gICAgICB9O1xuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiBcImdldENsaWVudFBhdGhcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q2xpZW50UGF0aChvcHRpb25zKSB7XG4gICAgICByZXR1cm4gcmVxdWlyZS5yZXNvbHZlKCcuL1NvY2tKU0NsaWVudCcpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTb2NrSlNDbGllbnQ7XG59KEJhc2VDbGllbnQpOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/webpack-dev-server/client/clients/SockJSClient.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/webpack-dev-server/client/index.js?http://0.0.0.0:8000":
|
|
/*!*******************************************************!*\
|
|
!*** (webpack)-dev-server/client?http://0.0.0.0:8000 ***!
|
|
\*******************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("/* WEBPACK VAR INJECTION */(function(__resourceQuery) {\n/* global __resourceQuery WorkerGlobalScope self */\n\n/* eslint prefer-destructuring: off */\n\nvar stripAnsi = __webpack_require__(/*! strip-ansi */ \"./node_modules/webpack-dev-server/node_modules/strip-ansi/index.js\");\n\nvar socket = __webpack_require__(/*! ./socket */ \"./node_modules/webpack-dev-server/client/socket.js\");\n\nvar overlay = __webpack_require__(/*! ./overlay */ \"./node_modules/webpack-dev-server/client/overlay.js\");\n\nvar _require = __webpack_require__(/*! ./utils/log */ \"./node_modules/webpack-dev-server/client/utils/log.js\"),\n log = _require.log,\n setLogLevel = _require.setLogLevel;\n\nvar sendMessage = __webpack_require__(/*! ./utils/sendMessage */ \"./node_modules/webpack-dev-server/client/utils/sendMessage.js\");\n\nvar reloadApp = __webpack_require__(/*! ./utils/reloadApp */ \"./node_modules/webpack-dev-server/client/utils/reloadApp.js\");\n\nvar createSocketUrl = __webpack_require__(/*! ./utils/createSocketUrl */ \"./node_modules/webpack-dev-server/client/utils/createSocketUrl.js\");\n\nvar status = {\n isUnloading: false,\n currentHash: ''\n};\nvar options = {\n hot: false,\n hotReload: true,\n liveReload: false,\n initial: true,\n useWarningOverlay: false,\n useErrorOverlay: false,\n useProgress: false\n};\nvar socketUrl = createSocketUrl(__resourceQuery);\nself.addEventListener('beforeunload', function () {\n status.isUnloading = true;\n});\n\nif (typeof window !== 'undefined') {\n var qs = window.location.search.toLowerCase();\n options.hotReload = qs.indexOf('hotreload=false') === -1;\n}\n\nvar onSocketMessage = {\n hot: function hot() {\n options.hot = true;\n log.info('[WDS] Hot Module Replacement enabled.');\n },\n liveReload: function liveReload() {\n options.liveReload = true;\n log.info('[WDS] Live Reloading enabled.');\n },\n invalid: function invalid() {\n log.info('[WDS] App updated. Recompiling...'); // fixes #1042. overlay doesn't clear if errors are fixed but warnings remain.\n\n if (options.useWarningOverlay || options.useErrorOverlay) {\n overlay.clear();\n }\n\n sendMessage('Invalid');\n },\n hash: function hash(_hash) {\n status.currentHash = _hash;\n },\n 'still-ok': function stillOk() {\n log.info('[WDS] Nothing changed.');\n\n if (options.useWarningOverlay || options.useErrorOverlay) {\n overlay.clear();\n }\n\n sendMessage('StillOk');\n },\n 'log-level': function logLevel(level) {\n var hotCtx = __webpack_require__(\"./node_modules/webpack/hot sync ^\\\\.\\\\/log$\");\n\n if (hotCtx.keys().indexOf('./log') !== -1) {\n hotCtx('./log').setLogLevel(level);\n }\n\n setLogLevel(level);\n },\n overlay: function overlay(value) {\n if (typeof document !== 'undefined') {\n if (typeof value === 'boolean') {\n options.useWarningOverlay = false;\n options.useErrorOverlay = value;\n } else if (value) {\n options.useWarningOverlay = value.warnings;\n options.useErrorOverlay = value.errors;\n }\n }\n },\n progress: function progress(_progress) {\n if (typeof document !== 'undefined') {\n options.useProgress = _progress;\n }\n },\n 'progress-update': function progressUpdate(data) {\n if (options.useProgress) {\n log.info(\"[WDS] \".concat(data.percent, \"% - \").concat(data.msg, \".\"));\n }\n\n sendMessage('Progress', data);\n },\n ok: function ok() {\n sendMessage('Ok');\n\n if (options.useWarningOverlay || options.useErrorOverlay) {\n overlay.clear();\n }\n\n if (options.initial) {\n return options.initial = false;\n } // eslint-disable-line no-return-assign\n\n\n reloadApp(options, status);\n },\n 'content-changed': function contentChanged() {\n log.info('[WDS] Content base changed. Reloading...');\n self.location.reload();\n },\n warnings: function warnings(_warnings) {\n log.warn('[WDS] Warnings while compiling.');\n\n var strippedWarnings = _warnings.map(function (warning) {\n return stripAnsi(warning);\n });\n\n sendMessage('Warnings', strippedWarnings);\n\n for (var i = 0; i < strippedWarnings.length; i++) {\n log.warn(strippedWarnings[i]);\n }\n\n if (options.useWarningOverlay) {\n overlay.showMessage(_warnings);\n }\n\n if (options.initial) {\n return options.initial = false;\n } // eslint-disable-line no-return-assign\n\n\n reloadApp(options, status);\n },\n errors: function errors(_errors) {\n log.error('[WDS] Errors while compiling. Reload prevented.');\n\n var strippedErrors = _errors.map(function (error) {\n return stripAnsi(error);\n });\n\n sendMessage('Errors', strippedErrors);\n\n for (var i = 0; i < strippedErrors.length; i++) {\n log.error(strippedErrors[i]);\n }\n\n if (options.useErrorOverlay) {\n overlay.showMessage(_errors);\n }\n\n options.initial = false;\n },\n error: function error(_error) {\n log.error(_error);\n },\n close: function close() {\n log.error('[WDS] Disconnected!');\n sendMessage('Close');\n }\n};\nsocket(socketUrl, onSocketMessage);\n/* WEBPACK VAR INJECTION */}.call(this, \"?http://0.0.0.0:8000\"))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay1kZXYtc2VydmVyL2NsaWVudC9pbmRleC5qcz9odHRwOi8vMC4wLjAuMDo4MDAwLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS1kZXYtc2VydmVyL2NsaWVudD83ZTMwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBfX3Jlc291cmNlUXVlcnkgV29ya2VyR2xvYmFsU2NvcGUgc2VsZiAqL1xuXG4vKiBlc2xpbnQgcHJlZmVyLWRlc3RydWN0dXJpbmc6IG9mZiAqL1xuXG52YXIgc3RyaXBBbnNpID0gcmVxdWlyZSgnc3RyaXAtYW5zaScpO1xuXG52YXIgc29ja2V0ID0gcmVxdWlyZSgnLi9zb2NrZXQnKTtcblxudmFyIG92ZXJsYXkgPSByZXF1aXJlKCcuL292ZXJsYXknKTtcblxudmFyIF9yZXF1aXJlID0gcmVxdWlyZSgnLi91dGlscy9sb2cnKSxcbiAgICBsb2cgPSBfcmVxdWlyZS5sb2csXG4gICAgc2V0TG9nTGV2ZWwgPSBfcmVxdWlyZS5zZXRMb2dMZXZlbDtcblxudmFyIHNlbmRNZXNzYWdlID0gcmVxdWlyZSgnLi91dGlscy9zZW5kTWVzc2FnZScpO1xuXG52YXIgcmVsb2FkQXBwID0gcmVxdWlyZSgnLi91dGlscy9yZWxvYWRBcHAnKTtcblxudmFyIGNyZWF0ZVNvY2tldFVybCA9IHJlcXVpcmUoJy4vdXRpbHMvY3JlYXRlU29ja2V0VXJsJyk7XG5cbnZhciBzdGF0dXMgPSB7XG4gIGlzVW5sb2FkaW5nOiBmYWxzZSxcbiAgY3VycmVudEhhc2g6ICcnXG59O1xudmFyIG9wdGlvbnMgPSB7XG4gIGhvdDogZmFsc2UsXG4gIGhvdFJlbG9hZDogdHJ1ZSxcbiAgbGl2ZVJlbG9hZDogZmFsc2UsXG4gIGluaXRpYWw6IHRydWUsXG4gIHVzZVdhcm5pbmdPdmVybGF5OiBmYWxzZSxcbiAgdXNlRXJyb3JPdmVybGF5OiBmYWxzZSxcbiAgdXNlUHJvZ3Jlc3M6IGZhbHNlXG59O1xudmFyIHNvY2tldFVybCA9IGNyZWF0ZVNvY2tldFVybChfX3Jlc291cmNlUXVlcnkpO1xuc2VsZi5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBmdW5jdGlvbiAoKSB7XG4gIHN0YXR1cy5pc1VubG9hZGluZyA9IHRydWU7XG59KTtcblxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIHZhciBxcyA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gudG9Mb3dlckNhc2UoKTtcbiAgb3B0aW9ucy5ob3RSZWxvYWQgPSBxcy5pbmRleE9mKCdob3RyZWxvYWQ9ZmFsc2UnKSA9PT0gLTE7XG59XG5cbnZhciBvblNvY2tldE1lc3NhZ2UgPSB7XG4gIGhvdDogZnVuY3Rpb24gaG90KCkge1xuICAgIG9wdGlvbnMuaG90ID0gdHJ1ZTtcbiAgICBsb2cuaW5mbygnW1dEU10gSG90IE1vZHVsZSBSZXBsYWNlbWVudCBlbmFibGVkLicpO1xuICB9LFxuICBsaXZlUmVsb2FkOiBmdW5jdGlvbiBsaXZlUmVsb2FkKCkge1xuICAgIG9wdGlvbnMubGl2ZVJlbG9hZCA9IHRydWU7XG4gICAgbG9nLmluZm8oJ1tXRFNdIExpdmUgUmVsb2FkaW5nIGVuYWJsZWQuJyk7XG4gIH0sXG4gIGludmFsaWQ6IGZ1bmN0aW9uIGludmFsaWQoKSB7XG4gICAgbG9nLmluZm8oJ1tXRFNdIEFwcCB1cGRhdGVkLiBSZWNvbXBpbGluZy4uLicpOyAvLyBmaXhlcyAjMTA0Mi4gb3ZlcmxheSBkb2Vzbid0IGNsZWFyIGlmIGVycm9ycyBhcmUgZml4ZWQgYnV0IHdhcm5pbmdzIHJlbWFpbi5cblxuICAgIGlmIChvcHRpb25zLnVzZVdhcm5pbmdPdmVybGF5IHx8IG9wdGlvbnMudXNlRXJyb3JPdmVybGF5KSB7XG4gICAgICBvdmVybGF5LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgc2VuZE1lc3NhZ2UoJ0ludmFsaWQnKTtcbiAgfSxcbiAgaGFzaDogZnVuY3Rpb24gaGFzaChfaGFzaCkge1xuICAgIHN0YXR1cy5jdXJyZW50SGFzaCA9IF9oYXNoO1xuICB9LFxuICAnc3RpbGwtb2snOiBmdW5jdGlvbiBzdGlsbE9rKCkge1xuICAgIGxvZy5pbmZvKCdbV0RTXSBOb3RoaW5nIGNoYW5nZWQuJyk7XG5cbiAgICBpZiAob3B0aW9ucy51c2VXYXJuaW5nT3ZlcmxheSB8fCBvcHRpb25zLnVzZUVycm9yT3ZlcmxheSkge1xuICAgICAgb3ZlcmxheS5jbGVhcigpO1xuICAgIH1cblxuICAgIHNlbmRNZXNzYWdlKCdTdGlsbE9rJyk7XG4gIH0sXG4gICdsb2ctbGV2ZWwnOiBmdW5jdGlvbiBsb2dMZXZlbChsZXZlbCkge1xuICAgIHZhciBob3RDdHggPSByZXF1aXJlLmNvbnRleHQoJ3dlYnBhY2svaG90JywgZmFsc2UsIC9eXFwuXFwvbG9nJC8pO1xuXG4gICAgaWYgKGhvdEN0eC5rZXlzKCkuaW5kZXhPZignLi9sb2cnKSAhPT0gLTEpIHtcbiAgICAgIGhvdEN0eCgnLi9sb2cnKS5zZXRMb2dMZXZlbChsZXZlbCk7XG4gICAgfVxuXG4gICAgc2V0TG9nTGV2ZWwobGV2ZWwpO1xuICB9LFxuICBvdmVybGF5OiBmdW5jdGlvbiBvdmVybGF5KHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgICBvcHRpb25zLnVzZVdhcm5pbmdPdmVybGF5ID0gZmFsc2U7XG4gICAgICAgIG9wdGlvbnMudXNlRXJyb3JPdmVybGF5ID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICAgIG9wdGlvbnMudXNlV2FybmluZ092ZXJsYXkgPSB2YWx1ZS53YXJuaW5ncztcbiAgICAgICAgb3B0aW9ucy51c2VFcnJvck92ZXJsYXkgPSB2YWx1ZS5lcnJvcnM7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBwcm9ncmVzczogZnVuY3Rpb24gcHJvZ3Jlc3MoX3Byb2dyZXNzKSB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG9wdGlvbnMudXNlUHJvZ3Jlc3MgPSBfcHJvZ3Jlc3M7XG4gICAgfVxuICB9LFxuICAncHJvZ3Jlc3MtdXBkYXRlJzogZnVuY3Rpb24gcHJvZ3Jlc3NVcGRhdGUoZGF0YSkge1xuICAgIGlmIChvcHRpb25zLnVzZVByb2dyZXNzKSB7XG4gICAgICBsb2cuaW5mbyhcIltXRFNdIFwiLmNvbmNhdChkYXRhLnBlcmNlbnQsIFwiJSAtIFwiKS5jb25jYXQoZGF0YS5tc2csIFwiLlwiKSk7XG4gICAgfVxuXG4gICAgc2VuZE1lc3NhZ2UoJ1Byb2dyZXNzJywgZGF0YSk7XG4gIH0sXG4gIG9rOiBmdW5jdGlvbiBvaygpIHtcbiAgICBzZW5kTWVzc2FnZSgnT2snKTtcblxuICAgIGlmIChvcHRpb25zLnVzZVdhcm5pbmdPdmVybGF5IHx8IG9wdGlvbnMudXNlRXJyb3JPdmVybGF5KSB7XG4gICAgICBvdmVybGF5LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuaW5pdGlhbCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuaW5pdGlhbCA9IGZhbHNlO1xuICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXR1cm4tYXNzaWduXG5cblxuICAgIHJlbG9hZEFwcChvcHRpb25zLCBzdGF0dXMpO1xuICB9LFxuICAnY29udGVudC1jaGFuZ2VkJzogZnVuY3Rpb24gY29udGVudENoYW5nZWQoKSB7XG4gICAgbG9nLmluZm8oJ1tXRFNdIENvbnRlbnQgYmFzZSBjaGFuZ2VkLiBSZWxvYWRpbmcuLi4nKTtcbiAgICBzZWxmLmxvY2F0aW9uLnJlbG9hZCgpO1xuICB9LFxuICB3YXJuaW5nczogZnVuY3Rpb24gd2FybmluZ3MoX3dhcm5pbmdzKSB7XG4gICAgbG9nLndhcm4oJ1tXRFNdIFdhcm5pbmdzIHdoaWxlIGNvbXBpbGluZy4nKTtcblxuICAgIHZhciBzdHJpcHBlZFdhcm5pbmdzID0gX3dhcm5pbmdzLm1hcChmdW5jdGlvbiAod2FybmluZykge1xuICAgICAgcmV0dXJuIHN0cmlwQW5zaSh3YXJuaW5nKTtcbiAgICB9KTtcblxuICAgIHNlbmRNZXNzYWdlKCdXYXJuaW5ncycsIHN0cmlwcGVkV2FybmluZ3MpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpcHBlZFdhcm5pbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsb2cud2FybihzdHJpcHBlZFdhcm5pbmdzW2ldKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy51c2VXYXJuaW5nT3ZlcmxheSkge1xuICAgICAgb3ZlcmxheS5zaG93TWVzc2FnZShfd2FybmluZ3MpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmluaXRpYWwpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmluaXRpYWwgPSBmYWxzZTtcbiAgICB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmV0dXJuLWFzc2lnblxuXG5cbiAgICByZWxvYWRBcHAob3B0aW9ucywgc3RhdHVzKTtcbiAgfSxcbiAgZXJyb3JzOiBmdW5jdGlvbiBlcnJvcnMoX2Vycm9ycykge1xuICAgIGxvZy5lcnJvcignW1dEU10gRXJyb3JzIHdoaWxlIGNvbXBpbGluZy4gUmVsb2FkIHByZXZlbnRlZC4nKTtcblxuICAgIHZhciBzdHJpcHBlZEVycm9ycyA9IF9lcnJvcnMubWFwKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgcmV0dXJuIHN0cmlwQW5zaShlcnJvcik7XG4gICAgfSk7XG5cbiAgICBzZW5kTWVzc2FnZSgnRXJyb3JzJywgc3RyaXBwZWRFcnJvcnMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpcHBlZEVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgbG9nLmVycm9yKHN0cmlwcGVkRXJyb3JzW2ldKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy51c2VFcnJvck92ZXJsYXkpIHtcbiAgICAgIG92ZXJsYXkuc2hvd01lc3NhZ2UoX2Vycm9ycyk7XG4gICAgfVxuXG4gICAgb3B0aW9ucy5pbml0aWFsID0gZmFsc2U7XG4gIH0sXG4gIGVycm9yOiBmdW5jdGlvbiBlcnJvcihfZXJyb3IpIHtcbiAgICBsb2cuZXJyb3IoX2Vycm9yKTtcbiAgfSxcbiAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgIGxvZy5lcnJvcignW1dEU10gRGlzY29ubmVjdGVkIScpO1xuICAgIHNlbmRNZXNzYWdlKCdDbG9zZScpO1xuICB9XG59O1xuc29ja2V0KHNvY2tldFVybCwgb25Tb2NrZXRNZXNzYWdlKTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/webpack-dev-server/client/index.js?http://0.0.0.0:8000\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/webpack-dev-server/client/overlay.js":
|
|
/*!**********************************************!*\
|
|
!*** (webpack)-dev-server/client/overlay.js ***!
|
|
\**********************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval(" // The error overlay is inspired (and mostly copied) from Create React App (https://github.com/facebookincubator/create-react-app)\n// They, in turn, got inspired by webpack-hot-middleware (https://github.com/glenjamin/webpack-hot-middleware).\n\nvar ansiHTML = __webpack_require__(/*! ansi-html */ \"./node_modules/ansi-html/index.js\");\n\nvar _require = __webpack_require__(/*! html-entities */ \"./node_modules/html-entities/lib/index.js\"),\n AllHtmlEntities = _require.AllHtmlEntities;\n\nvar entities = new AllHtmlEntities();\nvar colors = {\n reset: ['transparent', 'transparent'],\n black: '181818',\n red: 'E36049',\n green: 'B3CB74',\n yellow: 'FFD080',\n blue: '7CAFC2',\n magenta: '7FACCA',\n cyan: 'C3C2EF',\n lightgrey: 'EBE7E3',\n darkgrey: '6D7891'\n};\nvar overlayIframe = null;\nvar overlayDiv = null;\nvar lastOnOverlayDivReady = null;\nansiHTML.setColors(colors);\n\nfunction createOverlayIframe(onIframeLoad) {\n var iframe = document.createElement('iframe');\n iframe.id = 'webpack-dev-server-client-overlay';\n iframe.src = 'about:blank';\n iframe.style.position = 'fixed';\n iframe.style.left = 0;\n iframe.style.top = 0;\n iframe.style.right = 0;\n iframe.style.bottom = 0;\n iframe.style.width = '100vw';\n iframe.style.height = '100vh';\n iframe.style.border = 'none';\n iframe.style.zIndex = 9999999999;\n iframe.onload = onIframeLoad;\n return iframe;\n}\n\nfunction addOverlayDivTo(iframe) {\n var div = iframe.contentDocument.createElement('div');\n div.id = 'webpack-dev-server-client-overlay-div';\n div.style.position = 'fixed';\n div.style.boxSizing = 'border-box';\n div.style.left = 0;\n div.style.top = 0;\n div.style.right = 0;\n div.style.bottom = 0;\n div.style.width = '100vw';\n div.style.height = '100vh';\n div.style.backgroundColor = 'rgba(0, 0, 0, 0.85)';\n div.style.color = '#E8E8E8';\n div.style.fontFamily = 'Menlo, Consolas, monospace';\n div.style.fontSize = 'large';\n div.style.padding = '2rem';\n div.style.lineHeight = '1.2';\n div.style.whiteSpace = 'pre-wrap';\n div.style.overflow = 'auto';\n iframe.contentDocument.body.appendChild(div);\n return div;\n}\n\nfunction ensureOverlayDivExists(onOverlayDivReady) {\n if (overlayDiv) {\n // Everything is ready, call the callback right away.\n onOverlayDivReady(overlayDiv);\n return;\n } // Creating an iframe may be asynchronous so we'll schedule the callback.\n // In case of multiple calls, last callback wins.\n\n\n lastOnOverlayDivReady = onOverlayDivReady;\n\n if (overlayIframe) {\n // We've already created it.\n return;\n } // Create iframe and, when it is ready, a div inside it.\n\n\n overlayIframe = createOverlayIframe(function () {\n overlayDiv = addOverlayDivTo(overlayIframe); // Now we can talk!\n\n lastOnOverlayDivReady(overlayDiv);\n }); // Zalgo alert: onIframeLoad() will be called either synchronously\n // or asynchronously depending on the browser.\n // We delay adding it so `overlayIframe` is set when `onIframeLoad` fires.\n\n document.body.appendChild(overlayIframe);\n} // Successful compilation.\n\n\nfunction clear() {\n if (!overlayDiv) {\n // It is not there in the first place.\n return;\n } // Clean up and reset internal state.\n\n\n document.body.removeChild(overlayIframe);\n overlayDiv = null;\n overlayIframe = null;\n lastOnOverlayDivReady = null;\n} // Compilation with errors (e.g. syntax error or missing modules).\n\n\nfunction showMessage(messages) {\n ensureOverlayDivExists(function (div) {\n // Make it look similar to our terminal.\n div.innerHTML = \"<span style=\\\"color: #\".concat(colors.red, \"\\\">Failed to compile.</span><br><br>\").concat(ansiHTML(entities.encode(messages[0])));\n });\n}\n\nmodule.exports = {\n clear: clear,\n showMessage: showMessage\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay1kZXYtc2VydmVyL2NsaWVudC9vdmVybGF5LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS1kZXYtc2VydmVyL2NsaWVudC9vdmVybGF5LmpzPzJhYzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnOyAvLyBUaGUgZXJyb3Igb3ZlcmxheSBpcyBpbnNwaXJlZCAoYW5kIG1vc3RseSBjb3BpZWQpIGZyb20gQ3JlYXRlIFJlYWN0IEFwcCAoaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29raW5jdWJhdG9yL2NyZWF0ZS1yZWFjdC1hcHApXG4vLyBUaGV5LCBpbiB0dXJuLCBnb3QgaW5zcGlyZWQgYnkgd2VicGFjay1ob3QtbWlkZGxld2FyZSAoaHR0cHM6Ly9naXRodWIuY29tL2dsZW5qYW1pbi93ZWJwYWNrLWhvdC1taWRkbGV3YXJlKS5cblxudmFyIGFuc2lIVE1MID0gcmVxdWlyZSgnYW5zaS1odG1sJyk7XG5cbnZhciBfcmVxdWlyZSA9IHJlcXVpcmUoJ2h0bWwtZW50aXRpZXMnKSxcbiAgICBBbGxIdG1sRW50aXRpZXMgPSBfcmVxdWlyZS5BbGxIdG1sRW50aXRpZXM7XG5cbnZhciBlbnRpdGllcyA9IG5ldyBBbGxIdG1sRW50aXRpZXMoKTtcbnZhciBjb2xvcnMgPSB7XG4gIHJlc2V0OiBbJ3RyYW5zcGFyZW50JywgJ3RyYW5zcGFyZW50J10sXG4gIGJsYWNrOiAnMTgxODE4JyxcbiAgcmVkOiAnRTM2MDQ5JyxcbiAgZ3JlZW46ICdCM0NCNzQnLFxuICB5ZWxsb3c6ICdGRkQwODAnLFxuICBibHVlOiAnN0NBRkMyJyxcbiAgbWFnZW50YTogJzdGQUNDQScsXG4gIGN5YW46ICdDM0MyRUYnLFxuICBsaWdodGdyZXk6ICdFQkU3RTMnLFxuICBkYXJrZ3JleTogJzZENzg5MSdcbn07XG52YXIgb3ZlcmxheUlmcmFtZSA9IG51bGw7XG52YXIgb3ZlcmxheURpdiA9IG51bGw7XG52YXIgbGFzdE9uT3ZlcmxheURpdlJlYWR5ID0gbnVsbDtcbmFuc2lIVE1MLnNldENvbG9ycyhjb2xvcnMpO1xuXG5mdW5jdGlvbiBjcmVhdGVPdmVybGF5SWZyYW1lKG9uSWZyYW1lTG9hZCkge1xuICB2YXIgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gIGlmcmFtZS5pZCA9ICd3ZWJwYWNrLWRldi1zZXJ2ZXItY2xpZW50LW92ZXJsYXknO1xuICBpZnJhbWUuc3JjID0gJ2Fib3V0OmJsYW5rJztcbiAgaWZyYW1lLnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcbiAgaWZyYW1lLnN0eWxlLmxlZnQgPSAwO1xuICBpZnJhbWUuc3R5bGUudG9wID0gMDtcbiAgaWZyYW1lLnN0eWxlLnJpZ2h0ID0gMDtcbiAgaWZyYW1lLnN0eWxlLmJvdHRvbSA9IDA7XG4gIGlmcmFtZS5zdHlsZS53aWR0aCA9ICcxMDB2dyc7XG4gIGlmcmFtZS5zdHlsZS5oZWlnaHQgPSAnMTAwdmgnO1xuICBpZnJhbWUuc3R5bGUuYm9yZGVyID0gJ25vbmUnO1xuICBpZnJhbWUuc3R5bGUuekluZGV4ID0gOTk5OTk5OTk5OTtcbiAgaWZyYW1lLm9ubG9hZCA9IG9uSWZyYW1lTG9hZDtcbiAgcmV0dXJuIGlmcmFtZTtcbn1cblxuZnVuY3Rpb24gYWRkT3ZlcmxheURpdlRvKGlmcmFtZSkge1xuICB2YXIgZGl2ID0gaWZyYW1lLmNvbnRlbnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgZGl2LmlkID0gJ3dlYnBhY2stZGV2LXNlcnZlci1jbGllbnQtb3ZlcmxheS1kaXYnO1xuICBkaXYuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICBkaXYuc3R5bGUuYm94U2l6aW5nID0gJ2JvcmRlci1ib3gnO1xuICBkaXYuc3R5bGUubGVmdCA9IDA7XG4gIGRpdi5zdHlsZS50b3AgPSAwO1xuICBkaXYuc3R5bGUucmlnaHQgPSAwO1xuICBkaXYuc3R5bGUuYm90dG9tID0gMDtcbiAgZGl2LnN0eWxlLndpZHRoID0gJzEwMHZ3JztcbiAgZGl2LnN0eWxlLmhlaWdodCA9ICcxMDB2aCc7XG4gIGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAncmdiYSgwLCAwLCAwLCAwLjg1KSc7XG4gIGRpdi5zdHlsZS5jb2xvciA9ICcjRThFOEU4JztcbiAgZGl2LnN0eWxlLmZvbnRGYW1pbHkgPSAnTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UnO1xuICBkaXYuc3R5bGUuZm9udFNpemUgPSAnbGFyZ2UnO1xuICBkaXYuc3R5bGUucGFkZGluZyA9ICcycmVtJztcbiAgZGl2LnN0eWxlLmxpbmVIZWlnaHQgPSAnMS4yJztcbiAgZGl2LnN0eWxlLndoaXRlU3BhY2UgPSAncHJlLXdyYXAnO1xuICBkaXYuc3R5bGUub3ZlcmZsb3cgPSAnYXV0byc7XG4gIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpO1xuICByZXR1cm4gZGl2O1xufVxuXG5mdW5jdGlvbiBlbnN1cmVPdmVybGF5RGl2RXhpc3RzKG9uT3ZlcmxheURpdlJlYWR5KSB7XG4gIGlmIChvdmVybGF5RGl2KSB7XG4gICAgLy8gRXZlcnl0aGluZyBpcyByZWFkeSwgY2FsbCB0aGUgY2FsbGJhY2sgcmlnaHQgYXdheS5cbiAgICBvbk92ZXJsYXlEaXZSZWFkeShvdmVybGF5RGl2KTtcbiAgICByZXR1cm47XG4gIH0gLy8gQ3JlYXRpbmcgYW4gaWZyYW1lIG1heSBiZSBhc3luY2hyb25vdXMgc28gd2UnbGwgc2NoZWR1bGUgdGhlIGNhbGxiYWNrLlxuICAvLyBJbiBjYXNlIG9mIG11bHRpcGxlIGNhbGxzLCBsYXN0IGNhbGxiYWNrIHdpbnMuXG5cblxuICBsYXN0T25PdmVybGF5RGl2UmVhZHkgPSBvbk92ZXJsYXlEaXZSZWFkeTtcblxuICBpZiAob3ZlcmxheUlmcmFtZSkge1xuICAgIC8vIFdlJ3ZlIGFscmVhZHkgY3JlYXRlZCBpdC5cbiAgICByZXR1cm47XG4gIH0gLy8gQ3JlYXRlIGlmcmFtZSBhbmQsIHdoZW4gaXQgaXMgcmVhZHksIGEgZGl2IGluc2lkZSBpdC5cblxuXG4gIG92ZXJsYXlJZnJhbWUgPSBjcmVhdGVPdmVybGF5SWZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICBvdmVybGF5RGl2ID0gYWRkT3ZlcmxheURpdlRvKG92ZXJsYXlJZnJhbWUpOyAvLyBOb3cgd2UgY2FuIHRhbGshXG5cbiAgICBsYXN0T25PdmVybGF5RGl2UmVhZHkob3ZlcmxheURpdik7XG4gIH0pOyAvLyBaYWxnbyBhbGVydDogb25JZnJhbWVMb2FkKCkgd2lsbCBiZSBjYWxsZWQgZWl0aGVyIHN5bmNocm9ub3VzbHlcbiAgLy8gb3IgYXN5bmNocm9ub3VzbHkgZGVwZW5kaW5nIG9uIHRoZSBicm93c2VyLlxuICAvLyBXZSBkZWxheSBhZGRpbmcgaXQgc28gYG92ZXJsYXlJZnJhbWVgIGlzIHNldCB3aGVuIGBvbklmcmFtZUxvYWRgIGZpcmVzLlxuXG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQob3ZlcmxheUlmcmFtZSk7XG59IC8vIFN1Y2Nlc3NmdWwgY29tcGlsYXRpb24uXG5cblxuZnVuY3Rpb24gY2xlYXIoKSB7XG4gIGlmICghb3ZlcmxheURpdikge1xuICAgIC8vIEl0IGlzIG5vdCB0aGVyZSBpbiB0aGUgZmlyc3QgcGxhY2UuXG4gICAgcmV0dXJuO1xuICB9IC8vIENsZWFuIHVwIGFuZCByZXNldCBpbnRlcm5hbCBzdGF0ZS5cblxuXG4gIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQob3ZlcmxheUlmcmFtZSk7XG4gIG92ZXJsYXlEaXYgPSBudWxsO1xuICBvdmVybGF5SWZyYW1lID0gbnVsbDtcbiAgbGFzdE9uT3ZlcmxheURpdlJlYWR5ID0gbnVsbDtcbn0gLy8gQ29tcGlsYXRpb24gd2l0aCBlcnJvcnMgKGUuZy4gc3ludGF4IGVycm9yIG9yIG1pc3NpbmcgbW9kdWxlcykuXG5cblxuZnVuY3Rpb24gc2hvd01lc3NhZ2UobWVzc2FnZXMpIHtcbiAgZW5zdXJlT3ZlcmxheURpdkV4aXN0cyhmdW5jdGlvbiAoZGl2KSB7XG4gICAgLy8gTWFrZSBpdCBsb29rIHNpbWlsYXIgdG8gb3VyIHRlcm1pbmFsLlxuICAgIGRpdi5pbm5lckhUTUwgPSBcIjxzcGFuIHN0eWxlPVxcXCJjb2xvcjogI1wiLmNvbmNhdChjb2xvcnMucmVkLCBcIlxcXCI+RmFpbGVkIHRvIGNvbXBpbGUuPC9zcGFuPjxicj48YnI+XCIpLmNvbmNhdChhbnNpSFRNTChlbnRpdGllcy5lbmNvZGUobWVzc2FnZXNbMF0pKSk7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY2xlYXI6IGNsZWFyLFxuICBzaG93TWVzc2FnZTogc2hvd01lc3NhZ2Vcbn07Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/webpack-dev-server/client/overlay.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/webpack-dev-server/client/socket.js":
|
|
/*!*********************************************!*\
|
|
!*** (webpack)-dev-server/client/socket.js ***!
|
|
\*********************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("/* WEBPACK VAR INJECTION */(function(__webpack_dev_server_client__) {\n/* global __webpack_dev_server_client__ */\n\n/* eslint-disable\n camelcase\n*/\n// this SockJSClient is here as a default fallback, in case inline mode\n// is off or the client is not injected. This will be switched to\n// WebsocketClient when it becomes the default\n// important: the path to SockJSClient here is made to work in the 'client'\n// directory, but is updated via the webpack compilation when compiled from\n// the 'client-src' directory\n\nvar Client = typeof __webpack_dev_server_client__ !== 'undefined' ? __webpack_dev_server_client__ : // eslint-disable-next-line import/no-unresolved\n__webpack_require__(/*! ./clients/SockJSClient */ \"./node_modules/webpack-dev-server/client/clients/SockJSClient.js\");\nvar retries = 0;\nvar client = null;\n\nvar socket = function initSocket(url, handlers) {\n client = new Client(url);\n client.onOpen(function () {\n retries = 0;\n });\n client.onClose(function () {\n if (retries === 0) {\n handlers.close();\n } // Try to reconnect.\n\n\n client = null; // After 10 retries stop trying, to prevent logspam.\n\n if (retries <= 10) {\n // Exponentially increase timeout to reconnect.\n // Respectfully copied from the package `got`.\n // eslint-disable-next-line no-mixed-operators, no-restricted-properties\n var retryInMs = 1000 * Math.pow(2, retries) + Math.random() * 100;\n retries += 1;\n setTimeout(function () {\n socket(url, handlers);\n }, retryInMs);\n }\n });\n client.onMessage(function (data) {\n var msg = JSON.parse(data);\n\n if (handlers[msg.type]) {\n handlers[msg.type](msg.data);\n }\n });\n};\n\nmodule.exports = socket;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! (webpack)-dev-server/client/clients/SockJSClient.js */ \"./node_modules/webpack-dev-server/client/clients/SockJSClient.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay1kZXYtc2VydmVyL2NsaWVudC9zb2NrZXQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spLWRldi1zZXJ2ZXIvY2xpZW50L3NvY2tldC5qcz9lMjljIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBfX3dlYnBhY2tfZGV2X3NlcnZlcl9jbGllbnRfXyAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZVxuICBjYW1lbGNhc2VcbiovXG4vLyB0aGlzIFNvY2tKU0NsaWVudCBpcyBoZXJlIGFzIGEgZGVmYXVsdCBmYWxsYmFjaywgaW4gY2FzZSBpbmxpbmUgbW9kZVxuLy8gaXMgb2ZmIG9yIHRoZSBjbGllbnQgaXMgbm90IGluamVjdGVkLiBUaGlzIHdpbGwgYmUgc3dpdGNoZWQgdG9cbi8vIFdlYnNvY2tldENsaWVudCB3aGVuIGl0IGJlY29tZXMgdGhlIGRlZmF1bHRcbi8vIGltcG9ydGFudDogdGhlIHBhdGggdG8gU29ja0pTQ2xpZW50IGhlcmUgaXMgbWFkZSB0byB3b3JrIGluIHRoZSAnY2xpZW50J1xuLy8gZGlyZWN0b3J5LCBidXQgaXMgdXBkYXRlZCB2aWEgdGhlIHdlYnBhY2sgY29tcGlsYXRpb24gd2hlbiBjb21waWxlZCBmcm9tXG4vLyB0aGUgJ2NsaWVudC1zcmMnIGRpcmVjdG9yeVxuXG52YXIgQ2xpZW50ID0gdHlwZW9mIF9fd2VicGFja19kZXZfc2VydmVyX2NsaWVudF9fICE9PSAndW5kZWZpbmVkJyA/IF9fd2VicGFja19kZXZfc2VydmVyX2NsaWVudF9fIDogLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnJlc29sdmVkXG5yZXF1aXJlKCcuL2NsaWVudHMvU29ja0pTQ2xpZW50Jyk7XG52YXIgcmV0cmllcyA9IDA7XG52YXIgY2xpZW50ID0gbnVsbDtcblxudmFyIHNvY2tldCA9IGZ1bmN0aW9uIGluaXRTb2NrZXQodXJsLCBoYW5kbGVycykge1xuICBjbGllbnQgPSBuZXcgQ2xpZW50KHVybCk7XG4gIGNsaWVudC5vbk9wZW4oZnVuY3Rpb24gKCkge1xuICAgIHJldHJpZXMgPSAwO1xuICB9KTtcbiAgY2xpZW50Lm9uQ2xvc2UoZnVuY3Rpb24gKCkge1xuICAgIGlmIChyZXRyaWVzID09PSAwKSB7XG4gICAgICBoYW5kbGVycy5jbG9zZSgpO1xuICAgIH0gLy8gVHJ5IHRvIHJlY29ubmVjdC5cblxuXG4gICAgY2xpZW50ID0gbnVsbDsgLy8gQWZ0ZXIgMTAgcmV0cmllcyBzdG9wIHRyeWluZywgdG8gcHJldmVudCBsb2dzcGFtLlxuXG4gICAgaWYgKHJldHJpZXMgPD0gMTApIHtcbiAgICAgIC8vIEV4cG9uZW50aWFsbHkgaW5jcmVhc2UgdGltZW91dCB0byByZWNvbm5lY3QuXG4gICAgICAvLyBSZXNwZWN0ZnVsbHkgY29waWVkIGZyb20gdGhlIHBhY2thZ2UgYGdvdGAuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWl4ZWQtb3BlcmF0b3JzLCBuby1yZXN0cmljdGVkLXByb3BlcnRpZXNcbiAgICAgIHZhciByZXRyeUluTXMgPSAxMDAwICogTWF0aC5wb3coMiwgcmV0cmllcykgKyBNYXRoLnJhbmRvbSgpICogMTAwO1xuICAgICAgcmV0cmllcyArPSAxO1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNvY2tldCh1cmwsIGhhbmRsZXJzKTtcbiAgICAgIH0sIHJldHJ5SW5Ncyk7XG4gICAgfVxuICB9KTtcbiAgY2xpZW50Lm9uTWVzc2FnZShmdW5jdGlvbiAoZGF0YSkge1xuICAgIHZhciBtc2cgPSBKU09OLnBhcnNlKGRhdGEpO1xuXG4gICAgaWYgKGhhbmRsZXJzW21zZy50eXBlXSkge1xuICAgICAgaGFuZGxlcnNbbXNnLnR5cGVdKG1zZy5kYXRhKTtcbiAgICB9XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBzb2NrZXQ7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/webpack-dev-server/client/socket.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/webpack-dev-server/client/utils/createSocketUrl.js":
|
|
/*!************************************************************!*\
|
|
!*** (webpack)-dev-server/client/utils/createSocketUrl.js ***!
|
|
\************************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\n/* global self */\n\nvar url = __webpack_require__(/*! url */ \"./node_modules/url/url.js\");\n\nvar getCurrentScriptSource = __webpack_require__(/*! ./getCurrentScriptSource */ \"./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js\");\n\nfunction createSocketUrl(resourceQuery, currentLocation) {\n var urlParts;\n\n if (typeof resourceQuery === 'string' && resourceQuery !== '') {\n // If this bundle is inlined, use the resource query to get the correct url.\n // format is like `?http://0.0.0.0:8096&sockPort=8097&sockHost=localhost`\n urlParts = url.parse(resourceQuery // strip leading `?` from query string to get a valid URL\n .substr(1) // replace first `&` with `?` to have a valid query string\n .replace('&', '?'), true);\n } else {\n // Else, get the url from the <script> this file was called with.\n var scriptHost = getCurrentScriptSource();\n urlParts = url.parse(scriptHost || '/', true, true);\n } // Use parameter to allow passing location in unit tests\n\n\n if (typeof currentLocation === 'string' && currentLocation !== '') {\n currentLocation = url.parse(currentLocation);\n } else {\n currentLocation = self.location;\n }\n\n return getSocketUrl(urlParts, currentLocation);\n}\n/*\n * Gets socket URL based on Script Source/Location\n * (scriptSrc: URL, location: URL) -> URL\n */\n\n\nfunction getSocketUrl(urlParts, loc) {\n var auth = urlParts.auth,\n query = urlParts.query;\n var hostname = urlParts.hostname,\n protocol = urlParts.protocol,\n port = urlParts.port;\n\n if (!port || port === '0') {\n port = loc.port;\n } // check ipv4 and ipv6 `all hostname`\n // why do we need this check?\n // hostname n/a for file protocol (example, when using electron, ionic)\n // see: https://github.com/webpack/webpack-dev-server/pull/384\n\n\n if ((hostname === '0.0.0.0' || hostname === '::') && loc.hostname && loc.protocol.indexOf('http') === 0) {\n hostname = loc.hostname;\n } // `hostname` can be empty when the script path is relative. In that case, specifying\n // a protocol would result in an invalid URL.\n // When https is used in the app, secure websockets are always necessary\n // because the browser doesn't accept non-secure websockets.\n\n\n if (hostname && hostname !== '127.0.0.1' && (loc.protocol === 'https:' || urlParts.hostname === '0.0.0.0')) {\n protocol = loc.protocol;\n } // all of these sock url params are optionally passed in through\n // resourceQuery, so we need to fall back to the default if\n // they are not provided\n\n\n var sockHost = query.sockHost || hostname;\n var sockPath = query.sockPath || '/sockjs-node';\n var sockPort = query.sockPort || port;\n\n if (sockPort === 'location') {\n sockPort = loc.port;\n }\n\n return url.format({\n protocol: protocol,\n auth: auth,\n hostname: sockHost,\n port: sockPort,\n // If sockPath is provided it'll be passed in via the resourceQuery as a\n // query param so it has to be parsed out of the querystring in order for the\n // client to open the socket to the correct location.\n pathname: sockPath\n });\n}\n\nmodule.exports = createSocketUrl;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay1kZXYtc2VydmVyL2NsaWVudC91dGlscy9jcmVhdGVTb2NrZXRVcmwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spLWRldi1zZXJ2ZXIvY2xpZW50L3V0aWxzL2NyZWF0ZVNvY2tldFVybC5qcz8yZWY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBzZWxmICovXG5cbnZhciB1cmwgPSByZXF1aXJlKCd1cmwnKTtcblxudmFyIGdldEN1cnJlbnRTY3JpcHRTb3VyY2UgPSByZXF1aXJlKCcuL2dldEN1cnJlbnRTY3JpcHRTb3VyY2UnKTtcblxuZnVuY3Rpb24gY3JlYXRlU29ja2V0VXJsKHJlc291cmNlUXVlcnksIGN1cnJlbnRMb2NhdGlvbikge1xuICB2YXIgdXJsUGFydHM7XG5cbiAgaWYgKHR5cGVvZiByZXNvdXJjZVF1ZXJ5ID09PSAnc3RyaW5nJyAmJiByZXNvdXJjZVF1ZXJ5ICE9PSAnJykge1xuICAgIC8vIElmIHRoaXMgYnVuZGxlIGlzIGlubGluZWQsIHVzZSB0aGUgcmVzb3VyY2UgcXVlcnkgdG8gZ2V0IHRoZSBjb3JyZWN0IHVybC5cbiAgICAvLyBmb3JtYXQgaXMgbGlrZSBgP2h0dHA6Ly8wLjAuMC4wOjgwOTYmc29ja1BvcnQ9ODA5NyZzb2NrSG9zdD1sb2NhbGhvc3RgXG4gICAgdXJsUGFydHMgPSB1cmwucGFyc2UocmVzb3VyY2VRdWVyeSAvLyBzdHJpcCBsZWFkaW5nIGA/YCBmcm9tIHF1ZXJ5IHN0cmluZyB0byBnZXQgYSB2YWxpZCBVUkxcbiAgICAuc3Vic3RyKDEpIC8vIHJlcGxhY2UgZmlyc3QgYCZgIHdpdGggYD9gIHRvIGhhdmUgYSB2YWxpZCBxdWVyeSBzdHJpbmdcbiAgICAucmVwbGFjZSgnJicsICc/JyksIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIC8vIEVsc2UsIGdldCB0aGUgdXJsIGZyb20gdGhlIDxzY3JpcHQ+IHRoaXMgZmlsZSB3YXMgY2FsbGVkIHdpdGguXG4gICAgdmFyIHNjcmlwdEhvc3QgPSBnZXRDdXJyZW50U2NyaXB0U291cmNlKCk7XG4gICAgdXJsUGFydHMgPSB1cmwucGFyc2Uoc2NyaXB0SG9zdCB8fCAnLycsIHRydWUsIHRydWUpO1xuICB9IC8vIFVzZSBwYXJhbWV0ZXIgdG8gYWxsb3cgcGFzc2luZyBsb2NhdGlvbiBpbiB1bml0IHRlc3RzXG5cblxuICBpZiAodHlwZW9mIGN1cnJlbnRMb2NhdGlvbiA9PT0gJ3N0cmluZycgJiYgY3VycmVudExvY2F0aW9uICE9PSAnJykge1xuICAgIGN1cnJlbnRMb2NhdGlvbiA9IHVybC5wYXJzZShjdXJyZW50TG9jYXRpb24pO1xuICB9IGVsc2Uge1xuICAgIGN1cnJlbnRMb2NhdGlvbiA9IHNlbGYubG9jYXRpb247XG4gIH1cblxuICByZXR1cm4gZ2V0U29ja2V0VXJsKHVybFBhcnRzLCBjdXJyZW50TG9jYXRpb24pO1xufVxuLypcbiAqIEdldHMgc29ja2V0IFVSTCBiYXNlZCBvbiBTY3JpcHQgU291cmNlL0xvY2F0aW9uXG4gKiAoc2NyaXB0U3JjOiBVUkwsIGxvY2F0aW9uOiBVUkwpIC0+IFVSTFxuICovXG5cblxuZnVuY3Rpb24gZ2V0U29ja2V0VXJsKHVybFBhcnRzLCBsb2MpIHtcbiAgdmFyIGF1dGggPSB1cmxQYXJ0cy5hdXRoLFxuICAgICAgcXVlcnkgPSB1cmxQYXJ0cy5xdWVyeTtcbiAgdmFyIGhvc3RuYW1lID0gdXJsUGFydHMuaG9zdG5hbWUsXG4gICAgICBwcm90b2NvbCA9IHVybFBhcnRzLnByb3RvY29sLFxuICAgICAgcG9ydCA9IHVybFBhcnRzLnBvcnQ7XG5cbiAgaWYgKCFwb3J0IHx8IHBvcnQgPT09ICcwJykge1xuICAgIHBvcnQgPSBsb2MucG9ydDtcbiAgfSAvLyBjaGVjayBpcHY0IGFuZCBpcHY2IGBhbGwgaG9zdG5hbWVgXG4gIC8vIHdoeSBkbyB3ZSBuZWVkIHRoaXMgY2hlY2s/XG4gIC8vIGhvc3RuYW1lIG4vYSBmb3IgZmlsZSBwcm90b2NvbCAoZXhhbXBsZSwgd2hlbiB1c2luZyBlbGVjdHJvbiwgaW9uaWMpXG4gIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2svd2VicGFjay1kZXYtc2VydmVyL3B1bGwvMzg0XG5cblxuICBpZiAoKGhvc3RuYW1lID09PSAnMC4wLjAuMCcgfHwgaG9zdG5hbWUgPT09ICc6OicpICYmIGxvYy5ob3N0bmFtZSAmJiBsb2MucHJvdG9jb2wuaW5kZXhPZignaHR0cCcpID09PSAwKSB7XG4gICAgaG9zdG5hbWUgPSBsb2MuaG9zdG5hbWU7XG4gIH0gLy8gYGhvc3RuYW1lYCBjYW4gYmUgZW1wdHkgd2hlbiB0aGUgc2NyaXB0IHBhdGggaXMgcmVsYXRpdmUuIEluIHRoYXQgY2FzZSwgc3BlY2lmeWluZ1xuICAvLyBhIHByb3RvY29sIHdvdWxkIHJlc3VsdCBpbiBhbiBpbnZhbGlkIFVSTC5cbiAgLy8gV2hlbiBodHRwcyBpcyB1c2VkIGluIHRoZSBhcHAsIHNlY3VyZSB3ZWJzb2NrZXRzIGFyZSBhbHdheXMgbmVjZXNzYXJ5XG4gIC8vIGJlY2F1c2UgdGhlIGJyb3dzZXIgZG9lc24ndCBhY2NlcHQgbm9uLXNlY3VyZSB3ZWJzb2NrZXRzLlxuXG5cbiAgaWYgKGhvc3RuYW1lICYmIGhvc3RuYW1lICE9PSAnMTI3LjAuMC4xJyAmJiAobG9jLnByb3RvY29sID09PSAnaHR0cHM6JyB8fCB1cmxQYXJ0cy5ob3N0bmFtZSA9PT0gJzAuMC4wLjAnKSkge1xuICAgIHByb3RvY29sID0gbG9jLnByb3RvY29sO1xuICB9IC8vIGFsbCBvZiB0aGVzZSBzb2NrIHVybCBwYXJhbXMgYXJlIG9wdGlvbmFsbHkgcGFzc2VkIGluIHRocm91Z2hcbiAgLy8gcmVzb3VyY2VRdWVyeSwgc28gd2UgbmVlZCB0byBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgaWZcbiAgLy8gdGhleSBhcmUgbm90IHByb3ZpZGVkXG5cblxuICB2YXIgc29ja0hvc3QgPSBxdWVyeS5zb2NrSG9zdCB8fCBob3N0bmFtZTtcbiAgdmFyIHNvY2tQYXRoID0gcXVlcnkuc29ja1BhdGggfHwgJy9zb2NranMtbm9kZSc7XG4gIHZhciBzb2NrUG9ydCA9IHF1ZXJ5LnNvY2tQb3J0IHx8IHBvcnQ7XG5cbiAgaWYgKHNvY2tQb3J0ID09PSAnbG9jYXRpb24nKSB7XG4gICAgc29ja1BvcnQgPSBsb2MucG9ydDtcbiAgfVxuXG4gIHJldHVybiB1cmwuZm9ybWF0KHtcbiAgICBwcm90b2NvbDogcHJvdG9jb2wsXG4gICAgYXV0aDogYXV0aCxcbiAgICBob3N0bmFtZTogc29ja0hvc3QsXG4gICAgcG9ydDogc29ja1BvcnQsXG4gICAgLy8gSWYgc29ja1BhdGggaXMgcHJvdmlkZWQgaXQnbGwgYmUgcGFzc2VkIGluIHZpYSB0aGUgcmVzb3VyY2VRdWVyeSBhcyBhXG4gICAgLy8gcXVlcnkgcGFyYW0gc28gaXQgaGFzIHRvIGJlIHBhcnNlZCBvdXQgb2YgdGhlIHF1ZXJ5c3RyaW5nIGluIG9yZGVyIGZvciB0aGVcbiAgICAvLyBjbGllbnQgdG8gb3BlbiB0aGUgc29ja2V0IHRvIHRoZSBjb3JyZWN0IGxvY2F0aW9uLlxuICAgIHBhdGhuYW1lOiBzb2NrUGF0aFxuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVTb2NrZXRVcmw7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/webpack-dev-server/client/utils/createSocketUrl.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js":
|
|
/*!*******************************************************************!*\
|
|
!*** (webpack)-dev-server/client/utils/getCurrentScriptSource.js ***!
|
|
\*******************************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\n\nfunction getCurrentScriptSource() {\n // `document.currentScript` is the most accurate way to find the current script,\n // but is not supported in all browsers.\n if (document.currentScript) {\n return document.currentScript.getAttribute('src');\n } // Fall back to getting all scripts in the document.\n\n\n var scriptElements = document.scripts || [];\n var currentScript = scriptElements[scriptElements.length - 1];\n\n if (currentScript) {\n return currentScript.getAttribute('src');\n } // Fail as there was no script to use.\n\n\n throw new Error('[WDS] Failed to get current script source.');\n}\n\nmodule.exports = getCurrentScriptSource;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay1kZXYtc2VydmVyL2NsaWVudC91dGlscy9nZXRDdXJyZW50U2NyaXB0U291cmNlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS1kZXYtc2VydmVyL2NsaWVudC91dGlscy9nZXRDdXJyZW50U2NyaXB0U291cmNlLmpzPzg4M2EiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBnZXRDdXJyZW50U2NyaXB0U291cmNlKCkge1xuICAvLyBgZG9jdW1lbnQuY3VycmVudFNjcmlwdGAgaXMgdGhlIG1vc3QgYWNjdXJhdGUgd2F5IHRvIGZpbmQgdGhlIGN1cnJlbnQgc2NyaXB0LFxuICAvLyBidXQgaXMgbm90IHN1cHBvcnRlZCBpbiBhbGwgYnJvd3NlcnMuXG4gIGlmIChkb2N1bWVudC5jdXJyZW50U2NyaXB0KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuZ2V0QXR0cmlidXRlKCdzcmMnKTtcbiAgfSAvLyBGYWxsIGJhY2sgdG8gZ2V0dGluZyBhbGwgc2NyaXB0cyBpbiB0aGUgZG9jdW1lbnQuXG5cblxuICB2YXIgc2NyaXB0RWxlbWVudHMgPSBkb2N1bWVudC5zY3JpcHRzIHx8IFtdO1xuICB2YXIgY3VycmVudFNjcmlwdCA9IHNjcmlwdEVsZW1lbnRzW3NjcmlwdEVsZW1lbnRzLmxlbmd0aCAtIDFdO1xuXG4gIGlmIChjdXJyZW50U2NyaXB0KSB7XG4gICAgcmV0dXJuIGN1cnJlbnRTY3JpcHQuZ2V0QXR0cmlidXRlKCdzcmMnKTtcbiAgfSAvLyBGYWlsIGFzIHRoZXJlIHdhcyBubyBzY3JpcHQgdG8gdXNlLlxuXG5cbiAgdGhyb3cgbmV3IEVycm9yKCdbV0RTXSBGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgc2NyaXB0IHNvdXJjZS4nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRDdXJyZW50U2NyaXB0U291cmNlOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/webpack-dev-server/client/utils/getCurrentScriptSource.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/webpack-dev-server/client/utils/log.js":
|
|
/*!************************************************!*\
|
|
!*** (webpack)-dev-server/client/utils/log.js ***!
|
|
\************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\n\nvar log = __webpack_require__(/*! loglevel */ \"./node_modules/loglevel/lib/loglevel.js\").getLogger('webpack-dev-server');\n\nvar INFO = 'info';\nvar WARN = 'warn';\nvar ERROR = 'error';\nvar DEBUG = 'debug';\nvar TRACE = 'trace';\nvar SILENT = 'silent'; // deprecated\n// TODO: remove these at major released\n// https://github.com/webpack/webpack-dev-server/pull/1825\n\nvar WARNING = 'warning';\nvar NONE = 'none'; // Set the default log level\n\nlog.setDefaultLevel(INFO);\n\nfunction setLogLevel(level) {\n switch (level) {\n case INFO:\n case WARN:\n case ERROR:\n case DEBUG:\n case TRACE:\n log.setLevel(level);\n break;\n // deprecated\n\n case WARNING:\n // loglevel's warning name is different from webpack's\n log.setLevel('warn');\n break;\n // deprecated\n\n case NONE:\n case SILENT:\n log.disableAll();\n break;\n\n default:\n log.error(\"[WDS] Unknown clientLogLevel '\".concat(level, \"'\"));\n }\n}\n\nmodule.exports = {\n log: log,\n setLogLevel: setLogLevel\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay1kZXYtc2VydmVyL2NsaWVudC91dGlscy9sb2cuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spLWRldi1zZXJ2ZXIvY2xpZW50L3V0aWxzL2xvZy5qcz84YThhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGxvZyA9IHJlcXVpcmUoJ2xvZ2xldmVsJykuZ2V0TG9nZ2VyKCd3ZWJwYWNrLWRldi1zZXJ2ZXInKTtcblxudmFyIElORk8gPSAnaW5mbyc7XG52YXIgV0FSTiA9ICd3YXJuJztcbnZhciBFUlJPUiA9ICdlcnJvcic7XG52YXIgREVCVUcgPSAnZGVidWcnO1xudmFyIFRSQUNFID0gJ3RyYWNlJztcbnZhciBTSUxFTlQgPSAnc2lsZW50JzsgLy8gZGVwcmVjYXRlZFxuLy8gVE9ETzogcmVtb3ZlIHRoZXNlIGF0IG1ham9yIHJlbGVhc2VkXG4vLyBodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay93ZWJwYWNrLWRldi1zZXJ2ZXIvcHVsbC8xODI1XG5cbnZhciBXQVJOSU5HID0gJ3dhcm5pbmcnO1xudmFyIE5PTkUgPSAnbm9uZSc7IC8vIFNldCB0aGUgZGVmYXVsdCBsb2cgbGV2ZWxcblxubG9nLnNldERlZmF1bHRMZXZlbChJTkZPKTtcblxuZnVuY3Rpb24gc2V0TG9nTGV2ZWwobGV2ZWwpIHtcbiAgc3dpdGNoIChsZXZlbCkge1xuICAgIGNhc2UgSU5GTzpcbiAgICBjYXNlIFdBUk46XG4gICAgY2FzZSBFUlJPUjpcbiAgICBjYXNlIERFQlVHOlxuICAgIGNhc2UgVFJBQ0U6XG4gICAgICBsb2cuc2V0TGV2ZWwobGV2ZWwpO1xuICAgICAgYnJlYWs7XG4gICAgLy8gZGVwcmVjYXRlZFxuXG4gICAgY2FzZSBXQVJOSU5HOlxuICAgICAgLy8gbG9nbGV2ZWwncyB3YXJuaW5nIG5hbWUgaXMgZGlmZmVyZW50IGZyb20gd2VicGFjaydzXG4gICAgICBsb2cuc2V0TGV2ZWwoJ3dhcm4nKTtcbiAgICAgIGJyZWFrO1xuICAgIC8vIGRlcHJlY2F0ZWRcblxuICAgIGNhc2UgTk9ORTpcbiAgICBjYXNlIFNJTEVOVDpcbiAgICAgIGxvZy5kaXNhYmxlQWxsKCk7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBsb2cuZXJyb3IoXCJbV0RTXSBVbmtub3duIGNsaWVudExvZ0xldmVsICdcIi5jb25jYXQobGV2ZWwsIFwiJ1wiKSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGxvZzogbG9nLFxuICBzZXRMb2dMZXZlbDogc2V0TG9nTGV2ZWxcbn07Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/webpack-dev-server/client/utils/log.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/webpack-dev-server/client/utils/reloadApp.js":
|
|
/*!******************************************************!*\
|
|
!*** (webpack)-dev-server/client/utils/reloadApp.js ***!
|
|
\******************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\n/* global WorkerGlobalScope self */\n\nvar _require = __webpack_require__(/*! ./log */ \"./node_modules/webpack-dev-server/client/utils/log.js\"),\n log = _require.log;\n\nfunction reloadApp(_ref, _ref2) {\n var hotReload = _ref.hotReload,\n hot = _ref.hot,\n liveReload = _ref.liveReload;\n var isUnloading = _ref2.isUnloading,\n currentHash = _ref2.currentHash;\n\n if (isUnloading || !hotReload) {\n return;\n }\n\n if (hot) {\n log.info('[WDS] App hot update...');\n\n var hotEmitter = __webpack_require__(/*! webpack/hot/emitter */ \"./node_modules/webpack/hot/emitter.js\");\n\n hotEmitter.emit('webpackHotUpdate', currentHash);\n\n if (typeof self !== 'undefined' && self.window) {\n // broadcast update to window\n self.postMessage(\"webpackHotUpdate\".concat(currentHash), '*');\n }\n } // allow refreshing the page only if liveReload isn't disabled\n else if (liveReload) {\n var rootWindow = self; // use parent window for reload (in case we're in an iframe with no valid src)\n\n var intervalId = self.setInterval(function () {\n if (rootWindow.location.protocol !== 'about:') {\n // reload immediately if protocol is valid\n applyReload(rootWindow, intervalId);\n } else {\n rootWindow = rootWindow.parent;\n\n if (rootWindow.parent === rootWindow) {\n // if parent equals current window we've reached the root which would continue forever, so trigger a reload anyways\n applyReload(rootWindow, intervalId);\n }\n }\n });\n }\n\n function applyReload(rootWindow, intervalId) {\n clearInterval(intervalId);\n log.info('[WDS] App updated. Reloading...');\n rootWindow.location.reload();\n }\n}\n\nmodule.exports = reloadApp;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay1kZXYtc2VydmVyL2NsaWVudC91dGlscy9yZWxvYWRBcHAuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spLWRldi1zZXJ2ZXIvY2xpZW50L3V0aWxzL3JlbG9hZEFwcC5qcz83ZjU2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBXb3JrZXJHbG9iYWxTY29wZSBzZWxmICovXG5cbnZhciBfcmVxdWlyZSA9IHJlcXVpcmUoJy4vbG9nJyksXG4gICAgbG9nID0gX3JlcXVpcmUubG9nO1xuXG5mdW5jdGlvbiByZWxvYWRBcHAoX3JlZiwgX3JlZjIpIHtcbiAgdmFyIGhvdFJlbG9hZCA9IF9yZWYuaG90UmVsb2FkLFxuICAgICAgaG90ID0gX3JlZi5ob3QsXG4gICAgICBsaXZlUmVsb2FkID0gX3JlZi5saXZlUmVsb2FkO1xuICB2YXIgaXNVbmxvYWRpbmcgPSBfcmVmMi5pc1VubG9hZGluZyxcbiAgICAgIGN1cnJlbnRIYXNoID0gX3JlZjIuY3VycmVudEhhc2g7XG5cbiAgaWYgKGlzVW5sb2FkaW5nIHx8ICFob3RSZWxvYWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaG90KSB7XG4gICAgbG9nLmluZm8oJ1tXRFNdIEFwcCBob3QgdXBkYXRlLi4uJyk7XG5cbiAgICB2YXIgaG90RW1pdHRlciA9IHJlcXVpcmUoJ3dlYnBhY2svaG90L2VtaXR0ZXInKTtcblxuICAgIGhvdEVtaXR0ZXIuZW1pdCgnd2VicGFja0hvdFVwZGF0ZScsIGN1cnJlbnRIYXNoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi53aW5kb3cpIHtcbiAgICAgIC8vIGJyb2FkY2FzdCB1cGRhdGUgdG8gd2luZG93XG4gICAgICBzZWxmLnBvc3RNZXNzYWdlKFwid2VicGFja0hvdFVwZGF0ZVwiLmNvbmNhdChjdXJyZW50SGFzaCksICcqJyk7XG4gICAgfVxuICB9IC8vIGFsbG93IHJlZnJlc2hpbmcgdGhlIHBhZ2Ugb25seSBpZiBsaXZlUmVsb2FkIGlzbid0IGRpc2FibGVkXG4gIGVsc2UgaWYgKGxpdmVSZWxvYWQpIHtcbiAgICAgIHZhciByb290V2luZG93ID0gc2VsZjsgLy8gdXNlIHBhcmVudCB3aW5kb3cgZm9yIHJlbG9hZCAoaW4gY2FzZSB3ZSdyZSBpbiBhbiBpZnJhbWUgd2l0aCBubyB2YWxpZCBzcmMpXG5cbiAgICAgIHZhciBpbnRlcnZhbElkID0gc2VsZi5zZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChyb290V2luZG93LmxvY2F0aW9uLnByb3RvY29sICE9PSAnYWJvdXQ6Jykge1xuICAgICAgICAgIC8vIHJlbG9hZCBpbW1lZGlhdGVseSBpZiBwcm90b2NvbCBpcyB2YWxpZFxuICAgICAgICAgIGFwcGx5UmVsb2FkKHJvb3RXaW5kb3csIGludGVydmFsSWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJvb3RXaW5kb3cgPSByb290V2luZG93LnBhcmVudDtcblxuICAgICAgICAgIGlmIChyb290V2luZG93LnBhcmVudCA9PT0gcm9vdFdpbmRvdykge1xuICAgICAgICAgICAgLy8gaWYgcGFyZW50IGVxdWFscyBjdXJyZW50IHdpbmRvdyB3ZSd2ZSByZWFjaGVkIHRoZSByb290IHdoaWNoIHdvdWxkIGNvbnRpbnVlIGZvcmV2ZXIsIHNvIHRyaWdnZXIgYSByZWxvYWQgYW55d2F5c1xuICAgICAgICAgICAgYXBwbHlSZWxvYWQocm9vdFdpbmRvdywgaW50ZXJ2YWxJZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgZnVuY3Rpb24gYXBwbHlSZWxvYWQocm9vdFdpbmRvdywgaW50ZXJ2YWxJZCkge1xuICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgbG9nLmluZm8oJ1tXRFNdIEFwcCB1cGRhdGVkLiBSZWxvYWRpbmcuLi4nKTtcbiAgICByb290V2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVsb2FkQXBwOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/webpack-dev-server/client/utils/reloadApp.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/webpack-dev-server/client/utils/sendMessage.js":
|
|
/*!********************************************************!*\
|
|
!*** (webpack)-dev-server/client/utils/sendMessage.js ***!
|
|
\********************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\n/* global __resourceQuery WorkerGlobalScope self */\n// Send messages to the outside, so plugins can consume it.\n\nfunction sendMsg(type, data) {\n if (typeof self !== 'undefined' && (typeof WorkerGlobalScope === 'undefined' || !(self instanceof WorkerGlobalScope))) {\n self.postMessage({\n type: \"webpack\".concat(type),\n data: data\n }, '*');\n }\n}\n\nmodule.exports = sendMsg;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay1kZXYtc2VydmVyL2NsaWVudC91dGlscy9zZW5kTWVzc2FnZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8od2VicGFjayktZGV2LXNlcnZlci9jbGllbnQvdXRpbHMvc2VuZE1lc3NhZ2UuanM/MDkwYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgX19yZXNvdXJjZVF1ZXJ5IFdvcmtlckdsb2JhbFNjb3BlIHNlbGYgKi9cbi8vIFNlbmQgbWVzc2FnZXMgdG8gdGhlIG91dHNpZGUsIHNvIHBsdWdpbnMgY2FuIGNvbnN1bWUgaXQuXG5cbmZ1bmN0aW9uIHNlbmRNc2codHlwZSwgZGF0YSkge1xuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmICh0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgPT09ICd1bmRlZmluZWQnIHx8ICEoc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlKSkpIHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgIHR5cGU6IFwid2VicGFja1wiLmNvbmNhdCh0eXBlKSxcbiAgICAgIGRhdGE6IGRhdGFcbiAgICB9LCAnKicpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2VuZE1zZzsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/webpack-dev-server/client/utils/sendMessage.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/webpack-dev-server/node_modules/ansi-regex/index.js":
|
|
/*!*************************************************************!*\
|
|
!*** (webpack)-dev-server/node_modules/ansi-regex/index.js ***!
|
|
\*************************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nmodule.exports = function () {\n\treturn /[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay1kZXYtc2VydmVyL25vZGVfbW9kdWxlcy9hbnNpLXJlZ2V4L2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS1kZXYtc2VydmVyL25vZGVfbW9kdWxlcy9hbnNpLXJlZ2V4L2luZGV4LmpzPzM0OTQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG5cdHJldHVybiAvW1xcdTAwMWJcXHUwMDliXVtbKCkjOz9dKig/OlswLTldezEsNH0oPzo7WzAtOV17MCw0fSkqKT9bMC05QS1QUlpjZi1ucXJ5PT48XS9nO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/webpack-dev-server/node_modules/ansi-regex/index.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/webpack-dev-server/node_modules/strip-ansi/index.js":
|
|
/*!*************************************************************!*\
|
|
!*** (webpack)-dev-server/node_modules/strip-ansi/index.js ***!
|
|
\*************************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("\nvar ansiRegex = __webpack_require__(/*! ansi-regex */ \"./node_modules/webpack-dev-server/node_modules/ansi-regex/index.js\")();\n\nmodule.exports = function (str) {\n\treturn typeof str === 'string' ? str.replace(ansiRegex, '') : str;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay1kZXYtc2VydmVyL25vZGVfbW9kdWxlcy9zdHJpcC1hbnNpL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS1kZXYtc2VydmVyL25vZGVfbW9kdWxlcy9zdHJpcC1hbnNpL2luZGV4LmpzPzk3NTEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGFuc2lSZWdleCA9IHJlcXVpcmUoJ2Fuc2ktcmVnZXgnKSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdHIpIHtcblx0cmV0dXJuIHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnID8gc3RyLnJlcGxhY2UoYW5zaVJlZ2V4LCAnJykgOiBzdHI7XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/webpack-dev-server/node_modules/strip-ansi/index.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/webpack/buildin/global.js":
|
|
/*!***********************************!*\
|
|
!*** (webpack)/buildin/global.js ***!
|
|
\***********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports) {
|
|
|
|
eval("var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanM/Y2QwMCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Iiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/webpack/buildin/global.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/webpack/buildin/module.js":
|
|
/*!***********************************!*\
|
|
!*** (webpack)/buildin/module.js ***!
|
|
\***********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports) {
|
|
|
|
eval("module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL21vZHVsZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9tb2R1bGUuanM/Y2VkMiJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuXHRpZiAoIW1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcblx0XHRtb2R1bGUuZGVwcmVjYXRlID0gZnVuY3Rpb24oKSB7fTtcblx0XHRtb2R1bGUucGF0aHMgPSBbXTtcblx0XHQvLyBtb2R1bGUucGFyZW50ID0gdW5kZWZpbmVkIGJ5IGRlZmF1bHRcblx0XHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJsb2FkZWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUubDtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImlkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XG5cdH1cblx0cmV0dXJuIG1vZHVsZTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/webpack/buildin/module.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/webpack/hot sync ^\\.\\/log$":
|
|
/*!*************************************************!*\
|
|
!*** (webpack)/hot sync nonrecursive ^\.\/log$ ***!
|
|
\*************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
eval("var map = {\n\t\"./log\": \"./node_modules/webpack/hot/log.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./node_modules/webpack/hot sync ^\\\\.\\\\/log$\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay9ob3Qgc3luYyBeXFwuXFwvbG9nJC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8od2VicGFjaykvaG90IHN5bmMgbm9ucmVjdXJzaXZlIF5cXC5cXC9sb2ckPzFjM2QiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIG1hcCA9IHtcblx0XCIuL2xvZ1wiOiBcIi4vbm9kZV9tb2R1bGVzL3dlYnBhY2svaG90L2xvZy5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2hvdCBzeW5jIF5cXFxcLlxcXFwvbG9nJFwiOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/webpack/hot sync ^\\.\\/log$\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/webpack/hot/emitter.js":
|
|
/*!********************************!*\
|
|
!*** (webpack)/hot/emitter.js ***!
|
|
\********************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
eval("var EventEmitter = __webpack_require__(/*! events */ \"./node_modules/events/events.js\");\nmodule.exports = new EventEmitter();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay9ob3QvZW1pdHRlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8od2VicGFjaykvaG90L2VtaXR0ZXIuanM/YTZiZCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZShcImV2ZW50c1wiKTtcbm1vZHVsZS5leHBvcnRzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/webpack/hot/emitter.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/webpack/hot/log.js":
|
|
/*!****************************!*\
|
|
!*** (webpack)/hot/log.js ***!
|
|
\****************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports) {
|
|
|
|
eval("var logLevel = \"info\";\n\nfunction dummy() {}\n\nfunction shouldLog(level) {\n\tvar shouldLog =\n\t\t(logLevel === \"info\" && level === \"info\") ||\n\t\t([\"info\", \"warning\"].indexOf(logLevel) >= 0 && level === \"warning\") ||\n\t\t([\"info\", \"warning\", \"error\"].indexOf(logLevel) >= 0 && level === \"error\");\n\treturn shouldLog;\n}\n\nfunction logGroup(logFn) {\n\treturn function(level, msg) {\n\t\tif (shouldLog(level)) {\n\t\t\tlogFn(msg);\n\t\t}\n\t};\n}\n\nmodule.exports = function(level, msg) {\n\tif (shouldLog(level)) {\n\t\tif (level === \"info\") {\n\t\t\tconsole.log(msg);\n\t\t} else if (level === \"warning\") {\n\t\t\tconsole.warn(msg);\n\t\t} else if (level === \"error\") {\n\t\t\tconsole.error(msg);\n\t\t}\n\t}\n};\n\n/* eslint-disable node/no-unsupported-features/node-builtins */\nvar group = console.group || dummy;\nvar groupCollapsed = console.groupCollapsed || dummy;\nvar groupEnd = console.groupEnd || dummy;\n/* eslint-enable node/no-unsupported-features/node-builtins */\n\nmodule.exports.group = logGroup(group);\n\nmodule.exports.groupCollapsed = logGroup(groupCollapsed);\n\nmodule.exports.groupEnd = logGroup(groupEnd);\n\nmodule.exports.setLogLevel = function(level) {\n\tlogLevel = level;\n};\n\nmodule.exports.formatError = function(err) {\n\tvar message = err.message;\n\tvar stack = err.stack;\n\tif (!stack) {\n\t\treturn message;\n\t} else if (stack.indexOf(message) < 0) {\n\t\treturn message + \"\\n\" + stack;\n\t} else {\n\t\treturn stack;\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvd2VicGFjay9ob3QvbG9nLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9ob3QvbG9nLmpzPzFhZmQiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGxvZ0xldmVsID0gXCJpbmZvXCI7XG5cbmZ1bmN0aW9uIGR1bW15KCkge31cblxuZnVuY3Rpb24gc2hvdWxkTG9nKGxldmVsKSB7XG5cdHZhciBzaG91bGRMb2cgPVxuXHRcdChsb2dMZXZlbCA9PT0gXCJpbmZvXCIgJiYgbGV2ZWwgPT09IFwiaW5mb1wiKSB8fFxuXHRcdChbXCJpbmZvXCIsIFwid2FybmluZ1wiXS5pbmRleE9mKGxvZ0xldmVsKSA+PSAwICYmIGxldmVsID09PSBcIndhcm5pbmdcIikgfHxcblx0XHQoW1wiaW5mb1wiLCBcIndhcm5pbmdcIiwgXCJlcnJvclwiXS5pbmRleE9mKGxvZ0xldmVsKSA+PSAwICYmIGxldmVsID09PSBcImVycm9yXCIpO1xuXHRyZXR1cm4gc2hvdWxkTG9nO1xufVxuXG5mdW5jdGlvbiBsb2dHcm91cChsb2dGbikge1xuXHRyZXR1cm4gZnVuY3Rpb24obGV2ZWwsIG1zZykge1xuXHRcdGlmIChzaG91bGRMb2cobGV2ZWwpKSB7XG5cdFx0XHRsb2dGbihtc2cpO1xuXHRcdH1cblx0fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihsZXZlbCwgbXNnKSB7XG5cdGlmIChzaG91bGRMb2cobGV2ZWwpKSB7XG5cdFx0aWYgKGxldmVsID09PSBcImluZm9cIikge1xuXHRcdFx0Y29uc29sZS5sb2cobXNnKTtcblx0XHR9IGVsc2UgaWYgKGxldmVsID09PSBcIndhcm5pbmdcIikge1xuXHRcdFx0Y29uc29sZS53YXJuKG1zZyk7XG5cdFx0fSBlbHNlIGlmIChsZXZlbCA9PT0gXCJlcnJvclwiKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKG1zZyk7XG5cdFx0fVxuXHR9XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBub2RlL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMgKi9cbnZhciBncm91cCA9IGNvbnNvbGUuZ3JvdXAgfHwgZHVtbXk7XG52YXIgZ3JvdXBDb2xsYXBzZWQgPSBjb25zb2xlLmdyb3VwQ29sbGFwc2VkIHx8IGR1bW15O1xudmFyIGdyb3VwRW5kID0gY29uc29sZS5ncm91cEVuZCB8fCBkdW1teTtcbi8qIGVzbGludC1lbmFibGUgbm9kZS9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9ub2RlLWJ1aWx0aW5zICovXG5cbm1vZHVsZS5leHBvcnRzLmdyb3VwID0gbG9nR3JvdXAoZ3JvdXApO1xuXG5tb2R1bGUuZXhwb3J0cy5ncm91cENvbGxhcHNlZCA9IGxvZ0dyb3VwKGdyb3VwQ29sbGFwc2VkKTtcblxubW9kdWxlLmV4cG9ydHMuZ3JvdXBFbmQgPSBsb2dHcm91cChncm91cEVuZCk7XG5cbm1vZHVsZS5leHBvcnRzLnNldExvZ0xldmVsID0gZnVuY3Rpb24obGV2ZWwpIHtcblx0bG9nTGV2ZWwgPSBsZXZlbDtcbn07XG5cbm1vZHVsZS5leHBvcnRzLmZvcm1hdEVycm9yID0gZnVuY3Rpb24oZXJyKSB7XG5cdHZhciBtZXNzYWdlID0gZXJyLm1lc3NhZ2U7XG5cdHZhciBzdGFjayA9IGVyci5zdGFjaztcblx0aWYgKCFzdGFjaykge1xuXHRcdHJldHVybiBtZXNzYWdlO1xuXHR9IGVsc2UgaWYgKHN0YWNrLmluZGV4T2YobWVzc2FnZSkgPCAwKSB7XG5cdFx0cmV0dXJuIG1lc3NhZ2UgKyBcIlxcblwiICsgc3RhY2s7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHN0YWNrO1xuXHR9XG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/webpack/hot/log.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ 0:
|
|
/*!***********************************************************************************!*\
|
|
!*** multi (webpack)-dev-server/client?http://0.0.0.0:8000 ./lib/FriendlyFire.js ***!
|
|
\***********************************************************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
__webpack_require__(/*! D:\Development\gfiles\friendlyfiregame\node_modules\webpack-dev-server\client\index.js?http://0.0.0.0:8000 */"./node_modules/webpack-dev-server/client/index.js?http://0.0.0.0:8000");
|
|
module.exports = __webpack_require__(/*! ./lib/FriendlyFire.js */"./lib/FriendlyFire.js");
|
|
|
|
|
|
/***/ })
|
|
|
|
/******/ }); |