307 lines
29 KiB
JavaScript
307 lines
29 KiB
JavaScript
|
|
(function() {
|
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
|
var __module = nodeEnv ? module : {exports:{}};
|
|
var __filename = 'preview-scripts/assets/Script/BallAudioManager.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, 'bd9f78XOD5PmLTjk2rLYBiz', 'BallAudioManager');
|
|
// Script/BallAudioManager.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));
|
|
} // cc.wwx.OutPut.log('play audio effect isBrowser: ' + context.src);
|
|
|
|
|
|
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; // cc.wwx.OutPut.log('play audio effect wx: ' + audioSource.nativeUrl);
|
|
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFxCYWxsQXVkaW9NYW5hZ2VyLmpzIl0sIm5hbWVzIjpbImNjIiwiQ2xhc3MiLCJDb21wb25lbnQiLCJwcm9wZXJ0aWVzIiwiYXVkaW9HYW1lQmdtMCIsInR5cGUiLCJBdWRpb0NsaXAiLCJhdWRpb0J1dHRvbkNsaWNrIiwiYXVkaW9XYXJuaW5nIiwiYXVkaW9XaW4iLCJyZXdhcmQiLCJmaW5pc2giLCJyZXdhcmRDb3VudCIsImN0b3IiLCJtQXVkaW9NYXAiLCJiZ011c2ljVm9sdW1lIiwiZWZmZWN0TXVzaWNWb2x1bWUiLCJtTXVzaWNTd2l0Y2giLCJtRWZmZWN0U3dpdGNoIiwicGxheSIsImF1ZGlvU291cmNlIiwibG9vcCIsImNhbGxiYWNrIiwiaXNCZ011c2ljIiwidm9sdW1lIiwic3lzIiwiaXNCcm93c2VyIiwiYnJpY2tTb3VuZCIsImNvbnRleHQiLCJhdWRpb0VuZ2luZSIsInNldEZpbmlzaENhbGxiYWNrIiwiY2FsbCIsImJpbmQiLCJ3eCIsImNyZWF0ZUlubmVyQXVkaW9Db250ZXh0IiwiYXV0b3BsYXkiLCJvYmV5TXV0ZVN3aXRjaCIsIm9uRW5kZWQiLCJvZmZFbmRlZCIsInNyYyIsIm5hdGl2ZVVybCIsInNhdmUiLCJvbkxvYWQiLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwiZGlzcGF0Y2hFdmVudCIsInByZWxvYWQiLCJwbGF0Zm9ybSIsIldFQ0hBVF9HQU1FIiwibXVzaWNzIiwiZm9yRWFjaCIsInBhdGgiLCJnZXRBdWRpb011c2ljU3dpdGNoIiwiZ2V0QXVkaW9FZmZlY3RTd2l0Y2giLCJ0cnVuQXVkaW9Tb3VuZCIsIm9uIiwic3dpdGNoTXVzaWMiLCJzd2l0Y2hFZmZlY3QiLCJwbGF5TXVzaWNHYW1lIiwic3RvcE11c2ljIiwib25IaWRlIiwicGF1c2VBbGwiLCJvblNob3ciLCJyZXN1bWVBbGwiLCJwbGF5TXVzaWMiLCJrZXkiLCJtTXVzaWNLZXkiLCJzdG9wIiwicGxheUJvbWIiLCJhdWRpb0JvbWIiLCJwbGF5SmlHdWFuZyIsImF1ZGlvSmlHdWFuZyIsInBsYXlJdGVtMSIsImF1ZGlvSXRlbTEiLCJwbGF5R2FtZVN0YXJ0IiwiYXVkaW9HYW1lU3RhcnQiLCJwbGF5R2FtZU92ZXIiLCJhdWRpb0dhbWVPdmVyIiwicGxheUdhbWVSZXN1bHRGYWlsZWQiLCJhdWRpb0dhbWVSZXN1bHRGYWlsIiwicGxheUdhbWVSZXN1bHRTdWNjZXNzIiwiYXVkaW9HYW1lUmVzdWx0U3VjY2VzcyIsInBsYXlXYXJuaW5nIiwicGxheVdpbiIsInBsYXlCcmljayIsImJyaWNrQm9vbSIsImF1ZGlvT2JqIiwicGxheUF1ZGlvQnV0dG9uIiwicGxheVJhbmRvbU1hdGNoIiwicmFuZG9tTWF0Y2hTb3VuZCIsInBsYXlNYXRjaEZvdW5kU291bmQiLCJtYXRjaEZvdW5kU291bmQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUFBLEVBQUUsQ0FBQ0MsS0FBSCxDQUFTO0FBQ0wsYUFBU0QsRUFBRSxDQUFDRSxTQURQO0FBRUxDLEVBQUFBLFVBQVUsRUFBQztBQUNQO0FBQ0FDLElBQUFBLGFBQWEsRUFBQztBQUNWLGlCQUFRLElBREU7QUFFVkMsTUFBQUEsSUFBSSxFQUFDTCxFQUFFLENBQUNNO0FBRkUsS0FGUDtBQU1QO0FBQ0FDLElBQUFBLGdCQUFnQixFQUFDO0FBQ2IsaUJBQVEsSUFESztBQUViRixNQUFBQSxJQUFJLEVBQUNMLEVBQUUsQ0FBQ007QUFGSyxLQVBWO0FBV1A7QUFDQUUsSUFBQUEsWUFBWSxFQUFDO0FBQ1QsaUJBQVEsSUFEQztBQUVUSCxNQUFBQSxJQUFJLEVBQUNMLEVBQUUsQ0FBQ007QUFGQyxLQVpOO0FBaUJQO0FBQ0FHLElBQUFBLFFBQVEsRUFBQztBQUNMLGlCQUFRLElBREg7QUFFTEosTUFBQUEsSUFBSSxFQUFDTCxFQUFFLENBQUNNO0FBRkgsS0FsQkY7QUF1QlBJLElBQUFBLE1BQU0sRUFBRSxLQXZCRDtBQXdCUEMsSUFBQUEsTUFBTSxFQUFFLEtBeEJEO0FBeUJQQyxJQUFBQSxXQUFXLEVBQUU7QUF6Qk4sR0FGTjtBQThCTEMsRUFBQUEsSUFBSSxFQUFFLGdCQUFZO0FBQ2QsU0FBS0MsU0FBTCxHQUFpQixFQUFqQjtBQUVBO0FBQ1I7QUFDQTtBQUNBOztBQUNRLFNBQUtDLGFBQUwsR0FBcUIsR0FBckI7QUFDQSxTQUFLQyxpQkFBTCxHQUF5QixDQUF6QjtBQUVBLFNBQUtDLFlBQUwsR0FBb0IsQ0FBcEI7QUFDQSxTQUFLQyxhQUFMLEdBQXFCLENBQXJCO0FBQ0gsR0ExQ0k7QUEyQ0xDLEVBQUFBLElBQUksRUFBRyxjQUFTQyxXQUFULEVBQXNCQyxJQUF0QixFQUE0QkMsUUFBNUIsRUFBc0NDLFNBQXRDLEVBQWlEO0FBQ3BELFFBQUlBLFNBQVMsSUFBSSxDQUFDLEtBQUtOLFlBQXZCLEVBQXFDO0FBQ3JDLFFBQUksQ0FBQ00sU0FBRCxJQUFjLENBQUMsS0FBS0wsYUFBeEIsRUFBdUM7QUFFdkMsUUFBSU0sTUFBTSxHQUFHRCxTQUFTLEdBQUcsS0FBS1IsYUFBUixHQUF3QixLQUFLQyxpQkFBbkQ7O0FBRUEsUUFBSWhCLEVBQUUsQ0FBQ3lCLEdBQUgsQ0FBT0MsU0FBWCxFQUFzQjtBQUNsQixVQUFHTixXQUFXLElBQUksS0FBS08sVUFBdkIsRUFBa0M7QUFDOUJILFFBQUFBLE1BQU0sR0FBRyxHQUFUO0FBQ0g7O0FBQ0QsVUFBSUksT0FBTyxHQUFHNUIsRUFBRSxDQUFDNkIsV0FBSCxDQUFlVixJQUFmLENBQW9CQyxXQUFwQixFQUFpQ0MsSUFBakMsRUFBdUNHLE1BQXZDLENBQWQ7O0FBQ0EsVUFBSUYsUUFBSixFQUFhO0FBQ1R0QixRQUFBQSxFQUFFLENBQUM2QixXQUFILENBQWVDLGlCQUFmLENBQWlDRixPQUFqQyxFQUEwQyxZQUFVO0FBQ2hETixVQUFBQSxRQUFRLENBQUNTLElBQVQsQ0FBYyxJQUFkO0FBQ0gsU0FGeUMsQ0FFeENDLElBRndDLENBRW5DLElBRm1DLENBQTFDO0FBR0gsT0FUaUIsQ0FVbEI7OztBQUVBLFdBQUtsQixTQUFMLENBQWVNLFdBQWYsSUFBOEJRLE9BQTlCO0FBQ0EsYUFBT1IsV0FBUDtBQUNILEtBZEQsTUFjTztBQUNILFVBQUlRLE9BQU8sR0FBR0ssRUFBRSxDQUFDQyx1QkFBSCxFQUFkO0FBQ0FOLE1BQUFBLE9BQU8sQ0FBQ08sUUFBUixHQUFtQixJQUFuQjtBQUNBUCxNQUFBQSxPQUFPLENBQUNQLElBQVIsR0FBZUEsSUFBZjtBQUNBTyxNQUFBQSxPQUFPLENBQUNRLGNBQVIsR0FBeUIsSUFBekI7QUFDQVIsTUFBQUEsT0FBTyxDQUFDSixNQUFSLEdBQWlCQSxNQUFqQjs7QUFFQSxVQUFJRixRQUFKLEVBQWM7QUFDVk0sUUFBQUEsT0FBTyxDQUFDUyxPQUFSLENBQWdCLFlBQVc7QUFDdkJmLFVBQUFBLFFBQVEsQ0FBQ1MsSUFBVCxDQUFjLElBQWQ7QUFDSCxTQUZlLENBRWRDLElBRmMsQ0FFVCxJQUZTLENBQWhCO0FBR0gsT0FKRCxNQUlPO0FBQ0hKLFFBQUFBLE9BQU8sQ0FBQ1UsUUFBUjtBQUNILE9BYkUsQ0FlSDs7O0FBQ0FWLE1BQUFBLE9BQU8sQ0FBQ1csR0FBUixHQUFjbkIsV0FBVyxDQUFDb0IsU0FBMUI7QUFDQVosTUFBQUEsT0FBTyxDQUFDVCxJQUFSO0FBQ0EsV0FBS0wsU0FBTCxDQUFlTSxXQUFmLElBQThCUSxPQUE5QixDQWxCRyxDQW9CSDs7QUFFQSxhQUFPUixXQUFQO0FBQ0g7QUFDSixHQXZGSTtBQXlGTHFCLEVBQUFBLElBQUksRUFBRSxnQkFBWSxDQUNkO0FBQ0E7QUFDSCxHQTVGSTtBQTZGTEMsRUFBQUEsTUE3Rkssb0JBNkZJO0FBQUE7O0FBQ0w7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0EsU0FBS2hDLE1BQUwsR0FBYyxLQUFkO0FBQ0EsU0FBS0MsTUFBTCxHQUFjLEtBQWQ7QUFDQSxTQUFLQyxXQUFMLEdBQW1CLENBQW5CO0FBQ0ErQixJQUFBQSxNQUFNLENBQUNDLGdCQUFQLENBQXdCLGNBQXhCLEVBQXdDLFlBQU07QUFDMUM7QUFDQSxNQUFBLEtBQUksQ0FBQ2xDLE1BQUwsR0FBYyxJQUFkO0FBQ0gsS0FIRDtBQUtBLG1CQUFlLE9BQU9pQyxNQUFNLENBQUMsUUFBRCxDQUE1QixHQUNBQSxNQUFNLENBQUNFLGFBQVAsQ0FBcUJGLE1BQU0sQ0FBQyxRQUFELENBQTNCLENBREEsR0FDdUMsRUFEdkM7QUFHQSxTQUFLRyxPQUFMO0FBQ0gsR0FuSEk7QUFvSExBLEVBQUFBLE9BQU8sRUFBRyxtQkFBVztBQUNqQixRQUFJLEVBQUU5QyxFQUFFLENBQUN5QixHQUFILENBQU9zQixRQUFQLEtBQW9CL0MsRUFBRSxDQUFDeUIsR0FBSCxDQUFPdUIsV0FBN0IsQ0FBSixFQUErQztBQUFFO0FBQVM7O0FBRTFELFFBQUlDLE1BQU0sR0FBRyxDQUNULEtBQUs3QyxhQURJLENBQWI7QUFHQTZDLElBQUFBLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlLFVBQVNDLElBQVQsRUFBZSxDQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDSCxLQVZEO0FBV0gsR0FySUk7QUF1SUxDLEVBQUFBLG1CQXZJSyxpQ0F3SUw7QUFDSSxXQUFPLEtBQUtuQyxZQUFaO0FBRUgsR0EzSUk7QUE0SUxvQyxFQUFBQSxvQkE1SUssa0NBNklMO0FBQ0ksV0FBTyxLQUFLbkMsYUFBWjtBQUNILEdBL0lJO0FBZ0pMb0MsRUFBQUEsY0FoSkssMEJBZ0pVQyxFQWhKVixFQWlKTDtBQUNJLFNBQUtDLFdBQUwsQ0FBaUJELEVBQWpCO0FBQ0EsU0FBS0UsWUFBTCxDQUFrQkYsRUFBbEI7QUFDSCxHQXBKSTtBQXFKTEMsRUFBQUEsV0FBVyxFQUFHLHFCQUFTRCxFQUFULEVBQWE7QUFDdkIsUUFBSSxLQUFLdEMsWUFBTCxLQUFzQnNDLEVBQUUsR0FBQyxDQUFELEdBQUcsQ0FBM0IsQ0FBSixFQUNBO0FBQ0ksV0FBS3RDLFlBQUwsR0FBb0IsSUFBRSxLQUFLQSxZQUEzQixDQURKLENBRUk7QUFFSDs7QUFDRCxRQUFHc0MsRUFBSCxFQUNBO0FBQ0ksV0FBS0csYUFBTDtBQUNILEtBSEQsTUFLQTtBQUNJLFdBQUtDLFNBQUw7QUFDSDtBQUNKLEdBcEtJO0FBcUtMRixFQUFBQSxZQUFZLEVBQUcsc0JBQVNGLEVBQVQsRUFBYTtBQUN4QixRQUFJLEtBQUtyQyxhQUFMLEtBQXVCcUMsRUFBRSxHQUFDLENBQUQsR0FBRyxDQUE1QixDQUFKLEVBQW1DO0FBQy9CLFdBQUtyQyxhQUFMLEdBQXFCLElBQUUsS0FBS0EsYUFBNUIsQ0FEK0IsQ0FFL0I7QUFFSDtBQUNKLEdBM0tJO0FBNEtMMEMsRUFBQUEsTUE1S0ssb0JBNEtLO0FBQ041RCxJQUFBQSxFQUFFLENBQUM2QixXQUFILENBQWVnQyxRQUFmLEdBRE0sQ0FHTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNILEdBekxJO0FBMkxMQyxFQUFBQSxNQTNMSyxvQkEyTEs7QUFDTjlELElBQUFBLEVBQUUsQ0FBQzZCLFdBQUgsQ0FBZWtDLFNBQWYsR0FETSxDQUdOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDSCxHQXRNSTtBQXVNTEMsRUFBQUEsU0FBUyxFQUFHLG1CQUFTQyxHQUFULEVBQWMzQyxRQUFkLEVBQXdCRCxJQUF4QixFQUE4QjtBQUV0Q0EsSUFBQUEsSUFBSSxHQUFHLE9BQU9BLElBQVAsSUFBZSxXQUFmLElBQStCQSxJQUEvQixHQUFzQyxJQUF0QyxHQUE2QyxLQUFwRDtBQUVBLFNBQUtzQyxTQUFMO0FBQ0EsU0FBS08sU0FBTCxHQUFpQixLQUFLL0MsSUFBTCxDQUFVOEMsR0FBVixFQUFlNUMsSUFBZixFQUFxQkMsUUFBckIsRUFBK0IsSUFBL0IsQ0FBakI7QUFDSCxHQTdNSTs7QUE4TUw7QUFDSjtBQUNBO0FBQ0lvQyxFQUFBQSxhQWpOSywyQkFpTlk7QUFDYixTQUFLTSxTQUFMLENBQWUsS0FBSzVELGFBQXBCO0FBQ0gsR0FuTkk7O0FBb05MO0FBQ0o7QUFDQTtBQUNJdUQsRUFBQUEsU0F2TkssdUJBdU5RO0FBQ1Q7QUFFQSxRQUFJL0IsT0FBTyxHQUFHLEtBQUtkLFNBQUwsQ0FBZSxLQUFLb0QsU0FBcEIsQ0FBZDs7QUFFQSxRQUFJLE9BQU90QyxPQUFQLElBQW1CLFdBQXZCLEVBQW9DO0FBQ2hDLFVBQUk1QixFQUFFLENBQUN5QixHQUFILENBQU9DLFNBQVgsRUFBc0I7QUFDbEIxQixRQUFBQSxFQUFFLENBQUM2QixXQUFILENBQWVzQyxJQUFmLENBQW9CdkMsT0FBcEI7QUFDSCxPQUZELE1BRU87QUFDSEEsUUFBQUEsT0FBTyxDQUFDdUMsSUFBUjtBQUNIOztBQUNEbkUsTUFBQUEsRUFBRSxDQUFDNkIsV0FBSCxDQUFlc0MsSUFBZixDQUFvQnZDLE9BQXBCO0FBRUg7QUFDSixHQXJPSTtBQXNPTDtBQUNBd0MsRUFBQUEsUUF2T0ssc0JBdU9PO0FBQ1IsV0FBTyxLQUFLakQsSUFBTCxDQUFVLEtBQUtrRCxTQUFmLEVBQTBCLEtBQTFCLENBQVA7QUFDSCxHQXpPSTtBQTBPTDtBQUNBQyxFQUFBQSxXQTNPSyx5QkE0T0w7QUFDSSxXQUFPLEtBQUtuRCxJQUFMLENBQVUsS0FBS29ELFlBQWYsRUFBNkIsS0FBN0IsQ0FBUDtBQUNILEdBOU9JO0FBK09MO0FBQ0FDLEVBQUFBLFNBaFBLLHVCQWlQTDtBQUNJLFdBQU8sS0FBS3JELElBQUwsQ0FBVSxLQUFLc0QsVUFBZixFQUEyQixLQUEzQixDQUFQO0FBQ0gsR0FuUEk7O0FBb1BMO0FBQ0o7QUFDQTtBQUNBO0FBQ0tDLEVBQUFBLGFBeFBJLDJCQXlQSjtBQUNJLFdBQU8sS0FBS3ZELElBQUwsQ0FBVSxLQUFLd0QsY0FBZixFQUErQixLQUEvQixDQUFQO0FBQ0gsR0EzUEc7O0FBNFBKO0FBQ0w7QUFDQTtBQUNLQyxFQUFBQSxZQS9QSSwwQkFnUUo7QUFDSSxXQUFPLEtBQUt6RCxJQUFMLENBQVUsS0FBSzBELGFBQWYsRUFBNkIsS0FBN0IsQ0FBUDtBQUNILEdBbFFHOztBQW1RTDtBQUNKO0FBQ0E7QUFDSUMsRUFBQUEsb0JBdFFLLGtDQXVRTDtBQUNJLFdBQU8sS0FBSzNELElBQUwsQ0FBVSxLQUFLNEQsbUJBQWYsRUFBbUMsS0FBbkMsQ0FBUDtBQUNILEdBelFJOztBQTBRTDtBQUNKO0FBQ0E7QUFDSUMsRUFBQUEscUJBN1FLLG1DQThRTDtBQUNJLFdBQU8sS0FBSzdELElBQUwsQ0FBVSxLQUFLOEQsc0JBQWYsRUFBc0MsS0FBdEMsQ0FBUDtBQUNILEdBaFJJOztBQWlSTDtBQUNKO0FBQ0E7QUFDSUMsRUFBQUEsV0FwUksseUJBcVJMO0FBQ0ksV0FBTyxLQUFLL0QsSUFBTCxDQUFVLEtBQUtYLFlBQWYsRUFBNEIsS0FBNUIsQ0FBUDtBQUVILEdBeFJJO0FBMFJMMkUsRUFBQUEsT0ExUksscUJBMlJMO0FBQ0ksV0FBTyxLQUFLaEUsSUFBTCxDQUFVLEtBQUtWLFFBQWYsRUFBd0IsS0FBeEIsQ0FBUDtBQUNILEdBN1JJOztBQStSTDtBQUNKO0FBQ0E7QUFDSTJFLEVBQUFBLFNBbFNLLHVCQW1TTDtBQUNJLFdBQU8sS0FBS2pFLElBQUwsQ0FBVSxLQUFLUSxVQUFmLEVBQTBCLEtBQTFCLENBQVA7QUFDSCxHQXJTSTtBQXNTTDtBQUNBMEQsRUFBQUEsU0F2U0ssdUJBdVNNO0FBQ1AsV0FBTyxLQUFLbEUsSUFBTCxDQUFVLEtBQUttRSxRQUFmLEVBQXdCLEtBQXhCLENBQVA7QUFDSCxHQXpTSTs7QUEwU0w7QUFDSjtBQUNBO0FBQ0lDLEVBQUFBLGVBN1NLLDZCQTZTYztBQUNmLFdBQU8sS0FBS3BFLElBQUwsQ0FBVSxLQUFLWixnQkFBZixFQUFpQyxLQUFqQyxDQUFQO0FBQ0gsR0EvU0k7QUFpVExpRixFQUFBQSxlQWpUSyw2QkFrVEw7QUFDSSxTQUFLeEIsU0FBTCxDQUFlLEtBQUt5QixnQkFBcEI7QUFDSCxHQXBUSTtBQXFUTEMsRUFBQUEsbUJBclRLLGlDQXNUTDtBQUNJLFNBQUsvQixTQUFMO0FBQ0EsV0FBTyxLQUFLeEMsSUFBTCxDQUFVLEtBQUt3RSxlQUFmLEVBQWdDLEtBQWhDLENBQVA7QUFDSDtBQXpUSSxDQUFUIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyJjYy5DbGFzcyh7XG4gICAgZXh0ZW5kczogY2MuQ29tcG9uZW50LFxuICAgIHByb3BlcnRpZXM6e1xuICAgICAgICAvL+iDjOaZr+mfs+S5kFxuICAgICAgICBhdWRpb0dhbWVCZ20wOntcbiAgICAgICAgICAgIGRlZmF1bHQ6bnVsbCxcbiAgICAgICAgICAgIHR5cGU6Y2MuQXVkaW9DbGlwXG4gICAgICAgIH0sXG4gICAgICAgIC8vIOaMiemSrueCueWHu1xuICAgICAgICBhdWRpb0J1dHRvbkNsaWNrOntcbiAgICAgICAgICAgIGRlZmF1bHQ6bnVsbCxcbiAgICAgICAgICAgIHR5cGU6Y2MuQXVkaW9DbGlwXG4gICAgICAgIH0sXG4gICAgICAgIC8vIOaKpeitpumfs+aViFxuICAgICAgICBhdWRpb1dhcm5pbmc6e1xuICAgICAgICAgICAgZGVmYXVsdDpudWxsLFxuICAgICAgICAgICAgdHlwZTpjYy5BdWRpb0NsaXBcbiAgICAgICAgfSxcblxuICAgICAgICAvL+a4uOaIj+W8gOWni+mfs+aViFxuICAgICAgICBhdWRpb1dpbjp7XG4gICAgICAgICAgICBkZWZhdWx0Om51bGwsXG4gICAgICAgICAgICB0eXBlOmNjLkF1ZGlvQ2xpcFxuICAgICAgICB9LFxuXG4gICAgICAgIHJld2FyZDogZmFsc2UsXG4gICAgICAgIGZpbmlzaDogZmFsc2UsXG4gICAgICAgIHJld2FyZENvdW50OiAwXG5cbiAgICB9LFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5tQXVkaW9NYXAgPSB7fTtcblxuICAgICAgICAvKipcbiAgICAgICAgICog6buY6K6k6Z+z6YeP5aSn5bCPXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmJnTXVzaWNWb2x1bWUgPSAwLjE7XG4gICAgICAgIHRoaXMuZWZmZWN0TXVzaWNWb2x1bWUgPSAxO1xuXG4gICAgICAgIHRoaXMubU11c2ljU3dpdGNoID0gMTtcbiAgICAgICAgdGhpcy5tRWZmZWN0U3dpdGNoID0gMTtcbiAgICB9LFxuICAgIHBsYXkgOiBmdW5jdGlvbihhdWRpb1NvdXJjZSwgbG9vcCwgY2FsbGJhY2ssIGlzQmdNdXNpYykge1xuICAgICAgICBpZiAoaXNCZ011c2ljICYmICF0aGlzLm1NdXNpY1N3aXRjaCkgcmV0dXJuO1xuICAgICAgICBpZiAoIWlzQmdNdXNpYyAmJiAhdGhpcy5tRWZmZWN0U3dpdGNoKSByZXR1cm47XG5cbiAgICAgICAgdmFyIHZvbHVtZSA9IGlzQmdNdXNpYyA/IHRoaXMuYmdNdXNpY1ZvbHVtZSA6IHRoaXMuZWZmZWN0TXVzaWNWb2x1bWU7XG5cbiAgICAgICAgaWYgKGNjLnN5cy5pc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgIGlmKGF1ZGlvU291cmNlID09IHRoaXMuYnJpY2tTb3VuZCl7XG4gICAgICAgICAgICAgICAgdm9sdW1lID0gMC4xO1xuICAgICAgICAgICAgfSBcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0gY2MuYXVkaW9FbmdpbmUucGxheShhdWRpb1NvdXJjZSwgbG9vcCwgdm9sdW1lKTtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayl7XG4gICAgICAgICAgICAgICAgY2MuYXVkaW9FbmdpbmUuc2V0RmluaXNoQ2FsbGJhY2soY29udGV4dCwgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY2Mud3d4Lk91dFB1dC5sb2coJ3BsYXkgYXVkaW8gZWZmZWN0IGlzQnJvd3NlcjogJyArIGNvbnRleHQuc3JjKTtcblxuICAgICAgICAgICAgdGhpcy5tQXVkaW9NYXBbYXVkaW9Tb3VyY2VdID0gY29udGV4dDtcbiAgICAgICAgICAgIHJldHVybiBhdWRpb1NvdXJjZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0gd3guY3JlYXRlSW5uZXJBdWRpb0NvbnRleHQoKTtcbiAgICAgICAgICAgIGNvbnRleHQuYXV0b3BsYXkgPSB0cnVlO1xuICAgICAgICAgICAgY29udGV4dC5sb29wID0gbG9vcDtcbiAgICAgICAgICAgIGNvbnRleHQub2JleU11dGVTd2l0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgY29udGV4dC52b2x1bWUgPSB2b2x1bWU7XG5cbiAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNvbnRleHQub25FbmRlZChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0Lm9mZkVuZGVkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAgICAgLy8gdmFyIGF1ZGlvUGF0aCA9IGNjLnVybC5yYXcoXCJyZXNvdXJjZXMvQmFsbE1hc3Rlci9zb3VuZHNcIiArIGF1ZGlvU291cmNlLm5hbWUgKyBcIi5tcDNcIik7XG4gICAgICAgICAgICBjb250ZXh0LnNyYyA9IGF1ZGlvU291cmNlLm5hdGl2ZVVybDtcbiAgICAgICAgICAgIGNvbnRleHQucGxheSgpXG4gICAgICAgICAgICB0aGlzLm1BdWRpb01hcFthdWRpb1NvdXJjZV0gPSBjb250ZXh0O1xuICAgICAgICBcbiAgICAgICAgICAgIC8vIGNjLnd3eC5PdXRQdXQubG9nKCdwbGF5IGF1ZGlvIGVmZmVjdCB3eDogJyArIGF1ZGlvU291cmNlLm5hdGl2ZVVybCk7XG4gICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIGF1ZGlvU291cmNlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNhdmU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gY2Mud3d4LlN0b3JhZ2Uuc2V0SXRlbShjYy53d3guU3RvcmFnZS5LZXlfU2V0dGluZ19NdXNpY19Wb2x1bWUsIHRoaXMubU11c2ljU3dpdGNoKTtcbiAgICAgICAgLy8gY2Mud3d4LlN0b3JhZ2Uuc2V0SXRlbShjYy53d3guU3RvcmFnZS5LZXlfU2V0dGluZ19FZmZlY3RfVm9sdW1lLCB0aGlzLm1FZmZlY3RTd2l0Y2gpO1xuICAgIH0sXG4gICAgb25Mb2FkKCkge1xuICAgICAgICAvLyBjYy53d3guU3RvcmFnZS5nZXRJdGVtKGNjLnd3eC5TdG9yYWdlLktleV9TZXR0aW5nX011c2ljX1ZvbHVtZSwgZnVuY3Rpb24odm9sdW1lKSB7XG4gICAgICAgIC8vICAgICB0aGlzLm1NdXNpY1N3aXRjaCA9IHBhcnNlSW50KHZvbHVtZSk7XG4gICAgICAgIC8vIH0uYmluZCh0aGlzKSwgMSk7XG5cbiAgICAgICAgLy8gY2Mud3d4LlN0b3JhZ2UuZ2V0SXRlbShjYy53d3guU3RvcmFnZS5LZXlfU2V0dGluZ19FZmZlY3RfVm9sdW1lLCBmdW5jdGlvbih2b2x1bWUpIHtcbiAgICAgICAgLy8gICAgIHRoaXMubUVmZmVjdFN3aXRjaCA9IHBhcnNlSW50KHZvbHVtZSk7XG4gICAgICAgIC8vIH0uYmluZCh0aGlzKSwgMSk7XG5cblxuICAgICAgICB0aGlzLnJld2FyZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZpbmlzaCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJld2FyZENvdW50ID0gMDtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jld2FyZENhblVzZScsICgpID0+IHtcbiAgICAgICAgICAgIC8vIOatpOaXtua/gOWKseWPr+eUqCDmuLjmiI/lhoXpg6jpgLvovpFcbiAgICAgICAgICAgIHRoaXMucmV3YXJkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJ3VuZGVmaW5lZCcgIT0gdHlwZW9mIHdpbmRvd1sncmV3YXJkJ10gPyBcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQod2luZG93WydyZXdhcmQnXSk6XCJcIlxuXG4gICAgICAgIHRoaXMucHJlbG9hZCgpO1xuICAgIH0sXG4gICAgcHJlbG9hZCA6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoIShjYy5zeXMucGxhdGZvcm0gPT09IGNjLnN5cy5XRUNIQVRfR0FNRSkpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgdmFyIG11c2ljcyA9IFtcbiAgICAgICAgICAgIHRoaXMuYXVkaW9HYW1lQmdtMCxcbiAgICAgICAgXTtcbiAgICAgICAgbXVzaWNzLmZvckVhY2goZnVuY3Rpb24ocGF0aCkge1xuICAgICAgICAgICAgLy8gdmFyIG11c2ljUGF0aCA9IHd4RG93bmxvYWRlci5SRU1PVEVfU0VSVkVSX1JPT1QgKyBwYXRoO1xuICAgICAgICAgICAgLy8gaWYgKG11c2ljUGF0aCAhPSB3eERvd25sb2FkZXIuUkVNT1RFX1NFUlZFUl9ST09UICYmIG11c2ljUGF0aC5lbmRzV2l0aCgnLm1wMycpKSB7XG4gICAgICAgICAgICAvLyAgICAgY2MubG9hZGVyLmxvYWQobXVzaWNQYXRoLCBmdW5jdGlvbihlcnIsIHJlbW90ZVVybCkge1xuICAgICAgICAgICAgLy8gICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBjYy5lcnJvcihlcnIubWVzc2FnZSB8fCBlcnIpO1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgICAgICAvLyAgICAgfSk7XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldEF1ZGlvTXVzaWNTd2l0Y2goKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubU11c2ljU3dpdGNoO1xuXG4gICAgfSxcbiAgICBnZXRBdWRpb0VmZmVjdFN3aXRjaCgpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy5tRWZmZWN0U3dpdGNoO1xuICAgIH0sXG4gICAgdHJ1bkF1ZGlvU291bmQob24pXG4gICAge1xuICAgICAgICB0aGlzLnN3aXRjaE11c2ljKG9uKTtcbiAgICAgICAgdGhpcy5zd2l0Y2hFZmZlY3Qob24pXG4gICAgfSxcbiAgICBzd2l0Y2hNdXNpYyA6IGZ1bmN0aW9uKG9uKSB7XG4gICAgICAgIGlmICh0aGlzLm1NdXNpY1N3aXRjaCAhPSAob24/MTowKSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5tTXVzaWNTd2l0Y2ggPSAxLXRoaXMubU11c2ljU3dpdGNoO1xuICAgICAgICAgICAgLy8gdGhpcy5zYXZlKCk7XG4gICAgICAgICAgICBcbiAgICAgICAgfVxuICAgICAgICBpZihvbilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wbGF5TXVzaWNHYW1lKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnN0b3BNdXNpYygpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBzd2l0Y2hFZmZlY3QgOiBmdW5jdGlvbihvbikge1xuICAgICAgICBpZiAodGhpcy5tRWZmZWN0U3dpdGNoICE9IChvbj8xOjApKXtcbiAgICAgICAgICAgIHRoaXMubUVmZmVjdFN3aXRjaCA9IDEtdGhpcy5tRWZmZWN0U3dpdGNoO1xuICAgICAgICAgICAgLy8gdGhpcy5zYXZlKCk7XG5cbiAgICAgICAgfVxuICAgIH0sXG4gICAgb25IaWRlICgpIHtcbiAgICAgICAgY2MuYXVkaW9FbmdpbmUucGF1c2VBbGwoKTtcblxuICAgICAgICAvLyBpZiAoQ0NfSlNCKSB7XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5tQXVkaW9NYXApIHtcbiAgICAgICAgLy8gICAgICAgICBpZiAoa2V5ID09PSB0aGlzLm1NdXNpY0tleSkge1xuICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLm1BdWRpb01hcFtrZXldLnBhdXNlKCk7XG4gICAgICAgIC8vICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy5tQXVkaW9NYXBba2V5XS5zdG9wKCk7XG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9XG4gICAgfSxcblxuICAgIG9uU2hvdyAoKSB7XG4gICAgICAgIGNjLmF1ZGlvRW5naW5lLnJlc3VtZUFsbCgpO1xuXG4gICAgICAgIC8vIGlmIChDQ19KU0IpIHtcbiAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgLy8gICAgIGlmICghdGhpcy5tTXVzaWNTd2l0Y2gpIHJldHVybjtcbiAgICAgICAgLy8gICAgIHZhciBjb250ZXh0ID0gdGhpcy5tQXVkaW9NYXBbdGhpcy5tTXVzaWNLZXldO1xuICAgICAgICAvLyAgICAgaWYgKGNvbnRleHQpIHtcbiAgICAgICAgLy8gICAgICAgICBjb250ZXh0LnBsYXkoKTtcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gfVxuICAgIH0sXG4gICAgcGxheU11c2ljIDogZnVuY3Rpb24oa2V5LCBjYWxsYmFjaywgbG9vcCkge1xuXG4gICAgICAgIGxvb3AgPSB0eXBlb2YgbG9vcCA9PSAndW5kZWZpbmVkJyAgfHwgbG9vcCA/IHRydWUgOiBmYWxzZTtcblxuICAgICAgICB0aGlzLnN0b3BNdXNpYygpO1xuICAgICAgICB0aGlzLm1NdXNpY0tleSA9IHRoaXMucGxheShrZXksIGxvb3AsIGNhbGxiYWNrLCB0cnVlKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIOa4uOaIj+iDjOaZr+mfs+S5kFxuICAgICAqL1xuICAgIHBsYXlNdXNpY0dhbWUgKCkge1xuICAgICAgICB0aGlzLnBsYXlNdXNpYyh0aGlzLmF1ZGlvR2FtZUJnbTApO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICog5YGc5q2i6IOM5pmv6Z+z5LmQ5pKt5pS+XG4gICAgICovXG4gICAgc3RvcE11c2ljICgpIHtcbiAgICAgICAgLy8gY2Mud3d4Lk91dFB1dC5sb2coJ3N0b3BNdXNpYyBhdWRpbyBlZmZlY3Qgd3g6ICcgKyB0aGlzLm1NdXNpY0tleSk7XG5cbiAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLm1BdWRpb01hcFt0aGlzLm1NdXNpY0tleV07XG5cbiAgICAgICAgaWYgKHR5cGVvZihjb250ZXh0KSAhPSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaWYgKGNjLnN5cy5pc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgICAgICBjYy5hdWRpb0VuZ2luZS5zdG9wKGNvbnRleHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnN0b3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNjLmF1ZGlvRW5naW5lLnN0b3AoY29udGV4dCk7XG5cbiAgICAgICAgfVxuICAgIH0sXG4gICAgLy8g54K45by544CB54Gr566t54iG54K46Z+z5pWIXG4gICAgcGxheUJvbWIgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wbGF5KHRoaXMuYXVkaW9Cb21iLCBmYWxzZSk7XG4gICAgfSxcbiAgICAvL+a/gOWFiemfs+aViFxuICAgIHBsYXlKaUd1YW5nKClcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnBsYXkodGhpcy5hdWRpb0ppR3VhbmcsIGZhbHNlKTtcbiAgICB9LFxuICAgIC8v5oqA6IO96Z+z5pWIXG4gICAgcGxheUl0ZW0xKClcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnBsYXkodGhpcy5hdWRpb0l0ZW0xLCBmYWxzZSk7XG4gICAgfSxcbiAgICAvKlxuICAgICAqIOa4uOaIj+W8gOWni+mfs+aViFxuICAgICAqXG4gICAgICovXG4gICAgIHBsYXlHYW1lU3RhcnQoKVxuICAgICB7XG4gICAgICAgICByZXR1cm4gdGhpcy5wbGF5KHRoaXMuYXVkaW9HYW1lU3RhcnQsIGZhbHNlKTtcbiAgICAgfSxcbiAgICAgLypcbiAgICAgICog5aSx6LSl55qE5ri45oiP57uT5p2fXG4gICAgICAqL1xuICAgICBwbGF5R2FtZU92ZXIoKVxuICAgICB7XG4gICAgICAgICByZXR1cm4gdGhpcy5wbGF5KHRoaXMuYXVkaW9HYW1lT3ZlcixmYWxzZSk7XG4gICAgIH0sXG4gICAgLypcbiAgICAgICog5oiQ5Yqf55qE5ri45oiP57uT5p2fXG4gICAgICAqL1xuICAgIHBsYXlHYW1lUmVzdWx0RmFpbGVkKClcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnBsYXkodGhpcy5hdWRpb0dhbWVSZXN1bHRGYWlsLGZhbHNlKTtcbiAgICB9LFxuICAgIC8qXG4gICog5oiQ5Yqf55qE5ri45oiP57uT5p2fXG4gICovXG4gICAgcGxheUdhbWVSZXN1bHRTdWNjZXNzKClcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnBsYXkodGhpcy5hdWRpb0dhbWVSZXN1bHRTdWNjZXNzLGZhbHNlKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIOaKpeitpueahOmfs+aViFxuICAgICAqL1xuICAgIHBsYXlXYXJuaW5nKClcbiAgICB7XG4gICAgICAgIHJldHVybiB0aGlzLnBsYXkodGhpcy5hdWRpb1dhcm5pbmcsZmFsc2UpO1xuXG4gICAgfSxcblxuICAgIHBsYXlXaW4oKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGxheSh0aGlzLmF1ZGlvV2luLGZhbHNlKTtcbiAgICB9LFxuXG4gICAgLypcbiAgICAgKiDmlrnlnZfnorDmkp7nmoTlo7Dpn7NcbiAgICAgKi9cbiAgICBwbGF5QnJpY2soKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGxheSh0aGlzLmJyaWNrU291bmQsZmFsc2UpO1xuICAgIH0sXG4gICAgLy/mlrnlnZfnoLTnoo7nmoTlo7Dpn7NcbiAgICBicmlja0Jvb20oKXtcbiAgICAgICAgcmV0dXJuIHRoaXMucGxheSh0aGlzLmF1ZGlvT2JqLGZhbHNlKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIOaMiemSrlxuICAgICAqL1xuICAgIHBsYXlBdWRpb0J1dHRvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBsYXkodGhpcy5hdWRpb0J1dHRvbkNsaWNrLCBmYWxzZSk7XG4gICAgfSxcblxuICAgIHBsYXlSYW5kb21NYXRjaCgpXG4gICAge1xuICAgICAgICB0aGlzLnBsYXlNdXNpYyh0aGlzLnJhbmRvbU1hdGNoU291bmQpO1xuICAgIH0sXG4gICAgcGxheU1hdGNoRm91bmRTb3VuZCgpXG4gICAge1xuICAgICAgICB0aGlzLnN0b3BNdXNpYygpO1xuICAgICAgICByZXR1cm4gdGhpcy5wbGF5KHRoaXMubWF0Y2hGb3VuZFNvdW5kLCBmYWxzZSk7XG4gICAgfVxufSk7Il19
|