(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Script/tool/AudioManager.js'; var __require = nodeEnv ? function (request) { return cc.require(request); } : function (request) { return __quick_compile_project__.require(request, __filename); }; function __define (exports, require, module) { if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict"; cc._RF.push(module, '971c4vub4BJpqrSCLPJ8g1V', 'AudioManager'); // Script/AudioManager.js "use strict"; cc.Class({ "extends": cc.Component, properties: { //背景音乐 audioGameBgm0: { "default": null, type: cc.AudioClip }, // 按钮点击 audioButtonClick: { "default": null, type: cc.AudioClip }, // 报警音效 audioWarning: { "default": null, type: cc.AudioClip }, //游戏开始音效 audioWin: { "default": null, type: cc.AudioClip }, reward: false, finish: false, rewardCount: 0 }, ctor: function ctor() { this.mAudioMap = {}; /** * 默认音量大小 * @type {number} */ this.bgMusicVolume = 0.1; this.effectMusicVolume = 1; this.mMusicSwitch = 1; this.mEffectSwitch = 1; }, play: function play(audioSource, loop, callback, isBgMusic) { if (isBgMusic && !this.mMusicSwitch) return; if (!isBgMusic && !this.mEffectSwitch) return; var volume = isBgMusic ? this.bgMusicVolume : this.effectMusicVolume; if (cc.sys.isBrowser) { if (audioSource == this.brickSound) { volume = 0.1; } var context = cc.audioEngine.play(audioSource, loop, volume); if (callback) { cc.audioEngine.setFinishCallback(context, function () { callback.call(this); }.bind(this)); } this.mAudioMap[audioSource] = context; return audioSource; } else { var context = wx.createInnerAudioContext(); context.autoplay = true; context.loop = loop; context.obeyMuteSwitch = true; context.volume = volume; if (callback) { context.onEnded(function () { callback.call(this); }.bind(this)); } else { context.offEnded(); } // var audioPath = cc.url.raw("resources/BallMaster/sounds" + audioSource.name + ".mp3"); context.src = audioSource.nativeUrl; context.play(); this.mAudioMap[audioSource] = context; return audioSource; } }, save: function save() {// cc.wwx.Storage.setItem(cc.wwx.Storage.Key_Setting_Music_Volume, this.mMusicSwitch); // cc.wwx.Storage.setItem(cc.wwx.Storage.Key_Setting_Effect_Volume, this.mEffectSwitch); }, onLoad: function onLoad() { var _this = this; // cc.wwx.Storage.getItem(cc.wwx.Storage.Key_Setting_Music_Volume, function(volume) { // this.mMusicSwitch = parseInt(volume); // }.bind(this), 1); // cc.wwx.Storage.getItem(cc.wwx.Storage.Key_Setting_Effect_Volume, function(volume) { // this.mEffectSwitch = parseInt(volume); // }.bind(this), 1); this.reward = false; this.finish = false; this.rewardCount = 0; window.addEventListener('rewardCanUse', function () { // 此时激励可用 游戏内部逻辑 _this.reward = true; }); 'undefined' != typeof window['reward'] ? window.dispatchEvent(window['reward']) : ""; this.preload(); }, preload: function preload() { if (!(cc.sys.platform === cc.sys.WECHAT_GAME)) { return; } var musics = [this.audioGameBgm0]; musics.forEach(function (path) {// var musicPath = wxDownloader.REMOTE_SERVER_ROOT + path; // if (musicPath != wxDownloader.REMOTE_SERVER_ROOT && musicPath.endsWith('.mp3')) { // cc.loader.load(musicPath, function(err, remoteUrl) { // if (err) { // cc.error(err.message || err); // return; // } // }); // } }); }, getAudioMusicSwitch: function getAudioMusicSwitch() { return this.mMusicSwitch; }, getAudioEffectSwitch: function getAudioEffectSwitch() { return this.mEffectSwitch; }, trunAudioSound: function trunAudioSound(on) { this.switchMusic(on); this.switchEffect(on); }, switchMusic: function switchMusic(on) { if (this.mMusicSwitch != (on ? 1 : 0)) { this.mMusicSwitch = 1 - this.mMusicSwitch; // this.save(); } if (on) { this.playMusicGame(); } else { this.stopMusic(); } }, switchEffect: function switchEffect(on) { if (this.mEffectSwitch != (on ? 1 : 0)) { this.mEffectSwitch = 1 - this.mEffectSwitch; // this.save(); } }, onHide: function onHide() { cc.audioEngine.pauseAll(); // if (CC_JSB) { // } else { // for (var key in this.mAudioMap) { // if (key === this.mMusicKey) { // this.mAudioMap[key].pause(); // } else { // this.mAudioMap[key].stop(); // } // } // } }, onShow: function onShow() { cc.audioEngine.resumeAll(); // if (CC_JSB) { // } else { // if (!this.mMusicSwitch) return; // var context = this.mAudioMap[this.mMusicKey]; // if (context) { // context.play(); // } // } }, playMusic: function playMusic(key, callback, loop) { loop = typeof loop == 'undefined' || loop ? true : false; this.stopMusic(); this.mMusicKey = this.play(key, loop, callback, true); }, /** * 游戏背景音乐 */ playMusicGame: function playMusicGame() { this.playMusic(this.audioGameBgm0); }, /** * 停止背景音乐播放 */ stopMusic: function stopMusic() { // cc.wwx.OutPut.log('stopMusic audio effect wx: ' + this.mMusicKey); var context = this.mAudioMap[this.mMusicKey]; if (typeof context != 'undefined') { if (cc.sys.isBrowser) { cc.audioEngine.stop(context); } else { context.stop(); } cc.audioEngine.stop(context); } }, // 炸弹、火箭爆炸音效 playBomb: function playBomb() { return this.play(this.audioBomb, false); }, //激光音效 playJiGuang: function playJiGuang() { return this.play(this.audioJiGuang, false); }, //技能音效 playItem1: function playItem1() { return this.play(this.audioItem1, false); }, /* * 游戏开始音效 * */ playGameStart: function playGameStart() { return this.play(this.audioGameStart, false); }, /* * 失败的游戏结束 */ playGameOver: function playGameOver() { return this.play(this.audioGameOver, false); }, /* * 成功的游戏结束 */ playGameResultFailed: function playGameResultFailed() { return this.play(this.audioGameResultFail, false); }, /* * 成功的游戏结束 */ playGameResultSuccess: function playGameResultSuccess() { return this.play(this.audioGameResultSuccess, false); }, /** * 报警的音效 */ playWarning: function playWarning() { return this.play(this.audioWarning, false); }, playWin: function playWin() { return this.play(this.audioWin, false); }, /* * 方块碰撞的声音 */ playBrick: function playBrick() { return this.play(this.brickSound, false); }, //方块破碎的声音 brickBoom: function brickBoom() { return this.play(this.audioObj, false); }, /** * 按钮 */ playAudioButton: function playAudioButton() { return this.play(this.audioButtonClick, false); }, playRandomMatch: function playRandomMatch() { this.playMusic(this.randomMatchSound); }, playMatchFoundSound: function playMatchFoundSound() { this.stopMusic(); return this.play(this.matchFoundSound, false); } }); cc._RF.pop(); } if (nodeEnv) { __define(__module.exports, __require, __module); } else { __quick_compile_project__.registerModuleFunc(__filename, function () { __define(__module.exports, __require, __module); }); } })(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFxBdWRpb01hbmFnZXIuanMiXSwibmFtZXMiOlsiY2MiLCJDbGFzcyIsIkNvbXBvbmVudCIsInByb3BlcnRpZXMiLCJhdWRpb0dhbWVCZ20wIiwidHlwZSIsIkF1ZGlvQ2xpcCIsImF1ZGlvQnV0dG9uQ2xpY2siLCJhdWRpb1dhcm5pbmciLCJhdWRpb1dpbiIsInJld2FyZCIsImZpbmlzaCIsInJld2FyZENvdW50IiwiY3RvciIsIm1BdWRpb01hcCIsImJnTXVzaWNWb2x1bWUiLCJlZmZlY3RNdXNpY1ZvbHVtZSIsIm1NdXNpY1N3aXRjaCIsIm1FZmZlY3RTd2l0Y2giLCJwbGF5IiwiYXVkaW9Tb3VyY2UiLCJsb29wIiwiY2FsbGJhY2siLCJpc0JnTXVzaWMiLCJ2b2x1bWUiLCJzeXMiLCJpc0Jyb3dzZXIiLCJicmlja1NvdW5kIiwiY29udGV4dCIsImF1ZGlvRW5naW5lIiwic2V0RmluaXNoQ2FsbGJhY2siLCJjYWxsIiwiYmluZCIsInd4IiwiY3JlYXRlSW5uZXJBdWRpb0NvbnRleHQiLCJhdXRvcGxheSIsIm9iZXlNdXRlU3dpdGNoIiwib25FbmRlZCIsIm9mZkVuZGVkIiwic3JjIiwibmF0aXZlVXJsIiwic2F2ZSIsIm9uTG9hZCIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJkaXNwYXRjaEV2ZW50IiwicHJlbG9hZCIsInBsYXRmb3JtIiwiV0VDSEFUX0dBTUUiLCJtdXNpY3MiLCJmb3JFYWNoIiwicGF0aCIsImdldEF1ZGlvTXVzaWNTd2l0Y2giLCJnZXRBdWRpb0VmZmVjdFN3aXRjaCIsInRydW5BdWRpb1NvdW5kIiwib24iLCJzd2l0Y2hNdXNpYyIsInN3aXRjaEVmZmVjdCIsInBsYXlNdXNpY0dhbWUiLCJzdG9wTXVzaWMiLCJvbkhpZGUiLCJwYXVzZUFsbCIsIm9uU2hvdyIsInJlc3VtZUFsbCIsInBsYXlNdXNpYyIsImtleSIsIm1NdXNpY0tleSIsInN0b3AiLCJwbGF5Qm9tYiIsImF1ZGlvQm9tYiIsInBsYXlKaUd1YW5nIiwiYXVkaW9KaUd1YW5nIiwicGxheUl0ZW0xIiwiYXVkaW9JdGVtMSIsInBsYXlHYW1lU3RhcnQiLCJhdWRpb0dhbWVTdGFydCIsInBsYXlHYW1lT3ZlciIsImF1ZGlvR2FtZU92ZXIiLCJwbGF5R2FtZVJlc3VsdEZhaWxlZCIsImF1ZGlvR2FtZVJlc3VsdEZhaWwiLCJwbGF5R2FtZVJlc3VsdFN1Y2Nlc3MiLCJhdWRpb0dhbWVSZXN1bHRTdWNjZXNzIiwicGxheVdhcm5pbmciLCJwbGF5V2luIiwicGxheUJyaWNrIiwiYnJpY2tCb29tIiwiYXVkaW9PYmoiLCJwbGF5QXVkaW9CdXR0b24iLCJwbGF5UmFuZG9tTWF0Y2giLCJyYW5kb21NYXRjaFNvdW5kIiwicGxheU1hdGNoRm91bmRTb3VuZCIsIm1hdGNoRm91bmRTb3VuZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQUEsRUFBRSxDQUFDQyxLQUFILENBQVM7QUFDTCxhQUFTRCxFQUFFLENBQUNFLFNBRFA7QUFFTEMsRUFBQUEsVUFBVSxFQUFDO0FBQ1A7QUFDQUMsSUFBQUEsYUFBYSxFQUFDO0FBQ1YsaUJBQVEsSUFERTtBQUVWQyxNQUFBQSxJQUFJLEVBQUNMLEVBQUUsQ0FBQ007QUFGRSxLQUZQO0FBTVA7QUFDQUMsSUFBQUEsZ0JBQWdCLEVBQUM7QUFDYixpQkFBUSxJQURLO0FBRWJGLE1BQUFBLElBQUksRUFBQ0wsRUFBRSxDQUFDTTtBQUZLLEtBUFY7QUFXUDtBQUNBRSxJQUFBQSxZQUFZLEVBQUM7QUFDVCxpQkFBUSxJQURDO0FBRVRILE1BQUFBLElBQUksRUFBQ0wsRUFBRSxDQUFDTTtBQUZDLEtBWk47QUFpQlA7QUFDQUcsSUFBQUEsUUFBUSxFQUFDO0FBQ0wsaUJBQVEsSUFESDtBQUVMSixNQUFBQSxJQUFJLEVBQUNMLEVBQUUsQ0FBQ007QUFGSCxLQWxCRjtBQXVCUEksSUFBQUEsTUFBTSxFQUFFLEtBdkJEO0FBd0JQQyxJQUFBQSxNQUFNLEVBQUUsS0F4QkQ7QUF5QlBDLElBQUFBLFdBQVcsRUFB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LG1DQTBRTDtBQUNJLFdBQU8sS0FBSzdELElBQUwsQ0FBVSxLQUFLOEQsc0JBQWYsRUFBc0MsS0FBdEMsQ0FBUDtBQUNILEdBNVFJOztBQTZRTDtBQUNKO0FBQ0E7QUFDSUMsRUFBQUEsV0FoUksseUJBaVJMO0FBQ0ksV0FBTyxLQUFLL0QsSUFBTCxDQUFVLEtBQUtYLFlBQWYsRUFBNEIsS0FBNUIsQ0FBUDtBQUVILEdBcFJJO0FBc1JMMkUsRUFBQUEsT0F0UksscUJBdVJMO0FBQ0ksV0FBTyxLQUFLaEUsSUFBTCxDQUFVLEtBQUtWLFFBQWYsRUFBd0IsS0FBeEIsQ0FBUDtBQUNILEdBelJJOztBQTJSTDtBQUNKO0FBQ0E7QUFDSTJFLEVBQUFBLFNBOVJLLHVCQStSTDtBQUNJLFdBQU8sS0FBS2pFLElBQUwsQ0FBVSxLQUFLUSxVQUFmLEVBQTBCLEtBQTFCLENBQVA7QUFDSCxHQWpTSTtBQWtTTDtBQUNBMEQsRUFBQUEsU0FuU0ssdUJBbVNNO0FBQ1AsV0FBTyxLQUFLbEUsSUFBTCxDQUFVLEtBQUttRSxRQUFmLEVBQXdCLEtBQXhCLENBQVA7QUFDSCxHQXJTSTs7QUFzU0w7QUFDSjtBQUNBO0FBQ0lDLEVBQUFBLGVBelNLLDZCQXlTYztBQUNmLFdBQU8sS0FBS3BFLElBQUwsQ0FBVSxLQUFLWixnQkFBZixFQUFpQyxLQUFqQyxDQUFQO0FBQ0gsR0EzU0k7QUE2U0xpRixFQUFBQSxlQTdTSyw2QkE4U0w7QUFDSSxTQUFLeEIsU0FBTCxDQUFlLEtBQUt5QixnQkFBcEI7QUFDSCxHQWhUSTtBQWlUTEMsRUFBQUEsbUJBalRLLGlDQWtUTDtBQUNJLFNBQUsvQixTQUFMO0FBQ0EsV0FBTyxLQUFLeEMsSUFBTCxDQUFVLEtBQUt3RSxlQUFmLEVBQWdDLEtBQWhDLENBQVA7QUFDSDtBQXJUSSxDQUFUIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyJjYy5DbGFzcyh7XG4gICAgZXh0ZW5kczogY2MuQ29tcG9uZW50LFxuICAgIHByb3BlcnRpZXM6e1xuICAgICAgICAvL+iDjOaZr+mfs+S5kFxuICAgICAgICBhdWRpb0dhbWVCZ20wOntcbiAgICAgICAgICAgIGRlZmF1bHQ6bnVsbCxcbiAgICAgICAgICAgIHR5cGU6Y2MuQXVkaW9DbGlwXG4gICAgICAgIH0sXG4gICAgICAgIC8vIOaMiemSrueCueWHu1xuICAgICAgICBhdWRpb0J1dHRvbkNsaWNrOntcbiAgICAgICAgICAgIGRlZmF1bHQ6bnVsbCxcbiAgICAgICAgICAgIHR5cGU6Y2MuQXVkaW9DbGlwXG4gICAgICAgIH0sXG4gICAgICAgIC8vIOaKpeitpumfs+aViFxuICAgICAgICBhdWRpb1dhcm5pbmc6e1xuICAgICAgICAgICAgZGVmYXVsdDpudWxsLFxuICAgICAgICAgICAgdHlwZTpjYy5BdWRpb0NsaXBcbiAgICAgICAgfSxcblxuICAgICAgICAvL+a4uOaIj+W8gOWni+mfs+aViFxuICAgICAgICBhdWRpb1dpbjp7XG4gICAgICAgICAgICBkZWZhdWx0Om51bGwsXG4gICAgICAgICAgICB0eXBlOmNjLkF1ZGlvQ2xpcFxuICAgICAgICB9LFxuXG4gICAgICAgIHJld2FyZDogZmFsc2UsXG4gICAgICAgIGZpbmlzaDogZmFsc2UsXG4gICAgICAgIHJld2FyZENvdW50OiAwXG5cbiAgICB9LFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5tQXVkaW9NYXAgPSB7fTtcblxuICAgICAgICAvKipcbiAgICAgICAgICog6buY6K6k6Z+z6YeP5aSn5bCPXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmJnTXVzaWNWb2x1bWUgPSAwLjE7XG4gICAgICAgIHRoaXMuZWZmZWN0TXVzaWNWb2x1bWUgPSAxO1xuXG4gICAgICAgIHRoaXMubU11c2ljU3dpdGNoID0gMTtcbiAgICAgICAgdGhpcy5tRWZmZWN0U3dpdGNoID0gMTtcbiAgICB9LFxuICAgIHBsYXkgOiBmdW5jdGlvbihhdWRpb1NvdXJjZSwgbG9vcCwgY2FsbGJhY2ssIGlzQmdNdXNpYykge1xuICAgICAgICBpZiAoaXNCZ011c2ljICYmICF0aGlzLm1NdXNpY1N3aXRjaCkgcmV0dXJuO1xuICAgICAgICBpZiAoIWlzQmdNdXNpYyAmJiAhdGhpcy5tRWZmZWN0U3dpdGNoKSByZXR1cm47XG5cbiAgICAgICAgdmFyIHZvbHVtZSA9IGlzQmdNdXNpYyA/IHRoaXMuYmdNdXNpY1ZvbHVtZSA6IHRoaXMuZWZmZWN0TXVzaWNWb2x1bWU7XG5cbiAgICAgICAgaWYgKGNjLnN5cy5pc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgIGlmKGF1ZGlvU291cmNlID09IHRoaXMuYnJpY2tTb3VuZCl7XG4gICAgICAgICAgICAgICAgdm9sdW1lID0gMC4xO1xuICAgICAgICAgICAgfSBcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0gY2MuYXVkaW9FbmdpbmUucGxheShhdWRpb1NvdXJjZSwgbG9vcCwgdm9sdW1lKTtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgY2MuYXVkaW9FbmdpbmUuc2V0RmluaXNoQ2FsbGJhY2soY29udGV4dCwgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm1BdWRpb01hcFthdWRpb1NvdXJjZV0gPSBjb250ZXh0O1xuICAgICAgICAgICAgcmV0dXJuIGF1ZGlvU291cmNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSB3eC5jcmVhdGVJbm5lckF1ZGlvQ29udGV4dCgpO1xuICAgICAgICAgICAgY29udGV4dC5hdXRvcGxheSA9IHRydWU7XG4gICAgICAgICAgICBjb250ZXh0Lmxvb3AgPSBsb29wO1xuICAgICAgICAgICAgY29udGV4dC5vYmV5TXV0ZVN3aXRjaCA9IHRydWU7XG4gICAgICAgICAgICBjb250ZXh0LnZvbHVtZSA9IHZvbHVtZTtcblxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5vbkVuZGVkKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnRleHQub2ZmRW5kZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgICAgICAvLyB2YXIgYXVkaW9QYXRoID0gY2MudXJsLnJhdyhcInJlc291cmNlcy9CYWxsTWFzdGVyL3NvdW5kc1wiICsgYXVkaW9Tb3VyY2UubmFtZSArIFwiLm1wM1wiKTtcbiAgICAgICAgICAgIGNvbnRleHQuc3JjID0gYXVkaW9Tb3VyY2UubmF0aXZlVXJsO1xuICAgICAgICAgICAgY29udGV4dC5wbGF5KClcbiAgICAgICAgICAgIHRoaXMubUF1ZGlvTWFwW2F1ZGlvU291cmNlXSA9IGNvbnRleHQ7XG4gICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIGF1ZGlvU291cmNlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNhdmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gY2Mud3d4LlN0b3JhZ2Uuc2V0SXRlbShjYy53d3guU3RvcmFnZS5LZXlfU2V0dGluZ19NdXNpY19Wb2x1bWUsIHRoaXMubU11c2ljU3dpdGNoKTtcbiAgICAgICAgLy8gY2Mud3d4LlN0b3JhZ2Uuc2V0SXRlbShjYy53d3guU3RvcmFnZS5LZXlfU2V0dGluZ19FZmZlY3RfVm9sdW1lLCB0aGlzLm1FZmZlY3RTd2l0Y2gpO1xuICAgIH0sXG4gICAgb25Mb2FkKCkge1xuICAgICAgICAvLyBjYy53d3guU3RvcmFnZS5nZXRJdGVtKGNjLnd3eC5TdG9yYWdlLktleV9TZXR0aW5nX011c2ljX1ZvbHVtZSwgZnVuY3Rpb24odm9sdW1lKSB7XG4gICAgICAgIC8vICAgICB0aGlzLm1NdXNpY1N3aXRjaCA9IHBhcnNlSW50KHZvbHVtZSk7XG4gICAgICAgIC8vIH0uYmluZCh0aGlzKSwgMSk7XG5cbiAgICAgICAgLy8gY2Mud3d4LlN0b3JhZ2UuZ2V0SXRlbShjYy53d3guU3RvcmFnZS5LZXlfU2V0dGluZ19FZmZlY3RfVm9sdW1lLCBmdW5jdGlvbih2b2x1bWUpIHtcbiAgICAgICAgLy8gICAgIHRoaXMubUVmZmVjdFN3aXRjaCA9IHBhcnNlSW50KHZvbHVtZSk7XG4gICAgICAgIC8vIH0uYmluZCh0aGlzKSwgMSk7XG5cbiAgICAgICAgdGhpcy5yZXdhcmQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5maW5pc2ggPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZXdhcmRDb3VudCA9IDA7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXdhcmRDYW5Vc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAvLyDmraTml7bmv4DlirHlj6/nlKgg5ri45oiP5YaF6YOo6YC76L6RXG4gICAgICAgICAgICB0aGlzLnJld2FyZCA9IHRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICd1bmRlZmluZWQnICE9IHR5cGVvZiB3aW5kb3dbJ3Jld2FyZCddID8gXG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KHdpbmRvd1sncmV3YXJkJ10pOlwiXCJcblxuICAgICAgICB0aGlzLnByZWxvYWQoKTtcbiAgICB9LFxuICAgIHByZWxvYWQgOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCEoY2Muc3lzLnBsYXRmb3JtID09PSBjYy5zeXMuV0VDSEFUX0dBTUUpKSB7IHJldHVybjsgfVxuXG4gICAgICAgIHZhciBtdXNpY3MgPSBbXG4gICAgICAgICAgICB0aGlzLmF1ZGlvR2FtZUJnbTAsXG4gICAgICAgIF07XG4gICAgICAgIG11c2ljcy5mb3JFYWNoKGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgICAgICAgIC8vIHZhciBtdXNpY1BhdGggPSB3eERvd25sb2FkZXIuUkVNT1RFX1NFUlZFUl9ST09UICsgcGF0aDtcbiAgICAgICAgICAgIC8vIGlmIChtdXNpY1BhdGggIT0gd3hEb3dubG9hZGVyLlJFTU9URV9TRVJWRVJfUk9PVCAmJiBtdXNpY1BhdGguZW5kc1dpdGgoJy5tcDMnKSkge1xuICAgICAgICAgICAgLy8gICAgIGNjLmxvYWRlci5sb2FkKG11c2ljUGF0aCwgZnVuY3Rpb24oZXJyLCByZW1vdGVVcmwpIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgY2MuZXJyb3IoZXJyLm1lc3NhZ2UgfHwgZXJyKTtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAgICAgLy8gICAgIH0pO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRBdWRpb011c2ljU3dpdGNoKClcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLm1NdXNpY1N3aXRjaDtcblxuICAgIH0sXG4gICAgZ2V0QXVkaW9FZmZlY3RTd2l0Y2goKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubUVmZmVjdFN3aXRjaDtcbiAgICB9LFxuICAgIHRydW5BdWRpb1NvdW5kKG9uKVxuICAgIHtcbiAgICAgICAgdGhpcy5zd2l0Y2hNdXNpYyhvbik7XG4gICAgICAgIHRoaXMuc3dpdGNoRWZmZWN0KG9uKVxuICAgIH0sXG4gICAgc3dpdGNoTXVzaWMgOiBmdW5jdGlvbihvbikge1xuICAgICAgICBpZiAodGhpcy5tTXVzaWNTd2l0Y2ggIT0gKG9uPzE6MCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMubU11c2ljU3dpdGNoID0gMS10aGlzLm1NdXNpY1N3aXRjaDtcbiAgICAgICAgICAgIC8vIHRoaXMuc2F2ZSgpO1xuICAgICAgICAgICAgXG4gICAgICAgIH1cbiAgICAgICAgaWYob24pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGxheU11c2ljR2FtZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zdG9wTXVzaWMoKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgc3dpdGNoRWZmZWN0IDogZnVuY3Rpb24ob24pIHtcbiAgICAgICAgaWYgKHRoaXMubUVmZmVjdFN3aXRjaCAhPSAob24/MTowKSl7XG4gICAgICAgICAgICB0aGlzLm1FZmZlY3RTd2l0Y2ggPSAxLXRoaXMubUVmZmVjdFN3aXRjaDtcbiAgICAgICAgICAgIC8vIHRoaXMuc2F2ZSgpO1xuXG4gICAgICAgIH1cbiAgICB9LFxuICAgIG9uSGlkZSAoKSB7XG4gICAgICAgIGNjLmF1ZGlvRW5naW5lLnBhdXNlQWxsKCk7XG5cbiAgICAgICAgLy8gaWYgKENDX0pTQikge1xuICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgZm9yICh2YXIga2V5IGluIHRoaXMubUF1ZGlvTWFwKSB7XG4gICAgICAgIC8vICAgICAgICAgaWYgKGtleSA9PT0gdGhpcy5tTXVzaWNLZXkpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy5tQXVkaW9NYXBba2V5XS5wYXVzZSgpO1xuICAgICAgICAvLyAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICAgICAgICAgIHRoaXMubUF1ZGlvTWFwW2tleV0uc3RvcCgpO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gfVxuICAgIH0sXG5cbiAgICBvblNob3cgKCkge1xuICAgICAgICBjYy5hdWRpb0VuZ2luZS5yZXN1bWVBbGwoKTtcblxuICAgICAgICAvLyBpZiAoQ0NfSlNCKSB7XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICBpZiAoIXRoaXMubU11c2ljU3dpdGNoKSByZXR1cm47XG4gICAgICAgIC8vICAgICB2YXIgY29udGV4dCA9IHRoaXMubUF1ZGlvTWFwW3RoaXMubU11c2ljS2V5XTtcbiAgICAgICAgLy8gICAgIGlmIChjb250ZXh0KSB7XG4gICAgICAgIC8vICAgICAgICAgY29udGV4dC5wbGF5KCk7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH1cbiAgICB9LFxuICAgIHBsYXlNdXNpYyA6IGZ1bmN0aW9uKGtleSwgY2FsbGJhY2ssIGxvb3ApIHtcblxuICAgICAgICBsb29wID0gdHlwZW9mIGxvb3AgPT0gJ3VuZGVmaW5lZCcgIHx8IGxvb3AgPyB0cnVlIDogZmFsc2U7XG5cbiAgICAgICAgdGhpcy5zdG9wTXVzaWMoKTtcbiAgICAgICAgdGhpcy5tTXVzaWNLZXkgPSB0aGlzLnBsYXkoa2V5LCBsb29wLCBjYWxsYmFjaywgdHJ1ZSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiDmuLjmiI/og4zmma/pn7PkuZBcbiAgICAgKi9cbiAgICBwbGF5TXVzaWNHYW1lICgpIHtcbiAgICAgICAgdGhpcy5wbGF5TXVzaWModGhpcy5hdWRpb0dhbWVCZ20wKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIOWBnOatouiDjOaZr+mfs+S5kOaSreaUvlxuICAgICAqL1xuICAgIHN0b3BNdXNpYyAoKSB7XG4gICAgICAgIC8vIGNjLnd3eC5PdXRQdXQubG9nKCdzdG9wTXVzaWMgYXVkaW8gZWZmZWN0IHd4OiAnICsgdGhpcy5tTXVzaWNLZXkpO1xuXG4gICAgICAgIHZhciBjb250ZXh0ID0gdGhpcy5tQXVkaW9NYXBbdGhpcy5tTXVzaWNLZXldO1xuXG4gICAgICAgIGlmICh0eXBlb2YoY29udGV4dCkgIT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmIChjYy5zeXMuaXNCcm93c2VyKSB7XG4gICAgICAgICAgICAgICAgY2MuYXVkaW9FbmdpbmUuc3RvcChjb250ZXh0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5zdG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYy5hdWRpb0VuZ2luZS5zdG9wKGNvbnRleHQpO1xuXG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8vIOeCuOW8ueOAgeeBq+eureeIhueCuOmfs+aViFxuICAgIHBsYXlCb21iICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGxheSh0aGlzLmF1ZGlvQm9tYiwgZmFsc2UpO1xuICAgIH0sXG4gICAgLy/mv4DlhYnpn7PmlYhcbiAgICBwbGF5SmlHdWFuZygpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy5wbGF5KHRoaXMuYXVkaW9KaUd1YW5nLCBmYWxzZSk7XG4gICAgfSxcbiAgICAvL+aKgOiDvemfs+aViFxuICAgIHBsYXlJdGVtMSgpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy5wbGF5KHRoaXMuYXVkaW9JdGVtMSwgZmFsc2UpO1xuICAgIH0sXG4gICAgLypcbiAgICAgKiDmuLjmiI/lvIDlp4vpn7PmlYhcbiAgICAgKlxuICAgICAqL1xuICAgICBwbGF5R2FtZVN0YXJ0KClcbiAgICAge1xuICAgICAgICAgcmV0dXJuIHRoaXMucGxheSh0aGlzLmF1ZGlvR2FtZVN0YXJ0LCBmYWxzZSk7XG4gICAgIH0sXG4gICAgIC8qXG4gICAgICAqIOWksei0peeahOa4uOaIj+e7k+adn1xuICAgICAgKi9cbiAgICAgcGxheUdhbWVPdmVyKClcbiAgICAge1xuICAgICAgICAgcmV0dXJuIHRoaXMucGxheSh0aGlzLmF1ZGlvR2FtZU92ZXIsZmFsc2UpO1xuICAgICB9LFxuICAgIC8qXG4gICAgICAqIOaIkOWKn+eahOa4uOaIj+e7k+adn1xuICAgICAgKi9cbiAgICBwbGF5R2FtZVJlc3VsdEZhaWxlZCgpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy5wbGF5KHRoaXMuYXVkaW9HYW1lUmVzdWx0RmFpbCxmYWxzZSk7XG4gICAgfSxcbiAgICAvKlxuICAqIOaIkOWKn+eahOa4uOaIj+e7k+adn1xuICAqL1xuICAgIHBsYXlHYW1lUmVzdWx0U3VjY2VzcygpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy5wbGF5KHRoaXMuYXVkaW9HYW1lUmVzdWx0U3VjY2VzcyxmYWxzZSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiDmiqXorabnmoTpn7PmlYhcbiAgICAgKi9cbiAgICBwbGF5V2FybmluZygpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy5wbGF5KHRoaXMuYXVkaW9XYXJuaW5nLGZhbHNlKTtcblxuICAgIH0sXG5cbiAgICBwbGF5V2luKClcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnBsYXkodGhpcy5hdWRpb1dpbixmYWxzZSk7XG4gICAgfSxcblxuICAgIC8qXG4gICAgICog5pa55Z2X56Kw5pKe55qE5aOw6Z+zXG4gICAgICovXG4gICAgcGxheUJyaWNrKClcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnBsYXkodGhpcy5icmlja1NvdW5kLGZhbHNlKTtcbiAgICB9LFxuICAgIC8v5pa55Z2X56C056KO55qE5aOw6Z+zXG4gICAgYnJpY2tCb29tKCl7XG4gICAgICAgIHJldHVybiB0aGlzLnBsYXkodGhpcy5hdWRpb09iaixmYWxzZSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiDmjInpkq5cbiAgICAgKi9cbiAgICBwbGF5QXVkaW9CdXR0b24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wbGF5KHRoaXMuYXVkaW9CdXR0b25DbGljaywgZmFsc2UpO1xuICAgIH0sXG5cbiAgICBwbGF5UmFuZG9tTWF0Y2goKVxuICAgIHtcbiAgICAgICAgdGhpcy5wbGF5TXVzaWModGhpcy5yYW5kb21NYXRjaFNvdW5kKTtcbiAgICB9LFxuICAgIHBsYXlNYXRjaEZvdW5kU291bmQoKVxuICAgIHtcbiAgICAgICAgdGhpcy5zdG9wTXVzaWMoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGxheSh0aGlzLm1hdGNoRm91bmRTb3VuZCwgZmFsc2UpO1xuICAgIH1cbn0pOyJdfQ==