WordPress.org

Make WordPress Core

Ticket #35338: 35338.diff

File 35338.diff, 526.6 KB (added by henry.wright, 5 years ago)
  • src/wp-includes/js/media-audiovideo.js

    diff --git src/wp-includes/js/media-audiovideo.js src/wp-includes/js/media-audiovideo.js
    index 5c64097..ed523e0 100644
    VideoDetails = MediaDetails.extend({ 
    913913
    914914module.exports = VideoDetails;
    915915
    916 },{}]},{},[1]);
     916},{}]},{},[1])
     917//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9ncnVudC1icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvYXVkaW92aWRlby5tYW5pZmVzdC5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS9jb250cm9sbGVycy9hdWRpby1kZXRhaWxzLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL2NvbnRyb2xsZXJzL3ZpZGVvLWRldGFpbHMuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvbW9kZWxzL3Bvc3QtbWVkaWEuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvYXVkaW8tZGV0YWlscy5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9mcmFtZS9hdWRpby1kZXRhaWxzLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL2ZyYW1lL21lZGlhLWRldGFpbHMuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvZnJhbWUvdmlkZW8tZGV0YWlscy5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9tZWRpYS1kZXRhaWxzLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL3ZpZGVvLWRldGFpbHMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdk5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNySUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsInZhciBtZWRpYSA9IHdwLm1lZGlhLFxuXHRiYXNlU2V0dGluZ3MgPSB3aW5kb3cuX3dwbWVqc1NldHRpbmdzIHx8IHt9LFxuXHRsMTBuID0gd2luZG93Ll93cE1lZGlhVmlld3NMMTBuIHx8IHt9O1xuXG4vKipcbiAqIEBtaXhpblxuICovXG53cC5tZWRpYS5taXhpbiA9IHtcblx0bWVqc1NldHRpbmdzOiBiYXNlU2V0dGluZ3MsXG5cblx0cmVtb3ZlQWxsUGxheWVyczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHA7XG5cblx0XHRpZiAoIHdpbmRvdy5tZWpzICYmIHdpbmRvdy5tZWpzLnBsYXllcnMgKSB7XG5cdFx0XHRmb3IgKCBwIGluIHdpbmRvdy5tZWpzLnBsYXllcnMgKSB7XG5cdFx0XHRcdHdpbmRvdy5tZWpzLnBsYXllcnNbcF0ucGF1c2UoKTtcblx0XHRcdFx0dGhpcy5yZW1vdmVQbGF5ZXIoIHdpbmRvdy5tZWpzLnBsYXllcnNbcF0gKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIE92ZXJyaWRlIHRoZSBNZWRpYUVsZW1lbnQgbWV0aG9kIGZvciByZW1vdmluZyBhIHBsYXllci5cblx0ICpcdE1lZGlhRWxlbWVudCB0cmllcyB0byBwdWxsIHRoZSBhdWRpby92aWRlbyB0YWcgb3V0IG9mXG5cdCAqXHRpdHMgY29udGFpbmVyIGFuZCByZS1hZGQgaXQgdG8gdGhlIERPTS5cblx0ICovXG5cdHJlbW92ZVBsYXllcjogZnVuY3Rpb24odCkge1xuXHRcdHZhciBmZWF0dXJlSW5kZXgsIGZlYXR1cmU7XG5cblx0XHRpZiAoICEgdC5vcHRpb25zICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGludm9rZSBmZWF0dXJlcyBjbGVhbnVwXG5cdFx0Zm9yICggZmVhdHVyZUluZGV4IGluIHQub3B0aW9ucy5mZWF0dXJlcyApIHtcblx0XHRcdGZlYXR1cmUgPSB0Lm9wdGlvbnMuZmVhdHVyZXNbZmVhdHVyZUluZGV4XTtcblx0XHRcdGlmICggdFsnY2xlYW4nICsgZmVhdHVyZV0gKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0dFsnY2xlYW4nICsgZmVhdHVyZV0odCk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHt9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCAhIHQuaXNEeW5hbWljICkge1xuXHRcdFx0dC4kbm9kZS5yZW1vdmUoKTtcblx0XHR9XG5cblx0XHRpZiAoICduYXRpdmUnICE9PSB0Lm1lZGlhLnBsdWdpblR5cGUgKSB7XG5cdFx0XHR0LiRtZWRpYS5yZW1vdmUoKTtcblx0XHR9XG5cblx0XHRkZWxldGUgd2luZG93Lm1lanMucGxheWVyc1t0LmlkXTtcblxuXHRcdHQuY29udGFpbmVyLnJlbW92ZSgpO1xuXHRcdHQuZ2xvYmFsVW5iaW5kKCk7XG5cdFx0ZGVsZXRlIHQubm9kZS5wbGF5ZXI7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEFsbG93cyBhbnkgY2xhc3MgdGhhdCBoYXMgc2V0ICdwbGF5ZXInIHRvIGEgTWVkaWFFbGVtZW50UGxheWVyXG5cdCAqICBpbnN0YW5jZSB0byByZW1vdmUgdGhlIHBsYXllciB3aGVuIGxpc3RlbmluZyB0byBldmVudHMuXG5cdCAqXG5cdCAqICBFeGFtcGxlczogbW9kYWwgY2xvc2VzLCBzaG9ydGNvZGUgcHJvcGVydGllcyBhcmUgcmVtb3ZlZCwgZXRjLlxuXHQgKi9cblx0dW5zZXRQbGF5ZXJzIDogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCB0aGlzLnBsYXllcnMgJiYgdGhpcy5wbGF5ZXJzLmxlbmd0aCApIHtcblx0XHRcdF8uZWFjaCggdGhpcy5wbGF5ZXJzLCBmdW5jdGlvbiAocGxheWVyKSB7XG5cdFx0XHRcdHBsYXllci5wYXVzZSgpO1xuXHRcdFx0XHR3cC5tZWRpYS5taXhpbi5yZW1vdmVQbGF5ZXIoIHBsYXllciApO1xuXHRcdFx0fSApO1xuXHRcdFx0dGhpcy5wbGF5ZXJzID0gW107XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIEF1dG93aXJlIFwiY29sbGVjdGlvblwiLXR5cGUgc2hvcnRjb2Rlc1xuICovXG53cC5tZWRpYS5wbGF5bGlzdCA9IG5ldyB3cC5tZWRpYS5jb2xsZWN0aW9uKHtcblx0dGFnOiAncGxheWxpc3QnLFxuXHRlZGl0VGl0bGUgOiBsMTBuLmVkaXRQbGF5bGlzdFRpdGxlLFxuXHRkZWZhdWx0cyA6IHtcblx0XHRpZDogd3AubWVkaWEudmlldy5zZXR0aW5ncy5wb3N0LmlkLFxuXHRcdHN0eWxlOiAnbGlnaHQnLFxuXHRcdHRyYWNrbGlzdDogdHJ1ZSxcblx0XHR0cmFja251bWJlcnM6IHRydWUsXG5cdFx0aW1hZ2VzOiB0cnVlLFxuXHRcdGFydGlzdHM6IHRydWUsXG5cdFx0dHlwZTogJ2F1ZGlvJ1xuXHR9XG59KTtcblxuLyoqXG4gKiBTaG9ydGNvZGUgbW9kZWxpbmcgZm9yIGF1ZGlvXG4gKiAgYGVkaXQoKWAgcHJlcGFyZXMgdGhlIHNob3J0Y29kZSBmb3IgdGhlIG1lZGlhIG1vZGFsXG4gKiAgYHNob3J0Y29kZSgpYCBidWlsZHMgdGhlIG5ldyBzaG9ydGNvZGUgYWZ0ZXIgdXBkYXRlXG4gKlxuICogQG5hbWVzcGFjZVxuICovXG53cC5tZWRpYS5hdWRpbyA9IHtcblx0Y29lcmNlIDogd3AubWVkaWEuY29lcmNlLFxuXG5cdGRlZmF1bHRzIDoge1xuXHRcdGlkIDogd3AubWVkaWEudmlldy5zZXR0aW5ncy5wb3N0LmlkLFxuXHRcdHNyYyA6ICcnLFxuXHRcdGxvb3AgOiBmYWxzZSxcblx0XHRhdXRvcGxheSA6IGZhbHNlLFxuXHRcdHByZWxvYWQgOiAnbm9uZScsXG5cdFx0d2lkdGggOiA0MDBcblx0fSxcblxuXHRlZGl0IDogZnVuY3Rpb24oIGRhdGEgKSB7XG5cdFx0dmFyIGZyYW1lLCBzaG9ydGNvZGUgPSB3cC5zaG9ydGNvZGUubmV4dCggJ2F1ZGlvJywgZGF0YSApLnNob3J0Y29kZTtcblxuXHRcdGZyYW1lID0gd3AubWVkaWEoe1xuXHRcdFx0ZnJhbWU6ICdhdWRpbycsXG5cdFx0XHRzdGF0ZTogJ2F1ZGlvLWRldGFpbHMnLFxuXHRcdFx0bWV0YWRhdGE6IF8uZGVmYXVsdHMoIHNob3J0Y29kZS5hdHRycy5uYW1lZCwgdGhpcy5kZWZhdWx0cyApXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gZnJhbWU7XG5cdH0sXG5cblx0c2hvcnRjb2RlIDogZnVuY3Rpb24oIG1vZGVsICkge1xuXHRcdHZhciBjb250ZW50O1xuXG5cdFx0Xy5lYWNoKCB0aGlzLmRlZmF1bHRzLCBmdW5jdGlvbiggdmFsdWUsIGtleSApIHtcblx0XHRcdG1vZGVsWyBrZXkgXSA9IHRoaXMuY29lcmNlKCBtb2RlbCwga2V5ICk7XG5cblx0XHRcdGlmICggdmFsdWUgPT09IG1vZGVsWyBrZXkgXSApIHtcblx0XHRcdFx0ZGVsZXRlIG1vZGVsWyBrZXkgXTtcblx0XHRcdH1cblx0XHR9LCB0aGlzICk7XG5cblx0XHRjb250ZW50ID0gbW9kZWwuY29udGVudDtcblx0XHRkZWxldGUgbW9kZWwuY29udGVudDtcblxuXHRcdHJldHVybiBuZXcgd3Auc2hvcnRjb2RlKHtcblx0XHRcdHRhZzogJ2F1ZGlvJyxcblx0XHRcdGF0dHJzOiBtb2RlbCxcblx0XHRcdGNvbnRlbnQ6IGNvbnRlbnRcblx0XHR9KTtcblx0fVxufTtcblxuLyoqXG4gKiBTaG9ydGNvZGUgbW9kZWxpbmcgZm9yIHZpZGVvXG4gKiAgYGVkaXQoKWAgcHJlcGFyZXMgdGhlIHNob3J0Y29kZSBmb3IgdGhlIG1lZGlhIG1vZGFsXG4gKiAgYHNob3J0Y29kZSgpYCBidWlsZHMgdGhlIG5ldyBzaG9ydGNvZGUgYWZ0ZXIgdXBkYXRlXG4gKlxuICogQG5hbWVzcGFjZVxuICovXG53cC5tZWRpYS52aWRlbyA9IHtcblx0Y29lcmNlIDogd3AubWVkaWEuY29lcmNlLFxuXG5cdGRlZmF1bHRzIDoge1xuXHRcdGlkIDogd3AubWVkaWEudmlldy5zZXR0aW5ncy5wb3N0LmlkLFxuXHRcdHNyYyA6ICcnLFxuXHRcdHBvc3RlciA6ICcnLFxuXHRcdGxvb3AgOiBmYWxzZSxcblx0XHRhdXRvcGxheSA6IGZhbHNlLFxuXHRcdHByZWxvYWQgOiAnbWV0YWRhdGEnLFxuXHRcdGNvbnRlbnQgOiAnJyxcblx0XHR3aWR0aCA6IDY0MCxcblx0XHRoZWlnaHQgOiAzNjBcblx0fSxcblxuXHRlZGl0IDogZnVuY3Rpb24oIGRhdGEgKSB7XG5cdFx0dmFyIGZyYW1lLFxuXHRcdFx0c2hvcnRjb2RlID0gd3Auc2hvcnRjb2RlLm5leHQoICd2aWRlbycsIGRhdGEgKS5zaG9ydGNvZGUsXG5cdFx0XHRhdHRycztcblxuXHRcdGF0dHJzID0gc2hvcnRjb2RlLmF0dHJzLm5hbWVkO1xuXHRcdGF0dHJzLmNvbnRlbnQgPSBzaG9ydGNvZGUuY29udGVudDtcblxuXHRcdGZyYW1lID0gd3AubWVkaWEoe1xuXHRcdFx0ZnJhbWU6ICd2aWRlbycsXG5cdFx0XHRzdGF0ZTogJ3ZpZGVvLWRldGFpbHMnLFxuXHRcdFx0bWV0YWRhdGE6IF8uZGVmYXVsdHMoIGF0dHJzLCB0aGlzLmRlZmF1bHRzIClcblx0XHR9KTtcblxuXHRcdHJldHVybiBmcmFtZTtcblx0fSxcblxuXHRzaG9ydGNvZGUgOiBmdW5jdGlvbiggbW9kZWwgKSB7XG5cdFx0dmFyIGNvbnRlbnQ7XG5cblx0XHRfLmVhY2goIHRoaXMuZGVmYXVsdHMsIGZ1bmN0aW9uKCB2YWx1ZSwga2V5ICkge1xuXHRcdFx0bW9kZWxbIGtleSBdID0gdGhpcy5jb2VyY2UoIG1vZGVsLCBrZXkgKTtcblxuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gbW9kZWxbIGtleSBdICkge1xuXHRcdFx0XHRkZWxldGUgbW9kZWxbIGtleSBdO1xuXHRcdFx0fVxuXHRcdH0sIHRoaXMgKTtcblxuXHRcdGNvbnRlbnQgPSBtb2RlbC5jb250ZW50O1xuXHRcdGRlbGV0ZSBtb2RlbC5jb250ZW50O1xuXG5cdFx0cmV0dXJuIG5ldyB3cC5zaG9ydGNvZGUoe1xuXHRcdFx0dGFnOiAndmlkZW8nLFxuXHRcdFx0YXR0cnM6IG1vZGVsLFxuXHRcdFx0Y29udGVudDogY29udGVudFxuXHRcdH0pO1xuXHR9XG59O1xuXG5tZWRpYS5tb2RlbC5Qb3N0TWVkaWEgPSByZXF1aXJlKCAnLi9tb2RlbHMvcG9zdC1tZWRpYS5qcycgKTtcbm1lZGlhLmNvbnRyb2xsZXIuQXVkaW9EZXRhaWxzID0gcmVxdWlyZSggJy4vY29udHJvbGxlcnMvYXVkaW8tZGV0YWlscy5qcycgKTtcbm1lZGlhLmNvbnRyb2xsZXIuVmlkZW9EZXRhaWxzID0gcmVxdWlyZSggJy4vY29udHJvbGxlcnMvdmlkZW8tZGV0YWlscy5qcycgKTtcbm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5NZWRpYURldGFpbHMgPSByZXF1aXJlKCAnLi92aWV3cy9mcmFtZS9tZWRpYS1kZXRhaWxzLmpzJyApO1xubWVkaWEudmlldy5NZWRpYUZyYW1lLkF1ZGlvRGV0YWlscyA9IHJlcXVpcmUoICcuL3ZpZXdzL2ZyYW1lL2F1ZGlvLWRldGFpbHMuanMnICk7XG5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuVmlkZW9EZXRhaWxzID0gcmVxdWlyZSggJy4vdmlld3MvZnJhbWUvdmlkZW8tZGV0YWlscy5qcycgKTtcbm1lZGlhLnZpZXcuTWVkaWFEZXRhaWxzID0gcmVxdWlyZSggJy4vdmlld3MvbWVkaWEtZGV0YWlscy5qcycgKTtcbm1lZGlhLnZpZXcuQXVkaW9EZXRhaWxzID0gcmVxdWlyZSggJy4vdmlld3MvYXVkaW8tZGV0YWlscy5qcycgKTtcbm1lZGlhLnZpZXcuVmlkZW9EZXRhaWxzID0gcmVxdWlyZSggJy4vdmlld3MvdmlkZW8tZGV0YWlscy5qcycgKTtcbiIsIi8qKlxuICogd3AubWVkaWEuY29udHJvbGxlci5BdWRpb0RldGFpbHNcbiAqXG4gKiBUaGUgY29udHJvbGxlciBmb3IgdGhlIEF1ZGlvIERldGFpbHMgc3RhdGVcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlXG4gKiBAYXVnbWVudHMgQmFja2JvbmUuTW9kZWxcbiAqL1xudmFyIFN0YXRlID0gd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZSxcblx0bDEwbiA9IHdwLm1lZGlhLnZpZXcubDEwbixcblx0QXVkaW9EZXRhaWxzO1xuXG5BdWRpb0RldGFpbHMgPSBTdGF0ZS5leHRlbmQoe1xuXHRkZWZhdWx0czoge1xuXHRcdGlkOiAnYXVkaW8tZGV0YWlscycsXG5cdFx0dG9vbGJhcjogJ2F1ZGlvLWRldGFpbHMnLFxuXHRcdHRpdGxlOiBsMTBuLmF1ZGlvRGV0YWlsc1RpdGxlLFxuXHRcdGNvbnRlbnQ6ICdhdWRpby1kZXRhaWxzJyxcblx0XHRtZW51OiAnYXVkaW8tZGV0YWlscycsXG5cdFx0cm91dGVyOiBmYWxzZSxcblx0XHRwcmlvcml0eTogNjBcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0XHR0aGlzLm1lZGlhID0gb3B0aW9ucy5tZWRpYTtcblx0XHRTdGF0ZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF1ZGlvRGV0YWlscztcbiIsIi8qKlxuICogd3AubWVkaWEuY29udHJvbGxlci5WaWRlb0RldGFpbHNcbiAqXG4gKiBUaGUgY29udHJvbGxlciBmb3IgdGhlIFZpZGVvIERldGFpbHMgc3RhdGVcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlXG4gKiBAYXVnbWVudHMgQmFja2JvbmUuTW9kZWxcbiAqL1xudmFyIFN0YXRlID0gd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZSxcblx0bDEwbiA9IHdwLm1lZGlhLnZpZXcubDEwbixcblx0VmlkZW9EZXRhaWxzO1xuXG5WaWRlb0RldGFpbHMgPSBTdGF0ZS5leHRlbmQoe1xuXHRkZWZhdWx0czoge1xuXHRcdGlkOiAndmlkZW8tZGV0YWlscycsXG5cdFx0dG9vbGJhcjogJ3ZpZGVvLWRldGFpbHMnLFxuXHRcdHRpdGxlOiBsMTBuLnZpZGVvRGV0YWlsc1RpdGxlLFxuXHRcdGNvbnRlbnQ6ICd2aWRlby1kZXRhaWxzJyxcblx0XHRtZW51OiAndmlkZW8tZGV0YWlscycsXG5cdFx0cm91dGVyOiBmYWxzZSxcblx0XHRwcmlvcml0eTogNjBcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0XHR0aGlzLm1lZGlhID0gb3B0aW9ucy5tZWRpYTtcblx0XHRTdGF0ZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFZpZGVvRGV0YWlscztcbiIsIi8qKlxuICogd3AubWVkaWEubW9kZWwuUG9zdE1lZGlhXG4gKlxuICogU2hhcmVkIG1vZGVsIGNsYXNzIGZvciBhdWRpbyBhbmQgdmlkZW8uIFVwZGF0ZXMgdGhlIG1vZGVsIGFmdGVyXG4gKiAgIFwiQWRkIEF1ZGlvfFZpZGVvIFNvdXJjZVwiIGFuZCBcIlJlcGxhY2UgQXVkaW98VmlkZW9cIiBzdGF0ZXMgcmV0dXJuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgQmFja2JvbmUuTW9kZWxcbiAqL1xudmFyIFBvc3RNZWRpYSA9IEJhY2tib25lLk1vZGVsLmV4dGVuZCh7XG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuYXR0YWNobWVudCA9IGZhbHNlO1xuXHR9LFxuXG5cdHNldFNvdXJjZTogZnVuY3Rpb24oIGF0dGFjaG1lbnQgKSB7XG5cdFx0dGhpcy5hdHRhY2htZW50ID0gYXR0YWNobWVudDtcblx0XHR0aGlzLmV4dGVuc2lvbiA9IGF0dGFjaG1lbnQuZ2V0KCAnZmlsZW5hbWUnICkuc3BsaXQoJy4nKS5wb3AoKTtcblxuXHRcdGlmICggdGhpcy5nZXQoICdzcmMnICkgJiYgdGhpcy5leHRlbnNpb24gPT09IHRoaXMuZ2V0KCAnc3JjJyApLnNwbGl0KCcuJykucG9wKCkgKSB7XG5cdFx0XHR0aGlzLnVuc2V0KCAnc3JjJyApO1xuXHRcdH1cblxuXHRcdGlmICggXy5jb250YWlucyggd3AubWVkaWEudmlldy5zZXR0aW5ncy5lbWJlZEV4dHMsIHRoaXMuZXh0ZW5zaW9uICkgKSB7XG5cdFx0XHR0aGlzLnNldCggdGhpcy5leHRlbnNpb24sIHRoaXMuYXR0YWNobWVudC5nZXQoICd1cmwnICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy51bnNldCggdGhpcy5leHRlbnNpb24gKTtcblx0XHR9XG5cdH0sXG5cblx0Y2hhbmdlQXR0YWNobWVudDogZnVuY3Rpb24oIGF0dGFjaG1lbnQgKSB7XG5cdFx0dGhpcy5zZXRTb3VyY2UoIGF0dGFjaG1lbnQgKTtcblxuXHRcdHRoaXMudW5zZXQoICdzcmMnICk7XG5cdFx0Xy5lYWNoKCBfLndpdGhvdXQoIHdwLm1lZGlhLnZpZXcuc2V0dGluZ3MuZW1iZWRFeHRzLCB0aGlzLmV4dGVuc2lvbiApLCBmdW5jdGlvbiggZXh0ICkge1xuXHRcdFx0dGhpcy51bnNldCggZXh0ICk7XG5cdFx0fSwgdGhpcyApO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBQb3N0TWVkaWE7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuQXVkaW9EZXRhaWxzXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5NZWRpYURldGFpbHNcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LlNldHRpbmdzLkF0dGFjaG1lbnREaXNwbGF5XG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5TZXR0aW5nc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgTWVkaWFEZXRhaWxzID0gd3AubWVkaWEudmlldy5NZWRpYURldGFpbHMsXG5cdEF1ZGlvRGV0YWlscztcblxuQXVkaW9EZXRhaWxzID0gTWVkaWFEZXRhaWxzLmV4dGVuZCh7XG5cdGNsYXNzTmFtZTogJ2F1ZGlvLWRldGFpbHMnLFxuXHR0ZW1wbGF0ZTogIHdwLnRlbXBsYXRlKCdhdWRpby1kZXRhaWxzJyksXG5cblx0c2V0TWVkaWE6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBhdWRpbyA9IHRoaXMuJCgnLndwLWF1ZGlvLXNob3J0Y29kZScpO1xuXG5cdFx0aWYgKCBhdWRpby5maW5kKCAnc291cmNlJyApLmxlbmd0aCApIHtcblx0XHRcdGlmICggYXVkaW8uaXMoJzpoaWRkZW4nKSApIHtcblx0XHRcdFx0YXVkaW8uc2hvdygpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5tZWRpYSA9IE1lZGlhRGV0YWlscy5wcmVwYXJlU3JjKCBhdWRpby5nZXQoMCkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YXVkaW8uaGlkZSgpO1xuXHRcdFx0dGhpcy5tZWRpYSA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBdWRpb0RldGFpbHM7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5BdWRpb0RldGFpbHNcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuTWVkaWFEZXRhaWxzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5NZWRpYUZyYW1lLlNlbGVjdFxuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZVxuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuRnJhbWVcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqIEBtaXhlcyB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlTWFjaGluZVxuICovXG52YXIgTWVkaWFEZXRhaWxzID0gd3AubWVkaWEudmlldy5NZWRpYUZyYW1lLk1lZGlhRGV0YWlscyxcblx0TWVkaWFMaWJyYXJ5ID0gd3AubWVkaWEuY29udHJvbGxlci5NZWRpYUxpYnJhcnksXG5cblx0bDEwbiA9IHdwLm1lZGlhLnZpZXcubDEwbixcblx0QXVkaW9EZXRhaWxzO1xuXG5BdWRpb0RldGFpbHMgPSBNZWRpYURldGFpbHMuZXh0ZW5kKHtcblx0ZGVmYXVsdHM6IHtcblx0XHRpZDogICAgICAnYXVkaW8nLFxuXHRcdHVybDogICAgICcnLFxuXHRcdG1lbnU6ICAgICdhdWRpby1kZXRhaWxzJyxcblx0XHRjb250ZW50OiAnYXVkaW8tZGV0YWlscycsXG5cdFx0dG9vbGJhcjogJ2F1ZGlvLWRldGFpbHMnLFxuXHRcdHR5cGU6ICAgICdsaW5rJyxcblx0XHR0aXRsZTogICAgbDEwbi5hdWRpb0RldGFpbHNUaXRsZSxcblx0XHRwcmlvcml0eTogMTIwXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdFx0b3B0aW9ucy5EZXRhaWxzVmlldyA9IHdwLm1lZGlhLnZpZXcuQXVkaW9EZXRhaWxzO1xuXHRcdG9wdGlvbnMuY2FuY2VsVGV4dCA9IGwxMG4uYXVkaW9EZXRhaWxzQ2FuY2VsO1xuXHRcdG9wdGlvbnMuYWRkVGV4dCA9IGwxMG4uYXVkaW9BZGRTb3VyY2VUaXRsZTtcblxuXHRcdE1lZGlhRGV0YWlscy5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKCB0aGlzLCBvcHRpb25zICk7XG5cdH0sXG5cblx0YmluZEhhbmRsZXJzOiBmdW5jdGlvbigpIHtcblx0XHRNZWRpYURldGFpbHMucHJvdG90eXBlLmJpbmRIYW5kbGVycy5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cblx0XHR0aGlzLm9uKCAndG9vbGJhcjpyZW5kZXI6cmVwbGFjZS1hdWRpbycsIHRoaXMucmVuZGVyUmVwbGFjZVRvb2xiYXIsIHRoaXMgKTtcblx0XHR0aGlzLm9uKCAndG9vbGJhcjpyZW5kZXI6YWRkLWF1ZGlvLXNvdXJjZScsIHRoaXMucmVuZGVyQWRkU291cmNlVG9vbGJhciwgdGhpcyApO1xuXHR9LFxuXG5cdGNyZWF0ZVN0YXRlczogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5zdGF0ZXMuYWRkKFtcblx0XHRcdG5ldyB3cC5tZWRpYS5jb250cm9sbGVyLkF1ZGlvRGV0YWlscygge1xuXHRcdFx0XHRtZWRpYTogdGhpcy5tZWRpYVxuXHRcdFx0fSApLFxuXG5cdFx0XHRuZXcgTWVkaWFMaWJyYXJ5KCB7XG5cdFx0XHRcdHR5cGU6ICdhdWRpbycsXG5cdFx0XHRcdGlkOiAncmVwbGFjZS1hdWRpbycsXG5cdFx0XHRcdHRpdGxlOiBsMTBuLmF1ZGlvUmVwbGFjZVRpdGxlLFxuXHRcdFx0XHR0b29sYmFyOiAncmVwbGFjZS1hdWRpbycsXG5cdFx0XHRcdG1lZGlhOiB0aGlzLm1lZGlhLFxuXHRcdFx0XHRtZW51OiAnYXVkaW8tZGV0YWlscydcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IE1lZGlhTGlicmFyeSgge1xuXHRcdFx0XHR0eXBlOiAnYXVkaW8nLFxuXHRcdFx0XHRpZDogJ2FkZC1hdWRpby1zb3VyY2UnLFxuXHRcdFx0XHR0aXRsZTogbDEwbi5hdWRpb0FkZFNvdXJjZVRpdGxlLFxuXHRcdFx0XHR0b29sYmFyOiAnYWRkLWF1ZGlvLXNvdXJjZScsXG5cdFx0XHRcdG1lZGlhOiB0aGlzLm1lZGlhLFxuXHRcdFx0XHRtZW51OiBmYWxzZVxuXHRcdFx0fSApXG5cdFx0XSk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF1ZGlvRGV0YWlscztcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5NZWRpYUZyYW1lLk1lZGlhRGV0YWlsc1xuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5TZWxlY3RcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWVcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LkZyYW1lXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKiBAbWl4ZXMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZU1hY2hpbmVcbiAqL1xudmFyIFNlbGVjdCA9IHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5TZWxlY3QsXG5cdGwxMG4gPSB3cC5tZWRpYS52aWV3LmwxMG4sXG5cdE1lZGlhRGV0YWlscztcblxuTWVkaWFEZXRhaWxzID0gU2VsZWN0LmV4dGVuZCh7XG5cdGRlZmF1bHRzOiB7XG5cdFx0aWQ6ICAgICAgJ21lZGlhJyxcblx0XHR1cmw6ICAgICAnJyxcblx0XHRtZW51OiAgICAnbWVkaWEtZGV0YWlscycsXG5cdFx0Y29udGVudDogJ21lZGlhLWRldGFpbHMnLFxuXHRcdHRvb2xiYXI6ICdtZWRpYS1kZXRhaWxzJyxcblx0XHR0eXBlOiAgICAnbGluaycsXG5cdFx0cHJpb3JpdHk6IDEyMFxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHRcdHRoaXMuRGV0YWlsc1ZpZXcgPSBvcHRpb25zLkRldGFpbHNWaWV3O1xuXHRcdHRoaXMuY2FuY2VsVGV4dCA9IG9wdGlvbnMuY2FuY2VsVGV4dDtcblx0XHR0aGlzLmFkZFRleHQgPSBvcHRpb25zLmFkZFRleHQ7XG5cblx0XHR0aGlzLm1lZGlhID0gbmV3IHdwLm1lZGlhLm1vZGVsLlBvc3RNZWRpYSggb3B0aW9ucy5tZXRhZGF0YSApO1xuXHRcdHRoaXMub3B0aW9ucy5zZWxlY3Rpb24gPSBuZXcgd3AubWVkaWEubW9kZWwuU2VsZWN0aW9uKCB0aGlzLm1lZGlhLmF0dGFjaG1lbnQsIHsgbXVsdGlwbGU6IGZhbHNlIH0gKTtcblx0XHRTZWxlY3QucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9LFxuXG5cdGJpbmRIYW5kbGVyczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG1lbnUgPSB0aGlzLmRlZmF1bHRzLm1lbnU7XG5cblx0XHRTZWxlY3QucHJvdG90eXBlLmJpbmRIYW5kbGVycy5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cblx0XHR0aGlzLm9uKCAnbWVudTpjcmVhdGU6JyArIG1lbnUsIHRoaXMuY3JlYXRlTWVudSwgdGhpcyApO1xuXHRcdHRoaXMub24oICdjb250ZW50OnJlbmRlcjonICsgbWVudSwgdGhpcy5yZW5kZXJEZXRhaWxzQ29udGVudCwgdGhpcyApO1xuXHRcdHRoaXMub24oICdtZW51OnJlbmRlcjonICsgbWVudSwgdGhpcy5yZW5kZXJNZW51LCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ3Rvb2xiYXI6cmVuZGVyOicgKyBtZW51LCB0aGlzLnJlbmRlckRldGFpbHNUb29sYmFyLCB0aGlzICk7XG5cdH0sXG5cblx0cmVuZGVyRGV0YWlsc0NvbnRlbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB2aWV3ID0gbmV3IHRoaXMuRGV0YWlsc1ZpZXcoe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpcyxcblx0XHRcdG1vZGVsOiB0aGlzLnN0YXRlKCkubWVkaWEsXG5cdFx0XHRhdHRhY2htZW50OiB0aGlzLnN0YXRlKCkubWVkaWEuYXR0YWNobWVudFxuXHRcdH0pLnJlbmRlcigpO1xuXG5cdFx0dGhpcy5jb250ZW50LnNldCggdmlldyApO1xuXHR9LFxuXG5cdHJlbmRlck1lbnU6IGZ1bmN0aW9uKCB2aWV3ICkge1xuXHRcdHZhciBsYXN0U3RhdGUgPSB0aGlzLmxhc3RTdGF0ZSgpLFxuXHRcdFx0cHJldmlvdXMgPSBsYXN0U3RhdGUgJiYgbGFzdFN0YXRlLmlkLFxuXHRcdFx0ZnJhbWUgPSB0aGlzO1xuXG5cdFx0dmlldy5zZXQoe1xuXHRcdFx0Y2FuY2VsOiB7XG5cdFx0XHRcdHRleHQ6ICAgICB0aGlzLmNhbmNlbFRleHQsXG5cdFx0XHRcdHByaW9yaXR5OiAyMCxcblx0XHRcdFx0Y2xpY2s6ICAgIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggcHJldmlvdXMgKSB7XG5cdFx0XHRcdFx0XHRmcmFtZS5zZXRTdGF0ZSggcHJldmlvdXMgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZnJhbWUuY2xvc2UoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRzZXBhcmF0ZUNhbmNlbDogbmV3IHdwLm1lZGlhLlZpZXcoe1xuXHRcdFx0XHRjbGFzc05hbWU6ICdzZXBhcmF0b3InLFxuXHRcdFx0XHRwcmlvcml0eTogNDBcblx0XHRcdH0pXG5cdFx0fSk7XG5cblx0fSxcblxuXHRzZXRQcmltYXJ5QnV0dG9uOiBmdW5jdGlvbih0ZXh0LCBoYW5kbGVyKSB7XG5cdFx0dGhpcy50b29sYmFyLnNldCggbmV3IHdwLm1lZGlhLnZpZXcuVG9vbGJhcih7XG5cdFx0XHRjb250cm9sbGVyOiB0aGlzLFxuXHRcdFx0aXRlbXM6IHtcblx0XHRcdFx0YnV0dG9uOiB7XG5cdFx0XHRcdFx0c3R5bGU6ICAgICdwcmltYXJ5Jyxcblx0XHRcdFx0XHR0ZXh0OiAgICAgdGV4dCxcblx0XHRcdFx0XHRwcmlvcml0eTogODAsXG5cdFx0XHRcdFx0Y2xpY2s6ICAgIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0dmFyIGNvbnRyb2xsZXIgPSB0aGlzLmNvbnRyb2xsZXI7XG5cdFx0XHRcdFx0XHRoYW5kbGVyLmNhbGwoIHRoaXMsIGNvbnRyb2xsZXIsIGNvbnRyb2xsZXIuc3RhdGUoKSApO1xuXHRcdFx0XHRcdFx0Ly8gUmVzdG9yZSBhbmQgcmVzZXQgdGhlIGRlZmF1bHQgc3RhdGUuXG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLnNldFN0YXRlKCBjb250cm9sbGVyLm9wdGlvbnMuc3RhdGUgKTtcblx0XHRcdFx0XHRcdGNvbnRyb2xsZXIucmVzZXQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KSApO1xuXHR9LFxuXG5cdHJlbmRlckRldGFpbHNUb29sYmFyOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnNldFByaW1hcnlCdXR0b24oIGwxMG4udXBkYXRlLCBmdW5jdGlvbiggY29udHJvbGxlciwgc3RhdGUgKSB7XG5cdFx0XHRjb250cm9sbGVyLmNsb3NlKCk7XG5cdFx0XHRzdGF0ZS50cmlnZ2VyKCAndXBkYXRlJywgY29udHJvbGxlci5tZWRpYS50b0pTT04oKSApO1xuXHRcdH0gKTtcblx0fSxcblxuXHRyZW5kZXJSZXBsYWNlVG9vbGJhcjogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5zZXRQcmltYXJ5QnV0dG9uKCBsMTBuLnJlcGxhY2UsIGZ1bmN0aW9uKCBjb250cm9sbGVyLCBzdGF0ZSApIHtcblx0XHRcdHZhciBhdHRhY2htZW50ID0gc3RhdGUuZ2V0KCAnc2VsZWN0aW9uJyApLnNpbmdsZSgpO1xuXHRcdFx0Y29udHJvbGxlci5tZWRpYS5jaGFuZ2VBdHRhY2htZW50KCBhdHRhY2htZW50ICk7XG5cdFx0XHRzdGF0ZS50cmlnZ2VyKCAncmVwbGFjZScsIGNvbnRyb2xsZXIubWVkaWEudG9KU09OKCkgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0cmVuZGVyQWRkU291cmNlVG9vbGJhcjogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5zZXRQcmltYXJ5QnV0dG9uKCB0aGlzLmFkZFRleHQsIGZ1bmN0aW9uKCBjb250cm9sbGVyLCBzdGF0ZSApIHtcblx0XHRcdHZhciBhdHRhY2htZW50ID0gc3RhdGUuZ2V0KCAnc2VsZWN0aW9uJyApLnNpbmdsZSgpO1xuXHRcdFx0Y29udHJvbGxlci5tZWRpYS5zZXRTb3VyY2UoIGF0dGFjaG1lbnQgKTtcblx0XHRcdHN0YXRlLnRyaWdnZXIoICdhZGQtc291cmNlJywgY29udHJvbGxlci5tZWRpYS50b0pTT04oKSApO1xuXHRcdH0gKTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gTWVkaWFEZXRhaWxzO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuVmlkZW9EZXRhaWxzXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5NZWRpYUZyYW1lLk1lZGlhRGV0YWlsc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5TZWxlY3RcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWVcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LkZyYW1lXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKiBAbWl4ZXMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZU1hY2hpbmVcbiAqL1xudmFyIE1lZGlhRGV0YWlscyA9IHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5NZWRpYURldGFpbHMsXG5cdE1lZGlhTGlicmFyeSA9IHdwLm1lZGlhLmNvbnRyb2xsZXIuTWVkaWFMaWJyYXJ5LFxuXHRsMTBuID0gd3AubWVkaWEudmlldy5sMTBuLFxuXHRWaWRlb0RldGFpbHM7XG5cblZpZGVvRGV0YWlscyA9IE1lZGlhRGV0YWlscy5leHRlbmQoe1xuXHRkZWZhdWx0czoge1xuXHRcdGlkOiAgICAgICd2aWRlbycsXG5cdFx0dXJsOiAgICAgJycsXG5cdFx0bWVudTogICAgJ3ZpZGVvLWRldGFpbHMnLFxuXHRcdGNvbnRlbnQ6ICd2aWRlby1kZXRhaWxzJyxcblx0XHR0b29sYmFyOiAndmlkZW8tZGV0YWlscycsXG5cdFx0dHlwZTogICAgJ2xpbmsnLFxuXHRcdHRpdGxlOiAgICBsMTBuLnZpZGVvRGV0YWlsc1RpdGxlLFxuXHRcdHByaW9yaXR5OiAxMjBcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0XHRvcHRpb25zLkRldGFpbHNWaWV3ID0gd3AubWVkaWEudmlldy5WaWRlb0RldGFpbHM7XG5cdFx0b3B0aW9ucy5jYW5jZWxUZXh0ID0gbDEwbi52aWRlb0RldGFpbHNDYW5jZWw7XG5cdFx0b3B0aW9ucy5hZGRUZXh0ID0gbDEwbi52aWRlb0FkZFNvdXJjZVRpdGxlO1xuXG5cdFx0TWVkaWFEZXRhaWxzLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwoIHRoaXMsIG9wdGlvbnMgKTtcblx0fSxcblxuXHRiaW5kSGFuZGxlcnM6IGZ1bmN0aW9uKCkge1xuXHRcdE1lZGlhRGV0YWlscy5wcm90b3R5cGUuYmluZEhhbmRsZXJzLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblxuXHRcdHRoaXMub24oICd0b29sYmFyOnJlbmRlcjpyZXBsYWNlLXZpZGVvJywgdGhpcy5yZW5kZXJSZXBsYWNlVG9vbGJhciwgdGhpcyApO1xuXHRcdHRoaXMub24oICd0b29sYmFyOnJlbmRlcjphZGQtdmlkZW8tc291cmNlJywgdGhpcy5yZW5kZXJBZGRTb3VyY2VUb29sYmFyLCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ3Rvb2xiYXI6cmVuZGVyOnNlbGVjdC1wb3N0ZXItaW1hZ2UnLCB0aGlzLnJlbmRlclNlbGVjdFBvc3RlckltYWdlVG9vbGJhciwgdGhpcyApO1xuXHRcdHRoaXMub24oICd0b29sYmFyOnJlbmRlcjphZGQtdHJhY2snLCB0aGlzLnJlbmRlckFkZFRyYWNrVG9vbGJhciwgdGhpcyApO1xuXHR9LFxuXG5cdGNyZWF0ZVN0YXRlczogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5zdGF0ZXMuYWRkKFtcblx0XHRcdG5ldyB3cC5tZWRpYS5jb250cm9sbGVyLlZpZGVvRGV0YWlscyh7XG5cdFx0XHRcdG1lZGlhOiB0aGlzLm1lZGlhXG5cdFx0XHR9KSxcblxuXHRcdFx0bmV3IE1lZGlhTGlicmFyeSgge1xuXHRcdFx0XHR0eXBlOiAndmlkZW8nLFxuXHRcdFx0XHRpZDogJ3JlcGxhY2UtdmlkZW8nLFxuXHRcdFx0XHR0aXRsZTogbDEwbi52aWRlb1JlcGxhY2VUaXRsZSxcblx0XHRcdFx0dG9vbGJhcjogJ3JlcGxhY2UtdmlkZW8nLFxuXHRcdFx0XHRtZWRpYTogdGhpcy5tZWRpYSxcblx0XHRcdFx0bWVudTogJ3ZpZGVvLWRldGFpbHMnXG5cdFx0XHR9ICksXG5cblx0XHRcdG5ldyBNZWRpYUxpYnJhcnkoIHtcblx0XHRcdFx0dHlwZTogJ3ZpZGVvJyxcblx0XHRcdFx0aWQ6ICdhZGQtdmlkZW8tc291cmNlJyxcblx0XHRcdFx0dGl0bGU6IGwxMG4udmlkZW9BZGRTb3VyY2VUaXRsZSxcblx0XHRcdFx0dG9vbGJhcjogJ2FkZC12aWRlby1zb3VyY2UnLFxuXHRcdFx0XHRtZWRpYTogdGhpcy5tZWRpYSxcblx0XHRcdFx0bWVudTogZmFsc2Vcblx0XHRcdH0gKSxcblxuXHRcdFx0bmV3IE1lZGlhTGlicmFyeSgge1xuXHRcdFx0XHR0eXBlOiAnaW1hZ2UnLFxuXHRcdFx0XHRpZDogJ3NlbGVjdC1wb3N0ZXItaW1hZ2UnLFxuXHRcdFx0XHR0aXRsZTogbDEwbi52aWRlb1NlbGVjdFBvc3RlckltYWdlVGl0bGUsXG5cdFx0XHRcdHRvb2xiYXI6ICdzZWxlY3QtcG9zdGVyLWltYWdlJyxcblx0XHRcdFx0bWVkaWE6IHRoaXMubWVkaWEsXG5cdFx0XHRcdG1lbnU6ICd2aWRlby1kZXRhaWxzJ1xuXHRcdFx0fSApLFxuXG5cdFx0XHRuZXcgTWVkaWFMaWJyYXJ5KCB7XG5cdFx0XHRcdHR5cGU6ICd0ZXh0Jyxcblx0XHRcdFx0aWQ6ICdhZGQtdHJhY2snLFxuXHRcdFx0XHR0aXRsZTogbDEwbi52aWRlb0FkZFRyYWNrVGl0bGUsXG5cdFx0XHRcdHRvb2xiYXI6ICdhZGQtdHJhY2snLFxuXHRcdFx0XHRtZWRpYTogdGhpcy5tZWRpYSxcblx0XHRcdFx0bWVudTogJ3ZpZGVvLWRldGFpbHMnXG5cdFx0XHR9IClcblx0XHRdKTtcblx0fSxcblxuXHRyZW5kZXJTZWxlY3RQb3N0ZXJJbWFnZVRvb2xiYXI6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuc2V0UHJpbWFyeUJ1dHRvbiggbDEwbi52aWRlb1NlbGVjdFBvc3RlckltYWdlVGl0bGUsIGZ1bmN0aW9uKCBjb250cm9sbGVyLCBzdGF0ZSApIHtcblx0XHRcdHZhciB1cmxzID0gW10sIGF0dGFjaG1lbnQgPSBzdGF0ZS5nZXQoICdzZWxlY3Rpb24nICkuc2luZ2xlKCk7XG5cblx0XHRcdGNvbnRyb2xsZXIubWVkaWEuc2V0KCAncG9zdGVyJywgYXR0YWNobWVudC5nZXQoICd1cmwnICkgKTtcblx0XHRcdHN0YXRlLnRyaWdnZXIoICdzZXQtcG9zdGVyLWltYWdlJywgY29udHJvbGxlci5tZWRpYS50b0pTT04oKSApO1xuXG5cdFx0XHRfLmVhY2goIHdwLm1lZGlhLnZpZXcuc2V0dGluZ3MuZW1iZWRFeHRzLCBmdW5jdGlvbiAoZXh0KSB7XG5cdFx0XHRcdGlmICggY29udHJvbGxlci5tZWRpYS5nZXQoIGV4dCApICkge1xuXHRcdFx0XHRcdHVybHMucHVzaCggY29udHJvbGxlci5tZWRpYS5nZXQoIGV4dCApICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblxuXHRcdFx0d3AuYWpheC5zZW5kKCAnc2V0LWF0dGFjaG1lbnQtdGh1bWJuYWlsJywge1xuXHRcdFx0XHRkYXRhIDoge1xuXHRcdFx0XHRcdHVybHM6IHVybHMsXG5cdFx0XHRcdFx0dGh1bWJuYWlsX2lkOiBhdHRhY2htZW50LmdldCggJ2lkJyApXG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0cmVuZGVyQWRkVHJhY2tUb29sYmFyOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnNldFByaW1hcnlCdXR0b24oIGwxMG4udmlkZW9BZGRUcmFja1RpdGxlLCBmdW5jdGlvbiggY29udHJvbGxlciwgc3RhdGUgKSB7XG5cdFx0XHR2YXIgYXR0YWNobWVudCA9IHN0YXRlLmdldCggJ3NlbGVjdGlvbicgKS5zaW5nbGUoKSxcblx0XHRcdFx0Y29udGVudCA9IGNvbnRyb2xsZXIubWVkaWEuZ2V0KCAnY29udGVudCcgKTtcblxuXHRcdFx0aWYgKCAtMSA9PT0gY29udGVudC5pbmRleE9mKCBhdHRhY2htZW50LmdldCggJ3VybCcgKSApICkge1xuXHRcdFx0XHRjb250ZW50ICs9IFtcblx0XHRcdFx0XHQnPHRyYWNrIHNyY2xhbmc9XCJlblwiIGxhYmVsPVwiRW5nbGlzaFwiIGtpbmQ9XCJzdWJ0aXRsZXNcIiBzcmM9XCInLFxuXHRcdFx0XHRcdGF0dGFjaG1lbnQuZ2V0KCAndXJsJyApLFxuXHRcdFx0XHRcdCdcIiAvPidcblx0XHRcdFx0XS5qb2luKCcnKTtcblxuXHRcdFx0XHRjb250cm9sbGVyLm1lZGlhLnNldCggJ2NvbnRlbnQnLCBjb250ZW50ICk7XG5cdFx0XHR9XG5cdFx0XHRzdGF0ZS50cmlnZ2VyKCAnYWRkLXRyYWNrJywgY29udHJvbGxlci5tZWRpYS50b0pTT04oKSApO1xuXHRcdH0gKTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gVmlkZW9EZXRhaWxzO1xuIiwiLyogZ2xvYmFsIE1lZGlhRWxlbWVudFBsYXllciAqL1xuXG4vKipcbiAqIHdwLm1lZGlhLnZpZXcuTWVkaWFEZXRhaWxzXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5TZXR0aW5ncy5BdHRhY2htZW50RGlzcGxheVxuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuU2V0dGluZ3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIEF0dGFjaG1lbnREaXNwbGF5ID0gd3AubWVkaWEudmlldy5TZXR0aW5ncy5BdHRhY2htZW50RGlzcGxheSxcblx0JCA9IGpRdWVyeSxcblx0TWVkaWFEZXRhaWxzO1xuXG5NZWRpYURldGFpbHMgPSBBdHRhY2htZW50RGlzcGxheS5leHRlbmQoe1xuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHRfLmJpbmRBbGwodGhpcywgJ3N1Y2Nlc3MnKTtcblx0XHR0aGlzLnBsYXllcnMgPSBbXTtcblx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLmNvbnRyb2xsZXIsICdjbG9zZScsIHdwLm1lZGlhLm1peGluLnVuc2V0UGxheWVycyApO1xuXHRcdHRoaXMub24oICdyZWFkeScsIHRoaXMuc2V0UGxheWVyICk7XG5cdFx0dGhpcy5vbiggJ21lZGlhOnNldHRpbmc6cmVtb3ZlJywgd3AubWVkaWEubWl4aW4udW5zZXRQbGF5ZXJzLCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ21lZGlhOnNldHRpbmc6cmVtb3ZlJywgdGhpcy5yZW5kZXIgKTtcblx0XHR0aGlzLm9uKCAnbWVkaWE6c2V0dGluZzpyZW1vdmUnLCB0aGlzLnNldFBsYXllciApO1xuXHRcdHRoaXMuZXZlbnRzID0gXy5leHRlbmQoIHRoaXMuZXZlbnRzLCB7XG5cdFx0XHQnY2xpY2sgLnJlbW92ZS1zZXR0aW5nJyA6ICdyZW1vdmVTZXR0aW5nJyxcblx0XHRcdCdjaGFuZ2UgLmNvbnRlbnQtdHJhY2snIDogJ3NldFRyYWNrcycsXG5cdFx0XHQnY2xpY2sgLnJlbW92ZS10cmFjaycgOiAnc2V0VHJhY2tzJyxcblx0XHRcdCdjbGljayAuYWRkLW1lZGlhLXNvdXJjZScgOiAnYWRkU291cmNlJ1xuXHRcdH0gKTtcblxuXHRcdEF0dGFjaG1lbnREaXNwbGF5LnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0fSxcblxuXHRwcmVwYXJlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gXy5kZWZhdWx0cyh7XG5cdFx0XHRtb2RlbDogdGhpcy5tb2RlbC50b0pTT04oKVxuXHRcdH0sIHRoaXMub3B0aW9ucyApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgYSBzZXR0aW5nJ3MgVUkgd2hlbiB0aGUgbW9kZWwgdW5zZXRzIGl0XG5cdCAqXG5cdCAqIEBmaXJlcyB3cC5tZWRpYS52aWV3Lk1lZGlhRGV0YWlscyNtZWRpYTpzZXR0aW5nOnJlbW92ZVxuXHQgKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBlXG5cdCAqL1xuXHRyZW1vdmVTZXR0aW5nIDogZnVuY3Rpb24oZSkge1xuXHRcdHZhciB3cmFwID0gJCggZS5jdXJyZW50VGFyZ2V0ICkucGFyZW50KCksIHNldHRpbmc7XG5cdFx0c2V0dGluZyA9IHdyYXAuZmluZCggJ2lucHV0JyApLmRhdGEoICdzZXR0aW5nJyApO1xuXG5cdFx0aWYgKCBzZXR0aW5nICkge1xuXHRcdFx0dGhpcy5tb2RlbC51bnNldCggc2V0dGluZyApO1xuXHRcdFx0dGhpcy50cmlnZ2VyKCAnbWVkaWE6c2V0dGluZzpyZW1vdmUnLCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0d3JhcC5yZW1vdmUoKTtcblx0fSxcblxuXHQvKipcblx0ICpcblx0ICogQGZpcmVzIHdwLm1lZGlhLnZpZXcuTWVkaWFEZXRhaWxzI21lZGlhOnNldHRpbmc6cmVtb3ZlXG5cdCAqL1xuXHRzZXRUcmFja3MgOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgdHJhY2tzID0gJyc7XG5cblx0XHRfLmVhY2goIHRoaXMuJCgnLmNvbnRlbnQtdHJhY2snKSwgZnVuY3Rpb24odHJhY2spIHtcblx0XHRcdHRyYWNrcyArPSAkKCB0cmFjayApLnZhbCgpO1xuXHRcdH0gKTtcblxuXHRcdHRoaXMubW9kZWwuc2V0KCAnY29udGVudCcsIHRyYWNrcyApO1xuXHRcdHRoaXMudHJpZ2dlciggJ21lZGlhOnNldHRpbmc6cmVtb3ZlJywgdGhpcyApO1xuXHR9LFxuXG5cdGFkZFNvdXJjZSA6IGZ1bmN0aW9uKCBlICkge1xuXHRcdHRoaXMuY29udHJvbGxlci5sYXN0TWltZSA9ICQoIGUuY3VycmVudFRhcmdldCApLmRhdGEoICdtaW1lJyApO1xuXHRcdHRoaXMuY29udHJvbGxlci5zZXRTdGF0ZSggJ2FkZC0nICsgdGhpcy5jb250cm9sbGVyLmRlZmF1bHRzLmlkICsgJy1zb3VyY2UnICk7XG5cdH0sXG5cblx0bG9hZFBsYXllcjogZnVuY3Rpb24gKCkge1xuXHRcdHRoaXMucGxheWVycy5wdXNoKCBuZXcgTWVkaWFFbGVtZW50UGxheWVyKCB0aGlzLm1lZGlhLCB0aGlzLnNldHRpbmdzICkgKTtcblx0XHR0aGlzLnNjcmlwdFhociA9IGZhbHNlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAZ2xvYmFsIE1lZGlhRWxlbWVudFBsYXllclxuXHQgKi9cblx0c2V0UGxheWVyIDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGJhc2VTZXR0aW5ncztcblxuXHRcdGlmICggdGhpcy5wbGF5ZXJzLmxlbmd0aCB8fCAhIHRoaXMubWVkaWEgfHwgdGhpcy5zY3JpcHRYaHIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLm1vZGVsLmdldCggJ3NyYycgKS5pbmRleE9mKCAndmltZW8nICkgPiAtMSAmJiAhICggJ0Zyb29nYWxvb3AnIGluIHdpbmRvdyApICkge1xuXHRcdFx0YmFzZVNldHRpbmdzID0gd3AubWVkaWEubWl4aW4ubWVqc1NldHRpbmdzO1xuXHRcdFx0dGhpcy5zY3JpcHRYaHIgPSAkLmdldFNjcmlwdCggYmFzZVNldHRpbmdzLnBsdWdpblBhdGggKyAnZnJvb2dhbG9vcC5taW4uanMnLCBfLmJpbmQoIHRoaXMubG9hZFBsYXllciwgdGhpcyApICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubG9hZFBsYXllcigpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQGFic3RyYWN0XG5cdCAqL1xuXHRzZXRNZWRpYSA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHN1Y2Nlc3MgOiBmdW5jdGlvbihtZWpzKSB7XG5cdFx0dmFyIGF1dG9wbGF5ID0gbWVqcy5hdHRyaWJ1dGVzLmF1dG9wbGF5ICYmICdmYWxzZScgIT09IG1lanMuYXR0cmlidXRlcy5hdXRvcGxheTtcblxuXHRcdGlmICggJ2ZsYXNoJyA9PT0gbWVqcy5wbHVnaW5UeXBlICYmIGF1dG9wbGF5ICkge1xuXHRcdFx0bWVqcy5hZGRFdmVudExpc3RlbmVyKCAnY2FucGxheScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRtZWpzLnBsYXkoKTtcblx0XHRcdH0sIGZhbHNlICk7XG5cdFx0fVxuXG5cdFx0dGhpcy5tZWpzID0gbWVqcztcblx0fSxcblxuXHQvKipcblx0ICogQHJldHVybnMge21lZGlhLnZpZXcuTWVkaWFEZXRhaWxzfSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0cmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHRBdHRhY2htZW50RGlzcGxheS5wcm90b3R5cGUucmVuZGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblxuXHRcdHNldFRpbWVvdXQoIF8uYmluZCggZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLnJlc2V0Rm9jdXMoKTtcblx0XHR9LCB0aGlzICksIDEwICk7XG5cblx0XHR0aGlzLnNldHRpbmdzID0gXy5kZWZhdWx0cygge1xuXHRcdFx0c3VjY2VzcyA6IHRoaXMuc3VjY2Vzc1xuXHRcdH0sIHdwLm1lZGlhLm1peGluLm1lanNTZXR0aW5ncyApO1xuXG5cdFx0cmV0dXJuIHRoaXMuc2V0TWVkaWEoKTtcblx0fSxcblxuXHRyZXNldEZvY3VzOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLiQoICcuZW1iZWQtbWVkaWEtc2V0dGluZ3MnICkuc2Nyb2xsVG9wKCAwICk7XG5cdH1cbn0sIHtcblx0aW5zdGFuY2VzIDogMCxcblx0LyoqXG5cdCAqIFdoZW4gbXVsdGlwbGUgcGxheWVycyBpbiB0aGUgRE9NIGNvbnRhaW4gdGhlIHNhbWUgc3JjLCB0aGluZ3MgZ2V0IHdlaXJkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtXG5cdCAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH1cblx0ICovXG5cdHByZXBhcmVTcmMgOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgaSA9IE1lZGlhRGV0YWlscy5pbnN0YW5jZXMrKztcblx0XHRfLmVhY2goICQoIGVsZW0gKS5maW5kKCAnc291cmNlJyApLCBmdW5jdGlvbiggc291cmNlICkge1xuXHRcdFx0c291cmNlLnNyYyA9IFtcblx0XHRcdFx0c291cmNlLnNyYyxcblx0XHRcdFx0c291cmNlLnNyYy5pbmRleE9mKCc/JykgPiAtMSA/ICcmJyA6ICc/Jyxcblx0XHRcdFx0J189Jyxcblx0XHRcdFx0aVxuXHRcdFx0XS5qb2luKCcnKTtcblx0XHR9ICk7XG5cblx0XHRyZXR1cm4gZWxlbTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gTWVkaWFEZXRhaWxzO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LlZpZGVvRGV0YWlsc1xuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuTWVkaWFEZXRhaWxzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5TZXR0aW5ncy5BdHRhY2htZW50RGlzcGxheVxuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuU2V0dGluZ3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIE1lZGlhRGV0YWlscyA9IHdwLm1lZGlhLnZpZXcuTWVkaWFEZXRhaWxzLFxuXHRWaWRlb0RldGFpbHM7XG5cblZpZGVvRGV0YWlscyA9IE1lZGlhRGV0YWlscy5leHRlbmQoe1xuXHRjbGFzc05hbWU6ICd2aWRlby1kZXRhaWxzJyxcblx0dGVtcGxhdGU6ICB3cC50ZW1wbGF0ZSgndmlkZW8tZGV0YWlscycpLFxuXG5cdHNldE1lZGlhOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgdmlkZW8gPSB0aGlzLiQoJy53cC12aWRlby1zaG9ydGNvZGUnKTtcblxuXHRcdGlmICggdmlkZW8uZmluZCggJ3NvdXJjZScgKS5sZW5ndGggKSB7XG5cdFx0XHRpZiAoIHZpZGVvLmlzKCc6aGlkZGVuJykgKSB7XG5cdFx0XHRcdHZpZGVvLnNob3coKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCAhIHZpZGVvLmhhc0NsYXNzKCAneW91dHViZS12aWRlbycgKSAmJiAhIHZpZGVvLmhhc0NsYXNzKCAndmltZW8tdmlkZW8nICkgKSB7XG5cdFx0XHRcdHRoaXMubWVkaWEgPSBNZWRpYURldGFpbHMucHJlcGFyZVNyYyggdmlkZW8uZ2V0KDApICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLm1lZGlhID0gdmlkZW8uZ2V0KDApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2aWRlby5oaWRlKCk7XG5cdFx0XHR0aGlzLm1lZGlhID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFZpZGVvRGV0YWlscztcbiJdfQ==
  • src/wp-includes/js/media-grid.js

    diff --git src/wp-includes/js/media-grid.js src/wp-includes/js/media-grid.js
    index 01db38b..18a8a00 100644
    Manage = MediaFrame.extend({ 
    850850
    851851module.exports = Manage;
    852852
    853 },{}]},{},[2]);
     853},{}]},{},[2])
     854//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9ncnVudC1icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvY29udHJvbGxlcnMvZWRpdC1hdHRhY2htZW50LW1ldGFkYXRhLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL2dyaWQubWFuaWZlc3QuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvcm91dGVycy9tYW5hZ2UuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvYXR0YWNobWVudC9kZXRhaWxzLXR3by1jb2x1bW4uanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvYnV0dG9uL2RlbGV0ZS1zZWxlY3RlZC1wZXJtYW5lbnRseS5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9idXR0b24vZGVsZXRlLXNlbGVjdGVkLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL2J1dHRvbi9zZWxlY3QtbW9kZS10b2dnbGUuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvZWRpdC1pbWFnZS1kZXRhaWxzLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL2ZyYW1lL2VkaXQtYXR0YWNobWVudHMuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvZnJhbWUvbWFuYWdlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIi8qKlxuICogd3AubWVkaWEuY29udHJvbGxlci5FZGl0QXR0YWNobWVudE1ldGFkYXRhXG4gKlxuICogQSBzdGF0ZSBmb3IgZWRpdGluZyBhbiBhdHRhY2htZW50J3MgbWV0YWRhdGEuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZVxuICogQGF1Z21lbnRzIEJhY2tib25lLk1vZGVsXG4gKi9cbnZhciBsMTBuID0gd3AubWVkaWEudmlldy5sMTBuLFxuXHRFZGl0QXR0YWNobWVudE1ldGFkYXRhO1xuXG5FZGl0QXR0YWNobWVudE1ldGFkYXRhID0gd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZS5leHRlbmQoe1xuXHRkZWZhdWx0czoge1xuXHRcdGlkOiAgICAgICdlZGl0LWF0dGFjaG1lbnQnLFxuXHRcdC8vIFRpdGxlIHN0cmluZyBwYXNzZWQgdG8gdGhlIGZyYW1lJ3MgdGl0bGUgcmVnaW9uIHZpZXcuXG5cdFx0dGl0bGU6ICAgbDEwbi5hdHRhY2htZW50RGV0YWlscyxcblx0XHQvLyBSZWdpb24gbW9kZSBkZWZhdWx0cy5cblx0XHRjb250ZW50OiAnZWRpdC1tZXRhZGF0YScsXG5cdFx0bWVudTogICAgZmFsc2UsXG5cdFx0dG9vbGJhcjogZmFsc2UsXG5cdFx0cm91dGVyOiAgZmFsc2Vcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gRWRpdEF0dGFjaG1lbnRNZXRhZGF0YTtcbiIsInZhciBtZWRpYSA9IHdwLm1lZGlhO1xuXG5tZWRpYS5jb250cm9sbGVyLkVkaXRBdHRhY2htZW50TWV0YWRhdGEgPSByZXF1aXJlKCAnLi9jb250cm9sbGVycy9lZGl0LWF0dGFjaG1lbnQtbWV0YWRhdGEuanMnICk7XG5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuTWFuYWdlID0gcmVxdWlyZSggJy4vdmlld3MvZnJhbWUvbWFuYWdlLmpzJyApO1xubWVkaWEudmlldy5BdHRhY2htZW50LkRldGFpbHMuVHdvQ29sdW1uID0gcmVxdWlyZSggJy4vdmlld3MvYXR0YWNobWVudC9kZXRhaWxzLXR3by1jb2x1bW4uanMnICk7XG5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuTWFuYWdlLlJvdXRlciA9IHJlcXVpcmUoICcuL3JvdXRlcnMvbWFuYWdlLmpzJyApO1xubWVkaWEudmlldy5FZGl0SW1hZ2UuRGV0YWlscyA9IHJlcXVpcmUoICcuL3ZpZXdzL2VkaXQtaW1hZ2UtZGV0YWlscy5qcycgKTtcbm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5FZGl0QXR0YWNobWVudHMgPSByZXF1aXJlKCAnLi92aWV3cy9mcmFtZS9lZGl0LWF0dGFjaG1lbnRzLmpzJyApO1xubWVkaWEudmlldy5TZWxlY3RNb2RlVG9nZ2xlQnV0dG9uID0gcmVxdWlyZSggJy4vdmlld3MvYnV0dG9uL3NlbGVjdC1tb2RlLXRvZ2dsZS5qcycgKTtcbm1lZGlhLnZpZXcuRGVsZXRlU2VsZWN0ZWRCdXR0b24gPSByZXF1aXJlKCAnLi92aWV3cy9idXR0b24vZGVsZXRlLXNlbGVjdGVkLmpzJyApO1xubWVkaWEudmlldy5EZWxldGVTZWxlY3RlZFBlcm1hbmVudGx5QnV0dG9uID0gcmVxdWlyZSggJy4vdmlld3MvYnV0dG9uL2RlbGV0ZS1zZWxlY3RlZC1wZXJtYW5lbnRseS5qcycgKTtcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5NZWRpYUZyYW1lLk1hbmFnZS5Sb3V0ZXJcbiAqXG4gKiBBIHJvdXRlciBmb3IgaGFuZGxpbmcgdGhlIGJyb3dzZXIgaGlzdG9yeSBhbmQgYXBwbGljYXRpb24gc3RhdGUuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgQmFja2JvbmUuUm91dGVyXG4gKi9cbnZhciBSb3V0ZXIgPSBCYWNrYm9uZS5Sb3V0ZXIuZXh0ZW5kKHtcblx0cm91dGVzOiB7XG5cdFx0J3VwbG9hZC5waHA/aXRlbT06c2x1Zyc6ICAgICdzaG93SXRlbScsXG5cdFx0J3VwbG9hZC5waHA/c2VhcmNoPTpxdWVyeSc6ICdzZWFyY2gnXG5cdH0sXG5cblx0Ly8gTWFwIHJvdXRlcyBhZ2FpbnN0IHRoZSBwYWdlIFVSTFxuXHRiYXNlVXJsOiBmdW5jdGlvbiggdXJsICkge1xuXHRcdHJldHVybiAndXBsb2FkLnBocCcgKyB1cmw7XG5cdH0sXG5cblx0Ly8gUmVzcG9uZCB0byB0aGUgc2VhcmNoIHJvdXRlIGJ5IGZpbGxpbmcgdGhlIHNlYXJjaCBmaWVsZCBhbmQgdHJpZ2dnZXJpbmcgdGhlIGlucHV0IGV2ZW50XG5cdHNlYXJjaDogZnVuY3Rpb24oIHF1ZXJ5ICkge1xuXHRcdGpRdWVyeSggJyNtZWRpYS1zZWFyY2gtaW5wdXQnICkudmFsKCBxdWVyeSApLnRyaWdnZXIoICdpbnB1dCcgKTtcblx0fSxcblxuXHQvLyBTaG93IHRoZSBtb2RhbCB3aXRoIGEgc3BlY2lmaWMgaXRlbVxuXHRzaG93SXRlbTogZnVuY3Rpb24oIHF1ZXJ5ICkge1xuXHRcdHZhciBtZWRpYSA9IHdwLm1lZGlhLFxuXHRcdFx0bGlicmFyeSA9IG1lZGlhLmZyYW1lLnN0YXRlKCkuZ2V0KCdsaWJyYXJ5JyksXG5cdFx0XHRpdGVtO1xuXG5cdFx0Ly8gVHJpZ2dlciB0aGUgbWVkaWEgZnJhbWUgdG8gb3BlbiB0aGUgY29ycmVjdCBpdGVtXG5cdFx0aXRlbSA9IGxpYnJhcnkuZmluZFdoZXJlKCB7IGlkOiBwYXJzZUludCggcXVlcnksIDEwICkgfSApO1xuXHRcdGlmICggaXRlbSApIHtcblx0XHRcdG1lZGlhLmZyYW1lLnRyaWdnZXIoICdlZGl0OmF0dGFjaG1lbnQnLCBpdGVtICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGl0ZW0gPSBtZWRpYS5hdHRhY2htZW50KCBxdWVyeSApO1xuXHRcdFx0bWVkaWEuZnJhbWUubGlzdGVuVG8oIGl0ZW0sICdjaGFuZ2UnLCBmdW5jdGlvbiggbW9kZWwgKSB7XG5cdFx0XHRcdG1lZGlhLmZyYW1lLnN0b3BMaXN0ZW5pbmcoIGl0ZW0gKTtcblx0XHRcdFx0bWVkaWEuZnJhbWUudHJpZ2dlciggJ2VkaXQ6YXR0YWNobWVudCcsIG1vZGVsICk7XG5cdFx0XHR9ICk7XG5cdFx0XHRpdGVtLmZldGNoKCk7XG5cdFx0fVxuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSb3V0ZXI7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudC5EZXRhaWxzLlR3b0NvbHVtblxuICpcbiAqIEEgc2ltaWxhciB2aWV3IHRvIG1lZGlhLnZpZXcuQXR0YWNobWVudC5EZXRhaWxzXG4gKiBmb3IgdXNlIGluIHRoZSBFZGl0IEF0dGFjaG1lbnQgbW9kYWwuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5BdHRhY2htZW50LkRldGFpbHNcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIERldGFpbHMgPSB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnQuRGV0YWlscyxcblx0VHdvQ29sdW1uO1xuXG5Ud29Db2x1bW4gPSBEZXRhaWxzLmV4dGVuZCh7XG5cdHRlbXBsYXRlOiB3cC50ZW1wbGF0ZSggJ2F0dGFjaG1lbnQtZGV0YWlscy10d28tY29sdW1uJyApLFxuXG5cdGVkaXRBdHRhY2htZW50OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR0aGlzLmNvbnRyb2xsZXIuY29udGVudC5tb2RlKCAnZWRpdC1pbWFnZScgKTtcblx0fSxcblxuXHQvKipcblx0ICogTm9vcCB0aGlzIGZyb20gcGFyZW50IGNsYXNzLCBkb2Vzbid0IGFwcGx5IGhlcmUuXG5cdCAqL1xuXHR0b2dnbGVTZWxlY3Rpb25IYW5kbGVyOiBmdW5jdGlvbigpIHt9LFxuXG5cdHJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0RGV0YWlscy5wcm90b3R5cGUucmVuZGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblxuXHRcdHdwLm1lZGlhLm1peGluLnJlbW92ZUFsbFBsYXllcnMoKTtcblx0XHR0aGlzLiQoICdhdWRpbywgdmlkZW8nICkuZWFjaCggZnVuY3Rpb24gKGksIGVsZW0pIHtcblx0XHRcdHZhciBlbCA9IHdwLm1lZGlhLnZpZXcuTWVkaWFEZXRhaWxzLnByZXBhcmVTcmMoIGVsZW0gKTtcblx0XHRcdG5ldyB3aW5kb3cuTWVkaWFFbGVtZW50UGxheWVyKCBlbCwgd3AubWVkaWEubWl4aW4ubWVqc1NldHRpbmdzICk7XG5cdFx0fSApO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBUd29Db2x1bW47XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuRGVsZXRlU2VsZWN0ZWRQZXJtYW5lbnRseUJ1dHRvblxuICpcbiAqIFdoZW4gTUVESUFfVFJBU0ggaXMgdHJ1ZSwgYSBidXR0b24gdGhhdCBoYW5kbGVzIGJ1bGsgRGVsZXRlIFBlcm1hbmVudGx5IGxvZ2ljXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5EZWxldGVTZWxlY3RlZEJ1dHRvblxuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuQnV0dG9uXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBCdXR0b24gPSB3cC5tZWRpYS52aWV3LkJ1dHRvbixcblx0RGVsZXRlU2VsZWN0ZWQgPSB3cC5tZWRpYS52aWV3LkRlbGV0ZVNlbGVjdGVkQnV0dG9uLFxuXHREZWxldGVTZWxlY3RlZFBlcm1hbmVudGx5O1xuXG5EZWxldGVTZWxlY3RlZFBlcm1hbmVudGx5ID0gRGVsZXRlU2VsZWN0ZWQuZXh0ZW5kKHtcblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0RGVsZXRlU2VsZWN0ZWQucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdHRoaXMubGlzdGVuVG8oIHRoaXMuY29udHJvbGxlciwgJ3NlbGVjdDphY3RpdmF0ZScsIHRoaXMuc2VsZWN0QWN0aXZhdGUgKTtcblx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLmNvbnRyb2xsZXIsICdzZWxlY3Q6ZGVhY3RpdmF0ZScsIHRoaXMuc2VsZWN0RGVhY3RpdmF0ZSApO1xuXHR9LFxuXG5cdGZpbHRlckNoYW5nZTogZnVuY3Rpb24oIG1vZGVsICkge1xuXHRcdHRoaXMuY2FuU2hvdyA9ICggJ3RyYXNoJyA9PT0gbW9kZWwuZ2V0KCAnc3RhdHVzJyApICk7XG5cdH0sXG5cblx0c2VsZWN0QWN0aXZhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMudG9nZ2xlRGlzYWJsZWQoKTtcblx0XHR0aGlzLiRlbC50b2dnbGVDbGFzcyggJ2hpZGRlbicsICEgdGhpcy5jYW5TaG93ICk7XG5cdH0sXG5cblx0c2VsZWN0RGVhY3RpdmF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy50b2dnbGVEaXNhYmxlZCgpO1xuXHRcdHRoaXMuJGVsLmFkZENsYXNzKCAnaGlkZGVuJyApO1xuXHR9LFxuXG5cdHJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0QnV0dG9uLnByb3RvdHlwZS5yZW5kZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdHRoaXMuc2VsZWN0QWN0aXZhdGUoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGVsZXRlU2VsZWN0ZWRQZXJtYW5lbnRseTtcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5EZWxldGVTZWxlY3RlZEJ1dHRvblxuICpcbiAqIEEgYnV0dG9uIHRoYXQgaGFuZGxlcyBidWxrIERlbGV0ZS9UcmFzaCBsb2dpY1xuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuQnV0dG9uXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBCdXR0b24gPSB3cC5tZWRpYS52aWV3LkJ1dHRvbixcblx0bDEwbiA9IHdwLm1lZGlhLnZpZXcubDEwbixcblx0RGVsZXRlU2VsZWN0ZWQ7XG5cbkRlbGV0ZVNlbGVjdGVkID0gQnV0dG9uLmV4dGVuZCh7XG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdEJ1dHRvbi5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuZmlsdGVycyApIHtcblx0XHRcdHRoaXMubGlzdGVuVG8oIHRoaXMub3B0aW9ucy5maWx0ZXJzLm1vZGVsLCAnY2hhbmdlJywgdGhpcy5maWx0ZXJDaGFuZ2UgKTtcblx0XHR9XG5cdFx0dGhpcy5saXN0ZW5UbyggdGhpcy5jb250cm9sbGVyLCAnc2VsZWN0aW9uOnRvZ2dsZScsIHRoaXMudG9nZ2xlRGlzYWJsZWQgKTtcblx0fSxcblxuXHRmaWx0ZXJDaGFuZ2U6IGZ1bmN0aW9uKCBtb2RlbCApIHtcblx0XHRpZiAoICd0cmFzaCcgPT09IG1vZGVsLmdldCggJ3N0YXR1cycgKSApIHtcblx0XHRcdHRoaXMubW9kZWwuc2V0KCAndGV4dCcsIGwxMG4udW50cmFzaFNlbGVjdGVkICk7XG5cdFx0fSBlbHNlIGlmICggd3AubWVkaWEudmlldy5zZXR0aW5ncy5tZWRpYVRyYXNoICkge1xuXHRcdFx0dGhpcy5tb2RlbC5zZXQoICd0ZXh0JywgbDEwbi50cmFzaFNlbGVjdGVkICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubW9kZWwuc2V0KCAndGV4dCcsIGwxMG4uZGVsZXRlU2VsZWN0ZWQgKTtcblx0XHR9XG5cdH0sXG5cblx0dG9nZ2xlRGlzYWJsZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMubW9kZWwuc2V0KCAnZGlzYWJsZWQnLCAhIHRoaXMuY29udHJvbGxlci5zdGF0ZSgpLmdldCggJ3NlbGVjdGlvbicgKS5sZW5ndGggKTtcblx0fSxcblxuXHRyZW5kZXI6IGZ1bmN0aW9uKCkge1xuXHRcdEJ1dHRvbi5wcm90b3R5cGUucmVuZGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRpZiAoIHRoaXMuY29udHJvbGxlci5pc01vZGVBY3RpdmUoICdzZWxlY3QnICkgKSB7XG5cdFx0XHR0aGlzLiRlbC5hZGRDbGFzcyggJ2RlbGV0ZS1zZWxlY3RlZC1idXR0b24nICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuJGVsLmFkZENsYXNzKCAnZGVsZXRlLXNlbGVjdGVkLWJ1dHRvbiBoaWRkZW4nICk7XG5cdFx0fVxuXHRcdHRoaXMudG9nZ2xlRGlzYWJsZWQoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGVsZXRlU2VsZWN0ZWQ7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuU2VsZWN0TW9kZVRvZ2dsZUJ1dHRvblxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuQnV0dG9uXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBCdXR0b24gPSB3cC5tZWRpYS52aWV3LkJ1dHRvbixcblx0bDEwbiA9IHdwLm1lZGlhLnZpZXcubDEwbixcblx0U2VsZWN0TW9kZVRvZ2dsZTtcblxuU2VsZWN0TW9kZVRvZ2dsZSA9IEJ1dHRvbi5leHRlbmQoe1xuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHRfLmRlZmF1bHRzKCB0aGlzLm9wdGlvbnMsIHtcblx0XHRcdHNpemUgOiAnJ1xuXHRcdH0gKTtcblxuXHRcdEJ1dHRvbi5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0dGhpcy5saXN0ZW5UbyggdGhpcy5jb250cm9sbGVyLCAnc2VsZWN0OmFjdGl2YXRlIHNlbGVjdDpkZWFjdGl2YXRlJywgdGhpcy50b2dnbGVCdWxrRWRpdEhhbmRsZXIgKTtcblx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLmNvbnRyb2xsZXIsICdzZWxlY3Rpb246YWN0aW9uOmRvbmUnLCB0aGlzLmJhY2sgKTtcblx0fSxcblxuXHRiYWNrOiBmdW5jdGlvbiAoKSB7XG5cdFx0dGhpcy5jb250cm9sbGVyLmRlYWN0aXZhdGVNb2RlKCAnc2VsZWN0JyApLmFjdGl2YXRlTW9kZSggJ2VkaXQnICk7XG5cdH0sXG5cblx0Y2xpY2s6IGZ1bmN0aW9uKCkge1xuXHRcdEJ1dHRvbi5wcm90b3R5cGUuY2xpY2suYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdGlmICggdGhpcy5jb250cm9sbGVyLmlzTW9kZUFjdGl2ZSggJ3NlbGVjdCcgKSApIHtcblx0XHRcdHRoaXMuYmFjaygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmNvbnRyb2xsZXIuZGVhY3RpdmF0ZU1vZGUoICdlZGl0JyApLmFjdGl2YXRlTW9kZSggJ3NlbGVjdCcgKTtcblx0XHR9XG5cdH0sXG5cblx0cmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHRCdXR0b24ucHJvdG90eXBlLnJlbmRlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0dGhpcy4kZWwuYWRkQ2xhc3MoICdzZWxlY3QtbW9kZS10b2dnbGUtYnV0dG9uJyApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRvZ2dsZUJ1bGtFZGl0SGFuZGxlcjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHRvb2xiYXIgPSB0aGlzLmNvbnRyb2xsZXIuY29udGVudC5nZXQoKS50b29sYmFyLCBjaGlsZHJlbjtcblxuXHRcdGNoaWxkcmVuID0gdG9vbGJhci4kKCAnLm1lZGlhLXRvb2xiYXItc2Vjb25kYXJ5ID4gKiwgLm1lZGlhLXRvb2xiYXItcHJpbWFyeSA+IConICk7XG5cblx0XHQvLyBUT0RPOiB0aGUgRnJhbWUgc2hvdWxkIGJlIGRvaW5nIGFsbCBvZiB0aGlzLlxuXHRcdGlmICggdGhpcy5jb250cm9sbGVyLmlzTW9kZUFjdGl2ZSggJ3NlbGVjdCcgKSApIHtcblx0XHRcdHRoaXMubW9kZWwuc2V0KCB7XG5cdFx0XHRcdHNpemU6ICdsYXJnZScsXG5cdFx0XHRcdHRleHQ6IGwxMG4uY2FuY2VsU2VsZWN0aW9uXG5cdFx0XHR9ICk7XG5cdFx0XHRjaGlsZHJlbi5ub3QoICcuc3Bpbm5lciwgLm1lZGlhLWJ1dHRvbicgKS5oaWRlKCk7XG5cdFx0XHR0aGlzLiRlbC5zaG93KCk7XG5cdFx0XHR0b29sYmFyLiQoICcuZGVsZXRlLXNlbGVjdGVkLWJ1dHRvbicgKS5yZW1vdmVDbGFzcyggJ2hpZGRlbicgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5tb2RlbC5zZXQoIHtcblx0XHRcdFx0c2l6ZTogJycsXG5cdFx0XHRcdHRleHQ6IGwxMG4uYnVsa1NlbGVjdFxuXHRcdFx0fSApO1xuXHRcdFx0dGhpcy5jb250cm9sbGVyLmNvbnRlbnQuZ2V0KCkuJGVsLnJlbW92ZUNsYXNzKCAnZml4ZWQnICk7XG5cdFx0XHR0b29sYmFyLiRlbC5jc3MoICd3aWR0aCcsICcnICk7XG5cdFx0XHR0b29sYmFyLiQoICcuZGVsZXRlLXNlbGVjdGVkLWJ1dHRvbicgKS5hZGRDbGFzcyggJ2hpZGRlbicgKTtcblx0XHRcdGNoaWxkcmVuLm5vdCggJy5tZWRpYS1idXR0b24nICkuc2hvdygpO1xuXHRcdFx0dGhpcy5jb250cm9sbGVyLnN0YXRlKCkuZ2V0KCAnc2VsZWN0aW9uJyApLnJlc2V0KCk7XG5cdFx0fVxuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZWxlY3RNb2RlVG9nZ2xlO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LkVkaXRJbWFnZS5EZXRhaWxzXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5FZGl0SW1hZ2VcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIFZpZXcgPSB3cC5tZWRpYS5WaWV3LFxuXHRFZGl0SW1hZ2UgPSB3cC5tZWRpYS52aWV3LkVkaXRJbWFnZSxcblx0RGV0YWlscztcblxuRGV0YWlscyA9IEVkaXRJbWFnZS5leHRlbmQoe1xuXHRpbml0aWFsaXplOiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0XHR0aGlzLmVkaXRvciA9IHdpbmRvdy5pbWFnZUVkaXQ7XG5cdFx0dGhpcy5mcmFtZSA9IG9wdGlvbnMuZnJhbWU7XG5cdFx0dGhpcy5jb250cm9sbGVyID0gb3B0aW9ucy5jb250cm9sbGVyO1xuXHRcdFZpZXcucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9LFxuXG5cdGJhY2s6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuZnJhbWUuY29udGVudC5tb2RlKCAnZWRpdC1tZXRhZGF0YScgKTtcblx0fSxcblxuXHRzYXZlOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLm1vZGVsLmZldGNoKCkuZG9uZSggXy5iaW5kKCBmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuZnJhbWUuY29udGVudC5tb2RlKCAnZWRpdC1tZXRhZGF0YScgKTtcblx0XHR9LCB0aGlzICkgKTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGV0YWlscztcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5NZWRpYUZyYW1lLkVkaXRBdHRhY2htZW50c1xuICpcbiAqIEEgZnJhbWUgZm9yIGVkaXRpbmcgdGhlIGRldGFpbHMgb2YgYSBzcGVjaWZpYyBtZWRpYSBpdGVtLlxuICpcbiAqIE9wZW5zIGluIGEgbW9kYWwgYnkgZGVmYXVsdC5cbiAqXG4gKiBSZXF1aXJlcyBhbiBhdHRhY2htZW50IG1vZGVsIHRvIGJlIHBhc3NlZCBpbiB0aGUgb3B0aW9ucyBoYXNoIHVuZGVyIGBtb2RlbGAuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5GcmFtZVxuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICogQG1peGVzIHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGVNYWNoaW5lXG4gKi9cbnZhciBGcmFtZSA9IHdwLm1lZGlhLnZpZXcuRnJhbWUsXG5cdE1lZGlhRnJhbWUgPSB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWUsXG5cblx0JCA9IGpRdWVyeSxcblx0RWRpdEF0dGFjaG1lbnRzO1xuXG5FZGl0QXR0YWNobWVudHMgPSBNZWRpYUZyYW1lLmV4dGVuZCh7XG5cblx0Y2xhc3NOYW1lOiAnZWRpdC1hdHRhY2htZW50LWZyYW1lJyxcblx0dGVtcGxhdGU6ICB3cC50ZW1wbGF0ZSggJ2VkaXQtYXR0YWNobWVudC1mcmFtZScgKSxcblx0cmVnaW9uczogICBbICd0aXRsZScsICdjb250ZW50JyBdLFxuXG5cdGV2ZW50czoge1xuXHRcdCdjbGljayAubGVmdCc6ICAncHJldmlvdXNNZWRpYUl0ZW0nLFxuXHRcdCdjbGljayAucmlnaHQnOiAnbmV4dE1lZGlhSXRlbSdcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHRGcmFtZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cblx0XHRfLmRlZmF1bHRzKCB0aGlzLm9wdGlvbnMsIHtcblx0XHRcdG1vZGFsOiB0cnVlLFxuXHRcdFx0c3RhdGU6ICdlZGl0LWF0dGFjaG1lbnQnXG5cdFx0fSk7XG5cblx0XHR0aGlzLmNvbnRyb2xsZXIgPSB0aGlzLm9wdGlvbnMuY29udHJvbGxlcjtcblx0XHR0aGlzLmdyaWRSb3V0ZXIgPSB0aGlzLmNvbnRyb2xsZXIuZ3JpZFJvdXRlcjtcblx0XHR0aGlzLmxpYnJhcnkgPSB0aGlzLm9wdGlvbnMubGlicmFyeTtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLm1vZGVsICkge1xuXHRcdFx0dGhpcy5tb2RlbCA9IHRoaXMub3B0aW9ucy5tb2RlbDtcblx0XHR9XG5cblx0XHR0aGlzLmJpbmRIYW5kbGVycygpO1xuXHRcdHRoaXMuY3JlYXRlU3RhdGVzKCk7XG5cdFx0dGhpcy5jcmVhdGVNb2RhbCgpO1xuXG5cdFx0dGhpcy50aXRsZS5tb2RlKCAnZGVmYXVsdCcgKTtcblx0XHR0aGlzLnRvZ2dsZU5hdigpO1xuXHR9LFxuXG5cdGJpbmRIYW5kbGVyczogZnVuY3Rpb24oKSB7XG5cdFx0Ly8gQmluZCBkZWZhdWx0IHRpdGxlIGNyZWF0aW9uLlxuXHRcdHRoaXMub24oICd0aXRsZTpjcmVhdGU6ZGVmYXVsdCcsIHRoaXMuY3JlYXRlVGl0bGUsIHRoaXMgKTtcblxuXHRcdC8vIENsb3NlIHRoZSBtb2RhbCBpZiB0aGUgYXR0YWNobWVudCBpcyBkZWxldGVkLlxuXHRcdHRoaXMubGlzdGVuVG8oIHRoaXMubW9kZWwsICdjaGFuZ2U6c3RhdHVzIGRlc3Ryb3knLCB0aGlzLmNsb3NlLCB0aGlzICk7XG5cblx0XHR0aGlzLm9uKCAnY29udGVudDpjcmVhdGU6ZWRpdC1tZXRhZGF0YScsIHRoaXMuZWRpdE1ldGFkYXRhTW9kZSwgdGhpcyApO1xuXHRcdHRoaXMub24oICdjb250ZW50OmNyZWF0ZTplZGl0LWltYWdlJywgdGhpcy5lZGl0SW1hZ2VNb2RlLCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ2NvbnRlbnQ6cmVuZGVyOmVkaXQtaW1hZ2UnLCB0aGlzLmVkaXRJbWFnZU1vZGVSZW5kZXIsIHRoaXMgKTtcblx0XHR0aGlzLm9uKCAnY2xvc2UnLCB0aGlzLmRldGFjaCApO1xuXHR9LFxuXG5cdGNyZWF0ZU1vZGFsOiBmdW5jdGlvbigpIHtcblx0XHQvLyBJbml0aWFsaXplIG1vZGFsIGNvbnRhaW5lciB2aWV3LlxuXHRcdGlmICggdGhpcy5vcHRpb25zLm1vZGFsICkge1xuXHRcdFx0dGhpcy5tb2RhbCA9IG5ldyB3cC5tZWRpYS52aWV3Lk1vZGFsKHtcblx0XHRcdFx0Y29udHJvbGxlcjogdGhpcyxcblx0XHRcdFx0dGl0bGU6ICAgICAgdGhpcy5vcHRpb25zLnRpdGxlXG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5tb2RhbC5vbiggJ29wZW4nLCBfLmJpbmQoIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0JCggJ2JvZHknICkub24oICdrZXlkb3duLm1lZGlhLW1vZGFsJywgXy5iaW5kKCB0aGlzLmtleUV2ZW50LCB0aGlzICkgKTtcblx0XHRcdH0sIHRoaXMgKSApO1xuXG5cdFx0XHQvLyBDb21wbGV0ZWx5IGRlc3Ryb3kgdGhlIG1vZGFsIERPTSBlbGVtZW50IHdoZW4gY2xvc2luZyBpdC5cblx0XHRcdHRoaXMubW9kYWwub24oICdjbG9zZScsIF8uYmluZCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHRoaXMubW9kYWwucmVtb3ZlKCk7XG5cdFx0XHRcdCQoICdib2R5JyApLm9mZiggJ2tleWRvd24ubWVkaWEtbW9kYWwnICk7IC8qIHJlbW92ZSB0aGUga2V5ZG93biBldmVudCAqL1xuXHRcdFx0XHQvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBmb2N1cyBpdGVtIGlmIHBvc3NpYmxlXG5cdFx0XHRcdCQoICdsaS5hdHRhY2htZW50W2RhdGEtaWQ9XCInICsgdGhpcy5tb2RlbC5nZXQoICdpZCcgKSArJ1wiXScgKS5mb2N1cygpO1xuXHRcdFx0XHR0aGlzLnJlc2V0Um91dGUoKTtcblx0XHRcdH0sIHRoaXMgKSApO1xuXG5cdFx0XHQvLyBTZXQgdGhpcyBmcmFtZSBhcyB0aGUgbW9kYWwncyBjb250ZW50LlxuXHRcdFx0dGhpcy5tb2RhbC5jb250ZW50KCB0aGlzICk7XG5cdFx0XHR0aGlzLm1vZGFsLm9wZW4oKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEFkZCB0aGUgZGVmYXVsdCBzdGF0ZXMgdG8gdGhlIGZyYW1lLlxuXHQgKi9cblx0Y3JlYXRlU3RhdGVzOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnN0YXRlcy5hZGQoW1xuXHRcdFx0bmV3IHdwLm1lZGlhLmNvbnRyb2xsZXIuRWRpdEF0dGFjaG1lbnRNZXRhZGF0YSggeyBtb2RlbDogdGhpcy5tb2RlbCB9IClcblx0XHRdKTtcblx0fSxcblxuXHQvKipcblx0ICogQ29udGVudCByZWdpb24gcmVuZGVyaW5nIGNhbGxiYWNrIGZvciB0aGUgYGVkaXQtbWV0YWRhdGFgIG1vZGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZW50UmVnaW9uIEJhc2ljIG9iamVjdCB3aXRoIGEgYHZpZXdgIHByb3BlcnR5LCB3aGljaFxuXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgc2V0IHdpdGggdGhlIHByb3BlciByZWdpb24gdmlldy5cblx0ICovXG5cdGVkaXRNZXRhZGF0YU1vZGU6IGZ1bmN0aW9uKCBjb250ZW50UmVnaW9uICkge1xuXHRcdGNvbnRlbnRSZWdpb24udmlldyA9IG5ldyB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnQuRGV0YWlscy5Ud29Db2x1bW4oe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpcyxcblx0XHRcdG1vZGVsOiAgICAgIHRoaXMubW9kZWxcblx0XHR9KTtcblxuXHRcdC8qKlxuXHRcdCAqIEF0dGFjaCBhIHN1YnZpZXcgdG8gZGlzcGxheSBmaWVsZHMgYWRkZWQgdmlhIHRoZVxuXHRcdCAqIGBhdHRhY2htZW50X2ZpZWxkc190b19lZGl0YCBmaWx0ZXIuXG5cdFx0ICovXG5cdFx0Y29udGVudFJlZ2lvbi52aWV3LnZpZXdzLnNldCggJy5hdHRhY2htZW50LWNvbXBhdCcsIG5ldyB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRDb21wYXQoe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpcyxcblx0XHRcdG1vZGVsOiAgICAgIHRoaXMubW9kZWxcblx0XHR9KSApO1xuXG5cdFx0Ly8gVXBkYXRlIGJyb3dzZXIgdXJsIHdoZW4gbmF2aWdhdGluZyBtZWRpYSBkZXRhaWxzXG5cdFx0aWYgKCB0aGlzLm1vZGVsICkge1xuXHRcdFx0dGhpcy5ncmlkUm91dGVyLm5hdmlnYXRlKCB0aGlzLmdyaWRSb3V0ZXIuYmFzZVVybCggJz9pdGVtPScgKyB0aGlzLm1vZGVsLmlkICkgKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJlbmRlciB0aGUgRWRpdEltYWdlIHZpZXcgaW50byB0aGUgZnJhbWUncyBjb250ZW50IHJlZ2lvbi5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IGNvbnRlbnRSZWdpb24gQmFzaWMgb2JqZWN0IHdpdGggYSBgdmlld2AgcHJvcGVydHksIHdoaWNoXG5cdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBzZXQgd2l0aCB0aGUgcHJvcGVyIHJlZ2lvbiB2aWV3LlxuXHQgKi9cblx0ZWRpdEltYWdlTW9kZTogZnVuY3Rpb24oIGNvbnRlbnRSZWdpb24gKSB7XG5cdFx0dmFyIGVkaXRJbWFnZUNvbnRyb2xsZXIgPSBuZXcgd3AubWVkaWEuY29udHJvbGxlci5FZGl0SW1hZ2UoIHtcblx0XHRcdG1vZGVsOiB0aGlzLm1vZGVsLFxuXHRcdFx0ZnJhbWU6IHRoaXNcblx0XHR9ICk7XG5cdFx0Ly8gTm9vcCBzb21lIG1ldGhvZHMuXG5cdFx0ZWRpdEltYWdlQ29udHJvbGxlci5fdG9vbGJhciA9IGZ1bmN0aW9uKCkge307XG5cdFx0ZWRpdEltYWdlQ29udHJvbGxlci5fcm91dGVyID0gZnVuY3Rpb24oKSB7fTtcblx0XHRlZGl0SW1hZ2VDb250cm9sbGVyLl9tZW51ID0gZnVuY3Rpb24oKSB7fTtcblxuXHRcdGNvbnRlbnRSZWdpb24udmlldyA9IG5ldyB3cC5tZWRpYS52aWV3LkVkaXRJbWFnZS5EZXRhaWxzKCB7XG5cdFx0XHRtb2RlbDogdGhpcy5tb2RlbCxcblx0XHRcdGZyYW1lOiB0aGlzLFxuXHRcdFx0Y29udHJvbGxlcjogZWRpdEltYWdlQ29udHJvbGxlclxuXHRcdH0gKTtcblx0fSxcblxuXHRlZGl0SW1hZ2VNb2RlUmVuZGVyOiBmdW5jdGlvbiggdmlldyApIHtcblx0XHR2aWV3Lm9uKCAncmVhZHknLCB2aWV3LmxvYWRFZGl0b3IgKTtcblx0fSxcblxuXHR0b2dnbGVOYXY6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuJCgnLmxlZnQnKS50b2dnbGVDbGFzcyggJ2Rpc2FibGVkJywgISB0aGlzLmhhc1ByZXZpb3VzKCkgKTtcblx0XHR0aGlzLiQoJy5yaWdodCcpLnRvZ2dsZUNsYXNzKCAnZGlzYWJsZWQnLCAhIHRoaXMuaGFzTmV4dCgpICk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJlcmVuZGVyIHRoZSB2aWV3LlxuXHQgKi9cblx0cmVyZW5kZXI6IGZ1bmN0aW9uKCkge1xuXHRcdC8vIE9ubHkgcmVyZW5kZXIgdGhlIGBjb250ZW50YCByZWdpb24uXG5cdFx0aWYgKCB0aGlzLmNvbnRlbnQubW9kZSgpICE9PSAnZWRpdC1tZXRhZGF0YScgKSB7XG5cdFx0XHR0aGlzLmNvbnRlbnQubW9kZSggJ2VkaXQtbWV0YWRhdGEnICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuY29udGVudC5yZW5kZXIoKTtcblx0XHR9XG5cblx0XHR0aGlzLnRvZ2dsZU5hdigpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDbGljayBoYW5kbGVyIHRvIHN3aXRjaCB0byB0aGUgcHJldmlvdXMgbWVkaWEgaXRlbS5cblx0ICovXG5cdHByZXZpb3VzTWVkaWFJdGVtOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoICEgdGhpcy5oYXNQcmV2aW91cygpICkge1xuXHRcdFx0dGhpcy4kKCAnLmxlZnQnICkuYmx1cigpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLm1vZGVsID0gdGhpcy5saWJyYXJ5LmF0KCB0aGlzLmdldEN1cnJlbnRJbmRleCgpIC0gMSApO1xuXHRcdHRoaXMucmVyZW5kZXIoKTtcblx0XHR0aGlzLiQoICcubGVmdCcgKS5mb2N1cygpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDbGljayBoYW5kbGVyIHRvIHN3aXRjaCB0byB0aGUgbmV4dCBtZWRpYSBpdGVtLlxuXHQgKi9cblx0bmV4dE1lZGlhSXRlbTogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAhIHRoaXMuaGFzTmV4dCgpICkge1xuXHRcdFx0dGhpcy4kKCAnLnJpZ2h0JyApLmJsdXIoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5tb2RlbCA9IHRoaXMubGlicmFyeS5hdCggdGhpcy5nZXRDdXJyZW50SW5kZXgoKSArIDEgKTtcblx0XHR0aGlzLnJlcmVuZGVyKCk7XG5cdFx0dGhpcy4kKCAnLnJpZ2h0JyApLmZvY3VzKCk7XG5cdH0sXG5cblx0Z2V0Q3VycmVudEluZGV4OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5saWJyYXJ5LmluZGV4T2YoIHRoaXMubW9kZWwgKTtcblx0fSxcblxuXHRoYXNOZXh0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gKCB0aGlzLmdldEN1cnJlbnRJbmRleCgpICsgMSApIDwgdGhpcy5saWJyYXJ5Lmxlbmd0aDtcblx0fSxcblxuXHRoYXNQcmV2aW91czogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuICggdGhpcy5nZXRDdXJyZW50SW5kZXgoKSAtIDEgKSA+IC0xO1xuXHR9LFxuXHQvKipcblx0ICogUmVzcG9uZCB0byB0aGUga2V5Ym9hcmQgZXZlbnRzOiByaWdodCBhcnJvdywgbGVmdCBhcnJvdywgZXhjZXB0IHdoZW5cblx0ICogZm9jdXMgaXMgaW4gYSB0ZXh0YXJlYSBvciBpbnB1dCBmaWVsZC5cblx0ICovXG5cdGtleUV2ZW50OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0aWYgKCAoICdJTlBVVCcgPT09IGV2ZW50LnRhcmdldC5ub2RlTmFtZSB8fCAnVEVYVEFSRUEnID09PSBldmVudC50YXJnZXQubm9kZU5hbWUgKSAmJiAhICggZXZlbnQudGFyZ2V0LnJlYWRPbmx5IHx8IGV2ZW50LnRhcmdldC5kaXNhYmxlZCApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFRoZSByaWdodCBhcnJvdyBrZXlcblx0XHRpZiAoIDM5ID09PSBldmVudC5rZXlDb2RlICkge1xuXHRcdFx0dGhpcy5uZXh0TWVkaWFJdGVtKCk7XG5cdFx0fVxuXHRcdC8vIFRoZSBsZWZ0IGFycm93IGtleVxuXHRcdGlmICggMzcgPT09IGV2ZW50LmtleUNvZGUgKSB7XG5cdFx0XHR0aGlzLnByZXZpb3VzTWVkaWFJdGVtKCk7XG5cdFx0fVxuXHR9LFxuXG5cdHJlc2V0Um91dGU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuZ3JpZFJvdXRlci5uYXZpZ2F0ZSggdGhpcy5ncmlkUm91dGVyLmJhc2VVcmwoICcnICkgKTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gRWRpdEF0dGFjaG1lbnRzO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuTWFuYWdlXG4gKlxuICogQSBnZW5lcmljIG1hbmFnZW1lbnQgZnJhbWUgd29ya2Zsb3cuXG4gKlxuICogVXNlZCBpbiB0aGUgbWVkaWEgZ3JpZCB2aWV3LlxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZVxuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuRnJhbWVcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqIEBtaXhlcyB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlTWFjaGluZVxuICovXG52YXIgTWVkaWFGcmFtZSA9IHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZSxcblx0TGlicmFyeSA9IHdwLm1lZGlhLmNvbnRyb2xsZXIuTGlicmFyeSxcblxuXHQkID0gQmFja2JvbmUuJCxcblx0TWFuYWdlO1xuXG5NYW5hZ2UgPSBNZWRpYUZyYW1lLmV4dGVuZCh7XG5cdC8qKlxuXHQgKiBAZ2xvYmFsIHdwLlVwbG9hZGVyXG5cdCAqL1xuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHRfLmRlZmF1bHRzKCB0aGlzLm9wdGlvbnMsIHtcblx0XHRcdHRpdGxlOiAgICAgJycsXG5cdFx0XHRtb2RhbDogICAgIGZhbHNlLFxuXHRcdFx0c2VsZWN0aW9uOiBbXSxcblx0XHRcdGxpYnJhcnk6ICAge30sIC8vIE9wdGlvbnMgaGFzaCBmb3IgdGhlIHF1ZXJ5IHRvIHRoZSBtZWRpYSBsaWJyYXJ5LlxuXHRcdFx0bXVsdGlwbGU6ICAnYWRkJyxcblx0XHRcdHN0YXRlOiAgICAgJ2xpYnJhcnknLFxuXHRcdFx0dXBsb2FkZXI6ICB0cnVlLFxuXHRcdFx0bW9kZTogICAgICBbICdncmlkJywgJ2VkaXQnIF1cblx0XHR9KTtcblxuXHRcdHRoaXMuJGJvZHkgPSAkKCBkb2N1bWVudC5ib2R5ICk7XG5cdFx0dGhpcy4kd2luZG93ID0gJCggd2luZG93ICk7XG5cdFx0dGhpcy4kYWRtaW5CYXIgPSAkKCAnI3dwYWRtaW5iYXInICk7XG5cdFx0dGhpcy4kd2luZG93Lm9uKCAnc2Nyb2xsIHJlc2l6ZScsIF8uZGVib3VuY2UoIF8uYmluZCggdGhpcy5maXhQb3NpdGlvbiwgdGhpcyApLCAxNSApICk7XG5cdFx0JCggZG9jdW1lbnQgKS5vbiggJ2NsaWNrJywgJy5wYWdlLXRpdGxlLWFjdGlvbicsIF8uYmluZCggdGhpcy5hZGROZXdDbGlja0hhbmRsZXIsIHRoaXMgKSApO1xuXG5cdFx0Ly8gRW5zdXJlIGNvcmUgYW5kIG1lZGlhIGdyaWQgdmlldyBVSSBpcyBlbmFibGVkLlxuXHRcdHRoaXMuJGVsLmFkZENsYXNzKCd3cC1jb3JlLXVpJyk7XG5cblx0XHQvLyBGb3JjZSB0aGUgdXBsb2FkZXIgb2ZmIGlmIHRoZSB1cGxvYWQgbGltaXQgaGFzIGJlZW4gZXhjZWVkZWQgb3Jcblx0XHQvLyBpZiB0aGUgYnJvd3NlciBpc24ndCBzdXBwb3J0ZWQuXG5cdFx0aWYgKCB3cC5VcGxvYWRlci5saW1pdEV4Y2VlZGVkIHx8ICEgd3AuVXBsb2FkZXIuYnJvd3Nlci5zdXBwb3J0ZWQgKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMudXBsb2FkZXIgPSBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBJbml0aWFsaXplIGEgd2luZG93LXdpZGUgdXBsb2FkZXIuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMudXBsb2FkZXIgKSB7XG5cdFx0XHR0aGlzLnVwbG9hZGVyID0gbmV3IHdwLm1lZGlhLnZpZXcuVXBsb2FkZXJXaW5kb3coe1xuXHRcdFx0XHRjb250cm9sbGVyOiB0aGlzLFxuXHRcdFx0XHR1cGxvYWRlcjoge1xuXHRcdFx0XHRcdGRyb3B6b25lOiAgZG9jdW1lbnQuYm9keSxcblx0XHRcdFx0XHRjb250YWluZXI6IGRvY3VtZW50LmJvZHlcblx0XHRcdFx0fVxuXHRcdFx0fSkucmVuZGVyKCk7XG5cdFx0XHR0aGlzLnVwbG9hZGVyLnJlYWR5KCk7XG5cdFx0XHQkKCdib2R5JykuYXBwZW5kKCB0aGlzLnVwbG9hZGVyLmVsICk7XG5cblx0XHRcdHRoaXMub3B0aW9ucy51cGxvYWRlciA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdHRoaXMuZ3JpZFJvdXRlciA9IG5ldyB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuTWFuYWdlLlJvdXRlcigpO1xuXG5cdFx0Ly8gQ2FsbCAnaW5pdGlhbGl6ZScgZGlyZWN0bHkgb24gdGhlIHBhcmVudCBjbGFzcy5cblx0XHRNZWRpYUZyYW1lLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblxuXHRcdC8vIEFwcGVuZCB0aGUgZnJhbWUgdmlldyBkaXJlY3RseSB0aGUgc3VwcGxpZWQgY29udGFpbmVyLlxuXHRcdHRoaXMuJGVsLmFwcGVuZFRvKCB0aGlzLm9wdGlvbnMuY29udGFpbmVyICk7XG5cblx0XHR0aGlzLmNyZWF0ZVN0YXRlcygpO1xuXHRcdHRoaXMuYmluZFJlZ2lvbk1vZGVIYW5kbGVycygpO1xuXHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0dGhpcy5iaW5kU2VhcmNoSGFuZGxlcigpO1xuXHR9LFxuXG5cdGJpbmRTZWFyY2hIYW5kbGVyOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgc2VhcmNoID0gdGhpcy4kKCAnI21lZGlhLXNlYXJjaC1pbnB1dCcgKSxcblx0XHRcdGN1cnJlbnRTZWFyY2ggPSB0aGlzLm9wdGlvbnMuY29udGFpbmVyLmRhdGEoICdzZWFyY2gnICksXG5cdFx0XHRzZWFyY2hWaWV3ID0gdGhpcy5icm93c2VyVmlldy50b29sYmFyLmdldCggJ3NlYXJjaCcgKS4kZWwsXG5cdFx0XHRsaXN0TW9kZSA9IHRoaXMuJCggJy52aWV3LWxpc3QnICksXG5cblx0XHRcdGlucHV0ICA9IF8uZGVib3VuY2UoIGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdHZhciB2YWwgPSAkKCBlLmN1cnJlbnRUYXJnZXQgKS52YWwoKSxcblx0XHRcdFx0XHR1cmwgPSAnJztcblxuXHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHR1cmwgKz0gJz9zZWFyY2g9JyArIHZhbDtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmdyaWRSb3V0ZXIubmF2aWdhdGUoIHRoaXMuZ3JpZFJvdXRlci5iYXNlVXJsKCB1cmwgKSApO1xuXHRcdFx0fSwgMTAwMCApO1xuXG5cdFx0Ly8gVXBkYXRlIHRoZSBVUkwgd2hlbiBlbnRlcmluZyBzZWFyY2ggc3RyaW5nIChhdCBtb3N0IG9uY2UgcGVyIHNlY29uZClcblx0XHRzZWFyY2gub24oICdpbnB1dCcsIF8uYmluZCggaW5wdXQsIHRoaXMgKSApO1xuXHRcdHNlYXJjaFZpZXcudmFsKCBjdXJyZW50U2VhcmNoICkudHJpZ2dlciggJ2lucHV0JyApO1xuXG5cdFx0dGhpcy5ncmlkUm91dGVyLm9uKCAncm91dGU6c2VhcmNoJywgZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIGhyZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcblx0XHRcdGlmICggaHJlZi5pbmRleE9mKCAnbW9kZT0nICkgPiAtMSApIHtcblx0XHRcdFx0aHJlZiA9IGhyZWYucmVwbGFjZSggL21vZGU9W14mXSsvZywgJ21vZGU9bGlzdCcgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGhyZWYgKz0gaHJlZi5pbmRleE9mKCAnPycgKSA+IC0xID8gJyZtb2RlPWxpc3QnIDogJz9tb2RlPWxpc3QnO1xuXHRcdFx0fVxuXHRcdFx0aHJlZiA9IGhyZWYucmVwbGFjZSggJ3NlYXJjaD0nLCAncz0nICk7XG5cdFx0XHRsaXN0TW9kZS5wcm9wKCAnaHJlZicsIGhyZWYgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENyZWF0ZSB0aGUgZGVmYXVsdCBzdGF0ZXMgZm9yIHRoZSBmcmFtZS5cblx0ICovXG5cdGNyZWF0ZVN0YXRlczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5zdGF0ZXMgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIHRoZSBkZWZhdWx0IHN0YXRlcy5cblx0XHR0aGlzLnN0YXRlcy5hZGQoW1xuXHRcdFx0bmV3IExpYnJhcnkoe1xuXHRcdFx0XHRsaWJyYXJ5OiAgICAgICAgICAgIHdwLm1lZGlhLnF1ZXJ5KCBvcHRpb25zLmxpYnJhcnkgKSxcblx0XHRcdFx0bXVsdGlwbGU6ICAgICAgICAgICBvcHRpb25zLm11bHRpcGxlLFxuXHRcdFx0XHR0aXRsZTogICAgICAgICAgICAgIG9wdGlvbnMudGl0bGUsXG5cdFx0XHRcdGNvbnRlbnQ6ICAgICAgICAgICAgJ2Jyb3dzZScsXG5cdFx0XHRcdHRvb2xiYXI6ICAgICAgICAgICAgJ3NlbGVjdCcsXG5cdFx0XHRcdGNvbnRlbnRVc2VyU2V0dGluZzogZmFsc2UsXG5cdFx0XHRcdGZpbHRlcmFibGU6ICAgICAgICAgJ2FsbCcsXG5cdFx0XHRcdGF1dG9TZWxlY3Q6ICAgICAgICAgZmFsc2Vcblx0XHRcdH0pXG5cdFx0XSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEJpbmQgcmVnaW9uIG1vZGUgYWN0aXZhdGlvbiBldmVudHMgdG8gcHJvcGVyIGhhbmRsZXJzLlxuXHQgKi9cblx0YmluZFJlZ2lvbk1vZGVIYW5kbGVyczogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5vbiggJ2NvbnRlbnQ6Y3JlYXRlOmJyb3dzZScsIHRoaXMuYnJvd3NlQ29udGVudCwgdGhpcyApO1xuXG5cdFx0Ly8gSGFuZGxlIGEgZnJhbWUtbGV2ZWwgZXZlbnQgZm9yIGVkaXRpbmcgYW4gYXR0YWNobWVudC5cblx0XHR0aGlzLm9uKCAnZWRpdDphdHRhY2htZW50JywgdGhpcy5vcGVuRWRpdEF0dGFjaG1lbnRNb2RhbCwgdGhpcyApO1xuXG5cdFx0dGhpcy5vbiggJ3NlbGVjdDphY3RpdmF0ZScsIHRoaXMuYmluZEtleWRvd24sIHRoaXMgKTtcblx0XHR0aGlzLm9uKCAnc2VsZWN0OmRlYWN0aXZhdGUnLCB0aGlzLnVuYmluZEtleWRvd24sIHRoaXMgKTtcblx0fSxcblxuXHRoYW5kbGVLZXlkb3duOiBmdW5jdGlvbiggZSApIHtcblx0XHRpZiAoIDI3ID09PSBlLndoaWNoICkge1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0dGhpcy5kZWFjdGl2YXRlTW9kZSggJ3NlbGVjdCcgKS5hY3RpdmF0ZU1vZGUoICdlZGl0JyApO1xuXHRcdH1cblx0fSxcblxuXHRiaW5kS2V5ZG93bjogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy4kYm9keS5vbiggJ2tleWRvd24uc2VsZWN0JywgXy5iaW5kKCB0aGlzLmhhbmRsZUtleWRvd24sIHRoaXMgKSApO1xuXHR9LFxuXG5cdHVuYmluZEtleWRvd246IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuJGJvZHkub2ZmKCAna2V5ZG93bi5zZWxlY3QnICk7XG5cdH0sXG5cblx0Zml4UG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciAkYnJvd3NlciwgJHRvb2xiYXI7XG5cdFx0aWYgKCAhIHRoaXMuaXNNb2RlQWN0aXZlKCAnc2VsZWN0JyApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdCRicm93c2VyID0gdGhpcy4kKCcuYXR0YWNobWVudHMtYnJvd3NlcicpO1xuXHRcdCR0b29sYmFyID0gJGJyb3dzZXIuZmluZCgnLm1lZGlhLXRvb2xiYXInKTtcblxuXHRcdC8vIE9mZnNldCBkb2Vzbid0IGFwcGVhciB0byB0YWtlIHRvcCBtYXJnaW4gaW50byBhY2NvdW50LCBoZW5jZSArMTZcblx0XHRpZiAoICggJGJyb3dzZXIub2Zmc2V0KCkudG9wICsgMTYgKSA8IHRoaXMuJHdpbmRvdy5zY3JvbGxUb3AoKSArIHRoaXMuJGFkbWluQmFyLmhlaWdodCgpICkge1xuXHRcdFx0JGJyb3dzZXIuYWRkQ2xhc3MoICdmaXhlZCcgKTtcblx0XHRcdCR0b29sYmFyLmNzcygnd2lkdGgnLCAkYnJvd3Nlci53aWR0aCgpICsgJ3B4Jyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCRicm93c2VyLnJlbW92ZUNsYXNzKCAnZml4ZWQnICk7XG5cdFx0XHQkdG9vbGJhci5jc3MoJ3dpZHRoJywgJycpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQ2xpY2sgaGFuZGxlciBmb3IgdGhlIGBBZGQgTmV3YCBidXR0b24uXG5cdCAqL1xuXHRhZGROZXdDbGlja0hhbmRsZXI6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdHRoaXMudHJpZ2dlciggJ3RvZ2dsZTp1cGxvYWQ6YXR0YWNobWVudCcgKTtcblx0fSxcblxuXHQvKipcblx0ICogT3BlbiB0aGUgRWRpdCBBdHRhY2htZW50IG1vZGFsLlxuXHQgKi9cblx0b3BlbkVkaXRBdHRhY2htZW50TW9kYWw6IGZ1bmN0aW9uKCBtb2RlbCApIHtcblx0XHQvLyBDcmVhdGUgYSBuZXcgRWRpdEF0dGFjaG1lbnQgZnJhbWUsIHBhc3NpbmcgYWxvbmcgdGhlIGxpYnJhcnkgYW5kIHRoZSBhdHRhY2htZW50IG1vZGVsLlxuXHRcdHdwLm1lZGlhKCB7XG5cdFx0XHRmcmFtZTogICAgICAgJ2VkaXQtYXR0YWNobWVudHMnLFxuXHRcdFx0Y29udHJvbGxlcjogIHRoaXMsXG5cdFx0XHRsaWJyYXJ5OiAgICAgdGhpcy5zdGF0ZSgpLmdldCgnbGlicmFyeScpLFxuXHRcdFx0bW9kZWw6ICAgICAgIG1vZGVsXG5cdFx0fSApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgYW4gYXR0YWNobWVudHMgYnJvd3NlciB2aWV3IHdpdGhpbiB0aGUgY29udGVudCByZWdpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZW50UmVnaW9uIEJhc2ljIG9iamVjdCB3aXRoIGEgYHZpZXdgIHByb3BlcnR5LCB3aGljaFxuXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgc2V0IHdpdGggdGhlIHByb3BlciByZWdpb24gdmlldy5cblx0ICogQHRoaXMgd3AubWVkaWEuY29udHJvbGxlci5SZWdpb25cblx0ICovXG5cdGJyb3dzZUNvbnRlbnQ6IGZ1bmN0aW9uKCBjb250ZW50UmVnaW9uICkge1xuXHRcdHZhciBzdGF0ZSA9IHRoaXMuc3RhdGUoKTtcblxuXHRcdC8vIEJyb3dzZSBvdXIgbGlicmFyeSBvZiBhdHRhY2htZW50cy5cblx0XHR0aGlzLmJyb3dzZXJWaWV3ID0gY29udGVudFJlZ2lvbi52aWV3ID0gbmV3IHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudHNCcm93c2VyKHtcblx0XHRcdGNvbnRyb2xsZXI6IHRoaXMsXG5cdFx0XHRjb2xsZWN0aW9uOiBzdGF0ZS5nZXQoJ2xpYnJhcnknKSxcblx0XHRcdHNlbGVjdGlvbjogIHN0YXRlLmdldCgnc2VsZWN0aW9uJyksXG5cdFx0XHRtb2RlbDogICAgICBzdGF0ZSxcblx0XHRcdHNvcnRhYmxlOiAgIHN0YXRlLmdldCgnc29ydGFibGUnKSxcblx0XHRcdHNlYXJjaDogICAgIHN0YXRlLmdldCgnc2VhcmNoYWJsZScpLFxuXHRcdFx0ZmlsdGVyczogICAgc3RhdGUuZ2V0KCdmaWx0ZXJhYmxlJyksXG5cdFx0XHRkYXRlOiAgICAgICBzdGF0ZS5nZXQoJ2RhdGUnKSxcblx0XHRcdGRpc3BsYXk6ICAgIHN0YXRlLmdldCgnZGlzcGxheVNldHRpbmdzJyksXG5cdFx0XHRkcmFnSW5mbzogICBzdGF0ZS5nZXQoJ2RyYWdJbmZvJyksXG5cdFx0XHRzaWRlYmFyOiAgICAnZXJyb3JzJyxcblxuXHRcdFx0c3VnZ2VzdGVkV2lkdGg6ICBzdGF0ZS5nZXQoJ3N1Z2dlc3RlZFdpZHRoJyksXG5cdFx0XHRzdWdnZXN0ZWRIZWlnaHQ6IHN0YXRlLmdldCgnc3VnZ2VzdGVkSGVpZ2h0JyksXG5cblx0XHRcdEF0dGFjaG1lbnRWaWV3OiBzdGF0ZS5nZXQoJ0F0dGFjaG1lbnRWaWV3JyksXG5cblx0XHRcdHNjcm9sbEVsZW1lbnQ6IGRvY3VtZW50XG5cdFx0fSk7XG5cdFx0dGhpcy5icm93c2VyVmlldy5vbiggJ3JlYWR5JywgXy5iaW5kKCB0aGlzLmJpbmREZWZlcnJlZCwgdGhpcyApICk7XG5cblx0XHR0aGlzLmVycm9ycyA9IHdwLlVwbG9hZGVyLmVycm9ycztcblx0XHR0aGlzLmVycm9ycy5vbiggJ2FkZCByZW1vdmUgcmVzZXQnLCB0aGlzLnNpZGViYXJWaXNpYmlsaXR5LCB0aGlzICk7XG5cdH0sXG5cblx0c2lkZWJhclZpc2liaWxpdHk6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuYnJvd3NlclZpZXcuJCggJy5tZWRpYS1zaWRlYmFyJyApLnRvZ2dsZSggISEgdGhpcy5lcnJvcnMubGVuZ3RoICk7XG5cdH0sXG5cblx0YmluZERlZmVycmVkOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoICEgdGhpcy5icm93c2VyVmlldy5kZmQgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuYnJvd3NlclZpZXcuZGZkLmRvbmUoIF8uYmluZCggdGhpcy5zdGFydEhpc3RvcnksIHRoaXMgKSApO1xuXHR9LFxuXG5cdHN0YXJ0SGlzdG9yeTogZnVuY3Rpb24oKSB7XG5cdFx0Ly8gVmVyaWZ5IHB1c2hTdGF0ZSBzdXBwb3J0IGFuZCBhY3RpdmF0ZVxuXHRcdGlmICggd2luZG93Lmhpc3RvcnkgJiYgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlICkge1xuXHRcdFx0QmFja2JvbmUuaGlzdG9yeS5zdGFydCgge1xuXHRcdFx0XHRyb290OiB3aW5kb3cuX3dwTWVkaWFHcmlkU2V0dGluZ3MuYWRtaW5VcmwsXG5cdFx0XHRcdHB1c2hTdGF0ZTogdHJ1ZVxuXHRcdFx0fSApO1xuXHRcdH1cblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFuYWdlO1xuIl19
  • src/wp-includes/js/media-models.js

    diff --git src/wp-includes/js/media-models.js src/wp-includes/js/media-models.js
    index 5cc7597..e9d7797 100644
    Selection = Attachments.extend({ 
    15031503
    15041504module.exports = Selection;
    15051505
    1506 },{}]},{},[1]);
     1506},{}]},{},[1])
     1507//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9ncnVudC1icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvbW9kZWxzLm1hbmlmZXN0LmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL21vZGVscy9hdHRhY2htZW50LmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL21vZGVscy9hdHRhY2htZW50cy5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS9tb2RlbHMvcG9zdC1pbWFnZS5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS9tb2RlbHMvcXVlcnkuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvbW9kZWxzL3NlbGVjdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDck9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqaUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJ2YXIgJCA9IGpRdWVyeSxcblx0QXR0YWNobWVudCwgQXR0YWNobWVudHMsIGwxMG4sIG1lZGlhO1xuXG53aW5kb3cud3AgPSB3aW5kb3cud3AgfHwge307XG5cbi8qKlxuICogQ3JlYXRlIGFuZCByZXR1cm4gYSBtZWRpYSBmcmFtZS5cbiAqXG4gKiBIYW5kbGVzIHRoZSBkZWZhdWx0IG1lZGlhIGV4cGVyaWVuY2UuXG4gKlxuICogQHBhcmFtICB7b2JqZWN0fSBhdHRyaWJ1dGVzIFRoZSBwcm9wZXJ0aWVzIHBhc3NlZCB0byB0aGUgbWFpbiBtZWRpYSBjb250cm9sbGVyLlxuICogQHJldHVybiB7d3AubWVkaWEudmlldy5NZWRpYUZyYW1lfSBBIG1lZGlhIHdvcmtmbG93LlxuICovXG5tZWRpYSA9IHdwLm1lZGlhID0gZnVuY3Rpb24oIGF0dHJpYnV0ZXMgKSB7XG5cdHZhciBNZWRpYUZyYW1lID0gbWVkaWEudmlldy5NZWRpYUZyYW1lLFxuXHRcdGZyYW1lO1xuXG5cdGlmICggISBNZWRpYUZyYW1lICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGF0dHJpYnV0ZXMgPSBfLmRlZmF1bHRzKCBhdHRyaWJ1dGVzIHx8IHt9LCB7XG5cdFx0ZnJhbWU6ICdzZWxlY3QnXG5cdH0pO1xuXG5cdGlmICggJ3NlbGVjdCcgPT09IGF0dHJpYnV0ZXMuZnJhbWUgJiYgTWVkaWFGcmFtZS5TZWxlY3QgKSB7XG5cdFx0ZnJhbWUgPSBuZXcgTWVkaWFGcmFtZS5TZWxlY3QoIGF0dHJpYnV0ZXMgKTtcblx0fSBlbHNlIGlmICggJ3Bvc3QnID09PSBhdHRyaWJ1dGVzLmZyYW1lICYmIE1lZGlhRnJhbWUuUG9zdCApIHtcblx0XHRmcmFtZSA9IG5ldyBNZWRpYUZyYW1lLlBvc3QoIGF0dHJpYnV0ZXMgKTtcblx0fSBlbHNlIGlmICggJ21hbmFnZScgPT09IGF0dHJpYnV0ZXMuZnJhbWUgJiYgTWVkaWFGcmFtZS5NYW5hZ2UgKSB7XG5cdFx0ZnJhbWUgPSBuZXcgTWVkaWFGcmFtZS5NYW5hZ2UoIGF0dHJpYnV0ZXMgKTtcblx0fSBlbHNlIGlmICggJ2ltYWdlJyA9PT0gYXR0cmlidXRlcy5mcmFtZSAmJiBNZWRpYUZyYW1lLkltYWdlRGV0YWlscyApIHtcblx0XHRmcmFtZSA9IG5ldyBNZWRpYUZyYW1lLkltYWdlRGV0YWlscyggYXR0cmlidXRlcyApO1xuXHR9IGVsc2UgaWYgKCAnYXVkaW8nID09PSBhdHRyaWJ1dGVzLmZyYW1lICYmIE1lZGlhRnJhbWUuQXVkaW9EZXRhaWxzICkge1xuXHRcdGZyYW1lID0gbmV3IE1lZGlhRnJhbWUuQXVkaW9EZXRhaWxzKCBhdHRyaWJ1dGVzICk7XG5cdH0gZWxzZSBpZiAoICd2aWRlbycgPT09IGF0dHJpYnV0ZXMuZnJhbWUgJiYgTWVkaWFGcmFtZS5WaWRlb0RldGFpbHMgKSB7XG5cdFx0ZnJhbWUgPSBuZXcgTWVkaWFGcmFtZS5WaWRlb0RldGFpbHMoIGF0dHJpYnV0ZXMgKTtcblx0fSBlbHNlIGlmICggJ2VkaXQtYXR0YWNobWVudHMnID09PSBhdHRyaWJ1dGVzLmZyYW1lICYmIE1lZGlhRnJhbWUuRWRpdEF0dGFjaG1lbnRzICkge1xuXHRcdGZyYW1lID0gbmV3IE1lZGlhRnJhbWUuRWRpdEF0dGFjaG1lbnRzKCBhdHRyaWJ1dGVzICk7XG5cdH1cblxuXHRkZWxldGUgYXR0cmlidXRlcy5mcmFtZTtcblxuXHRtZWRpYS5mcmFtZSA9IGZyYW1lO1xuXG5cdHJldHVybiBmcmFtZTtcbn07XG5cbl8uZXh0ZW5kKCBtZWRpYSwgeyBtb2RlbDoge30sIHZpZXc6IHt9LCBjb250cm9sbGVyOiB7fSwgZnJhbWVzOiB7fSB9KTtcblxuLy8gTGluayBhbnkgbG9jYWxpemVkIHN0cmluZ3MuXG5sMTBuID0gbWVkaWEubW9kZWwubDEwbiA9IHdpbmRvdy5fd3BNZWRpYU1vZGVsc0wxMG4gfHwge307XG5cbi8vIExpbmsgYW55IHNldHRpbmdzLlxubWVkaWEubW9kZWwuc2V0dGluZ3MgPSBsMTBuLnNldHRpbmdzIHx8IHt9O1xuZGVsZXRlIGwxMG4uc2V0dGluZ3M7XG5cbkF0dGFjaG1lbnQgPSBtZWRpYS5tb2RlbC5BdHRhY2htZW50ID0gcmVxdWlyZSggJy4vbW9kZWxzL2F0dGFjaG1lbnQuanMnICk7XG5BdHRhY2htZW50cyA9IG1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzID0gcmVxdWlyZSggJy4vbW9kZWxzL2F0dGFjaG1lbnRzLmpzJyApO1xuXG5tZWRpYS5tb2RlbC5RdWVyeSA9IHJlcXVpcmUoICcuL21vZGVscy9xdWVyeS5qcycgKTtcbm1lZGlhLm1vZGVsLlBvc3RJbWFnZSA9IHJlcXVpcmUoICcuL21vZGVscy9wb3N0LWltYWdlLmpzJyApO1xubWVkaWEubW9kZWwuU2VsZWN0aW9uID0gcmVxdWlyZSggJy4vbW9kZWxzL3NlbGVjdGlvbi5qcycgKTtcblxuLyoqXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFVUSUxJVElFU1xuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuLyoqXG4gKiBBIGJhc2ljIGVxdWFsaXR5IGNvbXBhcmF0b3IgZm9yIEJhY2tib25lIG1vZGVscy5cbiAqXG4gKiBVc2VkIHRvIG9yZGVyIG1vZGVscyB3aXRoaW4gYSBjb2xsZWN0aW9uIC0gQHNlZSB3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50cy5jb21wYXJhdG9yKCkuXG4gKlxuICogQHBhcmFtICB7bWl4ZWR9ICBhICBUaGUgcHJpbWFyeSBwYXJhbWV0ZXIgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSAge21peGVkfSAgYiAgVGhlIHByaW1hcnkgcGFyYW1ldGVyIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGFjIFRoZSBmYWxsYmFjayBwYXJhbWV0ZXIgdG8gY29tcGFyZSwgYSdzIGNpZC5cbiAqIEBwYXJhbSAge3N0cmluZ30gYmMgVGhlIGZhbGxiYWNrIHBhcmFtZXRlciB0byBjb21wYXJlLCBiJ3MgY2lkLlxuICogQHJldHVybiB7bnVtYmVyfSAgICAtMTogYSBzaG91bGQgY29tZSBiZWZvcmUgYi5cbiAqICAgICAgICAgICAgICAgICAgICAgIDA6IGEgYW5kIGIgYXJlIG9mIHRoZSBzYW1lIHJhbmsuXG4gKiAgICAgICAgICAgICAgICAgICAgICAxOiBiIHNob3VsZCBjb21lIGJlZm9yZSBhLlxuICovXG5tZWRpYS5jb21wYXJlID0gZnVuY3Rpb24oIGEsIGIsIGFjLCBiYyApIHtcblx0aWYgKCBfLmlzRXF1YWwoIGEsIGIgKSApIHtcblx0XHRyZXR1cm4gYWMgPT09IGJjID8gMCA6IChhYyA+IGJjID8gLTEgOiAxKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYSA+IGIgPyAtMSA6IDE7XG5cdH1cbn07XG5cbl8uZXh0ZW5kKCBtZWRpYSwge1xuXHQvKipcblx0ICogbWVkaWEudGVtcGxhdGUoIGlkIClcblx0ICpcblx0ICogRmV0Y2ggYSBKYXZhU2NyaXB0IHRlbXBsYXRlIGZvciBhbiBpZCwgYW5kIHJldHVybiBhIHRlbXBsYXRpbmcgZnVuY3Rpb24gZm9yIGl0LlxuXHQgKlxuXHQgKiBTZWUgd3AudGVtcGxhdGUoKSBpbiBgd3AtaW5jbHVkZXMvanMvd3AtdXRpbC5qc2AuXG5cdCAqXG5cdCAqIEBib3Jyb3dzIHdwLnRlbXBsYXRlIGFzIHRlbXBsYXRlXG5cdCAqL1xuXHR0ZW1wbGF0ZTogd3AudGVtcGxhdGUsXG5cblx0LyoqXG5cdCAqIG1lZGlhLnBvc3QoIFthY3Rpb25dLCBbZGF0YV0gKVxuXHQgKlxuXHQgKiBTZW5kcyBhIFBPU1QgcmVxdWVzdCB0byBXb3JkUHJlc3MuXG5cdCAqIFNlZSB3cC5hamF4LnBvc3QoKSBpbiBgd3AtaW5jbHVkZXMvanMvd3AtdXRpbC5qc2AuXG5cdCAqXG5cdCAqIEBib3Jyb3dzIHdwLmFqYXgucG9zdCBhcyBwb3N0XG5cdCAqL1xuXHRwb3N0OiB3cC5hamF4LnBvc3QsXG5cblx0LyoqXG5cdCAqIG1lZGlhLmFqYXgoIFthY3Rpb25dLCBbb3B0aW9uc10gKVxuXHQgKlxuXHQgKiBTZW5kcyBhbiBYSFIgcmVxdWVzdCB0byBXb3JkUHJlc3MuXG5cdCAqIFNlZSB3cC5hamF4LnNlbmQoKSBpbiBgd3AtaW5jbHVkZXMvanMvd3AtdXRpbC5qc2AuXG5cdCAqXG5cdCAqIEBib3Jyb3dzIHdwLmFqYXguc2VuZCBhcyBhamF4XG5cdCAqL1xuXHRhamF4OiB3cC5hamF4LnNlbmQsXG5cblx0LyoqXG5cdCAqIFNjYWxlcyBhIHNldCBvZiBkaW1lbnNpb25zIHRvIGZpdCB3aXRoaW4gYm91bmRpbmcgZGltZW5zaW9ucy5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IGRpbWVuc2lvbnNcblx0ICogQHJldHVybnMge09iamVjdH1cblx0ICovXG5cdGZpdDogZnVuY3Rpb24oIGRpbWVuc2lvbnMgKSB7XG5cdFx0dmFyIHdpZHRoICAgICA9IGRpbWVuc2lvbnMud2lkdGgsXG5cdFx0XHRoZWlnaHQgICAgPSBkaW1lbnNpb25zLmhlaWdodCxcblx0XHRcdG1heFdpZHRoICA9IGRpbWVuc2lvbnMubWF4V2lkdGgsXG5cdFx0XHRtYXhIZWlnaHQgPSBkaW1lbnNpb25zLm1heEhlaWdodCxcblx0XHRcdGNvbnN0cmFpbnQ7XG5cblx0XHQvLyBDb21wYXJlIHJhdGlvcyBiZXR3ZWVuIHRoZSB0d28gdmFsdWVzIHRvIGRldGVybWluZSB3aGljaFxuXHRcdC8vIG1heCB0byBjb25zdHJhaW4gYnkuIElmIGEgbWF4IHZhbHVlIGRvZXNuJ3QgZXhpc3QsIHRoZW4gdGhlXG5cdFx0Ly8gb3Bwb3NpdGUgc2lkZSBpcyB0aGUgY29uc3RyYWludC5cblx0XHRpZiAoICEgXy5pc1VuZGVmaW5lZCggbWF4V2lkdGggKSAmJiAhIF8uaXNVbmRlZmluZWQoIG1heEhlaWdodCApICkge1xuXHRcdFx0Y29uc3RyYWludCA9ICggd2lkdGggLyBoZWlnaHQgPiBtYXhXaWR0aCAvIG1heEhlaWdodCApID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuXHRcdH0gZWxzZSBpZiAoIF8uaXNVbmRlZmluZWQoIG1heEhlaWdodCApICkge1xuXHRcdFx0Y29uc3RyYWludCA9ICd3aWR0aCc7XG5cdFx0fSBlbHNlIGlmICggIF8uaXNVbmRlZmluZWQoIG1heFdpZHRoICkgJiYgaGVpZ2h0ID4gbWF4SGVpZ2h0ICkge1xuXHRcdFx0Y29uc3RyYWludCA9ICdoZWlnaHQnO1xuXHRcdH1cblxuXHRcdC8vIElmIHRoZSB2YWx1ZSBvZiB0aGUgY29uc3RyYWluZWQgc2lkZSBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4LFxuXHRcdC8vIHRoZW4gc2NhbGUgdGhlIHZhbHVlcy4gT3RoZXJ3aXNlIHJldHVybiB0aGUgb3JpZ2luYWxzOyB0aGV5IGZpdC5cblx0XHRpZiAoICd3aWR0aCcgPT09IGNvbnN0cmFpbnQgJiYgd2lkdGggPiBtYXhXaWR0aCApIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHdpZHRoIDogbWF4V2lkdGgsXG5cdFx0XHRcdGhlaWdodDogTWF0aC5yb3VuZCggbWF4V2lkdGggKiBoZWlnaHQgLyB3aWR0aCApXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSBpZiAoICdoZWlnaHQnID09PSBjb25zdHJhaW50ICYmIGhlaWdodCA+IG1heEhlaWdodCApIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHdpZHRoIDogTWF0aC5yb3VuZCggbWF4SGVpZ2h0ICogd2lkdGggLyBoZWlnaHQgKSxcblx0XHRcdFx0aGVpZ2h0OiBtYXhIZWlnaHRcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHdpZHRoIDogd2lkdGgsXG5cdFx0XHRcdGhlaWdodDogaGVpZ2h0XG5cdFx0XHR9O1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIFRydW5jYXRlcyBhIHN0cmluZyBieSBpbmplY3RpbmcgYW4gZWxsaXBzaXMgaW50byB0aGUgbWlkZGxlLlxuXHQgKiBVc2VmdWwgZm9yIGZpbGVuYW1lcy5cblx0ICpcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZ1xuXHQgKiBAcGFyYW0ge051bWJlcn0gW2xlbmd0aD0zMF1cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtyZXBsYWNlbWVudD0maGVsbGlwO11cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHN0cmluZywgdW5sZXNzIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gc3RyaW5nLmxlbmd0aC5cblx0ICovXG5cdHRydW5jYXRlOiBmdW5jdGlvbiggc3RyaW5nLCBsZW5ndGgsIHJlcGxhY2VtZW50ICkge1xuXHRcdGxlbmd0aCA9IGxlbmd0aCB8fCAzMDtcblx0XHRyZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50IHx8ICcmaGVsbGlwOyc7XG5cblx0XHRpZiAoIHN0cmluZy5sZW5ndGggPD0gbGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHN0cmluZztcblx0XHR9XG5cblx0XHRyZXR1cm4gc3RyaW5nLnN1YnN0ciggMCwgbGVuZ3RoIC8gMiApICsgcmVwbGFjZW1lbnQgKyBzdHJpbmcuc3Vic3RyKCAtMSAqIGxlbmd0aCAvIDIgKTtcblx0fVxufSk7XG5cbi8qKlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBNT0RFTFNcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG4vKipcbiAqIHdwLm1lZGlhLmF0dGFjaG1lbnRcbiAqXG4gKiBAc3RhdGljXG4gKiBAcGFyYW0ge1N0cmluZ30gaWQgQSBzdHJpbmcgdXNlZCB0byBpZGVudGlmeSBhIG1vZGVsLlxuICogQHJldHVybnMge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnR9XG4gKi9cbm1lZGlhLmF0dGFjaG1lbnQgPSBmdW5jdGlvbiggaWQgKSB7XG5cdHJldHVybiBBdHRhY2htZW50LmdldCggaWQgKTtcbn07XG5cbi8qKlxuICogQSBjb2xsZWN0aW9uIG9mIGFsbCBhdHRhY2htZW50cyB0aGF0IGhhdmUgYmVlbiBmZXRjaGVkIGZyb20gdGhlIHNlcnZlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c31cbiAqL1xuQXR0YWNobWVudHMuYWxsID0gbmV3IEF0dGFjaG1lbnRzKCk7XG5cbi8qKlxuICogd3AubWVkaWEucXVlcnlcbiAqXG4gKiBTaG9ydGhhbmQgZm9yIGNyZWF0aW5nIGEgbmV3IEF0dGFjaG1lbnRzIFF1ZXJ5LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcHNdXG4gKiBAcmV0dXJucyB7d3AubWVkaWEubW9kZWwuQXR0YWNobWVudHN9XG4gKi9cbm1lZGlhLnF1ZXJ5ID0gZnVuY3Rpb24oIHByb3BzICkge1xuXHRyZXR1cm4gbmV3IEF0dGFjaG1lbnRzKCBudWxsLCB7XG5cdFx0cHJvcHM6IF8uZXh0ZW5kKCBfLmRlZmF1bHRzKCBwcm9wcyB8fCB7fSwgeyBvcmRlcmJ5OiAnZGF0ZScgfSApLCB7IHF1ZXJ5OiB0cnVlIH0gKVxuXHR9KTtcbn07XG5cbi8vIENsZWFuIHVwLiBQcmV2ZW50cyBtb2JpbGUgYnJvd3NlcnMgY2FjaGluZ1xuJCh3aW5kb3cpLm9uKCd1bmxvYWQnLCBmdW5jdGlvbigpe1xuXHR3aW5kb3cud3AgPSBudWxsO1xufSk7XG4iLCIvKipcbiAqIHdwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5Nb2RlbFxuICovXG52YXIgJCA9IEJhY2tib25lLiQsXG5cdEF0dGFjaG1lbnQ7XG5cbkF0dGFjaG1lbnQgPSBCYWNrYm9uZS5Nb2RlbC5leHRlbmQoe1xuXHQvKipcblx0ICogVHJpZ2dlcmVkIHdoZW4gYXR0YWNobWVudCBkZXRhaWxzIGNoYW5nZVxuXHQgKiBPdmVycmlkZXMgQmFja2JvbmUuTW9kZWwuc3luY1xuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kXG5cdCAqIEBwYXJhbSB7d3AubWVkaWEubW9kZWwuQXR0YWNobWVudH0gbW9kZWxcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XVxuXHQgKlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICovXG5cdHN5bmM6IGZ1bmN0aW9uKCBtZXRob2QsIG1vZGVsLCBvcHRpb25zICkge1xuXHRcdC8vIElmIHRoZSBhdHRhY2htZW50IGRvZXMgbm90IHlldCBoYXZlIGFuIGBpZGAsIHJldHVybiBhbiBpbnN0YW50bHlcblx0XHQvLyByZWplY3RlZCBwcm9taXNlLiBPdGhlcndpc2UsIGFsbCBvZiBvdXIgcmVxdWVzdHMgd2lsbCBmYWlsLlxuXHRcdGlmICggXy5pc1VuZGVmaW5lZCggdGhpcy5pZCApICkge1xuXHRcdFx0cmV0dXJuICQuRGVmZXJyZWQoKS5yZWplY3RXaXRoKCB0aGlzICkucHJvbWlzZSgpO1xuXHRcdH1cblxuXHRcdC8vIE92ZXJsb2FkIHRoZSBgcmVhZGAgcmVxdWVzdCBzbyBBdHRhY2htZW50LmZldGNoKCkgZnVuY3Rpb25zIGNvcnJlY3RseS5cblx0XHRpZiAoICdyZWFkJyA9PT0gbWV0aG9kICkge1xuXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cdFx0XHRvcHRpb25zLmNvbnRleHQgPSB0aGlzO1xuXHRcdFx0b3B0aW9ucy5kYXRhID0gXy5leHRlbmQoIG9wdGlvbnMuZGF0YSB8fCB7fSwge1xuXHRcdFx0XHRhY3Rpb246ICdnZXQtYXR0YWNobWVudCcsXG5cdFx0XHRcdGlkOiB0aGlzLmlkXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiB3cC5tZWRpYS5hamF4KCBvcHRpb25zICk7XG5cblx0XHQvLyBPdmVybG9hZCB0aGUgYHVwZGF0ZWAgcmVxdWVzdCBzbyBwcm9wZXJ0aWVzIGNhbiBiZSBzYXZlZC5cblx0XHR9IGVsc2UgaWYgKCAndXBkYXRlJyA9PT0gbWV0aG9kICkge1xuXHRcdFx0Ly8gSWYgd2UgZG8gbm90IGhhdmUgdGhlIG5lY2Vzc2FyeSBub25jZSwgZmFpbCBpbW1lZGl0YXRlbHkuXG5cdFx0XHRpZiAoICEgdGhpcy5nZXQoJ25vbmNlcycpIHx8ICEgdGhpcy5nZXQoJ25vbmNlcycpLnVwZGF0ZSApIHtcblx0XHRcdFx0cmV0dXJuICQuRGVmZXJyZWQoKS5yZWplY3RXaXRoKCB0aGlzICkucHJvbWlzZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblx0XHRcdG9wdGlvbnMuY29udGV4dCA9IHRoaXM7XG5cblx0XHRcdC8vIFNldCB0aGUgYWN0aW9uIGFuZCBJRC5cblx0XHRcdG9wdGlvbnMuZGF0YSA9IF8uZXh0ZW5kKCBvcHRpb25zLmRhdGEgfHwge30sIHtcblx0XHRcdFx0YWN0aW9uOiAgJ3NhdmUtYXR0YWNobWVudCcsXG5cdFx0XHRcdGlkOiAgICAgIHRoaXMuaWQsXG5cdFx0XHRcdG5vbmNlOiAgIHRoaXMuZ2V0KCdub25jZXMnKS51cGRhdGUsXG5cdFx0XHRcdHBvc3RfaWQ6IHdwLm1lZGlhLm1vZGVsLnNldHRpbmdzLnBvc3QuaWRcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBSZWNvcmQgdGhlIHZhbHVlcyBvZiB0aGUgY2hhbmdlZCBhdHRyaWJ1dGVzLlxuXHRcdFx0aWYgKCBtb2RlbC5oYXNDaGFuZ2VkKCkgKSB7XG5cdFx0XHRcdG9wdGlvbnMuZGF0YS5jaGFuZ2VzID0ge307XG5cblx0XHRcdFx0Xy5lYWNoKCBtb2RlbC5jaGFuZ2VkLCBmdW5jdGlvbiggdmFsdWUsIGtleSApIHtcblx0XHRcdFx0XHRvcHRpb25zLmRhdGEuY2hhbmdlc1sga2V5IF0gPSB0aGlzLmdldCgga2V5ICk7XG5cdFx0XHRcdH0sIHRoaXMgKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHdwLm1lZGlhLmFqYXgoIG9wdGlvbnMgKTtcblxuXHRcdC8vIE92ZXJsb2FkIHRoZSBgZGVsZXRlYCByZXF1ZXN0IHNvIGF0dGFjaG1lbnRzIGNhbiBiZSByZW1vdmVkLlxuXHRcdC8vIFRoaXMgd2lsbCBwZXJtYW5lbnRseSBkZWxldGUgYW4gYXR0YWNobWVudC5cblx0XHR9IGVsc2UgaWYgKCAnZGVsZXRlJyA9PT0gbWV0aG9kICkge1xuXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0XHRcdGlmICggISBvcHRpb25zLndhaXQgKSB7XG5cdFx0XHRcdHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0b3B0aW9ucy5jb250ZXh0ID0gdGhpcztcblx0XHRcdG9wdGlvbnMuZGF0YSA9IF8uZXh0ZW5kKCBvcHRpb25zLmRhdGEgfHwge30sIHtcblx0XHRcdFx0YWN0aW9uOiAgICdkZWxldGUtcG9zdCcsXG5cdFx0XHRcdGlkOiAgICAgICB0aGlzLmlkLFxuXHRcdFx0XHRfd3Bub25jZTogdGhpcy5nZXQoJ25vbmNlcycpWydkZWxldGUnXVxuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiB3cC5tZWRpYS5hamF4KCBvcHRpb25zICkuZG9uZSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcblx0XHRcdH0pLmZhaWwoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuXHRcdFx0fSk7XG5cblx0XHQvLyBPdGhlcndpc2UsIGZhbGwgYmFjayB0byBgQmFja2JvbmUuc3luYygpYC5cblx0XHR9IGVsc2Uge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBDYWxsIGBzeW5jYCBkaXJlY3RseSBvbiBCYWNrYm9uZS5Nb2RlbFxuXHRcdFx0ICovXG5cdFx0XHRyZXR1cm4gQmFja2JvbmUuTW9kZWwucHJvdG90eXBlLnN5bmMuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIENvbnZlcnQgZGF0ZSBzdHJpbmdzIGludG8gRGF0ZSBvYmplY3RzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcmVzcCBUaGUgcmF3IHJlc3BvbnNlIG9iamVjdCwgdHlwaWNhbGx5IHJldHVybmVkIGJ5IGZldGNoKClcblx0ICogQHJldHVybnMge09iamVjdH0gVGhlIG1vZGlmaWVkIHJlc3BvbnNlIG9iamVjdCwgd2hpY2ggaXMgdGhlIGF0dHJpYnV0ZXMgaGFzaFxuXHQgKiAgICB0byBiZSBzZXQgb24gdGhlIG1vZGVsLlxuXHQgKi9cblx0cGFyc2U6IGZ1bmN0aW9uKCByZXNwICkge1xuXHRcdGlmICggISByZXNwICkge1xuXHRcdFx0cmV0dXJuIHJlc3A7XG5cdFx0fVxuXG5cdFx0cmVzcC5kYXRlID0gbmV3IERhdGUoIHJlc3AuZGF0ZSApO1xuXHRcdHJlc3AubW9kaWZpZWQgPSBuZXcgRGF0ZSggcmVzcC5tb2RpZmllZCApO1xuXHRcdHJldHVybiByZXNwO1xuXHR9LFxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGEgVGhlIHByb3BlcnRpZXMgdG8gYmUgc2F2ZWQuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFN5bmMgb3B0aW9ucy4gZS5nLiBwYXRjaCwgd2FpdCwgc3VjY2VzcywgZXJyb3IuXG5cdCAqXG5cdCAqIEB0aGlzIEJhY2tib25lLk1vZGVsXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfVxuXHQgKi9cblx0c2F2ZUNvbXBhdDogZnVuY3Rpb24oIGRhdGEsIG9wdGlvbnMgKSB7XG5cdFx0dmFyIG1vZGVsID0gdGhpcztcblxuXHRcdC8vIElmIHdlIGRvIG5vdCBoYXZlIHRoZSBuZWNlc3Nhcnkgbm9uY2UsIGZhaWwgaW1tZWRpdGF0ZWx5LlxuXHRcdGlmICggISB0aGlzLmdldCgnbm9uY2VzJykgfHwgISB0aGlzLmdldCgnbm9uY2VzJykudXBkYXRlICkge1xuXHRcdFx0cmV0dXJuICQuRGVmZXJyZWQoKS5yZWplY3RXaXRoKCB0aGlzICkucHJvbWlzZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB3cC5tZWRpYS5wb3N0KCAnc2F2ZS1hdHRhY2htZW50LWNvbXBhdCcsIF8uZGVmYXVsdHMoe1xuXHRcdFx0aWQ6ICAgICAgdGhpcy5pZCxcblx0XHRcdG5vbmNlOiAgIHRoaXMuZ2V0KCdub25jZXMnKS51cGRhdGUsXG5cdFx0XHRwb3N0X2lkOiB3cC5tZWRpYS5tb2RlbC5zZXR0aW5ncy5wb3N0LmlkXG5cdFx0fSwgZGF0YSApICkuZG9uZSggZnVuY3Rpb24oIHJlc3AsIHN0YXR1cywgeGhyICkge1xuXHRcdFx0bW9kZWwuc2V0KCBtb2RlbC5wYXJzZSggcmVzcCwgeGhyICksIG9wdGlvbnMgKTtcblx0XHR9KTtcblx0fVxufSwge1xuXHQvKipcblx0ICogQ3JlYXRlIGEgbmV3IG1vZGVsIG9uIHRoZSBzdGF0aWMgJ2FsbCcgYXR0YWNobWVudHMgY29sbGVjdGlvbiBhbmQgcmV0dXJuIGl0LlxuXHQgKlxuXHQgKiBAc3RhdGljXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyc1xuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEubW9kZWwuQXR0YWNobWVudH1cblx0ICovXG5cdGNyZWF0ZTogZnVuY3Rpb24oIGF0dHJzICkge1xuXHRcdHZhciBBdHRhY2htZW50cyA9IHdwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzO1xuXHRcdHJldHVybiBBdHRhY2htZW50cy5hbGwucHVzaCggYXR0cnMgKTtcblx0fSxcblx0LyoqXG5cdCAqIENyZWF0ZSBhIG5ldyBtb2RlbCBvbiB0aGUgc3RhdGljICdhbGwnIGF0dGFjaG1lbnRzIGNvbGxlY3Rpb24gYW5kIHJldHVybiBpdC5cblx0ICpcblx0ICogSWYgdGhpcyBmdW5jdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBmb3IgdGhlIGlkLFxuXHQgKiBpdCByZXR1cm5zIHRoZSBzcGVjaWZpZWQgYXR0YWNobWVudC5cblx0ICpcblx0ICogQHN0YXRpY1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgQSBzdHJpbmcgdXNlZCB0byBpZGVudGlmeSBhIG1vZGVsLlxuXHQgKiBAcGFyYW0ge0JhY2tib25lLk1vZGVsfHVuZGVmaW5lZH0gYXR0YWNobWVudFxuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEubW9kZWwuQXR0YWNobWVudH1cblx0ICovXG5cdGdldDogXy5tZW1vaXplKCBmdW5jdGlvbiggaWQsIGF0dGFjaG1lbnQgKSB7XG5cdFx0dmFyIEF0dGFjaG1lbnRzID0gd3AubWVkaWEubW9kZWwuQXR0YWNobWVudHM7XG5cdFx0cmV0dXJuIEF0dGFjaG1lbnRzLmFsbC5wdXNoKCBhdHRhY2htZW50IHx8IHsgaWQ6IGlkIH0gKTtcblx0fSlcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF0dGFjaG1lbnQ7XG4iLCIvKipcbiAqIHdwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzXG4gKlxuICogQSBjb2xsZWN0aW9uIG9mIGF0dGFjaG1lbnRzLlxuICpcbiAqIFRoaXMgY29sbGVjdGlvbiBoYXMgbm8gcGVyc2lzdGVuY2Ugd2l0aCB0aGUgc2VydmVyIHdpdGhvdXQgc3VwcGx5aW5nXG4gKiAnb3B0aW9ucy5wcm9wcy5xdWVyeSA9IHRydWUnLCB3aGljaCB3aWxsIG1pcnJvciB0aGUgY29sbGVjdGlvblxuICogdG8gYW4gQXR0YWNobWVudHMgUXVlcnkgY29sbGVjdGlvbiAtIEBzZWUgd3AubWVkaWEubW9kZWwuQXR0YWNobWVudHMubWlycm9yKCkuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgQmFja2JvbmUuQ29sbGVjdGlvblxuICpcbiAqIEBwYXJhbSB7YXJyYXl9ICBbbW9kZWxzXSAgICAgICAgICAgICAgICBNb2RlbHMgdG8gaW5pdGlhbGl6ZSB3aXRoIHRoZSBjb2xsZWN0aW9uLlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAgICAgICAgICAgICAgIE9wdGlvbnMgaGFzaCBmb3IgdGhlIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMucHJvcHNdICAgICAgICAgT3B0aW9ucyBoYXNoIGZvciB0aGUgaW5pdGlhbCBxdWVyeSBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnByb3BzLm9yZGVyXSAgIEluaXRpYWwgb3JkZXIgKEFTQyBvciBERVNDKSBmb3IgdGhlIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMucHJvcHMub3JkZXJieV0gSW5pdGlhbCBhdHRyaWJ1dGUga2V5IHRvIG9yZGVyIHRoZSBjb2xsZWN0aW9uIGJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnByb3BzLnF1ZXJ5XSAgIFdoZXRoZXIgdGhlIGNvbGxlY3Rpb24gaXMgbGlua2VkIHRvIGFuIGF0dGFjaG1lbnRzIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLm9ic2VydmVdXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuZmlsdGVyc11cbiAqXG4gKi9cbnZhciBBdHRhY2htZW50cyA9IEJhY2tib25lLkNvbGxlY3Rpb24uZXh0ZW5kKHtcblx0LyoqXG5cdCAqIEB0eXBlIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50fVxuXHQgKi9cblx0bW9kZWw6IHdwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnQsXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0FycmF5fSBbbW9kZWxzPVtdXSBBcnJheSBvZiBtb2RlbHMgdXNlZCB0byBwb3B1bGF0ZSB0aGUgY29sbGVjdGlvbi5cblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XVxuXHQgKi9cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oIG1vZGVscywgb3B0aW9ucyApIHtcblx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRcdHRoaXMucHJvcHMgICA9IG5ldyBCYWNrYm9uZS5Nb2RlbCgpO1xuXHRcdHRoaXMuZmlsdGVycyA9IG9wdGlvbnMuZmlsdGVycyB8fCB7fTtcblxuXHRcdC8vIEJpbmQgZGVmYXVsdCBgY2hhbmdlYCBldmVudHMgdG8gdGhlIGBwcm9wc2AgbW9kZWwuXG5cdFx0dGhpcy5wcm9wcy5vbiggJ2NoYW5nZScsIHRoaXMuX2NoYW5nZUZpbHRlcmVkUHJvcHMsIHRoaXMgKTtcblxuXHRcdHRoaXMucHJvcHMub24oICdjaGFuZ2U6b3JkZXInLCAgIHRoaXMuX2NoYW5nZU9yZGVyLCAgIHRoaXMgKTtcblx0XHR0aGlzLnByb3BzLm9uKCAnY2hhbmdlOm9yZGVyYnknLCB0aGlzLl9jaGFuZ2VPcmRlcmJ5LCB0aGlzICk7XG5cdFx0dGhpcy5wcm9wcy5vbiggJ2NoYW5nZTpxdWVyeScsICAgdGhpcy5fY2hhbmdlUXVlcnksICAgdGhpcyApO1xuXG5cdFx0dGhpcy5wcm9wcy5zZXQoIF8uZGVmYXVsdHMoIG9wdGlvbnMucHJvcHMgfHwge30gKSApO1xuXG5cdFx0aWYgKCBvcHRpb25zLm9ic2VydmUgKSB7XG5cdFx0XHR0aGlzLm9ic2VydmUoIG9wdGlvbnMub2JzZXJ2ZSApO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIFNvcnQgdGhlIGNvbGxlY3Rpb24gd2hlbiB0aGUgb3JkZXIgYXR0cmlidXRlIGNoYW5nZXMuXG5cdCAqXG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKi9cblx0X2NoYW5nZU9yZGVyOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoIHRoaXMuY29tcGFyYXRvciApIHtcblx0XHRcdHRoaXMuc29ydCgpO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIFNldCB0aGUgZGVmYXVsdCBjb21wYXJhdG9yIG9ubHkgd2hlbiB0aGUgYG9yZGVyYnlgIHByb3BlcnR5IGlzIHNldC5cblx0ICpcblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqXG5cdCAqIEBwYXJhbSB7QmFja2JvbmUuTW9kZWx9IG1vZGVsXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBvcmRlcmJ5XG5cdCAqL1xuXHRfY2hhbmdlT3JkZXJieTogZnVuY3Rpb24oIG1vZGVsLCBvcmRlcmJ5ICkge1xuXHRcdC8vIElmIGEgZGlmZmVyZW50IGNvbXBhcmF0b3IgaXMgZGVmaW5lZCwgYmFpbC5cblx0XHRpZiAoIHRoaXMuY29tcGFyYXRvciAmJiB0aGlzLmNvbXBhcmF0b3IgIT09IEF0dGFjaG1lbnRzLmNvbXBhcmF0b3IgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBvcmRlcmJ5ICYmICdwb3N0X19pbicgIT09IG9yZGVyYnkgKSB7XG5cdFx0XHR0aGlzLmNvbXBhcmF0b3IgPSBBdHRhY2htZW50cy5jb21wYXJhdG9yO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkZWxldGUgdGhpcy5jb21wYXJhdG9yO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIElmIHRoZSBgcXVlcnlgIHByb3BlcnR5IGlzIHNldCB0byB0cnVlLCBxdWVyeSB0aGUgc2VydmVyIHVzaW5nXG5cdCAqIHRoZSBgcHJvcHNgIHZhbHVlcywgYW5kIHN5bmMgdGhlIHJlc3VsdHMgdG8gdGhpcyBjb2xsZWN0aW9uLlxuXHQgKlxuXHQgKiBAYWNjZXNzIHByaXZhdGVcblx0ICpcblx0ICogQHBhcmFtIHtCYWNrYm9uZS5Nb2RlbH0gbW9kZWxcblx0ICogQHBhcmFtIHtCb29sZWFufSBxdWVyeVxuXHQgKi9cblx0X2NoYW5nZVF1ZXJ5OiBmdW5jdGlvbiggbW9kZWwsIHF1ZXJ5ICkge1xuXHRcdGlmICggcXVlcnkgKSB7XG5cdFx0XHR0aGlzLnByb3BzLm9uKCAnY2hhbmdlJywgdGhpcy5fcmVxdWVyeSwgdGhpcyApO1xuXHRcdFx0dGhpcy5fcmVxdWVyeSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnByb3BzLm9mZiggJ2NoYW5nZScsIHRoaXMuX3JlcXVlcnksIHRoaXMgKTtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBAYWNjZXNzIHByaXZhdGVcblx0ICpcblx0ICogQHBhcmFtIHtCYWNrYm9uZS5Nb2RlbH0gbW9kZWxcblx0ICovXG5cdF9jaGFuZ2VGaWx0ZXJlZFByb3BzOiBmdW5jdGlvbiggbW9kZWwgKSB7XG5cdFx0Ly8gSWYgdGhpcyBpcyBhIHF1ZXJ5LCB1cGRhdGluZyB0aGUgY29sbGVjdGlvbiB3aWxsIGJlIGhhbmRsZWQgYnlcblx0XHQvLyBgdGhpcy5fcmVxdWVyeSgpYC5cblx0XHRpZiAoIHRoaXMucHJvcHMuZ2V0KCdxdWVyeScpICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBjaGFuZ2VkID0gXy5jaGFpbiggbW9kZWwuY2hhbmdlZCApLm1hcCggZnVuY3Rpb24oIHQsIHByb3AgKSB7XG5cdFx0XHR2YXIgZmlsdGVyID0gQXR0YWNobWVudHMuZmlsdGVyc1sgcHJvcCBdLFxuXHRcdFx0XHR0ZXJtID0gbW9kZWwuZ2V0KCBwcm9wICk7XG5cblx0XHRcdGlmICggISBmaWx0ZXIgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB0ZXJtICYmICEgdGhpcy5maWx0ZXJzWyBwcm9wIF0gKSB7XG5cdFx0XHRcdHRoaXMuZmlsdGVyc1sgcHJvcCBdID0gZmlsdGVyO1xuXHRcdFx0fSBlbHNlIGlmICggISB0ZXJtICYmIHRoaXMuZmlsdGVyc1sgcHJvcCBdID09PSBmaWx0ZXIgKSB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLmZpbHRlcnNbIHByb3AgXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVjb3JkIHRoZSBjaGFuZ2UuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LCB0aGlzICkuYW55KCkudmFsdWUoKTtcblxuXHRcdGlmICggISBjaGFuZ2VkICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIElmIG5vIGBBdHRhY2htZW50c2AgbW9kZWwgaXMgcHJvdmlkZWQgdG8gc291cmNlIHRoZSBzZWFyY2hlc1xuXHRcdC8vIGZyb20sIHRoZW4gYXV0b21hdGljYWxseSBnZW5lcmF0ZSBhIHNvdXJjZSBmcm9tIHRoZSBleGlzdGluZ1xuXHRcdC8vIG1vZGVscy5cblx0XHRpZiAoICEgdGhpcy5fc291cmNlICkge1xuXHRcdFx0dGhpcy5fc291cmNlID0gbmV3IEF0dGFjaG1lbnRzKCB0aGlzLm1vZGVscyApO1xuXHRcdH1cblxuXHRcdHRoaXMucmVzZXQoIHRoaXMuX3NvdXJjZS5maWx0ZXIoIHRoaXMudmFsaWRhdG9yLCB0aGlzICkgKTtcblx0fSxcblxuXHR2YWxpZGF0ZURlc3Ryb3llZDogZmFsc2UsXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciBhbiBhdHRhY2htZW50IGlzIHZhbGlkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnR9IGF0dGFjaG1lbnRcblx0ICogQHJldHVybnMge0Jvb2xlYW59XG5cdCAqL1xuXHR2YWxpZGF0b3I6IGZ1bmN0aW9uKCBhdHRhY2htZW50ICkge1xuXHRcdGlmICggISB0aGlzLnZhbGlkYXRlRGVzdHJveWVkICYmIGF0dGFjaG1lbnQuZGVzdHJveWVkICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gXy5hbGwoIHRoaXMuZmlsdGVycywgZnVuY3Rpb24oIGZpbHRlciApIHtcblx0XHRcdHJldHVybiAhISBmaWx0ZXIuY2FsbCggdGhpcywgYXR0YWNobWVudCApO1xuXHRcdH0sIHRoaXMgKTtcblx0fSxcblx0LyoqXG5cdCAqIEFkZCBvciByZW1vdmUgYW4gYXR0YWNobWVudCB0byB0aGUgY29sbGVjdGlvbiBkZXBlbmRpbmcgb24gaXRzIHZhbGlkaXR5LlxuXHQgKlxuXHQgKiBAcGFyYW0ge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnR9IGF0dGFjaG1lbnRcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICogQHJldHVybnMge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzfSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0dmFsaWRhdGU6IGZ1bmN0aW9uKCBhdHRhY2htZW50LCBvcHRpb25zICkge1xuXHRcdHZhciB2YWxpZCA9IHRoaXMudmFsaWRhdG9yKCBhdHRhY2htZW50ICksXG5cdFx0XHRoYXNBdHRhY2htZW50ID0gISEgdGhpcy5nZXQoIGF0dGFjaG1lbnQuY2lkICk7XG5cblx0XHRpZiAoICEgdmFsaWQgJiYgaGFzQXR0YWNobWVudCApIHtcblx0XHRcdHRoaXMucmVtb3ZlKCBhdHRhY2htZW50LCBvcHRpb25zICk7XG5cdFx0fSBlbHNlIGlmICggdmFsaWQgJiYgISBoYXNBdHRhY2htZW50ICkge1xuXHRcdFx0dGhpcy5hZGQoIGF0dGFjaG1lbnQsIG9wdGlvbnMgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHQvKipcblx0ICogQWRkIG9yIHJlbW92ZSBhbGwgYXR0YWNobWVudHMgZnJvbSBhbm90aGVyIGNvbGxlY3Rpb24gZGVwZW5kaW5nIG9uIGVhY2ggb25lJ3MgdmFsaWRpdHkuXG5cdCAqXG5cdCAqIEBwYXJhbSB7d3AubWVkaWEubW9kZWwuQXR0YWNobWVudHN9IGF0dGFjaG1lbnRzXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17fV1cblx0ICpcblx0ICogQGZpcmVzIHdwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzI3Jlc2V0XG5cdCAqXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c30gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmdcblx0ICovXG5cdHZhbGlkYXRlQWxsOiBmdW5jdGlvbiggYXR0YWNobWVudHMsIG9wdGlvbnMgKSB7XG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0XHRfLmVhY2goIGF0dGFjaG1lbnRzLm1vZGVscywgZnVuY3Rpb24oIGF0dGFjaG1lbnQgKSB7XG5cdFx0XHR0aGlzLnZhbGlkYXRlKCBhdHRhY2htZW50LCB7IHNpbGVudDogdHJ1ZSB9KTtcblx0XHR9LCB0aGlzICk7XG5cblx0XHRpZiAoICEgb3B0aW9ucy5zaWxlbnQgKSB7XG5cdFx0XHR0aGlzLnRyaWdnZXIoICdyZXNldCcsIHRoaXMsIG9wdGlvbnMgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cdC8qKlxuXHQgKiBTdGFydCBvYnNlcnZpbmcgYW5vdGhlciBhdHRhY2htZW50cyBjb2xsZWN0aW9uIGNoYW5nZSBldmVudHNcblx0ICogYW5kIHJlcGxpY2F0ZSB0aGVtIG9uIHRoaXMgY29sbGVjdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c30gVGhlIGF0dGFjaG1lbnRzIGNvbGxlY3Rpb24gdG8gb2JzZXJ2ZS5cblx0ICogQHJldHVybnMge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzfSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZy5cblx0ICovXG5cdG9ic2VydmU6IGZ1bmN0aW9uKCBhdHRhY2htZW50cyApIHtcblx0XHR0aGlzLm9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzIHx8IFtdO1xuXHRcdHRoaXMub2JzZXJ2ZXJzLnB1c2goIGF0dGFjaG1lbnRzICk7XG5cblx0XHRhdHRhY2htZW50cy5vbiggJ2FkZCBjaGFuZ2UgcmVtb3ZlJywgdGhpcy5fdmFsaWRhdGVIYW5kbGVyLCB0aGlzICk7XG5cdFx0YXR0YWNobWVudHMub24oICdyZXNldCcsIHRoaXMuX3ZhbGlkYXRlQWxsSGFuZGxlciwgdGhpcyApO1xuXHRcdHRoaXMudmFsaWRhdGVBbGwoIGF0dGFjaG1lbnRzICk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cdC8qKlxuXHQgKiBTdG9wIHJlcGxpY2F0aW5nIGNvbGxlY3Rpb24gY2hhbmdlIGV2ZW50cyBmcm9tIGFub3RoZXIgYXR0YWNobWVudHMgY29sbGVjdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c30gVGhlIGF0dGFjaG1lbnRzIGNvbGxlY3Rpb24gdG8gc3RvcCBvYnNlcnZpbmcuXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c30gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmdcblx0ICovXG5cdHVub2JzZXJ2ZTogZnVuY3Rpb24oIGF0dGFjaG1lbnRzICkge1xuXHRcdGlmICggYXR0YWNobWVudHMgKSB7XG5cdFx0XHRhdHRhY2htZW50cy5vZmYoIG51bGwsIG51bGwsIHRoaXMgKTtcblx0XHRcdHRoaXMub2JzZXJ2ZXJzID0gXy53aXRob3V0KCB0aGlzLm9ic2VydmVycywgYXR0YWNobWVudHMgKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRfLmVhY2goIHRoaXMub2JzZXJ2ZXJzLCBmdW5jdGlvbiggYXR0YWNobWVudHMgKSB7XG5cdFx0XHRcdGF0dGFjaG1lbnRzLm9mZiggbnVsbCwgbnVsbCwgdGhpcyApO1xuXHRcdFx0fSwgdGhpcyApO1xuXHRcdFx0ZGVsZXRlIHRoaXMub2JzZXJ2ZXJzO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXHQvKipcblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqXG5cdCAqIEBwYXJhbSB7d3AubWVkaWEubW9kZWwuQXR0YWNobWVudHN9IGF0dGFjaG1lbnRcblx0ICogQHBhcmFtIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c30gYXR0YWNobWVudHNcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICpcblx0ICogQHJldHVybnMge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzfSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0X3ZhbGlkYXRlSGFuZGxlcjogZnVuY3Rpb24oIGF0dGFjaG1lbnQsIGF0dGFjaG1lbnRzLCBvcHRpb25zICkge1xuXHRcdC8vIElmIHdlJ3JlIG5vdCBtaXJyb3JpbmcgdGhpcyBgYXR0YWNobWVudHNgIGNvbGxlY3Rpb24sXG5cdFx0Ly8gb25seSByZXRhaW4gdGhlIGBzaWxlbnRgIG9wdGlvbi5cblx0XHRvcHRpb25zID0gYXR0YWNobWVudHMgPT09IHRoaXMubWlycm9yaW5nID8gb3B0aW9ucyA6IHtcblx0XHRcdHNpbGVudDogb3B0aW9ucyAmJiBvcHRpb25zLnNpbGVudFxuXHRcdH07XG5cblx0XHRyZXR1cm4gdGhpcy52YWxpZGF0ZSggYXR0YWNobWVudCwgb3B0aW9ucyApO1xuXHR9LFxuXHQvKipcblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqXG5cdCAqIEBwYXJhbSB7d3AubWVkaWEubW9kZWwuQXR0YWNobWVudHN9IGF0dGFjaG1lbnRzXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c30gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmdcblx0ICovXG5cdF92YWxpZGF0ZUFsbEhhbmRsZXI6IGZ1bmN0aW9uKCBhdHRhY2htZW50cywgb3B0aW9ucyApIHtcblx0XHRyZXR1cm4gdGhpcy52YWxpZGF0ZUFsbCggYXR0YWNobWVudHMsIG9wdGlvbnMgKTtcblx0fSxcblx0LyoqXG5cdCAqIFN0YXJ0IG1pcnJvcmluZyBhbm90aGVyIGF0dGFjaG1lbnRzIGNvbGxlY3Rpb24sIGNsZWFyaW5nIG91dCBhbnkgbW9kZWxzIGFscmVhZHlcblx0ICogaW4gdGhlIGNvbGxlY3Rpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSB7d3AubWVkaWEubW9kZWwuQXR0YWNobWVudHN9IFRoZSBhdHRhY2htZW50cyBjb2xsZWN0aW9uIHRvIG1pcnJvci5cblx0ICogQHJldHVybnMge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzfSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0bWlycm9yOiBmdW5jdGlvbiggYXR0YWNobWVudHMgKSB7XG5cdFx0aWYgKCB0aGlzLm1pcnJvcmluZyAmJiB0aGlzLm1pcnJvcmluZyA9PT0gYXR0YWNobWVudHMgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHR0aGlzLnVubWlycm9yKCk7XG5cdFx0dGhpcy5taXJyb3JpbmcgPSBhdHRhY2htZW50cztcblxuXHRcdC8vIENsZWFyIHRoZSBjb2xsZWN0aW9uIHNpbGVudGx5LiBBIGByZXNldGAgZXZlbnQgd2lsbCBiZSBmaXJlZFxuXHRcdC8vIHdoZW4gYG9ic2VydmUoKWAgY2FsbHMgYHZhbGlkYXRlQWxsKClgLlxuXHRcdHRoaXMucmVzZXQoIFtdLCB7IHNpbGVudDogdHJ1ZSB9ICk7XG5cdFx0dGhpcy5vYnNlcnZlKCBhdHRhY2htZW50cyApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cdC8qKlxuXHQgKiBTdG9wIG1pcnJvcmluZyBhbm90aGVyIGF0dGFjaG1lbnRzIGNvbGxlY3Rpb24uXG5cdCAqL1xuXHR1bm1pcnJvcjogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAhIHRoaXMubWlycm9yaW5nICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMudW5vYnNlcnZlKCB0aGlzLm1pcnJvcmluZyApO1xuXHRcdGRlbGV0ZSB0aGlzLm1pcnJvcmluZztcblx0fSxcblx0LyoqXG5cdCAqIFJldHJpdmUgbW9yZSBhdHRhY2htZW50cyBmcm9tIHRoZSBzZXJ2ZXIgZm9yIHRoZSBjb2xsZWN0aW9uLlxuXHQgKlxuXHQgKiBPbmx5IHdvcmtzIGlmIHRoZSBjb2xsZWN0aW9uIGlzIG1pcnJvcmluZyBhIFF1ZXJ5IEF0dGFjaG1lbnRzIGNvbGxlY3Rpb24sXG5cdCAqIGFuZCBmb3J3YXJkcyB0byBpdHMgYG1vcmVgIG1ldGhvZC4gVGhpcyBjb2xsZWN0aW9uIGNsYXNzIGRvZXNuJ3QgaGF2ZVxuXHQgKiBzZXJ2ZXIgcGVyc2lzdGVuY2UgYnkgaXRzZWxmLlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX1cblx0ICovXG5cdG1vcmU6IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHRcdHZhciBkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXHRcdFx0bWlycm9yaW5nID0gdGhpcy5taXJyb3JpbmcsXG5cdFx0XHRhdHRhY2htZW50cyA9IHRoaXM7XG5cblx0XHRpZiAoICEgbWlycm9yaW5nIHx8ICEgbWlycm9yaW5nLm1vcmUgKSB7XG5cdFx0XHRyZXR1cm4gZGVmZXJyZWQucmVzb2x2ZVdpdGgoIHRoaXMgKS5wcm9taXNlKCk7XG5cdFx0fVxuXHRcdC8vIElmIHdlJ3JlIG1pcnJvcmluZyBhbm90aGVyIGNvbGxlY3Rpb24sIGZvcndhcmQgYG1vcmVgIHRvXG5cdFx0Ly8gdGhlIG1pcnJvcmVkIGNvbGxlY3Rpb24uIEFjY291bnQgZm9yIGEgcmFjZSBjb25kaXRpb24gYnlcblx0XHQvLyBjaGVja2luZyBpZiB3ZSdyZSBzdGlsbCBtaXJyb3JpbmcgdGhhdCBjb2xsZWN0aW9uIHdoZW5cblx0XHQvLyB0aGUgcmVxdWVzdCByZXNvbHZlcy5cblx0XHRtaXJyb3JpbmcubW9yZSggb3B0aW9ucyApLmRvbmUoIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCB0aGlzID09PSBhdHRhY2htZW50cy5taXJyb3JpbmcgKSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCB0aGlzICk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gZGVmZXJyZWQucHJvbWlzZSgpO1xuXHR9LFxuXHQvKipcblx0ICogV2hldGhlciB0aGVyZSBhcmUgbW9yZSBhdHRhY2htZW50cyB0aGF0IGhhdmVuJ3QgYmVlbiBzeW5jJ2QgZnJvbSB0aGUgc2VydmVyXG5cdCAqIHRoYXQgbWF0Y2ggdGhlIGNvbGxlY3Rpb24ncyBxdWVyeS5cblx0ICpcblx0ICogT25seSB3b3JrcyBpZiB0aGUgY29sbGVjdGlvbiBpcyBtaXJyb3JpbmcgYSBRdWVyeSBBdHRhY2htZW50cyBjb2xsZWN0aW9uLFxuXHQgKiBhbmQgZm9yd2FyZHMgdG8gaXRzIGBoYXNNb3JlYCBtZXRob2QuIFRoaXMgY29sbGVjdGlvbiBjbGFzcyBkb2Vzbid0IGhhdmVcblx0ICogc2VydmVyIHBlcnNpc3RlbmNlIGJ5IGl0c2VsZi5cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRoYXNNb3JlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5taXJyb3JpbmcgPyB0aGlzLm1pcnJvcmluZy5oYXNNb3JlKCkgOiBmYWxzZTtcblx0fSxcblx0LyoqXG5cdCAqIEEgY3VzdG9tIEFKQVgtcmVzcG9uc2UgcGFyc2VyLlxuXHQgKlxuXHQgKiBTZWUgdHJhYyB0aWNrZXQgIzI0NzUzXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSByZXNwIFRoZSByYXcgcmVzcG9uc2UgT2JqZWN0L0FycmF5LlxuXHQgKiBAcGFyYW0ge09iamVjdH0geGhyXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gVGhlIGFycmF5IG9mIG1vZGVsIGF0dHJpYnV0ZXMgdG8gYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb25cblx0ICovXG5cdHBhcnNlOiBmdW5jdGlvbiggcmVzcCwgeGhyICkge1xuXHRcdGlmICggISBfLmlzQXJyYXkoIHJlc3AgKSApIHtcblx0XHRcdHJlc3AgPSBbcmVzcF07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIF8ubWFwKCByZXNwLCBmdW5jdGlvbiggYXR0cnMgKSB7XG5cdFx0XHR2YXIgaWQsIGF0dGFjaG1lbnQsIG5ld0F0dHJpYnV0ZXM7XG5cblx0XHRcdGlmICggYXR0cnMgaW5zdGFuY2VvZiBCYWNrYm9uZS5Nb2RlbCApIHtcblx0XHRcdFx0aWQgPSBhdHRycy5nZXQoICdpZCcgKTtcblx0XHRcdFx0YXR0cnMgPSBhdHRycy5hdHRyaWJ1dGVzO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWQgPSBhdHRycy5pZDtcblx0XHRcdH1cblxuXHRcdFx0YXR0YWNobWVudCA9IHdwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnQuZ2V0KCBpZCApO1xuXHRcdFx0bmV3QXR0cmlidXRlcyA9IGF0dGFjaG1lbnQucGFyc2UoIGF0dHJzLCB4aHIgKTtcblxuXHRcdFx0aWYgKCAhIF8uaXNFcXVhbCggYXR0YWNobWVudC5hdHRyaWJ1dGVzLCBuZXdBdHRyaWJ1dGVzICkgKSB7XG5cdFx0XHRcdGF0dGFjaG1lbnQuc2V0KCBuZXdBdHRyaWJ1dGVzICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBhdHRhY2htZW50O1xuXHRcdH0pO1xuXHR9LFxuXHQvKipcblx0ICogSWYgdGhlIGNvbGxlY3Rpb24gaXMgYSBxdWVyeSwgY3JlYXRlIGFuZCBtaXJyb3IgYW4gQXR0YWNobWVudHMgUXVlcnkgY29sbGVjdGlvbi5cblx0ICpcblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqL1xuXHRfcmVxdWVyeTogZnVuY3Rpb24oIHJlZnJlc2ggKSB7XG5cdFx0dmFyIHByb3BzO1xuXHRcdGlmICggdGhpcy5wcm9wcy5nZXQoJ3F1ZXJ5JykgKSB7XG5cdFx0XHRwcm9wcyA9IHRoaXMucHJvcHMudG9KU09OKCk7XG5cdFx0XHRwcm9wcy5jYWNoZSA9ICggdHJ1ZSAhPT0gcmVmcmVzaCApO1xuXHRcdFx0dGhpcy5taXJyb3IoIHdwLm1lZGlhLm1vZGVsLlF1ZXJ5LmdldCggcHJvcHMgKSApO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIElmIHRoaXMgY29sbGVjdGlvbiBpcyBzb3J0ZWQgYnkgYG1lbnVPcmRlcmAsIHJlY2FsY3VsYXRlcyBhbmQgc2F2ZXNcblx0ICogdGhlIG1lbnUgb3JkZXIgdG8gdGhlIGRhdGFiYXNlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7dW5kZWZpbmVkfFByb21pc2V9XG5cdCAqL1xuXHRzYXZlTWVudU9yZGVyOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoICdtZW51T3JkZXInICE9PSB0aGlzLnByb3BzLmdldCgnb3JkZXJieScpICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJlbW92ZXMgYW55IHVwbG9hZGluZyBhdHRhY2htZW50cywgdXBkYXRlcyBlYWNoIGF0dGFjaG1lbnQnc1xuXHRcdC8vIG1lbnUgb3JkZXIsIGFuZCByZXR1cm5zIGFuIG9iamVjdCB3aXRoIGFuIHsgaWQ6IG1lbnVPcmRlciB9XG5cdFx0Ly8gbWFwcGluZyB0byBwYXNzIHRvIHRoZSByZXF1ZXN0LlxuXHRcdHZhciBhdHRhY2htZW50cyA9IHRoaXMuY2hhaW4oKS5maWx0ZXIoIGZ1bmN0aW9uKCBhdHRhY2htZW50ICkge1xuXHRcdFx0cmV0dXJuICEgXy5pc1VuZGVmaW5lZCggYXR0YWNobWVudC5pZCApO1xuXHRcdH0pLm1hcCggZnVuY3Rpb24oIGF0dGFjaG1lbnQsIGluZGV4ICkge1xuXHRcdFx0Ly8gSW5kaWNlcyBzdGFydCBhdCAxLlxuXHRcdFx0aW5kZXggPSBpbmRleCArIDE7XG5cdFx0XHRhdHRhY2htZW50LnNldCggJ21lbnVPcmRlcicsIGluZGV4ICk7XG5cdFx0XHRyZXR1cm4gWyBhdHRhY2htZW50LmlkLCBpbmRleCBdO1xuXHRcdH0pLm9iamVjdCgpLnZhbHVlKCk7XG5cblx0XHRpZiAoIF8uaXNFbXB0eSggYXR0YWNobWVudHMgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRyZXR1cm4gd3AubWVkaWEucG9zdCggJ3NhdmUtYXR0YWNobWVudC1vcmRlcicsIHtcblx0XHRcdG5vbmNlOiAgICAgICB3cC5tZWRpYS5tb2RlbC5zZXR0aW5ncy5wb3N0Lm5vbmNlLFxuXHRcdFx0cG9zdF9pZDogICAgIHdwLm1lZGlhLm1vZGVsLnNldHRpbmdzLnBvc3QuaWQsXG5cdFx0XHRhdHRhY2htZW50czogYXR0YWNobWVudHNcblx0XHR9KTtcblx0fVxufSwge1xuXHQvKipcblx0ICogQSBmdW5jdGlvbiB0byBjb21wYXJlIHR3byBhdHRhY2htZW50IG1vZGVscyBpbiBhbiBhdHRhY2htZW50cyBjb2xsZWN0aW9uLlxuXHQgKlxuXHQgKiBVc2VkIGFzIHRoZSBkZWZhdWx0IGNvbXBhcmF0b3IgZm9yIGluc3RhbmNlcyBvZiB3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c1xuXHQgKiBhbmQgaXRzIHN1YmNsYXNzZXMuIEBzZWUgd3AubWVkaWEubW9kZWwuQXR0YWNobWVudHMuX2NoYW5nZU9yZGVyYnkoKS5cblx0ICpcblx0ICogQHN0YXRpY1xuXHQgKlxuXHQgKiBAcGFyYW0ge0JhY2tib25lLk1vZGVsfSBhXG5cdCAqIEBwYXJhbSB7QmFja2JvbmUuTW9kZWx9IGJcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICogQHJldHVybnMge051bWJlcn0gLTEgaWYgdGhlIGZpcnN0IG1vZGVsIHNob3VsZCBjb21lIGJlZm9yZSB0aGUgc2Vjb25kLFxuXHQgKiAgICAwIGlmIHRoZXkgYXJlIG9mIHRoZSBzYW1lIHJhbmsgYW5kXG5cdCAqICAgIDEgaWYgdGhlIGZpcnN0IG1vZGVsIHNob3VsZCBjb21lIGFmdGVyLlxuXHQgKi9cblx0Y29tcGFyYXRvcjogZnVuY3Rpb24oIGEsIGIsIG9wdGlvbnMgKSB7XG5cdFx0dmFyIGtleSAgID0gdGhpcy5wcm9wcy5nZXQoJ29yZGVyYnknKSxcblx0XHRcdG9yZGVyID0gdGhpcy5wcm9wcy5nZXQoJ29yZGVyJykgfHwgJ0RFU0MnLFxuXHRcdFx0YWMgICAgPSBhLmNpZCxcblx0XHRcdGJjICAgID0gYi5jaWQ7XG5cblx0XHRhID0gYS5nZXQoIGtleSApO1xuXHRcdGIgPSBiLmdldCgga2V5ICk7XG5cblx0XHRpZiAoICdkYXRlJyA9PT0ga2V5IHx8ICdtb2RpZmllZCcgPT09IGtleSApIHtcblx0XHRcdGEgPSBhIHx8IG5ldyBEYXRlKCk7XG5cdFx0XHRiID0gYiB8fCBuZXcgRGF0ZSgpO1xuXHRcdH1cblxuXHRcdC8vIElmIGBvcHRpb25zLnRpZXNgIGlzIHNldCwgZG9uJ3QgZW5mb3JjZSB0aGUgYGNpZGAgdGllYnJlYWtlci5cblx0XHRpZiAoIG9wdGlvbnMgJiYgb3B0aW9ucy50aWVzICkge1xuXHRcdFx0YWMgPSBiYyA9IG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICggJ0RFU0MnID09PSBvcmRlciApID8gd3AubWVkaWEuY29tcGFyZSggYSwgYiwgYWMsIGJjICkgOiB3cC5tZWRpYS5jb21wYXJlKCBiLCBhLCBiYywgYWMgKTtcblx0fSxcblx0LyoqXG5cdCAqIEBuYW1lc3BhY2Vcblx0ICovXG5cdGZpbHRlcnM6IHtcblx0XHQvKipcblx0XHQgKiBAc3RhdGljXG5cdFx0ICogTm90ZSB0aGF0IHRoaXMgY2xpZW50LXNpZGUgc2VhcmNoaW5nIGlzICpub3QqIGVxdWl2YWxlbnRcblx0XHQgKiB0byBvdXIgc2VydmVyLXNpZGUgc2VhcmNoaW5nLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50fSBhdHRhY2htZW50XG5cdFx0ICpcblx0XHQgKiBAdGhpcyB3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c1xuXHRcdCAqXG5cdFx0ICogQHJldHVybnMge0Jvb2xlYW59XG5cdFx0ICovXG5cdFx0c2VhcmNoOiBmdW5jdGlvbiggYXR0YWNobWVudCApIHtcblx0XHRcdGlmICggISB0aGlzLnByb3BzLmdldCgnc2VhcmNoJykgKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gXy5hbnkoWyd0aXRsZScsJ2ZpbGVuYW1lJywnZGVzY3JpcHRpb24nLCdjYXB0aW9uJywnbmFtZSddLCBmdW5jdGlvbigga2V5ICkge1xuXHRcdFx0XHR2YXIgdmFsdWUgPSBhdHRhY2htZW50LmdldCgga2V5ICk7XG5cdFx0XHRcdHJldHVybiB2YWx1ZSAmJiAtMSAhPT0gdmFsdWUuc2VhcmNoKCB0aGlzLnByb3BzLmdldCgnc2VhcmNoJykgKTtcblx0XHRcdH0sIHRoaXMgKTtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIEBzdGF0aWNcblx0XHQgKiBAcGFyYW0ge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnR9IGF0dGFjaG1lbnRcblx0XHQgKlxuXHRcdCAqIEB0aGlzIHdwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzXG5cdFx0ICpcblx0XHQgKiBAcmV0dXJucyB7Qm9vbGVhbn1cblx0XHQgKi9cblx0XHR0eXBlOiBmdW5jdGlvbiggYXR0YWNobWVudCApIHtcblx0XHRcdHZhciB0eXBlID0gdGhpcy5wcm9wcy5nZXQoJ3R5cGUnKSwgYXR0cyA9IGF0dGFjaG1lbnQudG9KU09OKCksIG1pbWUsIGZvdW5kO1xuXG5cdFx0XHRpZiAoICEgdHlwZSB8fCAoIF8uaXNBcnJheSggdHlwZSApICYmICEgdHlwZS5sZW5ndGggKSApIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdG1pbWUgPSBhdHRzLm1pbWUgfHwgKCBhdHRzLmZpbGUgJiYgYXR0cy5maWxlLnR5cGUgKSB8fCAnJztcblxuXHRcdFx0aWYgKCBfLmlzQXJyYXkoIHR5cGUgKSApIHtcblx0XHRcdFx0Zm91bmQgPSBfLmZpbmQoIHR5cGUsIGZ1bmN0aW9uICh0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIC0xICE9PSBtaW1lLmluZGV4T2YoIHQgKTtcblx0XHRcdFx0fSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm91bmQgPSAtMSAhPT0gbWltZS5pbmRleE9mKCB0eXBlICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmb3VuZDtcblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIEBzdGF0aWNcblx0XHQgKiBAcGFyYW0ge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnR9IGF0dGFjaG1lbnRcblx0XHQgKlxuXHRcdCAqIEB0aGlzIHdwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzXG5cdFx0ICpcblx0XHQgKiBAcmV0dXJucyB7Qm9vbGVhbn1cblx0XHQgKi9cblx0XHR1cGxvYWRlZFRvOiBmdW5jdGlvbiggYXR0YWNobWVudCApIHtcblx0XHRcdHZhciB1cGxvYWRlZFRvID0gdGhpcy5wcm9wcy5nZXQoJ3VwbG9hZGVkVG8nKTtcblx0XHRcdGlmICggXy5pc1VuZGVmaW5lZCggdXBsb2FkZWRUbyApICkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVwbG9hZGVkVG8gPT09IGF0dGFjaG1lbnQuZ2V0KCd1cGxvYWRlZFRvJyk7XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBAc3RhdGljXG5cdFx0ICogQHBhcmFtIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50fSBhdHRhY2htZW50XG5cdFx0ICpcblx0XHQgKiBAdGhpcyB3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c1xuXHRcdCAqXG5cdFx0ICogQHJldHVybnMge0Jvb2xlYW59XG5cdFx0ICovXG5cdFx0c3RhdHVzOiBmdW5jdGlvbiggYXR0YWNobWVudCApIHtcblx0XHRcdHZhciBzdGF0dXMgPSB0aGlzLnByb3BzLmdldCgnc3RhdHVzJyk7XG5cdFx0XHRpZiAoIF8uaXNVbmRlZmluZWQoIHN0YXR1cyApICkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHN0YXR1cyA9PT0gYXR0YWNobWVudC5nZXQoJ3N0YXR1cycpO1xuXHRcdH1cblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXR0YWNobWVudHM7XG4iLCIvKipcbiAqIHdwLm1lZGlhLm1vZGVsLlBvc3RJbWFnZVxuICpcbiAqIEFuIGluc3RhbmNlIG9mIGFuIGltYWdlIHRoYXQncyBiZWVuIGVtYmVkZGVkIGludG8gYSBwb3N0LlxuICpcbiAqIFVzZWQgaW4gdGhlIGVtYmVkZGVkIGltYWdlIGF0dGFjaG1lbnQgZGlzcGxheSBzZXR0aW5ncyBtb2RhbCAtIEBzZWUgd3AubWVkaWEudmlldy5NZWRpYUZyYW1lLkltYWdlRGV0YWlscy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5Nb2RlbFxuICpcbiAqIEBwYXJhbSB7aW50fSBbYXR0cmlidXRlc10gICAgICAgICAgICAgICBJbml0aWFsIG1vZGVsIGF0dHJpYnV0ZXMuXG4gKiBAcGFyYW0ge2ludH0gW2F0dHJpYnV0ZXMuYXR0YWNobWVudF9pZF0gSUQgb2YgdGhlIGF0dGFjaG1lbnQuXG4gKiovXG52YXIgUG9zdEltYWdlID0gQmFja2JvbmUuTW9kZWwuZXh0ZW5kKHtcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbiggYXR0cmlidXRlcyApIHtcblx0XHR2YXIgQXR0YWNobWVudCA9IHdwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnQ7XG5cdFx0dGhpcy5hdHRhY2htZW50ID0gZmFsc2U7XG5cblx0XHRpZiAoIGF0dHJpYnV0ZXMuYXR0YWNobWVudF9pZCApIHtcblx0XHRcdHRoaXMuYXR0YWNobWVudCA9IEF0dGFjaG1lbnQuZ2V0KCBhdHRyaWJ1dGVzLmF0dGFjaG1lbnRfaWQgKTtcblx0XHRcdGlmICggdGhpcy5hdHRhY2htZW50LmdldCggJ3VybCcgKSApIHtcblx0XHRcdFx0dGhpcy5kZmQgPSBqUXVlcnkuRGVmZXJyZWQoKTtcblx0XHRcdFx0dGhpcy5kZmQucmVzb2x2ZSgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5kZmQgPSB0aGlzLmF0dGFjaG1lbnQuZmV0Y2goKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuYmluZEF0dGFjaG1lbnRMaXN0ZW5lcnMoKTtcblx0XHR9XG5cblx0XHQvLyBrZWVwIHVybCBpbiBzeW5jIHdpdGggY2hhbmdlcyB0byB0aGUgdHlwZSBvZiBsaW5rXG5cdFx0dGhpcy5vbiggJ2NoYW5nZTpsaW5rJywgdGhpcy51cGRhdGVMaW5rVXJsLCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ2NoYW5nZTpzaXplJywgdGhpcy51cGRhdGVTaXplLCB0aGlzICk7XG5cblx0XHR0aGlzLnNldExpbmtUeXBlRnJvbVVybCgpO1xuXHRcdHRoaXMuc2V0QXNwZWN0UmF0aW8oKTtcblxuXHRcdHRoaXMuc2V0KCAnb3JpZ2luYWxVcmwnLCBhdHRyaWJ1dGVzLnVybCApO1xuXHR9LFxuXG5cdGJpbmRBdHRhY2htZW50TGlzdGVuZXJzOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLmF0dGFjaG1lbnQsICdzeW5jJywgdGhpcy5zZXRMaW5rVHlwZUZyb21VcmwgKTtcblx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLmF0dGFjaG1lbnQsICdzeW5jJywgdGhpcy5zZXRBc3BlY3RSYXRpbyApO1xuXHRcdHRoaXMubGlzdGVuVG8oIHRoaXMuYXR0YWNobWVudCwgJ2NoYW5nZScsIHRoaXMudXBkYXRlU2l6ZSApO1xuXHR9LFxuXG5cdGNoYW5nZUF0dGFjaG1lbnQ6IGZ1bmN0aW9uKCBhdHRhY2htZW50LCBwcm9wcyApIHtcblx0XHR0aGlzLnN0b3BMaXN0ZW5pbmcoIHRoaXMuYXR0YWNobWVudCApO1xuXHRcdHRoaXMuYXR0YWNobWVudCA9IGF0dGFjaG1lbnQ7XG5cdFx0dGhpcy5iaW5kQXR0YWNobWVudExpc3RlbmVycygpO1xuXG5cdFx0dGhpcy5zZXQoICdhdHRhY2htZW50X2lkJywgdGhpcy5hdHRhY2htZW50LmdldCggJ2lkJyApICk7XG5cdFx0dGhpcy5zZXQoICdjYXB0aW9uJywgdGhpcy5hdHRhY2htZW50LmdldCggJ2NhcHRpb24nICkgKTtcblx0XHR0aGlzLnNldCggJ2FsdCcsIHRoaXMuYXR0YWNobWVudC5nZXQoICdhbHQnICkgKTtcblx0XHR0aGlzLnNldCggJ3NpemUnLCBwcm9wcy5nZXQoICdzaXplJyApICk7XG5cdFx0dGhpcy5zZXQoICdhbGlnbicsIHByb3BzLmdldCggJ2FsaWduJyApICk7XG5cdFx0dGhpcy5zZXQoICdsaW5rJywgcHJvcHMuZ2V0KCAnbGluaycgKSApO1xuXHRcdHRoaXMudXBkYXRlTGlua1VybCgpO1xuXHRcdHRoaXMudXBkYXRlU2l6ZSgpO1xuXHR9LFxuXG5cdHNldExpbmtUeXBlRnJvbVVybDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGxpbmtVcmwgPSB0aGlzLmdldCggJ2xpbmtVcmwnICksXG5cdFx0XHR0eXBlO1xuXG5cdFx0aWYgKCAhIGxpbmtVcmwgKSB7XG5cdFx0XHR0aGlzLnNldCggJ2xpbmsnLCAnbm9uZScgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBkZWZhdWx0IHRvIGN1c3RvbSBpZiB0aGVyZSBpcyBhIGxpbmtVcmxcblx0XHR0eXBlID0gJ2N1c3RvbSc7XG5cblx0XHRpZiAoIHRoaXMuYXR0YWNobWVudCApIHtcblx0XHRcdGlmICggdGhpcy5hdHRhY2htZW50LmdldCggJ3VybCcgKSA9PT0gbGlua1VybCApIHtcblx0XHRcdFx0dHlwZSA9ICdmaWxlJztcblx0XHRcdH0gZWxzZSBpZiAoIHRoaXMuYXR0YWNobWVudC5nZXQoICdsaW5rJyApID09PSBsaW5rVXJsICkge1xuXHRcdFx0XHR0eXBlID0gJ3Bvc3QnO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIHRoaXMuZ2V0KCAndXJsJyApID09PSBsaW5rVXJsICkge1xuXHRcdFx0XHR0eXBlID0gJ2ZpbGUnO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuc2V0KCAnbGluaycsIHR5cGUgKTtcblx0fSxcblxuXHR1cGRhdGVMaW5rVXJsOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbGluayA9IHRoaXMuZ2V0KCAnbGluaycgKSxcblx0XHRcdHVybDtcblxuXHRcdHN3aXRjaCggbGluayApIHtcblx0XHRcdGNhc2UgJ2ZpbGUnOlxuXHRcdFx0XHRpZiAoIHRoaXMuYXR0YWNobWVudCApIHtcblx0XHRcdFx0XHR1cmwgPSB0aGlzLmF0dGFjaG1lbnQuZ2V0KCAndXJsJyApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHVybCA9IHRoaXMuZ2V0KCAndXJsJyApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuc2V0KCAnbGlua1VybCcsIHVybCApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ3Bvc3QnOlxuXHRcdFx0XHR0aGlzLnNldCggJ2xpbmtVcmwnLCB0aGlzLmF0dGFjaG1lbnQuZ2V0KCAnbGluaycgKSApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ25vbmUnOlxuXHRcdFx0XHR0aGlzLnNldCggJ2xpbmtVcmwnLCAnJyApO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH0sXG5cblx0dXBkYXRlU2l6ZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHNpemU7XG5cblx0XHRpZiAoICEgdGhpcy5hdHRhY2htZW50ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5nZXQoICdzaXplJyApID09PSAnY3VzdG9tJyApIHtcblx0XHRcdHRoaXMuc2V0KCAnd2lkdGgnLCB0aGlzLmdldCggJ2N1c3RvbVdpZHRoJyApICk7XG5cdFx0XHR0aGlzLnNldCggJ2hlaWdodCcsIHRoaXMuZ2V0KCAnY3VzdG9tSGVpZ2h0JyApICk7XG5cdFx0XHR0aGlzLnNldCggJ3VybCcsIHRoaXMuZ2V0KCAnb3JpZ2luYWxVcmwnICkgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRzaXplID0gdGhpcy5hdHRhY2htZW50LmdldCggJ3NpemVzJyApWyB0aGlzLmdldCggJ3NpemUnICkgXTtcblxuXHRcdGlmICggISBzaXplICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuc2V0KCAndXJsJywgc2l6ZS51cmwgKTtcblx0XHR0aGlzLnNldCggJ3dpZHRoJywgc2l6ZS53aWR0aCApO1xuXHRcdHRoaXMuc2V0KCAnaGVpZ2h0Jywgc2l6ZS5oZWlnaHQgKTtcblx0fSxcblxuXHRzZXRBc3BlY3RSYXRpbzogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGZ1bGw7XG5cblx0XHRpZiAoIHRoaXMuYXR0YWNobWVudCAmJiB0aGlzLmF0dGFjaG1lbnQuZ2V0KCAnc2l6ZXMnICkgKSB7XG5cdFx0XHRmdWxsID0gdGhpcy5hdHRhY2htZW50LmdldCggJ3NpemVzJyApLmZ1bGw7XG5cblx0XHRcdGlmICggZnVsbCApIHtcblx0XHRcdFx0dGhpcy5zZXQoICdhc3BlY3RSYXRpbycsIGZ1bGwud2lkdGggLyBmdWxsLmhlaWdodCApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5zZXQoICdhc3BlY3RSYXRpbycsIHRoaXMuZ2V0KCAnY3VzdG9tV2lkdGgnICkgLyB0aGlzLmdldCggJ2N1c3RvbUhlaWdodCcgKSApO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBQb3N0SW1hZ2U7XG4iLCIvKipcbiAqIHdwLm1lZGlhLm1vZGVsLlF1ZXJ5XG4gKlxuICogQSBjb2xsZWN0aW9uIG9mIGF0dGFjaG1lbnRzIHRoYXQgbWF0Y2ggdGhlIHN1cHBsaWVkIHF1ZXJ5IGFyZ3VtZW50cy5cbiAqXG4gKiBOb3RlOiBEbyBOT1QgY2hhbmdlIHRoaXMuYXJncyBhZnRlciB0aGUgcXVlcnkgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuXG4gKiAgICAgICBUaGluZ3Mgd2lsbCBicmVhay5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c1xuICogQGF1Z21lbnRzIEJhY2tib25lLkNvbGxlY3Rpb25cbiAqXG4gKiBAcGFyYW0ge2FycmF5fSAgW21vZGVsc10gICAgICAgICAgICAgICAgICAgICAgTW9kZWxzIHRvIGluaXRpYWxpemUgd2l0aCB0aGUgY29sbGVjdGlvbi5cbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gICAgICAgICAgICAgICAgICAgICBPcHRpb25zIGhhc2guXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnMuYXJnc10gICAgICAgICAgICAgICAgQXR0YWNobWVudHMgcXVlcnkgYXJndW1lbnRzLlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zLmFyZ3MucG9zdHNfcGVyX3BhZ2VdXG4gKi9cbnZhciBBdHRhY2htZW50cyA9IHdwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzLFxuXHRRdWVyeTtcblxuUXVlcnkgPSBBdHRhY2htZW50cy5leHRlbmQoe1xuXHQvKipcblx0ICogQGdsb2JhbCB3cC5VcGxvYWRlclxuXHQgKlxuXHQgKiBAcGFyYW0ge2FycmF5fSAgW21vZGVscz1bXV0gIEFycmF5IG9mIGluaXRpYWwgbW9kZWxzIHRvIHBvcHVsYXRlIHRoZSBjb2xsZWN0aW9uLlxuXHQgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dXG5cdCAqL1xuXHRpbml0aWFsaXplOiBmdW5jdGlvbiggbW9kZWxzLCBvcHRpb25zICkge1xuXHRcdHZhciBhbGxvd2VkO1xuXG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cdFx0QXR0YWNobWVudHMucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXG5cdFx0dGhpcy5hcmdzICAgICA9IG9wdGlvbnMuYXJncztcblx0XHR0aGlzLl9oYXNNb3JlID0gdHJ1ZTtcblx0XHR0aGlzLmNyZWF0ZWQgID0gbmV3IERhdGUoKTtcblxuXHRcdHRoaXMuZmlsdGVycy5vcmRlciA9IGZ1bmN0aW9uKCBhdHRhY2htZW50ICkge1xuXHRcdFx0dmFyIG9yZGVyYnkgPSB0aGlzLnByb3BzLmdldCgnb3JkZXJieScpLFxuXHRcdFx0XHRvcmRlciA9IHRoaXMucHJvcHMuZ2V0KCdvcmRlcicpO1xuXG5cdFx0XHRpZiAoICEgdGhpcy5jb21wYXJhdG9yICkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gV2Ugd2FudCBhbnkgaXRlbXMgdGhhdCBjYW4gYmUgcGxhY2VkIGJlZm9yZSB0aGUgbGFzdFxuXHRcdFx0Ly8gaXRlbSBpbiB0aGUgc2V0LiBJZiB3ZSBhZGQgYW55IGl0ZW1zIGFmdGVyIHRoZSBsYXN0XG5cdFx0XHQvLyBpdGVtLCB0aGVuIHdlIGNhbid0IGd1YXJhbnRlZSB0aGUgc2V0IGlzIGNvbXBsZXRlLlxuXHRcdFx0aWYgKCB0aGlzLmxlbmd0aCApIHtcblx0XHRcdFx0cmV0dXJuIDEgIT09IHRoaXMuY29tcGFyYXRvciggYXR0YWNobWVudCwgdGhpcy5sYXN0KCksIHsgdGllczogdHJ1ZSB9KTtcblxuXHRcdFx0Ly8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGFyZSBubyBpdGVtcyB5ZXQgYW5kXG5cdFx0XHQvLyB3ZSdyZSBzb3J0aW5nIGZvciByZWNlbnQgaXRlbXMuIEluIHRoYXQgY2FzZSwgd2Ugd2FudFxuXHRcdFx0Ly8gY2hhbmdlcyB0aGF0IG9jY3VycmVkIGFmdGVyIHdlIGNyZWF0ZWQgdGhlIHF1ZXJ5LlxuXHRcdFx0fSBlbHNlIGlmICggJ0RFU0MnID09PSBvcmRlciAmJiAoICdkYXRlJyA9PT0gb3JkZXJieSB8fCAnbW9kaWZpZWQnID09PSBvcmRlcmJ5ICkgKSB7XG5cdFx0XHRcdHJldHVybiBhdHRhY2htZW50LmdldCggb3JkZXJieSApID49IHRoaXMuY3JlYXRlZDtcblxuXHRcdFx0Ly8gSWYgd2UncmUgc29ydGluZyBieSBtZW51IG9yZGVyIGFuZCB3ZSBoYXZlIG5vIGl0ZW1zLFxuXHRcdFx0Ly8gYWNjZXB0IGFueSBpdGVtcyB0aGF0IGhhdmUgdGhlIGRlZmF1bHQgbWVudSBvcmRlciAoMCkuXG5cdFx0XHR9IGVsc2UgaWYgKCAnQVNDJyA9PT0gb3JkZXIgJiYgJ21lbnVPcmRlcicgPT09IG9yZGVyYnkgKSB7XG5cdFx0XHRcdHJldHVybiBhdHRhY2htZW50LmdldCggb3JkZXJieSApID09PSAwO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdGhlcndpc2UsIHdlIGRvbid0IHdhbnQgYW55IGl0ZW1zIHlldC5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdFx0Ly8gT2JzZXJ2ZSB0aGUgY2VudHJhbCBgd3AuVXBsb2FkZXIucXVldWVgIGNvbGxlY3Rpb24gdG8gd2F0Y2ggZm9yXG5cdFx0Ly8gbmV3IG1hdGNoZXMgZm9yIHRoZSBxdWVyeS5cblx0XHQvL1xuXHRcdC8vIE9ubHkgb2JzZXJ2ZSB3aGVuIGEgbGltaXRlZCBudW1iZXIgb2YgcXVlcnkgYXJncyBhcmUgc2V0LiBUaGVyZVxuXHRcdC8vIGFyZSBubyBmaWx0ZXJzIGZvciBvdGhlciBwcm9wZXJ0aWVzLCBzbyBvYnNlcnZpbmcgd2lsbCByZXN1bHQgaW5cblx0XHQvLyBmYWxzZSBwb3NpdGl2ZXMgaW4gdGhvc2UgcXVlcmllcy5cblx0XHRhbGxvd2VkID0gWyAncycsICdvcmRlcicsICdvcmRlcmJ5JywgJ3Bvc3RzX3Blcl9wYWdlJywgJ3Bvc3RfbWltZV90eXBlJywgJ3Bvc3RfcGFyZW50JyBdO1xuXHRcdGlmICggd3AuVXBsb2FkZXIgJiYgXyggdGhpcy5hcmdzICkuY2hhaW4oKS5rZXlzKCkuZGlmZmVyZW5jZSggYWxsb3dlZCApLmlzRW1wdHkoKS52YWx1ZSgpICkge1xuXHRcdFx0dGhpcy5vYnNlcnZlKCB3cC5VcGxvYWRlci5xdWV1ZSApO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIFdoZXRoZXIgdGhlcmUgYXJlIG1vcmUgYXR0YWNobWVudHMgdGhhdCBoYXZlbid0IGJlZW4gc3luYydkIGZyb20gdGhlIHNlcnZlclxuXHQgKiB0aGF0IG1hdGNoIHRoZSBjb2xsZWN0aW9uJ3MgcXVlcnkuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aGFzTW9yZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2hhc01vcmU7XG5cdH0sXG5cdC8qKlxuXHQgKiBGZXRjaCBtb3JlIGF0dGFjaG1lbnRzIGZyb20gdGhlIHNlcnZlciBmb3IgdGhlIGNvbGxlY3Rpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSAgIHtvYmplY3R9ICBbb3B0aW9ucz17fV1cblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqL1xuXHRtb3JlOiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0XHR2YXIgcXVlcnkgPSB0aGlzO1xuXG5cdFx0Ly8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHJlcXVlc3QgcGVuZGluZywgcmV0dXJuIGVhcmx5IHdpdGggdGhlIERlZmVycmVkIG9iamVjdC5cblx0XHRpZiAoIHRoaXMuX21vcmUgJiYgJ3BlbmRpbmcnID09PSB0aGlzLl9tb3JlLnN0YXRlKCkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fbW9yZTtcblx0XHR9XG5cblx0XHRpZiAoICEgdGhpcy5oYXNNb3JlKCkgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCkucmVzb2x2ZVdpdGgoIHRoaXMgKS5wcm9taXNlKCk7XG5cdFx0fVxuXG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cdFx0b3B0aW9ucy5yZW1vdmUgPSBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLl9tb3JlID0gdGhpcy5mZXRjaCggb3B0aW9ucyApLmRvbmUoIGZ1bmN0aW9uKCByZXNwICkge1xuXHRcdFx0aWYgKCBfLmlzRW1wdHkoIHJlc3AgKSB8fCAtMSA9PT0gdGhpcy5hcmdzLnBvc3RzX3Blcl9wYWdlIHx8IHJlc3AubGVuZ3RoIDwgdGhpcy5hcmdzLnBvc3RzX3Blcl9wYWdlICkge1xuXHRcdFx0XHRxdWVyeS5faGFzTW9yZSA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXHQvKipcblx0ICogT3ZlcnJpZGVzIEJhY2tib25lLkNvbGxlY3Rpb24uc3luY1xuXHQgKiBPdmVycmlkZXMgd3AubWVkaWEubW9kZWwuQXR0YWNobWVudHMuc3luY1xuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gbWV0aG9kXG5cdCAqIEBwYXJhbSB7QmFja2JvbmUuTW9kZWx9IG1vZGVsXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV1cblx0ICogQHJldHVybnMge1Byb21pc2V9XG5cdCAqL1xuXHRzeW5jOiBmdW5jdGlvbiggbWV0aG9kLCBtb2RlbCwgb3B0aW9ucyApIHtcblx0XHR2YXIgYXJncywgZmFsbGJhY2s7XG5cblx0XHQvLyBPdmVybG9hZCB0aGUgcmVhZCBtZXRob2Qgc28gQXR0YWNobWVudC5mZXRjaCgpIGZ1bmN0aW9ucyBjb3JyZWN0bHkuXG5cdFx0aWYgKCAncmVhZCcgPT09IG1ldGhvZCApIHtcblx0XHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXHRcdFx0b3B0aW9ucy5jb250ZXh0ID0gdGhpcztcblx0XHRcdG9wdGlvbnMuZGF0YSA9IF8uZXh0ZW5kKCBvcHRpb25zLmRhdGEgfHwge30sIHtcblx0XHRcdFx0YWN0aW9uOiAgJ3F1ZXJ5LWF0dGFjaG1lbnRzJyxcblx0XHRcdFx0cG9zdF9pZDogd3AubWVkaWEubW9kZWwuc2V0dGluZ3MucG9zdC5pZFxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIENsb25lIHRoZSBhcmdzIHNvIG1hbmlwdWxhdGlvbiBpcyBub24tZGVzdHJ1Y3RpdmUuXG5cdFx0XHRhcmdzID0gXy5jbG9uZSggdGhpcy5hcmdzICk7XG5cblx0XHRcdC8vIERldGVybWluZSB3aGljaCBwYWdlIHRvIHF1ZXJ5LlxuXHRcdFx0aWYgKCAtMSAhPT0gYXJncy5wb3N0c19wZXJfcGFnZSApIHtcblx0XHRcdFx0YXJncy5wYWdlZCA9IE1hdGgucm91bmQoIHRoaXMubGVuZ3RoIC8gYXJncy5wb3N0c19wZXJfcGFnZSApICsgMTtcblx0XHRcdH1cblxuXHRcdFx0b3B0aW9ucy5kYXRhLnF1ZXJ5ID0gYXJncztcblx0XHRcdHJldHVybiB3cC5tZWRpYS5hamF4KCBvcHRpb25zICk7XG5cblx0XHQvLyBPdGhlcndpc2UsIGZhbGwgYmFjayB0byBCYWNrYm9uZS5zeW5jKClcblx0XHR9IGVsc2Uge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBDYWxsIHdwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzLnN5bmMgb3IgQmFja2JvbmUuc3luY1xuXHRcdFx0ICovXG5cdFx0XHRmYWxsYmFjayA9IEF0dGFjaG1lbnRzLnByb3RvdHlwZS5zeW5jID8gQXR0YWNobWVudHMucHJvdG90eXBlIDogQmFja2JvbmU7XG5cdFx0XHRyZXR1cm4gZmFsbGJhY2suc3luYy5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fVxuXHR9XG59LCB7XG5cdC8qKlxuXHQgKiBAcmVhZG9ubHlcblx0ICovXG5cdGRlZmF1bHRQcm9wczoge1xuXHRcdG9yZGVyYnk6ICdkYXRlJyxcblx0XHRvcmRlcjogICAnREVTQydcblx0fSxcblx0LyoqXG5cdCAqIEByZWFkb25seVxuXHQgKi9cblx0ZGVmYXVsdEFyZ3M6IHtcblx0XHRwb3N0c19wZXJfcGFnZTogNDBcblx0fSxcblx0LyoqXG5cdCAqIEByZWFkb25seVxuXHQgKi9cblx0b3JkZXJieToge1xuXHRcdGFsbG93ZWQ6ICBbICduYW1lJywgJ2F1dGhvcicsICdkYXRlJywgJ3RpdGxlJywgJ21vZGlmaWVkJywgJ3VwbG9hZGVkVG8nLCAnaWQnLCAncG9zdF9faW4nLCAnbWVudU9yZGVyJyBdLFxuXHRcdC8qKlxuXHRcdCAqIEEgbWFwIG9mIEphdmFTY3JpcHQgb3JkZXJieSB2YWx1ZXMgdG8gdGhlaXIgV1BfUXVlcnkgZXF1aXZhbGVudHMuXG5cdFx0ICogQHR5cGUge09iamVjdH1cblx0XHQgKi9cblx0XHR2YWx1ZW1hcDoge1xuXHRcdFx0J2lkJzogICAgICAgICAnSUQnLFxuXHRcdFx0J3VwbG9hZGVkVG8nOiAncGFyZW50Jyxcblx0XHRcdCdtZW51T3JkZXInOiAgJ21lbnVfb3JkZXIgSUQnXG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogQSBtYXAgb2YgSmF2YVNjcmlwdCBxdWVyeSBwcm9wZXJ0aWVzIHRvIHRoZWlyIFdQX1F1ZXJ5IGVxdWl2YWxlbnRzLlxuXHQgKlxuXHQgKiBAcmVhZG9ubHlcblx0ICovXG5cdHByb3BtYXA6IHtcblx0XHQnc2VhcmNoJzogICAgJ3MnLFxuXHRcdCd0eXBlJzogICAgICAncG9zdF9taW1lX3R5cGUnLFxuXHRcdCdwZXJQYWdlJzogICAncG9zdHNfcGVyX3BhZ2UnLFxuXHRcdCdtZW51T3JkZXInOiAnbWVudV9vcmRlcicsXG5cdFx0J3VwbG9hZGVkVG8nOiAncG9zdF9wYXJlbnQnLFxuXHRcdCdzdGF0dXMnOiAgICAgJ3Bvc3Rfc3RhdHVzJyxcblx0XHQnaW5jbHVkZSc6ICAgICdwb3N0X19pbicsXG5cdFx0J2V4Y2x1ZGUnOiAgICAncG9zdF9fbm90X2luJ1xuXHR9LFxuXHQvKipcblx0ICogQ3JlYXRlcyBhbmQgcmV0dXJucyBhbiBBdHRhY2htZW50cyBRdWVyeSBjb2xsZWN0aW9uIGdpdmVuIHRoZSBwcm9wZXJ0aWVzLlxuXHQgKlxuXHQgKiBDYWNoZXMgcXVlcnkgb2JqZWN0cyBhbmQgcmV1c2VzIHdoZXJlIHBvc3NpYmxlLlxuXHQgKlxuXHQgKiBAc3RhdGljXG5cdCAqIEBtZXRob2Rcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IFtwcm9wc11cblx0ICogQHBhcmFtIHtPYmplY3R9IFtwcm9wcy5jYWNoZT10cnVlXSAgIFdoZXRoZXIgdG8gdXNlIHRoZSBxdWVyeSBjYWNoZSBvciBub3QuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcHMub3JkZXJdXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcHMub3JkZXJieV1cblx0ICogQHBhcmFtIHtPYmplY3R9IFtwcm9wcy5pbmNsdWRlXVxuXHQgKiBAcGFyYW0ge09iamVjdH0gW3Byb3BzLmV4Y2x1ZGVdXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcHMuc11cblx0ICogQHBhcmFtIHtPYmplY3R9IFtwcm9wcy5wb3N0X21pbWVfdHlwZV1cblx0ICogQHBhcmFtIHtPYmplY3R9IFtwcm9wcy5wb3N0c19wZXJfcGFnZV1cblx0ICogQHBhcmFtIHtPYmplY3R9IFtwcm9wcy5tZW51X29yZGVyXVxuXHQgKiBAcGFyYW0ge09iamVjdH0gW3Byb3BzLnBvc3RfcGFyZW50XVxuXHQgKiBAcGFyYW0ge09iamVjdH0gW3Byb3BzLnBvc3Rfc3RhdHVzXVxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG5cdCAqXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS5tb2RlbC5RdWVyeX0gQSBuZXcgQXR0YWNobWVudHMgUXVlcnkgY29sbGVjdGlvbi5cblx0ICovXG5cdGdldDogKGZ1bmN0aW9uKCl7XG5cdFx0LyoqXG5cdFx0ICogQHN0YXRpY1xuXHRcdCAqIEB0eXBlIEFycmF5XG5cdFx0ICovXG5cdFx0dmFyIHF1ZXJpZXMgPSBbXTtcblxuXHRcdC8qKlxuXHRcdCAqIEByZXR1cm5zIHtRdWVyeX1cblx0XHQgKi9cblx0XHRyZXR1cm4gZnVuY3Rpb24oIHByb3BzLCBvcHRpb25zICkge1xuXHRcdFx0dmFyIGFyZ3MgICAgID0ge30sXG5cdFx0XHRcdG9yZGVyYnkgID0gUXVlcnkub3JkZXJieSxcblx0XHRcdFx0ZGVmYXVsdHMgPSBRdWVyeS5kZWZhdWx0UHJvcHMsXG5cdFx0XHRcdHF1ZXJ5LFxuXHRcdFx0XHRjYWNoZSAgICA9ICEhIHByb3BzLmNhY2hlIHx8IF8uaXNVbmRlZmluZWQoIHByb3BzLmNhY2hlICk7XG5cblx0XHRcdC8vIFJlbW92ZSB0aGUgYHF1ZXJ5YCBwcm9wZXJ0eS4gVGhpcyBpc24ndCBsaW5rZWQgdG8gYSBxdWVyeSxcblx0XHRcdC8vIHRoaXMgKmlzKiB0aGUgcXVlcnkuXG5cdFx0XHRkZWxldGUgcHJvcHMucXVlcnk7XG5cdFx0XHRkZWxldGUgcHJvcHMuY2FjaGU7XG5cblx0XHRcdC8vIEZpbGwgZGVmYXVsdCBhcmdzLlxuXHRcdFx0Xy5kZWZhdWx0cyggcHJvcHMsIGRlZmF1bHRzICk7XG5cblx0XHRcdC8vIE5vcm1hbGl6ZSB0aGUgb3JkZXIuXG5cdFx0XHRwcm9wcy5vcmRlciA9IHByb3BzLm9yZGVyLnRvVXBwZXJDYXNlKCk7XG5cdFx0XHRpZiAoICdERVNDJyAhPT0gcHJvcHMub3JkZXIgJiYgJ0FTQycgIT09IHByb3BzLm9yZGVyICkge1xuXHRcdFx0XHRwcm9wcy5vcmRlciA9IGRlZmF1bHRzLm9yZGVyLnRvVXBwZXJDYXNlKCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgb3JkZXJieSB2YWx1ZS5cblx0XHRcdGlmICggISBfLmNvbnRhaW5zKCBvcmRlcmJ5LmFsbG93ZWQsIHByb3BzLm9yZGVyYnkgKSApIHtcblx0XHRcdFx0cHJvcHMub3JkZXJieSA9IGRlZmF1bHRzLm9yZGVyYnk7XG5cdFx0XHR9XG5cblx0XHRcdF8uZWFjaCggWyAnaW5jbHVkZScsICdleGNsdWRlJyBdLCBmdW5jdGlvbiggcHJvcCApIHtcblx0XHRcdFx0aWYgKCBwcm9wc1sgcHJvcCBdICYmICEgXy5pc0FycmF5KCBwcm9wc1sgcHJvcCBdICkgKSB7XG5cdFx0XHRcdFx0cHJvcHNbIHByb3AgXSA9IFsgcHJvcHNbIHByb3AgXSBdO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cblx0XHRcdC8vIEdlbmVyYXRlIHRoZSBxdWVyeSBgYXJnc2Agb2JqZWN0LlxuXHRcdFx0Ly8gQ29ycmVjdCBhbnkgZGlmZmVyaW5nIHByb3BlcnR5IG5hbWVzLlxuXHRcdFx0Xy5lYWNoKCBwcm9wcywgZnVuY3Rpb24oIHZhbHVlLCBwcm9wICkge1xuXHRcdFx0XHRpZiAoIF8uaXNOdWxsKCB2YWx1ZSApICkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGFyZ3NbIFF1ZXJ5LnByb3BtYXBbIHByb3AgXSB8fCBwcm9wIF0gPSB2YWx1ZTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBGaWxsIGFueSBvdGhlciBkZWZhdWx0IHF1ZXJ5IGFyZ3MuXG5cdFx0XHRfLmRlZmF1bHRzKCBhcmdzLCBRdWVyeS5kZWZhdWx0QXJncyApO1xuXG5cdFx0XHQvLyBgcHJvcHMub3JkZXJieWAgZG9lcyBub3QgYWx3YXlzIG1hcCBkaXJlY3RseSB0byBgYXJncy5vcmRlcmJ5YC5cblx0XHRcdC8vIFN1YnN0aXR1dGUgZXhjZXB0aW9ucyBzcGVjaWZpZWQgaW4gb3JkZXJieS5rZXltYXAuXG5cdFx0XHRhcmdzLm9yZGVyYnkgPSBvcmRlcmJ5LnZhbHVlbWFwWyBwcm9wcy5vcmRlcmJ5IF0gfHwgcHJvcHMub3JkZXJieTtcblxuXHRcdFx0Ly8gU2VhcmNoIHRoZSBxdWVyeSBjYWNoZSBmb3IgYSBtYXRjaGluZyBxdWVyeS5cblx0XHRcdGlmICggY2FjaGUgKSB7XG5cdFx0XHRcdHF1ZXJ5ID0gXy5maW5kKCBxdWVyaWVzLCBmdW5jdGlvbiggcXVlcnkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIF8uaXNFcXVhbCggcXVlcnkuYXJncywgYXJncyApO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHF1ZXJpZXMgPSBbXTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3RoZXJ3aXNlLCBjcmVhdGUgYSBuZXcgcXVlcnkgYW5kIGFkZCBpdCB0byB0aGUgY2FjaGUuXG5cdFx0XHRpZiAoICEgcXVlcnkgKSB7XG5cdFx0XHRcdHF1ZXJ5ID0gbmV3IFF1ZXJ5KCBbXSwgXy5leHRlbmQoIG9wdGlvbnMgfHwge30sIHtcblx0XHRcdFx0XHRwcm9wczogcHJvcHMsXG5cdFx0XHRcdFx0YXJnczogIGFyZ3Ncblx0XHRcdFx0fSApICk7XG5cdFx0XHRcdHF1ZXJpZXMucHVzaCggcXVlcnkgKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHF1ZXJ5O1xuXHRcdH07XG5cdH0oKSlcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1ZXJ5O1xuIiwiLyoqXG4gKiB3cC5tZWRpYS5tb2RlbC5TZWxlY3Rpb25cbiAqXG4gKiBBIHNlbGVjdGlvbiBvZiBhdHRhY2htZW50cy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c1xuICogQGF1Z21lbnRzIEJhY2tib25lLkNvbGxlY3Rpb25cbiAqL1xudmFyIEF0dGFjaG1lbnRzID0gd3AubWVkaWEubW9kZWwuQXR0YWNobWVudHMsXG5cdFNlbGVjdGlvbjtcblxuU2VsZWN0aW9uID0gQXR0YWNobWVudHMuZXh0ZW5kKHtcblx0LyoqXG5cdCAqIFJlZnJlc2ggdGhlIGBzaW5nbGVgIG1vZGVsIHdoZW5ldmVyIHRoZSBzZWxlY3Rpb24gY2hhbmdlcy5cblx0ICogQmluZHMgYHNpbmdsZWAgaW5zdGVhZCBvZiB1c2luZyB0aGUgY29udGV4dCBhcmd1bWVudCB0byBlbnN1cmVcblx0ICogaXQgcmVjZWl2ZXMgbm8gcGFyYW1ldGVycy5cblx0ICpcblx0ICogQHBhcmFtIHtBcnJheX0gW21vZGVscz1bXV0gQXJyYXkgb2YgbW9kZWxzIHVzZWQgdG8gcG9wdWxhdGUgdGhlIGNvbGxlY3Rpb24uXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV1cblx0ICovXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCBtb2RlbHMsIG9wdGlvbnMgKSB7XG5cdFx0LyoqXG5cdFx0ICogY2FsbCAnaW5pdGlhbGl6ZScgZGlyZWN0bHkgb24gdGhlIHBhcmVudCBjbGFzc1xuXHRcdCAqL1xuXHRcdEF0dGFjaG1lbnRzLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR0aGlzLm11bHRpcGxlID0gb3B0aW9ucyAmJiBvcHRpb25zLm11bHRpcGxlO1xuXG5cdFx0dGhpcy5vbiggJ2FkZCByZW1vdmUgcmVzZXQnLCBfLmJpbmQoIHRoaXMuc2luZ2xlLCB0aGlzLCBmYWxzZSApICk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIElmIHRoZSB3b3JrZmxvdyBkb2VzIG5vdCBzdXBwb3J0IG11bHRpLXNlbGVjdCwgY2xlYXIgb3V0IHRoZSBzZWxlY3Rpb25cblx0ICogYmVmb3JlIGFkZGluZyBhIG5ldyBhdHRhY2htZW50IHRvIGl0LlxuXHQgKlxuXHQgKiBAcGFyYW0ge0FycmF5fSBtb2RlbHNcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICogQHJldHVybnMge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRbXX1cblx0ICovXG5cdGFkZDogZnVuY3Rpb24oIG1vZGVscywgb3B0aW9ucyApIHtcblx0XHRpZiAoICEgdGhpcy5tdWx0aXBsZSApIHtcblx0XHRcdHRoaXMucmVtb3ZlKCB0aGlzLm1vZGVscyApO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBjYWxsICdhZGQnIGRpcmVjdGx5IG9uIHRoZSBwYXJlbnQgY2xhc3Ncblx0XHQgKi9cblx0XHRyZXR1cm4gQXR0YWNobWVudHMucHJvdG90eXBlLmFkZC5jYWxsKCB0aGlzLCBtb2RlbHMsIG9wdGlvbnMgKTtcblx0fSxcblxuXHQvKipcblx0ICogRmlyZWQgd2hlbiB0b2dnbGluZyAoY2xpY2tpbmcgb24pIGFuIGF0dGFjaG1lbnQgaW4gdGhlIG1vZGFsLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3VuZGVmaW5lZHxib29sZWFufHdwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnR9IG1vZGVsXG5cdCAqXG5cdCAqIEBmaXJlcyB3cC5tZWRpYS5tb2RlbC5TZWxlY3Rpb24jc2VsZWN0aW9uOnNpbmdsZVxuXHQgKiBAZmlyZXMgd3AubWVkaWEubW9kZWwuU2VsZWN0aW9uI3NlbGVjdGlvbjp1bnNpbmdsZVxuXHQgKlxuXHQgKiBAcmV0dXJucyB7QmFja2JvbmUuTW9kZWx9XG5cdCAqL1xuXHRzaW5nbGU6IGZ1bmN0aW9uKCBtb2RlbCApIHtcblx0XHR2YXIgcHJldmlvdXMgPSB0aGlzLl9zaW5nbGU7XG5cblx0XHQvLyBJZiBhIGBtb2RlbGAgaXMgcHJvdmlkZWQsIHVzZSBpdCBhcyB0aGUgc2luZ2xlIG1vZGVsLlxuXHRcdGlmICggbW9kZWwgKSB7XG5cdFx0XHR0aGlzLl9zaW5nbGUgPSBtb2RlbDtcblx0XHR9XG5cdFx0Ly8gSWYgdGhlIHNpbmdsZSBtb2RlbCBpc24ndCBpbiB0aGUgc2VsZWN0aW9uLCByZW1vdmUgaXQuXG5cdFx0aWYgKCB0aGlzLl9zaW5nbGUgJiYgISB0aGlzLmdldCggdGhpcy5fc2luZ2xlLmNpZCApICkge1xuXHRcdFx0ZGVsZXRlIHRoaXMuX3NpbmdsZTtcblx0XHR9XG5cblx0XHR0aGlzLl9zaW5nbGUgPSB0aGlzLl9zaW5nbGUgfHwgdGhpcy5sYXN0KCk7XG5cblx0XHQvLyBJZiBzaW5nbGUgaGFzIGNoYW5nZWQsIGZpcmUgYW4gZXZlbnQuXG5cdFx0aWYgKCB0aGlzLl9zaW5nbGUgIT09IHByZXZpb3VzICkge1xuXHRcdFx0aWYgKCBwcmV2aW91cyApIHtcblx0XHRcdFx0cHJldmlvdXMudHJpZ2dlciggJ3NlbGVjdGlvbjp1bnNpbmdsZScsIHByZXZpb3VzLCB0aGlzICk7XG5cblx0XHRcdFx0Ly8gSWYgdGhlIG1vZGVsIHdhcyBhbHJlYWR5IHJlbW92ZWQsIHRyaWdnZXIgdGhlIGNvbGxlY3Rpb25cblx0XHRcdFx0Ly8gZXZlbnQgbWFudWFsbHkuXG5cdFx0XHRcdGlmICggISB0aGlzLmdldCggcHJldmlvdXMuY2lkICkgKSB7XG5cdFx0XHRcdFx0dGhpcy50cmlnZ2VyKCAnc2VsZWN0aW9uOnVuc2luZ2xlJywgcHJldmlvdXMsIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKCB0aGlzLl9zaW5nbGUgKSB7XG5cdFx0XHRcdHRoaXMuX3NpbmdsZS50cmlnZ2VyKCAnc2VsZWN0aW9uOnNpbmdsZScsIHRoaXMuX3NpbmdsZSwgdGhpcyApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJldHVybiB0aGUgc2luZ2xlIG1vZGVsLCBvciB0aGUgbGFzdCBtb2RlbCBhcyBhIGZhbGxiYWNrLlxuXHRcdHJldHVybiB0aGlzLl9zaW5nbGU7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNlbGVjdGlvbjtcbiJdfQ==
  • src/wp-includes/js/media-views.js

    diff --git src/wp-includes/js/media-views.js src/wp-includes/js/media-views.js
    index 9e08201..85f9063 100644
    var View = wp.Backbone.View.extend({ 
    85118511
    85128512module.exports = View;
    85138513
    8514 },{}]},{},[19]);
     8514},{}]},{},[19])
     8515//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9ncnVudC1icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvY29udHJvbGxlcnMvY29sbGVjdGlvbi1hZGQuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvY29udHJvbGxlcnMvY29sbGVjdGlvbi1lZGl0LmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL2NvbnRyb2xsZXJzL2Nyb3BwZXIuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvY29udHJvbGxlcnMvY3VzdG9taXplLWltYWdlLWNyb3BwZXIuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvY29udHJvbGxlcnMvZWRpdC1pbWFnZS5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS9jb250cm9sbGVycy9lbWJlZC5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS9jb250cm9sbGVycy9mZWF0dXJlZC1pbWFnZS5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS9jb250cm9sbGVycy9nYWxsZXJ5LWFkZC5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS9jb250cm9sbGVycy9nYWxsZXJ5LWVkaXQuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvY29udHJvbGxlcnMvaW1hZ2UtZGV0YWlscy5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS9jb250cm9sbGVycy9saWJyYXJ5LmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL2NvbnRyb2xsZXJzL21lZGlhLWxpYnJhcnkuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvY29udHJvbGxlcnMvcmVnaW9uLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL2NvbnRyb2xsZXJzL3JlcGxhY2UtaW1hZ2UuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvY29udHJvbGxlcnMvc2l0ZS1pY29uLWNyb3BwZXIuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvY29udHJvbGxlcnMvc3RhdGUtbWFjaGluZS5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS9jb250cm9sbGVycy9zdGF0ZS5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS91dGlscy9zZWxlY3Rpb24tc3luYy5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy5tYW5pZmVzdC5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9hdHRhY2htZW50LWNvbXBhdC5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9hdHRhY2htZW50LWZpbHRlcnMuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvYXR0YWNobWVudC1maWx0ZXJzL2FsbC5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9hdHRhY2htZW50LWZpbHRlcnMvZGF0ZS5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9hdHRhY2htZW50LWZpbHRlcnMvdXBsb2FkZWQuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvYXR0YWNobWVudC5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9hdHRhY2htZW50L2RldGFpbHMuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvYXR0YWNobWVudC9lZGl0LWxpYnJhcnkuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvYXR0YWNobWVudC9lZGl0LXNlbGVjdGlvbi5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9hdHRhY2htZW50L2xpYnJhcnkuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvYXR0YWNobWVudC9zZWxlY3Rpb24uanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvYXR0YWNobWVudHMuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvYXR0YWNobWVudHMvYnJvd3Nlci5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9hdHRhY2htZW50cy9zZWxlY3Rpb24uanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvYnV0dG9uLWdyb3VwLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL2J1dHRvbi5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9jcm9wcGVyLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL2VkaXQtaW1hZ2UuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvZW1iZWQuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvZW1iZWQvaW1hZ2UuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvZW1iZWQvbGluay5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9lbWJlZC91cmwuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvZm9jdXMtbWFuYWdlci5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9mcmFtZS5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9mcmFtZS9pbWFnZS1kZXRhaWxzLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL2ZyYW1lL3Bvc3QuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvZnJhbWUvc2VsZWN0LmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL2lmcmFtZS5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9pbWFnZS1kZXRhaWxzLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL2xhYmVsLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL21lZGlhLWZyYW1lLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL21lbnUtaXRlbS5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9tZW51LmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL21vZGFsLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL3ByaW9yaXR5LWxpc3QuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3Mvcm91dGVyLWl0ZW0uanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3Mvcm91dGVyLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL3NlYXJjaC5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9zZWxlY3Rpb24uanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3Mvc2V0dGluZ3MuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3Mvc2V0dGluZ3MvYXR0YWNobWVudC1kaXNwbGF5LmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL3NldHRpbmdzL2dhbGxlcnkuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3Mvc2V0dGluZ3MvcGxheWxpc3QuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3Mvc2lkZWJhci5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9zaXRlLWljb24tY3JvcHBlci5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9zaXRlLWljb24tcHJldmlldy5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy9zcGlubmVyLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL3Rvb2xiYXIuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvdG9vbGJhci9lbWJlZC5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy90b29sYmFyL3NlbGVjdC5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy91cGxvYWRlci9lZGl0b3IuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvdXBsb2FkZXIvaW5saW5lLmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL3VwbG9hZGVyL3N0YXR1cy1lcnJvci5qcyIsInNyYy93cC1pbmNsdWRlcy9qcy9tZWRpYS92aWV3cy91cGxvYWRlci9zdGF0dXMuanMiLCJzcmMvd3AtaW5jbHVkZXMvanMvbWVkaWEvdmlld3MvdXBsb2FkZXIvd2luZG93LmpzIiwic3JjL3dwLWluY2x1ZGVzL2pzL21lZGlhL3ZpZXdzL3ZpZXcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25TQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL09BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNySkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hpQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9LQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzd0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9OQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiLyoqXG4gKiB3cC5tZWRpYS5jb250cm9sbGVyLkNvbGxlY3Rpb25BZGRcbiAqXG4gKiBBIHN0YXRlIGZvciBhZGRpbmcgYXR0YWNobWVudHMgdG8gYSBjb2xsZWN0aW9uIChlLmcuIHZpZGVvIHBsYXlsaXN0KS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5jb250cm9sbGVyLkxpYnJhcnlcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlXG4gKiBAYXVnbWVudHMgQmFja2JvbmUuTW9kZWxcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlc10gICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGF0dHJpYnV0ZXMgaGFzaCBwYXNzZWQgdG8gdGhlIHN0YXRlLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuaWQ9bGlicmFyeV0gICAgICBVbmlxdWUgaWRlbnRpZmllci5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMudGl0bGUgICAgICAgICAgICAgICAgICAgIFRpdGxlIGZvciB0aGUgc3RhdGUuIERpc3BsYXlzIGluIHRoZSBmcmFtZSdzIHRpdGxlIHJlZ2lvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLm11bHRpcGxlPWFkZF0gICAgICAgICAgICBXaGV0aGVyIG11bHRpLXNlbGVjdCBpcyBlbmFibGVkLiBAdG9kbyAnYWRkJyBkb2Vzbid0IHNlZW0gZG8gYW55dGhpbmcgc3BlY2lhbCwgYW5kIGdldHMgdXNlZCBhcyBhIGJvb2xlYW4uXG4gKiBAcGFyYW0ge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzfSBbYXR0cmlidXRlcy5saWJyYXJ5XSAgICAgICAgICAgICAgICAgVGhlIGF0dGFjaG1lbnRzIGNvbGxlY3Rpb24gdG8gYnJvd3NlLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG9uZSBpcyBub3Qgc3VwcGxpZWQsIGEgY29sbGVjdGlvbiBvZiBhdHRhY2htZW50cyBvZiB0aGUgc3BlY2lmaWVkIHR5cGUgd2lsbCBiZSBjcmVhdGVkLlxuICogQHBhcmFtIHtib29sZWFufHN0cmluZ30gICAgICAgICAgICAgW2F0dHJpYnV0ZXMuZmlsdGVyYWJsZT11cGxvYWRlZF0gICAgIFdoZXRoZXIgdGhlIGxpYnJhcnkgaXMgZmlsdGVyYWJsZSwgYW5kIGlmIHNvIHdoYXQgZmlsdGVycyBzaG91bGQgYmUgc2hvd24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXB0cyAnYWxsJywgJ3VwbG9hZGVkJywgb3IgJ3VuYXR0YWNoZWQnLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMubWVudT1nYWxsZXJ5XSAgICAgICAgICAgIEluaXRpYWwgbW9kZSBmb3IgdGhlIG1lbnUgcmVnaW9uLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuY29udGVudD11cGxvYWRdICAgICAgICAgIEluaXRpYWwgbW9kZSBmb3IgdGhlIGNvbnRlbnQgcmVnaW9uLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE92ZXJyaWRkZW4gYnkgcGVyc2lzdGVudCB1c2VyIHNldHRpbmcgaWYgJ2NvbnRlbnRVc2VyU2V0dGluZycgaXMgdHJ1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnJvdXRlcj1icm93c2VdICAgICAgICAgICBJbml0aWFsIG1vZGUgZm9yIHRoZSByb3V0ZXIgcmVnaW9uLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMudG9vbGJhcj1nYWxsZXJ5LWFkZF0gICAgIEluaXRpYWwgbW9kZSBmb3IgdGhlIHRvb2xiYXIgcmVnaW9uLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuc2VhcmNoYWJsZT10cnVlXSAgICAgICAgIFdoZXRoZXIgdGhlIGxpYnJhcnkgaXMgc2VhcmNoYWJsZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnNvcnRhYmxlPXRydWVdICAgICAgICAgICBXaGV0aGVyIHRoZSBBdHRhY2htZW50cyBzaG91bGQgYmUgc29ydGFibGUuIERlcGVuZHMgb24gdGhlIG9yZGVyYnkgcHJvcGVydHkgYmVpbmcgc2V0IHRvIG1lbnVPcmRlciBvbiB0aGUgYXR0YWNobWVudHMgY29sbGVjdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmF1dG9TZWxlY3Q9dHJ1ZV0gICAgICAgICBXaGV0aGVyIGFuIHVwbG9hZGVkIGF0dGFjaG1lbnQgc2hvdWxkIGJlIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gdGhlIHNlbGVjdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmNvbnRlbnRVc2VyU2V0dGluZz10cnVlXSBXaGV0aGVyIHRoZSBjb250ZW50IHJlZ2lvbidzIG1vZGUgc2hvdWxkIGJlIHNldCBhbmQgcGVyc2lzdGVkIHBlciB1c2VyLlxuICogQHBhcmFtIHtpbnR9ICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMucHJpb3JpdHk9MTAwXSAgICAgICAgICAgIFRoZSBwcmlvcml0eSBmb3IgdGhlIHN0YXRlIGxpbmsgaW4gdGhlIG1lZGlhIG1lbnUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5zeW5jU2VsZWN0aW9uPWZhbHNlXSAgICAgV2hldGhlciB0aGUgQXR0YWNobWVudHMgc2VsZWN0aW9uIHNob3VsZCBiZSBwZXJzaXN0ZWQgZnJvbSB0aGUgbGFzdCBzdGF0ZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byBmYWxzZSBiZWNhdXNlIGZvciB0aGlzIHN0YXRlLCBiZWNhdXNlIHRoZSBsaWJyYXJ5IG9mIHRoZSBFZGl0IEdhbGxlcnkgc3RhdGUgaXMgdGhlIHNlbGVjdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMudHlwZSAgICAgICAgICAgICAgICAgICBUaGUgY29sbGVjdGlvbidzIG1lZGlhIHR5cGUuIChlLmcuICd2aWRlbycpLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy5jb2xsZWN0aW9uVHlwZSAgICAgICAgIFRoZSBjb2xsZWN0aW9uIHR5cGUuIChlLmcuICdwbGF5bGlzdCcpLlxuICovXG52YXIgU2VsZWN0aW9uID0gd3AubWVkaWEubW9kZWwuU2VsZWN0aW9uLFxuXHRMaWJyYXJ5ID0gd3AubWVkaWEuY29udHJvbGxlci5MaWJyYXJ5LFxuXHRDb2xsZWN0aW9uQWRkO1xuXG5Db2xsZWN0aW9uQWRkID0gTGlicmFyeS5leHRlbmQoe1xuXHRkZWZhdWx0czogXy5kZWZhdWx0cygge1xuXHRcdC8vIFNlbGVjdGlvbiBkZWZhdWx0cy4gQHNlZSBtZWRpYS5tb2RlbC5TZWxlY3Rpb25cblx0XHRtdWx0aXBsZTogICAgICAnYWRkJyxcblx0XHQvLyBBdHRhY2htZW50cyBicm93c2VyIGRlZmF1bHRzLiBAc2VlIG1lZGlhLnZpZXcuQXR0YWNobWVudHNCcm93c2VyXG5cdFx0ZmlsdGVyYWJsZTogICAgJ3VwbG9hZGVkJyxcblxuXHRcdHByaW9yaXR5OiAgICAgIDEwMCxcblx0XHRzeW5jU2VsZWN0aW9uOiBmYWxzZVxuXHR9LCBMaWJyYXJ5LnByb3RvdHlwZS5kZWZhdWx0cyApLFxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMy45LjBcblx0ICovXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBjb2xsZWN0aW9uVHlwZSA9IHRoaXMuZ2V0KCdjb2xsZWN0aW9uVHlwZScpO1xuXG5cdFx0aWYgKCAndmlkZW8nID09PSB0aGlzLmdldCggJ3R5cGUnICkgKSB7XG5cdFx0XHRjb2xsZWN0aW9uVHlwZSA9ICd2aWRlby0nICsgY29sbGVjdGlvblR5cGU7XG5cdFx0fVxuXG5cdFx0dGhpcy5zZXQoICdpZCcsIGNvbGxlY3Rpb25UeXBlICsgJy1saWJyYXJ5JyApO1xuXHRcdHRoaXMuc2V0KCAndG9vbGJhcicsIGNvbGxlY3Rpb25UeXBlICsgJy1hZGQnICk7XG5cdFx0dGhpcy5zZXQoICdtZW51JywgY29sbGVjdGlvblR5cGUgKTtcblxuXHRcdC8vIElmIHdlIGhhdmVuJ3QgYmVlbiBwcm92aWRlZCBhIGBsaWJyYXJ5YCwgY3JlYXRlIGEgYFNlbGVjdGlvbmAuXG5cdFx0aWYgKCAhIHRoaXMuZ2V0KCdsaWJyYXJ5JykgKSB7XG5cdFx0XHR0aGlzLnNldCggJ2xpYnJhcnknLCB3cC5tZWRpYS5xdWVyeSh7IHR5cGU6IHRoaXMuZ2V0KCd0eXBlJykgfSkgKTtcblx0XHR9XG5cdFx0TGlicmFyeS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBzaW5jZSAzLjkuMFxuXHQgKi9cblx0YWN0aXZhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBsaWJyYXJ5ID0gdGhpcy5nZXQoJ2xpYnJhcnknKSxcblx0XHRcdGVkaXRMaWJyYXJ5ID0gdGhpcy5nZXQoJ2VkaXRMaWJyYXJ5JyksXG5cdFx0XHRlZGl0ID0gdGhpcy5mcmFtZS5zdGF0ZSggdGhpcy5nZXQoJ2NvbGxlY3Rpb25UeXBlJykgKyAnLWVkaXQnICkuZ2V0KCdsaWJyYXJ5Jyk7XG5cblx0XHRpZiAoIGVkaXRMaWJyYXJ5ICYmIGVkaXRMaWJyYXJ5ICE9PSBlZGl0ICkge1xuXHRcdFx0bGlicmFyeS51bm9ic2VydmUoIGVkaXRMaWJyYXJ5ICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWNjZXB0cyBhdHRhY2htZW50cyB0aGF0IGV4aXN0IGluIHRoZSBvcmlnaW5hbCBsaWJyYXJ5IGFuZFxuXHRcdC8vIHRoYXQgZG8gbm90IGV4aXN0IGluIGdhbGxlcnkncyBsaWJyYXJ5LlxuXHRcdGxpYnJhcnkudmFsaWRhdG9yID0gZnVuY3Rpb24oIGF0dGFjaG1lbnQgKSB7XG5cdFx0XHRyZXR1cm4gISEgdGhpcy5taXJyb3JpbmcuZ2V0KCBhdHRhY2htZW50LmNpZCApICYmICEgZWRpdC5nZXQoIGF0dGFjaG1lbnQuY2lkICkgJiYgU2VsZWN0aW9uLnByb3RvdHlwZS52YWxpZGF0b3IuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH07XG5cblx0XHQvLyBSZXNldCB0aGUgbGlicmFyeSB0byBlbnN1cmUgdGhhdCBhbGwgYXR0YWNobWVudHMgYXJlIHJlLWFkZGVkXG5cdFx0Ly8gdG8gdGhlIGNvbGxlY3Rpb24uIERvIHNvIHNpbGVudGx5LCBhcyBjYWxsaW5nIGBvYnNlcnZlYCB3aWxsXG5cdFx0Ly8gdHJpZ2dlciB0aGUgYHJlc2V0YCBldmVudC5cblx0XHRsaWJyYXJ5LnJlc2V0KCBsaWJyYXJ5Lm1pcnJvcmluZy5tb2RlbHMsIHsgc2lsZW50OiB0cnVlIH0pO1xuXHRcdGxpYnJhcnkub2JzZXJ2ZSggZWRpdCApO1xuXHRcdHRoaXMuc2V0KCdlZGl0TGlicmFyeScsIGVkaXQpO1xuXG5cdFx0TGlicmFyeS5wcm90b3R5cGUuYWN0aXZhdGUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBDb2xsZWN0aW9uQWRkO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS5jb250cm9sbGVyLkNvbGxlY3Rpb25FZGl0XG4gKlxuICogQSBzdGF0ZSBmb3IgZWRpdGluZyBhIGNvbGxlY3Rpb24sIHdoaWNoIGlzIHVzZWQgYnkgYXVkaW8gYW5kIHZpZGVvIHBsYXlsaXN0cyxcbiAqIGFuZCBjYW4gYmUgdXNlZCBmb3Igb3RoZXIgY29sbGVjdGlvbnMuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuY29udHJvbGxlci5MaWJyYXJ5XG4gKiBAYXVnbWVudHMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZVxuICogQGF1Z21lbnRzIEJhY2tib25lLk1vZGVsXG4gKlxuICogQHBhcmFtIHtvYmplY3R9ICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXNdICAgICAgICAgICAgICAgICAgICAgIFRoZSBhdHRyaWJ1dGVzIGhhc2ggcGFzc2VkIHRvIHRoZSBzdGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMudGl0bGUgICAgICAgICAgICAgICAgICBUaXRsZSBmb3IgdGhlIHN0YXRlLiBEaXNwbGF5cyBpbiB0aGUgbWVkaWEgbWVudSBhbmQgdGhlIGZyYW1lJ3MgdGl0bGUgcmVnaW9uLlxuICogQHBhcmFtIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c30gW2F0dHJpYnV0ZXMubGlicmFyeV0gICAgICAgICAgICAgIFRoZSBhdHRhY2htZW50cyBjb2xsZWN0aW9uIHRvIGVkaXQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgb25lIGlzIG5vdCBzdXBwbGllZCwgYW4gZW1wdHkgbWVkaWEubW9kZWwuU2VsZWN0aW9uIGNvbGxlY3Rpb24gaXMgY3JlYXRlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLm11bHRpcGxlPWZhbHNlXSAgICAgICBXaGV0aGVyIG11bHRpLXNlbGVjdCBpcyBlbmFibGVkLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuY29udGVudD1icm93c2VdICAgICAgIEluaXRpYWwgbW9kZSBmb3IgdGhlIGNvbnRlbnQgcmVnaW9uLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy5tZW51ICAgICAgICAgICAgICAgICAgIEluaXRpYWwgbW9kZSBmb3IgdGhlIG1lbnUgcmVnaW9uLiBAdG9kbyB0aGlzIG5lZWRzIGEgYmV0dGVyIGV4cGxhbmF0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuc2VhcmNoYWJsZT1mYWxzZV0gICAgIFdoZXRoZXIgdGhlIGxpYnJhcnkgaXMgc2VhcmNoYWJsZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnNvcnRhYmxlPXRydWVdICAgICAgICBXaGV0aGVyIHRoZSBBdHRhY2htZW50cyBzaG91bGQgYmUgc29ydGFibGUuIERlcGVuZHMgb24gdGhlIG9yZGVyYnkgcHJvcGVydHkgYmVpbmcgc2V0IHRvIG1lbnVPcmRlciBvbiB0aGUgYXR0YWNobWVudHMgY29sbGVjdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmRhdGU9dHJ1ZV0gICAgICAgICAgICBXaGV0aGVyIHRvIHNob3cgdGhlIGRhdGUgZmlsdGVyIGluIHRoZSBicm93c2VyJ3MgdG9vbGJhci5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmRlc2NyaWJlPXRydWVdICAgICAgICBXaGV0aGVyIHRvIG9mZmVyIFVJIHRvIGRlc2NyaWJlIHRoZSBhdHRhY2htZW50cyAtIGUuZy4gY2FwdGlvbmluZyBpbWFnZXMgaW4gYSBnYWxsZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuZHJhZ0luZm89dHJ1ZV0gICAgICAgIFdoZXRoZXIgdG8gc2hvdyBpbnN0cnVjdGlvbmFsIHRleHQgYWJvdXQgdGhlIGF0dGFjaG1lbnRzIGJlaW5nIHNvcnRhYmxlLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuZHJhZ0luZm9UZXh0XSAgICAgICAgIEluc3RydWN0aW9uYWwgdGV4dCBhYm91dCB0aGUgYXR0YWNobWVudHMgYmVpbmcgc29ydGFibGUuXG4gKiBAcGFyYW0ge2ludH0gICAgICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5pZGVhbENvbHVtbldpZHRoPTE3MF0gVGhlIGlkZWFsIGNvbHVtbiB3aWR0aCBpbiBwaXhlbHMgZm9yIGF0dGFjaG1lbnRzLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuZWRpdGluZz1mYWxzZV0gICAgICAgIFdoZXRoZXIgdGhlIGdhbGxlcnkgaXMgYmVpbmcgY3JlYXRlZCwgb3IgZWRpdGluZyBhbiBleGlzdGluZyBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7aW50fSAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnByaW9yaXR5PTYwXSAgICAgICAgICBUaGUgcHJpb3JpdHkgZm9yIHRoZSBzdGF0ZSBsaW5rIGluIHRoZSBtZWRpYSBtZW51LlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuc3luY1NlbGVjdGlvbj1mYWxzZV0gIFdoZXRoZXIgdGhlIEF0dGFjaG1lbnRzIHNlbGVjdGlvbiBzaG91bGQgYmUgcGVyc2lzdGVkIGZyb20gdGhlIGxhc3Qgc3RhdGUuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gZmFsc2UgZm9yIHRoaXMgc3RhdGUsIGJlY2F1c2UgdGhlIGxpYnJhcnkgcGFzc2VkIGluICAqaXMqIHRoZSBzZWxlY3Rpb24uXG4gKiBAcGFyYW0ge3ZpZXd9ICAgICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5TZXR0aW5nc1ZpZXddICAgICAgICAgVGhlIHZpZXcgdG8gZWRpdCB0aGUgY29sbGVjdGlvbiBpbnN0YW5jZSBzZXR0aW5ncyAoZS5nLiBQbGF5bGlzdCBzZXR0aW5ncyB3aXRoIFwiU2hvdyB0cmFja2xpc3RcIiBjaGVja2JveCkuXG4gKiBAcGFyYW0ge3ZpZXd9ICAgICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5BdHRhY2htZW50Vmlld10gICAgICAgVGhlIHNpbmdsZSBgQXR0YWNobWVudGAgdmlldyB0byBiZSB1c2VkIGluIHRoZSBgQXR0YWNobWVudHNgLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vbmUgc3VwcGxpZWQsIGRlZmF1bHRzIHRvIHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudC5FZGl0TGlicmFyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMudHlwZSAgICAgICAgICAgICAgICAgICBUaGUgY29sbGVjdGlvbidzIG1lZGlhIHR5cGUuIChlLmcuICd2aWRlbycpLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy5jb2xsZWN0aW9uVHlwZSAgICAgICAgIFRoZSBjb2xsZWN0aW9uIHR5cGUuIChlLmcuICdwbGF5bGlzdCcpLlxuICovXG52YXIgTGlicmFyeSA9IHdwLm1lZGlhLmNvbnRyb2xsZXIuTGlicmFyeSxcblx0bDEwbiA9IHdwLm1lZGlhLnZpZXcubDEwbixcblx0JCA9IGpRdWVyeSxcblx0Q29sbGVjdGlvbkVkaXQ7XG5cbkNvbGxlY3Rpb25FZGl0ID0gTGlicmFyeS5leHRlbmQoe1xuXHRkZWZhdWx0czoge1xuXHRcdG11bHRpcGxlOiAgICAgICAgIGZhbHNlLFxuXHRcdHNvcnRhYmxlOiAgICAgICAgIHRydWUsXG5cdFx0ZGF0ZTogICAgICAgICAgICAgZmFsc2UsXG5cdFx0c2VhcmNoYWJsZTogICAgICAgZmFsc2UsXG5cdFx0Y29udGVudDogICAgICAgICAgJ2Jyb3dzZScsXG5cdFx0ZGVzY3JpYmU6ICAgICAgICAgdHJ1ZSxcblx0XHRkcmFnSW5mbzogICAgICAgICB0cnVlLFxuXHRcdGlkZWFsQ29sdW1uV2lkdGg6IDE3MCxcblx0XHRlZGl0aW5nOiAgICAgICAgICBmYWxzZSxcblx0XHRwcmlvcml0eTogICAgICAgICA2MCxcblx0XHRTZXR0aW5nc1ZpZXc6ICAgICBmYWxzZSxcblx0XHRzeW5jU2VsZWN0aW9uOiAgICBmYWxzZVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMy45LjBcblx0ICovXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBjb2xsZWN0aW9uVHlwZSA9IHRoaXMuZ2V0KCdjb2xsZWN0aW9uVHlwZScpO1xuXG5cdFx0aWYgKCAndmlkZW8nID09PSB0aGlzLmdldCggJ3R5cGUnICkgKSB7XG5cdFx0XHRjb2xsZWN0aW9uVHlwZSA9ICd2aWRlby0nICsgY29sbGVjdGlvblR5cGU7XG5cdFx0fVxuXG5cdFx0dGhpcy5zZXQoICdpZCcsIGNvbGxlY3Rpb25UeXBlICsgJy1lZGl0JyApO1xuXHRcdHRoaXMuc2V0KCAndG9vbGJhcicsIGNvbGxlY3Rpb25UeXBlICsgJy1lZGl0JyApO1xuXG5cdFx0Ly8gSWYgd2UgaGF2ZW4ndCBiZWVuIHByb3ZpZGVkIGEgYGxpYnJhcnlgLCBjcmVhdGUgYSBgU2VsZWN0aW9uYC5cblx0XHRpZiAoICEgdGhpcy5nZXQoJ2xpYnJhcnknKSApIHtcblx0XHRcdHRoaXMuc2V0KCAnbGlicmFyeScsIG5ldyB3cC5tZWRpYS5tb2RlbC5TZWxlY3Rpb24oKSApO1xuXHRcdH1cblx0XHQvLyBUaGUgc2luZ2xlIGBBdHRhY2htZW50YCB2aWV3IHRvIGJlIHVzZWQgaW4gdGhlIGBBdHRhY2htZW50c2Agdmlldy5cblx0XHRpZiAoICEgdGhpcy5nZXQoJ0F0dGFjaG1lbnRWaWV3JykgKSB7XG5cdFx0XHR0aGlzLnNldCggJ0F0dGFjaG1lbnRWaWV3Jywgd3AubWVkaWEudmlldy5BdHRhY2htZW50LkVkaXRMaWJyYXJ5ICk7XG5cdFx0fVxuXHRcdExpYnJhcnkucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMy45LjBcblx0ICovXG5cdGFjdGl2YXRlOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbGlicmFyeSA9IHRoaXMuZ2V0KCdsaWJyYXJ5Jyk7XG5cblx0XHQvLyBMaW1pdCB0aGUgbGlicmFyeSB0byBpbWFnZXMgb25seS5cblx0XHRsaWJyYXJ5LnByb3BzLnNldCggJ3R5cGUnLCB0aGlzLmdldCggJ3R5cGUnICkgKTtcblxuXHRcdC8vIFdhdGNoIGZvciB1cGxvYWRlZCBhdHRhY2htZW50cy5cblx0XHR0aGlzLmdldCgnbGlicmFyeScpLm9ic2VydmUoIHdwLlVwbG9hZGVyLnF1ZXVlICk7XG5cblx0XHR0aGlzLmZyYW1lLm9uKCAnY29udGVudDpyZW5kZXI6YnJvd3NlJywgdGhpcy5yZW5kZXJTZXR0aW5ncywgdGhpcyApO1xuXG5cdFx0TGlicmFyeS5wcm90b3R5cGUuYWN0aXZhdGUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMy45LjBcblx0ICovXG5cdGRlYWN0aXZhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdC8vIFN0b3Agd2F0Y2hpbmcgZm9yIHVwbG9hZGVkIGF0dGFjaG1lbnRzLlxuXHRcdHRoaXMuZ2V0KCdsaWJyYXJ5JykudW5vYnNlcnZlKCB3cC5VcGxvYWRlci5xdWV1ZSApO1xuXG5cdFx0dGhpcy5mcmFtZS5vZmYoICdjb250ZW50OnJlbmRlcjpicm93c2UnLCB0aGlzLnJlbmRlclNldHRpbmdzLCB0aGlzICk7XG5cblx0XHRMaWJyYXJ5LnByb3RvdHlwZS5kZWFjdGl2YXRlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0fSxcblxuXHQvKipcblx0ICogUmVuZGVyIHRoZSBjb2xsZWN0aW9uIGVtYmVkIHNldHRpbmdzIHZpZXcgaW4gdGhlIGJyb3dzZXIgc2lkZWJhci5cblx0ICpcblx0ICogQHRvZG8gVGhpcyBpcyBhZ2FpbnN0IHRoZSBwYXR0ZXJuIGVsc2V3aGVyZSBpbiBtZWRpYS4gVHlwaWNhbGx5IHRoZSBmcmFtZVxuXHQgKiAgICAgICBpcyByZXNwb25zaWJsZSBmb3IgYWRkaW5nIHJlZ2lvbiBtb2RlIGNhbGxiYWNrcy4gRXhwbGFpbi5cblx0ICpcblx0ICogQHNpbmNlIDMuOS4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7d3AubWVkaWEudmlldy5hdHRhY2htZW50c0Jyb3dzZXJ9IFRoZSBhdHRhY2htZW50cyBicm93c2VyIHZpZXcuXG5cdCAqL1xuXHRyZW5kZXJTZXR0aW5nczogZnVuY3Rpb24oIGF0dGFjaG1lbnRzQnJvd3NlclZpZXcgKSB7XG5cdFx0dmFyIGxpYnJhcnkgPSB0aGlzLmdldCgnbGlicmFyeScpLFxuXHRcdFx0Y29sbGVjdGlvblR5cGUgPSB0aGlzLmdldCgnY29sbGVjdGlvblR5cGUnKSxcblx0XHRcdGRyYWdJbmZvVGV4dCA9IHRoaXMuZ2V0KCdkcmFnSW5mb1RleHQnKSxcblx0XHRcdFNldHRpbmdzVmlldyA9IHRoaXMuZ2V0KCdTZXR0aW5nc1ZpZXcnKSxcblx0XHRcdG9iaiA9IHt9O1xuXG5cdFx0aWYgKCAhIGxpYnJhcnkgfHwgISBhdHRhY2htZW50c0Jyb3dzZXJWaWV3ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGxpYnJhcnlbIGNvbGxlY3Rpb25UeXBlIF0gPSBsaWJyYXJ5WyBjb2xsZWN0aW9uVHlwZSBdIHx8IG5ldyBCYWNrYm9uZS5Nb2RlbCgpO1xuXG5cdFx0b2JqWyBjb2xsZWN0aW9uVHlwZSBdID0gbmV3IFNldHRpbmdzVmlldyh7XG5cdFx0XHRjb250cm9sbGVyOiB0aGlzLFxuXHRcdFx0bW9kZWw6ICAgICAgbGlicmFyeVsgY29sbGVjdGlvblR5cGUgXSxcblx0XHRcdHByaW9yaXR5OiAgIDQwXG5cdFx0fSk7XG5cblx0XHRhdHRhY2htZW50c0Jyb3dzZXJWaWV3LnNpZGViYXIuc2V0KCBvYmogKTtcblxuXHRcdGlmICggZHJhZ0luZm9UZXh0ICkge1xuXHRcdFx0YXR0YWNobWVudHNCcm93c2VyVmlldy50b29sYmFyLnNldCggJ2RyYWdJbmZvJywgbmV3IHdwLm1lZGlhLlZpZXcoe1xuXHRcdFx0XHRlbDogJCggJzxkaXYgY2xhc3M9XCJpbnN0cnVjdGlvbnNcIj4nICsgZHJhZ0luZm9UZXh0ICsgJzwvZGl2PicgKVswXSxcblx0XHRcdFx0cHJpb3JpdHk6IC00MFxuXHRcdFx0fSkgKTtcblx0XHR9XG5cblx0XHQvLyBBZGQgdGhlICdSZXZlcnNlIG9yZGVyJyBidXR0b24gdG8gdGhlIHRvb2xiYXIuXG5cdFx0YXR0YWNobWVudHNCcm93c2VyVmlldy50b29sYmFyLnNldCggJ3JldmVyc2UnLCB7XG5cdFx0XHR0ZXh0OiAgICAgbDEwbi5yZXZlcnNlT3JkZXIsXG5cdFx0XHRwcmlvcml0eTogODAsXG5cblx0XHRcdGNsaWNrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bGlicmFyeS5yZXNldCggbGlicmFyeS50b0FycmF5KCkucmV2ZXJzZSgpICk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENvbGxlY3Rpb25FZGl0O1xuIiwiLyoqXG4gKiB3cC5tZWRpYS5jb250cm9sbGVyLkNyb3BwZXJcbiAqXG4gKiBBIHN0YXRlIGZvciBjcm9wcGluZyBhbiBpbWFnZS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlXG4gKiBAYXVnbWVudHMgQmFja2JvbmUuTW9kZWxcbiAqL1xudmFyIGwxMG4gPSB3cC5tZWRpYS52aWV3LmwxMG4sXG5cdENyb3BwZXI7XG5cbkNyb3BwZXIgPSB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlLmV4dGVuZCh7XG5cdGRlZmF1bHRzOiB7XG5cdFx0aWQ6ICAgICAgICAgICdjcm9wcGVyJyxcblx0XHR0aXRsZTogICAgICAgbDEwbi5jcm9wSW1hZ2UsXG5cdFx0Ly8gUmVnaW9uIG1vZGUgZGVmYXVsdHMuXG5cdFx0dG9vbGJhcjogICAgICdjcm9wJyxcblx0XHRjb250ZW50OiAgICAgJ2Nyb3AnLFxuXHRcdHJvdXRlcjogICAgICBmYWxzZSxcblxuXHRcdGNhblNraXBDcm9wOiBmYWxzZVxuXHR9LFxuXG5cdGFjdGl2YXRlOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmZyYW1lLm9uKCAnY29udGVudDpjcmVhdGU6Y3JvcCcsIHRoaXMuY3JlYXRlQ3JvcENvbnRlbnQsIHRoaXMgKTtcblx0XHR0aGlzLmZyYW1lLm9uKCAnY2xvc2UnLCB0aGlzLnJlbW92ZUNyb3BwZXIsIHRoaXMgKTtcblx0XHR0aGlzLnNldCgnc2VsZWN0aW9uJywgbmV3IEJhY2tib25lLkNvbGxlY3Rpb24odGhpcy5mcmFtZS5fc2VsZWN0aW9uLnNpbmdsZSkpO1xuXHR9LFxuXG5cdGRlYWN0aXZhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuZnJhbWUudG9vbGJhci5tb2RlKCdicm93c2UnKTtcblx0fSxcblxuXHRjcmVhdGVDcm9wQ29udGVudDogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5jcm9wcGVyVmlldyA9IG5ldyB3cC5tZWRpYS52aWV3LkNyb3BwZXIoe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpcyxcblx0XHRcdGF0dGFjaG1lbnQ6IHRoaXMuZ2V0KCdzZWxlY3Rpb24nKS5maXJzdCgpXG5cdFx0fSk7XG5cdFx0dGhpcy5jcm9wcGVyVmlldy5vbignaW1hZ2UtbG9hZGVkJywgdGhpcy5jcmVhdGVDcm9wVG9vbGJhciwgdGhpcyk7XG5cdFx0dGhpcy5mcmFtZS5jb250ZW50LnNldCh0aGlzLmNyb3BwZXJWaWV3KTtcblxuXHR9LFxuXHRyZW1vdmVDcm9wcGVyOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmltZ1NlbGVjdC5jYW5jZWxTZWxlY3Rpb24oKTtcblx0XHR0aGlzLmltZ1NlbGVjdC5zZXRPcHRpb25zKHtyZW1vdmU6IHRydWV9KTtcblx0XHR0aGlzLmltZ1NlbGVjdC51cGRhdGUoKTtcblx0XHR0aGlzLmNyb3BwZXJWaWV3LnJlbW92ZSgpO1xuXHR9LFxuXHRjcmVhdGVDcm9wVG9vbGJhcjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNhblNraXBDcm9wLCB0b29sYmFyT3B0aW9ucztcblxuXHRcdGNhblNraXBDcm9wID0gdGhpcy5nZXQoJ2NhblNraXBDcm9wJykgfHwgZmFsc2U7XG5cblx0XHR0b29sYmFyT3B0aW9ucyA9IHtcblx0XHRcdGNvbnRyb2xsZXI6IHRoaXMuZnJhbWUsXG5cdFx0XHRpdGVtczoge1xuXHRcdFx0XHRpbnNlcnQ6IHtcblx0XHRcdFx0XHRzdHlsZTogICAgJ3ByaW1hcnknLFxuXHRcdFx0XHRcdHRleHQ6ICAgICBsMTBuLmNyb3BJbWFnZSxcblx0XHRcdFx0XHRwcmlvcml0eTogODAsXG5cdFx0XHRcdFx0cmVxdWlyZXM6IHsgbGlicmFyeTogZmFsc2UsIHNlbGVjdGlvbjogZmFsc2UgfSxcblxuXHRcdFx0XHRcdGNsaWNrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHZhciBjb250cm9sbGVyID0gdGhpcy5jb250cm9sbGVyLFxuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb247XG5cblx0XHRcdFx0XHRcdHNlbGVjdGlvbiA9IGNvbnRyb2xsZXIuc3RhdGUoKS5nZXQoJ3NlbGVjdGlvbicpLmZpcnN0KCk7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb24uc2V0KHtjcm9wRGV0YWlsczogY29udHJvbGxlci5zdGF0ZSgpLmltZ1NlbGVjdC5nZXRTZWxlY3Rpb24oKX0pO1xuXG5cdFx0XHRcdFx0XHR0aGlzLiRlbC50ZXh0KGwxMG4uY3JvcHBpbmcpO1xuXHRcdFx0XHRcdFx0dGhpcy4kZWwuYXR0cignZGlzYWJsZWQnLCB0cnVlKTtcblxuXHRcdFx0XHRcdFx0Y29udHJvbGxlci5zdGF0ZSgpLmRvQ3JvcCggc2VsZWN0aW9uICkuZG9uZSggZnVuY3Rpb24oIGNyb3BwZWRJbWFnZSApIHtcblx0XHRcdFx0XHRcdFx0Y29udHJvbGxlci50cmlnZ2VyKCdjcm9wcGVkJywgY3JvcHBlZEltYWdlICk7XG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xsZXIuY2xvc2UoKTtcblx0XHRcdFx0XHRcdH0pLmZhaWwoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRjb250cm9sbGVyLnRyaWdnZXIoJ2NvbnRlbnQ6ZXJyb3I6Y3JvcCcpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGlmICggY2FuU2tpcENyb3AgKSB7XG5cdFx0XHRfLmV4dGVuZCggdG9vbGJhck9wdGlvbnMuaXRlbXMsIHtcblx0XHRcdFx0c2tpcDoge1xuXHRcdFx0XHRcdHN0eWxlOiAgICAgICdzZWNvbmRhcnknLFxuXHRcdFx0XHRcdHRleHQ6ICAgICAgIGwxMG4uc2tpcENyb3BwaW5nLFxuXHRcdFx0XHRcdHByaW9yaXR5OiAgIDcwLFxuXHRcdFx0XHRcdHJlcXVpcmVzOiAgIHsgbGlicmFyeTogZmFsc2UsIHNlbGVjdGlvbjogZmFsc2UgfSxcblx0XHRcdFx0XHRjbGljazogICAgICBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHZhciBzZWxlY3Rpb24gPSB0aGlzLmNvbnRyb2xsZXIuc3RhdGUoKS5nZXQoJ3NlbGVjdGlvbicpLmZpcnN0KCk7XG5cdFx0XHRcdFx0XHR0aGlzLmNvbnRyb2xsZXIuc3RhdGUoKS5jcm9wcGVyVmlldy5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdHRoaXMuY29udHJvbGxlci50cmlnZ2VyKCdza2lwcGVkY3JvcCcsIHNlbGVjdGlvbik7XG5cdFx0XHRcdFx0XHR0aGlzLmNvbnRyb2xsZXIuY2xvc2UoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHRoaXMuZnJhbWUudG9vbGJhci5zZXQoIG5ldyB3cC5tZWRpYS52aWV3LlRvb2xiYXIodG9vbGJhck9wdGlvbnMpICk7XG5cdH0sXG5cblx0ZG9Dcm9wOiBmdW5jdGlvbiggYXR0YWNobWVudCApIHtcblx0XHRyZXR1cm4gd3AuYWpheC5wb3N0KCAnY3VzdG9tLWhlYWRlci1jcm9wJywge1xuXHRcdFx0bm9uY2U6IGF0dGFjaG1lbnQuZ2V0KCdub25jZXMnKS5lZGl0LFxuXHRcdFx0aWQ6IGF0dGFjaG1lbnQuZ2V0KCdpZCcpLFxuXHRcdFx0Y3JvcERldGFpbHM6IGF0dGFjaG1lbnQuZ2V0KCdjcm9wRGV0YWlscycpXG5cdFx0fSApO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBDcm9wcGVyO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS5jb250cm9sbGVyLkN1c3RvbWl6ZUltYWdlQ3JvcHBlclxuICpcbiAqIEEgc3RhdGUgZm9yIGNyb3BwaW5nIGFuIGltYWdlLlxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLmNvbnRyb2xsZXIuQ3JvcHBlclxuICogQGF1Z21lbnRzIHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGVcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5Nb2RlbFxuICovXG52YXIgQ29udHJvbGxlciA9IHdwLm1lZGlhLmNvbnRyb2xsZXIsXG5cdEN1c3RvbWl6ZUltYWdlQ3JvcHBlcjtcblxuQ3VzdG9taXplSW1hZ2VDcm9wcGVyID0gQ29udHJvbGxlci5Dcm9wcGVyLmV4dGVuZCh7XG5cdGRvQ3JvcDogZnVuY3Rpb24oIGF0dGFjaG1lbnQgKSB7XG5cdFx0dmFyIGNyb3BEZXRhaWxzID0gYXR0YWNobWVudC5nZXQoICdjcm9wRGV0YWlscycgKSxcblx0XHRcdGNvbnRyb2wgPSB0aGlzLmdldCggJ2NvbnRyb2wnICk7XG5cblx0XHRjcm9wRGV0YWlscy5kc3Rfd2lkdGggID0gY29udHJvbC5wYXJhbXMud2lkdGg7XG5cdFx0Y3JvcERldGFpbHMuZHN0X2hlaWdodCA9IGNvbnRyb2wucGFyYW1zLmhlaWdodDtcblxuXHRcdHJldHVybiB3cC5hamF4LnBvc3QoICdjcm9wLWltYWdlJywge1xuXHRcdFx0d3BfY3VzdG9taXplOiAnb24nLFxuXHRcdFx0bm9uY2U6IGF0dGFjaG1lbnQuZ2V0KCAnbm9uY2VzJyApLmVkaXQsXG5cdFx0XHRpZDogYXR0YWNobWVudC5nZXQoICdpZCcgKSxcblx0XHRcdGNvbnRleHQ6IGNvbnRyb2wuaWQsXG5cdFx0XHRjcm9wRGV0YWlsczogY3JvcERldGFpbHNcblx0XHR9ICk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEN1c3RvbWl6ZUltYWdlQ3JvcHBlcjtcbiIsIi8qKlxuICogd3AubWVkaWEuY29udHJvbGxlci5FZGl0SW1hZ2VcbiAqXG4gKiBBIHN0YXRlIGZvciBlZGl0aW5nIChjcm9wcGluZywgZXRjLikgYW4gaW1hZ2UuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZVxuICogQGF1Z21lbnRzIEJhY2tib25lLk1vZGVsXG4gKlxuICogQHBhcmFtIHtvYmplY3R9ICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzICAgICAgICAgICAgICAgICAgICAgIFRoZSBhdHRyaWJ1dGVzIGhhc2ggcGFzc2VkIHRvIHRoZSBzdGF0ZS5cbiAqIEBwYXJhbSB7d3AubWVkaWEubW9kZWwuQXR0YWNobWVudH0gYXR0cmlidXRlcy5tb2RlbCAgICAgICAgICAgICAgICBUaGUgYXR0YWNobWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuaWQ9ZWRpdC1pbWFnZV0gICAgICBVbmlxdWUgaWRlbnRpZmllci5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMudGl0bGU9RWRpdCBJbWFnZV0gICBUaXRsZSBmb3IgdGhlIHN0YXRlLiBEaXNwbGF5cyBpbiB0aGUgbWVkaWEgbWVudSBhbmQgdGhlIGZyYW1lJ3MgdGl0bGUgcmVnaW9uLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5jb250ZW50PWVkaXQtaW1hZ2VdIEluaXRpYWwgbW9kZSBmb3IgdGhlIGNvbnRlbnQgcmVnaW9uLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy50b29sYmFyPWVkaXQtaW1hZ2VdIEluaXRpYWwgbW9kZSBmb3IgdGhlIHRvb2xiYXIgcmVnaW9uLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5tZW51PWZhbHNlXSAgICAgICAgIEluaXRpYWwgbW9kZSBmb3IgdGhlIG1lbnUgcmVnaW9uLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy51cmxdICAgICAgICAgICAgICAgIFVudXNlZC4gQHRvZG8gQ29uc2lkZXIgcmVtb3ZhbC5cbiAqL1xudmFyIGwxMG4gPSB3cC5tZWRpYS52aWV3LmwxMG4sXG5cdEVkaXRJbWFnZTtcblxuRWRpdEltYWdlID0gd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZS5leHRlbmQoe1xuXHRkZWZhdWx0czoge1xuXHRcdGlkOiAgICAgICdlZGl0LWltYWdlJyxcblx0XHR0aXRsZTogICBsMTBuLmVkaXRJbWFnZSxcblx0XHRtZW51OiAgICBmYWxzZSxcblx0XHR0b29sYmFyOiAnZWRpdC1pbWFnZScsXG5cdFx0Y29udGVudDogJ2VkaXQtaW1hZ2UnLFxuXHRcdHVybDogICAgICcnXG5cdH0sXG5cblx0LyoqXG5cdCAqIEBzaW5jZSAzLjkuMFxuXHQgKi9cblx0YWN0aXZhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMubGlzdGVuVG8oIHRoaXMuZnJhbWUsICd0b29sYmFyOnJlbmRlcjplZGl0LWltYWdlJywgdGhpcy50b29sYmFyICk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBzaW5jZSAzLjkuMFxuXHQgKi9cblx0ZGVhY3RpdmF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5zdG9wTGlzdGVuaW5nKCB0aGlzLmZyYW1lICk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBzaW5jZSAzLjkuMFxuXHQgKi9cblx0dG9vbGJhcjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGZyYW1lID0gdGhpcy5mcmFtZSxcblx0XHRcdGxhc3RTdGF0ZSA9IGZyYW1lLmxhc3RTdGF0ZSgpLFxuXHRcdFx0cHJldmlvdXMgPSBsYXN0U3RhdGUgJiYgbGFzdFN0YXRlLmlkO1xuXG5cdFx0ZnJhbWUudG9vbGJhci5zZXQoIG5ldyB3cC5tZWRpYS52aWV3LlRvb2xiYXIoe1xuXHRcdFx0Y29udHJvbGxlcjogZnJhbWUsXG5cdFx0XHRpdGVtczoge1xuXHRcdFx0XHRiYWNrOiB7XG5cdFx0XHRcdFx0c3R5bGU6ICdwcmltYXJ5Jyxcblx0XHRcdFx0XHR0ZXh0OiAgICAgbDEwbi5iYWNrLFxuXHRcdFx0XHRcdHByaW9yaXR5OiAyMCxcblx0XHRcdFx0XHRjbGljazogICAgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRpZiAoIHByZXZpb3VzICkge1xuXHRcdFx0XHRcdFx0XHRmcmFtZS5zZXRTdGF0ZSggcHJldmlvdXMgKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGZyYW1lLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSkgKTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gRWRpdEltYWdlO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS5jb250cm9sbGVyLkVtYmVkXG4gKlxuICogQSBzdGF0ZSBmb3IgZW1iZWRkaW5nIG1lZGlhIGZyb20gYSBVUkwuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZVxuICogQGF1Z21lbnRzIEJhY2tib25lLk1vZGVsXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGF0dHJpYnV0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGF0dHJpYnV0ZXMgaGFzaCBwYXNzZWQgdG8gdGhlIHN0YXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IFthdHRyaWJ1dGVzLmlkPWVtYmVkXSAgICAgICAgICAgICAgVW5pcXVlIGlkZW50aWZpZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2F0dHJpYnV0ZXMudGl0bGU9SW5zZXJ0IEZyb20gVVJMXSBUaXRsZSBmb3IgdGhlIHN0YXRlLiBEaXNwbGF5cyBpbiB0aGUgbWVkaWEgbWVudSBhbmQgdGhlIGZyYW1lJ3MgdGl0bGUgcmVnaW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IFthdHRyaWJ1dGVzLmNvbnRlbnQ9ZW1iZWRdICAgICAgICAgSW5pdGlhbCBtb2RlIGZvciB0aGUgY29udGVudCByZWdpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gW2F0dHJpYnV0ZXMubWVudT1kZWZhdWx0XSAgICAgICAgICBJbml0aWFsIG1vZGUgZm9yIHRoZSBtZW51IHJlZ2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXR0cmlidXRlcy50b29sYmFyPW1haW4tZW1iZWRdICAgIEluaXRpYWwgbW9kZSBmb3IgdGhlIHRvb2xiYXIgcmVnaW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IFthdHRyaWJ1dGVzLm1lbnU9ZmFsc2VdICAgICAgICAgICAgSW5pdGlhbCBtb2RlIGZvciB0aGUgbWVudSByZWdpb24uXG4gKiBAcGFyYW0ge2ludH0gICAgW2F0dHJpYnV0ZXMucHJpb3JpdHk9MTIwXSAgICAgICAgICBUaGUgcHJpb3JpdHkgZm9yIHRoZSBzdGF0ZSBsaW5rIGluIHRoZSBtZWRpYSBtZW51LlxuICogQHBhcmFtIHtzdHJpbmd9IFthdHRyaWJ1dGVzLnR5cGU9bGlua10gICAgICAgICAgICAgVGhlIHR5cGUgb2YgZW1iZWQuIEN1cnJlbnRseSBvbmx5IGxpbmsgaXMgc3VwcG9ydGVkLlxuICogQHBhcmFtIHtzdHJpbmd9IFthdHRyaWJ1dGVzLnVybF0gICAgICAgICAgICAgICAgICAgVGhlIGVtYmVkIFVSTC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBbYXR0cmlidXRlcy5tZXRhZGF0YT17fV0gICAgICAgICAgIFByb3BlcnRpZXMgb2YgdGhlIGVtYmVkLCB3aGljaCB3aWxsIG92ZXJyaWRlIGF0dHJpYnV0ZXMudXJsIGlmIHNldC5cbiAqL1xudmFyIGwxMG4gPSB3cC5tZWRpYS52aWV3LmwxMG4sXG5cdCQgPSBCYWNrYm9uZS4kLFxuXHRFbWJlZDtcblxuRW1iZWQgPSB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlLmV4dGVuZCh7XG5cdGRlZmF1bHRzOiB7XG5cdFx0aWQ6ICAgICAgICdlbWJlZCcsXG5cdFx0dGl0bGU6ICAgIGwxMG4uaW5zZXJ0RnJvbVVybFRpdGxlLFxuXHRcdGNvbnRlbnQ6ICAnZW1iZWQnLFxuXHRcdG1lbnU6ICAgICAnZGVmYXVsdCcsXG5cdFx0dG9vbGJhcjogICdtYWluLWVtYmVkJyxcblx0XHRwcmlvcml0eTogMTIwLFxuXHRcdHR5cGU6ICAgICAnbGluaycsXG5cdFx0dXJsOiAgICAgICcnLFxuXHRcdG1ldGFkYXRhOiB7fVxuXHR9LFxuXG5cdC8vIFRoZSBhbW91bnQgb2YgdGltZSB1c2VkIHdoZW4gZGVib3VuY2luZyB0aGUgc2Nhbi5cblx0c2Vuc2l0aXZpdHk6IDQwMCxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKSB7XG5cdFx0dGhpcy5tZXRhZGF0YSA9IG9wdGlvbnMubWV0YWRhdGE7XG5cdFx0dGhpcy5kZWJvdW5jZWRTY2FuID0gXy5kZWJvdW5jZSggXy5iaW5kKCB0aGlzLnNjYW4sIHRoaXMgKSwgdGhpcy5zZW5zaXRpdml0eSApO1xuXHRcdHRoaXMucHJvcHMgPSBuZXcgQmFja2JvbmUuTW9kZWwoIHRoaXMubWV0YWRhdGEgfHwgeyB1cmw6ICcnIH0pO1xuXHRcdHRoaXMucHJvcHMub24oICdjaGFuZ2U6dXJsJywgdGhpcy5kZWJvdW5jZWRTY2FuLCB0aGlzICk7XG5cdFx0dGhpcy5wcm9wcy5vbiggJ2NoYW5nZTp1cmwnLCB0aGlzLnJlZnJlc2gsIHRoaXMgKTtcblx0XHR0aGlzLm9uKCAnc2NhbicsIHRoaXMuc2NhbkltYWdlLCB0aGlzICk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRyaWdnZXIgYSBzY2FuIG9mIHRoZSBlbWJlZGRlZCBVUkwncyBjb250ZW50IGZvciBtZXRhZGF0YSByZXF1aXJlZCB0byBlbWJlZC5cblx0ICpcblx0ICogQGZpcmVzIHdwLm1lZGlhLmNvbnRyb2xsZXIuRW1iZWQjc2NhblxuXHQgKi9cblx0c2NhbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHNjYW5uZXJzLFxuXHRcdFx0ZW1iZWQgPSB0aGlzLFxuXHRcdFx0YXR0cmlidXRlcyA9IHtcblx0XHRcdFx0dHlwZTogJ2xpbmsnLFxuXHRcdFx0XHRzY2FubmVyczogW11cblx0XHRcdH07XG5cblx0XHQvLyBTY2FuIGlzIHRyaWdnZXJlZCB3aXRoIHRoZSBsaXN0IG9mIGBhdHRyaWJ1dGVzYCB0byBzZXQgb24gdGhlXG5cdFx0Ly8gc3RhdGUsIHVzZWZ1bCBmb3IgdGhlICd0eXBlJyBhdHRyaWJ1dGUgYW5kICdzY2FubmVycycgYXR0cmlidXRlLFxuXHRcdC8vIGFuIGFycmF5IG9mIHByb21pc2Ugb2JqZWN0cyBmb3IgYXN5bmNocm9ub3VzIHNjYW4gb3BlcmF0aW9ucy5cblx0XHRpZiAoIHRoaXMucHJvcHMuZ2V0KCd1cmwnKSApIHtcblx0XHRcdHRoaXMudHJpZ2dlciggJ3NjYW4nLCBhdHRyaWJ1dGVzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBhdHRyaWJ1dGVzLnNjYW5uZXJzLmxlbmd0aCApIHtcblx0XHRcdHNjYW5uZXJzID0gYXR0cmlidXRlcy5zY2FubmVycyA9ICQud2hlbi5hcHBseSggJCwgYXR0cmlidXRlcy5zY2FubmVycyApO1xuXHRcdFx0c2Nhbm5lcnMuYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBlbWJlZC5nZXQoJ3NjYW5uZXJzJykgPT09IHNjYW5uZXJzICkge1xuXHRcdFx0XHRcdGVtYmVkLnNldCggJ2xvYWRpbmcnLCBmYWxzZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YXR0cmlidXRlcy5zY2FubmVycyA9IG51bGw7XG5cdFx0fVxuXG5cdFx0YXR0cmlidXRlcy5sb2FkaW5nID0gISEgYXR0cmlidXRlcy5zY2FubmVycztcblx0XHR0aGlzLnNldCggYXR0cmlidXRlcyApO1xuXHR9LFxuXHQvKipcblx0ICogVHJ5IHNjYW5uaW5nIHRoZSBlbWJlZCBhcyBhbiBpbWFnZSB0byBkaXNjb3ZlciBpdHMgZGltZW5zaW9ucy5cblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IGF0dHJpYnV0ZXNcblx0ICovXG5cdHNjYW5JbWFnZTogZnVuY3Rpb24oIGF0dHJpYnV0ZXMgKSB7XG5cdFx0dmFyIGZyYW1lID0gdGhpcy5mcmFtZSxcblx0XHRcdHN0YXRlID0gdGhpcyxcblx0XHRcdHVybCA9IHRoaXMucHJvcHMuZ2V0KCd1cmwnKSxcblx0XHRcdGltYWdlID0gbmV3IEltYWdlKCksXG5cdFx0XHRkZWZlcnJlZCA9ICQuRGVmZXJyZWQoKTtcblxuXHRcdGF0dHJpYnV0ZXMuc2Nhbm5lcnMucHVzaCggZGVmZXJyZWQucHJvbWlzZSgpICk7XG5cblx0XHQvLyBUcnkgdG8gbG9hZCB0aGUgaW1hZ2UgYW5kIGZpbmQgaXRzIHdpZHRoL2hlaWdodC5cblx0XHRpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbigpIHtcblx0XHRcdGRlZmVycmVkLnJlc29sdmUoKTtcblxuXHRcdFx0aWYgKCBzdGF0ZSAhPT0gZnJhbWUuc3RhdGUoKSB8fCB1cmwgIT09IHN0YXRlLnByb3BzLmdldCgndXJsJykgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0c3RhdGUuc2V0KHtcblx0XHRcdFx0dHlwZTogJ2ltYWdlJ1xuXHRcdFx0fSk7XG5cblx0XHRcdHN0YXRlLnByb3BzLnNldCh7XG5cdFx0XHRcdHdpZHRoOiAgaW1hZ2Uud2lkdGgsXG5cdFx0XHRcdGhlaWdodDogaW1hZ2UuaGVpZ2h0XG5cdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0aW1hZ2Uub25lcnJvciA9IGRlZmVycmVkLnJlamVjdDtcblx0XHRpbWFnZS5zcmMgPSB1cmw7XG5cdH0sXG5cblx0cmVmcmVzaDogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5mcmFtZS50b29sYmFyLmdldCgpLnJlZnJlc2goKTtcblx0fSxcblxuXHRyZXNldDogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5wcm9wcy5jbGVhcigpLnNldCh7IHVybDogJycgfSk7XG5cblx0XHRpZiAoIHRoaXMuYWN0aXZlICkge1xuXHRcdFx0dGhpcy5yZWZyZXNoKCk7XG5cdFx0fVxuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBFbWJlZDtcbiIsIi8qKlxuICogd3AubWVkaWEuY29udHJvbGxlci5GZWF0dXJlZEltYWdlXG4gKlxuICogQSBzdGF0ZSBmb3Igc2VsZWN0aW5nIGEgZmVhdHVyZWQgaW1hZ2UgZm9yIGEgcG9zdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5jb250cm9sbGVyLkxpYnJhcnlcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlXG4gKiBAYXVnbWVudHMgQmFja2JvbmUuTW9kZWxcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlc10gICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBhdHRyaWJ1dGVzIGhhc2ggcGFzc2VkIHRvIHRoZSBzdGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmlkPWZlYXR1cmVkLWltYWdlXSAgICAgICAgVW5pcXVlIGlkZW50aWZpZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy50aXRsZT1TZXQgRmVhdHVyZWQgSW1hZ2VdIFRpdGxlIGZvciB0aGUgc3RhdGUuIERpc3BsYXlzIGluIHRoZSBtZWRpYSBtZW51IGFuZCB0aGUgZnJhbWUncyB0aXRsZSByZWdpb24uXG4gKiBAcGFyYW0ge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzfSBbYXR0cmlidXRlcy5saWJyYXJ5XSAgICAgICAgICAgICAgICAgIFRoZSBhdHRhY2htZW50cyBjb2xsZWN0aW9uIHRvIGJyb3dzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgb25lIGlzIG5vdCBzdXBwbGllZCwgYSBjb2xsZWN0aW9uIG9mIGFsbCBpbWFnZXMgd2lsbCBiZSBjcmVhdGVkLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMubXVsdGlwbGU9ZmFsc2VdICAgICAgICAgICBXaGV0aGVyIG11bHRpLXNlbGVjdCBpcyBlbmFibGVkLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuY29udGVudD11cGxvYWRdICAgICAgICAgICBJbml0aWFsIG1vZGUgZm9yIHRoZSBjb250ZW50IHJlZ2lvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3ZlcnJpZGRlbiBieSBwZXJzaXN0ZW50IHVzZXIgc2V0dGluZyBpZiAnY29udGVudFVzZXJTZXR0aW5nJyBpcyB0cnVlLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMubWVudT1kZWZhdWx0XSAgICAgICAgICAgICBJbml0aWFsIG1vZGUgZm9yIHRoZSBtZW51IHJlZ2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnJvdXRlcj1icm93c2VdICAgICAgICAgICAgSW5pdGlhbCBtb2RlIGZvciB0aGUgcm91dGVyIHJlZ2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnRvb2xiYXI9ZmVhdHVyZWQtaW1hZ2VdICAgSW5pdGlhbCBtb2RlIGZvciB0aGUgdG9vbGJhciByZWdpb24uXG4gKiBAcGFyYW0ge2ludH0gICAgICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5wcmlvcml0eT02MF0gICAgICAgICAgICAgIFRoZSBwcmlvcml0eSBmb3IgdGhlIHN0YXRlIGxpbmsgaW4gdGhlIG1lZGlhIG1lbnUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5zZWFyY2hhYmxlPXRydWVdICAgICAgICAgIFdoZXRoZXIgdGhlIGxpYnJhcnkgaXMgc2VhcmNoYWJsZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbnxzdHJpbmd9ICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmZpbHRlcmFibGU9ZmFsc2VdICAgICAgICAgV2hldGhlciB0aGUgbGlicmFyeSBpcyBmaWx0ZXJhYmxlLCBhbmQgaWYgc28gd2hhdCBmaWx0ZXJzIHNob3VsZCBiZSBzaG93bi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXB0cyAnYWxsJywgJ3VwbG9hZGVkJywgb3IgJ3VuYXR0YWNoZWQnLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuc29ydGFibGU9dHJ1ZV0gICAgICAgICAgICBXaGV0aGVyIHRoZSBBdHRhY2htZW50cyBzaG91bGQgYmUgc29ydGFibGUuIERlcGVuZHMgb24gdGhlIG9yZGVyYnkgcHJvcGVydHkgYmVpbmcgc2V0IHRvIG1lbnVPcmRlciBvbiB0aGUgYXR0YWNobWVudHMgY29sbGVjdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmF1dG9TZWxlY3Q9dHJ1ZV0gICAgICAgICAgV2hldGhlciBhbiB1cGxvYWRlZCBhdHRhY2htZW50IHNob3VsZCBiZSBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHRoZSBzZWxlY3Rpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5kZXNjcmliZT1mYWxzZV0gICAgICAgICAgIFdoZXRoZXIgdG8gb2ZmZXIgVUkgdG8gZGVzY3JpYmUgYXR0YWNobWVudHMgLSBlLmcuIGNhcHRpb25pbmcgaW1hZ2VzIGluIGEgZ2FsbGVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmNvbnRlbnRVc2VyU2V0dGluZz10cnVlXSAgV2hldGhlciB0aGUgY29udGVudCByZWdpb24ncyBtb2RlIHNob3VsZCBiZSBzZXQgYW5kIHBlcnNpc3RlZCBwZXIgdXNlci5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnN5bmNTZWxlY3Rpb249dHJ1ZV0gICAgICAgV2hldGhlciB0aGUgQXR0YWNobWVudHMgc2VsZWN0aW9uIHNob3VsZCBiZSBwZXJzaXN0ZWQgZnJvbSB0aGUgbGFzdCBzdGF0ZS5cbiAqL1xudmFyIEF0dGFjaG1lbnQgPSB3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50LFxuXHRMaWJyYXJ5ID0gd3AubWVkaWEuY29udHJvbGxlci5MaWJyYXJ5LFxuXHRsMTBuID0gd3AubWVkaWEudmlldy5sMTBuLFxuXHRGZWF0dXJlZEltYWdlO1xuXG5GZWF0dXJlZEltYWdlID0gTGlicmFyeS5leHRlbmQoe1xuXHRkZWZhdWx0czogXy5kZWZhdWx0cyh7XG5cdFx0aWQ6ICAgICAgICAgICAgJ2ZlYXR1cmVkLWltYWdlJyxcblx0XHR0aXRsZTogICAgICAgICBsMTBuLnNldEZlYXR1cmVkSW1hZ2VUaXRsZSxcblx0XHRtdWx0aXBsZTogICAgICBmYWxzZSxcblx0XHRmaWx0ZXJhYmxlOiAgICAndXBsb2FkZWQnLFxuXHRcdHRvb2xiYXI6ICAgICAgICdmZWF0dXJlZC1pbWFnZScsXG5cdFx0cHJpb3JpdHk6ICAgICAgNjAsXG5cdFx0c3luY1NlbGVjdGlvbjogdHJ1ZVxuXHR9LCBMaWJyYXJ5LnByb3RvdHlwZS5kZWZhdWx0cyApLFxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMy41LjBcblx0ICovXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBsaWJyYXJ5LCBjb21wYXJhdG9yO1xuXG5cdFx0Ly8gSWYgd2UgaGF2ZW4ndCBiZWVuIHByb3ZpZGVkIGEgYGxpYnJhcnlgLCBjcmVhdGUgYSBgU2VsZWN0aW9uYC5cblx0XHRpZiAoICEgdGhpcy5nZXQoJ2xpYnJhcnknKSApIHtcblx0XHRcdHRoaXMuc2V0KCAnbGlicmFyeScsIHdwLm1lZGlhLnF1ZXJ5KHsgdHlwZTogJ2ltYWdlJyB9KSApO1xuXHRcdH1cblxuXHRcdExpYnJhcnkucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXG5cdFx0bGlicmFyeSAgICA9IHRoaXMuZ2V0KCdsaWJyYXJ5Jyk7XG5cdFx0Y29tcGFyYXRvciA9IGxpYnJhcnkuY29tcGFyYXRvcjtcblxuXHRcdC8vIE92ZXJsb2FkIHRoZSBsaWJyYXJ5J3MgY29tcGFyYXRvciB0byBwdXNoIGl0ZW1zIHRoYXQgYXJlIG5vdCBpblxuXHRcdC8vIHRoZSBtaXJyb3JlZCBxdWVyeSB0byB0aGUgZnJvbnQgb2YgdGhlIGFnZ3JlZ2F0ZSBjb2xsZWN0aW9uLlxuXHRcdGxpYnJhcnkuY29tcGFyYXRvciA9IGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdFx0dmFyIGFJblF1ZXJ5ID0gISEgdGhpcy5taXJyb3JpbmcuZ2V0KCBhLmNpZCApLFxuXHRcdFx0XHRiSW5RdWVyeSA9ICEhIHRoaXMubWlycm9yaW5nLmdldCggYi5jaWQgKTtcblxuXHRcdFx0aWYgKCAhIGFJblF1ZXJ5ICYmIGJJblF1ZXJ5ICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9IGVsc2UgaWYgKCBhSW5RdWVyeSAmJiAhIGJJblF1ZXJ5ICkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBjb21wYXJhdG9yLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Ly8gQWRkIGFsbCBpdGVtcyBpbiB0aGUgc2VsZWN0aW9uIHRvIHRoZSBsaWJyYXJ5LCBzbyBhbnkgZmVhdHVyZWRcblx0XHQvLyBpbWFnZXMgdGhhdCBhcmUgbm90IGluaXRpYWxseSBsb2FkZWQgc3RpbGwgYXBwZWFyLlxuXHRcdGxpYnJhcnkub2JzZXJ2ZSggdGhpcy5nZXQoJ3NlbGVjdGlvbicpICk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKi9cblx0YWN0aXZhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMudXBkYXRlU2VsZWN0aW9uKCk7XG5cdFx0dGhpcy5mcmFtZS5vbiggJ29wZW4nLCB0aGlzLnVwZGF0ZVNlbGVjdGlvbiwgdGhpcyApO1xuXG5cdFx0TGlicmFyeS5wcm90b3R5cGUuYWN0aXZhdGUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMy41LjBcblx0ICovXG5cdGRlYWN0aXZhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuZnJhbWUub2ZmKCAnb3BlbicsIHRoaXMudXBkYXRlU2VsZWN0aW9uLCB0aGlzICk7XG5cblx0XHRMaWJyYXJ5LnByb3RvdHlwZS5kZWFjdGl2YXRlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0fSxcblxuXHQvKipcblx0ICogQHNpbmNlIDMuNS4wXG5cdCAqL1xuXHR1cGRhdGVTZWxlY3Rpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBzZWxlY3Rpb24gPSB0aGlzLmdldCgnc2VsZWN0aW9uJyksXG5cdFx0XHRpZCA9IHdwLm1lZGlhLnZpZXcuc2V0dGluZ3MucG9zdC5mZWF0dXJlZEltYWdlSWQsXG5cdFx0XHRhdHRhY2htZW50O1xuXG5cdFx0aWYgKCAnJyAhPT0gaWQgJiYgLTEgIT09IGlkICkge1xuXHRcdFx0YXR0YWNobWVudCA9IEF0dGFjaG1lbnQuZ2V0KCBpZCApO1xuXHRcdFx0YXR0YWNobWVudC5mZXRjaCgpO1xuXHRcdH1cblxuXHRcdHNlbGVjdGlvbi5yZXNldCggYXR0YWNobWVudCA/IFsgYXR0YWNobWVudCBdIDogW10gKTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gRmVhdHVyZWRJbWFnZTtcbiIsIi8qKlxuICogd3AubWVkaWEuY29udHJvbGxlci5HYWxsZXJ5QWRkXG4gKlxuICogQSBzdGF0ZSBmb3Igc2VsZWN0aW5nIG1vcmUgaW1hZ2VzIHRvIGFkZCB0byBhIGdhbGxlcnkuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuY29udHJvbGxlci5MaWJyYXJ5XG4gKiBAYXVnbWVudHMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZVxuICogQGF1Z21lbnRzIEJhY2tib25lLk1vZGVsXG4gKlxuICogQHBhcmFtIHtvYmplY3R9ICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXNdICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBhdHRyaWJ1dGVzIGhhc2ggcGFzc2VkIHRvIHRoZSBzdGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmlkPWdhbGxlcnktbGlicmFyeV0gICAgICBVbmlxdWUgaWRlbnRpZmllci5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnRpdGxlPUFkZCB0byBHYWxsZXJ5XSAgICBUaXRsZSBmb3IgdGhlIHN0YXRlLiBEaXNwbGF5cyBpbiB0aGUgZnJhbWUncyB0aXRsZSByZWdpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5tdWx0aXBsZT1hZGRdICAgICAgICAgICAgV2hldGhlciBtdWx0aS1zZWxlY3QgaXMgZW5hYmxlZC4gQHRvZG8gJ2FkZCcgZG9lc24ndCBzZWVtIGRvIGFueXRoaW5nIHNwZWNpYWwsIGFuZCBnZXRzIHVzZWQgYXMgYSBib29sZWFuLlxuICogQHBhcmFtIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c30gW2F0dHJpYnV0ZXMubGlicmFyeV0gICAgICAgICAgICAgICAgIFRoZSBhdHRhY2htZW50cyBjb2xsZWN0aW9uIHRvIGJyb3dzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBvbmUgaXMgbm90IHN1cHBsaWVkLCBhIGNvbGxlY3Rpb24gb2YgYWxsIGltYWdlcyB3aWxsIGJlIGNyZWF0ZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW58c3RyaW5nfSAgICAgICAgICAgICBbYXR0cmlidXRlcy5maWx0ZXJhYmxlPXVwbG9hZGVkXSAgICAgV2hldGhlciB0aGUgbGlicmFyeSBpcyBmaWx0ZXJhYmxlLCBhbmQgaWYgc28gd2hhdCBmaWx0ZXJzIHNob3VsZCBiZSBzaG93bi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHRzICdhbGwnLCAndXBsb2FkZWQnLCBvciAndW5hdHRhY2hlZCcuXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5tZW51PWdhbGxlcnldICAgICAgICAgICAgSW5pdGlhbCBtb2RlIGZvciB0aGUgbWVudSByZWdpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5jb250ZW50PXVwbG9hZF0gICAgICAgICAgSW5pdGlhbCBtb2RlIGZvciB0aGUgY29udGVudCByZWdpb24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3ZlcnJpZGRlbiBieSBwZXJzaXN0ZW50IHVzZXIgc2V0dGluZyBpZiAnY29udGVudFVzZXJTZXR0aW5nJyBpcyB0cnVlLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMucm91dGVyPWJyb3dzZV0gICAgICAgICAgIEluaXRpYWwgbW9kZSBmb3IgdGhlIHJvdXRlciByZWdpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy50b29sYmFyPWdhbGxlcnktYWRkXSAgICAgSW5pdGlhbCBtb2RlIGZvciB0aGUgdG9vbGJhciByZWdpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5zZWFyY2hhYmxlPXRydWVdICAgICAgICAgV2hldGhlciB0aGUgbGlicmFyeSBpcyBzZWFyY2hhYmxlLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuc29ydGFibGU9dHJ1ZV0gICAgICAgICAgIFdoZXRoZXIgdGhlIEF0dGFjaG1lbnRzIHNob3VsZCBiZSBzb3J0YWJsZS4gRGVwZW5kcyBvbiB0aGUgb3JkZXJieSBwcm9wZXJ0eSBiZWluZyBzZXQgdG8gbWVudU9yZGVyIG9uIHRoZSBhdHRhY2htZW50cyBjb2xsZWN0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuYXV0b1NlbGVjdD10cnVlXSAgICAgICAgIFdoZXRoZXIgYW4gdXBsb2FkZWQgYXR0YWNobWVudCBzaG91bGQgYmUgYXV0b21hdGljYWxseSBhZGRlZCB0byB0aGUgc2VsZWN0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuY29udGVudFVzZXJTZXR0aW5nPXRydWVdIFdoZXRoZXIgdGhlIGNvbnRlbnQgcmVnaW9uJ3MgbW9kZSBzaG91bGQgYmUgc2V0IGFuZCBwZXJzaXN0ZWQgcGVyIHVzZXIuXG4gKiBAcGFyYW0ge2ludH0gICAgICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5wcmlvcml0eT0xMDBdICAgICAgICAgICAgVGhlIHByaW9yaXR5IGZvciB0aGUgc3RhdGUgbGluayBpbiB0aGUgbWVkaWEgbWVudS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnN5bmNTZWxlY3Rpb249ZmFsc2VdICAgICBXaGV0aGVyIHRoZSBBdHRhY2htZW50cyBzZWxlY3Rpb24gc2hvdWxkIGJlIHBlcnNpc3RlZCBmcm9tIHRoZSBsYXN0IHN0YXRlLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIGZhbHNlIGJlY2F1c2UgZm9yIHRoaXMgc3RhdGUsIGJlY2F1c2UgdGhlIGxpYnJhcnkgb2YgdGhlIEVkaXQgR2FsbGVyeSBzdGF0ZSBpcyB0aGUgc2VsZWN0aW9uLlxuICovXG52YXIgU2VsZWN0aW9uID0gd3AubWVkaWEubW9kZWwuU2VsZWN0aW9uLFxuXHRMaWJyYXJ5ID0gd3AubWVkaWEuY29udHJvbGxlci5MaWJyYXJ5LFxuXHRsMTBuID0gd3AubWVkaWEudmlldy5sMTBuLFxuXHRHYWxsZXJ5QWRkO1xuXG5HYWxsZXJ5QWRkID0gTGlicmFyeS5leHRlbmQoe1xuXHRkZWZhdWx0czogXy5kZWZhdWx0cyh7XG5cdFx0aWQ6ICAgICAgICAgICAgJ2dhbGxlcnktbGlicmFyeScsXG5cdFx0dGl0bGU6ICAgICAgICAgbDEwbi5hZGRUb0dhbGxlcnlUaXRsZSxcblx0XHRtdWx0aXBsZTogICAgICAnYWRkJyxcblx0XHRmaWx0ZXJhYmxlOiAgICAndXBsb2FkZWQnLFxuXHRcdG1lbnU6ICAgICAgICAgICdnYWxsZXJ5Jyxcblx0XHR0b29sYmFyOiAgICAgICAnZ2FsbGVyeS1hZGQnLFxuXHRcdHByaW9yaXR5OiAgICAgIDEwMCxcblx0XHRzeW5jU2VsZWN0aW9uOiBmYWxzZVxuXHR9LCBMaWJyYXJ5LnByb3RvdHlwZS5kZWZhdWx0cyApLFxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMy41LjBcblx0ICovXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdC8vIElmIGEgbGlicmFyeSB3YXNuJ3Qgc3VwcGxpZWQsIGNyZWF0ZSBhIGxpYnJhcnkgb2YgaW1hZ2VzLlxuXHRcdGlmICggISB0aGlzLmdldCgnbGlicmFyeScpICkge1xuXHRcdFx0dGhpcy5zZXQoICdsaWJyYXJ5Jywgd3AubWVkaWEucXVlcnkoeyB0eXBlOiAnaW1hZ2UnIH0pICk7XG5cdFx0fVxuXG5cdFx0TGlicmFyeS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKi9cblx0YWN0aXZhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBsaWJyYXJ5ID0gdGhpcy5nZXQoJ2xpYnJhcnknKSxcblx0XHRcdGVkaXQgICAgPSB0aGlzLmZyYW1lLnN0YXRlKCdnYWxsZXJ5LWVkaXQnKS5nZXQoJ2xpYnJhcnknKTtcblxuXHRcdGlmICggdGhpcy5lZGl0TGlicmFyeSAmJiB0aGlzLmVkaXRMaWJyYXJ5ICE9PSBlZGl0ICkge1xuXHRcdFx0bGlicmFyeS51bm9ic2VydmUoIHRoaXMuZWRpdExpYnJhcnkgKTtcblx0XHR9XG5cblx0XHQvLyBBY2NlcHRzIGF0dGFjaG1lbnRzIHRoYXQgZXhpc3QgaW4gdGhlIG9yaWdpbmFsIGxpYnJhcnkgYW5kXG5cdFx0Ly8gdGhhdCBkbyBub3QgZXhpc3QgaW4gZ2FsbGVyeSdzIGxpYnJhcnkuXG5cdFx0bGlicmFyeS52YWxpZGF0b3IgPSBmdW5jdGlvbiggYXR0YWNobWVudCApIHtcblx0XHRcdHJldHVybiAhISB0aGlzLm1pcnJvcmluZy5nZXQoIGF0dGFjaG1lbnQuY2lkICkgJiYgISBlZGl0LmdldCggYXR0YWNobWVudC5jaWQgKSAmJiBTZWxlY3Rpb24ucHJvdG90eXBlLnZhbGlkYXRvci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fTtcblxuXHRcdC8vIFJlc2V0IHRoZSBsaWJyYXJ5IHRvIGVuc3VyZSB0aGF0IGFsbCBhdHRhY2htZW50cyBhcmUgcmUtYWRkZWRcblx0XHQvLyB0byB0aGUgY29sbGVjdGlvbi4gRG8gc28gc2lsZW50bHksIGFzIGNhbGxpbmcgYG9ic2VydmVgIHdpbGxcblx0XHQvLyB0cmlnZ2VyIHRoZSBgcmVzZXRgIGV2ZW50LlxuXHRcdGxpYnJhcnkucmVzZXQoIGxpYnJhcnkubWlycm9yaW5nLm1vZGVscywgeyBzaWxlbnQ6IHRydWUgfSk7XG5cdFx0bGlicmFyeS5vYnNlcnZlKCBlZGl0ICk7XG5cdFx0dGhpcy5lZGl0TGlicmFyeSA9IGVkaXQ7XG5cblx0XHRMaWJyYXJ5LnByb3RvdHlwZS5hY3RpdmF0ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEdhbGxlcnlBZGQ7XG4iLCIvKipcbiAqIHdwLm1lZGlhLmNvbnRyb2xsZXIuR2FsbGVyeUVkaXRcbiAqXG4gKiBBIHN0YXRlIGZvciBlZGl0aW5nIGEgZ2FsbGVyeSdzIGltYWdlcyBhbmQgc2V0dGluZ3MuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuY29udHJvbGxlci5MaWJyYXJ5XG4gKiBAYXVnbWVudHMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZVxuICogQGF1Z21lbnRzIEJhY2tib25lLk1vZGVsXG4gKlxuICogQHBhcmFtIHtvYmplY3R9ICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXNdICAgICAgICAgICAgICAgICAgICAgICBUaGUgYXR0cmlidXRlcyBoYXNoIHBhc3NlZCB0byB0aGUgc3RhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5pZD1nYWxsZXJ5LWVkaXRdICAgICAgIFVuaXF1ZSBpZGVudGlmaWVyLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMudGl0bGU9RWRpdCBHYWxsZXJ5XSAgICBUaXRsZSBmb3IgdGhlIHN0YXRlLiBEaXNwbGF5cyBpbiB0aGUgZnJhbWUncyB0aXRsZSByZWdpb24uXG4gKiBAcGFyYW0ge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzfSBbYXR0cmlidXRlcy5saWJyYXJ5XSAgICAgICAgICAgICAgIFRoZSBjb2xsZWN0aW9uIG9mIGF0dGFjaG1lbnRzIGluIHRoZSBnYWxsZXJ5LlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBvbmUgaXMgbm90IHN1cHBsaWVkLCBhbiBlbXB0eSBtZWRpYS5tb2RlbC5TZWxlY3Rpb24gY29sbGVjdGlvbiBpcyBjcmVhdGVkLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMubXVsdGlwbGU9ZmFsc2VdICAgICAgICBXaGV0aGVyIG11bHRpLXNlbGVjdCBpcyBlbmFibGVkLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuc2VhcmNoYWJsZT1mYWxzZV0gICAgICBXaGV0aGVyIHRoZSBsaWJyYXJ5IGlzIHNlYXJjaGFibGUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5zb3J0YWJsZT10cnVlXSAgICAgICAgIFdoZXRoZXIgdGhlIEF0dGFjaG1lbnRzIHNob3VsZCBiZSBzb3J0YWJsZS4gRGVwZW5kcyBvbiB0aGUgb3JkZXJieSBwcm9wZXJ0eSBiZWluZyBzZXQgdG8gbWVudU9yZGVyIG9uIHRoZSBhdHRhY2htZW50cyBjb2xsZWN0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuZGF0ZT10cnVlXSAgICAgICAgICAgICBXaGV0aGVyIHRvIHNob3cgdGhlIGRhdGUgZmlsdGVyIGluIHRoZSBicm93c2VyJ3MgdG9vbGJhci5cbiAqIEBwYXJhbSB7c3RyaW5nfGZhbHNlfSAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmNvbnRlbnQ9YnJvd3NlXSAgICAgICAgSW5pdGlhbCBtb2RlIGZvciB0aGUgY29udGVudCByZWdpb24uXG4gKiBAcGFyYW0ge3N0cmluZ3xmYWxzZX0gICAgICAgICAgICAgICBbYXR0cmlidXRlcy50b29sYmFyPWltYWdlLWRldGFpbHNdIEluaXRpYWwgbW9kZSBmb3IgdGhlIHRvb2xiYXIgcmVnaW9uLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuZGVzY3JpYmU9dHJ1ZV0gICAgICAgICBXaGV0aGVyIHRvIG9mZmVyIFVJIHRvIGRlc2NyaWJlIGF0dGFjaG1lbnRzIC0gZS5nLiBjYXB0aW9uaW5nIGltYWdlcyBpbiBhIGdhbGxlcnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5kaXNwbGF5U2V0dGluZ3M9dHJ1ZV0gIFdoZXRoZXIgdG8gc2hvdyB0aGUgYXR0YWNobWVudCBkaXNwbGF5IHNldHRpbmdzIGludGVyZmFjZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmRyYWdJbmZvPXRydWVdICAgICAgICAgV2hldGhlciB0byBzaG93IGluc3RydWN0aW9uYWwgdGV4dCBhYm91dCB0aGUgYXR0YWNobWVudHMgYmVpbmcgc29ydGFibGUuXG4gKiBAcGFyYW0ge2ludH0gICAgICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5pZGVhbENvbHVtbldpZHRoPTE3MF0gIFRoZSBpZGVhbCBjb2x1bW4gd2lkdGggaW4gcGl4ZWxzIGZvciBhdHRhY2htZW50cy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmVkaXRpbmc9ZmFsc2VdICAgICAgICAgV2hldGhlciB0aGUgZ2FsbGVyeSBpcyBiZWluZyBjcmVhdGVkLCBvciBlZGl0aW5nIGFuIGV4aXN0aW5nIGluc3RhbmNlLlxuICogQHBhcmFtIHtpbnR9ICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMucHJpb3JpdHk9NjBdICAgICAgICAgICBUaGUgcHJpb3JpdHkgZm9yIHRoZSBzdGF0ZSBsaW5rIGluIHRoZSBtZWRpYSBtZW51LlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuc3luY1NlbGVjdGlvbj1mYWxzZV0gICBXaGV0aGVyIHRoZSBBdHRhY2htZW50cyBzZWxlY3Rpb24gc2hvdWxkIGJlIHBlcnNpc3RlZCBmcm9tIHRoZSBsYXN0IHN0YXRlLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byBmYWxzZSBmb3IgdGhpcyBzdGF0ZSwgYmVjYXVzZSB0aGUgbGlicmFyeSBwYXNzZWQgaW4gICppcyogdGhlIHNlbGVjdGlvbi5cbiAqIEBwYXJhbSB7dmlld30gICAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLkF0dGFjaG1lbnRWaWV3XSAgICAgICAgVGhlIHNpbmdsZSBgQXR0YWNobWVudGAgdmlldyB0byBiZSB1c2VkIGluIHRoZSBgQXR0YWNobWVudHNgLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBub25lIHN1cHBsaWVkLCBkZWZhdWx0cyB0byB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnQuRWRpdExpYnJhcnkuXG4gKi9cbnZhciBMaWJyYXJ5ID0gd3AubWVkaWEuY29udHJvbGxlci5MaWJyYXJ5LFxuXHRsMTBuID0gd3AubWVkaWEudmlldy5sMTBuLFxuXHRHYWxsZXJ5RWRpdDtcblxuR2FsbGVyeUVkaXQgPSBMaWJyYXJ5LmV4dGVuZCh7XG5cdGRlZmF1bHRzOiB7XG5cdFx0aWQ6ICAgICAgICAgICAgICAgJ2dhbGxlcnktZWRpdCcsXG5cdFx0dGl0bGU6ICAgICAgICAgICAgbDEwbi5lZGl0R2FsbGVyeVRpdGxlLFxuXHRcdG11bHRpcGxlOiAgICAgICAgIGZhbHNlLFxuXHRcdHNlYXJjaGFibGU6ICAgICAgIGZhbHNlLFxuXHRcdHNvcnRhYmxlOiAgICAgICAgIHRydWUsXG5cdFx0ZGF0ZTogICAgICAgICAgICAgZmFsc2UsXG5cdFx0ZGlzcGxheTogICAgICAgICAgZmFsc2UsXG5cdFx0Y29udGVudDogICAgICAgICAgJ2Jyb3dzZScsXG5cdFx0dG9vbGJhcjogICAgICAgICAgJ2dhbGxlcnktZWRpdCcsXG5cdFx0ZGVzY3JpYmU6ICAgICAgICAgdHJ1ZSxcblx0XHRkaXNwbGF5U2V0dGluZ3M6ICB0cnVlLFxuXHRcdGRyYWdJbmZvOiAgICAgICAgIHRydWUsXG5cdFx0aWRlYWxDb2x1bW5XaWR0aDogMTcwLFxuXHRcdGVkaXRpbmc6ICAgICAgICAgIGZhbHNlLFxuXHRcdHByaW9yaXR5OiAgICAgICAgIDYwLFxuXHRcdHN5bmNTZWxlY3Rpb246ICAgIGZhbHNlXG5cdH0sXG5cblx0LyoqXG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKi9cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0Ly8gSWYgd2UgaGF2ZW4ndCBiZWVuIHByb3ZpZGVkIGEgYGxpYnJhcnlgLCBjcmVhdGUgYSBgU2VsZWN0aW9uYC5cblx0XHRpZiAoICEgdGhpcy5nZXQoJ2xpYnJhcnknKSApIHtcblx0XHRcdHRoaXMuc2V0KCAnbGlicmFyeScsIG5ldyB3cC5tZWRpYS5tb2RlbC5TZWxlY3Rpb24oKSApO1xuXHRcdH1cblxuXHRcdC8vIFRoZSBzaW5nbGUgYEF0dGFjaG1lbnRgIHZpZXcgdG8gYmUgdXNlZCBpbiB0aGUgYEF0dGFjaG1lbnRzYCB2aWV3LlxuXHRcdGlmICggISB0aGlzLmdldCgnQXR0YWNobWVudFZpZXcnKSApIHtcblx0XHRcdHRoaXMuc2V0KCAnQXR0YWNobWVudFZpZXcnLCB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnQuRWRpdExpYnJhcnkgKTtcblx0XHR9XG5cblx0XHRMaWJyYXJ5LnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0fSxcblxuXHQvKipcblx0ICogQHNpbmNlIDMuNS4wXG5cdCAqL1xuXHRhY3RpdmF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGxpYnJhcnkgPSB0aGlzLmdldCgnbGlicmFyeScpO1xuXG5cdFx0Ly8gTGltaXQgdGhlIGxpYnJhcnkgdG8gaW1hZ2VzIG9ubHkuXG5cdFx0bGlicmFyeS5wcm9wcy5zZXQoICd0eXBlJywgJ2ltYWdlJyApO1xuXG5cdFx0Ly8gV2F0Y2ggZm9yIHVwbG9hZGVkIGF0dGFjaG1lbnRzLlxuXHRcdHRoaXMuZ2V0KCdsaWJyYXJ5Jykub2JzZXJ2ZSggd3AuVXBsb2FkZXIucXVldWUgKTtcblxuXHRcdHRoaXMuZnJhbWUub24oICdjb250ZW50OnJlbmRlcjpicm93c2UnLCB0aGlzLmdhbGxlcnlTZXR0aW5ncywgdGhpcyApO1xuXG5cdFx0TGlicmFyeS5wcm90b3R5cGUuYWN0aXZhdGUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMy41LjBcblx0ICovXG5cdGRlYWN0aXZhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdC8vIFN0b3Agd2F0Y2hpbmcgZm9yIHVwbG9hZGVkIGF0dGFjaG1lbnRzLlxuXHRcdHRoaXMuZ2V0KCdsaWJyYXJ5JykudW5vYnNlcnZlKCB3cC5VcGxvYWRlci5xdWV1ZSApO1xuXG5cdFx0dGhpcy5mcmFtZS5vZmYoICdjb250ZW50OnJlbmRlcjpicm93c2UnLCB0aGlzLmdhbGxlcnlTZXR0aW5ncywgdGhpcyApO1xuXG5cdFx0TGlicmFyeS5wcm90b3R5cGUuZGVhY3RpdmF0ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKlxuXHQgKiBAcGFyYW0gYnJvd3NlclxuXHQgKi9cblx0Z2FsbGVyeVNldHRpbmdzOiBmdW5jdGlvbiggYnJvd3NlciApIHtcblx0XHRpZiAoICEgdGhpcy5nZXQoJ2Rpc3BsYXlTZXR0aW5ncycpICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBsaWJyYXJ5ID0gdGhpcy5nZXQoJ2xpYnJhcnknKTtcblxuXHRcdGlmICggISBsaWJyYXJ5IHx8ICEgYnJvd3NlciApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRsaWJyYXJ5LmdhbGxlcnkgPSBsaWJyYXJ5LmdhbGxlcnkgfHwgbmV3IEJhY2tib25lLk1vZGVsKCk7XG5cblx0XHRicm93c2VyLnNpZGViYXIuc2V0KHtcblx0XHRcdGdhbGxlcnk6IG5ldyB3cC5tZWRpYS52aWV3LlNldHRpbmdzLkdhbGxlcnkoe1xuXHRcdFx0XHRjb250cm9sbGVyOiB0aGlzLFxuXHRcdFx0XHRtb2RlbDogICAgICBsaWJyYXJ5LmdhbGxlcnksXG5cdFx0XHRcdHByaW9yaXR5OiAgIDQwXG5cdFx0XHR9KVxuXHRcdH0pO1xuXG5cdFx0YnJvd3Nlci50b29sYmFyLnNldCggJ3JldmVyc2UnLCB7XG5cdFx0XHR0ZXh0OiAgICAgbDEwbi5yZXZlcnNlT3JkZXIsXG5cdFx0XHRwcmlvcml0eTogODAsXG5cblx0XHRcdGNsaWNrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bGlicmFyeS5yZXNldCggbGlicmFyeS50b0FycmF5KCkucmV2ZXJzZSgpICk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEdhbGxlcnlFZGl0O1xuIiwiLyoqXG4gKiB3cC5tZWRpYS5jb250cm9sbGVyLkltYWdlRGV0YWlsc1xuICpcbiAqIEEgc3RhdGUgZm9yIGVkaXRpbmcgdGhlIGF0dGFjaG1lbnQgZGlzcGxheSBzZXR0aW5ncyBvZiBhbiBpbWFnZSB0aGF0J3MgYmVlblxuICogaW5zZXJ0ZWQgaW50byB0aGUgZWRpdG9yLlxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGVcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5Nb2RlbFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXNdICAgICAgICAgICAgICAgICAgICAgICBUaGUgYXR0cmlidXRlcyBoYXNoIHBhc3NlZCB0byB0aGUgc3RhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmlkPWltYWdlLWRldGFpbHNdICAgICAgVW5pcXVlIGlkZW50aWZpZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnRpdGxlPUltYWdlIERldGFpbHNdICAgVGl0bGUgZm9yIHRoZSBzdGF0ZS4gRGlzcGxheXMgaW4gdGhlIGZyYW1lJ3MgdGl0bGUgcmVnaW9uLlxuICogQHBhcmFtIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50fSBhdHRyaWJ1dGVzLmltYWdlICAgICAgICAgICAgICAgICAgIFRoZSBpbWFnZSdzIG1vZGVsLlxuICogQHBhcmFtIHtzdHJpbmd8ZmFsc2V9ICAgICAgICAgICAgICBbYXR0cmlidXRlcy5jb250ZW50PWltYWdlLWRldGFpbHNdIEluaXRpYWwgbW9kZSBmb3IgdGhlIGNvbnRlbnQgcmVnaW9uLlxuICogQHBhcmFtIHtzdHJpbmd8ZmFsc2V9ICAgICAgICAgICAgICBbYXR0cmlidXRlcy5tZW51PWZhbHNlXSAgICAgICAgICAgIEluaXRpYWwgbW9kZSBmb3IgdGhlIG1lbnUgcmVnaW9uLlxuICogQHBhcmFtIHtzdHJpbmd8ZmFsc2V9ICAgICAgICAgICAgICBbYXR0cmlidXRlcy5yb3V0ZXI9ZmFsc2VdICAgICAgICAgIEluaXRpYWwgbW9kZSBmb3IgdGhlIHJvdXRlciByZWdpb24uXG4gKiBAcGFyYW0ge3N0cmluZ3xmYWxzZX0gICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnRvb2xiYXI9aW1hZ2UtZGV0YWlsc10gSW5pdGlhbCBtb2RlIGZvciB0aGUgdG9vbGJhciByZWdpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmVkaXRpbmc9ZmFsc2VdICAgICAgICAgVW51c2VkLlxuICogQHBhcmFtIHtpbnR9ICAgICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5wcmlvcml0eT02MF0gICAgICAgICAgIFVudXNlZC5cbiAqXG4gKiBAdG9kbyBUaGlzIHN0YXRlIGluaGVyaXRzIHNvbWUgZGVmYXVsdHMgZnJvbSBtZWRpYS5jb250cm9sbGVyLkxpYnJhcnkucHJvdG90eXBlLmRlZmF1bHRzLFxuICogICAgICAgaG93ZXZlciB0aGlzIG1heSBub3QgZG8gYW55dGhpbmcuXG4gKi9cbnZhciBTdGF0ZSA9IHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGUsXG5cdExpYnJhcnkgPSB3cC5tZWRpYS5jb250cm9sbGVyLkxpYnJhcnksXG5cdGwxMG4gPSB3cC5tZWRpYS52aWV3LmwxMG4sXG5cdEltYWdlRGV0YWlscztcblxuSW1hZ2VEZXRhaWxzID0gU3RhdGUuZXh0ZW5kKHtcblx0ZGVmYXVsdHM6IF8uZGVmYXVsdHMoe1xuXHRcdGlkOiAgICAgICAnaW1hZ2UtZGV0YWlscycsXG5cdFx0dGl0bGU6ICAgIGwxMG4uaW1hZ2VEZXRhaWxzVGl0bGUsXG5cdFx0Y29udGVudDogICdpbWFnZS1kZXRhaWxzJyxcblx0XHRtZW51OiAgICAgZmFsc2UsXG5cdFx0cm91dGVyOiAgIGZhbHNlLFxuXHRcdHRvb2xiYXI6ICAnaW1hZ2UtZGV0YWlscycsXG5cdFx0ZWRpdGluZzogIGZhbHNlLFxuXHRcdHByaW9yaXR5OiA2MFxuXHR9LCBMaWJyYXJ5LnByb3RvdHlwZS5kZWZhdWx0cyApLFxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMy45LjBcblx0ICpcblx0ICogQHBhcmFtIG9wdGlvbnMgQXR0cmlidXRlc1xuXHQgKi9cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdFx0dGhpcy5pbWFnZSA9IG9wdGlvbnMuaW1hZ2U7XG5cdFx0U3RhdGUucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMy45LjBcblx0ICovXG5cdGFjdGl2YXRlOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmZyYW1lLm1vZGFsLiRlbC5hZGRDbGFzcygnaW1hZ2UtZGV0YWlscycpO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbWFnZURldGFpbHM7XG4iLCIvKipcbiAqIHdwLm1lZGlhLmNvbnRyb2xsZXIuTGlicmFyeVxuICpcbiAqIEEgc3RhdGUgZm9yIGNob29zaW5nIGFuIGF0dGFjaG1lbnQgb3IgZ3JvdXAgb2YgYXR0YWNobWVudHMgZnJvbSB0aGUgbWVkaWEgbGlicmFyeS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlXG4gKiBAYXVnbWVudHMgQmFja2JvbmUuTW9kZWxcbiAqIEBtaXhlcyBtZWRpYS5zZWxlY3Rpb25TeW5jXG4gKlxuICogQHBhcmFtIHtvYmplY3R9ICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlc10gICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGF0dHJpYnV0ZXMgaGFzaCBwYXNzZWQgdG8gdGhlIHN0YXRlLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5pZD1saWJyYXJ5XSAgICAgICAgICAgICAgVW5pcXVlIGlkZW50aWZpZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnRpdGxlPU1lZGlhIGxpYnJhcnldICAgICBUaXRsZSBmb3IgdGhlIHN0YXRlLiBEaXNwbGF5cyBpbiB0aGUgbWVkaWEgbWVudSBhbmQgdGhlIGZyYW1lJ3MgdGl0bGUgcmVnaW9uLlxuICogQHBhcmFtIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50c30gICAgICBbYXR0cmlidXRlcy5saWJyYXJ5XSAgICAgICAgICAgICAgICAgVGhlIGF0dGFjaG1lbnRzIGNvbGxlY3Rpb24gdG8gYnJvd3NlLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgb25lIGlzIG5vdCBzdXBwbGllZCwgYSBjb2xsZWN0aW9uIG9mIGFsbCBhdHRhY2htZW50cyB3aWxsIGJlIGNyZWF0ZWQuXG4gKiBAcGFyYW0ge3dwLm1lZGlhLm1vZGVsLlNlbGVjdGlvbnxvYmplY3R9IFthdHRyaWJ1dGVzLnNlbGVjdGlvbl0gICAgICAgICAgICAgICBBIGNvbGxlY3Rpb24gdG8gY29udGFpbiBhdHRhY2htZW50IHNlbGVjdGlvbnMgd2l0aGluIHRoZSBzdGF0ZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSAnc2VsZWN0aW9uJyBhdHRyaWJ1dGUgaXMgYSBwbGFpbiBKUyBvYmplY3QsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIFNlbGVjdGlvbiB3aWxsIGJlIGNyZWF0ZWQgdXNpbmcgaXRzIHZhbHVlcyBhcyB0aGUgc2VsZWN0aW9uIGluc3RhbmNlJ3MgYHByb3BzYCBtb2RlbC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE90aGVyd2lzZSwgaXQgd2lsbCBjb3B5IHRoZSBsaWJyYXJ5J3MgYHByb3BzYCBtb2RlbC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMubXVsdGlwbGU9ZmFsc2VdICAgICAgICAgIFdoZXRoZXIgbXVsdGktc2VsZWN0IGlzIGVuYWJsZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmNvbnRlbnQ9dXBsb2FkXSAgICAgICAgICBJbml0aWFsIG1vZGUgZm9yIHRoZSBjb250ZW50IHJlZ2lvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE92ZXJyaWRkZW4gYnkgcGVyc2lzdGVudCB1c2VyIHNldHRpbmcgaWYgJ2NvbnRlbnRVc2VyU2V0dGluZycgaXMgdHJ1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMubWVudT1kZWZhdWx0XSAgICAgICAgICAgIEluaXRpYWwgbW9kZSBmb3IgdGhlIG1lbnUgcmVnaW9uLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5yb3V0ZXI9YnJvd3NlXSAgICAgICAgICAgSW5pdGlhbCBtb2RlIGZvciB0aGUgcm91dGVyIHJlZ2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMudG9vbGJhcj1zZWxlY3RdICAgICAgICAgIEluaXRpYWwgbW9kZSBmb3IgdGhlIHRvb2xiYXIgcmVnaW9uLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5zZWFyY2hhYmxlPXRydWVdICAgICAgICAgV2hldGhlciB0aGUgbGlicmFyeSBpcyBzZWFyY2hhYmxlLlxuICogQHBhcmFtIHtib29sZWFufHN0cmluZ30gICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5maWx0ZXJhYmxlPWZhbHNlXSAgICAgICAgV2hldGhlciB0aGUgbGlicmFyeSBpcyBmaWx0ZXJhYmxlLCBhbmQgaWYgc28gd2hhdCBmaWx0ZXJzIHNob3VsZCBiZSBzaG93bi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjY2VwdHMgJ2FsbCcsICd1cGxvYWRlZCcsIG9yICd1bmF0dGFjaGVkJy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuc29ydGFibGU9dHJ1ZV0gICAgICAgICAgIFdoZXRoZXIgdGhlIEF0dGFjaG1lbnRzIHNob3VsZCBiZSBzb3J0YWJsZS4gRGVwZW5kcyBvbiB0aGUgb3JkZXJieSBwcm9wZXJ0eSBiZWluZyBzZXQgdG8gbWVudU9yZGVyIG9uIHRoZSBhdHRhY2htZW50cyBjb2xsZWN0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5hdXRvU2VsZWN0PXRydWVdICAgICAgICAgV2hldGhlciBhbiB1cGxvYWRlZCBhdHRhY2htZW50IHNob3VsZCBiZSBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHRoZSBzZWxlY3Rpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmRlc2NyaWJlPWZhbHNlXSAgICAgICAgICBXaGV0aGVyIHRvIG9mZmVyIFVJIHRvIGRlc2NyaWJlIGF0dGFjaG1lbnRzIC0gZS5nLiBjYXB0aW9uaW5nIGltYWdlcyBpbiBhIGdhbGxlcnkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLmNvbnRlbnRVc2VyU2V0dGluZz10cnVlXSBXaGV0aGVyIHRoZSBjb250ZW50IHJlZ2lvbidzIG1vZGUgc2hvdWxkIGJlIHNldCBhbmQgcGVyc2lzdGVkIHBlciB1c2VyLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5zeW5jU2VsZWN0aW9uPXRydWVdICAgICAgV2hldGhlciB0aGUgQXR0YWNobWVudHMgc2VsZWN0aW9uIHNob3VsZCBiZSBwZXJzaXN0ZWQgZnJvbSB0aGUgbGFzdCBzdGF0ZS5cbiAqL1xudmFyIGwxMG4gPSB3cC5tZWRpYS52aWV3LmwxMG4sXG5cdGdldFVzZXJTZXR0aW5nID0gd2luZG93LmdldFVzZXJTZXR0aW5nLFxuXHRzZXRVc2VyU2V0dGluZyA9IHdpbmRvdy5zZXRVc2VyU2V0dGluZyxcblx0TGlicmFyeTtcblxuTGlicmFyeSA9IHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGUuZXh0ZW5kKHtcblx0ZGVmYXVsdHM6IHtcblx0XHRpZDogICAgICAgICAgICAgICAgICdsaWJyYXJ5Jyxcblx0XHR0aXRsZTogICAgICAgICAgICAgIGwxMG4ubWVkaWFMaWJyYXJ5VGl0bGUsXG5cdFx0bXVsdGlwbGU6ICAgICAgICAgICBmYWxzZSxcblx0XHRjb250ZW50OiAgICAgICAgICAgICd1cGxvYWQnLFxuXHRcdG1lbnU6ICAgICAgICAgICAgICAgJ2RlZmF1bHQnLFxuXHRcdHJvdXRlcjogICAgICAgICAgICAgJ2Jyb3dzZScsXG5cdFx0dG9vbGJhcjogICAgICAgICAgICAnc2VsZWN0Jyxcblx0XHRzZWFyY2hhYmxlOiAgICAgICAgIHRydWUsXG5cdFx0ZmlsdGVyYWJsZTogICAgICAgICBmYWxzZSxcblx0XHRzb3J0YWJsZTogICAgICAgICAgIHRydWUsXG5cdFx0YXV0b1NlbGVjdDogICAgICAgICB0cnVlLFxuXHRcdGRlc2NyaWJlOiAgICAgICAgICAgZmFsc2UsXG5cdFx0Y29udGVudFVzZXJTZXR0aW5nOiB0cnVlLFxuXHRcdHN5bmNTZWxlY3Rpb246ICAgICAgdHJ1ZVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBJZiBhIGxpYnJhcnkgaXNuJ3QgcHJvdmlkZWQsIHF1ZXJ5IGFsbCBtZWRpYSBpdGVtcy5cblx0ICogSWYgYSBzZWxlY3Rpb24gaW5zdGFuY2UgaXNuJ3QgcHJvdmlkZWQsIGNyZWF0ZSBvbmUuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKi9cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHNlbGVjdGlvbiA9IHRoaXMuZ2V0KCdzZWxlY3Rpb24nKSxcblx0XHRcdHByb3BzO1xuXG5cdFx0aWYgKCAhIHRoaXMuZ2V0KCdsaWJyYXJ5JykgKSB7XG5cdFx0XHR0aGlzLnNldCggJ2xpYnJhcnknLCB3cC5tZWRpYS5xdWVyeSgpICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhICggc2VsZWN0aW9uIGluc3RhbmNlb2Ygd3AubWVkaWEubW9kZWwuU2VsZWN0aW9uICkgKSB7XG5cdFx0XHRwcm9wcyA9IHNlbGVjdGlvbjtcblxuXHRcdFx0aWYgKCAhIHByb3BzICkge1xuXHRcdFx0XHRwcm9wcyA9IHRoaXMuZ2V0KCdsaWJyYXJ5JykucHJvcHMudG9KU09OKCk7XG5cdFx0XHRcdHByb3BzID0gXy5vbWl0KCBwcm9wcywgJ29yZGVyYnknLCAncXVlcnknICk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc2V0KCAnc2VsZWN0aW9uJywgbmV3IHdwLm1lZGlhLm1vZGVsLlNlbGVjdGlvbiggbnVsbCwge1xuXHRcdFx0XHRtdWx0aXBsZTogdGhpcy5nZXQoJ211bHRpcGxlJyksXG5cdFx0XHRcdHByb3BzOiBwcm9wc1xuXHRcdFx0fSkgKTtcblx0XHR9XG5cblx0XHR0aGlzLnJlc2V0RGlzcGxheXMoKTtcblx0fSxcblxuXHQvKipcblx0ICogQHNpbmNlIDMuNS4wXG5cdCAqL1xuXHRhY3RpdmF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5zeW5jU2VsZWN0aW9uKCk7XG5cblx0XHR3cC5VcGxvYWRlci5xdWV1ZS5vbiggJ2FkZCcsIHRoaXMudXBsb2FkaW5nLCB0aGlzICk7XG5cblx0XHR0aGlzLmdldCgnc2VsZWN0aW9uJykub24oICdhZGQgcmVtb3ZlIHJlc2V0JywgdGhpcy5yZWZyZXNoQ29udGVudCwgdGhpcyApO1xuXG5cdFx0aWYgKCB0aGlzLmdldCggJ3JvdXRlcicgKSAmJiB0aGlzLmdldCgnY29udGVudFVzZXJTZXR0aW5nJykgKSB7XG5cdFx0XHR0aGlzLmZyYW1lLm9uKCAnY29udGVudDphY3RpdmF0ZScsIHRoaXMuc2F2ZUNvbnRlbnRNb2RlLCB0aGlzICk7XG5cdFx0XHR0aGlzLnNldCggJ2NvbnRlbnQnLCBnZXRVc2VyU2V0dGluZyggJ2xpYnJhcnlDb250ZW50JywgdGhpcy5nZXQoJ2NvbnRlbnQnKSApICk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMy41LjBcblx0ICovXG5cdGRlYWN0aXZhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMucmVjb3JkU2VsZWN0aW9uKCk7XG5cblx0XHR0aGlzLmZyYW1lLm9mZiggJ2NvbnRlbnQ6YWN0aXZhdGUnLCB0aGlzLnNhdmVDb250ZW50TW9kZSwgdGhpcyApO1xuXG5cdFx0Ly8gVW5iaW5kIGFsbCBldmVudCBoYW5kbGVycyB0aGF0IHVzZSB0aGlzIHN0YXRlIGFzIHRoZSBjb250ZXh0XG5cdFx0Ly8gZnJvbSB0aGUgc2VsZWN0aW9uLlxuXHRcdHRoaXMuZ2V0KCdzZWxlY3Rpb24nKS5vZmYoIG51bGwsIG51bGwsIHRoaXMgKTtcblxuXHRcdHdwLlVwbG9hZGVyLnF1ZXVlLm9mZiggbnVsbCwgbnVsbCwgdGhpcyApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXNldCB0aGUgbGlicmFyeSB0byBpdHMgaW5pdGlhbCBzdGF0ZS5cblx0ICpcblx0ICogQHNpbmNlIDMuNS4wXG5cdCAqL1xuXHRyZXNldDogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5nZXQoJ3NlbGVjdGlvbicpLnJlc2V0KCk7XG5cdFx0dGhpcy5yZXNldERpc3BsYXlzKCk7XG5cdFx0dGhpcy5yZWZyZXNoQ29udGVudCgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXNldCB0aGUgYXR0YWNobWVudCBkaXNwbGF5IHNldHRpbmdzIGRlZmF1bHRzIHRvIHRoZSBzaXRlIG9wdGlvbnMuXG5cdCAqXG5cdCAqIElmIHNpdGUgb3B0aW9ucyBkb24ndCBkZWZpbmUgdGhlbSwgZmFsbCBiYWNrIHRvIGEgcGVyc2lzdGVudCB1c2VyIHNldHRpbmcuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKi9cblx0cmVzZXREaXNwbGF5czogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGRlZmF1bHRQcm9wcyA9IHdwLm1lZGlhLnZpZXcuc2V0dGluZ3MuZGVmYXVsdFByb3BzO1xuXHRcdHRoaXMuX2Rpc3BsYXlzID0gW107XG5cdFx0dGhpcy5fZGVmYXVsdERpc3BsYXlTZXR0aW5ncyA9IHtcblx0XHRcdGFsaWduOiBnZXRVc2VyU2V0dGluZyggJ2FsaWduJywgZGVmYXVsdFByb3BzLmFsaWduICkgfHwgJ25vbmUnLFxuXHRcdFx0c2l6ZTogIGdldFVzZXJTZXR0aW5nKCAnaW1nc2l6ZScsIGRlZmF1bHRQcm9wcy5zaXplICkgfHwgJ21lZGl1bScsXG5cdFx0XHRsaW5rOiAgZ2V0VXNlclNldHRpbmcoICd1cmxidXR0b24nLCBkZWZhdWx0UHJvcHMubGluayApIHx8ICdub25lJ1xuXHRcdH07XG5cdH0sXG5cblx0LyoqXG5cdCAqIENyZWF0ZSBhIG1vZGVsIHRvIHJlcHJlc2VudCBkaXNwbGF5IHNldHRpbmdzIChhbGlnbm1lbnQsIGV0Yy4pIGZvciBhbiBhdHRhY2htZW50LlxuXHQgKlxuXHQgKiBAc2luY2UgMy41LjBcblx0ICpcblx0ICogQHBhcmFtIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50fSBhdHRhY2htZW50XG5cdCAqIEByZXR1cm5zIHtCYWNrYm9uZS5Nb2RlbH1cblx0ICovXG5cdGRpc3BsYXk6IGZ1bmN0aW9uKCBhdHRhY2htZW50ICkge1xuXHRcdHZhciBkaXNwbGF5cyA9IHRoaXMuX2Rpc3BsYXlzO1xuXG5cdFx0aWYgKCAhIGRpc3BsYXlzWyBhdHRhY2htZW50LmNpZCBdICkge1xuXHRcdFx0ZGlzcGxheXNbIGF0dGFjaG1lbnQuY2lkIF0gPSBuZXcgQmFja2JvbmUuTW9kZWwoIHRoaXMuZGVmYXVsdERpc3BsYXlTZXR0aW5ncyggYXR0YWNobWVudCApICk7XG5cdFx0fVxuXHRcdHJldHVybiBkaXNwbGF5c1sgYXR0YWNobWVudC5jaWQgXTtcblx0fSxcblxuXHQvKipcblx0ICogR2l2ZW4gYW4gYXR0YWNobWVudCwgY3JlYXRlIGF0dGFjaG1lbnQgZGlzcGxheSBzZXR0aW5ncyBwcm9wZXJ0aWVzLlxuXHQgKlxuXHQgKiBAc2luY2UgMy42LjBcblx0ICpcblx0ICogQHBhcmFtIHt3cC5tZWRpYS5tb2RlbC5BdHRhY2htZW50fSBhdHRhY2htZW50XG5cdCAqIEByZXR1cm5zIHtPYmplY3R9XG5cdCAqL1xuXHRkZWZhdWx0RGlzcGxheVNldHRpbmdzOiBmdW5jdGlvbiggYXR0YWNobWVudCApIHtcblx0XHR2YXIgc2V0dGluZ3MgPSBfLmNsb25lKCB0aGlzLl9kZWZhdWx0RGlzcGxheVNldHRpbmdzICk7XG5cblx0XHRpZiAoIHNldHRpbmdzLmNhbkVtYmVkID0gdGhpcy5jYW5FbWJlZCggYXR0YWNobWVudCApICkge1xuXHRcdFx0c2V0dGluZ3MubGluayA9ICdlbWJlZCc7XG5cdFx0fSBlbHNlIGlmICggISB0aGlzLmlzSW1hZ2VBdHRhY2htZW50KCBhdHRhY2htZW50ICkgJiYgc2V0dGluZ3MubGluayA9PT0gJ25vbmUnICkge1xuXHRcdFx0c2V0dGluZ3MubGluayA9ICdmaWxlJztcblx0XHR9XG5cblx0XHRyZXR1cm4gc2V0dGluZ3M7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFdoZXRoZXIgYW4gYXR0YWNobWVudCBpcyBpbWFnZS5cblx0ICpcblx0ICogQHNpbmNlIDQuNC4xXG5cdCAqXG5cdCAqIEBwYXJhbSB7d3AubWVkaWEubW9kZWwuQXR0YWNobWVudH0gYXR0YWNobWVudFxuXHQgKiBAcmV0dXJucyB7Qm9vbGVhbn1cblx0ICovXG5cdGlzSW1hZ2VBdHRhY2htZW50OiBmdW5jdGlvbiggYXR0YWNobWVudCApIHtcblx0XHQvLyBJZiB1cGxvYWRpbmcsIHdlIGtub3cgdGhlIGZpbGVuYW1lIGJ1dCBub3QgdGhlIG1pbWUgdHlwZS5cblx0XHRpZiAoIGF0dGFjaG1lbnQuZ2V0KCd1cGxvYWRpbmcnKSApIHtcblx0XHRcdHJldHVybiAvXFwuKGpwZT9nfHBuZ3xnaWYpJC9pLnRlc3QoIGF0dGFjaG1lbnQuZ2V0KCdmaWxlbmFtZScpICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGF0dGFjaG1lbnQuZ2V0KCd0eXBlJykgPT09ICdpbWFnZSc7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFdoZXRoZXIgYW4gYXR0YWNobWVudCBjYW4gYmUgZW1iZWRkZWQgKGF1ZGlvIG9yIHZpZGVvKS5cblx0ICpcblx0ICogQHNpbmNlIDMuNi4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7d3AubWVkaWEubW9kZWwuQXR0YWNobWVudH0gYXR0YWNobWVudFxuXHQgKiBAcmV0dXJucyB7Qm9vbGVhbn1cblx0ICovXG5cdGNhbkVtYmVkOiBmdW5jdGlvbiggYXR0YWNobWVudCApIHtcblx0XHQvLyBJZiB1cGxvYWRpbmcsIHdlIGtub3cgdGhlIGZpbGVuYW1lIGJ1dCBub3QgdGhlIG1pbWUgdHlwZS5cblx0XHRpZiAoICEgYXR0YWNobWVudC5nZXQoJ3VwbG9hZGluZycpICkge1xuXHRcdFx0dmFyIHR5cGUgPSBhdHRhY2htZW50LmdldCgndHlwZScpO1xuXHRcdFx0aWYgKCB0eXBlICE9PSAnYXVkaW8nICYmIHR5cGUgIT09ICd2aWRlbycgKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gXy5jb250YWlucyggd3AubWVkaWEudmlldy5zZXR0aW5ncy5lbWJlZEV4dHMsIGF0dGFjaG1lbnQuZ2V0KCdmaWxlbmFtZScpLnNwbGl0KCcuJykucG9wKCkgKTtcblx0fSxcblxuXG5cdC8qKlxuXHQgKiBJZiB0aGUgc3RhdGUgaXMgYWN0aXZlLCBubyBpdGVtcyBhcmUgc2VsZWN0ZWQsIGFuZCB0aGUgY3VycmVudFxuXHQgKiBjb250ZW50IG1vZGUgaXMgbm90IGFuIG9wdGlvbiBpbiB0aGUgc3RhdGUncyByb3V0ZXIgKHByb3ZpZGVkXG5cdCAqIHRoZSBzdGF0ZSBoYXMgYSByb3V0ZXIpLCByZXNldCB0aGUgY29udGVudCBtb2RlIHRvIHRoZSBkZWZhdWx0LlxuXHQgKlxuXHQgKiBAc2luY2UgMy41LjBcblx0ICovXG5cdHJlZnJlc2hDb250ZW50OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgc2VsZWN0aW9uID0gdGhpcy5nZXQoJ3NlbGVjdGlvbicpLFxuXHRcdFx0ZnJhbWUgPSB0aGlzLmZyYW1lLFxuXHRcdFx0cm91dGVyID0gZnJhbWUucm91dGVyLmdldCgpLFxuXHRcdFx0bW9kZSA9IGZyYW1lLmNvbnRlbnQubW9kZSgpO1xuXG5cdFx0aWYgKCB0aGlzLmFjdGl2ZSAmJiAhIHNlbGVjdGlvbi5sZW5ndGggJiYgcm91dGVyICYmICEgcm91dGVyLmdldCggbW9kZSApICkge1xuXHRcdFx0dGhpcy5mcmFtZS5jb250ZW50LnJlbmRlciggdGhpcy5nZXQoJ2NvbnRlbnQnKSApO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQ2FsbGJhY2sgaGFuZGxlciB3aGVuIGFuIGF0dGFjaG1lbnQgaXMgdXBsb2FkZWQuXG5cdCAqXG5cdCAqIFN3aXRjaCB0byB0aGUgTWVkaWEgTGlicmFyeSBpZiB1cGxvYWRlZCBmcm9tIHRoZSAnVXBsb2FkIEZpbGVzJyB0YWIuXG5cdCAqXG5cdCAqIEFkZHMgYW55IHVwbG9hZGluZyBhdHRhY2htZW50cyB0byB0aGUgc2VsZWN0aW9uLlxuXHQgKlxuXHQgKiBJZiB0aGUgc3RhdGUgb25seSBzdXBwb3J0cyBvbmUgYXR0YWNobWVudCB0byBiZSBzZWxlY3RlZCBhbmQgbXVsdGlwbGVcblx0ICogYXR0YWNobWVudHMgYXJlIHVwbG9hZGVkLCB0aGUgbGFzdCBhdHRhY2htZW50IGluIHRoZSB1cGxvYWQgcXVldWUgd2lsbFxuXHQgKiBiZSBzZWxlY3RlZC5cblx0ICpcblx0ICogQHNpbmNlIDMuNS4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7d3AubWVkaWEubW9kZWwuQXR0YWNobWVudH0gYXR0YWNobWVudFxuXHQgKi9cblx0dXBsb2FkaW5nOiBmdW5jdGlvbiggYXR0YWNobWVudCApIHtcblx0XHR2YXIgY29udGVudCA9IHRoaXMuZnJhbWUuY29udGVudDtcblxuXHRcdGlmICggJ3VwbG9hZCcgPT09IGNvbnRlbnQubW9kZSgpICkge1xuXHRcdFx0dGhpcy5mcmFtZS5jb250ZW50Lm1vZGUoJ2Jyb3dzZScpO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5nZXQoICdhdXRvU2VsZWN0JyApICkge1xuXHRcdFx0dGhpcy5nZXQoJ3NlbGVjdGlvbicpLmFkZCggYXR0YWNobWVudCApO1xuXHRcdFx0dGhpcy5mcmFtZS50cmlnZ2VyKCAnbGlicmFyeTpzZWxlY3Rpb246YWRkJyApO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogUGVyc2lzdCB0aGUgbW9kZSBvZiB0aGUgY29udGVudCByZWdpb24gYXMgYSB1c2VyIHNldHRpbmcuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKi9cblx0c2F2ZUNvbnRlbnRNb2RlOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoICdicm93c2UnICE9PSB0aGlzLmdldCgncm91dGVyJykgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIG1vZGUgPSB0aGlzLmZyYW1lLmNvbnRlbnQubW9kZSgpLFxuXHRcdFx0dmlldyA9IHRoaXMuZnJhbWUucm91dGVyLmdldCgpO1xuXG5cdFx0aWYgKCB2aWV3ICYmIHZpZXcuZ2V0KCBtb2RlICkgKSB7XG5cdFx0XHRzZXRVc2VyU2V0dGluZyggJ2xpYnJhcnlDb250ZW50JywgbW9kZSApO1xuXHRcdH1cblx0fVxufSk7XG5cbi8vIE1ha2Ugc2VsZWN0aW9uU3luYyBhdmFpbGFibGUgb24gYW55IE1lZGlhIExpYnJhcnkgc3RhdGUuXG5fLmV4dGVuZCggTGlicmFyeS5wcm90b3R5cGUsIHdwLm1lZGlhLnNlbGVjdGlvblN5bmMgKTtcblxubW9kdWxlLmV4cG9ydHMgPSBMaWJyYXJ5O1xuIiwiLyoqXG4gKiB3cC5tZWRpYS5jb250cm9sbGVyLk1lZGlhTGlicmFyeVxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLmNvbnRyb2xsZXIuTGlicmFyeVxuICogQGF1Z21lbnRzIHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGVcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5Nb2RlbFxuICovXG52YXIgTGlicmFyeSA9IHdwLm1lZGlhLmNvbnRyb2xsZXIuTGlicmFyeSxcblx0TWVkaWFMaWJyYXJ5O1xuXG5NZWRpYUxpYnJhcnkgPSBMaWJyYXJ5LmV4dGVuZCh7XG5cdGRlZmF1bHRzOiBfLmRlZmF1bHRzKHtcblx0XHQvLyBBdHRhY2htZW50cyBicm93c2VyIGRlZmF1bHRzLiBAc2VlIG1lZGlhLnZpZXcuQXR0YWNobWVudHNCcm93c2VyXG5cdFx0ZmlsdGVyYWJsZTogICAgICAndXBsb2FkZWQnLFxuXG5cdFx0ZGlzcGxheVNldHRpbmdzOiBmYWxzZSxcblx0XHRwcmlvcml0eTogICAgICAgIDgwLFxuXHRcdHN5bmNTZWxlY3Rpb246ICAgZmFsc2Vcblx0fSwgTGlicmFyeS5wcm90b3R5cGUuZGVmYXVsdHMgKSxcblxuXHQvKipcblx0ICogQHNpbmNlIDMuOS4wXG5cdCAqXG5cdCAqIEBwYXJhbSBvcHRpb25zXG5cdCAqL1xuXHRpbml0aWFsaXplOiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0XHR0aGlzLm1lZGlhID0gb3B0aW9ucy5tZWRpYTtcblx0XHR0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG5cdFx0dGhpcy5zZXQoICdsaWJyYXJ5Jywgd3AubWVkaWEucXVlcnkoeyB0eXBlOiB0aGlzLnR5cGUgfSkgKTtcblxuXHRcdExpYnJhcnkucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMy45LjBcblx0ICovXG5cdGFjdGl2YXRlOiBmdW5jdGlvbigpIHtcblx0XHQvLyBAdG9kbyB0aGlzIHNob3VsZCB1c2UgdGhpcy5mcmFtZS5cblx0XHRpZiAoIHdwLm1lZGlhLmZyYW1lLmxhc3RNaW1lICkge1xuXHRcdFx0dGhpcy5zZXQoICdsaWJyYXJ5Jywgd3AubWVkaWEucXVlcnkoeyB0eXBlOiB3cC5tZWRpYS5mcmFtZS5sYXN0TWltZSB9KSApO1xuXHRcdFx0ZGVsZXRlIHdwLm1lZGlhLmZyYW1lLmxhc3RNaW1lO1xuXHRcdH1cblx0XHRMaWJyYXJ5LnByb3RvdHlwZS5hY3RpdmF0ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1lZGlhTGlicmFyeTtcbiIsIi8qKlxuICogd3AubWVkaWEuY29udHJvbGxlci5SZWdpb25cbiAqXG4gKiBBIHJlZ2lvbiBpcyBhIHBlcnNpc3RlbnQgYXBwbGljYXRpb24gbGF5b3V0IGFyZWEuXG4gKlxuICogQSByZWdpb24gYXNzdW1lcyBvbmUgbW9kZSBhdCBhbnkgdGltZSwgYW5kIGNhbiBiZSBzd2l0Y2hlZCB0byBhbm90aGVyLlxuICpcbiAqIFdoZW4gbW9kZSBjaGFuZ2VzLCBldmVudHMgYXJlIHRyaWdnZXJlZCBvbiB0aGUgcmVnaW9uJ3MgcGFyZW50IHZpZXcuXG4gKiBUaGUgcGFyZW50IHZpZXcgd2lsbCBsaXN0ZW4gdG8gc3BlY2lmaWMgZXZlbnRzIGFuZCBmaWxsIHRoZSByZWdpb24gd2l0aCBhblxuICogYXBwcm9wcmlhdGUgdmlldyBkZXBlbmRpbmcgb24gbW9kZS4gRm9yIGV4YW1wbGUsIGEgZnJhbWUgbGlzdGVucyBmb3IgdGhlXG4gKiAnYnJvd3NlJyBtb2RlIHQgYmUgYWN0aXZhdGVkIG9uIHRoZSAnY29udGVudCcgdmlldyBhbmQgdGhlbiBmaWxscyB0aGUgcmVnaW9uXG4gKiB3aXRoIGFuIEF0dGFjaG1lbnRzQnJvd3NlciB2aWV3LlxuICpcbiAqIEBjbGFzc1xuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSAgICAgICAgb3B0aW9ucyAgICAgICAgICBPcHRpb25zIGhhc2ggZm9yIHRoZSByZWdpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgIG9wdGlvbnMuaWQgICAgICAgVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSByZWdpb24uXG4gKiBAcGFyYW0ge0JhY2tib25lLlZpZXd9IG9wdGlvbnMudmlldyAgICAgQSBwYXJlbnQgdmlldyB0aGUgcmVnaW9uIGV4aXN0cyB3aXRoaW4uXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgIG9wdGlvbnMuc2VsZWN0b3IgalF1ZXJ5IHNlbGVjdG9yIGZvciB0aGUgcmVnaW9uIHdpdGhpbiB0aGUgcGFyZW50IHZpZXcuXG4gKi9cbnZhciBSZWdpb24gPSBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0Xy5leHRlbmQoIHRoaXMsIF8ucGljayggb3B0aW9ucyB8fCB7fSwgJ2lkJywgJ3ZpZXcnLCAnc2VsZWN0b3InICkgKTtcbn07XG5cbi8vIFVzZSBCYWNrYm9uZSdzIHNlbGYtcHJvcGFnYXRpbmcgYGV4dGVuZGAgaW5oZXJpdGFuY2UgbWV0aG9kLlxuUmVnaW9uLmV4dGVuZCA9IEJhY2tib25lLk1vZGVsLmV4dGVuZDtcblxuXy5leHRlbmQoIFJlZ2lvbi5wcm90b3R5cGUsIHtcblx0LyoqXG5cdCAqIEFjdGl2YXRlIGEgbW9kZS5cblx0ICpcblx0ICogQHNpbmNlIDMuNS4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlXG5cdCAqXG5cdCAqIEBmaXJlcyB0aGlzLnZpZXcje3RoaXMuaWR9OmFjdGl2YXRlOnt0aGlzLl9tb2RlfVxuXHQgKiBAZmlyZXMgdGhpcy52aWV3I3t0aGlzLmlkfTphY3RpdmF0ZVxuXHQgKiBAZmlyZXMgdGhpcy52aWV3I3t0aGlzLmlkfTpkZWFjdGl2YXRlOnt0aGlzLl9tb2RlfVxuXHQgKiBAZmlyZXMgdGhpcy52aWV3I3t0aGlzLmlkfTpkZWFjdGl2YXRlXG5cdCAqXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS5jb250cm9sbGVyLlJlZ2lvbn0gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmcuXG5cdCAqL1xuXHRtb2RlOiBmdW5jdGlvbiggbW9kZSApIHtcblx0XHRpZiAoICEgbW9kZSApIHtcblx0XHRcdHJldHVybiB0aGlzLl9tb2RlO1xuXHRcdH1cblx0XHQvLyBCYWlsIGlmIHdlJ3JlIHRyeWluZyB0byBjaGFuZ2UgdG8gdGhlIGN1cnJlbnQgbW9kZS5cblx0XHRpZiAoIG1vZGUgPT09IHRoaXMuX21vZGUgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBSZWdpb24gbW9kZSBkZWFjdGl2YXRpb24gZXZlbnQuXG5cdFx0ICpcblx0XHQgKiBAZXZlbnQgdGhpcy52aWV3I3t0aGlzLmlkfTpkZWFjdGl2YXRlOnt0aGlzLl9tb2RlfVxuXHRcdCAqIEBldmVudCB0aGlzLnZpZXcje3RoaXMuaWR9OmRlYWN0aXZhdGVcblx0XHQgKi9cblx0XHR0aGlzLnRyaWdnZXIoJ2RlYWN0aXZhdGUnKTtcblxuXHRcdHRoaXMuX21vZGUgPSBtb2RlO1xuXHRcdHRoaXMucmVuZGVyKCBtb2RlICk7XG5cblx0XHQvKipcblx0XHQgKiBSZWdpb24gbW9kZSBhY3RpdmF0aW9uIGV2ZW50LlxuXHRcdCAqXG5cdFx0ICogQGV2ZW50IHRoaXMudmlldyN7dGhpcy5pZH06YWN0aXZhdGU6e3RoaXMuX21vZGV9XG5cdFx0ICogQGV2ZW50IHRoaXMudmlldyN7dGhpcy5pZH06YWN0aXZhdGVcblx0XHQgKi9cblx0XHR0aGlzLnRyaWdnZXIoJ2FjdGl2YXRlJyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cdC8qKlxuXHQgKiBSZW5kZXIgYSBtb2RlLlxuXHQgKlxuXHQgKiBAc2luY2UgMy41LjBcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1vZGVcblx0ICpcblx0ICogQGZpcmVzIHRoaXMudmlldyN7dGhpcy5pZH06Y3JlYXRlOnt0aGlzLl9tb2RlfVxuXHQgKiBAZmlyZXMgdGhpcy52aWV3I3t0aGlzLmlkfTpjcmVhdGVcblx0ICogQGZpcmVzIHRoaXMudmlldyN7dGhpcy5pZH06cmVuZGVyOnt0aGlzLl9tb2RlfVxuXHQgKiBAZmlyZXMgdGhpcy52aWV3I3t0aGlzLmlkfTpyZW5kZXJcblx0ICpcblx0ICogQHJldHVybnMge3dwLm1lZGlhLmNvbnRyb2xsZXIuUmVnaW9ufSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0cmVuZGVyOiBmdW5jdGlvbiggbW9kZSApIHtcblx0XHQvLyBJZiB0aGUgbW9kZSBpc24ndCBhY3RpdmUsIGFjdGl2YXRlIGl0LlxuXHRcdGlmICggbW9kZSAmJiBtb2RlICE9PSB0aGlzLl9tb2RlICkge1xuXHRcdFx0cmV0dXJuIHRoaXMubW9kZSggbW9kZSApO1xuXHRcdH1cblxuXHRcdHZhciBzZXQgPSB7IHZpZXc6IG51bGwgfSxcblx0XHRcdHZpZXc7XG5cblx0XHQvKipcblx0XHQgKiBDcmVhdGUgcmVnaW9uIHZpZXcgZXZlbnQuXG5cdFx0ICpcblx0XHQgKiBSZWdpb24gdmlldyBjcmVhdGlvbiB0YWtlcyBwbGFjZSBpbiBhbiBldmVudCBjYWxsYmFjayBvbiB0aGUgZnJhbWUuXG5cdFx0ICpcblx0XHQgKiBAZXZlbnQgdGhpcy52aWV3I3t0aGlzLmlkfTpjcmVhdGU6e3RoaXMuX21vZGV9XG5cdFx0ICogQGV2ZW50IHRoaXMudmlldyN7dGhpcy5pZH06Y3JlYXRlXG5cdFx0ICovXG5cdFx0dGhpcy50cmlnZ2VyKCAnY3JlYXRlJywgc2V0ICk7XG5cdFx0dmlldyA9IHNldC52aWV3O1xuXG5cdFx0LyoqXG5cdFx0ICogUmVuZGVyIHJlZ2lvbiB2aWV3IGV2ZW50LlxuXHRcdCAqXG5cdFx0ICogUmVnaW9uIHZpZXcgY3JlYXRpb24gdGFrZXMgcGxhY2UgaW4gYW4gZXZlbnQgY2FsbGJhY2sgb24gdGhlIGZyYW1lLlxuXHRcdCAqXG5cdFx0ICogQGV2ZW50IHRoaXMudmlldyN7dGhpcy5pZH06Y3JlYXRlOnt0aGlzLl9tb2RlfVxuXHRcdCAqIEBldmVudCB0aGlzLnZpZXcje3RoaXMuaWR9OmNyZWF0ZVxuXHRcdCAqL1xuXHRcdHRoaXMudHJpZ2dlciggJ3JlbmRlcicsIHZpZXcgKTtcblx0XHRpZiAoIHZpZXcgKSB7XG5cdFx0XHR0aGlzLnNldCggdmlldyApO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHQvKipcblx0ICogR2V0IHRoZSByZWdpb24ncyB2aWV3LlxuXHQgKlxuXHQgKiBAc2luY2UgMy41LjBcblx0ICpcblx0ICogQHJldHVybnMge3dwLm1lZGlhLlZpZXd9XG5cdCAqL1xuXHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnZpZXcudmlld3MuZmlyc3QoIHRoaXMuc2VsZWN0b3IgKTtcblx0fSxcblxuXHQvKipcblx0ICogU2V0IHRoZSByZWdpb24ncyB2aWV3IGFzIGEgc3VidmlldyBvZiB0aGUgZnJhbWUuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKlxuXHQgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gdmlld3Ncblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XVxuXHQgKiBAcmV0dXJucyB7d3AuQmFja2JvbmUuU3Vidmlld3N9IFN1YnZpZXdzIGlzIHJldHVybmVkIHRvIGFsbG93IGNoYWluaW5nXG5cdCAqL1xuXHRzZXQ6IGZ1bmN0aW9uKCB2aWV3cywgb3B0aW9ucyApIHtcblx0XHRpZiAoIG9wdGlvbnMgKSB7XG5cdFx0XHRvcHRpb25zLmFkZCA9IGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy52aWV3LnZpZXdzLnNldCggdGhpcy5zZWxlY3Rvciwgdmlld3MsIG9wdGlvbnMgKTtcblx0fSxcblxuXHQvKipcblx0ICogVHJpZ2dlciByZWdpb25hbCB2aWV3IGV2ZW50cyBvbiB0aGUgZnJhbWUuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcblx0ICogQHJldHVybnMge3VuZGVmaW5lZHx3cC5tZWRpYS5jb250cm9sbGVyLlJlZ2lvbn0gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmcuXG5cdCAqL1xuXHR0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIGJhc2UsIGFyZ3M7XG5cblx0XHRpZiAoICEgdGhpcy5fbW9kZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRhcmdzID0gXy50b0FycmF5KCBhcmd1bWVudHMgKTtcblx0XHRiYXNlID0gdGhpcy5pZCArICc6JyArIGV2ZW50O1xuXG5cdFx0Ly8gVHJpZ2dlciBge3RoaXMuaWR9OntldmVudH06e3RoaXMuX21vZGV9YCBldmVudCBvbiB0aGUgZnJhbWUuXG5cdFx0YXJnc1swXSA9IGJhc2UgKyAnOicgKyB0aGlzLl9tb2RlO1xuXHRcdHRoaXMudmlldy50cmlnZ2VyLmFwcGx5KCB0aGlzLnZpZXcsIGFyZ3MgKTtcblxuXHRcdC8vIFRyaWdnZXIgYHt0aGlzLmlkfTp7ZXZlbnR9YCBldmVudCBvbiB0aGUgZnJhbWUuXG5cdFx0YXJnc1swXSA9IGJhc2U7XG5cdFx0dGhpcy52aWV3LnRyaWdnZXIuYXBwbHkoIHRoaXMudmlldywgYXJncyApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWdpb247XG4iLCIvKipcbiAqIHdwLm1lZGlhLmNvbnRyb2xsZXIuUmVwbGFjZUltYWdlXG4gKlxuICogQSBzdGF0ZSBmb3IgcmVwbGFjaW5nIGFuIGltYWdlLlxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLmNvbnRyb2xsZXIuTGlicmFyeVxuICogQGF1Z21lbnRzIHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGVcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5Nb2RlbFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSAgICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzXSAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYXR0cmlidXRlcyBoYXNoIHBhc3NlZCB0byB0aGUgc3RhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5pZD1yZXBsYWNlLWltYWdlXSAgICAgICAgVW5pcXVlIGlkZW50aWZpZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy50aXRsZT1SZXBsYWNlIEltYWdlXSAgICAgVGl0bGUgZm9yIHRoZSBzdGF0ZS4gRGlzcGxheXMgaW4gdGhlIG1lZGlhIG1lbnUgYW5kIHRoZSBmcmFtZSdzIHRpdGxlIHJlZ2lvbi5cbiAqIEBwYXJhbSB7d3AubWVkaWEubW9kZWwuQXR0YWNobWVudHN9IFthdHRyaWJ1dGVzLmxpYnJhcnldICAgICAgICAgICAgICAgICBUaGUgYXR0YWNobWVudHMgY29sbGVjdGlvbiB0byBicm93c2UuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgb25lIGlzIG5vdCBzdXBwbGllZCwgYSBjb2xsZWN0aW9uIG9mIGFsbCBpbWFnZXMgd2lsbCBiZSBjcmVhdGVkLlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMubXVsdGlwbGU9ZmFsc2VdICAgICAgICAgIFdoZXRoZXIgbXVsdGktc2VsZWN0IGlzIGVuYWJsZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5jb250ZW50PXVwbG9hZF0gICAgICAgICAgSW5pdGlhbCBtb2RlIGZvciB0aGUgY29udGVudCByZWdpb24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3ZlcnJpZGRlbiBieSBwZXJzaXN0ZW50IHVzZXIgc2V0dGluZyBpZiAnY29udGVudFVzZXJTZXR0aW5nJyBpcyB0cnVlLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMubWVudT1kZWZhdWx0XSAgICAgICAgICAgIEluaXRpYWwgbW9kZSBmb3IgdGhlIG1lbnUgcmVnaW9uLlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMucm91dGVyPWJyb3dzZV0gICAgICAgICAgIEluaXRpYWwgbW9kZSBmb3IgdGhlIHJvdXRlciByZWdpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy50b29sYmFyPXJlcGxhY2VdICAgICAgICAgSW5pdGlhbCBtb2RlIGZvciB0aGUgdG9vbGJhciByZWdpb24uXG4gKiBAcGFyYW0ge2ludH0gICAgICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5wcmlvcml0eT02MF0gICAgICAgICAgICAgVGhlIHByaW9yaXR5IGZvciB0aGUgc3RhdGUgbGluayBpbiB0aGUgbWVkaWEgbWVudS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgIFthdHRyaWJ1dGVzLnNlYXJjaGFibGU9dHJ1ZV0gICAgICAgICBXaGV0aGVyIHRoZSBsaWJyYXJ5IGlzIHNlYXJjaGFibGUuXG4gKiBAcGFyYW0ge2Jvb2xlYW58c3RyaW5nfSAgICAgICAgICAgICBbYXR0cmlidXRlcy5maWx0ZXJhYmxlPXVwbG9hZGVkXSAgICAgV2hldGhlciB0aGUgbGlicmFyeSBpcyBmaWx0ZXJhYmxlLCBhbmQgaWYgc28gd2hhdCBmaWx0ZXJzIHNob3VsZCBiZSBzaG93bi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHRzICdhbGwnLCAndXBsb2FkZWQnLCBvciAndW5hdHRhY2hlZCcuXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5zb3J0YWJsZT10cnVlXSAgICAgICAgICAgV2hldGhlciB0aGUgQXR0YWNobWVudHMgc2hvdWxkIGJlIHNvcnRhYmxlLiBEZXBlbmRzIG9uIHRoZSBvcmRlcmJ5IHByb3BlcnR5IGJlaW5nIHNldCB0byBtZW51T3JkZXIgb24gdGhlIGF0dGFjaG1lbnRzIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5hdXRvU2VsZWN0PXRydWVdICAgICAgICAgV2hldGhlciBhbiB1cGxvYWRlZCBhdHRhY2htZW50IHNob3VsZCBiZSBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHRoZSBzZWxlY3Rpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5kZXNjcmliZT1mYWxzZV0gICAgICAgICAgV2hldGhlciB0byBvZmZlciBVSSB0byBkZXNjcmliZSBhdHRhY2htZW50cyAtIGUuZy4gY2FwdGlvbmluZyBpbWFnZXMgaW4gYSBnYWxsZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgW2F0dHJpYnV0ZXMuY29udGVudFVzZXJTZXR0aW5nPXRydWVdIFdoZXRoZXIgdGhlIGNvbnRlbnQgcmVnaW9uJ3MgbW9kZSBzaG91bGQgYmUgc2V0IGFuZCBwZXJzaXN0ZWQgcGVyIHVzZXIuXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgICBbYXR0cmlidXRlcy5zeW5jU2VsZWN0aW9uPXRydWVdICAgICAgV2hldGhlciB0aGUgQXR0YWNobWVudHMgc2VsZWN0aW9uIHNob3VsZCBiZSBwZXJzaXN0ZWQgZnJvbSB0aGUgbGFzdCBzdGF0ZS5cbiAqL1xudmFyIExpYnJhcnkgPSB3cC5tZWRpYS5jb250cm9sbGVyLkxpYnJhcnksXG5cdGwxMG4gPSB3cC5tZWRpYS52aWV3LmwxMG4sXG5cdFJlcGxhY2VJbWFnZTtcblxuUmVwbGFjZUltYWdlID0gTGlicmFyeS5leHRlbmQoe1xuXHRkZWZhdWx0czogXy5kZWZhdWx0cyh7XG5cdFx0aWQ6ICAgICAgICAgICAgJ3JlcGxhY2UtaW1hZ2UnLFxuXHRcdHRpdGxlOiAgICAgICAgIGwxMG4ucmVwbGFjZUltYWdlVGl0bGUsXG5cdFx0bXVsdGlwbGU6ICAgICAgZmFsc2UsXG5cdFx0ZmlsdGVyYWJsZTogICAgJ3VwbG9hZGVkJyxcblx0XHR0b29sYmFyOiAgICAgICAncmVwbGFjZScsXG5cdFx0bWVudTogICAgICAgICAgZmFsc2UsXG5cdFx0cHJpb3JpdHk6ICAgICAgNjAsXG5cdFx0c3luY1NlbGVjdGlvbjogdHJ1ZVxuXHR9LCBMaWJyYXJ5LnByb3RvdHlwZS5kZWZhdWx0cyApLFxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMy45LjBcblx0ICpcblx0ICogQHBhcmFtIG9wdGlvbnNcblx0ICovXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHRcdHZhciBsaWJyYXJ5LCBjb21wYXJhdG9yO1xuXG5cdFx0dGhpcy5pbWFnZSA9IG9wdGlvbnMuaW1hZ2U7XG5cdFx0Ly8gSWYgd2UgaGF2ZW4ndCBiZWVuIHByb3ZpZGVkIGEgYGxpYnJhcnlgLCBjcmVhdGUgYSBgU2VsZWN0aW9uYC5cblx0XHRpZiAoICEgdGhpcy5nZXQoJ2xpYnJhcnknKSApIHtcblx0XHRcdHRoaXMuc2V0KCAnbGlicmFyeScsIHdwLm1lZGlhLnF1ZXJ5KHsgdHlwZTogJ2ltYWdlJyB9KSApO1xuXHRcdH1cblxuXHRcdExpYnJhcnkucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXG5cdFx0bGlicmFyeSAgICA9IHRoaXMuZ2V0KCdsaWJyYXJ5Jyk7XG5cdFx0Y29tcGFyYXRvciA9IGxpYnJhcnkuY29tcGFyYXRvcjtcblxuXHRcdC8vIE92ZXJsb2FkIHRoZSBsaWJyYXJ5J3MgY29tcGFyYXRvciB0byBwdXNoIGl0ZW1zIHRoYXQgYXJlIG5vdCBpblxuXHRcdC8vIHRoZSBtaXJyb3JlZCBxdWVyeSB0byB0aGUgZnJvbnQgb2YgdGhlIGFnZ3JlZ2F0ZSBjb2xsZWN0aW9uLlxuXHRcdGxpYnJhcnkuY29tcGFyYXRvciA9IGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdFx0dmFyIGFJblF1ZXJ5ID0gISEgdGhpcy5taXJyb3JpbmcuZ2V0KCBhLmNpZCApLFxuXHRcdFx0XHRiSW5RdWVyeSA9ICEhIHRoaXMubWlycm9yaW5nLmdldCggYi5jaWQgKTtcblxuXHRcdFx0aWYgKCAhIGFJblF1ZXJ5ICYmIGJJblF1ZXJ5ICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9IGVsc2UgaWYgKCBhSW5RdWVyeSAmJiAhIGJJblF1ZXJ5ICkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBjb21wYXJhdG9yLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Ly8gQWRkIGFsbCBpdGVtcyBpbiB0aGUgc2VsZWN0aW9uIHRvIHRoZSBsaWJyYXJ5LCBzbyBhbnkgZmVhdHVyZWRcblx0XHQvLyBpbWFnZXMgdGhhdCBhcmUgbm90IGluaXRpYWxseSBsb2FkZWQgc3RpbGwgYXBwZWFyLlxuXHRcdGxpYnJhcnkub2JzZXJ2ZSggdGhpcy5nZXQoJ3NlbGVjdGlvbicpICk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBzaW5jZSAzLjkuMFxuXHQgKi9cblx0YWN0aXZhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMudXBkYXRlU2VsZWN0aW9uKCk7XG5cdFx0TGlicmFyeS5wcm90b3R5cGUuYWN0aXZhdGUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMy45LjBcblx0ICovXG5cdHVwZGF0ZVNlbGVjdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHNlbGVjdGlvbiA9IHRoaXMuZ2V0KCdzZWxlY3Rpb24nKSxcblx0XHRcdGF0dGFjaG1lbnQgPSB0aGlzLmltYWdlLmF0dGFjaG1lbnQ7XG5cblx0XHRzZWxlY3Rpb24ucmVzZXQoIGF0dGFjaG1lbnQgPyBbIGF0dGFjaG1lbnQgXSA6IFtdICk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlcGxhY2VJbWFnZTtcbiIsIi8qKlxuICogd3AubWVkaWEuY29udHJvbGxlci5TaXRlSWNvbkNyb3BwZXJcbiAqXG4gKiBBIHN0YXRlIGZvciBjcm9wcGluZyBhIFNpdGUgSWNvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5jb250cm9sbGVyLkNyb3BwZXJcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlXG4gKiBAYXVnbWVudHMgQmFja2JvbmUuTW9kZWxcbiAqL1xudmFyIENvbnRyb2xsZXIgPSB3cC5tZWRpYS5jb250cm9sbGVyLFxuXHRTaXRlSWNvbkNyb3BwZXI7XG5cblNpdGVJY29uQ3JvcHBlciA9IENvbnRyb2xsZXIuQ3JvcHBlci5leHRlbmQoe1xuXHRhY3RpdmF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5mcmFtZS5vbiggJ2NvbnRlbnQ6Y3JlYXRlOmNyb3AnLCB0aGlzLmNyZWF0ZUNyb3BDb250ZW50LCB0aGlzICk7XG5cdFx0dGhpcy5mcmFtZS5vbiggJ2Nsb3NlJywgdGhpcy5yZW1vdmVDcm9wcGVyLCB0aGlzICk7XG5cdFx0dGhpcy5zZXQoJ3NlbGVjdGlvbicsIG5ldyBCYWNrYm9uZS5Db2xsZWN0aW9uKHRoaXMuZnJhbWUuX3NlbGVjdGlvbi5zaW5nbGUpKTtcblx0fSxcblxuXHRjcmVhdGVDcm9wQ29udGVudDogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5jcm9wcGVyVmlldyA9IG5ldyB3cC5tZWRpYS52aWV3LlNpdGVJY29uQ3JvcHBlcih7XG5cdFx0XHRjb250cm9sbGVyOiB0aGlzLFxuXHRcdFx0YXR0YWNobWVudDogdGhpcy5nZXQoJ3NlbGVjdGlvbicpLmZpcnN0KClcblx0XHR9KTtcblx0XHR0aGlzLmNyb3BwZXJWaWV3Lm9uKCdpbWFnZS1sb2FkZWQnLCB0aGlzLmNyZWF0ZUNyb3BUb29sYmFyLCB0aGlzKTtcblx0XHR0aGlzLmZyYW1lLmNvbnRlbnQuc2V0KHRoaXMuY3JvcHBlclZpZXcpO1xuXG5cdH0sXG5cblx0ZG9Dcm9wOiBmdW5jdGlvbiggYXR0YWNobWVudCApIHtcblx0XHR2YXIgY3JvcERldGFpbHMgPSBhdHRhY2htZW50LmdldCggJ2Nyb3BEZXRhaWxzJyApLFxuXHRcdFx0Y29udHJvbCA9IHRoaXMuZ2V0KCAnY29udHJvbCcgKTtcblxuXHRcdGNyb3BEZXRhaWxzLmRzdF93aWR0aCAgPSBjb250cm9sLnBhcmFtcy53aWR0aDtcblx0XHRjcm9wRGV0YWlscy5kc3RfaGVpZ2h0ID0gY29udHJvbC5wYXJhbXMuaGVpZ2h0O1xuXG5cdFx0cmV0dXJuIHdwLmFqYXgucG9zdCggJ2Nyb3AtaW1hZ2UnLCB7XG5cdFx0XHRub25jZTogYXR0YWNobWVudC5nZXQoICdub25jZXMnICkuZWRpdCxcblx0XHRcdGlkOiBhdHRhY2htZW50LmdldCggJ2lkJyApLFxuXHRcdFx0Y29udGV4dDogJ3NpdGUtaWNvbicsXG5cdFx0XHRjcm9wRGV0YWlsczogY3JvcERldGFpbHNcblx0XHR9ICk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNpdGVJY29uQ3JvcHBlcjtcbiIsIi8qKlxuICogd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZU1hY2hpbmVcbiAqXG4gKiBBIHN0YXRlIG1hY2hpbmUga2VlcHMgdHJhY2sgb2Ygc3RhdGUuIEl0IGlzIGluIG9uZSBzdGF0ZSBhdCBhIHRpbWUsXG4gKiBhbmQgY2FuIGNoYW5nZSBmcm9tIG9uZSBzdGF0ZSB0byBhbm90aGVyLlxuICpcbiAqIFN0YXRlcyBhcmUgc3RvcmVkIGFzIG1vZGVscyBpbiBhIEJhY2tib25lIGNvbGxlY3Rpb24uXG4gKlxuICogQHNpbmNlIDMuNS4wXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgQmFja2JvbmUuTW9kZWxcbiAqIEBtaXhpblxuICogQG1peGVzIEJhY2tib25lLkV2ZW50c1xuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHN0YXRlc1xuICovXG52YXIgU3RhdGVNYWNoaW5lID0gZnVuY3Rpb24oIHN0YXRlcyApIHtcblx0Ly8gQHRvZG8gVGhpcyBpcyBkZWFkIGNvZGUuIFRoZSBzdGF0ZXMgY29sbGVjdGlvbiBnZXRzIGNyZWF0ZWQgaW4gbWVkaWEudmlldy5GcmFtZS5fY3JlYXRlU3RhdGVzLlxuXHR0aGlzLnN0YXRlcyA9IG5ldyBCYWNrYm9uZS5Db2xsZWN0aW9uKCBzdGF0ZXMgKTtcbn07XG5cbi8vIFVzZSBCYWNrYm9uZSdzIHNlbGYtcHJvcGFnYXRpbmcgYGV4dGVuZGAgaW5oZXJpdGFuY2UgbWV0aG9kLlxuU3RhdGVNYWNoaW5lLmV4dGVuZCA9IEJhY2tib25lLk1vZGVsLmV4dGVuZDtcblxuXy5leHRlbmQoIFN0YXRlTWFjaGluZS5wcm90b3R5cGUsIEJhY2tib25lLkV2ZW50cywge1xuXHQvKipcblx0ICogRmV0Y2ggYSBzdGF0ZS5cblx0ICpcblx0ICogSWYgbm8gYGlkYCBpcyBwcm92aWRlZCwgcmV0dXJucyB0aGUgYWN0aXZlIHN0YXRlLlxuXHQgKlxuXHQgKiBJbXBsaWNpdGx5IGNyZWF0ZXMgc3RhdGVzLlxuXHQgKlxuXHQgKiBFbnN1cmUgdGhhdCB0aGUgYHN0YXRlc2AgY29sbGVjdGlvbiBleGlzdHMgc28gdGhlIGBTdGF0ZU1hY2hpbmVgXG5cdCAqICAgY2FuIGJlIHVzZWQgYXMgYSBtaXhpbi5cblx0ICpcblx0ICogQHNpbmNlIDMuNS4wXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZFxuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEuY29udHJvbGxlci5TdGF0ZX0gUmV0dXJucyBhIFN0YXRlIG1vZGVsXG5cdCAqICAgZnJvbSB0aGUgU3RhdGVNYWNoaW5lIGNvbGxlY3Rpb25cblx0ICovXG5cdHN0YXRlOiBmdW5jdGlvbiggaWQgKSB7XG5cdFx0dGhpcy5zdGF0ZXMgPSB0aGlzLnN0YXRlcyB8fCBuZXcgQmFja2JvbmUuQ29sbGVjdGlvbigpO1xuXG5cdFx0Ly8gRGVmYXVsdCB0byB0aGUgYWN0aXZlIHN0YXRlLlxuXHRcdGlkID0gaWQgfHwgdGhpcy5fc3RhdGU7XG5cblx0XHRpZiAoIGlkICYmICEgdGhpcy5zdGF0ZXMuZ2V0KCBpZCApICkge1xuXHRcdFx0dGhpcy5zdGF0ZXMuYWRkKHsgaWQ6IGlkIH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5zdGF0ZXMuZ2V0KCBpZCApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBhY3RpdmUgc3RhdGUuXG5cdCAqXG5cdCAqIEJhaWwgaWYgd2UncmUgdHJ5aW5nIHRvIHNlbGVjdCB0aGUgY3VycmVudCBzdGF0ZSwgaWYgd2UgaGF2ZW4ndFxuXHQgKiBjcmVhdGVkIHRoZSBgc3RhdGVzYCBjb2xsZWN0aW9uLCBvciBhcmUgdHJ5aW5nIHRvIHNlbGVjdCBhIHN0YXRlXG5cdCAqIHRoYXQgZG9lcyBub3QgZXhpc3QuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWRcblx0ICpcblx0ICogQGZpcmVzIHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGUjZGVhY3RpdmF0ZVxuXHQgKiBAZmlyZXMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZSNhY3RpdmF0ZVxuXHQgKlxuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEuY29udHJvbGxlci5TdGF0ZU1hY2hpbmV9IFJldHVybnMgaXRzZWxmIHRvIGFsbG93IGNoYWluaW5nXG5cdCAqL1xuXHRzZXRTdGF0ZTogZnVuY3Rpb24oIGlkICkge1xuXHRcdHZhciBwcmV2aW91cyA9IHRoaXMuc3RhdGUoKTtcblxuXHRcdGlmICggKCBwcmV2aW91cyAmJiBpZCA9PT0gcHJldmlvdXMuaWQgKSB8fCAhIHRoaXMuc3RhdGVzIHx8ICEgdGhpcy5zdGF0ZXMuZ2V0KCBpZCApICkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKCBwcmV2aW91cyApIHtcblx0XHRcdHByZXZpb3VzLnRyaWdnZXIoJ2RlYWN0aXZhdGUnKTtcblx0XHRcdHRoaXMuX2xhc3RTdGF0ZSA9IHByZXZpb3VzLmlkO1xuXHRcdH1cblxuXHRcdHRoaXMuX3N0YXRlID0gaWQ7XG5cdFx0dGhpcy5zdGF0ZSgpLnRyaWdnZXIoJ2FjdGl2YXRlJyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgcHJldmlvdXMgYWN0aXZlIHN0YXRlLlxuXHQgKlxuXHQgKiBDYWxsIHRoZSBgc3RhdGUoKWAgbWV0aG9kIHdpdGggbm8gcGFyYW1ldGVycyB0byByZXRyaWV2ZSB0aGUgY3VycmVudFxuXHQgKiBhY3RpdmUgc3RhdGUuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKlxuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEuY29udHJvbGxlci5TdGF0ZX0gUmV0dXJucyBhIFN0YXRlIG1vZGVsXG5cdCAqICAgIGZyb20gdGhlIFN0YXRlTWFjaGluZSBjb2xsZWN0aW9uXG5cdCAqL1xuXHRsYXN0U3RhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggdGhpcy5fbGFzdFN0YXRlICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuc3RhdGUoIHRoaXMuX2xhc3RTdGF0ZSApO1xuXHRcdH1cblx0fVxufSk7XG5cbi8vIE1hcCBhbGwgZXZlbnQgYmluZGluZyBhbmQgdHJpZ2dlcmluZyBvbiBhIFN0YXRlTWFjaGluZSB0byBpdHMgYHN0YXRlc2AgY29sbGVjdGlvbi5cbl8uZWFjaChbICdvbicsICdvZmYnLCAndHJpZ2dlcicgXSwgZnVuY3Rpb24oIG1ldGhvZCApIHtcblx0LyoqXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlTWFjaGluZX0gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmcuXG5cdCAqL1xuXHRTdGF0ZU1hY2hpbmUucHJvdG90eXBlWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdC8vIEVuc3VyZSB0aGF0IHRoZSBgc3RhdGVzYCBjb2xsZWN0aW9uIGV4aXN0cyBzbyB0aGUgYFN0YXRlTWFjaGluZWBcblx0XHQvLyBjYW4gYmUgdXNlZCBhcyBhIG1peGluLlxuXHRcdHRoaXMuc3RhdGVzID0gdGhpcy5zdGF0ZXMgfHwgbmV3IEJhY2tib25lLkNvbGxlY3Rpb24oKTtcblx0XHQvLyBGb3J3YXJkIHRoZSBtZXRob2QgdG8gdGhlIGBzdGF0ZXNgIGNvbGxlY3Rpb24uXG5cdFx0dGhpcy5zdGF0ZXNbIG1ldGhvZCBdLmFwcGx5KCB0aGlzLnN0YXRlcywgYXJndW1lbnRzICk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGF0ZU1hY2hpbmU7XG4iLCIvKipcbiAqIHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGVcbiAqXG4gKiBBIHN0YXRlIGlzIGEgc3RlcCBpbiBhIHdvcmtmbG93IHRoYXQgd2hlbiBzZXQgd2lsbCB0cmlnZ2VyIHRoZSBjb250cm9sbGVyc1xuICogZm9yIHRoZSByZWdpb25zIHRvIGJlIHVwZGF0ZWQgYXMgc3BlY2lmaWVkIGluIHRoZSBmcmFtZS5cbiAqXG4gKiBBIHN0YXRlIGhhcyBhbiBldmVudC1kcml2ZW4gbGlmZWN5Y2xlOlxuICpcbiAqICAgICAncmVhZHknICAgICAgdHJpZ2dlcnMgd2hlbiBhIHN0YXRlIGlzIGFkZGVkIHRvIGEgc3RhdGUgbWFjaGluZSdzIGNvbGxlY3Rpb24uXG4gKiAgICAgJ2FjdGl2YXRlJyAgIHRyaWdnZXJzIHdoZW4gYSBzdGF0ZSBpcyBhY3RpdmF0ZWQgYnkgYSBzdGF0ZSBtYWNoaW5lLlxuICogICAgICdkZWFjdGl2YXRlJyB0cmlnZ2VycyB3aGVuIGEgc3RhdGUgaXMgZGVhY3RpdmF0ZWQgYnkgYSBzdGF0ZSBtYWNoaW5lLlxuICogICAgICdyZXNldCcgICAgICBpcyBub3QgdHJpZ2dlcmVkIGF1dG9tYXRpY2FsbHkuIEl0IHNob3VsZCBiZSBpbnZva2VkIGJ5IHRoZVxuICogICAgICAgICAgICAgICAgICBwcm9wZXIgY29udHJvbGxlciB0byByZXNldCB0aGUgc3RhdGUgdG8gaXRzIGRlZmF1bHQuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgQmFja2JvbmUuTW9kZWxcbiAqL1xudmFyIFN0YXRlID0gQmFja2JvbmUuTW9kZWwuZXh0ZW5kKHtcblx0LyoqXG5cdCAqIENvbnN0cnVjdG9yLlxuXHQgKlxuXHQgKiBAc2luY2UgMy41LjBcblx0ICovXG5cdGNvbnN0cnVjdG9yOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLm9uKCAnYWN0aXZhdGUnLCB0aGlzLl9wcmVBY3RpdmF0ZSwgdGhpcyApO1xuXHRcdHRoaXMub24oICdhY3RpdmF0ZScsIHRoaXMuYWN0aXZhdGUsIHRoaXMgKTtcblx0XHR0aGlzLm9uKCAnYWN0aXZhdGUnLCB0aGlzLl9wb3N0QWN0aXZhdGUsIHRoaXMgKTtcblx0XHR0aGlzLm9uKCAnZGVhY3RpdmF0ZScsIHRoaXMuX2RlYWN0aXZhdGUsIHRoaXMgKTtcblx0XHR0aGlzLm9uKCAnZGVhY3RpdmF0ZScsIHRoaXMuZGVhY3RpdmF0ZSwgdGhpcyApO1xuXHRcdHRoaXMub24oICdyZXNldCcsIHRoaXMucmVzZXQsIHRoaXMgKTtcblx0XHR0aGlzLm9uKCAncmVhZHknLCB0aGlzLl9yZWFkeSwgdGhpcyApO1xuXHRcdHRoaXMub24oICdyZWFkeScsIHRoaXMucmVhZHksIHRoaXMgKTtcblx0XHQvKipcblx0XHQgKiBDYWxsIHBhcmVudCBjb25zdHJ1Y3RvciB3aXRoIHBhc3NlZCBhcmd1bWVudHNcblx0XHQgKi9cblx0XHRCYWNrYm9uZS5Nb2RlbC5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0dGhpcy5vbiggJ2NoYW5nZTptZW51JywgdGhpcy5fdXBkYXRlTWVudSwgdGhpcyApO1xuXHR9LFxuXHQvKipcblx0ICogUmVhZHkgZXZlbnQgY2FsbGJhY2suXG5cdCAqXG5cdCAqIEBhYnN0cmFjdFxuXHQgKiBAc2luY2UgMy41LjBcblx0ICovXG5cdHJlYWR5OiBmdW5jdGlvbigpIHt9LFxuXG5cdC8qKlxuXHQgKiBBY3RpdmF0ZSBldmVudCBjYWxsYmFjay5cblx0ICpcblx0ICogQGFic3RyYWN0XG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKi9cblx0YWN0aXZhdGU6IGZ1bmN0aW9uKCkge30sXG5cblx0LyoqXG5cdCAqIERlYWN0aXZhdGUgZXZlbnQgY2FsbGJhY2suXG5cdCAqXG5cdCAqIEBhYnN0cmFjdFxuXHQgKiBAc2luY2UgMy41LjBcblx0ICovXG5cdGRlYWN0aXZhdGU6IGZ1bmN0aW9uKCkge30sXG5cblx0LyoqXG5cdCAqIFJlc2V0IGV2ZW50IGNhbGxiYWNrLlxuXHQgKlxuXHQgKiBAYWJzdHJhY3Rcblx0ICogQHNpbmNlIDMuNS4wXG5cdCAqL1xuXHRyZXNldDogZnVuY3Rpb24oKSB7fSxcblxuXHQvKipcblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKi9cblx0X3JlYWR5OiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLl91cGRhdGVNZW51KCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKiBAc2luY2UgMy41LjBcblx0Ki9cblx0X3ByZUFjdGl2YXRlOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmFjdGl2ZSA9IHRydWU7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKiBAc2luY2UgMy41LjBcblx0ICovXG5cdF9wb3N0QWN0aXZhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMub24oICdjaGFuZ2U6bWVudScsIHRoaXMuX21lbnUsIHRoaXMgKTtcblx0XHR0aGlzLm9uKCAnY2hhbmdlOnRpdGxlTW9kZScsIHRoaXMuX3RpdGxlLCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ2NoYW5nZTpjb250ZW50JywgdGhpcy5fY29udGVudCwgdGhpcyApO1xuXHRcdHRoaXMub24oICdjaGFuZ2U6dG9vbGJhcicsIHRoaXMuX3Rvb2xiYXIsIHRoaXMgKTtcblxuXHRcdHRoaXMuZnJhbWUub24oICd0aXRsZTpyZW5kZXI6ZGVmYXVsdCcsIHRoaXMuX3JlbmRlclRpdGxlLCB0aGlzICk7XG5cblx0XHR0aGlzLl90aXRsZSgpO1xuXHRcdHRoaXMuX21lbnUoKTtcblx0XHR0aGlzLl90b29sYmFyKCk7XG5cdFx0dGhpcy5fY29udGVudCgpO1xuXHRcdHRoaXMuX3JvdXRlcigpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAYWNjZXNzIHByaXZhdGVcblx0ICogQHNpbmNlIDMuNS4wXG5cdCAqL1xuXHRfZGVhY3RpdmF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5hY3RpdmUgPSBmYWxzZTtcblxuXHRcdHRoaXMuZnJhbWUub2ZmKCAndGl0bGU6cmVuZGVyOmRlZmF1bHQnLCB0aGlzLl9yZW5kZXJUaXRsZSwgdGhpcyApO1xuXG5cdFx0dGhpcy5vZmYoICdjaGFuZ2U6bWVudScsIHRoaXMuX21lbnUsIHRoaXMgKTtcblx0XHR0aGlzLm9mZiggJ2NoYW5nZTp0aXRsZU1vZGUnLCB0aGlzLl90aXRsZSwgdGhpcyApO1xuXHRcdHRoaXMub2ZmKCAnY2hhbmdlOmNvbnRlbnQnLCB0aGlzLl9jb250ZW50LCB0aGlzICk7XG5cdFx0dGhpcy5vZmYoICdjaGFuZ2U6dG9vbGJhcicsIHRoaXMuX3Rvb2xiYXIsIHRoaXMgKTtcblx0fSxcblxuXHQvKipcblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKi9cblx0X3RpdGxlOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmZyYW1lLnRpdGxlLnJlbmRlciggdGhpcy5nZXQoJ3RpdGxlTW9kZScpIHx8ICdkZWZhdWx0JyApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAYWNjZXNzIHByaXZhdGVcblx0ICogQHNpbmNlIDMuNS4wXG5cdCAqL1xuXHRfcmVuZGVyVGl0bGU6IGZ1bmN0aW9uKCB2aWV3ICkge1xuXHRcdHZpZXcuJGVsLnRleHQoIHRoaXMuZ2V0KCd0aXRsZScpIHx8ICcnICk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBhY2Nlc3MgcHJpdmF0ZVxuXHQgKiBAc2luY2UgMy41LjBcblx0ICovXG5cdF9yb3V0ZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciByb3V0ZXIgPSB0aGlzLmZyYW1lLnJvdXRlcixcblx0XHRcdG1vZGUgPSB0aGlzLmdldCgncm91dGVyJyksXG5cdFx0XHR2aWV3O1xuXG5cdFx0dGhpcy5mcmFtZS4kZWwudG9nZ2xlQ2xhc3MoICdoaWRlLXJvdXRlcicsICEgbW9kZSApO1xuXHRcdGlmICggISBtb2RlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuZnJhbWUucm91dGVyLnJlbmRlciggbW9kZSApO1xuXG5cdFx0dmlldyA9IHJvdXRlci5nZXQoKTtcblx0XHRpZiAoIHZpZXcgJiYgdmlldy5zZWxlY3QgKSB7XG5cdFx0XHR2aWV3LnNlbGVjdCggdGhpcy5mcmFtZS5jb250ZW50Lm1vZGUoKSApO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKi9cblx0X21lbnU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtZW51ID0gdGhpcy5mcmFtZS5tZW51LFxuXHRcdFx0bW9kZSA9IHRoaXMuZ2V0KCdtZW51JyksXG5cdFx0XHR2aWV3O1xuXG5cdFx0dGhpcy5mcmFtZS4kZWwudG9nZ2xlQ2xhc3MoICdoaWRlLW1lbnUnLCAhIG1vZGUgKTtcblx0XHRpZiAoICEgbW9kZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRtZW51Lm1vZGUoIG1vZGUgKTtcblxuXHRcdHZpZXcgPSBtZW51LmdldCgpO1xuXHRcdGlmICggdmlldyAmJiB2aWV3LnNlbGVjdCApIHtcblx0XHRcdHZpZXcuc2VsZWN0KCB0aGlzLmlkICk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBAYWNjZXNzIHByaXZhdGVcblx0ICogQHNpbmNlIDMuNS4wXG5cdCAqL1xuXHRfdXBkYXRlTWVudTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHByZXZpb3VzID0gdGhpcy5wcmV2aW91cygnbWVudScpLFxuXHRcdFx0bWVudSA9IHRoaXMuZ2V0KCdtZW51Jyk7XG5cblx0XHRpZiAoIHByZXZpb3VzICkge1xuXHRcdFx0dGhpcy5mcmFtZS5vZmYoICdtZW51OnJlbmRlcjonICsgcHJldmlvdXMsIHRoaXMuX3JlbmRlck1lbnUsIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIG1lbnUgKSB7XG5cdFx0XHR0aGlzLmZyYW1lLm9uKCAnbWVudTpyZW5kZXI6JyArIG1lbnUsIHRoaXMuX3JlbmRlck1lbnUsIHRoaXMgKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIENyZWF0ZSBhIHZpZXcgaW4gdGhlIG1lZGlhIG1lbnUgZm9yIHRoZSBzdGF0ZS5cblx0ICpcblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKlxuXHQgKiBAcGFyYW0ge21lZGlhLnZpZXcuTWVudX0gdmlldyBUaGUgbWVudSB2aWV3LlxuXHQgKi9cblx0X3JlbmRlck1lbnU6IGZ1bmN0aW9uKCB2aWV3ICkge1xuXHRcdHZhciBtZW51SXRlbSA9IHRoaXMuZ2V0KCdtZW51SXRlbScpLFxuXHRcdFx0dGl0bGUgPSB0aGlzLmdldCgndGl0bGUnKSxcblx0XHRcdHByaW9yaXR5ID0gdGhpcy5nZXQoJ3ByaW9yaXR5Jyk7XG5cblx0XHRpZiAoICEgbWVudUl0ZW0gJiYgdGl0bGUgKSB7XG5cdFx0XHRtZW51SXRlbSA9IHsgdGV4dDogdGl0bGUgfTtcblxuXHRcdFx0aWYgKCBwcmlvcml0eSApIHtcblx0XHRcdFx0bWVudUl0ZW0ucHJpb3JpdHkgPSBwcmlvcml0eTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoICEgbWVudUl0ZW0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmlldy5zZXQoIHRoaXMuaWQsIG1lbnVJdGVtICk7XG5cdH1cbn0pO1xuXG5fLmVhY2goWyd0b29sYmFyJywnY29udGVudCddLCBmdW5jdGlvbiggcmVnaW9uICkge1xuXHQvKipcblx0ICogQGFjY2VzcyBwcml2YXRlXG5cdCAqL1xuXHRTdGF0ZS5wcm90b3R5cGVbICdfJyArIHJlZ2lvbiBdID0gZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG1vZGUgPSB0aGlzLmdldCggcmVnaW9uICk7XG5cdFx0aWYgKCBtb2RlICkge1xuXHRcdFx0dGhpcy5mcmFtZVsgcmVnaW9uIF0ucmVuZGVyKCBtb2RlICk7XG5cdFx0fVxuXHR9O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhdGU7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnNlbGVjdGlvblN5bmNcbiAqXG4gKiBTeW5jIGFuIGF0dGFjaG1lbnRzIHNlbGVjdGlvbiBpbiBhIHN0YXRlIHdpdGggYW5vdGhlciBzdGF0ZS5cbiAqXG4gKiBBbGxvd3MgZm9yIHNlbGVjdGluZyBtdWx0aXBsZSBpbWFnZXMgaW4gdGhlIEluc2VydCBNZWRpYSB3b3JrZmxvdywgYW5kIHRoZW5cbiAqIHN3aXRjaGluZyB0byB0aGUgSW5zZXJ0IEdhbGxlcnkgd29ya2Zsb3cgd2hpbGUgcHJlc2VydmluZyB0aGUgYXR0YWNobWVudHMgc2VsZWN0aW9uLlxuICpcbiAqIEBtaXhpblxuICovXG52YXIgc2VsZWN0aW9uU3luYyA9IHtcblx0LyoqXG5cdCAqIEBzaW5jZSAzLjUuMFxuXHQgKi9cblx0c3luY1NlbGVjdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHNlbGVjdGlvbiA9IHRoaXMuZ2V0KCdzZWxlY3Rpb24nKSxcblx0XHRcdG1hbmFnZXIgPSB0aGlzLmZyYW1lLl9zZWxlY3Rpb247XG5cblx0XHRpZiAoICEgdGhpcy5nZXQoJ3N5bmNTZWxlY3Rpb24nKSB8fCAhIG1hbmFnZXIgfHwgISBzZWxlY3Rpb24gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlIHNlbGVjdGlvbiBzdXBwb3J0cyBtdWx0aXBsZSBpdGVtcywgdmFsaWRhdGUgdGhlIHN0b3JlZFxuXHRcdC8vIGF0dGFjaG1lbnRzIGJhc2VkIG9uIHRoZSBuZXcgc2VsZWN0aW9uJ3MgY29uZGl0aW9ucy4gUmVjb3JkXG5cdFx0Ly8gdGhlIGF0dGFjaG1lbnRzIHRoYXQgYXJlIG5vdCBpbmNsdWRlZDsgd2UnbGwgbWFpbnRhaW4gYVxuXHRcdC8vIHJlZmVyZW5jZSB0byB0aG9zZS4gT3RoZXIgYXR0YWNobWVudHMgYXJlIGNvbnNpZGVyZWQgaW4gZmx1eC5cblx0XHRpZiAoIHNlbGVjdGlvbi5tdWx0aXBsZSApIHtcblx0XHRcdHNlbGVjdGlvbi5yZXNldCggW10sIHsgc2lsZW50OiB0cnVlIH0pO1xuXHRcdFx0c2VsZWN0aW9uLnZhbGlkYXRlQWxsKCBtYW5hZ2VyLmF0dGFjaG1lbnRzICk7XG5cdFx0XHRtYW5hZ2VyLmRpZmZlcmVuY2UgPSBfLmRpZmZlcmVuY2UoIG1hbmFnZXIuYXR0YWNobWVudHMubW9kZWxzLCBzZWxlY3Rpb24ubW9kZWxzICk7XG5cdFx0fVxuXG5cdFx0Ly8gU3luYyB0aGUgc2VsZWN0aW9uJ3Mgc2luZ2xlIGl0ZW0gd2l0aCB0aGUgbWFzdGVyLlxuXHRcdHNlbGVjdGlvbi5zaW5nbGUoIG1hbmFnZXIuc2luZ2xlICk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJlY29yZCB0aGUgY3VycmVudGx5IGFjdGl2ZSBhdHRhY2htZW50cywgd2hpY2ggaXMgYSBjb21iaW5hdGlvblxuXHQgKiBvZiB0aGUgc2VsZWN0aW9uJ3MgYXR0YWNobWVudHMgYW5kIHRoZSBzZXQgb2Ygc2VsZWN0ZWRcblx0ICogYXR0YWNobWVudHMgdGhhdCB0aGlzIHNwZWNpZmljIHNlbGVjdGlvbiBjb25zaWRlcmVkIGludmFsaWQuXG5cdCAqIFJlc2V0IHRoZSBkaWZmZXJlbmNlIGFuZCByZWNvcmQgdGhlIHNpbmdsZSBhdHRhY2htZW50LlxuXHQgKlxuXHQgKiBAc2luY2UgMy41LjBcblx0ICovXG5cdHJlY29yZFNlbGVjdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHNlbGVjdGlvbiA9IHRoaXMuZ2V0KCdzZWxlY3Rpb24nKSxcblx0XHRcdG1hbmFnZXIgPSB0aGlzLmZyYW1lLl9zZWxlY3Rpb247XG5cblx0XHRpZiAoICEgdGhpcy5nZXQoJ3N5bmNTZWxlY3Rpb24nKSB8fCAhIG1hbmFnZXIgfHwgISBzZWxlY3Rpb24gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWxlY3Rpb24ubXVsdGlwbGUgKSB7XG5cdFx0XHRtYW5hZ2VyLmF0dGFjaG1lbnRzLnJlc2V0KCBzZWxlY3Rpb24udG9BcnJheSgpLmNvbmNhdCggbWFuYWdlci5kaWZmZXJlbmNlICkgKTtcblx0XHRcdG1hbmFnZXIuZGlmZmVyZW5jZSA9IFtdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYW5hZ2VyLmF0dGFjaG1lbnRzLmFkZCggc2VsZWN0aW9uLnRvQXJyYXkoKSApO1xuXHRcdH1cblxuXHRcdG1hbmFnZXIuc2luZ2xlID0gc2VsZWN0aW9uLl9zaW5nbGU7XG5cdH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc2VsZWN0aW9uU3luYztcbiIsInZhciBtZWRpYSA9IHdwLm1lZGlhLFxuXHQkID0galF1ZXJ5LFxuXHRsMTBuO1xuXG5tZWRpYS5pc1RvdWNoRGV2aWNlID0gKCAnb250b3VjaGVuZCcgaW4gZG9jdW1lbnQgKTtcblxuLy8gTGluayBhbnkgbG9jYWxpemVkIHN0cmluZ3MuXG5sMTBuID0gbWVkaWEudmlldy5sMTBuID0gd2luZG93Ll93cE1lZGlhVmlld3NMMTBuIHx8IHt9O1xuXG4vLyBMaW5rIGFueSBzZXR0aW5ncy5cbm1lZGlhLnZpZXcuc2V0dGluZ3MgPSBsMTBuLnNldHRpbmdzIHx8IHt9O1xuZGVsZXRlIGwxMG4uc2V0dGluZ3M7XG5cbi8vIENvcHkgdGhlIGBwb3N0YCBzZXR0aW5nIG92ZXIgdG8gdGhlIG1vZGVsIHNldHRpbmdzLlxubWVkaWEubW9kZWwuc2V0dGluZ3MucG9zdCA9IG1lZGlhLnZpZXcuc2V0dGluZ3MucG9zdDtcblxuLy8gQ2hlY2sgaWYgdGhlIGJyb3dzZXIgc3VwcG9ydHMgQ1NTIDMuMCB0cmFuc2l0aW9uc1xuJC5zdXBwb3J0LnRyYW5zaXRpb24gPSAoZnVuY3Rpb24oKXtcblx0dmFyIHN0eWxlID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLFxuXHRcdHRyYW5zaXRpb25zID0ge1xuXHRcdFx0V2Via2l0VHJhbnNpdGlvbjogJ3dlYmtpdFRyYW5zaXRpb25FbmQnLFxuXHRcdFx0TW96VHJhbnNpdGlvbjogICAgJ3RyYW5zaXRpb25lbmQnLFxuXHRcdFx0T1RyYW5zaXRpb246ICAgICAgJ29UcmFuc2l0aW9uRW5kIG90cmFuc2l0aW9uZW5kJyxcblx0XHRcdHRyYW5zaXRpb246ICAgICAgICd0cmFuc2l0aW9uZW5kJ1xuXHRcdH0sIHRyYW5zaXRpb247XG5cblx0dHJhbnNpdGlvbiA9IF8uZmluZCggXy5rZXlzKCB0cmFuc2l0aW9ucyApLCBmdW5jdGlvbiggdHJhbnNpdGlvbiApIHtcblx0XHRyZXR1cm4gISBfLmlzVW5kZWZpbmVkKCBzdHlsZVsgdHJhbnNpdGlvbiBdICk7XG5cdH0pO1xuXG5cdHJldHVybiB0cmFuc2l0aW9uICYmIHtcblx0XHRlbmQ6IHRyYW5zaXRpb25zWyB0cmFuc2l0aW9uIF1cblx0fTtcbn0oKSk7XG5cbi8qKlxuICogQSBzaGFyZWQgZXZlbnQgYnVzIHVzZWQgdG8gcHJvdmlkZSBldmVudHMgaW50b1xuICogdGhlIG1lZGlhIHdvcmtmbG93cyB0aGF0IDNyZC1wYXJ0eSBkZXZzIGNhbiB1c2UgdG8gaG9va1xuICogaW4uXG4gKi9cbm1lZGlhLmV2ZW50cyA9IF8uZXh0ZW5kKCB7fSwgQmFja2JvbmUuRXZlbnRzICk7XG5cbi8qKlxuICogTWFrZXMgaXQgZWFzaWVyIHRvIGJpbmQgZXZlbnRzIHVzaW5nIHRyYW5zaXRpb25zLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvclxuICogQHBhcmFtIHtOdW1iZXJ9IHNlbnNpdGl2aXR5XG4gKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAqL1xubWVkaWEudHJhbnNpdGlvbiA9IGZ1bmN0aW9uKCBzZWxlY3Rvciwgc2Vuc2l0aXZpdHkgKSB7XG5cdHZhciBkZWZlcnJlZCA9ICQuRGVmZXJyZWQoKTtcblxuXHRzZW5zaXRpdml0eSA9IHNlbnNpdGl2aXR5IHx8IDIwMDA7XG5cblx0aWYgKCAkLnN1cHBvcnQudHJhbnNpdGlvbiApIHtcblx0XHRpZiAoICEgKHNlbGVjdG9yIGluc3RhbmNlb2YgJCkgKSB7XG5cdFx0XHRzZWxlY3RvciA9ICQoIHNlbGVjdG9yICk7XG5cdFx0fVxuXG5cdFx0Ly8gUmVzb2x2ZSB0aGUgZGVmZXJyZWQgd2hlbiB0aGUgZmlyc3QgZWxlbWVudCBmaW5pc2hlcyBhbmltYXRpbmcuXG5cdFx0c2VsZWN0b3IuZmlyc3QoKS5vbmUoICQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCwgZGVmZXJyZWQucmVzb2x2ZSApO1xuXG5cdFx0Ly8gSnVzdCBpbiBjYXNlIHRoZSBldmVudCBkb2Vzbid0IHRyaWdnZXIsIGZpcmUgYSBjYWxsYmFjay5cblx0XHRfLmRlbGF5KCBkZWZlcnJlZC5yZXNvbHZlLCBzZW5zaXRpdml0eSApO1xuXG5cdC8vIE90aGVyd2lzZSwgZXhlY3V0ZSBvbiB0aGUgc3BvdC5cblx0fSBlbHNlIHtcblx0XHRkZWZlcnJlZC5yZXNvbHZlKCk7XG5cdH1cblxuXHRyZXR1cm4gZGVmZXJyZWQucHJvbWlzZSgpO1xufTtcblxubWVkaWEuY29udHJvbGxlci5SZWdpb24gPSByZXF1aXJlKCAnLi9jb250cm9sbGVycy9yZWdpb24uanMnICk7XG5tZWRpYS5jb250cm9sbGVyLlN0YXRlTWFjaGluZSA9IHJlcXVpcmUoICcuL2NvbnRyb2xsZXJzL3N0YXRlLW1hY2hpbmUuanMnICk7XG5tZWRpYS5jb250cm9sbGVyLlN0YXRlID0gcmVxdWlyZSggJy4vY29udHJvbGxlcnMvc3RhdGUuanMnICk7XG5cbm1lZGlhLnNlbGVjdGlvblN5bmMgPSByZXF1aXJlKCAnLi91dGlscy9zZWxlY3Rpb24tc3luYy5qcycgKTtcbm1lZGlhLmNvbnRyb2xsZXIuTGlicmFyeSA9IHJlcXVpcmUoICcuL2NvbnRyb2xsZXJzL2xpYnJhcnkuanMnICk7XG5tZWRpYS5jb250cm9sbGVyLkltYWdlRGV0YWlscyA9IHJlcXVpcmUoICcuL2NvbnRyb2xsZXJzL2ltYWdlLWRldGFpbHMuanMnICk7XG5tZWRpYS5jb250cm9sbGVyLkdhbGxlcnlFZGl0ID0gcmVxdWlyZSggJy4vY29udHJvbGxlcnMvZ2FsbGVyeS1lZGl0LmpzJyApO1xubWVkaWEuY29udHJvbGxlci5HYWxsZXJ5QWRkID0gcmVxdWlyZSggJy4vY29udHJvbGxlcnMvZ2FsbGVyeS1hZGQuanMnICk7XG5tZWRpYS5jb250cm9sbGVyLkNvbGxlY3Rpb25FZGl0ID0gcmVxdWlyZSggJy4vY29udHJvbGxlcnMvY29sbGVjdGlvbi1lZGl0LmpzJyApO1xubWVkaWEuY29udHJvbGxlci5Db2xsZWN0aW9uQWRkID0gcmVxdWlyZSggJy4vY29udHJvbGxlcnMvY29sbGVjdGlvbi1hZGQuanMnICk7XG5tZWRpYS5jb250cm9sbGVyLkZlYXR1cmVkSW1hZ2UgPSByZXF1aXJlKCAnLi9jb250cm9sbGVycy9mZWF0dXJlZC1pbWFnZS5qcycgKTtcbm1lZGlhLmNvbnRyb2xsZXIuUmVwbGFjZUltYWdlID0gcmVxdWlyZSggJy4vY29udHJvbGxlcnMvcmVwbGFjZS1pbWFnZS5qcycgKTtcbm1lZGlhLmNvbnRyb2xsZXIuRWRpdEltYWdlID0gcmVxdWlyZSggJy4vY29udHJvbGxlcnMvZWRpdC1pbWFnZS5qcycgKTtcbm1lZGlhLmNvbnRyb2xsZXIuTWVkaWFMaWJyYXJ5ID0gcmVxdWlyZSggJy4vY29udHJvbGxlcnMvbWVkaWEtbGlicmFyeS5qcycgKTtcbm1lZGlhLmNvbnRyb2xsZXIuRW1iZWQgPSByZXF1aXJlKCAnLi9jb250cm9sbGVycy9lbWJlZC5qcycgKTtcbm1lZGlhLmNvbnRyb2xsZXIuQ3JvcHBlciA9IHJlcXVpcmUoICcuL2NvbnRyb2xsZXJzL2Nyb3BwZXIuanMnICk7XG5tZWRpYS5jb250cm9sbGVyLkN1c3RvbWl6ZUltYWdlQ3JvcHBlciA9IHJlcXVpcmUoICcuL2NvbnRyb2xsZXJzL2N1c3RvbWl6ZS1pbWFnZS1jcm9wcGVyLmpzJyApO1xubWVkaWEuY29udHJvbGxlci5TaXRlSWNvbkNyb3BwZXIgPSByZXF1aXJlKCAnLi9jb250cm9sbGVycy9zaXRlLWljb24tY3JvcHBlci5qcycgKTtcblxubWVkaWEuVmlldyA9IHJlcXVpcmUoICcuL3ZpZXdzL3ZpZXcuanMnICk7XG5tZWRpYS52aWV3LkZyYW1lID0gcmVxdWlyZSggJy4vdmlld3MvZnJhbWUuanMnICk7XG5tZWRpYS52aWV3Lk1lZGlhRnJhbWUgPSByZXF1aXJlKCAnLi92aWV3cy9tZWRpYS1mcmFtZS5qcycgKTtcbm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5TZWxlY3QgPSByZXF1aXJlKCAnLi92aWV3cy9mcmFtZS9zZWxlY3QuanMnICk7XG5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuUG9zdCA9IHJlcXVpcmUoICcuL3ZpZXdzL2ZyYW1lL3Bvc3QuanMnICk7XG5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuSW1hZ2VEZXRhaWxzID0gcmVxdWlyZSggJy4vdmlld3MvZnJhbWUvaW1hZ2UtZGV0YWlscy5qcycgKTtcbm1lZGlhLnZpZXcuTW9kYWwgPSByZXF1aXJlKCAnLi92aWV3cy9tb2RhbC5qcycgKTtcbm1lZGlhLnZpZXcuRm9jdXNNYW5hZ2VyID0gcmVxdWlyZSggJy4vdmlld3MvZm9jdXMtbWFuYWdlci5qcycgKTtcbm1lZGlhLnZpZXcuVXBsb2FkZXJXaW5kb3cgPSByZXF1aXJlKCAnLi92aWV3cy91cGxvYWRlci93aW5kb3cuanMnICk7XG5tZWRpYS52aWV3LkVkaXRvclVwbG9hZGVyID0gcmVxdWlyZSggJy4vdmlld3MvdXBsb2FkZXIvZWRpdG9yLmpzJyApO1xubWVkaWEudmlldy5VcGxvYWRlcklubGluZSA9IHJlcXVpcmUoICcuL3ZpZXdzL3VwbG9hZGVyL2lubGluZS5qcycgKTtcbm1lZGlhLnZpZXcuVXBsb2FkZXJTdGF0dXMgPSByZXF1aXJlKCAnLi92aWV3cy91cGxvYWRlci9zdGF0dXMuanMnICk7XG5tZWRpYS52aWV3LlVwbG9hZGVyU3RhdHVzRXJyb3IgPSByZXF1aXJlKCAnLi92aWV3cy91cGxvYWRlci9zdGF0dXMtZXJyb3IuanMnICk7XG5tZWRpYS52aWV3LlRvb2xiYXIgPSByZXF1aXJlKCAnLi92aWV3cy90b29sYmFyLmpzJyApO1xubWVkaWEudmlldy5Ub29sYmFyLlNlbGVjdCA9IHJlcXVpcmUoICcuL3ZpZXdzL3Rvb2xiYXIvc2VsZWN0LmpzJyApO1xubWVkaWEudmlldy5Ub29sYmFyLkVtYmVkID0gcmVxdWlyZSggJy4vdmlld3MvdG9vbGJhci9lbWJlZC5qcycgKTtcbm1lZGlhLnZpZXcuQnV0dG9uID0gcmVxdWlyZSggJy4vdmlld3MvYnV0dG9uLmpzJyApO1xubWVkaWEudmlldy5CdXR0b25Hcm91cCA9IHJlcXVpcmUoICcuL3ZpZXdzL2J1dHRvbi1ncm91cC5qcycgKTtcbm1lZGlhLnZpZXcuUHJpb3JpdHlMaXN0ID0gcmVxdWlyZSggJy4vdmlld3MvcHJpb3JpdHktbGlzdC5qcycgKTtcbm1lZGlhLnZpZXcuTWVudUl0ZW0gPSByZXF1aXJlKCAnLi92aWV3cy9tZW51LWl0ZW0uanMnICk7XG5tZWRpYS52aWV3Lk1lbnUgPSByZXF1aXJlKCAnLi92aWV3cy9tZW51LmpzJyApO1xubWVkaWEudmlldy5Sb3V0ZXJJdGVtID0gcmVxdWlyZSggJy4vdmlld3Mvcm91dGVyLWl0ZW0uanMnICk7XG5tZWRpYS52aWV3LlJvdXRlciA9IHJlcXVpcmUoICcuL3ZpZXdzL3JvdXRlci5qcycgKTtcbm1lZGlhLnZpZXcuU2lkZWJhciA9IHJlcXVpcmUoICcuL3ZpZXdzL3NpZGViYXIuanMnICk7XG5tZWRpYS52aWV3LkF0dGFjaG1lbnQgPSByZXF1aXJlKCAnLi92aWV3cy9hdHRhY2htZW50LmpzJyApO1xubWVkaWEudmlldy5BdHRhY2htZW50LkxpYnJhcnkgPSByZXF1aXJlKCAnLi92aWV3cy9hdHRhY2htZW50L2xpYnJhcnkuanMnICk7XG5tZWRpYS52aWV3LkF0dGFjaG1lbnQuRWRpdExpYnJhcnkgPSByZXF1aXJlKCAnLi92aWV3cy9hdHRhY2htZW50L2VkaXQtbGlicmFyeS5qcycgKTtcbm1lZGlhLnZpZXcuQXR0YWNobWVudHMgPSByZXF1aXJlKCAnLi92aWV3cy9hdHRhY2htZW50cy5qcycgKTtcbm1lZGlhLnZpZXcuU2VhcmNoID0gcmVxdWlyZSggJy4vdmlld3Mvc2VhcmNoLmpzJyApO1xubWVkaWEudmlldy5BdHRhY2htZW50RmlsdGVycyA9IHJlcXVpcmUoICcuL3ZpZXdzL2F0dGFjaG1lbnQtZmlsdGVycy5qcycgKTtcbm1lZGlhLnZpZXcuRGF0ZUZpbHRlciA9IHJlcXVpcmUoICcuL3ZpZXdzL2F0dGFjaG1lbnQtZmlsdGVycy9kYXRlLmpzJyApO1xubWVkaWEudmlldy5BdHRhY2htZW50RmlsdGVycy5VcGxvYWRlZCA9IHJlcXVpcmUoICcuL3ZpZXdzL2F0dGFjaG1lbnQtZmlsdGVycy91cGxvYWRlZC5qcycgKTtcbm1lZGlhLnZpZXcuQXR0YWNobWVudEZpbHRlcnMuQWxsID0gcmVxdWlyZSggJy4vdmlld3MvYXR0YWNobWVudC1maWx0ZXJzL2FsbC5qcycgKTtcbm1lZGlhLnZpZXcuQXR0YWNobWVudHNCcm93c2VyID0gcmVxdWlyZSggJy4vdmlld3MvYXR0YWNobWVudHMvYnJvd3Nlci5qcycgKTtcbm1lZGlhLnZpZXcuU2VsZWN0aW9uID0gcmVxdWlyZSggJy4vdmlld3Mvc2VsZWN0aW9uLmpzJyApO1xubWVkaWEudmlldy5BdHRhY2htZW50LlNlbGVjdGlvbiA9IHJlcXVpcmUoICcuL3ZpZXdzL2F0dGFjaG1lbnQvc2VsZWN0aW9uLmpzJyApO1xubWVkaWEudmlldy5BdHRhY2htZW50cy5TZWxlY3Rpb24gPSByZXF1aXJlKCAnLi92aWV3cy9hdHRhY2htZW50cy9zZWxlY3Rpb24uanMnICk7XG5tZWRpYS52aWV3LkF0dGFjaG1lbnQuRWRpdFNlbGVjdGlvbiA9IHJlcXVpcmUoICcuL3ZpZXdzL2F0dGFjaG1lbnQvZWRpdC1zZWxlY3Rpb24uanMnICk7XG5tZWRpYS52aWV3LlNldHRpbmdzID0gcmVxdWlyZSggJy4vdmlld3Mvc2V0dGluZ3MuanMnICk7XG5tZWRpYS52aWV3LlNldHRpbmdzLkF0dGFjaG1lbnREaXNwbGF5ID0gcmVxdWlyZSggJy4vdmlld3Mvc2V0dGluZ3MvYXR0YWNobWVudC1kaXNwbGF5LmpzJyApO1xubWVkaWEudmlldy5TZXR0aW5ncy5HYWxsZXJ5ID0gcmVxdWlyZSggJy4vdmlld3Mvc2V0dGluZ3MvZ2FsbGVyeS5qcycgKTtcbm1lZGlhLnZpZXcuU2V0dGluZ3MuUGxheWxpc3QgPSByZXF1aXJlKCAnLi92aWV3cy9zZXR0aW5ncy9wbGF5bGlzdC5qcycgKTtcbm1lZGlhLnZpZXcuQXR0YWNobWVudC5EZXRhaWxzID0gcmVxdWlyZSggJy4vdmlld3MvYXR0YWNobWVudC9kZXRhaWxzLmpzJyApO1xubWVkaWEudmlldy5BdHRhY2htZW50Q29tcGF0ID0gcmVxdWlyZSggJy4vdmlld3MvYXR0YWNobWVudC1jb21wYXQuanMnICk7XG5tZWRpYS52aWV3LklmcmFtZSA9IHJlcXVpcmUoICcuL3ZpZXdzL2lmcmFtZS5qcycgKTtcbm1lZGlhLnZpZXcuRW1iZWQgPSByZXF1aXJlKCAnLi92aWV3cy9lbWJlZC5qcycgKTtcbm1lZGlhLnZpZXcuTGFiZWwgPSByZXF1aXJlKCAnLi92aWV3cy9sYWJlbC5qcycgKTtcbm1lZGlhLnZpZXcuRW1iZWRVcmwgPSByZXF1aXJlKCAnLi92aWV3cy9lbWJlZC91cmwuanMnICk7XG5tZWRpYS52aWV3LkVtYmVkTGluayA9IHJlcXVpcmUoICcuL3ZpZXdzL2VtYmVkL2xpbmsuanMnICk7XG5tZWRpYS52aWV3LkVtYmVkSW1hZ2UgPSByZXF1aXJlKCAnLi92aWV3cy9lbWJlZC9pbWFnZS5qcycgKTtcbm1lZGlhLnZpZXcuSW1hZ2VEZXRhaWxzID0gcmVxdWlyZSggJy4vdmlld3MvaW1hZ2UtZGV0YWlscy5qcycgKTtcbm1lZGlhLnZpZXcuQ3JvcHBlciA9IHJlcXVpcmUoICcuL3ZpZXdzL2Nyb3BwZXIuanMnICk7XG5tZWRpYS52aWV3LlNpdGVJY29uQ3JvcHBlciA9IHJlcXVpcmUoICcuL3ZpZXdzL3NpdGUtaWNvbi1jcm9wcGVyLmpzJyApO1xubWVkaWEudmlldy5TaXRlSWNvblByZXZpZXcgPSByZXF1aXJlKCAnLi92aWV3cy9zaXRlLWljb24tcHJldmlldy5qcycgKTtcbm1lZGlhLnZpZXcuRWRpdEltYWdlID0gcmVxdWlyZSggJy4vdmlld3MvZWRpdC1pbWFnZS5qcycgKTtcbm1lZGlhLnZpZXcuU3Bpbm5lciA9IHJlcXVpcmUoICcuL3ZpZXdzL3NwaW5uZXIuanMnICk7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudENvbXBhdFxuICpcbiAqIEEgdmlldyB0byBkaXNwbGF5IGZpZWxkcyBhZGRlZCB2aWEgdGhlIGBhdHRhY2htZW50X2ZpZWxkc190b19lZGl0YCBmaWx0ZXIuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBWaWV3ID0gd3AubWVkaWEuVmlldyxcblx0QXR0YWNobWVudENvbXBhdDtcblxuQXR0YWNobWVudENvbXBhdCA9IFZpZXcuZXh0ZW5kKHtcblx0dGFnTmFtZTogICAnZm9ybScsXG5cdGNsYXNzTmFtZTogJ2NvbXBhdC1pdGVtJyxcblxuXHRldmVudHM6IHtcblx0XHQnc3VibWl0JzogICAgICAgICAgJ3ByZXZlbnREZWZhdWx0Jyxcblx0XHQnY2hhbmdlIGlucHV0JzogICAgJ3NhdmUnLFxuXHRcdCdjaGFuZ2Ugc2VsZWN0JzogICAnc2F2ZScsXG5cdFx0J2NoYW5nZSB0ZXh0YXJlYSc6ICdzYXZlJ1xuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMubGlzdGVuVG8oIHRoaXMubW9kZWwsICdjaGFuZ2U6Y29tcGF0JywgdGhpcy5yZW5kZXIgKTtcblx0fSxcblx0LyoqXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRDb21wYXR9IFJldHVybnMgaXRzZWxmIHRvIGFsbG93IGNoYWluaW5nXG5cdCAqL1xuXHRkaXNwb3NlOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoIHRoaXMuJCgnOmZvY3VzJykubGVuZ3RoICkge1xuXHRcdFx0dGhpcy5zYXZlKCk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIGNhbGwgJ2Rpc3Bvc2UnIGRpcmVjdGx5IG9uIHRoZSBwYXJlbnQgY2xhc3Ncblx0XHQgKi9cblx0XHRyZXR1cm4gVmlldy5wcm90b3R5cGUuZGlzcG9zZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH0sXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEudmlldy5BdHRhY2htZW50Q29tcGF0fSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0cmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgY29tcGF0ID0gdGhpcy5tb2RlbC5nZXQoJ2NvbXBhdCcpO1xuXHRcdGlmICggISBjb21wYXQgfHwgISBjb21wYXQuaXRlbSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLnZpZXdzLmRldGFjaCgpO1xuXHRcdHRoaXMuJGVsLmh0bWwoIGNvbXBhdC5pdGVtICk7XG5cdFx0dGhpcy52aWV3cy5yZW5kZXIoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxuXHQgKi9cblx0cHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHR9LFxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XG5cdCAqL1xuXHRzYXZlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIGRhdGEgPSB7fTtcblxuXHRcdGlmICggZXZlbnQgKSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblxuXHRcdF8uZWFjaCggdGhpcy4kZWwuc2VyaWFsaXplQXJyYXkoKSwgZnVuY3Rpb24oIHBhaXIgKSB7XG5cdFx0XHRkYXRhWyBwYWlyLm5hbWUgXSA9IHBhaXIudmFsdWU7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmNvbnRyb2xsZXIudHJpZ2dlciggJ2F0dGFjaG1lbnQ6Y29tcGF0OndhaXRpbmcnLCBbJ3dhaXRpbmcnXSApO1xuXHRcdHRoaXMubW9kZWwuc2F2ZUNvbXBhdCggZGF0YSApLmFsd2F5cyggXy5iaW5kKCB0aGlzLnBvc3RTYXZlLCB0aGlzICkgKTtcblx0fSxcblxuXHRwb3N0U2F2ZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5jb250cm9sbGVyLnRyaWdnZXIoICdhdHRhY2htZW50OmNvbXBhdDpyZWFkeScsIFsncmVhZHknXSApO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBdHRhY2htZW50Q29tcGF0O1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRGaWx0ZXJzXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciAkID0galF1ZXJ5LFxuXHRBdHRhY2htZW50RmlsdGVycztcblxuQXR0YWNobWVudEZpbHRlcnMgPSB3cC5tZWRpYS5WaWV3LmV4dGVuZCh7XG5cdHRhZ05hbWU6ICAgJ3NlbGVjdCcsXG5cdGNsYXNzTmFtZTogJ2F0dGFjaG1lbnQtZmlsdGVycycsXG5cdGlkOiAgICAgICAgJ21lZGlhLWF0dGFjaG1lbnQtZmlsdGVycycsXG5cblx0ZXZlbnRzOiB7XG5cdFx0Y2hhbmdlOiAnY2hhbmdlJ1xuXHR9LFxuXG5cdGtleXM6IFtdLFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuY3JlYXRlRmlsdGVycygpO1xuXHRcdF8uZXh0ZW5kKCB0aGlzLmZpbHRlcnMsIHRoaXMub3B0aW9ucy5maWx0ZXJzICk7XG5cblx0XHQvLyBCdWlsZCBgPG9wdGlvbj5gIGVsZW1lbnRzLlxuXHRcdHRoaXMuJGVsLmh0bWwoIF8uY2hhaW4oIHRoaXMuZmlsdGVycyApLm1hcCggZnVuY3Rpb24oIGZpbHRlciwgdmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRlbDogJCggJzxvcHRpb24+PC9vcHRpb24+JyApLnZhbCggdmFsdWUgKS5odG1sKCBmaWx0ZXIudGV4dCApWzBdLFxuXHRcdFx0XHRwcmlvcml0eTogZmlsdGVyLnByaW9yaXR5IHx8IDUwXG5cdFx0XHR9O1xuXHRcdH0sIHRoaXMgKS5zb3J0QnkoJ3ByaW9yaXR5JykucGx1Y2soJ2VsJykudmFsdWUoKSApO1xuXG5cdFx0dGhpcy5saXN0ZW5UbyggdGhpcy5tb2RlbCwgJ2NoYW5nZScsIHRoaXMuc2VsZWN0ICk7XG5cdFx0dGhpcy5zZWxlY3QoKTtcblx0fSxcblxuXHQvKipcblx0ICogQGFic3RyYWN0XG5cdCAqL1xuXHRjcmVhdGVGaWx0ZXJzOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmZpbHRlcnMgPSB7fTtcblx0fSxcblxuXHQvKipcblx0ICogV2hlbiB0aGUgc2VsZWN0ZWQgZmlsdGVyIGNoYW5nZXMsIHVwZGF0ZSB0aGUgQXR0YWNobWVudCBRdWVyeSBwcm9wZXJ0aWVzIHRvIG1hdGNoLlxuXHQgKi9cblx0Y2hhbmdlOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZmlsdGVyID0gdGhpcy5maWx0ZXJzWyB0aGlzLmVsLnZhbHVlIF07XG5cdFx0aWYgKCBmaWx0ZXIgKSB7XG5cdFx0XHR0aGlzLm1vZGVsLnNldCggZmlsdGVyLnByb3BzICk7XG5cdFx0fVxuXHR9LFxuXG5cdHNlbGVjdDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG1vZGVsID0gdGhpcy5tb2RlbCxcblx0XHRcdHZhbHVlID0gJ2FsbCcsXG5cdFx0XHRwcm9wcyA9IG1vZGVsLnRvSlNPTigpO1xuXG5cdFx0Xy5maW5kKCB0aGlzLmZpbHRlcnMsIGZ1bmN0aW9uKCBmaWx0ZXIsIGlkICkge1xuXHRcdFx0dmFyIGVxdWFsID0gXy5hbGwoIGZpbHRlci5wcm9wcywgZnVuY3Rpb24oIHByb3AsIGtleSApIHtcblx0XHRcdFx0cmV0dXJuIHByb3AgPT09ICggXy5pc1VuZGVmaW5lZCggcHJvcHNbIGtleSBdICkgPyBudWxsIDogcHJvcHNbIGtleSBdICk7XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKCBlcXVhbCApIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlID0gaWQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLiRlbC52YWwoIHZhbHVlICk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF0dGFjaG1lbnRGaWx0ZXJzO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRGaWx0ZXJzLkFsbFxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudEZpbHRlcnNcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIGwxMG4gPSB3cC5tZWRpYS52aWV3LmwxMG4sXG5cdEFsbDtcblxuQWxsID0gd3AubWVkaWEudmlldy5BdHRhY2htZW50RmlsdGVycy5leHRlbmQoe1xuXHRjcmVhdGVGaWx0ZXJzOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZmlsdGVycyA9IHt9O1xuXG5cdFx0Xy5lYWNoKCB3cC5tZWRpYS52aWV3LnNldHRpbmdzLm1pbWVUeXBlcyB8fCB7fSwgZnVuY3Rpb24oIHRleHQsIGtleSApIHtcblx0XHRcdGZpbHRlcnNbIGtleSBdID0ge1xuXHRcdFx0XHR0ZXh0OiB0ZXh0LFxuXHRcdFx0XHRwcm9wczoge1xuXHRcdFx0XHRcdHN0YXR1czogIG51bGwsXG5cdFx0XHRcdFx0dHlwZTogICAga2V5LFxuXHRcdFx0XHRcdHVwbG9hZGVkVG86IG51bGwsXG5cdFx0XHRcdFx0b3JkZXJieTogJ2RhdGUnLFxuXHRcdFx0XHRcdG9yZGVyOiAgICdERVNDJ1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH0pO1xuXG5cdFx0ZmlsdGVycy5hbGwgPSB7XG5cdFx0XHR0ZXh0OiAgbDEwbi5hbGxNZWRpYUl0ZW1zLFxuXHRcdFx0cHJvcHM6IHtcblx0XHRcdFx0c3RhdHVzOiAgbnVsbCxcblx0XHRcdFx0dHlwZTogICAgbnVsbCxcblx0XHRcdFx0dXBsb2FkZWRUbzogbnVsbCxcblx0XHRcdFx0b3JkZXJieTogJ2RhdGUnLFxuXHRcdFx0XHRvcmRlcjogICAnREVTQydcblx0XHRcdH0sXG5cdFx0XHRwcmlvcml0eTogMTBcblx0XHR9O1xuXG5cdFx0aWYgKCB3cC5tZWRpYS52aWV3LnNldHRpbmdzLnBvc3QuaWQgKSB7XG5cdFx0XHRmaWx0ZXJzLnVwbG9hZGVkID0ge1xuXHRcdFx0XHR0ZXh0OiAgbDEwbi51cGxvYWRlZFRvVGhpc1Bvc3QsXG5cdFx0XHRcdHByb3BzOiB7XG5cdFx0XHRcdFx0c3RhdHVzOiAgbnVsbCxcblx0XHRcdFx0XHR0eXBlOiAgICBudWxsLFxuXHRcdFx0XHRcdHVwbG9hZGVkVG86IHdwLm1lZGlhLnZpZXcuc2V0dGluZ3MucG9zdC5pZCxcblx0XHRcdFx0XHRvcmRlcmJ5OiAnbWVudU9yZGVyJyxcblx0XHRcdFx0XHRvcmRlcjogICAnQVNDJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRwcmlvcml0eTogMjBcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0ZmlsdGVycy51bmF0dGFjaGVkID0ge1xuXHRcdFx0dGV4dDogIGwxMG4udW5hdHRhY2hlZCxcblx0XHRcdHByb3BzOiB7XG5cdFx0XHRcdHN0YXR1czogICAgIG51bGwsXG5cdFx0XHRcdHVwbG9hZGVkVG86IDAsXG5cdFx0XHRcdHR5cGU6ICAgICAgIG51bGwsXG5cdFx0XHRcdG9yZGVyYnk6ICAgICdtZW51T3JkZXInLFxuXHRcdFx0XHRvcmRlcjogICAgICAnQVNDJ1xuXHRcdFx0fSxcblx0XHRcdHByaW9yaXR5OiA1MFxuXHRcdH07XG5cblx0XHRpZiAoIHdwLm1lZGlhLnZpZXcuc2V0dGluZ3MubWVkaWFUcmFzaCAmJlxuXHRcdFx0dGhpcy5jb250cm9sbGVyLmlzTW9kZUFjdGl2ZSggJ2dyaWQnICkgKSB7XG5cblx0XHRcdGZpbHRlcnMudHJhc2ggPSB7XG5cdFx0XHRcdHRleHQ6ICBsMTBuLnRyYXNoLFxuXHRcdFx0XHRwcm9wczoge1xuXHRcdFx0XHRcdHVwbG9hZGVkVG86IG51bGwsXG5cdFx0XHRcdFx0c3RhdHVzOiAgICAgJ3RyYXNoJyxcblx0XHRcdFx0XHR0eXBlOiAgICAgICBudWxsLFxuXHRcdFx0XHRcdG9yZGVyYnk6ICAgICdkYXRlJyxcblx0XHRcdFx0XHRvcmRlcjogICAgICAnREVTQydcblx0XHRcdFx0fSxcblx0XHRcdFx0cHJpb3JpdHk6IDUwXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHRoaXMuZmlsdGVycyA9IGZpbHRlcnM7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFsbDtcbiIsIi8qKlxuICogQSBmaWx0ZXIgZHJvcGRvd24gZm9yIG1vbnRoL2RhdGVzLlxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudEZpbHRlcnNcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIGwxMG4gPSB3cC5tZWRpYS52aWV3LmwxMG4sXG5cdERhdGVGaWx0ZXI7XG5cbkRhdGVGaWx0ZXIgPSB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRGaWx0ZXJzLmV4dGVuZCh7XG5cdGlkOiAnbWVkaWEtYXR0YWNobWVudC1kYXRlLWZpbHRlcnMnLFxuXG5cdGNyZWF0ZUZpbHRlcnM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBmaWx0ZXJzID0ge307XG5cdFx0Xy5lYWNoKCB3cC5tZWRpYS52aWV3LnNldHRpbmdzLm1vbnRocyB8fCB7fSwgZnVuY3Rpb24oIHZhbHVlLCBpbmRleCApIHtcblx0XHRcdGZpbHRlcnNbIGluZGV4IF0gPSB7XG5cdFx0XHRcdHRleHQ6IHZhbHVlLnRleHQsXG5cdFx0XHRcdHByb3BzOiB7XG5cdFx0XHRcdFx0eWVhcjogdmFsdWUueWVhcixcblx0XHRcdFx0XHRtb250aG51bTogdmFsdWUubW9udGhcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9KTtcblx0XHRmaWx0ZXJzLmFsbCA9IHtcblx0XHRcdHRleHQ6ICBsMTBuLmFsbERhdGVzLFxuXHRcdFx0cHJvcHM6IHtcblx0XHRcdFx0bW9udGhudW06IGZhbHNlLFxuXHRcdFx0XHR5ZWFyOiAgZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHRwcmlvcml0eTogMTBcblx0XHR9O1xuXHRcdHRoaXMuZmlsdGVycyA9IGZpbHRlcnM7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGVGaWx0ZXI7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudEZpbHRlcnMuVXBsb2FkZWRcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRGaWx0ZXJzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBsMTBuID0gd3AubWVkaWEudmlldy5sMTBuLFxuXHRVcGxvYWRlZDtcblxuVXBsb2FkZWQgPSB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRGaWx0ZXJzLmV4dGVuZCh7XG5cdGNyZWF0ZUZpbHRlcnM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB0eXBlID0gdGhpcy5tb2RlbC5nZXQoJ3R5cGUnKSxcblx0XHRcdHR5cGVzID0gd3AubWVkaWEudmlldy5zZXR0aW5ncy5taW1lVHlwZXMsXG5cdFx0XHR0ZXh0O1xuXG5cdFx0aWYgKCB0eXBlcyAmJiB0eXBlICkge1xuXHRcdFx0dGV4dCA9IHR5cGVzWyB0eXBlIF07XG5cdFx0fVxuXG5cdFx0dGhpcy5maWx0ZXJzID0ge1xuXHRcdFx0YWxsOiB7XG5cdFx0XHRcdHRleHQ6ICB0ZXh0IHx8IGwxMG4uYWxsTWVkaWFJdGVtcyxcblx0XHRcdFx0cHJvcHM6IHtcblx0XHRcdFx0XHR1cGxvYWRlZFRvOiBudWxsLFxuXHRcdFx0XHRcdG9yZGVyYnk6ICdkYXRlJyxcblx0XHRcdFx0XHRvcmRlcjogICAnREVTQydcblx0XHRcdFx0fSxcblx0XHRcdFx0cHJpb3JpdHk6IDEwXG5cdFx0XHR9LFxuXG5cdFx0XHR1cGxvYWRlZDoge1xuXHRcdFx0XHR0ZXh0OiAgbDEwbi51cGxvYWRlZFRvVGhpc1Bvc3QsXG5cdFx0XHRcdHByb3BzOiB7XG5cdFx0XHRcdFx0dXBsb2FkZWRUbzogd3AubWVkaWEudmlldy5zZXR0aW5ncy5wb3N0LmlkLFxuXHRcdFx0XHRcdG9yZGVyYnk6ICdtZW51T3JkZXInLFxuXHRcdFx0XHRcdG9yZGVyOiAgICdBU0MnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHByaW9yaXR5OiAyMFxuXHRcdFx0fSxcblxuXHRcdFx0dW5hdHRhY2hlZDoge1xuXHRcdFx0XHR0ZXh0OiAgbDEwbi51bmF0dGFjaGVkLFxuXHRcdFx0XHRwcm9wczoge1xuXHRcdFx0XHRcdHVwbG9hZGVkVG86IDAsXG5cdFx0XHRcdFx0b3JkZXJieTogJ21lbnVPcmRlcicsXG5cdFx0XHRcdFx0b3JkZXI6ICAgJ0FTQydcblx0XHRcdFx0fSxcblx0XHRcdFx0cHJpb3JpdHk6IDUwXG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gVXBsb2FkZWQ7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudFxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgVmlldyA9IHdwLm1lZGlhLlZpZXcsXG5cdCQgPSBqUXVlcnksXG5cdEF0dGFjaG1lbnQ7XG5cbkF0dGFjaG1lbnQgPSBWaWV3LmV4dGVuZCh7XG5cdHRhZ05hbWU6ICAgJ2xpJyxcblx0Y2xhc3NOYW1lOiAnYXR0YWNobWVudCcsXG5cdHRlbXBsYXRlOiAgd3AudGVtcGxhdGUoJ2F0dGFjaG1lbnQnKSxcblxuXHRhdHRyaWJ1dGVzOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J3RhYkluZGV4JzogICAgIDAsXG5cdFx0XHQncm9sZSc6ICAgICAgICAgJ2NoZWNrYm94Jyxcblx0XHRcdCdhcmlhLWxhYmVsJzogICB0aGlzLm1vZGVsLmdldCggJ3RpdGxlJyApLFxuXHRcdFx0J2FyaWEtY2hlY2tlZCc6IGZhbHNlLFxuXHRcdFx0J2RhdGEtaWQnOiAgICAgIHRoaXMubW9kZWwuZ2V0KCAnaWQnIClcblx0XHR9O1xuXHR9LFxuXG5cdGV2ZW50czoge1xuXHRcdCdjbGljayAuanMtLXNlbGVjdC1hdHRhY2htZW50JzogICAndG9nZ2xlU2VsZWN0aW9uSGFuZGxlcicsXG5cdFx0J2NoYW5nZSBbZGF0YS1zZXR0aW5nXSc6ICAgICAgICAgICd1cGRhdGVTZXR0aW5nJyxcblx0XHQnY2hhbmdlIFtkYXRhLXNldHRpbmddIGlucHV0JzogICAgJ3VwZGF0ZVNldHRpbmcnLFxuXHRcdCdjaGFuZ2UgW2RhdGEtc2V0dGluZ10gc2VsZWN0JzogICAndXBkYXRlU2V0dGluZycsXG5cdFx0J2NoYW5nZSBbZGF0YS1zZXR0aW5nXSB0ZXh0YXJlYSc6ICd1cGRhdGVTZXR0aW5nJyxcblx0XHQnY2xpY2sgLmF0dGFjaG1lbnQtY2xvc2UnOiAgICAgICAgJ3JlbW92ZUZyb21MaWJyYXJ5Jyxcblx0XHQnY2xpY2sgLmNoZWNrJzogICAgICAgICAgICAgICAgICAgJ2NoZWNrQ2xpY2tIYW5kbGVyJyxcblx0XHQna2V5ZG93bic6ICAgICAgICAgICAgICAgICAgICAgICAgJ3RvZ2dsZVNlbGVjdGlvbkhhbmRsZXInXG5cdH0sXG5cblx0YnV0dG9uczoge30sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHNlbGVjdGlvbiA9IHRoaXMub3B0aW9ucy5zZWxlY3Rpb24sXG5cdFx0XHRvcHRpb25zID0gXy5kZWZhdWx0cyggdGhpcy5vcHRpb25zLCB7XG5cdFx0XHRcdHJlcmVuZGVyT25Nb2RlbENoYW5nZTogdHJ1ZVxuXHRcdFx0fSApO1xuXG5cdFx0aWYgKCBvcHRpb25zLnJlcmVuZGVyT25Nb2RlbENoYW5nZSApIHtcblx0XHRcdHRoaXMubGlzdGVuVG8oIHRoaXMubW9kZWwsICdjaGFuZ2UnLCB0aGlzLnJlbmRlciApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLm1vZGVsLCAnY2hhbmdlOnBlcmNlbnQnLCB0aGlzLnByb2dyZXNzICk7XG5cdFx0fVxuXHRcdHRoaXMubGlzdGVuVG8oIHRoaXMubW9kZWwsICdjaGFuZ2U6dGl0bGUnLCB0aGlzLl9zeW5jVGl0bGUgKTtcblx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLm1vZGVsLCAnY2hhbmdlOmNhcHRpb24nLCB0aGlzLl9zeW5jQ2FwdGlvbiApO1xuXHRcdHRoaXMubGlzdGVuVG8oIHRoaXMubW9kZWwsICdjaGFuZ2U6YXJ0aXN0JywgdGhpcy5fc3luY0FydGlzdCApO1xuXHRcdHRoaXMubGlzdGVuVG8oIHRoaXMubW9kZWwsICdjaGFuZ2U6YWxidW0nLCB0aGlzLl9zeW5jQWxidW0gKTtcblxuXHRcdC8vIFVwZGF0ZSB0aGUgc2VsZWN0aW9uLlxuXHRcdHRoaXMubGlzdGVuVG8oIHRoaXMubW9kZWwsICdhZGQnLCB0aGlzLnNlbGVjdCApO1xuXHRcdHRoaXMubGlzdGVuVG8oIHRoaXMubW9kZWwsICdyZW1vdmUnLCB0aGlzLmRlc2VsZWN0ICk7XG5cdFx0aWYgKCBzZWxlY3Rpb24gKSB7XG5cdFx0XHRzZWxlY3Rpb24ub24oICdyZXNldCcsIHRoaXMudXBkYXRlU2VsZWN0LCB0aGlzICk7XG5cdFx0XHQvLyBVcGRhdGUgdGhlIG1vZGVsJ3MgZGV0YWlscyB2aWV3LlxuXHRcdFx0dGhpcy5saXN0ZW5UbyggdGhpcy5tb2RlbCwgJ3NlbGVjdGlvbjpzaW5nbGUgc2VsZWN0aW9uOnVuc2luZ2xlJywgdGhpcy5kZXRhaWxzICk7XG5cdFx0XHR0aGlzLmRldGFpbHMoIHRoaXMubW9kZWwsIHRoaXMuY29udHJvbGxlci5zdGF0ZSgpLmdldCgnc2VsZWN0aW9uJykgKTtcblx0XHR9XG5cblx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLmNvbnRyb2xsZXIsICdhdHRhY2htZW50OmNvbXBhdDp3YWl0aW5nIGF0dGFjaG1lbnQ6Y29tcGF0OnJlYWR5JywgdGhpcy51cGRhdGVTYXZlICk7XG5cdH0sXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEudmlldy5BdHRhY2htZW50fSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0ZGlzcG9zZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHNlbGVjdGlvbiA9IHRoaXMub3B0aW9ucy5zZWxlY3Rpb247XG5cblx0XHQvLyBNYWtlIHN1cmUgYWxsIHNldHRpbmdzIGFyZSBzYXZlZCBiZWZvcmUgcmVtb3ZpbmcgdGhlIHZpZXcuXG5cdFx0dGhpcy51cGRhdGVBbGwoKTtcblxuXHRcdGlmICggc2VsZWN0aW9uICkge1xuXHRcdFx0c2VsZWN0aW9uLm9mZiggbnVsbCwgbnVsbCwgdGhpcyApO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBjYWxsICdkaXNwb3NlJyBkaXJlY3RseSBvbiB0aGUgcGFyZW50IGNsYXNzXG5cdFx0ICovXG5cdFx0Vmlldy5wcm90b3R5cGUuZGlzcG9zZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEudmlldy5BdHRhY2htZW50fSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0cmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgb3B0aW9ucyA9IF8uZGVmYXVsdHMoIHRoaXMubW9kZWwudG9KU09OKCksIHtcblx0XHRcdFx0b3JpZW50YXRpb246ICAgJ2xhbmRzY2FwZScsXG5cdFx0XHRcdHVwbG9hZGluZzogICAgIGZhbHNlLFxuXHRcdFx0XHR0eXBlOiAgICAgICAgICAnJyxcblx0XHRcdFx0c3VidHlwZTogICAgICAgJycsXG5cdFx0XHRcdGljb246ICAgICAgICAgICcnLFxuXHRcdFx0XHRmaWxlbmFtZTogICAgICAnJyxcblx0XHRcdFx0Y2FwdGlvbjogICAgICAgJycsXG5cdFx0XHRcdHRpdGxlOiAgICAgICAgICcnLFxuXHRcdFx0XHRkYXRlRm9ybWF0dGVkOiAnJyxcblx0XHRcdFx0d2lkdGg6ICAgICAgICAgJycsXG5cdFx0XHRcdGhlaWdodDogICAgICAgICcnLFxuXHRcdFx0XHRjb21wYXQ6ICAgICAgICBmYWxzZSxcblx0XHRcdFx0YWx0OiAgICAgICAgICAgJycsXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiAgICcnXG5cdFx0XHR9LCB0aGlzLm9wdGlvbnMgKTtcblxuXHRcdG9wdGlvbnMuYnV0dG9ucyAgPSB0aGlzLmJ1dHRvbnM7XG5cdFx0b3B0aW9ucy5kZXNjcmliZSA9IHRoaXMuY29udHJvbGxlci5zdGF0ZSgpLmdldCgnZGVzY3JpYmUnKTtcblxuXHRcdGlmICggJ2ltYWdlJyA9PT0gb3B0aW9ucy50eXBlICkge1xuXHRcdFx0b3B0aW9ucy5zaXplID0gdGhpcy5pbWFnZVNpemUoKTtcblx0XHR9XG5cblx0XHRvcHRpb25zLmNhbiA9IHt9O1xuXHRcdGlmICggb3B0aW9ucy5ub25jZXMgKSB7XG5cdFx0XHRvcHRpb25zLmNhbi5yZW1vdmUgPSAhISBvcHRpb25zLm5vbmNlc1snZGVsZXRlJ107XG5cdFx0XHRvcHRpb25zLmNhbi5zYXZlID0gISEgb3B0aW9ucy5ub25jZXMudXBkYXRlO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5jb250cm9sbGVyLnN0YXRlKCkuZ2V0KCdhbGxvd0xvY2FsRWRpdHMnKSApIHtcblx0XHRcdG9wdGlvbnMuYWxsb3dMb2NhbEVkaXRzID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdGlvbnMudXBsb2FkaW5nICYmICEgb3B0aW9ucy5wZXJjZW50ICkge1xuXHRcdFx0b3B0aW9ucy5wZXJjZW50ID0gMDtcblx0XHR9XG5cblx0XHR0aGlzLnZpZXdzLmRldGFjaCgpO1xuXHRcdHRoaXMuJGVsLmh0bWwoIHRoaXMudGVtcGxhdGUoIG9wdGlvbnMgKSApO1xuXG5cdFx0dGhpcy4kZWwudG9nZ2xlQ2xhc3MoICd1cGxvYWRpbmcnLCBvcHRpb25zLnVwbG9hZGluZyApO1xuXG5cdFx0aWYgKCBvcHRpb25zLnVwbG9hZGluZyApIHtcblx0XHRcdHRoaXMuJGJhciA9IHRoaXMuJCgnLm1lZGlhLXByb2dyZXNzLWJhciBkaXYnKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVsZXRlIHRoaXMuJGJhcjtcblx0XHR9XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgbW9kZWwgaXMgc2VsZWN0ZWQuXG5cdFx0dGhpcy51cGRhdGVTZWxlY3QoKTtcblxuXHRcdC8vIFVwZGF0ZSB0aGUgc2F2ZSBzdGF0dXMuXG5cdFx0dGhpcy51cGRhdGVTYXZlKCk7XG5cblx0XHR0aGlzLnZpZXdzLnJlbmRlcigpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cHJvZ3Jlc3M6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggdGhpcy4kYmFyICYmIHRoaXMuJGJhci5sZW5ndGggKSB7XG5cdFx0XHR0aGlzLiRiYXIud2lkdGgoIHRoaXMubW9kZWwuZ2V0KCdwZXJjZW50JykgKyAnJScgKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxuXHQgKi9cblx0dG9nZ2xlU2VsZWN0aW9uSGFuZGxlcjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBtZXRob2Q7XG5cblx0XHQvLyBEb24ndCBkbyBhbnl0aGluZyBpbnNpZGUgaW5wdXRzIGFuZCBvbiB0aGUgYXR0YWNobWVudCBjaGVjayBhbmQgcmVtb3ZlIGJ1dHRvbnMuXG5cdFx0aWYgKCAnSU5QVVQnID09PSBldmVudC50YXJnZXQubm9kZU5hbWUgfHwgJ0JVVFRPTicgPT09IGV2ZW50LnRhcmdldC5ub2RlTmFtZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBDYXRjaCBhcnJvdyBldmVudHNcblx0XHRpZiAoIDM3ID09PSBldmVudC5rZXlDb2RlIHx8IDM4ID09PSBldmVudC5rZXlDb2RlIHx8IDM5ID09PSBldmVudC5rZXlDb2RlIHx8IDQwID09PSBldmVudC5rZXlDb2RlICkge1xuXHRcdFx0dGhpcy5jb250cm9sbGVyLnRyaWdnZXIoICdhdHRhY2htZW50OmtleWRvd246YXJyb3cnLCBldmVudCApO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENhdGNoIGVudGVyIGFuZCBzcGFjZSBldmVudHNcblx0XHRpZiAoICdrZXlkb3duJyA9PT0gZXZlbnQudHlwZSAmJiAxMyAhPT0gZXZlbnQua2V5Q29kZSAmJiAzMiAhPT0gZXZlbnQua2V5Q29kZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0Ly8gSW4gdGhlIGdyaWQgdmlldywgYnViYmxlIHVwIGFuIGVkaXQ6YXR0YWNobWVudCBldmVudCB0byB0aGUgY29udHJvbGxlci5cblx0XHRpZiAoIHRoaXMuY29udHJvbGxlci5pc01vZGVBY3RpdmUoICdncmlkJyApICkge1xuXHRcdFx0aWYgKCB0aGlzLmNvbnRyb2xsZXIuaXNNb2RlQWN0aXZlKCAnZWRpdCcgKSApIHtcblx0XHRcdFx0Ly8gUGFzcyB0aGUgY3VycmVudCB0YXJnZXQgdG8gcmVzdG9yZSBmb2N1cyB3aGVuIGNsb3Npbmdcblx0XHRcdFx0dGhpcy5jb250cm9sbGVyLnRyaWdnZXIoICdlZGl0OmF0dGFjaG1lbnQnLCB0aGlzLm1vZGVsLCBldmVudC5jdXJyZW50VGFyZ2V0ICk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB0aGlzLmNvbnRyb2xsZXIuaXNNb2RlQWN0aXZlKCAnc2VsZWN0JyApICkge1xuXHRcdFx0XHRtZXRob2QgPSAndG9nZ2xlJztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIGV2ZW50LnNoaWZ0S2V5ICkge1xuXHRcdFx0bWV0aG9kID0gJ2JldHdlZW4nO1xuXHRcdH0gZWxzZSBpZiAoIGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSApIHtcblx0XHRcdG1ldGhvZCA9ICd0b2dnbGUnO1xuXHRcdH1cblxuXHRcdHRoaXMudG9nZ2xlU2VsZWN0aW9uKHtcblx0XHRcdG1ldGhvZDogbWV0aG9kXG5cdFx0fSk7XG5cblx0XHR0aGlzLmNvbnRyb2xsZXIudHJpZ2dlciggJ3NlbGVjdGlvbjp0b2dnbGUnICk7XG5cdH0sXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHQgKi9cblx0dG9nZ2xlU2VsZWN0aW9uOiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0XHR2YXIgY29sbGVjdGlvbiA9IHRoaXMuY29sbGVjdGlvbixcblx0XHRcdHNlbGVjdGlvbiA9IHRoaXMub3B0aW9ucy5zZWxlY3Rpb24sXG5cdFx0XHRtb2RlbCA9IHRoaXMubW9kZWwsXG5cdFx0XHRtZXRob2QgPSBvcHRpb25zICYmIG9wdGlvbnMubWV0aG9kLFxuXHRcdFx0c2luZ2xlLCBtb2RlbHMsIHNpbmdsZUluZGV4LCBtb2RlbEluZGV4O1xuXG5cdFx0aWYgKCAhIHNlbGVjdGlvbiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRzaW5nbGUgPSBzZWxlY3Rpb24uc2luZ2xlKCk7XG5cdFx0bWV0aG9kID0gXy5pc1VuZGVmaW5lZCggbWV0aG9kICkgPyBzZWxlY3Rpb24ubXVsdGlwbGUgOiBtZXRob2Q7XG5cblx0XHQvLyBJZiB0aGUgYG1ldGhvZGAgaXMgc2V0IHRvIGBiZXR3ZWVuYCwgc2VsZWN0IGFsbCBtb2RlbHMgdGhhdFxuXHRcdC8vIGV4aXN0IGJldHdlZW4gdGhlIGN1cnJlbnQgYW5kIHRoZSBzZWxlY3RlZCBtb2RlbC5cblx0XHRpZiAoICdiZXR3ZWVuJyA9PT0gbWV0aG9kICYmIHNpbmdsZSAmJiBzZWxlY3Rpb24ubXVsdGlwbGUgKSB7XG5cdFx0XHQvLyBJZiB0aGUgbW9kZWxzIGFyZSB0aGUgc2FtZSwgc2hvcnQtY2lyY3VpdC5cblx0XHRcdGlmICggc2luZ2xlID09PSBtb2RlbCApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRzaW5nbGVJbmRleCA9IGNvbGxlY3Rpb24uaW5kZXhPZiggc2luZ2xlICk7XG5cdFx0XHRtb2RlbEluZGV4ICA9IGNvbGxlY3Rpb24uaW5kZXhPZiggdGhpcy5tb2RlbCApO1xuXG5cdFx0XHRpZiAoIHNpbmdsZUluZGV4IDwgbW9kZWxJbmRleCApIHtcblx0XHRcdFx0bW9kZWxzID0gY29sbGVjdGlvbi5tb2RlbHMuc2xpY2UoIHNpbmdsZUluZGV4LCBtb2RlbEluZGV4ICsgMSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bW9kZWxzID0gY29sbGVjdGlvbi5tb2RlbHMuc2xpY2UoIG1vZGVsSW5kZXgsIHNpbmdsZUluZGV4ICsgMSApO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3Rpb24uYWRkKCBtb2RlbHMgKTtcblx0XHRcdHNlbGVjdGlvbi5zaW5nbGUoIG1vZGVsICk7XG5cdFx0XHRyZXR1cm47XG5cblx0XHQvLyBJZiB0aGUgYG1ldGhvZGAgaXMgc2V0IHRvIGB0b2dnbGVgLCBqdXN0IGZsaXAgdGhlIHNlbGVjdGlvblxuXHRcdC8vIHN0YXR1cywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBtb2RlbCBpcyB0aGUgc2luZ2xlIG1vZGVsLlxuXHRcdH0gZWxzZSBpZiAoICd0b2dnbGUnID09PSBtZXRob2QgKSB7XG5cdFx0XHRzZWxlY3Rpb25bIHRoaXMuc2VsZWN0ZWQoKSA/ICdyZW1vdmUnIDogJ2FkZCcgXSggbW9kZWwgKTtcblx0XHRcdHNlbGVjdGlvbi5zaW5nbGUoIG1vZGVsICk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fSBlbHNlIGlmICggJ2FkZCcgPT09IG1ldGhvZCApIHtcblx0XHRcdHNlbGVjdGlvbi5hZGQoIG1vZGVsICk7XG5cdFx0XHRzZWxlY3Rpb24uc2luZ2xlKCBtb2RlbCApO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZpeGVzIGJ1ZyB0aGF0IGxvc2VzIGZvY3VzIHdoZW4gc2VsZWN0aW5nIGEgZmVhdHVyZWQgaW1hZ2Vcblx0XHRpZiAoICEgbWV0aG9kICkge1xuXHRcdFx0bWV0aG9kID0gJ2FkZCc7XG5cdFx0fVxuXG5cdFx0aWYgKCBtZXRob2QgIT09ICdhZGQnICkge1xuXHRcdFx0bWV0aG9kID0gJ3Jlc2V0Jztcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMuc2VsZWN0ZWQoKSApIHtcblx0XHRcdC8vIElmIHRoZSBtb2RlbCBpcyB0aGUgc2luZ2xlIG1vZGVsLCByZW1vdmUgaXQuXG5cdFx0XHQvLyBJZiBpdCBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIHNpbmdsZSBtb2RlbCxcblx0XHRcdC8vIGl0IG5vdyBiZWNvbWVzIHRoZSBzaW5nbGUgbW9kZWwuXG5cdFx0XHRzZWxlY3Rpb25bIHNpbmdsZSA9PT0gbW9kZWwgPyAncmVtb3ZlJyA6ICdzaW5nbGUnIF0oIG1vZGVsICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIElmIHRoZSBtb2RlbCBpcyBub3Qgc2VsZWN0ZWQsIHJ1biB0aGUgYG1ldGhvZGAgb24gdGhlXG5cdFx0XHQvLyBzZWxlY3Rpb24uIEJ5IGRlZmF1bHQsIHdlIGByZXNldGAgdGhlIHNlbGVjdGlvbiwgYnV0IHRoZVxuXHRcdFx0Ly8gYG1ldGhvZGAgY2FuIGJlIHNldCB0byBgYWRkYCB0aGUgbW9kZWwgdG8gdGhlIHNlbGVjdGlvbi5cblx0XHRcdHNlbGVjdGlvblsgbWV0aG9kIF0oIG1vZGVsICk7XG5cdFx0XHRzZWxlY3Rpb24uc2luZ2xlKCBtb2RlbCApO1xuXHRcdH1cblx0fSxcblxuXHR1cGRhdGVTZWxlY3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXNbIHRoaXMuc2VsZWN0ZWQoKSA/ICdzZWxlY3QnIDogJ2Rlc2VsZWN0JyBdKCk7XG5cdH0sXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7dW5yZXNvbHZlZHxCb29sZWFufVxuXHQgKi9cblx0c2VsZWN0ZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBzZWxlY3Rpb24gPSB0aGlzLm9wdGlvbnMuc2VsZWN0aW9uO1xuXHRcdGlmICggc2VsZWN0aW9uICkge1xuXHRcdFx0cmV0dXJuICEhIHNlbGVjdGlvbi5nZXQoIHRoaXMubW9kZWwuY2lkICk7XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogQHBhcmFtIHtCYWNrYm9uZS5Nb2RlbH0gbW9kZWxcblx0ICogQHBhcmFtIHtCYWNrYm9uZS5Db2xsZWN0aW9ufSBjb2xsZWN0aW9uXG5cdCAqL1xuXHRzZWxlY3Q6IGZ1bmN0aW9uKCBtb2RlbCwgY29sbGVjdGlvbiApIHtcblx0XHR2YXIgc2VsZWN0aW9uID0gdGhpcy5vcHRpb25zLnNlbGVjdGlvbixcblx0XHRcdGNvbnRyb2xsZXIgPSB0aGlzLmNvbnRyb2xsZXI7XG5cblx0XHQvLyBDaGVjayBpZiBhIHNlbGVjdGlvbiBleGlzdHMgYW5kIGlmIGl0J3MgdGhlIGNvbGxlY3Rpb24gcHJvdmlkZWQuXG5cdFx0Ly8gSWYgdGhleSdyZSBub3QgdGhlIHNhbWUgY29sbGVjdGlvbiwgYmFpbDsgd2UncmUgaW4gYW5vdGhlclxuXHRcdC8vIHNlbGVjdGlvbidzIGV2ZW50IGxvb3AuXG5cdFx0aWYgKCAhIHNlbGVjdGlvbiB8fCAoIGNvbGxlY3Rpb24gJiYgY29sbGVjdGlvbiAhPT0gc2VsZWN0aW9uICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQmFpbCBpZiB0aGUgbW9kZWwgaXMgYWxyZWFkeSBzZWxlY3RlZC5cblx0XHRpZiAoIHRoaXMuJGVsLmhhc0NsYXNzKCAnc2VsZWN0ZWQnICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQWRkICdzZWxlY3RlZCcgY2xhc3MgdG8gbW9kZWwsIHNldCBhcmlhLWNoZWNrZWQgdG8gdHJ1ZS5cblx0XHR0aGlzLiRlbC5hZGRDbGFzcyggJ3NlbGVjdGVkJyApLmF0dHIoICdhcmlhLWNoZWNrZWQnLCB0cnVlICk7XG5cdFx0Ly8gIE1ha2UgdGhlIGNoZWNrYm94IHRhYmFibGUsIGV4Y2VwdCBpbiBtZWRpYSBncmlkIChidWxrIHNlbGVjdCBtb2RlKS5cblx0XHRpZiAoICEgKCBjb250cm9sbGVyLmlzTW9kZUFjdGl2ZSggJ2dyaWQnICkgJiYgY29udHJvbGxlci5pc01vZGVBY3RpdmUoICdzZWxlY3QnICkgKSApIHtcblx0XHRcdHRoaXMuJCggJy5jaGVjaycgKS5hdHRyKCAndGFiaW5kZXgnLCAnMCcgKTtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0JhY2tib25lLk1vZGVsfSBtb2RlbFxuXHQgKiBAcGFyYW0ge0JhY2tib25lLkNvbGxlY3Rpb259IGNvbGxlY3Rpb25cblx0ICovXG5cdGRlc2VsZWN0OiBmdW5jdGlvbiggbW9kZWwsIGNvbGxlY3Rpb24gKSB7XG5cdFx0dmFyIHNlbGVjdGlvbiA9IHRoaXMub3B0aW9ucy5zZWxlY3Rpb247XG5cblx0XHQvLyBDaGVjayBpZiBhIHNlbGVjdGlvbiBleGlzdHMgYW5kIGlmIGl0J3MgdGhlIGNvbGxlY3Rpb24gcHJvdmlkZWQuXG5cdFx0Ly8gSWYgdGhleSdyZSBub3QgdGhlIHNhbWUgY29sbGVjdGlvbiwgYmFpbDsgd2UncmUgaW4gYW5vdGhlclxuXHRcdC8vIHNlbGVjdGlvbidzIGV2ZW50IGxvb3AuXG5cdFx0aWYgKCAhIHNlbGVjdGlvbiB8fCAoIGNvbGxlY3Rpb24gJiYgY29sbGVjdGlvbiAhPT0gc2VsZWN0aW9uICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuJGVsLnJlbW92ZUNsYXNzKCAnc2VsZWN0ZWQnICkuYXR0ciggJ2FyaWEtY2hlY2tlZCcsIGZhbHNlIClcblx0XHRcdC5maW5kKCAnLmNoZWNrJyApLmF0dHIoICd0YWJpbmRleCcsICctMScgKTtcblx0fSxcblx0LyoqXG5cdCAqIEBwYXJhbSB7QmFja2JvbmUuTW9kZWx9IG1vZGVsXG5cdCAqIEBwYXJhbSB7QmFja2JvbmUuQ29sbGVjdGlvbn0gY29sbGVjdGlvblxuXHQgKi9cblx0ZGV0YWlsczogZnVuY3Rpb24oIG1vZGVsLCBjb2xsZWN0aW9uICkge1xuXHRcdHZhciBzZWxlY3Rpb24gPSB0aGlzLm9wdGlvbnMuc2VsZWN0aW9uLFxuXHRcdFx0ZGV0YWlscztcblxuXHRcdGlmICggc2VsZWN0aW9uICE9PSBjb2xsZWN0aW9uICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGRldGFpbHMgPSBzZWxlY3Rpb24uc2luZ2xlKCk7XG5cdFx0dGhpcy4kZWwudG9nZ2xlQ2xhc3MoICdkZXRhaWxzJywgZGV0YWlscyA9PT0gdGhpcy5tb2RlbCApO1xuXHR9LFxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNpemVcblx0ICogQHJldHVybnMge09iamVjdH1cblx0ICovXG5cdGltYWdlU2l6ZTogZnVuY3Rpb24oIHNpemUgKSB7XG5cdFx0dmFyIHNpemVzID0gdGhpcy5tb2RlbC5nZXQoJ3NpemVzJyksIG1hdGNoZWQgPSBmYWxzZTtcblxuXHRcdHNpemUgPSBzaXplIHx8ICdtZWRpdW0nO1xuXG5cdFx0Ly8gVXNlIHRoZSBwcm92aWRlZCBpbWFnZSBzaXplIGlmIHBvc3NpYmxlLlxuXHRcdGlmICggc2l6ZXMgKSB7XG5cdFx0XHRpZiAoIHNpemVzWyBzaXplIF0gKSB7XG5cdFx0XHRcdG1hdGNoZWQgPSBzaXplc1sgc2l6ZSBdO1xuXHRcdFx0fSBlbHNlIGlmICggc2l6ZXMubGFyZ2UgKSB7XG5cdFx0XHRcdG1hdGNoZWQgPSBzaXplcy5sYXJnZTtcblx0XHRcdH0gZWxzZSBpZiAoIHNpemVzLnRodW1ibmFpbCApIHtcblx0XHRcdFx0bWF0Y2hlZCA9IHNpemVzLnRodW1ibmFpbDtcblx0XHRcdH0gZWxzZSBpZiAoIHNpemVzLmZ1bGwgKSB7XG5cdFx0XHRcdG1hdGNoZWQgPSBzaXplcy5mdWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIG1hdGNoZWQgKSB7XG5cdFx0XHRcdHJldHVybiBfLmNsb25lKCBtYXRjaGVkICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHVybDogICAgICAgICB0aGlzLm1vZGVsLmdldCgndXJsJyksXG5cdFx0XHR3aWR0aDogICAgICAgdGhpcy5tb2RlbC5nZXQoJ3dpZHRoJyksXG5cdFx0XHRoZWlnaHQ6ICAgICAgdGhpcy5tb2RlbC5nZXQoJ2hlaWdodCcpLFxuXHRcdFx0b3JpZW50YXRpb246IHRoaXMubW9kZWwuZ2V0KCdvcmllbnRhdGlvbicpXG5cdFx0fTtcblx0fSxcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxuXHQgKi9cblx0dXBkYXRlU2V0dGluZzogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciAkc2V0dGluZyA9ICQoIGV2ZW50LnRhcmdldCApLmNsb3Nlc3QoJ1tkYXRhLXNldHRpbmddJyksXG5cdFx0XHRzZXR0aW5nLCB2YWx1ZTtcblxuXHRcdGlmICggISAkc2V0dGluZy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0c2V0dGluZyA9ICRzZXR0aW5nLmRhdGEoJ3NldHRpbmcnKTtcblx0XHR2YWx1ZSAgID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuXG5cdFx0aWYgKCB0aGlzLm1vZGVsLmdldCggc2V0dGluZyApICE9PSB2YWx1ZSApIHtcblx0XHRcdHRoaXMuc2F2ZSggc2V0dGluZywgdmFsdWUgKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFBhc3MgYWxsIHRoZSBhcmd1bWVudHMgdG8gdGhlIG1vZGVsJ3Mgc2F2ZSBtZXRob2QuXG5cdCAqXG5cdCAqIFJlY29yZHMgdGhlIGFnZ3JlZ2F0ZSBzdGF0dXMgb2YgYWxsIHNhdmUgcmVxdWVzdHMgYW5kIHVwZGF0ZXMgdGhlXG5cdCAqIHZpZXcncyBjbGFzc2VzIGFjY29yZGluZ2x5LlxuXHQgKi9cblx0c2F2ZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHZpZXcgPSB0aGlzLFxuXHRcdFx0c2F2ZSA9IHRoaXMuX3NhdmUgPSB0aGlzLl9zYXZlIHx8IHsgc3RhdHVzOiAncmVhZHknIH0sXG5cdFx0XHRyZXF1ZXN0ID0gdGhpcy5tb2RlbC5zYXZlLmFwcGx5KCB0aGlzLm1vZGVsLCBhcmd1bWVudHMgKSxcblx0XHRcdHJlcXVlc3RzID0gc2F2ZS5yZXF1ZXN0cyA/ICQud2hlbiggcmVxdWVzdCwgc2F2ZS5yZXF1ZXN0cyApIDogcmVxdWVzdDtcblxuXHRcdC8vIElmIHdlJ3JlIHdhaXRpbmcgdG8gcmVtb3ZlICdTYXZlZC4nLCBzdG9wLlxuXHRcdGlmICggc2F2ZS5zYXZlZFRpbWVyICkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KCBzYXZlLnNhdmVkVGltZXIgKTtcblx0XHR9XG5cblx0XHR0aGlzLnVwZGF0ZVNhdmUoJ3dhaXRpbmcnKTtcblx0XHRzYXZlLnJlcXVlc3RzID0gcmVxdWVzdHM7XG5cdFx0cmVxdWVzdHMuYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdC8vIElmIHdlJ3ZlIHBlcmZvcm1lZCBhbm90aGVyIHJlcXVlc3Qgc2luY2UgdGhpcyBvbmUsIGJhaWwuXG5cdFx0XHRpZiAoIHNhdmUucmVxdWVzdHMgIT09IHJlcXVlc3RzICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHZpZXcudXBkYXRlU2F2ZSggcmVxdWVzdHMuc3RhdGUoKSA9PT0gJ3Jlc29sdmVkJyA/ICdjb21wbGV0ZScgOiAnZXJyb3InICk7XG5cdFx0XHRzYXZlLnNhdmVkVGltZXIgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmlldy51cGRhdGVTYXZlKCdyZWFkeScpO1xuXHRcdFx0XHRkZWxldGUgc2F2ZS5zYXZlZFRpbWVyO1xuXHRcdFx0fSwgMjAwMCApO1xuXHRcdH0pO1xuXHR9LFxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHN0YXR1c1xuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEudmlldy5BdHRhY2htZW50fSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0dXBkYXRlU2F2ZTogZnVuY3Rpb24oIHN0YXR1cyApIHtcblx0XHR2YXIgc2F2ZSA9IHRoaXMuX3NhdmUgPSB0aGlzLl9zYXZlIHx8IHsgc3RhdHVzOiAncmVhZHknIH07XG5cblx0XHRpZiAoIHN0YXR1cyAmJiBzdGF0dXMgIT09IHNhdmUuc3RhdHVzICkge1xuXHRcdFx0dGhpcy4kZWwucmVtb3ZlQ2xhc3MoICdzYXZlLScgKyBzYXZlLnN0YXR1cyApO1xuXHRcdFx0c2F2ZS5zdGF0dXMgPSBzdGF0dXM7XG5cdFx0fVxuXG5cdFx0dGhpcy4kZWwuYWRkQ2xhc3MoICdzYXZlLScgKyBzYXZlLnN0YXR1cyApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHVwZGF0ZUFsbDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyICRzZXR0aW5ncyA9IHRoaXMuJCgnW2RhdGEtc2V0dGluZ10nKSxcblx0XHRcdG1vZGVsID0gdGhpcy5tb2RlbCxcblx0XHRcdGNoYW5nZWQ7XG5cblx0XHRjaGFuZ2VkID0gXy5jaGFpbiggJHNldHRpbmdzICkubWFwKCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHR2YXIgJGlucHV0ID0gJCgnaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QsIFt2YWx1ZV0nLCBlbCApLFxuXHRcdFx0XHRzZXR0aW5nLCB2YWx1ZTtcblxuXHRcdFx0aWYgKCAhICRpbnB1dC5sZW5ndGggKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0c2V0dGluZyA9ICQoZWwpLmRhdGEoJ3NldHRpbmcnKTtcblx0XHRcdHZhbHVlID0gJGlucHV0LnZhbCgpO1xuXG5cdFx0XHQvLyBSZWNvcmQgdGhlIHZhbHVlIGlmIGl0IGNoYW5nZWQuXG5cdFx0XHRpZiAoIG1vZGVsLmdldCggc2V0dGluZyApICE9PSB2YWx1ZSApIHtcblx0XHRcdFx0cmV0dXJuIFsgc2V0dGluZywgdmFsdWUgXTtcblx0XHRcdH1cblx0XHR9KS5jb21wYWN0KCkub2JqZWN0KCkudmFsdWUoKTtcblxuXHRcdGlmICggISBfLmlzRW1wdHkoIGNoYW5nZWQgKSApIHtcblx0XHRcdG1vZGVsLnNhdmUoIGNoYW5nZWQgKTtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZXZlbnRcblx0ICovXG5cdHJlbW92ZUZyb21MaWJyYXJ5OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0Ly8gQ2F0Y2ggZW50ZXIgYW5kIHNwYWNlIGV2ZW50c1xuXHRcdGlmICggJ2tleWRvd24nID09PSBldmVudC50eXBlICYmIDEzICE9PSBldmVudC5rZXlDb2RlICYmIDMyICE9PSBldmVudC5rZXlDb2RlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFN0b3AgcHJvcGFnYXRpb24gc28gdGhlIG1vZGVsIGlzbid0IHNlbGVjdGVkLlxuXHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG5cdFx0dGhpcy5jb2xsZWN0aW9uLnJlbW92ZSggdGhpcy5tb2RlbCApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBBZGQgdGhlIG1vZGVsIGlmIGl0IGlzbid0IGluIHRoZSBzZWxlY3Rpb24sIGlmIGl0IGlzIGluIHRoZSBzZWxlY3Rpb24sXG5cdCAqIHJlbW92ZSBpdC5cblx0ICpcblx0ICogQHBhcmFtICB7W3R5cGVdfSBldmVudCBbZGVzY3JpcHRpb25dXG5cdCAqIEByZXR1cm4ge1t0eXBlXX0gICAgICAgW2Rlc2NyaXB0aW9uXVxuXHQgKi9cblx0Y2hlY2tDbGlja0hhbmRsZXI6IGZ1bmN0aW9uICggZXZlbnQgKSB7XG5cdFx0dmFyIHNlbGVjdGlvbiA9IHRoaXMub3B0aW9ucy5zZWxlY3Rpb247XG5cdFx0aWYgKCAhIHNlbGVjdGlvbiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0aWYgKCBzZWxlY3Rpb24ud2hlcmUoIHsgaWQ6IHRoaXMubW9kZWwuZ2V0KCAnaWQnICkgfSApLmxlbmd0aCApIHtcblx0XHRcdHNlbGVjdGlvbi5yZW1vdmUoIHRoaXMubW9kZWwgKTtcblx0XHRcdC8vIE1vdmUgZm9jdXMgYmFjayB0byB0aGUgYXR0YWNobWVudCB0aWxlIChmcm9tIHRoZSBjaGVjaykuXG5cdFx0XHR0aGlzLiRlbC5mb2N1cygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZWxlY3Rpb24uYWRkKCB0aGlzLm1vZGVsICk7XG5cdFx0fVxuXHR9XG59KTtcblxuLy8gRW5zdXJlIHNldHRpbmdzIHJlbWFpbiBpbiBzeW5jIGJldHdlZW4gYXR0YWNobWVudCB2aWV3cy5cbl8uZWFjaCh7XG5cdGNhcHRpb246ICdfc3luY0NhcHRpb24nLFxuXHR0aXRsZTogICAnX3N5bmNUaXRsZScsXG5cdGFydGlzdDogICdfc3luY0FydGlzdCcsXG5cdGFsYnVtOiAgICdfc3luY0FsYnVtJ1xufSwgZnVuY3Rpb24oIG1ldGhvZCwgc2V0dGluZyApIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7QmFja2JvbmUuTW9kZWx9IG1vZGVsXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEudmlldy5BdHRhY2htZW50fSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0QXR0YWNobWVudC5wcm90b3R5cGVbIG1ldGhvZCBdID0gZnVuY3Rpb24oIG1vZGVsLCB2YWx1ZSApIHtcblx0XHR2YXIgJHNldHRpbmcgPSB0aGlzLiQoJ1tkYXRhLXNldHRpbmc9XCInICsgc2V0dGluZyArICdcIl0nKTtcblxuXHRcdGlmICggISAkc2V0dGluZy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHQvLyBJZiB0aGUgdXBkYXRlZCB2YWx1ZSBpcyBpbiBzeW5jIHdpdGggdGhlIHZhbHVlIGluIHRoZSBET00sIHRoZXJlXG5cdFx0Ly8gaXMgbm8gbmVlZCB0byByZS1yZW5kZXIuIElmIHdlJ3JlIGN1cnJlbnRseSBlZGl0aW5nIHRoZSB2YWx1ZSxcblx0XHQvLyBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgaW4gc3luYywgc3VwcHJlc3NpbmcgdGhlIHJlLXJlbmRlciBmb3Jcblx0XHQvLyB0aGUgdmlldyB3ZSdyZSBlZGl0aW5nLCB3aGlsZSB1cGRhdGluZyBhbnkgb3RoZXJzLlxuXHRcdGlmICggdmFsdWUgPT09ICRzZXR0aW5nLmZpbmQoJ2lucHV0LCB0ZXh0YXJlYSwgc2VsZWN0LCBbdmFsdWVdJykudmFsKCkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5yZW5kZXIoKTtcblx0fTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF0dGFjaG1lbnQ7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudC5EZXRhaWxzXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5BdHRhY2htZW50XG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBBdHRhY2htZW50ID0gd3AubWVkaWEudmlldy5BdHRhY2htZW50LFxuXHRsMTBuID0gd3AubWVkaWEudmlldy5sMTBuLFxuXHREZXRhaWxzO1xuXG5EZXRhaWxzID0gQXR0YWNobWVudC5leHRlbmQoe1xuXHR0YWdOYW1lOiAgICdkaXYnLFxuXHRjbGFzc05hbWU6ICdhdHRhY2htZW50LWRldGFpbHMnLFxuXHR0ZW1wbGF0ZTogIHdwLnRlbXBsYXRlKCdhdHRhY2htZW50LWRldGFpbHMnKSxcblxuXHRhdHRyaWJ1dGVzOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J3RhYkluZGV4JzogICAgIDAsXG5cdFx0XHQnZGF0YS1pZCc6ICAgICAgdGhpcy5tb2RlbC5nZXQoICdpZCcgKVxuXHRcdH07XG5cdH0sXG5cblx0ZXZlbnRzOiB7XG5cdFx0J2NoYW5nZSBbZGF0YS1zZXR0aW5nXSc6ICAgICAgICAgICd1cGRhdGVTZXR0aW5nJyxcblx0XHQnY2hhbmdlIFtkYXRhLXNldHRpbmddIGlucHV0JzogICAgJ3VwZGF0ZVNldHRpbmcnLFxuXHRcdCdjaGFuZ2UgW2RhdGEtc2V0dGluZ10gc2VsZWN0JzogICAndXBkYXRlU2V0dGluZycsXG5cdFx0J2NoYW5nZSBbZGF0YS1zZXR0aW5nXSB0ZXh0YXJlYSc6ICd1cGRhdGVTZXR0aW5nJyxcblx0XHQnY2xpY2sgLmRlbGV0ZS1hdHRhY2htZW50JzogICAgICAgJ2RlbGV0ZUF0dGFjaG1lbnQnLFxuXHRcdCdjbGljayAudHJhc2gtYXR0YWNobWVudCc6ICAgICAgICAndHJhc2hBdHRhY2htZW50Jyxcblx0XHQnY2xpY2sgLnVudHJhc2gtYXR0YWNobWVudCc6ICAgICAgJ3VudHJhc2hBdHRhY2htZW50Jyxcblx0XHQnY2xpY2sgLmVkaXQtYXR0YWNobWVudCc6ICAgICAgICAgJ2VkaXRBdHRhY2htZW50Jyxcblx0XHQna2V5ZG93bic6ICAgICAgICAgICAgICAgICAgICAgICAgJ3RvZ2dsZVNlbGVjdGlvbkhhbmRsZXInXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5vcHRpb25zID0gXy5kZWZhdWx0cyggdGhpcy5vcHRpb25zLCB7XG5cdFx0XHRyZXJlbmRlck9uTW9kZWxDaGFuZ2U6IGZhbHNlXG5cdFx0fSk7XG5cblx0XHR0aGlzLm9uKCAncmVhZHknLCB0aGlzLmluaXRpYWxGb2N1cyApO1xuXHRcdC8vIENhbGwgJ2luaXRpYWxpemUnIGRpcmVjdGx5IG9uIHRoZSBwYXJlbnQgY2xhc3MuXG5cdFx0QXR0YWNobWVudC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH0sXG5cblx0aW5pdGlhbEZvY3VzOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoICEgd3AubWVkaWEuaXNUb3VjaERldmljZSApIHtcblx0XHRcdC8qXG5cdFx0XHRQcmV2aW91c2x5IGZvY3VzZWQgdGhlIGZpcnN0ICc6aW5wdXQnICh0aGUgcmVhZG9ubHkgVVJMIHRleHQgZmllbGQpLlxuXHRcdFx0U2luY2UgdGhlIGZpcnN0ICc6aW5wdXQnIGlzIG5vdyBhIGJ1dHRvbiAoZGVsZXRlL3RyYXNoKTogd2hlbiBwcmVzc2luZ1xuXHRcdFx0c3BhY2ViYXIgb24gYW4gYXR0YWNobWVudCwgRmlyZWZveCBmaXJlcyBkZWxldGVBdHRhY2htZW50L3RyYXNoQXR0YWNobWVudFxuXHRcdFx0YXMgc29vbiBhcyBmb2N1cyBpcyBtb3ZlZC4gRXhwbGljaXRseSB0YXJnZXQgdGhlIGZpcnN0IHRleHQgZmllbGQgZm9yIG5vdy5cblx0XHRcdEB0b2RvIGNoYW5nZSBpbml0aWFsIGZvY3VzIGxvZ2ljLCBhbHNvIGZvciBhY2Nlc3NpYmlsaXR5LlxuXHRcdFx0Ki9cblx0XHRcdHRoaXMuJCggJ2lucHV0W3R5cGU9XCJ0ZXh0XCJdJyApLmVxKCAwICkuZm9jdXMoKTtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZXZlbnRcblx0ICovXG5cdGRlbGV0ZUF0dGFjaG1lbnQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0aWYgKCB3aW5kb3cuY29uZmlybSggbDEwbi53YXJuRGVsZXRlICkgKSB7XG5cdFx0XHR0aGlzLm1vZGVsLmRlc3Ryb3koKTtcblx0XHRcdC8vIEtlZXAgZm9jdXMgaW5zaWRlIG1lZGlhIG1vZGFsXG5cdFx0XHQvLyBhZnRlciBpbWFnZSBpcyBkZWxldGVkXG5cdFx0XHR0aGlzLmNvbnRyb2xsZXIubW9kYWwuZm9jdXNNYW5hZ2VyLmZvY3VzKCk7XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XG5cdCAqL1xuXHR0cmFzaEF0dGFjaG1lbnQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgbGlicmFyeSA9IHRoaXMuY29udHJvbGxlci5saWJyYXJ5O1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRpZiAoIHdwLm1lZGlhLnZpZXcuc2V0dGluZ3MubWVkaWFUcmFzaCAmJlxuXHRcdFx0J2VkaXQtbWV0YWRhdGEnID09PSB0aGlzLmNvbnRyb2xsZXIuY29udGVudC5tb2RlKCkgKSB7XG5cblx0XHRcdHRoaXMubW9kZWwuc2V0KCAnc3RhdHVzJywgJ3RyYXNoJyApO1xuXHRcdFx0dGhpcy5tb2RlbC5zYXZlKCkuZG9uZSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxpYnJhcnkuX3JlcXVlcnkoIHRydWUgKTtcblx0XHRcdH0gKTtcblx0XHR9ICBlbHNlIHtcblx0XHRcdHRoaXMubW9kZWwuZGVzdHJveSgpO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxuXHQgKi9cblx0dW50cmFzaEF0dGFjaG1lbnQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgbGlicmFyeSA9IHRoaXMuY29udHJvbGxlci5saWJyYXJ5O1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHR0aGlzLm1vZGVsLnNldCggJ3N0YXR1cycsICdpbmhlcml0JyApO1xuXHRcdHRoaXMubW9kZWwuc2F2ZSgpLmRvbmUoIGZ1bmN0aW9uKCkge1xuXHRcdFx0bGlicmFyeS5fcmVxdWVyeSggdHJ1ZSApO1xuXHRcdH0gKTtcblx0fSxcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxuXHQgKi9cblx0ZWRpdEF0dGFjaG1lbnQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgZWRpdFN0YXRlID0gdGhpcy5jb250cm9sbGVyLnN0YXRlcy5nZXQoICdlZGl0LWltYWdlJyApO1xuXHRcdGlmICggd2luZG93LmltYWdlRWRpdCAmJiBlZGl0U3RhdGUgKSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0XHRlZGl0U3RhdGUuc2V0KCAnaW1hZ2UnLCB0aGlzLm1vZGVsICk7XG5cdFx0XHR0aGlzLmNvbnRyb2xsZXIuc2V0U3RhdGUoICdlZGl0LWltYWdlJyApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLiRlbC5hZGRDbGFzcygnbmVlZHMtcmVmcmVzaCcpO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIFdoZW4gcmV2ZXJzZSB0YWJiaW5nKHNoaWZ0K3RhYikgb3V0IG9mIHRoZSByaWdodCBkZXRhaWxzIHBhbmVsLCBkZWxpdmVyXG5cdCAqIHRoZSBmb2N1cyB0byB0aGUgaXRlbSBpbiB0aGUgbGlzdCB0aGF0IHdhcyBiZWluZyBlZGl0ZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxuXHQgKi9cblx0dG9nZ2xlU2VsZWN0aW9uSGFuZGxlcjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdGlmICggJ2tleWRvd24nID09PSBldmVudC50eXBlICYmIDkgPT09IGV2ZW50LmtleUNvZGUgJiYgZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQudGFyZ2V0ID09PSB0aGlzLiQoICc6dGFiYmFibGUnICkuZ2V0KCAwICkgKSB7XG5cdFx0XHR0aGlzLmNvbnRyb2xsZXIudHJpZ2dlciggJ2F0dGFjaG1lbnQ6ZGV0YWlsczpzaGlmdC10YWInLCBldmVudCApO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmICggMzcgPT09IGV2ZW50LmtleUNvZGUgfHwgMzggPT09IGV2ZW50LmtleUNvZGUgfHwgMzkgPT09IGV2ZW50LmtleUNvZGUgfHwgNDAgPT09IGV2ZW50LmtleUNvZGUgKSB7XG5cdFx0XHR0aGlzLmNvbnRyb2xsZXIudHJpZ2dlciggJ2F0dGFjaG1lbnQ6a2V5ZG93bjphcnJvdycsIGV2ZW50ICk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBEZXRhaWxzO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnQuRWRpdExpYnJhcnlcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIEVkaXRMaWJyYXJ5ID0gd3AubWVkaWEudmlldy5BdHRhY2htZW50LmV4dGVuZCh7XG5cdGJ1dHRvbnM6IHtcblx0XHRjbG9zZTogdHJ1ZVxuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBFZGl0TGlicmFyeTtcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5BdHRhY2htZW50cy5FZGl0U2VsZWN0aW9uXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5BdHRhY2htZW50LlNlbGVjdGlvblxuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudFxuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgRWRpdFNlbGVjdGlvbiA9IHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudC5TZWxlY3Rpb24uZXh0ZW5kKHtcblx0YnV0dG9uczoge1xuXHRcdGNsb3NlOiB0cnVlXG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEVkaXRTZWxlY3Rpb247XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudC5MaWJyYXJ5XG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5BdHRhY2htZW50XG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBMaWJyYXJ5ID0gd3AubWVkaWEudmlldy5BdHRhY2htZW50LmV4dGVuZCh7XG5cdGJ1dHRvbnM6IHtcblx0XHRjaGVjazogdHJ1ZVxuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBMaWJyYXJ5O1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnQuU2VsZWN0aW9uXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5BdHRhY2htZW50XG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBTZWxlY3Rpb24gPSB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnQuZXh0ZW5kKHtcblx0Y2xhc3NOYW1lOiAnYXR0YWNobWVudCBzZWxlY3Rpb24nLFxuXG5cdC8vIE9uIGNsaWNrLCBqdXN0IHNlbGVjdCB0aGUgbW9kZWwsIGluc3RlYWQgb2YgcmVtb3ZpbmcgdGhlIG1vZGVsIGZyb21cblx0Ly8gdGhlIHNlbGVjdGlvbi5cblx0dG9nZ2xlU2VsZWN0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLm9wdGlvbnMuc2VsZWN0aW9uLnNpbmdsZSggdGhpcy5tb2RlbCApO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZWxlY3Rpb247XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudHNcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIFZpZXcgPSB3cC5tZWRpYS5WaWV3LFxuXHQkID0galF1ZXJ5LFxuXHRBdHRhY2htZW50cztcblxuQXR0YWNobWVudHMgPSBWaWV3LmV4dGVuZCh7XG5cdHRhZ05hbWU6ICAgJ3VsJyxcblx0Y2xhc3NOYW1lOiAnYXR0YWNobWVudHMnLFxuXG5cdGF0dHJpYnV0ZXM6IHtcblx0XHR0YWJJbmRleDogLTFcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmVsLmlkID0gXy51bmlxdWVJZCgnX19hdHRhY2htZW50cy12aWV3LScpO1xuXG5cdFx0Xy5kZWZhdWx0cyggdGhpcy5vcHRpb25zLCB7XG5cdFx0XHRyZWZyZXNoU2Vuc2l0aXZpdHk6IHdwLm1lZGlhLmlzVG91Y2hEZXZpY2UgPyAzMDAgOiAyMDAsXG5cdFx0XHRyZWZyZXNoVGhyZXNob2xkOiAgIDMsXG5cdFx0XHRBdHRhY2htZW50VmlldzogICAgIHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudCxcblx0XHRcdHNvcnRhYmxlOiAgICAgICAgICAgZmFsc2UsXG5cdFx0XHRyZXNpemU6ICAgICAgICAgICAgIHRydWUsXG5cdFx0XHRpZGVhbENvbHVtbldpZHRoOiAgICQoIHdpbmRvdyApLndpZHRoKCkgPCA2NDAgPyAxMzUgOiAxNTBcblx0XHR9KTtcblxuXHRcdHRoaXMuX3ZpZXdzQnlDaWQgPSB7fTtcblx0XHR0aGlzLiR3aW5kb3cgPSAkKCB3aW5kb3cgKTtcblx0XHR0aGlzLnJlc2l6ZUV2ZW50ID0gJ3Jlc2l6ZS5tZWRpYS1tb2RhbC1jb2x1bW5zJztcblxuXHRcdHRoaXMuY29sbGVjdGlvbi5vbiggJ2FkZCcsIGZ1bmN0aW9uKCBhdHRhY2htZW50ICkge1xuXHRcdFx0dGhpcy52aWV3cy5hZGQoIHRoaXMuY3JlYXRlQXR0YWNobWVudFZpZXcoIGF0dGFjaG1lbnQgKSwge1xuXHRcdFx0XHRhdDogdGhpcy5jb2xsZWN0aW9uLmluZGV4T2YoIGF0dGFjaG1lbnQgKVxuXHRcdFx0fSk7XG5cdFx0fSwgdGhpcyApO1xuXG5cdFx0dGhpcy5jb2xsZWN0aW9uLm9uKCAncmVtb3ZlJywgZnVuY3Rpb24oIGF0dGFjaG1lbnQgKSB7XG5cdFx0XHR2YXIgdmlldyA9IHRoaXMuX3ZpZXdzQnlDaWRbIGF0dGFjaG1lbnQuY2lkIF07XG5cdFx0XHRkZWxldGUgdGhpcy5fdmlld3NCeUNpZFsgYXR0YWNobWVudC5jaWQgXTtcblxuXHRcdFx0aWYgKCB2aWV3ICkge1xuXHRcdFx0XHR2aWV3LnJlbW92ZSgpO1xuXHRcdFx0fVxuXHRcdH0sIHRoaXMgKTtcblxuXHRcdHRoaXMuY29sbGVjdGlvbi5vbiggJ3Jlc2V0JywgdGhpcy5yZW5kZXIsIHRoaXMgKTtcblxuXHRcdHRoaXMubGlzdGVuVG8oIHRoaXMuY29udHJvbGxlciwgJ2xpYnJhcnk6c2VsZWN0aW9uOmFkZCcsICAgIHRoaXMuYXR0YWNobWVudEZvY3VzICk7XG5cblx0XHQvLyBUaHJvdHRsZSB0aGUgc2Nyb2xsIGhhbmRsZXIgYW5kIGJpbmQgdGhpcy5cblx0XHR0aGlzLnNjcm9sbCA9IF8uY2hhaW4oIHRoaXMuc2Nyb2xsICkuYmluZCggdGhpcyApLnRocm90dGxlKCB0aGlzLm9wdGlvbnMucmVmcmVzaFNlbnNpdGl2aXR5ICkudmFsdWUoKTtcblxuXHRcdHRoaXMub3B0aW9ucy5zY3JvbGxFbGVtZW50ID0gdGhpcy5vcHRpb25zLnNjcm9sbEVsZW1lbnQgfHwgdGhpcy5lbDtcblx0XHQkKCB0aGlzLm9wdGlvbnMuc2Nyb2xsRWxlbWVudCApLm9uKCAnc2Nyb2xsJywgdGhpcy5zY3JvbGwgKTtcblxuXHRcdHRoaXMuaW5pdFNvcnRhYmxlKCk7XG5cblx0XHRfLmJpbmRBbGwoIHRoaXMsICdzZXRDb2x1bW5zJyApO1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMucmVzaXplICkge1xuXHRcdFx0dGhpcy5vbiggJ3JlYWR5JywgdGhpcy5iaW5kRXZlbnRzICk7XG5cdFx0XHR0aGlzLmNvbnRyb2xsZXIub24oICdvcGVuJywgdGhpcy5zZXRDb2x1bW5zICk7XG5cblx0XHRcdC8vIENhbGwgdGhpcy5zZXRDb2x1bW5zKCkgYWZ0ZXIgdGhpcyB2aWV3IGhhcyBiZWVuIHJlbmRlcmVkIGluIHRoZSBET00gc29cblx0XHRcdC8vIGF0dGFjaG1lbnRzIGdldCBwcm9wZXIgd2lkdGggYXBwbGllZC5cblx0XHRcdF8uZGVmZXIoIHRoaXMuc2V0Q29sdW1ucywgdGhpcyApO1xuXHRcdH1cblx0fSxcblxuXHRiaW5kRXZlbnRzOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLiR3aW5kb3cub2ZmKCB0aGlzLnJlc2l6ZUV2ZW50ICkub24oIHRoaXMucmVzaXplRXZlbnQsIF8uZGVib3VuY2UoIHRoaXMuc2V0Q29sdW1ucywgNTAgKSApO1xuXHR9LFxuXG5cdGF0dGFjaG1lbnRGb2N1czogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy4kKCAnbGk6Zmlyc3QnICkuZm9jdXMoKTtcblx0fSxcblxuXHRyZXN0b3JlRm9jdXM6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuJCggJ2xpLnNlbGVjdGVkOmZpcnN0JyApLmZvY3VzKCk7XG5cdH0sXG5cblx0YXJyb3dFdmVudDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBhdHRhY2htZW50cyA9IHRoaXMuJGVsLmNoaWxkcmVuKCAnbGknICksXG5cdFx0XHRwZXJSb3cgPSB0aGlzLmNvbHVtbnMsXG5cdFx0XHRpbmRleCA9IGF0dGFjaG1lbnRzLmZpbHRlciggJzpmb2N1cycgKS5pbmRleCgpLFxuXHRcdFx0cm93ID0gKCBpbmRleCArIDEgKSA8PSBwZXJSb3cgPyAxIDogTWF0aC5jZWlsKCAoIGluZGV4ICsgMSApIC8gcGVyUm93ICk7XG5cblx0XHRpZiAoIGluZGV4ID09PSAtMSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBMZWZ0IGFycm93XG5cdFx0aWYgKCAzNyA9PT0gZXZlbnQua2V5Q29kZSApIHtcblx0XHRcdGlmICggMCA9PT0gaW5kZXggKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGF0dGFjaG1lbnRzLmVxKCBpbmRleCAtIDEgKS5mb2N1cygpO1xuXHRcdH1cblxuXHRcdC8vIFVwIGFycm93XG5cdFx0aWYgKCAzOCA9PT0gZXZlbnQua2V5Q29kZSApIHtcblx0XHRcdGlmICggMSA9PT0gcm93ICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRhdHRhY2htZW50cy5lcSggaW5kZXggLSBwZXJSb3cgKS5mb2N1cygpO1xuXHRcdH1cblxuXHRcdC8vIFJpZ2h0IGFycm93XG5cdFx0aWYgKCAzOSA9PT0gZXZlbnQua2V5Q29kZSApIHtcblx0XHRcdGlmICggYXR0YWNobWVudHMubGVuZ3RoID09PSBpbmRleCApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0YXR0YWNobWVudHMuZXEoIGluZGV4ICsgMSApLmZvY3VzKCk7XG5cdFx0fVxuXG5cdFx0Ly8gRG93biBhcnJvd1xuXHRcdGlmICggNDAgPT09IGV2ZW50LmtleUNvZGUgKSB7XG5cdFx0XHRpZiAoIE1hdGguY2VpbCggYXR0YWNobWVudHMubGVuZ3RoIC8gcGVyUm93ICkgPT09IHJvdyApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0YXR0YWNobWVudHMuZXEoIGluZGV4ICsgcGVyUm93ICkuZm9jdXMoKTtcblx0XHR9XG5cdH0sXG5cblx0ZGlzcG9zZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5jb2xsZWN0aW9uLnByb3BzLm9mZiggbnVsbCwgbnVsbCwgdGhpcyApO1xuXHRcdGlmICggdGhpcy5vcHRpb25zLnJlc2l6ZSApIHtcblx0XHRcdHRoaXMuJHdpbmRvdy5vZmYoIHRoaXMucmVzaXplRXZlbnQgKTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBjYWxsICdkaXNwb3NlJyBkaXJlY3RseSBvbiB0aGUgcGFyZW50IGNsYXNzXG5cdFx0ICovXG5cdFx0Vmlldy5wcm90b3R5cGUuZGlzcG9zZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH0sXG5cblx0c2V0Q29sdW1uczogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHByZXYgPSB0aGlzLmNvbHVtbnMsXG5cdFx0XHR3aWR0aCA9IHRoaXMuJGVsLndpZHRoKCk7XG5cblx0XHRpZiAoIHdpZHRoICkge1xuXHRcdFx0dGhpcy5jb2x1bW5zID0gTWF0aC5taW4oIE1hdGgucm91bmQoIHdpZHRoIC8gdGhpcy5vcHRpb25zLmlkZWFsQ29sdW1uV2lkdGggKSwgMTIgKSB8fCAxO1xuXG5cdFx0XHRpZiAoICEgcHJldiB8fCBwcmV2ICE9PSB0aGlzLmNvbHVtbnMgKSB7XG5cdFx0XHRcdHRoaXMuJGVsLmNsb3Nlc3QoICcubWVkaWEtZnJhbWUtY29udGVudCcgKS5hdHRyKCAnZGF0YS1jb2x1bW5zJywgdGhpcy5jb2x1bW5zICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdGluaXRTb3J0YWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNvbGxlY3Rpb24gPSB0aGlzLmNvbGxlY3Rpb247XG5cblx0XHRpZiAoIHdwLm1lZGlhLmlzVG91Y2hEZXZpY2UgfHwgISB0aGlzLm9wdGlvbnMuc29ydGFibGUgfHwgISAkLmZuLnNvcnRhYmxlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuJGVsLnNvcnRhYmxlKCBfLmV4dGVuZCh7XG5cdFx0XHQvLyBJZiB0aGUgYGNvbGxlY3Rpb25gIGhhcyBhIGBjb21wYXJhdG9yYCwgZGlzYWJsZSBzb3J0aW5nLlxuXHRcdFx0ZGlzYWJsZWQ6ICEhIGNvbGxlY3Rpb24uY29tcGFyYXRvcixcblxuXHRcdFx0Ly8gQ2hhbmdlIHRoZSBwb3NpdGlvbiBvZiB0aGUgYXR0YWNobWVudCBhcyBzb29uIGFzIHRoZVxuXHRcdFx0Ly8gbW91c2UgcG9pbnRlciBvdmVybGFwcyBhIHRodW1ibmFpbC5cblx0XHRcdHRvbGVyYW5jZTogJ3BvaW50ZXInLFxuXG5cdFx0XHQvLyBSZWNvcmQgdGhlIGluaXRpYWwgYGluZGV4YCBvZiB0aGUgZHJhZ2dlZCBtb2RlbC5cblx0XHRcdHN0YXJ0OiBmdW5jdGlvbiggZXZlbnQsIHVpICkge1xuXHRcdFx0XHR1aS5pdGVtLmRhdGEoJ3NvcnRhYmxlSW5kZXhTdGFydCcsIHVpLml0ZW0uaW5kZXgoKSk7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBVcGRhdGUgdGhlIG1vZGVsJ3MgaW5kZXggaW4gdGhlIGNvbGxlY3Rpb24uXG5cdFx0XHQvLyBEbyBzbyBzaWxlbnRseSwgYXMgdGhlIHZpZXcgaXMgYWxyZWFkeSBhY2N1cmF0ZS5cblx0XHRcdHVwZGF0ZTogZnVuY3Rpb24oIGV2ZW50LCB1aSApIHtcblx0XHRcdFx0dmFyIG1vZGVsID0gY29sbGVjdGlvbi5hdCggdWkuaXRlbS5kYXRhKCdzb3J0YWJsZUluZGV4U3RhcnQnKSApLFxuXHRcdFx0XHRcdGNvbXBhcmF0b3IgPSBjb2xsZWN0aW9uLmNvbXBhcmF0b3I7XG5cblx0XHRcdFx0Ly8gVGVtcG9yYXJpbHkgZGlzYWJsZSB0aGUgY29tcGFyYXRvciB0byBwcmV2ZW50IGBhZGRgXG5cdFx0XHRcdC8vIGZyb20gcmUtc29ydGluZy5cblx0XHRcdFx0ZGVsZXRlIGNvbGxlY3Rpb24uY29tcGFyYXRvcjtcblxuXHRcdFx0XHQvLyBTaWxlbnRseSBzaGlmdCB0aGUgbW9kZWwgdG8gaXRzIG5ldyBpbmRleC5cblx0XHRcdFx0Y29sbGVjdGlvbi5yZW1vdmUoIG1vZGVsLCB7XG5cdFx0XHRcdFx0c2lsZW50OiB0cnVlXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRjb2xsZWN0aW9uLmFkZCggbW9kZWwsIHtcblx0XHRcdFx0XHRzaWxlbnQ6IHRydWUsXG5cdFx0XHRcdFx0YXQ6ICAgICB1aS5pdGVtLmluZGV4KClcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Ly8gUmVzdG9yZSB0aGUgY29tcGFyYXRvci5cblx0XHRcdFx0Y29sbGVjdGlvbi5jb21wYXJhdG9yID0gY29tcGFyYXRvcjtcblxuXHRcdFx0XHQvLyBGaXJlIHRoZSBgcmVzZXRgIGV2ZW50IHRvIGVuc3VyZSBvdGhlciBjb2xsZWN0aW9ucyBzeW5jLlxuXHRcdFx0XHRjb2xsZWN0aW9uLnRyaWdnZXIoICdyZXNldCcsIGNvbGxlY3Rpb24gKTtcblxuXHRcdFx0XHQvLyBJZiB0aGUgY29sbGVjdGlvbiBpcyBzb3J0ZWQgYnkgbWVudSBvcmRlcixcblx0XHRcdFx0Ly8gdXBkYXRlIHRoZSBtZW51IG9yZGVyLlxuXHRcdFx0XHRjb2xsZWN0aW9uLnNhdmVNZW51T3JkZXIoKTtcblx0XHRcdH1cblx0XHR9LCB0aGlzLm9wdGlvbnMuc29ydGFibGUgKSApO1xuXG5cdFx0Ly8gSWYgdGhlIGBvcmRlcmJ5YCBwcm9wZXJ0eSBpcyBjaGFuZ2VkIG9uIHRoZSBgY29sbGVjdGlvbmAsXG5cdFx0Ly8gY2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSBgY29tcGFyYXRvcmAuIElmIHNvLCBkaXNhYmxlIHNvcnRpbmcuXG5cdFx0Y29sbGVjdGlvbi5wcm9wcy5vbiggJ2NoYW5nZTpvcmRlcmJ5JywgZnVuY3Rpb24oKSB7XG5cdFx0XHR0aGlzLiRlbC5zb3J0YWJsZSggJ29wdGlvbicsICdkaXNhYmxlZCcsICEhIGNvbGxlY3Rpb24uY29tcGFyYXRvciApO1xuXHRcdH0sIHRoaXMgKTtcblxuXHRcdHRoaXMuY29sbGVjdGlvbi5wcm9wcy5vbiggJ2NoYW5nZTpvcmRlcmJ5JywgdGhpcy5yZWZyZXNoU29ydGFibGUsIHRoaXMgKTtcblx0XHR0aGlzLnJlZnJlc2hTb3J0YWJsZSgpO1xuXHR9LFxuXG5cdHJlZnJlc2hTb3J0YWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCB3cC5tZWRpYS5pc1RvdWNoRGV2aWNlIHx8ICEgdGhpcy5vcHRpb25zLnNvcnRhYmxlIHx8ICEgJC5mbi5zb3J0YWJsZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGUgYGNvbGxlY3Rpb25gIGhhcyBhIGBjb21wYXJhdG9yYCwgZGlzYWJsZSBzb3J0aW5nLlxuXHRcdHZhciBjb2xsZWN0aW9uID0gdGhpcy5jb2xsZWN0aW9uLFxuXHRcdFx0b3JkZXJieSA9IGNvbGxlY3Rpb24ucHJvcHMuZ2V0KCdvcmRlcmJ5JyksXG5cdFx0XHRlbmFibGVkID0gJ21lbnVPcmRlcicgPT09IG9yZGVyYnkgfHwgISBjb2xsZWN0aW9uLmNvbXBhcmF0b3I7XG5cblx0XHR0aGlzLiRlbC5zb3J0YWJsZSggJ29wdGlvbicsICdkaXNhYmxlZCcsICEgZW5hYmxlZCApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3dwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnR9IGF0dGFjaG1lbnRcblx0ICogQHJldHVybnMge3dwLm1lZGlhLlZpZXd9XG5cdCAqL1xuXHRjcmVhdGVBdHRhY2htZW50VmlldzogZnVuY3Rpb24oIGF0dGFjaG1lbnQgKSB7XG5cdFx0dmFyIHZpZXcgPSBuZXcgdGhpcy5vcHRpb25zLkF0dGFjaG1lbnRWaWV3KHtcblx0XHRcdGNvbnRyb2xsZXI6ICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXIsXG5cdFx0XHRtb2RlbDogICAgICAgICAgICAgICAgYXR0YWNobWVudCxcblx0XHRcdGNvbGxlY3Rpb246ICAgICAgICAgICB0aGlzLmNvbGxlY3Rpb24sXG5cdFx0XHRzZWxlY3Rpb246ICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNlbGVjdGlvblxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHRoaXMuX3ZpZXdzQnlDaWRbIGF0dGFjaG1lbnQuY2lkIF0gPSB2aWV3O1xuXHR9LFxuXG5cdHByZXBhcmU6IGZ1bmN0aW9uKCkge1xuXHRcdC8vIENyZWF0ZSBhbGwgb2YgdGhlIEF0dGFjaG1lbnQgdmlld3MsIGFuZCByZXBsYWNlXG5cdFx0Ly8gdGhlIGxpc3QgaW4gYSBzaW5nbGUgRE9NIG9wZXJhdGlvbi5cblx0XHRpZiAoIHRoaXMuY29sbGVjdGlvbi5sZW5ndGggKSB7XG5cdFx0XHR0aGlzLnZpZXdzLnNldCggdGhpcy5jb2xsZWN0aW9uLm1hcCggdGhpcy5jcmVhdGVBdHRhY2htZW50VmlldywgdGhpcyApICk7XG5cblx0XHQvLyBJZiB0aGVyZSBhcmUgbm8gZWxlbWVudHMsIGNsZWFyIHRoZSB2aWV3cyBhbmQgbG9hZCBzb21lLlxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnZpZXdzLnVuc2V0KCk7XG5cdFx0XHR0aGlzLmNvbGxlY3Rpb24ubW9yZSgpLmRvbmUoIHRoaXMuc2Nyb2xsICk7XG5cdFx0fVxuXHR9LFxuXG5cdHJlYWR5OiBmdW5jdGlvbigpIHtcblx0XHQvLyBUcmlnZ2VyIHRoZSBzY3JvbGwgZXZlbnQgdG8gY2hlY2sgaWYgd2UncmUgd2l0aGluIHRoZVxuXHRcdC8vIHRocmVzaG9sZCB0byBxdWVyeSBmb3IgYWRkaXRpb25hbCBhdHRhY2htZW50cy5cblx0XHR0aGlzLnNjcm9sbCgpO1xuXHR9LFxuXG5cdHNjcm9sbDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHZpZXcgPSB0aGlzLFxuXHRcdFx0ZWwgPSB0aGlzLm9wdGlvbnMuc2Nyb2xsRWxlbWVudCxcblx0XHRcdHNjcm9sbFRvcCA9IGVsLnNjcm9sbFRvcCxcblx0XHRcdHRvb2xiYXI7XG5cblx0XHQvLyBUaGUgc2Nyb2xsIGV2ZW50IG9jY3VycyBvbiB0aGUgZG9jdW1lbnQsIGJ1dCB0aGUgZWxlbWVudFxuXHRcdC8vIHRoYXQgc2hvdWxkIGJlIGNoZWNrZWQgaXMgdGhlIGRvY3VtZW50IGJvZHkuXG5cdFx0aWYgKCBlbCA9PT0gZG9jdW1lbnQgKSB7XG5cdFx0XHRlbCA9IGRvY3VtZW50LmJvZHk7XG5cdFx0XHRzY3JvbGxUb3AgPSAkKGRvY3VtZW50KS5zY3JvbGxUb3AoKTtcblx0XHR9XG5cblx0XHRpZiAoICEgJChlbCkuaXMoJzp2aXNpYmxlJykgfHwgISB0aGlzLmNvbGxlY3Rpb24uaGFzTW9yZSgpICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRvb2xiYXIgPSB0aGlzLnZpZXdzLnBhcmVudC50b29sYmFyO1xuXG5cdFx0Ly8gU2hvdyB0aGUgc3Bpbm5lciBvbmx5IGlmIHdlIGFyZSBjbG9zZSB0byB0aGUgYm90dG9tLlxuXHRcdGlmICggZWwuc2Nyb2xsSGVpZ2h0IC0gKCBzY3JvbGxUb3AgKyBlbC5jbGllbnRIZWlnaHQgKSA8IGVsLmNsaWVudEhlaWdodCAvIDMgKSB7XG5cdFx0XHR0b29sYmFyLmdldCgnc3Bpbm5lcicpLnNob3coKTtcblx0XHR9XG5cblx0XHRpZiAoIGVsLnNjcm9sbEhlaWdodCA8IHNjcm9sbFRvcCArICggZWwuY2xpZW50SGVpZ2h0ICogdGhpcy5vcHRpb25zLnJlZnJlc2hUaHJlc2hvbGQgKSApIHtcblx0XHRcdHRoaXMuY29sbGVjdGlvbi5tb3JlKCkuZG9uZShmdW5jdGlvbigpIHtcblx0XHRcdFx0dmlldy5zY3JvbGwoKTtcblx0XHRcdFx0dG9vbGJhci5nZXQoJ3NwaW5uZXInKS5oaWRlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF0dGFjaG1lbnRzO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRzQnJvd3NlclxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSAgICAgICAgIFtvcHRpb25zXSAgICAgICAgICAgICAgIFRoZSBvcHRpb25zIGhhc2ggcGFzc2VkIHRvIHRoZSB2aWV3LlxuICogQHBhcmFtIHtib29sZWFufHN0cmluZ30gW29wdGlvbnMuZmlsdGVycz1mYWxzZV0gV2hpY2ggZmlsdGVycyB0byBzaG93IGluIHRoZSBicm93c2VyJ3MgdG9vbGJhci5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjY2VwdHMgJ3VwbG9hZGVkJyBhbmQgJ2FsbCcuXG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICBbb3B0aW9ucy5zZWFyY2g9dHJ1ZV0gICBXaGV0aGVyIHRvIHNob3cgdGhlIHNlYXJjaCBpbnRlcmZhY2UgaW4gdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm93c2VyJ3MgdG9vbGJhci5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgIFtvcHRpb25zLmRhdGU9dHJ1ZV0gICAgIFdoZXRoZXIgdG8gc2hvdyB0aGUgZGF0ZSBmaWx0ZXIgaW4gdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm93c2VyJ3MgdG9vbGJhci5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gICAgICAgIFtvcHRpb25zLmRpc3BsYXk9ZmFsc2VdIFdoZXRoZXIgdG8gc2hvdyB0aGUgYXR0YWNobWVudHMgZGlzcGxheSBzZXR0aW5nc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldyBpbiB0aGUgc2lkZWJhci5cbiAqIEBwYXJhbSB7Ym9vbGVhbnxzdHJpbmd9IFtvcHRpb25zLnNpZGViYXI9dHJ1ZV0gIFdoZXRoZXIgdG8gY3JlYXRlIGEgc2lkZWJhciBmb3IgdGhlIGJyb3dzZXIuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHRzIHRydWUsIGZhbHNlLCBhbmQgJ2Vycm9ycycuXG4gKi9cbnZhciBWaWV3ID0gd3AubWVkaWEuVmlldyxcblx0bWVkaWFUcmFzaCA9IHdwLm1lZGlhLnZpZXcuc2V0dGluZ3MubWVkaWFUcmFzaCxcblx0bDEwbiA9IHdwLm1lZGlhLnZpZXcubDEwbixcblx0JCA9IGpRdWVyeSxcblx0QXR0YWNobWVudHNCcm93c2VyO1xuXG5BdHRhY2htZW50c0Jyb3dzZXIgPSBWaWV3LmV4dGVuZCh7XG5cdHRhZ05hbWU6ICAgJ2RpdicsXG5cdGNsYXNzTmFtZTogJ2F0dGFjaG1lbnRzLWJyb3dzZXInLFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdF8uZGVmYXVsdHMoIHRoaXMub3B0aW9ucywge1xuXHRcdFx0ZmlsdGVyczogZmFsc2UsXG5cdFx0XHRzZWFyY2g6ICB0cnVlLFxuXHRcdFx0ZGF0ZTogICAgdHJ1ZSxcblx0XHRcdGRpc3BsYXk6IGZhbHNlLFxuXHRcdFx0c2lkZWJhcjogdHJ1ZSxcblx0XHRcdEF0dGFjaG1lbnRWaWV3OiB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnQuTGlicmFyeVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5saXN0ZW5UbyggdGhpcy5jb250cm9sbGVyLCAndG9nZ2xlOnVwbG9hZDphdHRhY2htZW50JywgXy5iaW5kKCB0aGlzLnRvZ2dsZVVwbG9hZGVyLCB0aGlzICkgKTtcblx0XHR0aGlzLmNvbnRyb2xsZXIub24oICdlZGl0OnNlbGVjdGlvbicsIHRoaXMuZWRpdFNlbGVjdGlvbiApO1xuXHRcdHRoaXMuY3JlYXRlVG9vbGJhcigpO1xuXHRcdGlmICggdGhpcy5vcHRpb25zLnNpZGViYXIgKSB7XG5cdFx0XHR0aGlzLmNyZWF0ZVNpZGViYXIoKTtcblx0XHR9XG5cdFx0dGhpcy5jcmVhdGVVcGxvYWRlcigpO1xuXHRcdHRoaXMuY3JlYXRlQXR0YWNobWVudHMoKTtcblx0XHR0aGlzLnVwZGF0ZUNvbnRlbnQoKTtcblxuXHRcdGlmICggISB0aGlzLm9wdGlvbnMuc2lkZWJhciB8fCAnZXJyb3JzJyA9PT0gdGhpcy5vcHRpb25zLnNpZGViYXIgKSB7XG5cdFx0XHR0aGlzLiRlbC5hZGRDbGFzcyggJ2hpZGUtc2lkZWJhcicgKTtcblxuXHRcdFx0aWYgKCAnZXJyb3JzJyA9PT0gdGhpcy5vcHRpb25zLnNpZGViYXIgKSB7XG5cdFx0XHRcdHRoaXMuJGVsLmFkZENsYXNzKCAnc2lkZWJhci1mb3ItZXJyb3JzJyApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuY29sbGVjdGlvbi5vbiggJ2FkZCByZW1vdmUgcmVzZXQnLCB0aGlzLnVwZGF0ZUNvbnRlbnQsIHRoaXMgKTtcblx0fSxcblxuXHRlZGl0U2VsZWN0aW9uOiBmdW5jdGlvbiggbW9kYWwgKSB7XG5cdFx0bW9kYWwuJCggJy5tZWRpYS1idXR0b24tYmFja1RvTGlicmFyeScgKS5mb2N1cygpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEudmlldy5BdHRhY2htZW50c0Jyb3dzZXJ9IFJldHVybnMgaXRzZWxmIHRvIGFsbG93IGNoYWluaW5nXG5cdCAqL1xuXHRkaXNwb3NlOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLm9wdGlvbnMuc2VsZWN0aW9uLm9mZiggbnVsbCwgbnVsbCwgdGhpcyApO1xuXHRcdFZpZXcucHJvdG90eXBlLmRpc3Bvc2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNyZWF0ZVRvb2xiYXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBMaWJyYXJ5Vmlld1N3aXRjaGVyLCBGaWx0ZXJzLCB0b29sYmFyT3B0aW9ucztcblxuXHRcdHRvb2xiYXJPcHRpb25zID0ge1xuXHRcdFx0Y29udHJvbGxlcjogdGhpcy5jb250cm9sbGVyXG5cdFx0fTtcblxuXHRcdGlmICggdGhpcy5jb250cm9sbGVyLmlzTW9kZUFjdGl2ZSggJ2dyaWQnICkgKSB7XG5cdFx0XHR0b29sYmFyT3B0aW9ucy5jbGFzc05hbWUgPSAnbWVkaWEtdG9vbGJhciB3cC1maWx0ZXInO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCogQG1lbWJlciB7d3AubWVkaWEudmlldy5Ub29sYmFyfVxuXHRcdCovXG5cdFx0dGhpcy50b29sYmFyID0gbmV3IHdwLm1lZGlhLnZpZXcuVG9vbGJhciggdG9vbGJhck9wdGlvbnMgKTtcblxuXHRcdHRoaXMudmlld3MuYWRkKCB0aGlzLnRvb2xiYXIgKTtcblxuXHRcdHRoaXMudG9vbGJhci5zZXQoICdzcGlubmVyJywgbmV3IHdwLm1lZGlhLnZpZXcuU3Bpbm5lcih7XG5cdFx0XHRwcmlvcml0eTogLTYwXG5cdFx0fSkgKTtcblxuXHRcdGlmICggLTEgIT09ICQuaW5BcnJheSggdGhpcy5vcHRpb25zLmZpbHRlcnMsIFsgJ3VwbG9hZGVkJywgJ2FsbCcgXSApICkge1xuXHRcdFx0Ly8gXCJGaWx0ZXJzXCIgd2lsbCByZXR1cm4gYSA8c2VsZWN0PiwgbmVlZCB0byByZW5kZXJcblx0XHRcdC8vIHNjcmVlbiByZWFkZXIgdGV4dCBiZWZvcmVcblx0XHRcdHRoaXMudG9vbGJhci5zZXQoICdmaWx0ZXJzTGFiZWwnLCBuZXcgd3AubWVkaWEudmlldy5MYWJlbCh7XG5cdFx0XHRcdHZhbHVlOiBsMTBuLmZpbHRlckJ5VHlwZSxcblx0XHRcdFx0YXR0cmlidXRlczoge1xuXHRcdFx0XHRcdCdmb3InOiAgJ21lZGlhLWF0dGFjaG1lbnQtZmlsdGVycydcblx0XHRcdFx0fSxcblx0XHRcdFx0cHJpb3JpdHk6ICAgLTgwXG5cdFx0XHR9KS5yZW5kZXIoKSApO1xuXG5cdFx0XHRpZiAoICd1cGxvYWRlZCcgPT09IHRoaXMub3B0aW9ucy5maWx0ZXJzICkge1xuXHRcdFx0XHR0aGlzLnRvb2xiYXIuc2V0KCAnZmlsdGVycycsIG5ldyB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRGaWx0ZXJzLlVwbG9hZGVkKHtcblx0XHRcdFx0XHRjb250cm9sbGVyOiB0aGlzLmNvbnRyb2xsZXIsXG5cdFx0XHRcdFx0bW9kZWw6ICAgICAgdGhpcy5jb2xsZWN0aW9uLnByb3BzLFxuXHRcdFx0XHRcdHByaW9yaXR5OiAgIC04MFxuXHRcdFx0XHR9KS5yZW5kZXIoKSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0RmlsdGVycyA9IG5ldyB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRGaWx0ZXJzLkFsbCh7XG5cdFx0XHRcdFx0Y29udHJvbGxlcjogdGhpcy5jb250cm9sbGVyLFxuXHRcdFx0XHRcdG1vZGVsOiAgICAgIHRoaXMuY29sbGVjdGlvbi5wcm9wcyxcblx0XHRcdFx0XHRwcmlvcml0eTogICAtODBcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dGhpcy50b29sYmFyLnNldCggJ2ZpbHRlcnMnLCBGaWx0ZXJzLnJlbmRlcigpICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmVlbHMgb2RkIHRvIGJyaW5nIHRoZSBnbG9iYWwgbWVkaWEgbGlicmFyeSBzd2l0Y2hlciBpbnRvIHRoZSBBdHRhY2htZW50XG5cdFx0Ly8gYnJvd3NlciB2aWV3LiBJcyB0aGlzIGEgdXNlIGNhc2UgZm9yIGRvQWN0aW9uKCAnYWRkOnRvb2xiYXItaXRlbXM6YXR0YWNobWVudHMtYnJvd3NlcicsIHRoaXMudG9vbGJhciApO1xuXHRcdC8vIHdoaWNoIHRoZSBjb250cm9sbGVyIGNhbiB0YXAgaW50byBhbmQgYWRkIHRoaXMgdmlldz9cblx0XHRpZiAoIHRoaXMuY29udHJvbGxlci5pc01vZGVBY3RpdmUoICdncmlkJyApICkge1xuXHRcdFx0TGlicmFyeVZpZXdTd2l0Y2hlciA9IFZpZXcuZXh0ZW5kKHtcblx0XHRcdFx0Y2xhc3NOYW1lOiAndmlldy1zd2l0Y2ggbWVkaWEtZ3JpZC12aWV3LXN3aXRjaCcsXG5cdFx0XHRcdHRlbXBsYXRlOiB3cC50ZW1wbGF0ZSggJ21lZGlhLWxpYnJhcnktdmlldy1zd2l0Y2hlcicpXG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy50b29sYmFyLnNldCggJ2xpYnJhcnlWaWV3U3dpdGNoZXInLCBuZXcgTGlicmFyeVZpZXdTd2l0Y2hlcih7XG5cdFx0XHRcdGNvbnRyb2xsZXI6IHRoaXMuY29udHJvbGxlcixcblx0XHRcdFx0cHJpb3JpdHk6IC05MFxuXHRcdFx0fSkucmVuZGVyKCkgKTtcblxuXHRcdFx0Ly8gRGF0ZUZpbHRlciBpcyBhIDxzZWxlY3Q+LCBzY3JlZW4gcmVhZGVyIHRleHQgbmVlZHMgdG8gYmUgcmVuZGVyZWQgYmVmb3JlXG5cdFx0XHR0aGlzLnRvb2xiYXIuc2V0KCAnZGF0ZUZpbHRlckxhYmVsJywgbmV3IHdwLm1lZGlhLnZpZXcuTGFiZWwoe1xuXHRcdFx0XHR2YWx1ZTogbDEwbi5maWx0ZXJCeURhdGUsXG5cdFx0XHRcdGF0dHJpYnV0ZXM6IHtcblx0XHRcdFx0XHQnZm9yJzogJ21lZGlhLWF0dGFjaG1lbnQtZGF0ZS1maWx0ZXJzJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRwcmlvcml0eTogLTc1XG5cdFx0XHR9KS5yZW5kZXIoKSApO1xuXHRcdFx0dGhpcy50b29sYmFyLnNldCggJ2RhdGVGaWx0ZXInLCBuZXcgd3AubWVkaWEudmlldy5EYXRlRmlsdGVyKHtcblx0XHRcdFx0Y29udHJvbGxlcjogdGhpcy5jb250cm9sbGVyLFxuXHRcdFx0XHRtb2RlbDogICAgICB0aGlzLmNvbGxlY3Rpb24ucHJvcHMsXG5cdFx0XHRcdHByaW9yaXR5OiAtNzVcblx0XHRcdH0pLnJlbmRlcigpICk7XG5cblx0XHRcdC8vIEJ1bGtTZWxlY3Rpb24gaXMgYSA8ZGl2PiB3aXRoIHN1YnZpZXdzLCBpbmNsdWRpbmcgc2NyZWVuIHJlYWRlciB0ZXh0XG5cdFx0XHR0aGlzLnRvb2xiYXIuc2V0KCAnc2VsZWN0TW9kZVRvZ2dsZUJ1dHRvbicsIG5ldyB3cC5tZWRpYS52aWV3LlNlbGVjdE1vZGVUb2dnbGVCdXR0b24oe1xuXHRcdFx0XHR0ZXh0OiBsMTBuLmJ1bGtTZWxlY3QsXG5cdFx0XHRcdGNvbnRyb2xsZXI6IHRoaXMuY29udHJvbGxlcixcblx0XHRcdFx0cHJpb3JpdHk6IC03MFxuXHRcdFx0fSkucmVuZGVyKCkgKTtcblxuXHRcdFx0dGhpcy50b29sYmFyLnNldCggJ2RlbGV0ZVNlbGVjdGVkQnV0dG9uJywgbmV3IHdwLm1lZGlhLnZpZXcuRGVsZXRlU2VsZWN0ZWRCdXR0b24oe1xuXHRcdFx0XHRmaWx0ZXJzOiBGaWx0ZXJzLFxuXHRcdFx0XHRzdHlsZTogJ3ByaW1hcnknLFxuXHRcdFx0XHRkaXNhYmxlZDogdHJ1ZSxcblx0XHRcdFx0dGV4dDogbWVkaWFUcmFzaCA/IGwxMG4udHJhc2hTZWxlY3RlZCA6IGwxMG4uZGVsZXRlU2VsZWN0ZWQsXG5cdFx0XHRcdGNvbnRyb2xsZXI6IHRoaXMuY29udHJvbGxlcixcblx0XHRcdFx0cHJpb3JpdHk6IC02MCxcblx0XHRcdFx0Y2xpY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHZhciBjaGFuZ2VkID0gW10sIHJlbW92ZWQgPSBbXSxcblx0XHRcdFx0XHRcdHNlbGVjdGlvbiA9IHRoaXMuY29udHJvbGxlci5zdGF0ZSgpLmdldCggJ3NlbGVjdGlvbicgKSxcblx0XHRcdFx0XHRcdGxpYnJhcnkgPSB0aGlzLmNvbnRyb2xsZXIuc3RhdGUoKS5nZXQoICdsaWJyYXJ5JyApO1xuXG5cdFx0XHRcdFx0aWYgKCAhIHNlbGVjdGlvbi5sZW5ndGggKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCAhIG1lZGlhVHJhc2ggJiYgISB3aW5kb3cuY29uZmlybSggbDEwbi53YXJuQnVsa0RlbGV0ZSApICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICggbWVkaWFUcmFzaCAmJlxuXHRcdFx0XHRcdFx0J3RyYXNoJyAhPT0gc2VsZWN0aW9uLmF0KCAwICkuZ2V0KCAnc3RhdHVzJyApICYmXG5cdFx0XHRcdFx0XHQhIHdpbmRvdy5jb25maXJtKCBsMTBuLndhcm5CdWxrVHJhc2ggKSApIHtcblxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHNlbGVjdGlvbi5lYWNoKCBmdW5jdGlvbiggbW9kZWwgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICEgbW9kZWwuZ2V0KCAnbm9uY2VzJyApWydkZWxldGUnXSApIHtcblx0XHRcdFx0XHRcdFx0cmVtb3ZlZC5wdXNoKCBtb2RlbCApO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmICggbWVkaWFUcmFzaCAmJiAndHJhc2gnID09PSBtb2RlbC5nZXQoICdzdGF0dXMnICkgKSB7XG5cdFx0XHRcdFx0XHRcdG1vZGVsLnNldCggJ3N0YXR1cycsICdpbmhlcml0JyApO1xuXHRcdFx0XHRcdFx0XHRjaGFuZ2VkLnB1c2goIG1vZGVsLnNhdmUoKSApO1xuXHRcdFx0XHRcdFx0XHRyZW1vdmVkLnB1c2goIG1vZGVsICk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBtZWRpYVRyYXNoICkge1xuXHRcdFx0XHRcdFx0XHRtb2RlbC5zZXQoICdzdGF0dXMnLCAndHJhc2gnICk7XG5cdFx0XHRcdFx0XHRcdGNoYW5nZWQucHVzaCggbW9kZWwuc2F2ZSgpICk7XG5cdFx0XHRcdFx0XHRcdHJlbW92ZWQucHVzaCggbW9kZWwgKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdG1vZGVsLmRlc3Ryb3koe3dhaXQ6IHRydWV9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0XHRpZiAoIGNoYW5nZWQubGVuZ3RoICkge1xuXHRcdFx0XHRcdFx0c2VsZWN0aW9uLnJlbW92ZSggcmVtb3ZlZCApO1xuXG5cdFx0XHRcdFx0XHQkLndoZW4uYXBwbHkoIG51bGwsIGNoYW5nZWQgKS50aGVuKCBfLmJpbmQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRsaWJyYXJ5Ll9yZXF1ZXJ5KCB0cnVlICk7XG5cdFx0XHRcdFx0XHRcdHRoaXMuY29udHJvbGxlci50cmlnZ2VyKCAnc2VsZWN0aW9uOmFjdGlvbjpkb25lJyApO1xuXHRcdFx0XHRcdFx0fSwgdGhpcyApICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuY29udHJvbGxlci50cmlnZ2VyKCAnc2VsZWN0aW9uOmFjdGlvbjpkb25lJyApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSkucmVuZGVyKCkgKTtcblxuXHRcdFx0aWYgKCBtZWRpYVRyYXNoICkge1xuXHRcdFx0XHR0aGlzLnRvb2xiYXIuc2V0KCAnZGVsZXRlU2VsZWN0ZWRQZXJtYW5lbnRseUJ1dHRvbicsIG5ldyB3cC5tZWRpYS52aWV3LkRlbGV0ZVNlbGVjdGVkUGVybWFuZW50bHlCdXR0b24oe1xuXHRcdFx0XHRcdGZpbHRlcnM6IEZpbHRlcnMsXG5cdFx0XHRcdFx0c3R5bGU6ICdwcmltYXJ5Jyxcblx0XHRcdFx0XHRkaXNhYmxlZDogdHJ1ZSxcblx0XHRcdFx0XHR0ZXh0OiBsMTBuLmRlbGV0ZVNlbGVjdGVkLFxuXHRcdFx0XHRcdGNvbnRyb2xsZXI6IHRoaXMuY29udHJvbGxlcixcblx0XHRcdFx0XHRwcmlvcml0eTogLTU1LFxuXHRcdFx0XHRcdGNsaWNrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHZhciByZW1vdmVkID0gW10sIHNlbGVjdGlvbiA9IHRoaXMuY29udHJvbGxlci5zdGF0ZSgpLmdldCggJ3NlbGVjdGlvbicgKTtcblxuXHRcdFx0XHRcdFx0aWYgKCAhIHNlbGVjdGlvbi5sZW5ndGggfHwgISB3aW5kb3cuY29uZmlybSggbDEwbi53YXJuQnVsa0RlbGV0ZSApICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHNlbGVjdGlvbi5lYWNoKCBmdW5jdGlvbiggbW9kZWwgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggISBtb2RlbC5nZXQoICdub25jZXMnIClbJ2RlbGV0ZSddICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlbW92ZWQucHVzaCggbW9kZWwgKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRtb2RlbC5kZXN0cm95KCk7XG5cdFx0XHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0XHRcdHNlbGVjdGlvbi5yZW1vdmUoIHJlbW92ZWQgKTtcblx0XHRcdFx0XHRcdHRoaXMuY29udHJvbGxlci50cmlnZ2VyKCAnc2VsZWN0aW9uOmFjdGlvbjpkb25lJyApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSkucmVuZGVyKCkgKTtcblx0XHRcdH1cblxuXHRcdH0gZWxzZSBpZiAoIHRoaXMub3B0aW9ucy5kYXRlICkge1xuXHRcdFx0Ly8gRGF0ZUZpbHRlciBpcyBhIDxzZWxlY3Q+LCBzY3JlZW4gcmVhZGVyIHRleHQgbmVlZHMgdG8gYmUgcmVuZGVyZWQgYmVmb3JlXG5cdFx0XHR0aGlzLnRvb2xiYXIuc2V0KCAnZGF0ZUZpbHRlckxhYmVsJywgbmV3IHdwLm1lZGlhLnZpZXcuTGFiZWwoe1xuXHRcdFx0XHR2YWx1ZTogbDEwbi5maWx0ZXJCeURhdGUsXG5cdFx0XHRcdGF0dHJpYnV0ZXM6IHtcblx0XHRcdFx0XHQnZm9yJzogJ21lZGlhLWF0dGFjaG1lbnQtZGF0ZS1maWx0ZXJzJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRwcmlvcml0eTogLTc1XG5cdFx0XHR9KS5yZW5kZXIoKSApO1xuXHRcdFx0dGhpcy50b29sYmFyLnNldCggJ2RhdGVGaWx0ZXInLCBuZXcgd3AubWVkaWEudmlldy5EYXRlRmlsdGVyKHtcblx0XHRcdFx0Y29udHJvbGxlcjogdGhpcy5jb250cm9sbGVyLFxuXHRcdFx0XHRtb2RlbDogICAgICB0aGlzLmNvbGxlY3Rpb24ucHJvcHMsXG5cdFx0XHRcdHByaW9yaXR5OiAtNzVcblx0XHRcdH0pLnJlbmRlcigpICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuc2VhcmNoICkge1xuXHRcdFx0Ly8gU2VhcmNoIGlzIGFuIGlucHV0LCBzY3JlZW4gcmVhZGVyIHRleHQgbmVlZHMgdG8gYmUgcmVuZGVyZWQgYmVmb3JlXG5cdFx0XHR0aGlzLnRvb2xiYXIuc2V0KCAnc2VhcmNoTGFiZWwnLCBuZXcgd3AubWVkaWEudmlldy5MYWJlbCh7XG5cdFx0XHRcdHZhbHVlOiBsMTBuLnNlYXJjaE1lZGlhTGFiZWwsXG5cdFx0XHRcdGF0dHJpYnV0ZXM6IHtcblx0XHRcdFx0XHQnZm9yJzogJ21lZGlhLXNlYXJjaC1pbnB1dCdcblx0XHRcdFx0fSxcblx0XHRcdFx0cHJpb3JpdHk6ICAgNjBcblx0XHRcdH0pLnJlbmRlcigpICk7XG5cdFx0XHR0aGlzLnRvb2xiYXIuc2V0KCAnc2VhcmNoJywgbmV3IHdwLm1lZGlhLnZpZXcuU2VhcmNoKHtcblx0XHRcdFx0Y29udHJvbGxlcjogdGhpcy5jb250cm9sbGVyLFxuXHRcdFx0XHRtb2RlbDogICAgICB0aGlzLmNvbGxlY3Rpb24ucHJvcHMsXG5cdFx0XHRcdHByaW9yaXR5OiAgIDYwXG5cdFx0XHR9KS5yZW5kZXIoKSApO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5vcHRpb25zLmRyYWdJbmZvICkge1xuXHRcdFx0dGhpcy50b29sYmFyLnNldCggJ2RyYWdJbmZvJywgbmV3IFZpZXcoe1xuXHRcdFx0XHRlbDogJCggJzxkaXYgY2xhc3M9XCJpbnN0cnVjdGlvbnNcIj4nICsgbDEwbi5kcmFnSW5mbyArICc8L2Rpdj4nIClbMF0sXG5cdFx0XHRcdHByaW9yaXR5OiAtNDBcblx0XHRcdH0pICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuc3VnZ2VzdGVkV2lkdGggJiYgdGhpcy5vcHRpb25zLnN1Z2dlc3RlZEhlaWdodCApIHtcblx0XHRcdHRoaXMudG9vbGJhci5zZXQoICdzdWdnZXN0ZWREaW1lbnNpb25zJywgbmV3IFZpZXcoe1xuXHRcdFx0XHRlbDogJCggJzxkaXYgY2xhc3M9XCJpbnN0cnVjdGlvbnNcIj4nICsgbDEwbi5zdWdnZXN0ZWREaW1lbnNpb25zICsgJyAnICsgdGhpcy5vcHRpb25zLnN1Z2dlc3RlZFdpZHRoICsgJyAmdGltZXM7ICcgKyB0aGlzLm9wdGlvbnMuc3VnZ2VzdGVkSGVpZ2h0ICsgJzwvZGl2PicgKVswXSxcblx0XHRcdFx0cHJpb3JpdHk6IC00MFxuXHRcdFx0fSkgKTtcblx0XHR9XG5cdH0sXG5cblx0dXBkYXRlQ29udGVudDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHZpZXcgPSB0aGlzLFxuXHRcdFx0bm9JdGVtc1ZpZXc7XG5cblx0XHRpZiAoIHRoaXMuY29udHJvbGxlci5pc01vZGVBY3RpdmUoICdncmlkJyApICkge1xuXHRcdFx0bm9JdGVtc1ZpZXcgPSB2aWV3LmF0dGFjaG1lbnRzTm9SZXN1bHRzO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRub0l0ZW1zVmlldyA9IHZpZXcudXBsb2FkZXI7XG5cdFx0fVxuXG5cdFx0aWYgKCAhIHRoaXMuY29sbGVjdGlvbi5sZW5ndGggKSB7XG5cdFx0XHR0aGlzLnRvb2xiYXIuZ2V0KCAnc3Bpbm5lcicgKS5zaG93KCk7XG5cdFx0XHR0aGlzLmRmZCA9IHRoaXMuY29sbGVjdGlvbi5tb3JlKCkuZG9uZSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggISB2aWV3LmNvbGxlY3Rpb24ubGVuZ3RoICkge1xuXHRcdFx0XHRcdG5vSXRlbXNWaWV3LiRlbC5yZW1vdmVDbGFzcyggJ2hpZGRlbicgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRub0l0ZW1zVmlldy4kZWwuYWRkQ2xhc3MoICdoaWRkZW4nICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dmlldy50b29sYmFyLmdldCggJ3NwaW5uZXInICkuaGlkZSgpO1xuXHRcdFx0fSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRub0l0ZW1zVmlldy4kZWwuYWRkQ2xhc3MoICdoaWRkZW4nICk7XG5cdFx0XHR2aWV3LnRvb2xiYXIuZ2V0KCAnc3Bpbm5lcicgKS5oaWRlKCk7XG5cdFx0fVxuXHR9LFxuXG5cdGNyZWF0ZVVwbG9hZGVyOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnVwbG9hZGVyID0gbmV3IHdwLm1lZGlhLnZpZXcuVXBsb2FkZXJJbmxpbmUoe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpcy5jb250cm9sbGVyLFxuXHRcdFx0c3RhdHVzOiAgICAgZmFsc2UsXG5cdFx0XHRtZXNzYWdlOiAgICB0aGlzLmNvbnRyb2xsZXIuaXNNb2RlQWN0aXZlKCAnZ3JpZCcgKSA/ICcnIDogbDEwbi5ub0l0ZW1zRm91bmQsXG5cdFx0XHRjYW5DbG9zZTogICB0aGlzLmNvbnRyb2xsZXIuaXNNb2RlQWN0aXZlKCAnZ3JpZCcgKVxuXHRcdH0pO1xuXG5cdFx0dGhpcy51cGxvYWRlci5oaWRlKCk7XG5cdFx0dGhpcy52aWV3cy5hZGQoIHRoaXMudXBsb2FkZXIgKTtcblx0fSxcblxuXHR0b2dnbGVVcGxvYWRlcjogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCB0aGlzLnVwbG9hZGVyLiRlbC5oYXNDbGFzcyggJ2hpZGRlbicgKSApIHtcblx0XHRcdHRoaXMudXBsb2FkZXIuc2hvdygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnVwbG9hZGVyLmhpZGUoKTtcblx0XHR9XG5cdH0sXG5cblx0Y3JlYXRlQXR0YWNobWVudHM6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuYXR0YWNobWVudHMgPSBuZXcgd3AubWVkaWEudmlldy5BdHRhY2htZW50cyh7XG5cdFx0XHRjb250cm9sbGVyOiAgICAgICAgICAgdGhpcy5jb250cm9sbGVyLFxuXHRcdFx0Y29sbGVjdGlvbjogICAgICAgICAgIHRoaXMuY29sbGVjdGlvbixcblx0XHRcdHNlbGVjdGlvbjogICAgICAgICAgICB0aGlzLm9wdGlvbnMuc2VsZWN0aW9uLFxuXHRcdFx0bW9kZWw6ICAgICAgICAgICAgICAgIHRoaXMubW9kZWwsXG5cdFx0XHRzb3J0YWJsZTogICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNvcnRhYmxlLFxuXHRcdFx0c2Nyb2xsRWxlbWVudDogICAgICAgIHRoaXMub3B0aW9ucy5zY3JvbGxFbGVtZW50LFxuXHRcdFx0aWRlYWxDb2x1bW5XaWR0aDogICAgIHRoaXMub3B0aW9ucy5pZGVhbENvbHVtbldpZHRoLFxuXG5cdFx0XHQvLyBUaGUgc2luZ2xlIGBBdHRhY2htZW50YCB2aWV3IHRvIGJlIHVzZWQgaW4gdGhlIGBBdHRhY2htZW50c2Agdmlldy5cblx0XHRcdEF0dGFjaG1lbnRWaWV3OiB0aGlzLm9wdGlvbnMuQXR0YWNobWVudFZpZXdcblx0XHR9KTtcblxuXHRcdC8vIEFkZCBrZXlkb3duIGxpc3RlbmVyIHRvIHRoZSBpbnN0YW5jZSBvZiB0aGUgQXR0YWNobWVudHMgdmlld1xuXHRcdHRoaXMuYXR0YWNobWVudHMubGlzdGVuVG8oIHRoaXMuY29udHJvbGxlciwgJ2F0dGFjaG1lbnQ6a2V5ZG93bjphcnJvdycsICAgICB0aGlzLmF0dGFjaG1lbnRzLmFycm93RXZlbnQgKTtcblx0XHR0aGlzLmF0dGFjaG1lbnRzLmxpc3RlblRvKCB0aGlzLmNvbnRyb2xsZXIsICdhdHRhY2htZW50OmRldGFpbHM6c2hpZnQtdGFiJywgdGhpcy5hdHRhY2htZW50cy5yZXN0b3JlRm9jdXMgKTtcblxuXHRcdHRoaXMudmlld3MuYWRkKCB0aGlzLmF0dGFjaG1lbnRzICk7XG5cblxuXHRcdGlmICggdGhpcy5jb250cm9sbGVyLmlzTW9kZUFjdGl2ZSggJ2dyaWQnICkgKSB7XG5cdFx0XHR0aGlzLmF0dGFjaG1lbnRzTm9SZXN1bHRzID0gbmV3IFZpZXcoe1xuXHRcdFx0XHRjb250cm9sbGVyOiB0aGlzLmNvbnRyb2xsZXIsXG5cdFx0XHRcdHRhZ05hbWU6ICdwJ1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuYXR0YWNobWVudHNOb1Jlc3VsdHMuJGVsLmFkZENsYXNzKCAnaGlkZGVuIG5vLW1lZGlhJyApO1xuXHRcdFx0dGhpcy5hdHRhY2htZW50c05vUmVzdWx0cy4kZWwuaHRtbCggbDEwbi5ub01lZGlhICk7XG5cblx0XHRcdHRoaXMudmlld3MuYWRkKCB0aGlzLmF0dGFjaG1lbnRzTm9SZXN1bHRzICk7XG5cdFx0fVxuXHR9LFxuXG5cdGNyZWF0ZVNpZGViYXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuXHRcdFx0c2VsZWN0aW9uID0gb3B0aW9ucy5zZWxlY3Rpb24sXG5cdFx0XHRzaWRlYmFyID0gdGhpcy5zaWRlYmFyID0gbmV3IHdwLm1lZGlhLnZpZXcuU2lkZWJhcih7XG5cdFx0XHRcdGNvbnRyb2xsZXI6IHRoaXMuY29udHJvbGxlclxuXHRcdFx0fSk7XG5cblx0XHR0aGlzLnZpZXdzLmFkZCggc2lkZWJhciApO1xuXG5cdFx0aWYgKCB0aGlzLmNvbnRyb2xsZXIudXBsb2FkZXIgKSB7XG5cdFx0XHRzaWRlYmFyLnNldCggJ3VwbG9hZHMnLCBuZXcgd3AubWVkaWEudmlldy5VcGxvYWRlclN0YXR1cyh7XG5cdFx0XHRcdGNvbnRyb2xsZXI6IHRoaXMuY29udHJvbGxlcixcblx0XHRcdFx0cHJpb3JpdHk6ICAgNDBcblx0XHRcdH0pICk7XG5cdFx0fVxuXG5cdFx0c2VsZWN0aW9uLm9uKCAnc2VsZWN0aW9uOnNpbmdsZScsIHRoaXMuY3JlYXRlU2luZ2xlLCB0aGlzICk7XG5cdFx0c2VsZWN0aW9uLm9uKCAnc2VsZWN0aW9uOnVuc2luZ2xlJywgdGhpcy5kaXNwb3NlU2luZ2xlLCB0aGlzICk7XG5cblx0XHRpZiAoIHNlbGVjdGlvbi5zaW5nbGUoKSApIHtcblx0XHRcdHRoaXMuY3JlYXRlU2luZ2xlKCk7XG5cdFx0fVxuXHR9LFxuXG5cdGNyZWF0ZVNpbmdsZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHNpZGViYXIgPSB0aGlzLnNpZGViYXIsXG5cdFx0XHRzaW5nbGUgPSB0aGlzLm9wdGlvbnMuc2VsZWN0aW9uLnNpbmdsZSgpO1xuXG5cdFx0c2lkZWJhci5zZXQoICdkZXRhaWxzJywgbmV3IHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudC5EZXRhaWxzKHtcblx0XHRcdGNvbnRyb2xsZXI6IHRoaXMuY29udHJvbGxlcixcblx0XHRcdG1vZGVsOiAgICAgIHNpbmdsZSxcblx0XHRcdHByaW9yaXR5OiAgIDgwXG5cdFx0fSkgKTtcblxuXHRcdHNpZGViYXIuc2V0KCAnY29tcGF0JywgbmV3IHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudENvbXBhdCh7XG5cdFx0XHRjb250cm9sbGVyOiB0aGlzLmNvbnRyb2xsZXIsXG5cdFx0XHRtb2RlbDogICAgICBzaW5nbGUsXG5cdFx0XHRwcmlvcml0eTogICAxMjBcblx0XHR9KSApO1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuZGlzcGxheSApIHtcblx0XHRcdHNpZGViYXIuc2V0KCAnZGlzcGxheScsIG5ldyB3cC5tZWRpYS52aWV3LlNldHRpbmdzLkF0dGFjaG1lbnREaXNwbGF5KHtcblx0XHRcdFx0Y29udHJvbGxlcjogICB0aGlzLmNvbnRyb2xsZXIsXG5cdFx0XHRcdG1vZGVsOiAgICAgICAgdGhpcy5tb2RlbC5kaXNwbGF5KCBzaW5nbGUgKSxcblx0XHRcdFx0YXR0YWNobWVudDogICBzaW5nbGUsXG5cdFx0XHRcdHByaW9yaXR5OiAgICAgMTYwLFxuXHRcdFx0XHR1c2VyU2V0dGluZ3M6IHRoaXMubW9kZWwuZ2V0KCdkaXNwbGF5VXNlclNldHRpbmdzJylcblx0XHRcdH0pICk7XG5cdFx0fVxuXG5cdFx0Ly8gU2hvdyB0aGUgc2lkZWJhciBvbiBtb2JpbGVcblx0XHRpZiAoIHRoaXMubW9kZWwuaWQgPT09ICdpbnNlcnQnICkge1xuXHRcdFx0c2lkZWJhci4kZWwuYWRkQ2xhc3MoICd2aXNpYmxlJyApO1xuXHRcdH1cblx0fSxcblxuXHRkaXNwb3NlU2luZ2xlOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgc2lkZWJhciA9IHRoaXMuc2lkZWJhcjtcblx0XHRzaWRlYmFyLnVuc2V0KCdkZXRhaWxzJyk7XG5cdFx0c2lkZWJhci51bnNldCgnY29tcGF0Jyk7XG5cdFx0c2lkZWJhci51bnNldCgnZGlzcGxheScpO1xuXHRcdC8vIEhpZGUgdGhlIHNpZGViYXIgb24gbW9iaWxlXG5cdFx0c2lkZWJhci4kZWwucmVtb3ZlQ2xhc3MoICd2aXNpYmxlJyApO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBdHRhY2htZW50c0Jyb3dzZXI7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuQXR0YWNobWVudHMuU2VsZWN0aW9uXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5BdHRhY2htZW50c1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgQXR0YWNobWVudHMgPSB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRzLFxuXHRTZWxlY3Rpb247XG5cblNlbGVjdGlvbiA9IEF0dGFjaG1lbnRzLmV4dGVuZCh7XG5cdGV2ZW50czoge30sXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdF8uZGVmYXVsdHMoIHRoaXMub3B0aW9ucywge1xuXHRcdFx0c29ydGFibGU6ICAgZmFsc2UsXG5cdFx0XHRyZXNpemU6ICAgICBmYWxzZSxcblxuXHRcdFx0Ly8gVGhlIHNpbmdsZSBgQXR0YWNobWVudGAgdmlldyB0byBiZSB1c2VkIGluIHRoZSBgQXR0YWNobWVudHNgIHZpZXcuXG5cdFx0XHRBdHRhY2htZW50Vmlldzogd3AubWVkaWEudmlldy5BdHRhY2htZW50LlNlbGVjdGlvblxuXHRcdH0pO1xuXHRcdC8vIENhbGwgJ2luaXRpYWxpemUnIGRpcmVjdGx5IG9uIHRoZSBwYXJlbnQgY2xhc3MuXG5cdFx0cmV0dXJuIEF0dGFjaG1lbnRzLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2VsZWN0aW9uO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LkJ1dHRvbkdyb3VwXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciAkID0gQmFja2JvbmUuJCxcblx0QnV0dG9uR3JvdXA7XG5cbkJ1dHRvbkdyb3VwID0gd3AubWVkaWEuVmlldy5leHRlbmQoe1xuXHR0YWdOYW1lOiAgICdkaXYnLFxuXHRjbGFzc05hbWU6ICdidXR0b24tZ3JvdXAgYnV0dG9uLWxhcmdlIG1lZGlhLWJ1dHRvbi1ncm91cCcsXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0LyoqXG5cdFx0ICogQG1lbWJlciB7d3AubWVkaWEudmlldy5CdXR0b25bXX1cblx0XHQgKi9cblx0XHR0aGlzLmJ1dHRvbnMgPSBfLm1hcCggdGhpcy5vcHRpb25zLmJ1dHRvbnMgfHwgW10sIGZ1bmN0aW9uKCBidXR0b24gKSB7XG5cdFx0XHRpZiAoIGJ1dHRvbiBpbnN0YW5jZW9mIEJhY2tib25lLlZpZXcgKSB7XG5cdFx0XHRcdHJldHVybiBidXR0b247XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gbmV3IHdwLm1lZGlhLnZpZXcuQnV0dG9uKCBidXR0b24gKS5yZW5kZXIoKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGRlbGV0ZSB0aGlzLm9wdGlvbnMuYnV0dG9ucztcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLmNsYXNzZXMgKSB7XG5cdFx0XHR0aGlzLiRlbC5hZGRDbGFzcyggdGhpcy5vcHRpb25zLmNsYXNzZXMgKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS52aWV3LkJ1dHRvbkdyb3VwfVxuXHQgKi9cblx0cmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLiRlbC5odG1sKCAkKCBfLnBsdWNrKCB0aGlzLmJ1dHRvbnMsICdlbCcgKSApLmRldGFjaCgpICk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEJ1dHRvbkdyb3VwO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LkJ1dHRvblxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgQnV0dG9uID0gd3AubWVkaWEuVmlldy5leHRlbmQoe1xuXHR0YWdOYW1lOiAgICAnYnV0dG9uJyxcblx0Y2xhc3NOYW1lOiAgJ21lZGlhLWJ1dHRvbicsXG5cdGF0dHJpYnV0ZXM6IHsgdHlwZTogJ2J1dHRvbicgfSxcblxuXHRldmVudHM6IHtcblx0XHQnY2xpY2snOiAnY2xpY2snXG5cdH0sXG5cblx0ZGVmYXVsdHM6IHtcblx0XHR0ZXh0OiAgICAgJycsXG5cdFx0c3R5bGU6ICAgICcnLFxuXHRcdHNpemU6ICAgICAnbGFyZ2UnLFxuXHRcdGRpc2FibGVkOiBmYWxzZVxuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdC8qKlxuXHRcdCAqIENyZWF0ZSBhIG1vZGVsIHdpdGggdGhlIHByb3ZpZGVkIGBkZWZhdWx0c2AuXG5cdFx0ICpcblx0XHQgKiBAbWVtYmVyIHtCYWNrYm9uZS5Nb2RlbH1cblx0XHQgKi9cblx0XHR0aGlzLm1vZGVsID0gbmV3IEJhY2tib25lLk1vZGVsKCB0aGlzLmRlZmF1bHRzICk7XG5cblx0XHQvLyBJZiBhbnkgb2YgdGhlIGBvcHRpb25zYCBoYXZlIGEga2V5IGZyb20gYGRlZmF1bHRzYCwgYXBwbHkgaXRzXG5cdFx0Ly8gdmFsdWUgdG8gdGhlIGBtb2RlbGAgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBgb3B0aW9ucyBvYmplY3QuXG5cdFx0Xy5lYWNoKCB0aGlzLmRlZmF1bHRzLCBmdW5jdGlvbiggZGVmLCBrZXkgKSB7XG5cdFx0XHR2YXIgdmFsdWUgPSB0aGlzLm9wdGlvbnNbIGtleSBdO1xuXHRcdFx0aWYgKCBfLmlzVW5kZWZpbmVkKCB2YWx1ZSApICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMubW9kZWwuc2V0KCBrZXksIHZhbHVlICk7XG5cdFx0XHRkZWxldGUgdGhpcy5vcHRpb25zWyBrZXkgXTtcblx0XHR9LCB0aGlzICk7XG5cblx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLm1vZGVsLCAnY2hhbmdlJywgdGhpcy5yZW5kZXIgKTtcblx0fSxcblx0LyoqXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS52aWV3LkJ1dHRvbn0gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmdcblx0ICovXG5cdHJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSBbICdidXR0b24nLCB0aGlzLmNsYXNzTmFtZSBdLFxuXHRcdFx0bW9kZWwgPSB0aGlzLm1vZGVsLnRvSlNPTigpO1xuXG5cdFx0aWYgKCBtb2RlbC5zdHlsZSApIHtcblx0XHRcdGNsYXNzZXMucHVzaCggJ2J1dHRvbi0nICsgbW9kZWwuc3R5bGUgKTtcblx0XHR9XG5cblx0XHRpZiAoIG1vZGVsLnNpemUgKSB7XG5cdFx0XHRjbGFzc2VzLnB1c2goICdidXR0b24tJyArIG1vZGVsLnNpemUgKTtcblx0XHR9XG5cblx0XHRjbGFzc2VzID0gXy51bmlxKCBjbGFzc2VzLmNvbmNhdCggdGhpcy5vcHRpb25zLmNsYXNzZXMgKSApO1xuXHRcdHRoaXMuZWwuY2xhc3NOYW1lID0gY2xhc3Nlcy5qb2luKCcgJyk7XG5cblx0XHR0aGlzLiRlbC5hdHRyKCAnZGlzYWJsZWQnLCBtb2RlbC5kaXNhYmxlZCApO1xuXHRcdHRoaXMuJGVsLnRleHQoIHRoaXMubW9kZWwuZ2V0KCd0ZXh0JykgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XG5cdCAqL1xuXHRjbGljazogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdGlmICggJyMnID09PSB0aGlzLmF0dHJpYnV0ZXMuaHJlZiApIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuY2xpY2sgJiYgISB0aGlzLm1vZGVsLmdldCgnZGlzYWJsZWQnKSApIHtcblx0XHRcdHRoaXMub3B0aW9ucy5jbGljay5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fVxuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBCdXR0b247XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuQ3JvcHBlclxuICpcbiAqIFVzZXMgdGhlIGltZ0FyZWFTZWxlY3QgcGx1Z2luIHRvIGFsbG93IGEgdXNlciB0byBjcm9wIGFuIGltYWdlLlxuICpcbiAqIFRha2VzIGltZ0FyZWFTZWxlY3Qgb3B0aW9ucyBmcm9tXG4gKiB3cC5jdXN0b21pemUuSGVhZGVyQ29udHJvbC5jYWxjdWxhdGVJbWFnZVNlbGVjdE9wdGlvbnMgdmlhXG4gKiB3cC5jdXN0b21pemUuSGVhZGVyQ29udHJvbC5vcGVuTU0uXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBWaWV3ID0gd3AubWVkaWEuVmlldyxcblx0VXBsb2FkZXJTdGF0dXMgPSB3cC5tZWRpYS52aWV3LlVwbG9hZGVyU3RhdHVzLFxuXHRsMTBuID0gd3AubWVkaWEudmlldy5sMTBuLFxuXHQkID0galF1ZXJ5LFxuXHRDcm9wcGVyO1xuXG5Dcm9wcGVyID0gVmlldy5leHRlbmQoe1xuXHRjbGFzc05hbWU6ICdjcm9wLWNvbnRlbnQnLFxuXHR0ZW1wbGF0ZTogd3AudGVtcGxhdGUoJ2Nyb3AtY29udGVudCcpLFxuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHRfLmJpbmRBbGwodGhpcywgJ29uSW1hZ2VMb2FkJyk7XG5cdH0sXG5cdHJlYWR5OiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmNvbnRyb2xsZXIuZnJhbWUub24oJ2NvbnRlbnQ6ZXJyb3I6Y3JvcCcsIHRoaXMub25FcnJvciwgdGhpcyk7XG5cdFx0dGhpcy4kaW1hZ2UgPSB0aGlzLiRlbC5maW5kKCcuY3JvcC1pbWFnZScpO1xuXHRcdHRoaXMuJGltYWdlLm9uKCdsb2FkJywgdGhpcy5vbkltYWdlTG9hZCk7XG5cdFx0JCh3aW5kb3cpLm9uKCdyZXNpemUuY3JvcHBlcicsIF8uZGVib3VuY2UodGhpcy5vbkltYWdlTG9hZCwgMjUwKSk7XG5cdH0sXG5cdHJlbW92ZTogZnVuY3Rpb24oKSB7XG5cdFx0JCh3aW5kb3cpLm9mZigncmVzaXplLmNyb3BwZXInKTtcblx0XHR0aGlzLiRlbC5yZW1vdmUoKTtcblx0XHR0aGlzLiRlbC5vZmYoKTtcblx0XHRWaWV3LnByb3RvdHlwZS5yZW1vdmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0fSxcblx0cHJlcGFyZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRpdGxlOiBsMTBuLmNyb3BZb3VySW1hZ2UsXG5cdFx0XHR1cmw6IHRoaXMub3B0aW9ucy5hdHRhY2htZW50LmdldCgndXJsJylcblx0XHR9O1xuXHR9LFxuXHRvbkltYWdlTG9hZDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGltZ09wdGlvbnMgPSB0aGlzLmNvbnRyb2xsZXIuZ2V0KCdpbWdTZWxlY3RPcHRpb25zJyk7XG5cdFx0aWYgKHR5cGVvZiBpbWdPcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRpbWdPcHRpb25zID0gaW1nT3B0aW9ucyh0aGlzLm9wdGlvbnMuYXR0YWNobWVudCwgdGhpcy5jb250cm9sbGVyKTtcblx0XHR9XG5cblx0XHRpbWdPcHRpb25zID0gXy5leHRlbmQoaW1nT3B0aW9ucywge3BhcmVudDogdGhpcy4kZWx9KTtcblx0XHR0aGlzLnRyaWdnZXIoJ2ltYWdlLWxvYWRlZCcpO1xuXHRcdHRoaXMuY29udHJvbGxlci5pbWdTZWxlY3QgPSB0aGlzLiRpbWFnZS5pbWdBcmVhU2VsZWN0KGltZ09wdGlvbnMpO1xuXHR9LFxuXHRvbkVycm9yOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZmlsZW5hbWUgPSB0aGlzLm9wdGlvbnMuYXR0YWNobWVudC5nZXQoJ2ZpbGVuYW1lJyk7XG5cblx0XHR0aGlzLnZpZXdzLmFkZCggJy51cGxvYWQtZXJyb3JzJywgbmV3IHdwLm1lZGlhLnZpZXcuVXBsb2FkZXJTdGF0dXNFcnJvcih7XG5cdFx0XHRmaWxlbmFtZTogVXBsb2FkZXJTdGF0dXMucHJvdG90eXBlLmZpbGVuYW1lKGZpbGVuYW1lKSxcblx0XHRcdG1lc3NhZ2U6IHdpbmRvdy5fd3BNZWRpYVZpZXdzTDEwbi5jcm9wRXJyb3Jcblx0XHR9KSwgeyBhdDogMCB9KTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQ3JvcHBlcjtcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5FZGl0SW1hZ2VcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIFZpZXcgPSB3cC5tZWRpYS5WaWV3LFxuXHRFZGl0SW1hZ2U7XG5cbkVkaXRJbWFnZSA9IFZpZXcuZXh0ZW5kKHtcblx0Y2xhc3NOYW1lOiAnaW1hZ2UtZWRpdG9yJyxcblx0dGVtcGxhdGU6IHdwLnRlbXBsYXRlKCdpbWFnZS1lZGl0b3InKSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0XHR0aGlzLmVkaXRvciA9IHdpbmRvdy5pbWFnZUVkaXQ7XG5cdFx0dGhpcy5jb250cm9sbGVyID0gb3B0aW9ucy5jb250cm9sbGVyO1xuXHRcdFZpZXcucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9LFxuXG5cdHByZXBhcmU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1vZGVsLnRvSlNPTigpO1xuXHR9LFxuXG5cdGxvYWRFZGl0b3I6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBkZmQgPSB0aGlzLmVkaXRvci5vcGVuKCB0aGlzLm1vZGVsLmdldCgnaWQnKSwgdGhpcy5tb2RlbC5nZXQoJ25vbmNlcycpLmVkaXQsIHRoaXMgKTtcblx0XHRkZmQuZG9uZSggXy5iaW5kKCB0aGlzLmZvY3VzLCB0aGlzICkgKTtcblx0fSxcblxuXHRmb2N1czogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy4kKCAnLmltZ2VkaXQtc3VibWl0IC5idXR0b24nICkuZXEoIDAgKS5mb2N1cygpO1xuXHR9LFxuXG5cdGJhY2s6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBsYXN0U3RhdGUgPSB0aGlzLmNvbnRyb2xsZXIubGFzdFN0YXRlKCk7XG5cdFx0dGhpcy5jb250cm9sbGVyLnNldFN0YXRlKCBsYXN0U3RhdGUgKTtcblx0fSxcblxuXHRyZWZyZXNoOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLm1vZGVsLmZldGNoKCk7XG5cdH0sXG5cblx0c2F2ZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGxhc3RTdGF0ZSA9IHRoaXMuY29udHJvbGxlci5sYXN0U3RhdGUoKTtcblxuXHRcdHRoaXMubW9kZWwuZmV0Y2goKS5kb25lKCBfLmJpbmQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dGhpcy5jb250cm9sbGVyLnNldFN0YXRlKCBsYXN0U3RhdGUgKTtcblx0XHR9LCB0aGlzICkgKTtcblx0fVxuXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBFZGl0SW1hZ2U7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuRW1iZWRcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIEVtYmVkID0gd3AubWVkaWEuVmlldy5leHRlbmQoe1xuXHRjbGFzc05hbWU6ICdtZWRpYS1lbWJlZCcsXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0LyoqXG5cdFx0ICogQG1lbWJlciB7d3AubWVkaWEudmlldy5FbWJlZFVybH1cblx0XHQgKi9cblx0XHR0aGlzLnVybCA9IG5ldyB3cC5tZWRpYS52aWV3LkVtYmVkVXJsKHtcblx0XHRcdGNvbnRyb2xsZXI6IHRoaXMuY29udHJvbGxlcixcblx0XHRcdG1vZGVsOiAgICAgIHRoaXMubW9kZWwucHJvcHNcblx0XHR9KS5yZW5kZXIoKTtcblxuXHRcdHRoaXMudmlld3Muc2V0KFsgdGhpcy51cmwgXSk7XG5cdFx0dGhpcy5yZWZyZXNoKCk7XG5cdFx0dGhpcy5saXN0ZW5UbyggdGhpcy5tb2RlbCwgJ2NoYW5nZTp0eXBlJywgdGhpcy5yZWZyZXNoICk7XG5cdFx0dGhpcy5saXN0ZW5UbyggdGhpcy5tb2RlbCwgJ2NoYW5nZTpsb2FkaW5nJywgdGhpcy5sb2FkaW5nICk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSB2aWV3XG5cdCAqL1xuXHRzZXR0aW5nczogZnVuY3Rpb24oIHZpZXcgKSB7XG5cdFx0aWYgKCB0aGlzLl9zZXR0aW5ncyApIHtcblx0XHRcdHRoaXMuX3NldHRpbmdzLnJlbW92ZSgpO1xuXHRcdH1cblx0XHR0aGlzLl9zZXR0aW5ncyA9IHZpZXc7XG5cdFx0dGhpcy52aWV3cy5hZGQoIHZpZXcgKTtcblx0fSxcblxuXHRyZWZyZXNoOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgdHlwZSA9IHRoaXMubW9kZWwuZ2V0KCd0eXBlJyksXG5cdFx0XHRjb25zdHJ1Y3RvcjtcblxuXHRcdGlmICggJ2ltYWdlJyA9PT0gdHlwZSApIHtcblx0XHRcdGNvbnN0cnVjdG9yID0gd3AubWVkaWEudmlldy5FbWJlZEltYWdlO1xuXHRcdH0gZWxzZSBpZiAoICdsaW5rJyA9PT0gdHlwZSApIHtcblx0XHRcdGNvbnN0cnVjdG9yID0gd3AubWVkaWEudmlldy5FbWJlZExpbms7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLnNldHRpbmdzKCBuZXcgY29uc3RydWN0b3Ioe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpcy5jb250cm9sbGVyLFxuXHRcdFx0bW9kZWw6ICAgICAgdGhpcy5tb2RlbC5wcm9wcyxcblx0XHRcdHByaW9yaXR5OiAgIDQwXG5cdFx0fSkgKTtcblx0fSxcblxuXHRsb2FkaW5nOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLiRlbC50b2dnbGVDbGFzcyggJ2VtYmVkLWxvYWRpbmcnLCB0aGlzLm1vZGVsLmdldCgnbG9hZGluZycpICk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEVtYmVkO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LkVtYmVkSW1hZ2VcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LlNldHRpbmdzLkF0dGFjaG1lbnREaXNwbGF5XG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5TZXR0aW5nc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgQXR0YWNobWVudERpc3BsYXkgPSB3cC5tZWRpYS52aWV3LlNldHRpbmdzLkF0dGFjaG1lbnREaXNwbGF5LFxuXHRFbWJlZEltYWdlO1xuXG5FbWJlZEltYWdlID0gQXR0YWNobWVudERpc3BsYXkuZXh0ZW5kKHtcblx0Y2xhc3NOYW1lOiAnZW1iZWQtbWVkaWEtc2V0dGluZ3MnLFxuXHR0ZW1wbGF0ZTogIHdwLnRlbXBsYXRlKCdlbWJlZC1pbWFnZS1zZXR0aW5ncycpLFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdC8qKlxuXHRcdCAqIENhbGwgYGluaXRpYWxpemVgIGRpcmVjdGx5IG9uIHBhcmVudCBjbGFzcyB3aXRoIHBhc3NlZCBhcmd1bWVudHNcblx0XHQgKi9cblx0XHRBdHRhY2htZW50RGlzcGxheS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0dGhpcy5saXN0ZW5UbyggdGhpcy5tb2RlbCwgJ2NoYW5nZTp1cmwnLCB0aGlzLnVwZGF0ZUltYWdlICk7XG5cdH0sXG5cblx0dXBkYXRlSW1hZ2U6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuJCgnaW1nJykuYXR0ciggJ3NyYycsIHRoaXMubW9kZWwuZ2V0KCd1cmwnKSApO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBFbWJlZEltYWdlO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LkVtYmVkTGlua1xuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuU2V0dGluZ3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyICQgPSBqUXVlcnksXG5cdEVtYmVkTGluaztcblxuRW1iZWRMaW5rID0gd3AubWVkaWEudmlldy5TZXR0aW5ncy5leHRlbmQoe1xuXHRjbGFzc05hbWU6ICdlbWJlZC1saW5rLXNldHRpbmdzJyxcblx0dGVtcGxhdGU6ICB3cC50ZW1wbGF0ZSgnZW1iZWQtbGluay1zZXR0aW5ncycpLFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMubGlzdGVuVG8oIHRoaXMubW9kZWwsICdjaGFuZ2U6dXJsJywgdGhpcy51cGRhdGVvRW1iZWQgKTtcblx0fSxcblxuXHR1cGRhdGVvRW1iZWQ6IF8uZGVib3VuY2UoIGZ1bmN0aW9uKCkge1xuXHRcdHZhciB1cmwgPSB0aGlzLm1vZGVsLmdldCggJ3VybCcgKTtcblxuXHRcdC8vIGNsZWFyIG91dCBwcmV2aW91cyByZXN1bHRzXG5cdFx0dGhpcy4kKCcuZW1iZWQtY29udGFpbmVyJykuaGlkZSgpLmZpbmQoJy5lbWJlZC1wcmV2aWV3JykuZW1wdHkoKTtcblx0XHR0aGlzLiQoICcuc2V0dGluZycgKS5oaWRlKCk7XG5cblx0XHQvLyBvbmx5IHByb2NlZWQgd2l0aCBlbWJlZCBpZiB0aGUgZmllbGQgY29udGFpbnMgbW9yZSB0aGFuIDExIGNoYXJhY3RlcnNcblx0XHQvLyBFeGFtcGxlOiBodHRwOi8vYS5pbyBpcyAxMSBjaGFyc1xuXHRcdGlmICggdXJsICYmICggdXJsLmxlbmd0aCA8IDExIHx8ICEgdXJsLm1hdGNoKC9eaHR0cChzKT86XFwvXFwvLykgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLmZldGNoKCk7XG5cdH0sIHdwLm1lZGlhLmNvbnRyb2xsZXIuRW1iZWQuc2Vuc2l0aXZpdHkgKSxcblxuXHRmZXRjaDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGVtYmVkO1xuXG5cdFx0Ly8gY2hlY2sgaWYgdGhleSBoYXZlbid0IHR5cGVkIGluIDUwMCBtc1xuXHRcdGlmICggJCgnI2VtYmVkLXVybC1maWVsZCcpLnZhbCgpICE9PSB0aGlzLm1vZGVsLmdldCgndXJsJykgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmRmZCAmJiAncGVuZGluZycgPT09IHRoaXMuZGZkLnN0YXRlKCkgKSB7XG5cdFx0XHR0aGlzLmRmZC5hYm9ydCgpO1xuXHRcdH1cblxuXHRcdGVtYmVkID0gbmV3IHdwLnNob3J0Y29kZSh7XG5cdFx0XHR0YWc6ICdlbWJlZCcsXG5cdFx0XHRhdHRyczogXy5waWNrKCB0aGlzLm1vZGVsLmF0dHJpYnV0ZXMsIFsgJ3dpZHRoJywgJ2hlaWdodCcsICdzcmMnIF0gKSxcblx0XHRcdGNvbnRlbnQ6IHRoaXMubW9kZWwuZ2V0KCd1cmwnKVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5kZmQgPSAkLmFqYXgoe1xuXHRcdFx0dHlwZTogICAgJ1BPU1QnLFxuXHRcdFx0dXJsOiAgICAgd3AuYWpheC5zZXR0aW5ncy51cmwsXG5cdFx0XHRjb250ZXh0OiB0aGlzLFxuXHRcdFx0ZGF0YTogICAge1xuXHRcdFx0XHRhY3Rpb246ICdwYXJzZS1lbWJlZCcsXG5cdFx0XHRcdHBvc3RfSUQ6IHdwLm1lZGlhLnZpZXcuc2V0dGluZ3MucG9zdC5pZCxcblx0XHRcdFx0c2hvcnRjb2RlOiBlbWJlZC5zdHJpbmcoKVxuXHRcdFx0fVxuXHRcdH0pXG5cdFx0XHQuZG9uZSggdGhpcy5yZW5kZXJvRW1iZWQgKVxuXHRcdFx0LmZhaWwoIHRoaXMucmVuZGVyRmFpbCApO1xuXHR9LFxuXG5cdHJlbmRlckZhaWw6IGZ1bmN0aW9uICggcmVzcG9uc2UsIHN0YXR1cyApIHtcblx0XHRpZiAoICdhYm9ydCcgPT09IHN0YXR1cyApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy4kKCAnLmxpbmstdGV4dCcgKS5zaG93KCk7XG5cdH0sXG5cblx0cmVuZGVyb0VtYmVkOiBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0dmFyIGh0bWwgPSAoIHJlc3BvbnNlICYmIHJlc3BvbnNlLmRhdGEgJiYgcmVzcG9uc2UuZGF0YS5ib2R5ICkgfHwgJyc7XG5cblx0XHRpZiAoIGh0bWwgKSB7XG5cdFx0XHR0aGlzLiQoJy5lbWJlZC1jb250YWluZXInKS5zaG93KCkuZmluZCgnLmVtYmVkLXByZXZpZXcnKS5odG1sKCBodG1sICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucmVuZGVyRmFpbCgpO1xuXHRcdH1cblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gRW1iZWRMaW5rO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LkVtYmVkVXJsXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBWaWV3ID0gd3AubWVkaWEuVmlldyxcblx0JCA9IGpRdWVyeSxcblx0RW1iZWRVcmw7XG5cbkVtYmVkVXJsID0gVmlldy5leHRlbmQoe1xuXHR0YWdOYW1lOiAgICdsYWJlbCcsXG5cdGNsYXNzTmFtZTogJ2VtYmVkLXVybCcsXG5cblx0ZXZlbnRzOiB7XG5cdFx0J2lucHV0JzogICd1cmwnLFxuXHRcdCdrZXl1cCc6ICAndXJsJyxcblx0XHQnY2hhbmdlJzogJ3VybCdcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLiRpbnB1dCA9ICQoJzxpbnB1dCBpZD1cImVtYmVkLXVybC1maWVsZFwiIHR5cGU9XCJ1cmxcIiAvPicpLnZhbCggdGhpcy5tb2RlbC5nZXQoJ3VybCcpICk7XG5cdFx0dGhpcy5pbnB1dCA9IHRoaXMuJGlucHV0WzBdO1xuXG5cdFx0dGhpcy5zcGlubmVyID0gJCgnPHNwYW4gY2xhc3M9XCJzcGlubmVyXCIgLz4nKVswXTtcblx0XHR0aGlzLiRlbC5hcHBlbmQoWyB0aGlzLmlucHV0LCB0aGlzLnNwaW5uZXIgXSk7XG5cblx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLm1vZGVsLCAnY2hhbmdlOnVybCcsIHRoaXMucmVuZGVyICk7XG5cblx0XHRpZiAoIHRoaXMubW9kZWwuZ2V0KCAndXJsJyApICkge1xuXHRcdFx0Xy5kZWxheSggXy5iaW5kKCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHRoaXMubW9kZWwudHJpZ2dlciggJ2NoYW5nZTp1cmwnICk7XG5cdFx0XHR9LCB0aGlzICksIDUwMCApO1xuXHRcdH1cblx0fSxcblx0LyoqXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS52aWV3LkVtYmVkVXJsfSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0cmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgJGlucHV0ID0gdGhpcy4kaW5wdXQ7XG5cblx0XHRpZiAoICRpbnB1dC5pcygnOmZvY3VzJykgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5pbnB1dC52YWx1ZSA9IHRoaXMubW9kZWwuZ2V0KCd1cmwnKSB8fCAnaHR0cDovLyc7XG5cdFx0LyoqXG5cdFx0ICogQ2FsbCBgcmVuZGVyYCBkaXJlY3RseSBvbiBwYXJlbnQgY2xhc3Mgd2l0aCBwYXNzZWQgYXJndW1lbnRzXG5cdFx0ICovXG5cdFx0Vmlldy5wcm90b3R5cGUucmVuZGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZWFkeTogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAhIHdwLm1lZGlhLmlzVG91Y2hEZXZpY2UgKSB7XG5cdFx0XHR0aGlzLmZvY3VzKCk7XG5cdFx0fVxuXHR9LFxuXG5cdHVybDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHRoaXMubW9kZWwuc2V0KCAndXJsJywgZXZlbnQudGFyZ2V0LnZhbHVlICk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIElmIHRoZSBpbnB1dCBpcyB2aXNpYmxlLCBmb2N1cyBhbmQgc2VsZWN0IGl0cyBjb250ZW50cy5cblx0ICovXG5cdGZvY3VzOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgJGlucHV0ID0gdGhpcy4kaW5wdXQ7XG5cdFx0aWYgKCAkaW5wdXQuaXMoJzp2aXNpYmxlJykgKSB7XG5cdFx0XHQkaW5wdXQuZm9jdXMoKVswXS5zZWxlY3QoKTtcblx0XHR9XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEVtYmVkVXJsO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LkZvY3VzTWFuYWdlclxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgRm9jdXNNYW5hZ2VyID0gd3AubWVkaWEuVmlldy5leHRlbmQoe1xuXG5cdGV2ZW50czoge1xuXHRcdCdrZXlkb3duJzogJ2NvbnN0cmFpblRhYmJpbmcnXG5cdH0sXG5cblx0Zm9jdXM6IGZ1bmN0aW9uKCkgeyAvLyBSZXNldCBmb2N1cyBvbiBmaXJzdCBsZWZ0IG1lbnUgaXRlbVxuXHRcdHRoaXMuJCgnLm1lZGlhLW1lbnUtaXRlbScpLmZpcnN0KCkuZm9jdXMoKTtcblx0fSxcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxuXHQgKi9cblx0Y29uc3RyYWluVGFiYmluZzogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciB0YWJiYWJsZXM7XG5cblx0XHQvLyBMb29rIGZvciB0aGUgdGFiIGtleS5cblx0XHRpZiAoIDkgIT09IGV2ZW50LmtleUNvZGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gU2tpcCB0aGUgZmlsZSBpbnB1dCBhZGRlZCBieSBQbHVwbG9hZC5cblx0XHR0YWJiYWJsZXMgPSB0aGlzLiQoICc6dGFiYmFibGUnICkubm90KCAnLm1veGllLXNoaW0gaW5wdXRbdHlwZT1cImZpbGVcIl0nICk7XG5cblx0XHQvLyBLZWVwIHRhYiBmb2N1cyB3aXRoaW4gbWVkaWEgbW9kYWwgd2hpbGUgaXQncyBvcGVuXG5cdFx0aWYgKCB0YWJiYWJsZXMubGFzdCgpWzBdID09PSBldmVudC50YXJnZXQgJiYgISBldmVudC5zaGlmdEtleSApIHtcblx0XHRcdHRhYmJhYmxlcy5maXJzdCgpLmZvY3VzKCk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIGlmICggdGFiYmFibGVzLmZpcnN0KClbMF0gPT09IGV2ZW50LnRhcmdldCAmJiBldmVudC5zaGlmdEtleSApIHtcblx0XHRcdHRhYmJhYmxlcy5sYXN0KCkuZm9jdXMoKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gRm9jdXNNYW5hZ2VyO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LkZyYW1lXG4gKlxuICogQSBmcmFtZSBpcyBhIGNvbXBvc2l0ZSB2aWV3IGNvbnNpc3Rpbmcgb2Ygb25lIG9yIG1vcmUgcmVnaW9ucyBhbmQgb25lIG9yIG1vcmVcbiAqIHN0YXRlcy5cbiAqXG4gKiBAc2VlIHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGVcbiAqIEBzZWUgd3AubWVkaWEuY29udHJvbGxlci5SZWdpb25cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqIEBtaXhlcyB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlTWFjaGluZVxuICovXG52YXIgRnJhbWUgPSB3cC5tZWRpYS5WaWV3LmV4dGVuZCh7XG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdF8uZGVmYXVsdHMoIHRoaXMub3B0aW9ucywge1xuXHRcdFx0bW9kZTogWyAnc2VsZWN0JyBdXG5cdFx0fSk7XG5cdFx0dGhpcy5fY3JlYXRlUmVnaW9ucygpO1xuXHRcdHRoaXMuX2NyZWF0ZVN0YXRlcygpO1xuXHRcdHRoaXMuX2NyZWF0ZU1vZGVzKCk7XG5cdH0sXG5cblx0X2NyZWF0ZVJlZ2lvbnM6IGZ1bmN0aW9uKCkge1xuXHRcdC8vIENsb25lIHRoZSByZWdpb25zIGFycmF5LlxuXHRcdHRoaXMucmVnaW9ucyA9IHRoaXMucmVnaW9ucyA/IHRoaXMucmVnaW9ucy5zbGljZSgpIDogW107XG5cblx0XHQvLyBJbml0aWFsaXplIHJlZ2lvbnMuXG5cdFx0Xy5lYWNoKCB0aGlzLnJlZ2lvbnMsIGZ1bmN0aW9uKCByZWdpb24gKSB7XG5cdFx0XHR0aGlzWyByZWdpb24gXSA9IG5ldyB3cC5tZWRpYS5jb250cm9sbGVyLlJlZ2lvbih7XG5cdFx0XHRcdHZpZXc6ICAgICB0aGlzLFxuXHRcdFx0XHRpZDogICAgICAgcmVnaW9uLFxuXHRcdFx0XHRzZWxlY3RvcjogJy5tZWRpYS1mcmFtZS0nICsgcmVnaW9uXG5cdFx0XHR9KTtcblx0XHR9LCB0aGlzICk7XG5cdH0sXG5cdC8qKlxuXHQgKiBDcmVhdGUgdGhlIGZyYW1lJ3Mgc3RhdGVzLlxuXHQgKlxuXHQgKiBAc2VlIHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGVcblx0ICogQHNlZSB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlTWFjaGluZVxuXHQgKlxuXHQgKiBAZmlyZXMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZSNyZWFkeVxuXHQgKi9cblx0X2NyZWF0ZVN0YXRlczogZnVuY3Rpb24oKSB7XG5cdFx0Ly8gQ3JlYXRlIHRoZSBkZWZhdWx0IGBzdGF0ZXNgIGNvbGxlY3Rpb24uXG5cdFx0dGhpcy5zdGF0ZXMgPSBuZXcgQmFja2JvbmUuQ29sbGVjdGlvbiggbnVsbCwge1xuXHRcdFx0bW9kZWw6IHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGVcblx0XHR9KTtcblxuXHRcdC8vIEVuc3VyZSBzdGF0ZXMgaGF2ZSBhIHJlZmVyZW5jZSB0byB0aGUgZnJhbWUuXG5cdFx0dGhpcy5zdGF0ZXMub24oICdhZGQnLCBmdW5jdGlvbiggbW9kZWwgKSB7XG5cdFx0XHRtb2RlbC5mcmFtZSA9IHRoaXM7XG5cdFx0XHRtb2RlbC50cmlnZ2VyKCdyZWFkeScpO1xuXHRcdH0sIHRoaXMgKTtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLnN0YXRlcyApIHtcblx0XHRcdHRoaXMuc3RhdGVzLmFkZCggdGhpcy5vcHRpb25zLnN0YXRlcyApO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogQSBmcmFtZSBjYW4gYmUgaW4gYSBtb2RlIG9yIG11bHRpcGxlIG1vZGVzIGF0IG9uZSB0aW1lLlxuXHQgKlxuXHQgKiBGb3IgZXhhbXBsZSwgdGhlIG1hbmFnZSBtZWRpYSBmcmFtZSBjYW4gYmUgaW4gdGhlIGBCdWxrIFNlbGVjdGAgb3IgYEVkaXRgIG1vZGUuXG5cdCAqL1xuXHRfY3JlYXRlTW9kZXM6IGZ1bmN0aW9uKCkge1xuXHRcdC8vIFN0b3JlIGFjdGl2ZSBcIm1vZGVzXCIgdGhhdCB0aGUgZnJhbWUgaXMgaW4uIFVucmVsYXRlZCB0byByZWdpb24gbW9kZXMuXG5cdFx0dGhpcy5hY3RpdmVNb2RlcyA9IG5ldyBCYWNrYm9uZS5Db2xsZWN0aW9uKCk7XG5cdFx0dGhpcy5hY3RpdmVNb2Rlcy5vbiggJ2FkZCByZW1vdmUgcmVzZXQnLCBfLmJpbmQoIHRoaXMudHJpZ2dlck1vZGVFdmVudHMsIHRoaXMgKSApO1xuXG5cdFx0Xy5lYWNoKCB0aGlzLm9wdGlvbnMubW9kZSwgZnVuY3Rpb24oIG1vZGUgKSB7XG5cdFx0XHR0aGlzLmFjdGl2YXRlTW9kZSggbW9kZSApO1xuXHRcdH0sIHRoaXMgKTtcblx0fSxcblx0LyoqXG5cdCAqIFJlc2V0IGFsbCBzdGF0ZXMgb24gdGhlIGZyYW1lIHRvIHRoZWlyIGRlZmF1bHRzLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEudmlldy5GcmFtZX0gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmdcblx0ICovXG5cdHJlc2V0OiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnN0YXRlcy5pbnZva2UoICd0cmlnZ2VyJywgJ3Jlc2V0JyApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXHQvKipcblx0ICogTWFwIGFjdGl2ZU1vZGUgY29sbGVjdGlvbiBldmVudHMgdG8gdGhlIGZyYW1lLlxuXHQgKi9cblx0dHJpZ2dlck1vZGVFdmVudHM6IGZ1bmN0aW9uKCBtb2RlbCwgY29sbGVjdGlvbiwgb3B0aW9ucyApIHtcblx0XHR2YXIgY29sbGVjdGlvbkV2ZW50LFxuXHRcdFx0bW9kZUV2ZW50TWFwID0ge1xuXHRcdFx0XHRhZGQ6ICdhY3RpdmF0ZScsXG5cdFx0XHRcdHJlbW92ZTogJ2RlYWN0aXZhdGUnXG5cdFx0XHR9LFxuXHRcdFx0ZXZlbnRUb1RyaWdnZXI7XG5cdFx0Ly8gUHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMuXG5cdFx0Xy5lYWNoKCBvcHRpb25zLCBmdW5jdGlvbiggdmFsdWUsIGtleSApIHtcblx0XHRcdGlmICggdmFsdWUgKSB7XG5cdFx0XHRcdGNvbGxlY3Rpb25FdmVudCA9IGtleTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0XHRpZiAoICEgXy5oYXMoIG1vZGVFdmVudE1hcCwgY29sbGVjdGlvbkV2ZW50ICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0ZXZlbnRUb1RyaWdnZXIgPSBtb2RlbC5nZXQoJ2lkJykgKyAnOicgKyBtb2RlRXZlbnRNYXBbY29sbGVjdGlvbkV2ZW50XTtcblx0XHR0aGlzLnRyaWdnZXIoIGV2ZW50VG9UcmlnZ2VyICk7XG5cdH0sXG5cdC8qKlxuXHQgKiBBY3RpdmF0ZSBhIG1vZGUgb24gdGhlIGZyYW1lLlxuXHQgKlxuXHQgKiBAcGFyYW0gc3RyaW5nIG1vZGUgTW9kZSBJRC5cblx0ICogQHJldHVybnMge3RoaXN9IFJldHVybnMgaXRzZWxmIHRvIGFsbG93IGNoYWluaW5nLlxuXHQgKi9cblx0YWN0aXZhdGVNb2RlOiBmdW5jdGlvbiggbW9kZSApIHtcblx0XHQvLyBCYWlsIGlmIHRoZSBtb2RlIGlzIGFscmVhZHkgYWN0aXZlLlxuXHRcdGlmICggdGhpcy5pc01vZGVBY3RpdmUoIG1vZGUgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5hY3RpdmVNb2Rlcy5hZGQoIFsgeyBpZDogbW9kZSB9IF0gKTtcblx0XHQvLyBBZGQgYSBDU1MgY2xhc3MgdG8gdGhlIGZyYW1lIHNvIGVsZW1lbnRzIGNhbiBiZSBzdHlsZWQgZm9yIHRoZSBtb2RlLlxuXHRcdHRoaXMuJGVsLmFkZENsYXNzKCAnbW9kZS0nICsgbW9kZSApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cdC8qKlxuXHQgKiBEZWFjdGl2YXRlIGEgbW9kZSBvbiB0aGUgZnJhbWUuXG5cdCAqXG5cdCAqIEBwYXJhbSBzdHJpbmcgbW9kZSBNb2RlIElELlxuXHQgKiBAcmV0dXJucyB7dGhpc30gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmcuXG5cdCAqL1xuXHRkZWFjdGl2YXRlTW9kZTogZnVuY3Rpb24oIG1vZGUgKSB7XG5cdFx0Ly8gQmFpbCBpZiB0aGUgbW9kZSBpc24ndCBhY3RpdmUuXG5cdFx0aWYgKCAhIHRoaXMuaXNNb2RlQWN0aXZlKCBtb2RlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0dGhpcy5hY3RpdmVNb2Rlcy5yZW1vdmUoIHRoaXMuYWN0aXZlTW9kZXMud2hlcmUoIHsgaWQ6IG1vZGUgfSApICk7XG5cdFx0dGhpcy4kZWwucmVtb3ZlQ2xhc3MoICdtb2RlLScgKyBtb2RlICk7XG5cdFx0LyoqXG5cdFx0ICogRnJhbWUgbW9kZSBkZWFjdGl2YXRpb24gZXZlbnQuXG5cdFx0ICpcblx0XHQgKiBAZXZlbnQgdGhpcyN7bW9kZX06ZGVhY3RpdmF0ZVxuXHRcdCAqL1xuXHRcdHRoaXMudHJpZ2dlciggbW9kZSArICc6ZGVhY3RpdmF0ZScgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXHQvKipcblx0ICogQ2hlY2sgaWYgYSBtb2RlIGlzIGVuYWJsZWQgb24gdGhlIGZyYW1lLlxuXHQgKlxuXHQgKiBAcGFyYW0gIHN0cmluZyBtb2RlIE1vZGUgSUQuXG5cdCAqIEByZXR1cm4gYm9vbFxuXHQgKi9cblx0aXNNb2RlQWN0aXZlOiBmdW5jdGlvbiggbW9kZSApIHtcblx0XHRyZXR1cm4gQm9vbGVhbiggdGhpcy5hY3RpdmVNb2Rlcy53aGVyZSggeyBpZDogbW9kZSB9ICkubGVuZ3RoICk7XG5cdH1cbn0pO1xuXG4vLyBNYWtlIHRoZSBgRnJhbWVgIGEgYFN0YXRlTWFjaGluZWAuXG5fLmV4dGVuZCggRnJhbWUucHJvdG90eXBlLCB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlTWFjaGluZS5wcm90b3R5cGUgKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGcmFtZTtcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5NZWRpYUZyYW1lLkltYWdlRGV0YWlsc1xuICpcbiAqIEEgbWVkaWEgZnJhbWUgZm9yIG1hbmlwdWxhdGluZyBhbiBpbWFnZSB0aGF0J3MgYWxyZWFkeSBiZWVuIGluc2VydGVkXG4gKiBpbnRvIGEgcG9zdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuU2VsZWN0XG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5NZWRpYUZyYW1lXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5GcmFtZVxuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICogQG1peGVzIHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGVNYWNoaW5lXG4gKi9cbnZhciBTZWxlY3QgPSB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWUuU2VsZWN0LFxuXHRsMTBuID0gd3AubWVkaWEudmlldy5sMTBuLFxuXHRJbWFnZURldGFpbHM7XG5cbkltYWdlRGV0YWlscyA9IFNlbGVjdC5leHRlbmQoe1xuXHRkZWZhdWx0czoge1xuXHRcdGlkOiAgICAgICdpbWFnZScsXG5cdFx0dXJsOiAgICAgJycsXG5cdFx0bWVudTogICAgJ2ltYWdlLWRldGFpbHMnLFxuXHRcdGNvbnRlbnQ6ICdpbWFnZS1kZXRhaWxzJyxcblx0XHR0b29sYmFyOiAnaW1hZ2UtZGV0YWlscycsXG5cdFx0dHlwZTogICAgJ2xpbmsnLFxuXHRcdHRpdGxlOiAgICBsMTBuLmltYWdlRGV0YWlsc1RpdGxlLFxuXHRcdHByaW9yaXR5OiAxMjBcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0XHR0aGlzLmltYWdlID0gbmV3IHdwLm1lZGlhLm1vZGVsLlBvc3RJbWFnZSggb3B0aW9ucy5tZXRhZGF0YSApO1xuXHRcdHRoaXMub3B0aW9ucy5zZWxlY3Rpb24gPSBuZXcgd3AubWVkaWEubW9kZWwuU2VsZWN0aW9uKCB0aGlzLmltYWdlLmF0dGFjaG1lbnQsIHsgbXVsdGlwbGU6IGZhbHNlIH0gKTtcblx0XHRTZWxlY3QucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9LFxuXG5cdGJpbmRIYW5kbGVyczogZnVuY3Rpb24oKSB7XG5cdFx0U2VsZWN0LnByb3RvdHlwZS5iaW5kSGFuZGxlcnMuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdHRoaXMub24oICdtZW51OmNyZWF0ZTppbWFnZS1kZXRhaWxzJywgdGhpcy5jcmVhdGVNZW51LCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ2NvbnRlbnQ6Y3JlYXRlOmltYWdlLWRldGFpbHMnLCB0aGlzLmltYWdlRGV0YWlsc0NvbnRlbnQsIHRoaXMgKTtcblx0XHR0aGlzLm9uKCAnY29udGVudDpyZW5kZXI6ZWRpdC1pbWFnZScsIHRoaXMuZWRpdEltYWdlQ29udGVudCwgdGhpcyApO1xuXHRcdHRoaXMub24oICd0b29sYmFyOnJlbmRlcjppbWFnZS1kZXRhaWxzJywgdGhpcy5yZW5kZXJJbWFnZURldGFpbHNUb29sYmFyLCB0aGlzICk7XG5cdFx0Ly8gb3ZlcnJpZGUgdGhlIHNlbGVjdCB0b29sYmFyXG5cdFx0dGhpcy5vbiggJ3Rvb2xiYXI6cmVuZGVyOnJlcGxhY2UnLCB0aGlzLnJlbmRlclJlcGxhY2VJbWFnZVRvb2xiYXIsIHRoaXMgKTtcblx0fSxcblxuXHRjcmVhdGVTdGF0ZXM6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuc3RhdGVzLmFkZChbXG5cdFx0XHRuZXcgd3AubWVkaWEuY29udHJvbGxlci5JbWFnZURldGFpbHMoe1xuXHRcdFx0XHRpbWFnZTogdGhpcy5pbWFnZSxcblx0XHRcdFx0ZWRpdGFibGU6IGZhbHNlXG5cdFx0XHR9KSxcblx0XHRcdG5ldyB3cC5tZWRpYS5jb250cm9sbGVyLlJlcGxhY2VJbWFnZSh7XG5cdFx0XHRcdGlkOiAncmVwbGFjZS1pbWFnZScsXG5cdFx0XHRcdGxpYnJhcnk6IHdwLm1lZGlhLnF1ZXJ5KCB7IHR5cGU6ICdpbWFnZScgfSApLFxuXHRcdFx0XHRpbWFnZTogdGhpcy5pbWFnZSxcblx0XHRcdFx0bXVsdGlwbGU6ICBmYWxzZSxcblx0XHRcdFx0dGl0bGU6ICAgICBsMTBuLmltYWdlUmVwbGFjZVRpdGxlLFxuXHRcdFx0XHR0b29sYmFyOiAncmVwbGFjZScsXG5cdFx0XHRcdHByaW9yaXR5OiAgODAsXG5cdFx0XHRcdGRpc3BsYXlTZXR0aW5nczogdHJ1ZVxuXHRcdFx0fSksXG5cdFx0XHRuZXcgd3AubWVkaWEuY29udHJvbGxlci5FZGl0SW1hZ2UoIHtcblx0XHRcdFx0aW1hZ2U6IHRoaXMuaW1hZ2UsXG5cdFx0XHRcdHNlbGVjdGlvbjogdGhpcy5vcHRpb25zLnNlbGVjdGlvblxuXHRcdFx0fSApXG5cdFx0XSk7XG5cdH0sXG5cblx0aW1hZ2VEZXRhaWxzQ29udGVudDogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdFx0b3B0aW9ucy52aWV3ID0gbmV3IHdwLm1lZGlhLnZpZXcuSW1hZ2VEZXRhaWxzKHtcblx0XHRcdGNvbnRyb2xsZXI6IHRoaXMsXG5cdFx0XHRtb2RlbDogdGhpcy5zdGF0ZSgpLmltYWdlLFxuXHRcdFx0YXR0YWNobWVudDogdGhpcy5zdGF0ZSgpLmltYWdlLmF0dGFjaG1lbnRcblx0XHR9KTtcblx0fSxcblxuXHRlZGl0SW1hZ2VDb250ZW50OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgc3RhdGUgPSB0aGlzLnN0YXRlKCksXG5cdFx0XHRtb2RlbCA9IHN0YXRlLmdldCgnaW1hZ2UnKSxcblx0XHRcdHZpZXc7XG5cblx0XHRpZiAoICEgbW9kZWwgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmlldyA9IG5ldyB3cC5tZWRpYS52aWV3LkVkaXRJbWFnZSggeyBtb2RlbDogbW9kZWwsIGNvbnRyb2xsZXI6IHRoaXMgfSApLnJlbmRlcigpO1xuXG5cdFx0dGhpcy5jb250ZW50LnNldCggdmlldyApO1xuXG5cdFx0Ly8gYWZ0ZXIgYnJpbmdpbmcgaW4gdGhlIGZyYW1lLCBsb2FkIHRoZSBhY3R1YWwgZWRpdG9yIHZpYSBhbiBhamF4IGNhbGxcblx0XHR2aWV3LmxvYWRFZGl0b3IoKTtcblxuXHR9LFxuXG5cdHJlbmRlckltYWdlRGV0YWlsc1Rvb2xiYXI6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMudG9vbGJhci5zZXQoIG5ldyB3cC5tZWRpYS52aWV3LlRvb2xiYXIoe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpcyxcblx0XHRcdGl0ZW1zOiB7XG5cdFx0XHRcdHNlbGVjdDoge1xuXHRcdFx0XHRcdHN0eWxlOiAgICAncHJpbWFyeScsXG5cdFx0XHRcdFx0dGV4dDogICAgIGwxMG4udXBkYXRlLFxuXHRcdFx0XHRcdHByaW9yaXR5OiA4MCxcblxuXHRcdFx0XHRcdGNsaWNrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHZhciBjb250cm9sbGVyID0gdGhpcy5jb250cm9sbGVyLFxuXHRcdFx0XHRcdFx0XHRzdGF0ZSA9IGNvbnRyb2xsZXIuc3RhdGUoKTtcblxuXHRcdFx0XHRcdFx0Y29udHJvbGxlci5jbG9zZSgpO1xuXG5cdFx0XHRcdFx0XHQvLyBub3Qgc3VyZSBpZiB3ZSB3YW50IHRvIHVzZSB3cC5tZWRpYS5zdHJpbmcuaW1hZ2Ugd2hpY2ggd2lsbCBjcmVhdGUgYSBzaG9ydGNvZGUgb3Jcblx0XHRcdFx0XHRcdC8vIHBlcmhhcHMgd3AuaHRtbC5zdHJpbmcgdG8gYXQgbGVhc3QgdG8gYnVpbGQgdGhlIDxpbWcgLz5cblx0XHRcdFx0XHRcdHN0YXRlLnRyaWdnZXIoICd1cGRhdGUnLCBjb250cm9sbGVyLmltYWdlLnRvSlNPTigpICk7XG5cblx0XHRcdFx0XHRcdC8vIFJlc3RvcmUgYW5kIHJlc2V0IHRoZSBkZWZhdWx0IHN0YXRlLlxuXHRcdFx0XHRcdFx0Y29udHJvbGxlci5zZXRTdGF0ZSggY29udHJvbGxlci5vcHRpb25zLnN0YXRlICk7XG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLnJlc2V0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSkgKTtcblx0fSxcblxuXHRyZW5kZXJSZXBsYWNlSW1hZ2VUb29sYmFyOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZnJhbWUgPSB0aGlzLFxuXHRcdFx0bGFzdFN0YXRlID0gZnJhbWUubGFzdFN0YXRlKCksXG5cdFx0XHRwcmV2aW91cyA9IGxhc3RTdGF0ZSAmJiBsYXN0U3RhdGUuaWQ7XG5cblx0XHR0aGlzLnRvb2xiYXIuc2V0KCBuZXcgd3AubWVkaWEudmlldy5Ub29sYmFyKHtcblx0XHRcdGNvbnRyb2xsZXI6IHRoaXMsXG5cdFx0XHRpdGVtczoge1xuXHRcdFx0XHRiYWNrOiB7XG5cdFx0XHRcdFx0dGV4dDogICAgIGwxMG4uYmFjayxcblx0XHRcdFx0XHRwcmlvcml0eTogMjAsXG5cdFx0XHRcdFx0Y2xpY2s6ICAgIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0aWYgKCBwcmV2aW91cyApIHtcblx0XHRcdFx0XHRcdFx0ZnJhbWUuc2V0U3RhdGUoIHByZXZpb3VzICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRmcmFtZS5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0XHRyZXBsYWNlOiB7XG5cdFx0XHRcdFx0c3R5bGU6ICAgICdwcmltYXJ5Jyxcblx0XHRcdFx0XHR0ZXh0OiAgICAgbDEwbi5yZXBsYWNlLFxuXHRcdFx0XHRcdHByaW9yaXR5OiA4MCxcblxuXHRcdFx0XHRcdGNsaWNrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHZhciBjb250cm9sbGVyID0gdGhpcy5jb250cm9sbGVyLFxuXHRcdFx0XHRcdFx0XHRzdGF0ZSA9IGNvbnRyb2xsZXIuc3RhdGUoKSxcblx0XHRcdFx0XHRcdFx0c2VsZWN0aW9uID0gc3RhdGUuZ2V0KCAnc2VsZWN0aW9uJyApLFxuXHRcdFx0XHRcdFx0XHRhdHRhY2htZW50ID0gc2VsZWN0aW9uLnNpbmdsZSgpO1xuXG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLmNsb3NlKCk7XG5cblx0XHRcdFx0XHRcdGNvbnRyb2xsZXIuaW1hZ2UuY2hhbmdlQXR0YWNobWVudCggYXR0YWNobWVudCwgc3RhdGUuZGlzcGxheSggYXR0YWNobWVudCApICk7XG5cblx0XHRcdFx0XHRcdC8vIG5vdCBzdXJlIGlmIHdlIHdhbnQgdG8gdXNlIHdwLm1lZGlhLnN0cmluZy5pbWFnZSB3aGljaCB3aWxsIGNyZWF0ZSBhIHNob3J0Y29kZSBvclxuXHRcdFx0XHRcdFx0Ly8gcGVyaGFwcyB3cC5odG1sLnN0cmluZyB0byBhdCBsZWFzdCB0byBidWlsZCB0aGUgPGltZyAvPlxuXHRcdFx0XHRcdFx0c3RhdGUudHJpZ2dlciggJ3JlcGxhY2UnLCBjb250cm9sbGVyLmltYWdlLnRvSlNPTigpICk7XG5cblx0XHRcdFx0XHRcdC8vIFJlc3RvcmUgYW5kIHJlc2V0IHRoZSBkZWZhdWx0IHN0YXRlLlxuXHRcdFx0XHRcdFx0Y29udHJvbGxlci5zZXRTdGF0ZSggY29udHJvbGxlci5vcHRpb25zLnN0YXRlICk7XG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLnJlc2V0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSkgKTtcblx0fVxuXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbWFnZURldGFpbHM7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5Qb3N0XG4gKlxuICogVGhlIGZyYW1lIGZvciBtYW5pcHVsYXRpbmcgbWVkaWEgb24gdGhlIEVkaXQgUG9zdCBwYWdlLlxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5TZWxlY3RcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWVcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LkZyYW1lXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKiBAbWl4ZXMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZU1hY2hpbmVcbiAqL1xudmFyIFNlbGVjdCA9IHdwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZS5TZWxlY3QsXG5cdExpYnJhcnkgPSB3cC5tZWRpYS5jb250cm9sbGVyLkxpYnJhcnksXG5cdGwxMG4gPSB3cC5tZWRpYS52aWV3LmwxMG4sXG5cdFBvc3Q7XG5cblBvc3QgPSBTZWxlY3QuZXh0ZW5kKHtcblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5jb3VudHMgPSB7XG5cdFx0XHRhdWRpbzoge1xuXHRcdFx0XHRjb3VudDogd3AubWVkaWEudmlldy5zZXR0aW5ncy5hdHRhY2htZW50Q291bnRzLmF1ZGlvLFxuXHRcdFx0XHRzdGF0ZTogJ3BsYXlsaXN0J1xuXHRcdFx0fSxcblx0XHRcdHZpZGVvOiB7XG5cdFx0XHRcdGNvdW50OiB3cC5tZWRpYS52aWV3LnNldHRpbmdzLmF0dGFjaG1lbnRDb3VudHMudmlkZW8sXG5cdFx0XHRcdHN0YXRlOiAndmlkZW8tcGxheWxpc3QnXG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdF8uZGVmYXVsdHMoIHRoaXMub3B0aW9ucywge1xuXHRcdFx0bXVsdGlwbGU6ICB0cnVlLFxuXHRcdFx0ZWRpdGluZzogICBmYWxzZSxcblx0XHRcdHN0YXRlOiAgICAnaW5zZXJ0Jyxcblx0XHRcdG1ldGFkYXRhOiAge31cblx0XHR9KTtcblxuXHRcdC8vIENhbGwgJ2luaXRpYWxpemUnIGRpcmVjdGx5IG9uIHRoZSBwYXJlbnQgY2xhc3MuXG5cdFx0U2VsZWN0LnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR0aGlzLmNyZWF0ZUlmcmFtZVN0YXRlcygpO1xuXG5cdH0sXG5cblx0LyoqXG5cdCAqIENyZWF0ZSB0aGUgZGVmYXVsdCBzdGF0ZXMuXG5cdCAqL1xuXHRjcmVhdGVTdGF0ZXM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG5cdFx0dGhpcy5zdGF0ZXMuYWRkKFtcblx0XHRcdC8vIE1haW4gc3RhdGVzLlxuXHRcdFx0bmV3IExpYnJhcnkoe1xuXHRcdFx0XHRpZDogICAgICAgICAnaW5zZXJ0Jyxcblx0XHRcdFx0dGl0bGU6ICAgICAgbDEwbi5pbnNlcnRNZWRpYVRpdGxlLFxuXHRcdFx0XHRwcmlvcml0eTogICAyMCxcblx0XHRcdFx0dG9vbGJhcjogICAgJ21haW4taW5zZXJ0Jyxcblx0XHRcdFx0ZmlsdGVyYWJsZTogJ2FsbCcsXG5cdFx0XHRcdGxpYnJhcnk6ICAgIHdwLm1lZGlhLnF1ZXJ5KCBvcHRpb25zLmxpYnJhcnkgKSxcblx0XHRcdFx0bXVsdGlwbGU6ICAgb3B0aW9ucy5tdWx0aXBsZSA/ICdyZXNldCcgOiBmYWxzZSxcblx0XHRcdFx0ZWRpdGFibGU6ICAgdHJ1ZSxcblxuXHRcdFx0XHQvLyBJZiB0aGUgdXNlciBpc24ndCBhbGxvd2VkIHRvIGVkaXQgZmllbGRzLFxuXHRcdFx0XHQvLyBjYW4gdGhleSBzdGlsbCBlZGl0IGl0IGxvY2FsbHk/XG5cdFx0XHRcdGFsbG93TG9jYWxFZGl0czogdHJ1ZSxcblxuXHRcdFx0XHQvLyBTaG93IHRoZSBhdHRhY2htZW50IGRpc3BsYXkgc2V0dGluZ3MuXG5cdFx0XHRcdGRpc3BsYXlTZXR0aW5nczogdHJ1ZSxcblx0XHRcdFx0Ly8gVXBkYXRlIHVzZXIgc2V0dGluZ3Mgd2hlbiB1c2VycyBhZGp1c3QgdGhlXG5cdFx0XHRcdC8vIGF0dGFjaG1lbnQgZGlzcGxheSBzZXR0aW5ncy5cblx0XHRcdFx0ZGlzcGxheVVzZXJTZXR0aW5nczogdHJ1ZVxuXHRcdFx0fSksXG5cblx0XHRcdG5ldyBMaWJyYXJ5KHtcblx0XHRcdFx0aWQ6ICAgICAgICAgJ2dhbGxlcnknLFxuXHRcdFx0XHR0aXRsZTogICAgICBsMTBuLmNyZWF0ZUdhbGxlcnlUaXRsZSxcblx0XHRcdFx0cHJpb3JpdHk6ICAgNDAsXG5cdFx0XHRcdHRvb2xiYXI6ICAgICdtYWluLWdhbGxlcnknLFxuXHRcdFx0XHRmaWx0ZXJhYmxlOiAndXBsb2FkZWQnLFxuXHRcdFx0XHRtdWx0aXBsZTogICAnYWRkJyxcblx0XHRcdFx0ZWRpdGFibGU6ICAgZmFsc2UsXG5cblx0XHRcdFx0bGlicmFyeTogIHdwLm1lZGlhLnF1ZXJ5KCBfLmRlZmF1bHRzKHtcblx0XHRcdFx0XHR0eXBlOiAnaW1hZ2UnXG5cdFx0XHRcdH0sIG9wdGlvbnMubGlicmFyeSApIClcblx0XHRcdH0pLFxuXG5cdFx0XHQvLyBFbWJlZCBzdGF0ZXMuXG5cdFx0XHRuZXcgd3AubWVkaWEuY29udHJvbGxlci5FbWJlZCggeyBtZXRhZGF0YTogb3B0aW9ucy5tZXRhZGF0YSB9ICksXG5cblx0XHRcdG5ldyB3cC5tZWRpYS5jb250cm9sbGVyLkVkaXRJbWFnZSggeyBtb2RlbDogb3B0aW9ucy5lZGl0SW1hZ2UgfSApLFxuXG5cdFx0XHQvLyBHYWxsZXJ5IHN0YXRlcy5cblx0XHRcdG5ldyB3cC5tZWRpYS5jb250cm9sbGVyLkdhbGxlcnlFZGl0KHtcblx0XHRcdFx0bGlicmFyeTogb3B0aW9ucy5zZWxlY3Rpb24sXG5cdFx0XHRcdGVkaXRpbmc6IG9wdGlvbnMuZWRpdGluZyxcblx0XHRcdFx0bWVudTogICAgJ2dhbGxlcnknXG5cdFx0XHR9KSxcblxuXHRcdFx0bmV3IHdwLm1lZGlhLmNvbnRyb2xsZXIuR2FsbGVyeUFkZCgpLFxuXG5cdFx0XHRuZXcgTGlicmFyeSh7XG5cdFx0XHRcdGlkOiAgICAgICAgICdwbGF5bGlzdCcsXG5cdFx0XHRcdHRpdGxlOiAgICAgIGwxMG4uY3JlYXRlUGxheWxpc3RUaXRsZSxcblx0XHRcdFx0cHJpb3JpdHk6ICAgNjAsXG5cdFx0XHRcdHRvb2xiYXI6ICAgICdtYWluLXBsYXlsaXN0Jyxcblx0XHRcdFx0ZmlsdGVyYWJsZTogJ3VwbG9hZGVkJyxcblx0XHRcdFx0bXVsdGlwbGU6ICAgJ2FkZCcsXG5cdFx0XHRcdGVkaXRhYmxlOiAgIGZhbHNlLFxuXG5cdFx0XHRcdGxpYnJhcnk6ICB3cC5tZWRpYS5xdWVyeSggXy5kZWZhdWx0cyh7XG5cdFx0XHRcdFx0dHlwZTogJ2F1ZGlvJ1xuXHRcdFx0XHR9LCBvcHRpb25zLmxpYnJhcnkgKSApXG5cdFx0XHR9KSxcblxuXHRcdFx0Ly8gUGxheWxpc3Qgc3RhdGVzLlxuXHRcdFx0bmV3IHdwLm1lZGlhLmNvbnRyb2xsZXIuQ29sbGVjdGlvbkVkaXQoe1xuXHRcdFx0XHR0eXBlOiAnYXVkaW8nLFxuXHRcdFx0XHRjb2xsZWN0aW9uVHlwZTogJ3BsYXlsaXN0Jyxcblx0XHRcdFx0dGl0bGU6ICAgICAgICAgIGwxMG4uZWRpdFBsYXlsaXN0VGl0bGUsXG5cdFx0XHRcdFNldHRpbmdzVmlldzogICB3cC5tZWRpYS52aWV3LlNldHRpbmdzLlBsYXlsaXN0LFxuXHRcdFx0XHRsaWJyYXJ5OiAgICAgICAgb3B0aW9ucy5zZWxlY3Rpb24sXG5cdFx0XHRcdGVkaXRpbmc6ICAgICAgICBvcHRpb25zLmVkaXRpbmcsXG5cdFx0XHRcdG1lbnU6ICAgICAgICAgICAncGxheWxpc3QnLFxuXHRcdFx0XHRkcmFnSW5mb1RleHQ6ICAgbDEwbi5wbGF5bGlzdERyYWdJbmZvLFxuXHRcdFx0XHRkcmFnSW5mbzogICAgICAgZmFsc2Vcblx0XHRcdH0pLFxuXG5cdFx0XHRuZXcgd3AubWVkaWEuY29udHJvbGxlci5Db2xsZWN0aW9uQWRkKHtcblx0XHRcdFx0dHlwZTogJ2F1ZGlvJyxcblx0XHRcdFx0Y29sbGVjdGlvblR5cGU6ICdwbGF5bGlzdCcsXG5cdFx0XHRcdHRpdGxlOiBsMTBuLmFkZFRvUGxheWxpc3RUaXRsZVxuXHRcdFx0fSksXG5cblx0XHRcdG5ldyBMaWJyYXJ5KHtcblx0XHRcdFx0aWQ6ICAgICAgICAgJ3ZpZGVvLXBsYXlsaXN0Jyxcblx0XHRcdFx0dGl0bGU6ICAgICAgbDEwbi5jcmVhdGVWaWRlb1BsYXlsaXN0VGl0bGUsXG5cdFx0XHRcdHByaW9yaXR5OiAgIDYwLFxuXHRcdFx0XHR0b29sYmFyOiAgICAnbWFpbi12aWRlby1wbGF5bGlzdCcsXG5cdFx0XHRcdGZpbHRlcmFibGU6ICd1cGxvYWRlZCcsXG5cdFx0XHRcdG11bHRpcGxlOiAgICdhZGQnLFxuXHRcdFx0XHRlZGl0YWJsZTogICBmYWxzZSxcblxuXHRcdFx0XHRsaWJyYXJ5OiAgd3AubWVkaWEucXVlcnkoIF8uZGVmYXVsdHMoe1xuXHRcdFx0XHRcdHR5cGU6ICd2aWRlbydcblx0XHRcdFx0fSwgb3B0aW9ucy5saWJyYXJ5ICkgKVxuXHRcdFx0fSksXG5cblx0XHRcdG5ldyB3cC5tZWRpYS5jb250cm9sbGVyLkNvbGxlY3Rpb25FZGl0KHtcblx0XHRcdFx0dHlwZTogJ3ZpZGVvJyxcblx0XHRcdFx0Y29sbGVjdGlvblR5cGU6ICdwbGF5bGlzdCcsXG5cdFx0XHRcdHRpdGxlOiAgICAgICAgICBsMTBuLmVkaXRWaWRlb1BsYXlsaXN0VGl0bGUsXG5cdFx0XHRcdFNldHRpbmdzVmlldzogICB3cC5tZWRpYS52aWV3LlNldHRpbmdzLlBsYXlsaXN0LFxuXHRcdFx0XHRsaWJyYXJ5OiAgICAgICAgb3B0aW9ucy5zZWxlY3Rpb24sXG5cdFx0XHRcdGVkaXRpbmc6ICAgICAgICBvcHRpb25zLmVkaXRpbmcsXG5cdFx0XHRcdG1lbnU6ICAgICAgICAgICAndmlkZW8tcGxheWxpc3QnLFxuXHRcdFx0XHRkcmFnSW5mb1RleHQ6ICAgbDEwbi52aWRlb1BsYXlsaXN0RHJhZ0luZm8sXG5cdFx0XHRcdGRyYWdJbmZvOiAgICAgICBmYWxzZVxuXHRcdFx0fSksXG5cblx0XHRcdG5ldyB3cC5tZWRpYS5jb250cm9sbGVyLkNvbGxlY3Rpb25BZGQoe1xuXHRcdFx0XHR0eXBlOiAndmlkZW8nLFxuXHRcdFx0XHRjb2xsZWN0aW9uVHlwZTogJ3BsYXlsaXN0Jyxcblx0XHRcdFx0dGl0bGU6IGwxMG4uYWRkVG9WaWRlb1BsYXlsaXN0VGl0bGVcblx0XHRcdH0pXG5cdFx0XSk7XG5cblx0XHRpZiAoIHdwLm1lZGlhLnZpZXcuc2V0dGluZ3MucG9zdC5mZWF0dXJlZEltYWdlSWQgKSB7XG5cdFx0XHR0aGlzLnN0YXRlcy5hZGQoIG5ldyB3cC5tZWRpYS5jb250cm9sbGVyLkZlYXR1cmVkSW1hZ2UoKSApO1xuXHRcdH1cblx0fSxcblxuXHRiaW5kSGFuZGxlcnM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBoYW5kbGVycywgY2hlY2tDb3VudHM7XG5cblx0XHRTZWxlY3QucHJvdG90eXBlLmJpbmRIYW5kbGVycy5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cblx0XHR0aGlzLm9uKCAnYWN0aXZhdGUnLCB0aGlzLmFjdGl2YXRlLCB0aGlzICk7XG5cblx0XHQvLyBPbmx5IGJvdGhlciBjaGVja2luZyBtZWRpYSB0eXBlIGNvdW50cyBpZiBvbmUgb2YgdGhlIGNvdW50cyBpcyB6ZXJvXG5cdFx0Y2hlY2tDb3VudHMgPSBfLmZpbmQoIHRoaXMuY291bnRzLCBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdHJldHVybiB0eXBlLmNvdW50ID09PSAwO1xuXHRcdH0gKTtcblxuXHRcdGlmICggdHlwZW9mIGNoZWNrQ291bnRzICE9PSAndW5kZWZpbmVkJyApIHtcblx0XHRcdHRoaXMubGlzdGVuVG8oIHdwLm1lZGlhLm1vZGVsLkF0dGFjaG1lbnRzLmFsbCwgJ2NoYW5nZTp0eXBlJywgdGhpcy5tZWRpYVR5cGVDb3VudHMgKTtcblx0XHR9XG5cblx0XHR0aGlzLm9uKCAnbWVudTpjcmVhdGU6Z2FsbGVyeScsIHRoaXMuY3JlYXRlTWVudSwgdGhpcyApO1xuXHRcdHRoaXMub24oICdtZW51OmNyZWF0ZTpwbGF5bGlzdCcsIHRoaXMuY3JlYXRlTWVudSwgdGhpcyApO1xuXHRcdHRoaXMub24oICdtZW51OmNyZWF0ZTp2aWRlby1wbGF5bGlzdCcsIHRoaXMuY3JlYXRlTWVudSwgdGhpcyApO1xuXHRcdHRoaXMub24oICd0b29sYmFyOmNyZWF0ZTptYWluLWluc2VydCcsIHRoaXMuY3JlYXRlVG9vbGJhciwgdGhpcyApO1xuXHRcdHRoaXMub24oICd0b29sYmFyOmNyZWF0ZTptYWluLWdhbGxlcnknLCB0aGlzLmNyZWF0ZVRvb2xiYXIsIHRoaXMgKTtcblx0XHR0aGlzLm9uKCAndG9vbGJhcjpjcmVhdGU6bWFpbi1wbGF5bGlzdCcsIHRoaXMuY3JlYXRlVG9vbGJhciwgdGhpcyApO1xuXHRcdHRoaXMub24oICd0b29sYmFyOmNyZWF0ZTptYWluLXZpZGVvLXBsYXlsaXN0JywgdGhpcy5jcmVhdGVUb29sYmFyLCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ3Rvb2xiYXI6Y3JlYXRlOmZlYXR1cmVkLWltYWdlJywgdGhpcy5mZWF0dXJlZEltYWdlVG9vbGJhciwgdGhpcyApO1xuXHRcdHRoaXMub24oICd0b29sYmFyOmNyZWF0ZTptYWluLWVtYmVkJywgdGhpcy5tYWluRW1iZWRUb29sYmFyLCB0aGlzICk7XG5cblx0XHRoYW5kbGVycyA9IHtcblx0XHRcdG1lbnU6IHtcblx0XHRcdFx0J2RlZmF1bHQnOiAnbWFpbk1lbnUnLFxuXHRcdFx0XHQnZ2FsbGVyeSc6ICdnYWxsZXJ5TWVudScsXG5cdFx0XHRcdCdwbGF5bGlzdCc6ICdwbGF5bGlzdE1lbnUnLFxuXHRcdFx0XHQndmlkZW8tcGxheWxpc3QnOiAndmlkZW9QbGF5bGlzdE1lbnUnXG5cdFx0XHR9LFxuXG5cdFx0XHRjb250ZW50OiB7XG5cdFx0XHRcdCdlbWJlZCc6ICAgICAgICAgICdlbWJlZENvbnRlbnQnLFxuXHRcdFx0XHQnZWRpdC1pbWFnZSc6ICAgICAnZWRpdEltYWdlQ29udGVudCcsXG5cdFx0XHRcdCdlZGl0LXNlbGVjdGlvbic6ICdlZGl0U2VsZWN0aW9uQ29udGVudCdcblx0XHRcdH0sXG5cblx0XHRcdHRvb2xiYXI6IHtcblx0XHRcdFx0J21haW4taW5zZXJ0JzogICAgICAnbWFpbkluc2VydFRvb2xiYXInLFxuXHRcdFx0XHQnbWFpbi1nYWxsZXJ5JzogICAgICdtYWluR2FsbGVyeVRvb2xiYXInLFxuXHRcdFx0XHQnZ2FsbGVyeS1lZGl0JzogICAgICdnYWxsZXJ5RWRpdFRvb2xiYXInLFxuXHRcdFx0XHQnZ2FsbGVyeS1hZGQnOiAgICAgICdnYWxsZXJ5QWRkVG9vbGJhcicsXG5cdFx0XHRcdCdtYWluLXBsYXlsaXN0JzpcdCdtYWluUGxheWxpc3RUb29sYmFyJyxcblx0XHRcdFx0J3BsYXlsaXN0LWVkaXQnOlx0J3BsYXlsaXN0RWRpdFRvb2xiYXInLFxuXHRcdFx0XHQncGxheWxpc3QtYWRkJzpcdFx0J3BsYXlsaXN0QWRkVG9vbGJhcicsXG5cdFx0XHRcdCdtYWluLXZpZGVvLXBsYXlsaXN0JzogJ21haW5WaWRlb1BsYXlsaXN0VG9vbGJhcicsXG5cdFx0XHRcdCd2aWRlby1wbGF5bGlzdC1lZGl0JzogJ3ZpZGVvUGxheWxpc3RFZGl0VG9vbGJhcicsXG5cdFx0XHRcdCd2aWRlby1wbGF5bGlzdC1hZGQnOiAndmlkZW9QbGF5bGlzdEFkZFRvb2xiYXInXG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdF8uZWFjaCggaGFuZGxlcnMsIGZ1bmN0aW9uKCByZWdpb25IYW5kbGVycywgcmVnaW9uICkge1xuXHRcdFx0Xy5lYWNoKCByZWdpb25IYW5kbGVycywgZnVuY3Rpb24oIGNhbGxiYWNrLCBoYW5kbGVyICkge1xuXHRcdFx0XHR0aGlzLm9uKCByZWdpb24gKyAnOnJlbmRlcjonICsgaGFuZGxlciwgdGhpc1sgY2FsbGJhY2sgXSwgdGhpcyApO1xuXHRcdFx0fSwgdGhpcyApO1xuXHRcdH0sIHRoaXMgKTtcblx0fSxcblxuXHRhY3RpdmF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0Ly8gSGlkZSBtZW51IGl0ZW1zIGZvciBzdGF0ZXMgdGllZCB0byBwYXJ0aWN1bGFyIG1lZGlhIHR5cGVzIGlmIHRoZXJlIGFyZSBubyBpdGVtc1xuXHRcdF8uZWFjaCggdGhpcy5jb3VudHMsIGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0aWYgKCB0eXBlLmNvdW50IDwgMSApIHtcblx0XHRcdFx0dGhpcy5tZW51SXRlbVZpc2liaWxpdHkoIHR5cGUuc3RhdGUsICdoaWRlJyApO1xuXHRcdFx0fVxuXHRcdH0sIHRoaXMgKTtcblx0fSxcblxuXHRtZWRpYVR5cGVDb3VudHM6IGZ1bmN0aW9uKCBtb2RlbCwgYXR0ciApIHtcblx0XHRpZiAoIHR5cGVvZiB0aGlzLmNvdW50c1sgYXR0ciBdICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmNvdW50c1sgYXR0ciBdLmNvdW50IDwgMSApIHtcblx0XHRcdHRoaXMuY291bnRzWyBhdHRyIF0uY291bnQrKztcblx0XHRcdHRoaXMubWVudUl0ZW1WaXNpYmlsaXR5KCB0aGlzLmNvdW50c1sgYXR0ciBdLnN0YXRlLCAnc2hvdycgKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gTWVudXNcblx0LyoqXG5cdCAqIEBwYXJhbSB7d3AuQmFja2JvbmUuVmlld30gdmlld1xuXHQgKi9cblx0bWFpbk1lbnU6IGZ1bmN0aW9uKCB2aWV3ICkge1xuXHRcdHZpZXcuc2V0KHtcblx0XHRcdCdsaWJyYXJ5LXNlcGFyYXRvcic6IG5ldyB3cC5tZWRpYS5WaWV3KHtcblx0XHRcdFx0Y2xhc3NOYW1lOiAnc2VwYXJhdG9yJyxcblx0XHRcdFx0cHJpb3JpdHk6IDEwMFxuXHRcdFx0fSlcblx0XHR9KTtcblx0fSxcblxuXHRtZW51SXRlbVZpc2liaWxpdHk6IGZ1bmN0aW9uKCBzdGF0ZSwgdmlzaWJpbGl0eSApIHtcblx0XHR2YXIgbWVudSA9IHRoaXMubWVudS5nZXQoKTtcblx0XHRpZiAoIHZpc2liaWxpdHkgPT09ICdoaWRlJyApIHtcblx0XHRcdG1lbnUuaGlkZSggc3RhdGUgKTtcblx0XHR9IGVsc2UgaWYgKCB2aXNpYmlsaXR5ID09PSAnc2hvdycgKSB7XG5cdFx0XHRtZW51LnNob3coIHN0YXRlICk7XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogQHBhcmFtIHt3cC5CYWNrYm9uZS5WaWV3fSB2aWV3XG5cdCAqL1xuXHRnYWxsZXJ5TWVudTogZnVuY3Rpb24oIHZpZXcgKSB7XG5cdFx0dmFyIGxhc3RTdGF0ZSA9IHRoaXMubGFzdFN0YXRlKCksXG5cdFx0XHRwcmV2aW91cyA9IGxhc3RTdGF0ZSAmJiBsYXN0U3RhdGUuaWQsXG5cdFx0XHRmcmFtZSA9IHRoaXM7XG5cblx0XHR2aWV3LnNldCh7XG5cdFx0XHRjYW5jZWw6IHtcblx0XHRcdFx0dGV4dDogICAgIGwxMG4uY2FuY2VsR2FsbGVyeVRpdGxlLFxuXHRcdFx0XHRwcmlvcml0eTogMjAsXG5cdFx0XHRcdGNsaWNrOiAgICBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHByZXZpb3VzICkge1xuXHRcdFx0XHRcdFx0ZnJhbWUuc2V0U3RhdGUoIHByZXZpb3VzICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGZyYW1lLmNsb3NlKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gS2VlcCBmb2N1cyBpbnNpZGUgbWVkaWEgbW9kYWxcblx0XHRcdFx0XHQvLyBhZnRlciBjYW5jZWxpbmcgYSBnYWxsZXJ5XG5cdFx0XHRcdFx0dGhpcy5jb250cm9sbGVyLm1vZGFsLmZvY3VzTWFuYWdlci5mb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0c2VwYXJhdGVDYW5jZWw6IG5ldyB3cC5tZWRpYS5WaWV3KHtcblx0XHRcdFx0Y2xhc3NOYW1lOiAnc2VwYXJhdG9yJyxcblx0XHRcdFx0cHJpb3JpdHk6IDQwXG5cdFx0XHR9KVxuXHRcdH0pO1xuXHR9LFxuXG5cdHBsYXlsaXN0TWVudTogZnVuY3Rpb24oIHZpZXcgKSB7XG5cdFx0dmFyIGxhc3RTdGF0ZSA9IHRoaXMubGFzdFN0YXRlKCksXG5cdFx0XHRwcmV2aW91cyA9IGxhc3RTdGF0ZSAmJiBsYXN0U3RhdGUuaWQsXG5cdFx0XHRmcmFtZSA9IHRoaXM7XG5cblx0XHR2aWV3LnNldCh7XG5cdFx0XHRjYW5jZWw6IHtcblx0XHRcdFx0dGV4dDogICAgIGwxMG4uY2FuY2VsUGxheWxpc3RUaXRsZSxcblx0XHRcdFx0cHJpb3JpdHk6IDIwLFxuXHRcdFx0XHRjbGljazogICAgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCBwcmV2aW91cyApIHtcblx0XHRcdFx0XHRcdGZyYW1lLnNldFN0YXRlKCBwcmV2aW91cyApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRmcmFtZS5jbG9zZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHNlcGFyYXRlQ2FuY2VsOiBuZXcgd3AubWVkaWEuVmlldyh7XG5cdFx0XHRcdGNsYXNzTmFtZTogJ3NlcGFyYXRvcicsXG5cdFx0XHRcdHByaW9yaXR5OiA0MFxuXHRcdFx0fSlcblx0XHR9KTtcblx0fSxcblxuXHR2aWRlb1BsYXlsaXN0TWVudTogZnVuY3Rpb24oIHZpZXcgKSB7XG5cdFx0dmFyIGxhc3RTdGF0ZSA9IHRoaXMubGFzdFN0YXRlKCksXG5cdFx0XHRwcmV2aW91cyA9IGxhc3RTdGF0ZSAmJiBsYXN0U3RhdGUuaWQsXG5cdFx0XHRmcmFtZSA9IHRoaXM7XG5cblx0XHR2aWV3LnNldCh7XG5cdFx0XHRjYW5jZWw6IHtcblx0XHRcdFx0dGV4dDogICAgIGwxMG4uY2FuY2VsVmlkZW9QbGF5bGlzdFRpdGxlLFxuXHRcdFx0XHRwcmlvcml0eTogMjAsXG5cdFx0XHRcdGNsaWNrOiAgICBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHByZXZpb3VzICkge1xuXHRcdFx0XHRcdFx0ZnJhbWUuc2V0U3RhdGUoIHByZXZpb3VzICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGZyYW1lLmNsb3NlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0c2VwYXJhdGVDYW5jZWw6IG5ldyB3cC5tZWRpYS5WaWV3KHtcblx0XHRcdFx0Y2xhc3NOYW1lOiAnc2VwYXJhdG9yJyxcblx0XHRcdFx0cHJpb3JpdHk6IDQwXG5cdFx0XHR9KVxuXHRcdH0pO1xuXHR9LFxuXG5cdC8vIENvbnRlbnRcblx0ZW1iZWRDb250ZW50OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgdmlldyA9IG5ldyB3cC5tZWRpYS52aWV3LkVtYmVkKHtcblx0XHRcdGNvbnRyb2xsZXI6IHRoaXMsXG5cdFx0XHRtb2RlbDogICAgICB0aGlzLnN0YXRlKClcblx0XHR9KS5yZW5kZXIoKTtcblxuXHRcdHRoaXMuY29udGVudC5zZXQoIHZpZXcgKTtcblxuXHRcdGlmICggISB3cC5tZWRpYS5pc1RvdWNoRGV2aWNlICkge1xuXHRcdFx0dmlldy51cmwuZm9jdXMoKTtcblx0XHR9XG5cdH0sXG5cblx0ZWRpdFNlbGVjdGlvbkNvbnRlbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBzdGF0ZSA9IHRoaXMuc3RhdGUoKSxcblx0XHRcdHNlbGVjdGlvbiA9IHN0YXRlLmdldCgnc2VsZWN0aW9uJyksXG5cdFx0XHR2aWV3O1xuXG5cdFx0dmlldyA9IG5ldyB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRzQnJvd3Nlcih7XG5cdFx0XHRjb250cm9sbGVyOiB0aGlzLFxuXHRcdFx0Y29sbGVjdGlvbjogc2VsZWN0aW9uLFxuXHRcdFx0c2VsZWN0aW9uOiAgc2VsZWN0aW9uLFxuXHRcdFx0bW9kZWw6ICAgICAgc3RhdGUsXG5cdFx0XHRzb3J0YWJsZTogICB0cnVlLFxuXHRcdFx0c2VhcmNoOiAgICAgZmFsc2UsXG5cdFx0XHRkYXRlOiAgICAgICBmYWxzZSxcblx0XHRcdGRyYWdJbmZvOiAgIHRydWUsXG5cblx0XHRcdEF0dGFjaG1lbnRWaWV3OiB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRzLkVkaXRTZWxlY3Rpb25cblx0XHR9KS5yZW5kZXIoKTtcblxuXHRcdHZpZXcudG9vbGJhci5zZXQoICdiYWNrVG9MaWJyYXJ5Jywge1xuXHRcdFx0dGV4dDogICAgIGwxMG4ucmV0dXJuVG9MaWJyYXJ5LFxuXHRcdFx0cHJpb3JpdHk6IC0xMDAsXG5cblx0XHRcdGNsaWNrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dGhpcy5jb250cm9sbGVyLmNvbnRlbnQubW9kZSgnYnJvd3NlJyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBCcm93c2Ugb3VyIGxpYnJhcnkgb2YgYXR0YWNobWVudHMuXG5cdFx0dGhpcy5jb250ZW50LnNldCggdmlldyApO1xuXG5cdFx0Ly8gVHJpZ2dlciB0aGUgY29udHJvbGxlciB0byBzZXQgZm9jdXNcblx0XHR0aGlzLnRyaWdnZXIoICdlZGl0OnNlbGVjdGlvbicsIHRoaXMgKTtcblx0fSxcblxuXHRlZGl0SW1hZ2VDb250ZW50OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaW1hZ2UgPSB0aGlzLnN0YXRlKCkuZ2V0KCdpbWFnZScpLFxuXHRcdFx0dmlldyA9IG5ldyB3cC5tZWRpYS52aWV3LkVkaXRJbWFnZSggeyBtb2RlbDogaW1hZ2UsIGNvbnRyb2xsZXI6IHRoaXMgfSApLnJlbmRlcigpO1xuXG5cdFx0dGhpcy5jb250ZW50LnNldCggdmlldyApO1xuXG5cdFx0Ly8gYWZ0ZXIgY3JlYXRpbmcgdGhlIHdyYXBwZXIgdmlldywgbG9hZCB0aGUgYWN0dWFsIGVkaXRvciB2aWEgYW4gYWpheCBjYWxsXG5cdFx0dmlldy5sb2FkRWRpdG9yKCk7XG5cblx0fSxcblxuXHQvLyBUb29sYmFyc1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3dwLkJhY2tib25lLlZpZXd9IHZpZXdcblx0ICovXG5cdHNlbGVjdGlvblN0YXR1c1Rvb2xiYXI6IGZ1bmN0aW9uKCB2aWV3ICkge1xuXHRcdHZhciBlZGl0YWJsZSA9IHRoaXMuc3RhdGUoKS5nZXQoJ2VkaXRhYmxlJyk7XG5cblx0XHR2aWV3LnNldCggJ3NlbGVjdGlvbicsIG5ldyB3cC5tZWRpYS52aWV3LlNlbGVjdGlvbih7XG5cdFx0XHRjb250cm9sbGVyOiB0aGlzLFxuXHRcdFx0Y29sbGVjdGlvbjogdGhpcy5zdGF0ZSgpLmdldCgnc2VsZWN0aW9uJyksXG5cdFx0XHRwcmlvcml0eTogICAtNDAsXG5cblx0XHRcdC8vIElmIHRoZSBzZWxlY3Rpb24gaXMgZWRpdGFibGUsIHBhc3MgdGhlIGNhbGxiYWNrIHRvXG5cdFx0XHQvLyBzd2l0Y2ggdGhlIGNvbnRlbnQgbW9kZS5cblx0XHRcdGVkaXRhYmxlOiBlZGl0YWJsZSAmJiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dGhpcy5jb250cm9sbGVyLmNvbnRlbnQubW9kZSgnZWRpdC1zZWxlY3Rpb24nKTtcblx0XHRcdH1cblx0XHR9KS5yZW5kZXIoKSApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3dwLkJhY2tib25lLlZpZXd9IHZpZXdcblx0ICovXG5cdG1haW5JbnNlcnRUb29sYmFyOiBmdW5jdGlvbiggdmlldyApIHtcblx0XHR2YXIgY29udHJvbGxlciA9IHRoaXM7XG5cblx0XHR0aGlzLnNlbGVjdGlvblN0YXR1c1Rvb2xiYXIoIHZpZXcgKTtcblxuXHRcdHZpZXcuc2V0KCAnaW5zZXJ0Jywge1xuXHRcdFx0c3R5bGU6ICAgICdwcmltYXJ5Jyxcblx0XHRcdHByaW9yaXR5OiA4MCxcblx0XHRcdHRleHQ6ICAgICBsMTBuLmluc2VydEludG9Qb3N0LFxuXHRcdFx0cmVxdWlyZXM6IHsgc2VsZWN0aW9uOiB0cnVlIH0sXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogQGZpcmVzIHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGUjaW5zZXJ0XG5cdFx0XHQgKi9cblx0XHRcdGNsaWNrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHN0YXRlID0gY29udHJvbGxlci5zdGF0ZSgpLFxuXHRcdFx0XHRcdHNlbGVjdGlvbiA9IHN0YXRlLmdldCgnc2VsZWN0aW9uJyk7XG5cblx0XHRcdFx0Y29udHJvbGxlci5jbG9zZSgpO1xuXHRcdFx0XHRzdGF0ZS50cmlnZ2VyKCAnaW5zZXJ0Jywgc2VsZWN0aW9uICkucmVzZXQoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSxcblxuXHQvKipcblx0ICogQHBhcmFtIHt3cC5CYWNrYm9uZS5WaWV3fSB2aWV3XG5cdCAqL1xuXHRtYWluR2FsbGVyeVRvb2xiYXI6IGZ1bmN0aW9uKCB2aWV3ICkge1xuXHRcdHZhciBjb250cm9sbGVyID0gdGhpcztcblxuXHRcdHRoaXMuc2VsZWN0aW9uU3RhdHVzVG9vbGJhciggdmlldyApO1xuXG5cdFx0dmlldy5zZXQoICdnYWxsZXJ5Jywge1xuXHRcdFx0c3R5bGU6ICAgICdwcmltYXJ5Jyxcblx0XHRcdHRleHQ6ICAgICBsMTBuLmNyZWF0ZU5ld0dhbGxlcnksXG5cdFx0XHRwcmlvcml0eTogNjAsXG5cdFx0XHRyZXF1aXJlczogeyBzZWxlY3Rpb246IHRydWUgfSxcblxuXHRcdFx0Y2xpY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgc2VsZWN0aW9uID0gY29udHJvbGxlci5zdGF0ZSgpLmdldCgnc2VsZWN0aW9uJyksXG5cdFx0XHRcdFx0ZWRpdCA9IGNvbnRyb2xsZXIuc3RhdGUoJ2dhbGxlcnktZWRpdCcpLFxuXHRcdFx0XHRcdG1vZGVscyA9IHNlbGVjdGlvbi53aGVyZSh7IHR5cGU6ICdpbWFnZScgfSk7XG5cblx0XHRcdFx0ZWRpdC5zZXQoICdsaWJyYXJ5JywgbmV3IHdwLm1lZGlhLm1vZGVsLlNlbGVjdGlvbiggbW9kZWxzLCB7XG5cdFx0XHRcdFx0cHJvcHM6ICAgIHNlbGVjdGlvbi5wcm9wcy50b0pTT04oKSxcblx0XHRcdFx0XHRtdWx0aXBsZTogdHJ1ZVxuXHRcdFx0XHR9KSApO1xuXG5cdFx0XHRcdHRoaXMuY29udHJvbGxlci5zZXRTdGF0ZSgnZ2FsbGVyeS1lZGl0Jyk7XG5cblx0XHRcdFx0Ly8gS2VlcCBmb2N1cyBpbnNpZGUgbWVkaWEgbW9kYWxcblx0XHRcdFx0Ly8gYWZ0ZXIganVtcGluZyB0byBnYWxsZXJ5IHZpZXdcblx0XHRcdFx0dGhpcy5jb250cm9sbGVyLm1vZGFsLmZvY3VzTWFuYWdlci5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXG5cdG1haW5QbGF5bGlzdFRvb2xiYXI6IGZ1bmN0aW9uKCB2aWV3ICkge1xuXHRcdHZhciBjb250cm9sbGVyID0gdGhpcztcblxuXHRcdHRoaXMuc2VsZWN0aW9uU3RhdHVzVG9vbGJhciggdmlldyApO1xuXG5cdFx0dmlldy5zZXQoICdwbGF5bGlzdCcsIHtcblx0XHRcdHN0eWxlOiAgICAncHJpbWFyeScsXG5cdFx0XHR0ZXh0OiAgICAgbDEwbi5jcmVhdGVOZXdQbGF5bGlzdCxcblx0XHRcdHByaW9yaXR5OiAxMDAsXG5cdFx0XHRyZXF1aXJlczogeyBzZWxlY3Rpb246IHRydWUgfSxcblxuXHRcdFx0Y2xpY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgc2VsZWN0aW9uID0gY29udHJvbGxlci5zdGF0ZSgpLmdldCgnc2VsZWN0aW9uJyksXG5cdFx0XHRcdFx0ZWRpdCA9IGNvbnRyb2xsZXIuc3RhdGUoJ3BsYXlsaXN0LWVkaXQnKSxcblx0XHRcdFx0XHRtb2RlbHMgPSBzZWxlY3Rpb24ud2hlcmUoeyB0eXBlOiAnYXVkaW8nIH0pO1xuXG5cdFx0XHRcdGVkaXQuc2V0KCAnbGlicmFyeScsIG5ldyB3cC5tZWRpYS5tb2RlbC5TZWxlY3Rpb24oIG1vZGVscywge1xuXHRcdFx0XHRcdHByb3BzOiAgICBzZWxlY3Rpb24ucHJvcHMudG9KU09OKCksXG5cdFx0XHRcdFx0bXVsdGlwbGU6IHRydWVcblx0XHRcdFx0fSkgKTtcblxuXHRcdFx0XHR0aGlzLmNvbnRyb2xsZXIuc2V0U3RhdGUoJ3BsYXlsaXN0LWVkaXQnKTtcblxuXHRcdFx0XHQvLyBLZWVwIGZvY3VzIGluc2lkZSBtZWRpYSBtb2RhbFxuXHRcdFx0XHQvLyBhZnRlciBqdW1waW5nIHRvIHBsYXlsaXN0IHZpZXdcblx0XHRcdFx0dGhpcy5jb250cm9sbGVyLm1vZGFsLmZvY3VzTWFuYWdlci5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXG5cdG1haW5WaWRlb1BsYXlsaXN0VG9vbGJhcjogZnVuY3Rpb24oIHZpZXcgKSB7XG5cdFx0dmFyIGNvbnRyb2xsZXIgPSB0aGlzO1xuXG5cdFx0dGhpcy5zZWxlY3Rpb25TdGF0dXNUb29sYmFyKCB2aWV3ICk7XG5cblx0XHR2aWV3LnNldCggJ3ZpZGVvLXBsYXlsaXN0Jywge1xuXHRcdFx0c3R5bGU6ICAgICdwcmltYXJ5Jyxcblx0XHRcdHRleHQ6ICAgICBsMTBuLmNyZWF0ZU5ld1ZpZGVvUGxheWxpc3QsXG5cdFx0XHRwcmlvcml0eTogMTAwLFxuXHRcdFx0cmVxdWlyZXM6IHsgc2VsZWN0aW9uOiB0cnVlIH0sXG5cblx0XHRcdGNsaWNrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHNlbGVjdGlvbiA9IGNvbnRyb2xsZXIuc3RhdGUoKS5nZXQoJ3NlbGVjdGlvbicpLFxuXHRcdFx0XHRcdGVkaXQgPSBjb250cm9sbGVyLnN0YXRlKCd2aWRlby1wbGF5bGlzdC1lZGl0JyksXG5cdFx0XHRcdFx0bW9kZWxzID0gc2VsZWN0aW9uLndoZXJlKHsgdHlwZTogJ3ZpZGVvJyB9KTtcblxuXHRcdFx0XHRlZGl0LnNldCggJ2xpYnJhcnknLCBuZXcgd3AubWVkaWEubW9kZWwuU2VsZWN0aW9uKCBtb2RlbHMsIHtcblx0XHRcdFx0XHRwcm9wczogICAgc2VsZWN0aW9uLnByb3BzLnRvSlNPTigpLFxuXHRcdFx0XHRcdG11bHRpcGxlOiB0cnVlXG5cdFx0XHRcdH0pICk7XG5cblx0XHRcdFx0dGhpcy5jb250cm9sbGVyLnNldFN0YXRlKCd2aWRlby1wbGF5bGlzdC1lZGl0Jyk7XG5cblx0XHRcdFx0Ly8gS2VlcCBmb2N1cyBpbnNpZGUgbWVkaWEgbW9kYWxcblx0XHRcdFx0Ly8gYWZ0ZXIganVtcGluZyB0byB2aWRlbyBwbGF5bGlzdCB2aWV3XG5cdFx0XHRcdHRoaXMuY29udHJvbGxlci5tb2RhbC5mb2N1c01hbmFnZXIuZm9jdXMoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSxcblxuXHRmZWF0dXJlZEltYWdlVG9vbGJhcjogZnVuY3Rpb24oIHRvb2xiYXIgKSB7XG5cdFx0dGhpcy5jcmVhdGVTZWxlY3RUb29sYmFyKCB0b29sYmFyLCB7XG5cdFx0XHR0ZXh0OiAgbDEwbi5zZXRGZWF0dXJlZEltYWdlLFxuXHRcdFx0c3RhdGU6IHRoaXMub3B0aW9ucy5zdGF0ZVxuXHRcdH0pO1xuXHR9LFxuXG5cdG1haW5FbWJlZFRvb2xiYXI6IGZ1bmN0aW9uKCB0b29sYmFyICkge1xuXHRcdHRvb2xiYXIudmlldyA9IG5ldyB3cC5tZWRpYS52aWV3LlRvb2xiYXIuRW1iZWQoe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpc1xuXHRcdH0pO1xuXHR9LFxuXG5cdGdhbGxlcnlFZGl0VG9vbGJhcjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGVkaXRpbmcgPSB0aGlzLnN0YXRlKCkuZ2V0KCdlZGl0aW5nJyk7XG5cdFx0dGhpcy50b29sYmFyLnNldCggbmV3IHdwLm1lZGlhLnZpZXcuVG9vbGJhcih7XG5cdFx0XHRjb250cm9sbGVyOiB0aGlzLFxuXHRcdFx0aXRlbXM6IHtcblx0XHRcdFx0aW5zZXJ0OiB7XG5cdFx0XHRcdFx0c3R5bGU6ICAgICdwcmltYXJ5Jyxcblx0XHRcdFx0XHR0ZXh0OiAgICAgZWRpdGluZyA/IGwxMG4udXBkYXRlR2FsbGVyeSA6IGwxMG4uaW5zZXJ0R2FsbGVyeSxcblx0XHRcdFx0XHRwcmlvcml0eTogODAsXG5cdFx0XHRcdFx0cmVxdWlyZXM6IHsgbGlicmFyeTogdHJ1ZSB9LFxuXG5cdFx0XHRcdFx0LyoqXG5cdFx0XHRcdFx0ICogQGZpcmVzIHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGUjdXBkYXRlXG5cdFx0XHRcdFx0ICovXG5cdFx0XHRcdFx0Y2xpY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0dmFyIGNvbnRyb2xsZXIgPSB0aGlzLmNvbnRyb2xsZXIsXG5cdFx0XHRcdFx0XHRcdHN0YXRlID0gY29udHJvbGxlci5zdGF0ZSgpO1xuXG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRzdGF0ZS50cmlnZ2VyKCAndXBkYXRlJywgc3RhdGUuZ2V0KCdsaWJyYXJ5JykgKTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVzdG9yZSBhbmQgcmVzZXQgdGhlIGRlZmF1bHQgc3RhdGUuXG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLnNldFN0YXRlKCBjb250cm9sbGVyLm9wdGlvbnMuc3RhdGUgKTtcblx0XHRcdFx0XHRcdGNvbnRyb2xsZXIucmVzZXQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KSApO1xuXHR9LFxuXG5cdGdhbGxlcnlBZGRUb29sYmFyOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnRvb2xiYXIuc2V0KCBuZXcgd3AubWVkaWEudmlldy5Ub29sYmFyKHtcblx0XHRcdGNvbnRyb2xsZXI6IHRoaXMsXG5cdFx0XHRpdGVtczoge1xuXHRcdFx0XHRpbnNlcnQ6IHtcblx0XHRcdFx0XHRzdHlsZTogICAgJ3ByaW1hcnknLFxuXHRcdFx0XHRcdHRleHQ6ICAgICBsMTBuLmFkZFRvR2FsbGVyeSxcblx0XHRcdFx0XHRwcmlvcml0eTogODAsXG5cdFx0XHRcdFx0cmVxdWlyZXM6IHsgc2VsZWN0aW9uOiB0cnVlIH0sXG5cblx0XHRcdFx0XHQvKipcblx0XHRcdFx0XHQgKiBAZmlyZXMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZSNyZXNldFxuXHRcdFx0XHRcdCAqL1xuXHRcdFx0XHRcdGNsaWNrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHZhciBjb250cm9sbGVyID0gdGhpcy5jb250cm9sbGVyLFxuXHRcdFx0XHRcdFx0XHRzdGF0ZSA9IGNvbnRyb2xsZXIuc3RhdGUoKSxcblx0XHRcdFx0XHRcdFx0ZWRpdCA9IGNvbnRyb2xsZXIuc3RhdGUoJ2dhbGxlcnktZWRpdCcpO1xuXG5cdFx0XHRcdFx0XHRlZGl0LmdldCgnbGlicmFyeScpLmFkZCggc3RhdGUuZ2V0KCdzZWxlY3Rpb24nKS5tb2RlbHMgKTtcblx0XHRcdFx0XHRcdHN0YXRlLnRyaWdnZXIoJ3Jlc2V0Jyk7XG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLnNldFN0YXRlKCdnYWxsZXJ5LWVkaXQnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KSApO1xuXHR9LFxuXG5cdHBsYXlsaXN0RWRpdFRvb2xiYXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlZGl0aW5nID0gdGhpcy5zdGF0ZSgpLmdldCgnZWRpdGluZycpO1xuXHRcdHRoaXMudG9vbGJhci5zZXQoIG5ldyB3cC5tZWRpYS52aWV3LlRvb2xiYXIoe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpcyxcblx0XHRcdGl0ZW1zOiB7XG5cdFx0XHRcdGluc2VydDoge1xuXHRcdFx0XHRcdHN0eWxlOiAgICAncHJpbWFyeScsXG5cdFx0XHRcdFx0dGV4dDogICAgIGVkaXRpbmcgPyBsMTBuLnVwZGF0ZVBsYXlsaXN0IDogbDEwbi5pbnNlcnRQbGF5bGlzdCxcblx0XHRcdFx0XHRwcmlvcml0eTogODAsXG5cdFx0XHRcdFx0cmVxdWlyZXM6IHsgbGlicmFyeTogdHJ1ZSB9LFxuXG5cdFx0XHRcdFx0LyoqXG5cdFx0XHRcdFx0ICogQGZpcmVzIHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGUjdXBkYXRlXG5cdFx0XHRcdFx0ICovXG5cdFx0XHRcdFx0Y2xpY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0dmFyIGNvbnRyb2xsZXIgPSB0aGlzLmNvbnRyb2xsZXIsXG5cdFx0XHRcdFx0XHRcdHN0YXRlID0gY29udHJvbGxlci5zdGF0ZSgpO1xuXG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRzdGF0ZS50cmlnZ2VyKCAndXBkYXRlJywgc3RhdGUuZ2V0KCdsaWJyYXJ5JykgKTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVzdG9yZSBhbmQgcmVzZXQgdGhlIGRlZmF1bHQgc3RhdGUuXG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLnNldFN0YXRlKCBjb250cm9sbGVyLm9wdGlvbnMuc3RhdGUgKTtcblx0XHRcdFx0XHRcdGNvbnRyb2xsZXIucmVzZXQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KSApO1xuXHR9LFxuXG5cdHBsYXlsaXN0QWRkVG9vbGJhcjogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy50b29sYmFyLnNldCggbmV3IHdwLm1lZGlhLnZpZXcuVG9vbGJhcih7XG5cdFx0XHRjb250cm9sbGVyOiB0aGlzLFxuXHRcdFx0aXRlbXM6IHtcblx0XHRcdFx0aW5zZXJ0OiB7XG5cdFx0XHRcdFx0c3R5bGU6ICAgICdwcmltYXJ5Jyxcblx0XHRcdFx0XHR0ZXh0OiAgICAgbDEwbi5hZGRUb1BsYXlsaXN0LFxuXHRcdFx0XHRcdHByaW9yaXR5OiA4MCxcblx0XHRcdFx0XHRyZXF1aXJlczogeyBzZWxlY3Rpb246IHRydWUgfSxcblxuXHRcdFx0XHRcdC8qKlxuXHRcdFx0XHRcdCAqIEBmaXJlcyB3cC5tZWRpYS5jb250cm9sbGVyLlN0YXRlI3Jlc2V0XG5cdFx0XHRcdFx0ICovXG5cdFx0XHRcdFx0Y2xpY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0dmFyIGNvbnRyb2xsZXIgPSB0aGlzLmNvbnRyb2xsZXIsXG5cdFx0XHRcdFx0XHRcdHN0YXRlID0gY29udHJvbGxlci5zdGF0ZSgpLFxuXHRcdFx0XHRcdFx0XHRlZGl0ID0gY29udHJvbGxlci5zdGF0ZSgncGxheWxpc3QtZWRpdCcpO1xuXG5cdFx0XHRcdFx0XHRlZGl0LmdldCgnbGlicmFyeScpLmFkZCggc3RhdGUuZ2V0KCdzZWxlY3Rpb24nKS5tb2RlbHMgKTtcblx0XHRcdFx0XHRcdHN0YXRlLnRyaWdnZXIoJ3Jlc2V0Jyk7XG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLnNldFN0YXRlKCdwbGF5bGlzdC1lZGl0Jyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSkgKTtcblx0fSxcblxuXHR2aWRlb1BsYXlsaXN0RWRpdFRvb2xiYXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlZGl0aW5nID0gdGhpcy5zdGF0ZSgpLmdldCgnZWRpdGluZycpO1xuXHRcdHRoaXMudG9vbGJhci5zZXQoIG5ldyB3cC5tZWRpYS52aWV3LlRvb2xiYXIoe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpcyxcblx0XHRcdGl0ZW1zOiB7XG5cdFx0XHRcdGluc2VydDoge1xuXHRcdFx0XHRcdHN0eWxlOiAgICAncHJpbWFyeScsXG5cdFx0XHRcdFx0dGV4dDogICAgIGVkaXRpbmcgPyBsMTBuLnVwZGF0ZVZpZGVvUGxheWxpc3QgOiBsMTBuLmluc2VydFZpZGVvUGxheWxpc3QsXG5cdFx0XHRcdFx0cHJpb3JpdHk6IDE0MCxcblx0XHRcdFx0XHRyZXF1aXJlczogeyBsaWJyYXJ5OiB0cnVlIH0sXG5cblx0XHRcdFx0XHRjbGljazogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHR2YXIgY29udHJvbGxlciA9IHRoaXMuY29udHJvbGxlcixcblx0XHRcdFx0XHRcdFx0c3RhdGUgPSBjb250cm9sbGVyLnN0YXRlKCksXG5cdFx0XHRcdFx0XHRcdGxpYnJhcnkgPSBzdGF0ZS5nZXQoJ2xpYnJhcnknKTtcblxuXHRcdFx0XHRcdFx0bGlicmFyeS50eXBlID0gJ3ZpZGVvJztcblxuXHRcdFx0XHRcdFx0Y29udHJvbGxlci5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0c3RhdGUudHJpZ2dlciggJ3VwZGF0ZScsIGxpYnJhcnkgKTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVzdG9yZSBhbmQgcmVzZXQgdGhlIGRlZmF1bHQgc3RhdGUuXG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLnNldFN0YXRlKCBjb250cm9sbGVyLm9wdGlvbnMuc3RhdGUgKTtcblx0XHRcdFx0XHRcdGNvbnRyb2xsZXIucmVzZXQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KSApO1xuXHR9LFxuXG5cdHZpZGVvUGxheWxpc3RBZGRUb29sYmFyOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnRvb2xiYXIuc2V0KCBuZXcgd3AubWVkaWEudmlldy5Ub29sYmFyKHtcblx0XHRcdGNvbnRyb2xsZXI6IHRoaXMsXG5cdFx0XHRpdGVtczoge1xuXHRcdFx0XHRpbnNlcnQ6IHtcblx0XHRcdFx0XHRzdHlsZTogICAgJ3ByaW1hcnknLFxuXHRcdFx0XHRcdHRleHQ6ICAgICBsMTBuLmFkZFRvVmlkZW9QbGF5bGlzdCxcblx0XHRcdFx0XHRwcmlvcml0eTogMTQwLFxuXHRcdFx0XHRcdHJlcXVpcmVzOiB7IHNlbGVjdGlvbjogdHJ1ZSB9LFxuXG5cdFx0XHRcdFx0Y2xpY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0dmFyIGNvbnRyb2xsZXIgPSB0aGlzLmNvbnRyb2xsZXIsXG5cdFx0XHRcdFx0XHRcdHN0YXRlID0gY29udHJvbGxlci5zdGF0ZSgpLFxuXHRcdFx0XHRcdFx0XHRlZGl0ID0gY29udHJvbGxlci5zdGF0ZSgndmlkZW8tcGxheWxpc3QtZWRpdCcpO1xuXG5cdFx0XHRcdFx0XHRlZGl0LmdldCgnbGlicmFyeScpLmFkZCggc3RhdGUuZ2V0KCdzZWxlY3Rpb24nKS5tb2RlbHMgKTtcblx0XHRcdFx0XHRcdHN0YXRlLnRyaWdnZXIoJ3Jlc2V0Jyk7XG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLnNldFN0YXRlKCd2aWRlby1wbGF5bGlzdC1lZGl0Jyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSkgKTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUG9zdDtcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5NZWRpYUZyYW1lLlNlbGVjdFxuICpcbiAqIEEgZnJhbWUgZm9yIHNlbGVjdGluZyBhbiBpdGVtIG9yIGl0ZW1zIGZyb20gdGhlIG1lZGlhIGxpYnJhcnkuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5NZWRpYUZyYW1lXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5GcmFtZVxuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICogQG1peGVzIHdwLm1lZGlhLmNvbnRyb2xsZXIuU3RhdGVNYWNoaW5lXG4gKi9cblxudmFyIE1lZGlhRnJhbWUgPSB3cC5tZWRpYS52aWV3Lk1lZGlhRnJhbWUsXG5cdGwxMG4gPSB3cC5tZWRpYS52aWV3LmwxMG4sXG5cdFNlbGVjdDtcblxuU2VsZWN0ID0gTWVkaWFGcmFtZS5leHRlbmQoe1xuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHQvLyBDYWxsICdpbml0aWFsaXplJyBkaXJlY3RseSBvbiB0aGUgcGFyZW50IGNsYXNzLlxuXHRcdE1lZGlhRnJhbWUucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXG5cdFx0Xy5kZWZhdWx0cyggdGhpcy5vcHRpb25zLCB7XG5cdFx0XHRzZWxlY3Rpb246IFtdLFxuXHRcdFx0bGlicmFyeTogICB7fSxcblx0XHRcdG11bHRpcGxlOiAgZmFsc2UsXG5cdFx0XHRzdGF0ZTogICAgJ2xpYnJhcnknXG5cdFx0fSk7XG5cblx0XHR0aGlzLmNyZWF0ZVNlbGVjdGlvbigpO1xuXHRcdHRoaXMuY3JlYXRlU3RhdGVzKCk7XG5cdFx0dGhpcy5iaW5kSGFuZGxlcnMoKTtcblx0fSxcblxuXHQvKipcblx0ICogQXR0YWNoIGEgc2VsZWN0aW9uIGNvbGxlY3Rpb24gdG8gdGhlIGZyYW1lLlxuXHQgKlxuXHQgKiBBIHNlbGVjdGlvbiBpcyBhIGNvbGxlY3Rpb24gb2YgYXR0YWNobWVudHMgdXNlZCBmb3IgYSBzcGVjaWZpYyBwdXJwb3NlXG5cdCAqIGJ5IGEgbWVkaWEgZnJhbWUuIGUuZy4gU2VsZWN0aW5nIGFuIGF0dGFjaG1lbnQgKG9yIG1hbnkpIHRvIGluc2VydCBpbnRvXG5cdCAqIHBvc3QgY29udGVudC5cblx0ICpcblx0ICogQHNlZSBtZWRpYS5tb2RlbC5TZWxlY3Rpb25cblx0ICovXG5cdGNyZWF0ZVNlbGVjdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHNlbGVjdGlvbiA9IHRoaXMub3B0aW9ucy5zZWxlY3Rpb247XG5cblx0XHRpZiAoICEgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIHdwLm1lZGlhLm1vZGVsLlNlbGVjdGlvbikgKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMuc2VsZWN0aW9uID0gbmV3IHdwLm1lZGlhLm1vZGVsLlNlbGVjdGlvbiggc2VsZWN0aW9uLCB7XG5cdFx0XHRcdG11bHRpcGxlOiB0aGlzLm9wdGlvbnMubXVsdGlwbGVcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHRoaXMuX3NlbGVjdGlvbiA9IHtcblx0XHRcdGF0dGFjaG1lbnRzOiBuZXcgd3AubWVkaWEubW9kZWwuQXR0YWNobWVudHMoKSxcblx0XHRcdGRpZmZlcmVuY2U6IFtdXG5cdFx0fTtcblx0fSxcblxuXHQvKipcblx0ICogQ3JlYXRlIHRoZSBkZWZhdWx0IHN0YXRlcyBvbiB0aGUgZnJhbWUuXG5cdCAqL1xuXHRjcmVhdGVTdGF0ZXM6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuc3RhdGVzICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEFkZCB0aGUgZGVmYXVsdCBzdGF0ZXMuXG5cdFx0dGhpcy5zdGF0ZXMuYWRkKFtcblx0XHRcdC8vIE1haW4gc3RhdGVzLlxuXHRcdFx0bmV3IHdwLm1lZGlhLmNvbnRyb2xsZXIuTGlicmFyeSh7XG5cdFx0XHRcdGxpYnJhcnk6ICAgd3AubWVkaWEucXVlcnkoIG9wdGlvbnMubGlicmFyeSApLFxuXHRcdFx0XHRtdWx0aXBsZTogIG9wdGlvbnMubXVsdGlwbGUsXG5cdFx0XHRcdHRpdGxlOiAgICAgb3B0aW9ucy50aXRsZSxcblx0XHRcdFx0cHJpb3JpdHk6ICAyMFxuXHRcdFx0fSlcblx0XHRdKTtcblx0fSxcblxuXHQvKipcblx0ICogQmluZCByZWdpb24gbW9kZSBldmVudCBjYWxsYmFja3MuXG5cdCAqXG5cdCAqIEBzZWUgbWVkaWEuY29udHJvbGxlci5SZWdpb24ucmVuZGVyXG5cdCAqL1xuXHRiaW5kSGFuZGxlcnM6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMub24oICdyb3V0ZXI6Y3JlYXRlOmJyb3dzZScsIHRoaXMuY3JlYXRlUm91dGVyLCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ3JvdXRlcjpyZW5kZXI6YnJvd3NlJywgdGhpcy5icm93c2VSb3V0ZXIsIHRoaXMgKTtcblx0XHR0aGlzLm9uKCAnY29udGVudDpjcmVhdGU6YnJvd3NlJywgdGhpcy5icm93c2VDb250ZW50LCB0aGlzICk7XG5cdFx0dGhpcy5vbiggJ2NvbnRlbnQ6cmVuZGVyOnVwbG9hZCcsIHRoaXMudXBsb2FkQ29udGVudCwgdGhpcyApO1xuXHRcdHRoaXMub24oICd0b29sYmFyOmNyZWF0ZTpzZWxlY3QnLCB0aGlzLmNyZWF0ZVNlbGVjdFRvb2xiYXIsIHRoaXMgKTtcblx0fSxcblxuXHQvKipcblx0ICogUmVuZGVyIGNhbGxiYWNrIGZvciB0aGUgcm91dGVyIHJlZ2lvbiBpbiB0aGUgYGJyb3dzZWAgbW9kZS5cblx0ICpcblx0ICogQHBhcmFtIHt3cC5tZWRpYS52aWV3LlJvdXRlcn0gcm91dGVyVmlld1xuXHQgKi9cblx0YnJvd3NlUm91dGVyOiBmdW5jdGlvbiggcm91dGVyVmlldyApIHtcblx0XHRyb3V0ZXJWaWV3LnNldCh7XG5cdFx0XHR1cGxvYWQ6IHtcblx0XHRcdFx0dGV4dDogICAgIGwxMG4udXBsb2FkRmlsZXNUaXRsZSxcblx0XHRcdFx0cHJpb3JpdHk6IDIwXG5cdFx0XHR9LFxuXHRcdFx0YnJvd3NlOiB7XG5cdFx0XHRcdHRleHQ6ICAgICBsMTBuLm1lZGlhTGlicmFyeVRpdGxlLFxuXHRcdFx0XHRwcmlvcml0eTogNDBcblx0XHRcdH1cblx0XHR9KTtcblx0fSxcblxuXHQvKipcblx0ICogUmVuZGVyIGNhbGxiYWNrIGZvciB0aGUgY29udGVudCByZWdpb24gaW4gdGhlIGBicm93c2VgIG1vZGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7d3AubWVkaWEuY29udHJvbGxlci5SZWdpb259IGNvbnRlbnRSZWdpb25cblx0ICovXG5cdGJyb3dzZUNvbnRlbnQ6IGZ1bmN0aW9uKCBjb250ZW50UmVnaW9uICkge1xuXHRcdHZhciBzdGF0ZSA9IHRoaXMuc3RhdGUoKTtcblxuXHRcdHRoaXMuJGVsLnJlbW92ZUNsYXNzKCdoaWRlLXRvb2xiYXInKTtcblxuXHRcdC8vIEJyb3dzZSBvdXIgbGlicmFyeSBvZiBhdHRhY2htZW50cy5cblx0XHRjb250ZW50UmVnaW9uLnZpZXcgPSBuZXcgd3AubWVkaWEudmlldy5BdHRhY2htZW50c0Jyb3dzZXIoe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpcyxcblx0XHRcdGNvbGxlY3Rpb246IHN0YXRlLmdldCgnbGlicmFyeScpLFxuXHRcdFx0c2VsZWN0aW9uOiAgc3RhdGUuZ2V0KCdzZWxlY3Rpb24nKSxcblx0XHRcdG1vZGVsOiAgICAgIHN0YXRlLFxuXHRcdFx0c29ydGFibGU6ICAgc3RhdGUuZ2V0KCdzb3J0YWJsZScpLFxuXHRcdFx0c2VhcmNoOiAgICAgc3RhdGUuZ2V0KCdzZWFyY2hhYmxlJyksXG5cdFx0XHRmaWx0ZXJzOiAgICBzdGF0ZS5nZXQoJ2ZpbHRlcmFibGUnKSxcblx0XHRcdGRhdGU6ICAgICAgIHN0YXRlLmdldCgnZGF0ZScpLFxuXHRcdFx0ZGlzcGxheTogICAgc3RhdGUuaGFzKCdkaXNwbGF5JykgPyBzdGF0ZS5nZXQoJ2Rpc3BsYXknKSA6IHN0YXRlLmdldCgnZGlzcGxheVNldHRpbmdzJyksXG5cdFx0XHRkcmFnSW5mbzogICBzdGF0ZS5nZXQoJ2RyYWdJbmZvJyksXG5cblx0XHRcdGlkZWFsQ29sdW1uV2lkdGg6IHN0YXRlLmdldCgnaWRlYWxDb2x1bW5XaWR0aCcpLFxuXHRcdFx0c3VnZ2VzdGVkV2lkdGg6ICAgc3RhdGUuZ2V0KCdzdWdnZXN0ZWRXaWR0aCcpLFxuXHRcdFx0c3VnZ2VzdGVkSGVpZ2h0OiAgc3RhdGUuZ2V0KCdzdWdnZXN0ZWRIZWlnaHQnKSxcblxuXHRcdFx0QXR0YWNobWVudFZpZXc6IHN0YXRlLmdldCgnQXR0YWNobWVudFZpZXcnKVxuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZW5kZXIgY2FsbGJhY2sgZm9yIHRoZSBjb250ZW50IHJlZ2lvbiBpbiB0aGUgYHVwbG9hZGAgbW9kZS5cblx0ICovXG5cdHVwbG9hZENvbnRlbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuJGVsLnJlbW92ZUNsYXNzKCAnaGlkZS10b29sYmFyJyApO1xuXHRcdHRoaXMuY29udGVudC5zZXQoIG5ldyB3cC5tZWRpYS52aWV3LlVwbG9hZGVySW5saW5lKHtcblx0XHRcdGNvbnRyb2xsZXI6IHRoaXNcblx0XHR9KSApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUb29sYmFyc1xuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gdG9vbGJhclxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dXG5cdCAqIEB0aGlzIHdwLm1lZGlhLmNvbnRyb2xsZXIuUmVnaW9uXG5cdCAqL1xuXHRjcmVhdGVTZWxlY3RUb29sYmFyOiBmdW5jdGlvbiggdG9vbGJhciwgb3B0aW9ucyApIHtcblx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB0aGlzLm9wdGlvbnMuYnV0dG9uIHx8IHt9O1xuXHRcdG9wdGlvbnMuY29udHJvbGxlciA9IHRoaXM7XG5cblx0XHR0b29sYmFyLnZpZXcgPSBuZXcgd3AubWVkaWEudmlldy5Ub29sYmFyLlNlbGVjdCggb3B0aW9ucyApO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZWxlY3Q7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuSWZyYW1lXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBJZnJhbWUgPSB3cC5tZWRpYS5WaWV3LmV4dGVuZCh7XG5cdGNsYXNzTmFtZTogJ21lZGlhLWlmcmFtZScsXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEudmlldy5JZnJhbWV9IFJldHVybnMgaXRzZWxmIHRvIGFsbG93IGNoYWluaW5nXG5cdCAqL1xuXHRyZW5kZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMudmlld3MuZGV0YWNoKCk7XG5cdFx0dGhpcy4kZWwuaHRtbCggJzxpZnJhbWUgc3JjPVwiJyArIHRoaXMuY29udHJvbGxlci5zdGF0ZSgpLmdldCgnc3JjJykgKyAnXCIgLz4nICk7XG5cdFx0dGhpcy52aWV3cy5yZW5kZXIoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gSWZyYW1lO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LkltYWdlRGV0YWlsc1xuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuU2V0dGluZ3MuQXR0YWNobWVudERpc3BsYXlcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LlNldHRpbmdzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBBdHRhY2htZW50RGlzcGxheSA9IHdwLm1lZGlhLnZpZXcuU2V0dGluZ3MuQXR0YWNobWVudERpc3BsYXksXG5cdCQgPSBqUXVlcnksXG5cdEltYWdlRGV0YWlscztcblxuSW1hZ2VEZXRhaWxzID0gQXR0YWNobWVudERpc3BsYXkuZXh0ZW5kKHtcblx0Y2xhc3NOYW1lOiAnaW1hZ2UtZGV0YWlscycsXG5cdHRlbXBsYXRlOiAgd3AudGVtcGxhdGUoJ2ltYWdlLWRldGFpbHMnKSxcblx0ZXZlbnRzOiBfLmRlZmF1bHRzKCBBdHRhY2htZW50RGlzcGxheS5wcm90b3R5cGUuZXZlbnRzLCB7XG5cdFx0J2NsaWNrIC5lZGl0LWF0dGFjaG1lbnQnOiAnZWRpdEF0dGFjaG1lbnQnLFxuXHRcdCdjbGljayAucmVwbGFjZS1hdHRhY2htZW50JzogJ3JlcGxhY2VBdHRhY2htZW50Jyxcblx0XHQnY2xpY2sgLmFkdmFuY2VkLXRvZ2dsZSc6ICdvblRvZ2dsZUFkdmFuY2VkJyxcblx0XHQnY2hhbmdlIFtkYXRhLXNldHRpbmc9XCJjdXN0b21XaWR0aFwiXSc6ICdvbkN1c3RvbVNpemUnLFxuXHRcdCdjaGFuZ2UgW2RhdGEtc2V0dGluZz1cImN1c3RvbUhlaWdodFwiXSc6ICdvbkN1c3RvbVNpemUnLFxuXHRcdCdrZXl1cCBbZGF0YS1zZXR0aW5nPVwiY3VzdG9tV2lkdGhcIl0nOiAnb25DdXN0b21TaXplJyxcblx0XHQna2V5dXAgW2RhdGEtc2V0dGluZz1cImN1c3RvbUhlaWdodFwiXSc6ICdvbkN1c3RvbVNpemUnXG5cdH0gKSxcblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0Ly8gdXNlZCBpbiBBdHRhY2htZW50RGlzcGxheS5wcm90b3R5cGUudXBkYXRlTGlua1RvXG5cdFx0dGhpcy5vcHRpb25zLmF0dGFjaG1lbnQgPSB0aGlzLm1vZGVsLmF0dGFjaG1lbnQ7XG5cdFx0dGhpcy5saXN0ZW5UbyggdGhpcy5tb2RlbCwgJ2NoYW5nZTp1cmwnLCB0aGlzLnVwZGF0ZVVybCApO1xuXHRcdHRoaXMubGlzdGVuVG8oIHRoaXMubW9kZWwsICdjaGFuZ2U6bGluaycsIHRoaXMudG9nZ2xlTGlua1NldHRpbmdzICk7XG5cdFx0dGhpcy5saXN0ZW5UbyggdGhpcy5tb2RlbCwgJ2NoYW5nZTpzaXplJywgdGhpcy50b2dnbGVDdXN0b21TaXplICk7XG5cblx0XHRBdHRhY2htZW50RGlzcGxheS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH0sXG5cblx0cHJlcGFyZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGF0dGFjaG1lbnQgPSBmYWxzZTtcblxuXHRcdGlmICggdGhpcy5tb2RlbC5hdHRhY2htZW50ICkge1xuXHRcdFx0YXR0YWNobWVudCA9IHRoaXMubW9kZWwuYXR0YWNobWVudC50b0pTT04oKTtcblx0XHR9XG5cdFx0cmV0dXJuIF8uZGVmYXVsdHMoe1xuXHRcdFx0bW9kZWw6IHRoaXMubW9kZWwudG9KU09OKCksXG5cdFx0XHRhdHRhY2htZW50OiBhdHRhY2htZW50XG5cdFx0fSwgdGhpcy5vcHRpb25zICk7XG5cdH0sXG5cblx0cmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgYXJncyA9IGFyZ3VtZW50cztcblxuXHRcdGlmICggdGhpcy5tb2RlbC5hdHRhY2htZW50ICYmICdwZW5kaW5nJyA9PT0gdGhpcy5tb2RlbC5kZmQuc3RhdGUoKSApIHtcblx0XHRcdHRoaXMubW9kZWwuZGZkXG5cdFx0XHRcdC5kb25lKCBfLmJpbmQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdEF0dGFjaG1lbnREaXNwbGF5LnByb3RvdHlwZS5yZW5kZXIuYXBwbHkoIHRoaXMsIGFyZ3MgKTtcblx0XHRcdFx0XHR0aGlzLnBvc3RSZW5kZXIoKTtcblx0XHRcdFx0fSwgdGhpcyApIClcblx0XHRcdFx0LmZhaWwoIF8uYmluZCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dGhpcy5tb2RlbC5hdHRhY2htZW50ID0gZmFsc2U7XG5cdFx0XHRcdFx0QXR0YWNobWVudERpc3BsYXkucHJvdG90eXBlLnJlbmRlci5hcHBseSggdGhpcywgYXJncyApO1xuXHRcdFx0XHRcdHRoaXMucG9zdFJlbmRlcigpO1xuXHRcdFx0XHR9LCB0aGlzICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0QXR0YWNobWVudERpc3BsYXkucHJvdG90eXBlLnJlbmRlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHR0aGlzLnBvc3RSZW5kZXIoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRwb3N0UmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHRzZXRUaW1lb3V0KCBfLmJpbmQoIHRoaXMucmVzZXRGb2N1cywgdGhpcyApLCAxMCApO1xuXHRcdHRoaXMudG9nZ2xlTGlua1NldHRpbmdzKCk7XG5cdFx0aWYgKCB3aW5kb3cuZ2V0VXNlclNldHRpbmcoICdhZHZJbWdEZXRhaWxzJyApID09PSAnc2hvdycgKSB7XG5cdFx0XHR0aGlzLnRvZ2dsZUFkdmFuY2VkKCB0cnVlICk7XG5cdFx0fVxuXHRcdHRoaXMudHJpZ2dlciggJ3Bvc3QtcmVuZGVyJyApO1xuXHR9LFxuXG5cdHJlc2V0Rm9jdXM6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuJCggJy5saW5rLXRvLWN1c3RvbScgKS5ibHVyKCk7XG5cdFx0dGhpcy4kKCAnLmVtYmVkLW1lZGlhLXNldHRpbmdzJyApLnNjcm9sbFRvcCggMCApO1xuXHR9LFxuXG5cdHVwZGF0ZVVybDogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy4kKCAnLmltYWdlIGltZycgKS5hdHRyKCAnc3JjJywgdGhpcy5tb2RlbC5nZXQoICd1cmwnICkgKTtcblx0XHR0aGlzLiQoICcudXJsJyApLnZhbCggdGhpcy5tb2RlbC5nZXQoICd1cmwnICkgKTtcblx0fSxcblxuXHR0b2dnbGVMaW5rU2V0dGluZ3M6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggdGhpcy5tb2RlbC5nZXQoICdsaW5rJyApID09PSAnbm9uZScgKSB7XG5cdFx0XHR0aGlzLiQoICcubGluay1zZXR0aW5ncycgKS5hZGRDbGFzcygnaGlkZGVuJyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuJCggJy5saW5rLXNldHRpbmdzJyApLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcblx0XHR9XG5cdH0sXG5cblx0dG9nZ2xlQ3VzdG9tU2l6ZTogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCB0aGlzLm1vZGVsLmdldCggJ3NpemUnICkgIT09ICdjdXN0b20nICkge1xuXHRcdFx0dGhpcy4kKCAnLmN1c3RvbS1zaXplJyApLmFkZENsYXNzKCdoaWRkZW4nKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy4kKCAnLmN1c3RvbS1zaXplJyApLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcblx0XHR9XG5cdH0sXG5cblx0b25DdXN0b21TaXplOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIGRpbWVuc2lvbiA9ICQoIGV2ZW50LnRhcmdldCApLmRhdGEoJ3NldHRpbmcnKSxcblx0XHRcdG51bSA9ICQoIGV2ZW50LnRhcmdldCApLnZhbCgpLFxuXHRcdFx0dmFsdWU7XG5cblx0XHQvLyBJZ25vcmUgYm9ndXMgaW5wdXRcblx0XHRpZiAoICEgL15cXGQrLy50ZXN0KCBudW0gKSB8fCBwYXJzZUludCggbnVtLCAxMCApIDwgMSApIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBkaW1lbnNpb24gPT09ICdjdXN0b21XaWR0aCcgKSB7XG5cdFx0XHR2YWx1ZSA9IE1hdGgucm91bmQoIDEgLyB0aGlzLm1vZGVsLmdldCggJ2FzcGVjdFJhdGlvJyApICogbnVtICk7XG5cdFx0XHR0aGlzLm1vZGVsLnNldCggJ2N1c3RvbUhlaWdodCcsIHZhbHVlLCB7IHNpbGVudDogdHJ1ZSB9ICk7XG5cdFx0XHR0aGlzLiQoICdbZGF0YS1zZXR0aW5nPVwiY3VzdG9tSGVpZ2h0XCJdJyApLnZhbCggdmFsdWUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFsdWUgPSBNYXRoLnJvdW5kKCB0aGlzLm1vZGVsLmdldCggJ2FzcGVjdFJhdGlvJyApICogbnVtICk7XG5cdFx0XHR0aGlzLm1vZGVsLnNldCggJ2N1c3RvbVdpZHRoJywgdmFsdWUsIHsgc2lsZW50OiB0cnVlICB9ICk7XG5cdFx0XHR0aGlzLiQoICdbZGF0YS1zZXR0aW5nPVwiY3VzdG9tV2lkdGhcIl0nICkudmFsKCB2YWx1ZSApO1xuXHRcdH1cblx0fSxcblxuXHRvblRvZ2dsZUFkdmFuY2VkOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR0aGlzLnRvZ2dsZUFkdmFuY2VkKCk7XG5cdH0sXG5cblx0dG9nZ2xlQWR2YW5jZWQ6IGZ1bmN0aW9uKCBzaG93ICkge1xuXHRcdHZhciAkYWR2YW5jZWQgPSB0aGlzLiRlbC5maW5kKCAnLmFkdmFuY2VkLXNlY3Rpb24nICksXG5cdFx0XHRtb2RlO1xuXG5cdFx0aWYgKCAkYWR2YW5jZWQuaGFzQ2xhc3MoJ2FkdmFuY2VkLXZpc2libGUnKSB8fCBzaG93ID09PSBmYWxzZSApIHtcblx0XHRcdCRhZHZhbmNlZC5yZW1vdmVDbGFzcygnYWR2YW5jZWQtdmlzaWJsZScpO1xuXHRcdFx0JGFkdmFuY2VkLmZpbmQoJy5hZHZhbmNlZC1zZXR0aW5ncycpLmFkZENsYXNzKCdoaWRkZW4nKTtcblx0XHRcdG1vZGUgPSAnaGlkZSc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCRhZHZhbmNlZC5hZGRDbGFzcygnYWR2YW5jZWQtdmlzaWJsZScpO1xuXHRcdFx0JGFkdmFuY2VkLmZpbmQoJy5hZHZhbmNlZC1zZXR0aW5ncycpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcblx0XHRcdG1vZGUgPSAnc2hvdyc7XG5cdFx0fVxuXG5cdFx0d2luZG93LnNldFVzZXJTZXR0aW5nKCAnYWR2SW1nRGV0YWlscycsIG1vZGUgKTtcblx0fSxcblxuXHRlZGl0QXR0YWNobWVudDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBlZGl0U3RhdGUgPSB0aGlzLmNvbnRyb2xsZXIuc3RhdGVzLmdldCggJ2VkaXQtaW1hZ2UnICk7XG5cblx0XHRpZiAoIHdpbmRvdy5pbWFnZUVkaXQgJiYgZWRpdFN0YXRlICkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGVkaXRTdGF0ZS5zZXQoICdpbWFnZScsIHRoaXMubW9kZWwuYXR0YWNobWVudCApO1xuXHRcdFx0dGhpcy5jb250cm9sbGVyLnNldFN0YXRlKCAnZWRpdC1pbWFnZScgKTtcblx0XHR9XG5cdH0sXG5cblx0cmVwbGFjZUF0dGFjaG1lbnQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdHRoaXMuY29udHJvbGxlci5zZXRTdGF0ZSggJ3JlcGxhY2UtaW1hZ2UnICk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEltYWdlRGV0YWlscztcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5MYWJlbFxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgTGFiZWwgPSB3cC5tZWRpYS5WaWV3LmV4dGVuZCh7XG5cdHRhZ05hbWU6ICdsYWJlbCcsXG5cdGNsYXNzTmFtZTogJ3NjcmVlbi1yZWFkZXItdGV4dCcsXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy52YWx1ZSA9IHRoaXMub3B0aW9ucy52YWx1ZTtcblx0fSxcblxuXHRyZW5kZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuJGVsLmh0bWwoIHRoaXMudmFsdWUgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBMYWJlbDtcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5NZWRpYUZyYW1lXG4gKlxuICogVGhlIGZyYW1lIHVzZWQgdG8gY3JlYXRlIHRoZSBtZWRpYSBtb2RhbC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LkZyYW1lXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKiBAbWl4ZXMgd3AubWVkaWEuY29udHJvbGxlci5TdGF0ZU1hY2hpbmVcbiAqL1xudmFyIEZyYW1lID0gd3AubWVkaWEudmlldy5GcmFtZSxcblx0JCA9IGpRdWVyeSxcblx0TWVkaWFGcmFtZTtcblxuTWVkaWFGcmFtZSA9IEZyYW1lLmV4dGVuZCh7XG5cdGNsYXNzTmFtZTogJ21lZGlhLWZyYW1lJyxcblx0dGVtcGxhdGU6ICB3cC50ZW1wbGF0ZSgnbWVkaWEtZnJhbWUnKSxcblx0cmVnaW9uczogICBbJ21lbnUnLCd0aXRsZScsJ2NvbnRlbnQnLCd0b29sYmFyJywncm91dGVyJ10sXG5cblx0ZXZlbnRzOiB7XG5cdFx0J2NsaWNrIGRpdi5tZWRpYS1mcmFtZS10aXRsZSBoMSc6ICd0b2dnbGVNZW51J1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAZ2xvYmFsIHdwLlVwbG9hZGVyXG5cdCAqL1xuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHRGcmFtZS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cblx0XHRfLmRlZmF1bHRzKCB0aGlzLm9wdGlvbnMsIHtcblx0XHRcdHRpdGxlOiAgICAnJyxcblx0XHRcdG1vZGFsOiAgICB0cnVlLFxuXHRcdFx0dXBsb2FkZXI6IHRydWVcblx0XHR9KTtcblxuXHRcdC8vIEVuc3VyZSBjb3JlIFVJIGlzIGVuYWJsZWQuXG5cdFx0dGhpcy4kZWwuYWRkQ2xhc3MoJ3dwLWNvcmUtdWknKTtcblxuXHRcdC8vIEluaXRpYWxpemUgbW9kYWwgY29udGFpbmVyIHZpZXcuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMubW9kYWwgKSB7XG5cdFx0XHR0aGlzLm1vZGFsID0gbmV3IHdwLm1lZGlhLnZpZXcuTW9kYWwoe1xuXHRcdFx0XHRjb250cm9sbGVyOiB0aGlzLFxuXHRcdFx0XHR0aXRsZTogICAgICB0aGlzLm9wdGlvbnMudGl0bGVcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLm1vZGFsLmNvbnRlbnQoIHRoaXMgKTtcblx0XHR9XG5cblx0XHQvLyBGb3JjZSB0aGUgdXBsb2FkZXIgb2ZmIGlmIHRoZSB1cGxvYWQgbGltaXQgaGFzIGJlZW4gZXhjZWVkZWQgb3Jcblx0XHQvLyBpZiB0aGUgYnJvd3NlciBpc24ndCBzdXBwb3J0ZWQuXG5cdFx0aWYgKCB3cC5VcGxvYWRlci5saW1pdEV4Y2VlZGVkIHx8ICEgd3AuVXBsb2FkZXIuYnJvd3Nlci5zdXBwb3J0ZWQgKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMudXBsb2FkZXIgPSBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBJbml0aWFsaXplIHdpbmRvdy13aWRlIHVwbG9hZGVyLlxuXHRcdGlmICggdGhpcy5vcHRpb25zLnVwbG9hZGVyICkge1xuXHRcdFx0dGhpcy51cGxvYWRlciA9IG5ldyB3cC5tZWRpYS52aWV3LlVwbG9hZGVyV2luZG93KHtcblx0XHRcdFx0Y29udHJvbGxlcjogdGhpcyxcblx0XHRcdFx0dXBsb2FkZXI6IHtcblx0XHRcdFx0XHRkcm9wem9uZTogIHRoaXMubW9kYWwgPyB0aGlzLm1vZGFsLiRlbCA6IHRoaXMuJGVsLFxuXHRcdFx0XHRcdGNvbnRhaW5lcjogdGhpcy4kZWxcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLnZpZXdzLnNldCggJy5tZWRpYS1mcmFtZS11cGxvYWRlcicsIHRoaXMudXBsb2FkZXIgKTtcblx0XHR9XG5cblx0XHR0aGlzLm9uKCAnYXR0YWNoJywgXy5iaW5kKCB0aGlzLnZpZXdzLnJlYWR5LCB0aGlzLnZpZXdzICksIHRoaXMgKTtcblxuXHRcdC8vIEJpbmQgZGVmYXVsdCB0aXRsZSBjcmVhdGlvbi5cblx0XHR0aGlzLm9uKCAndGl0bGU6Y3JlYXRlOmRlZmF1bHQnLCB0aGlzLmNyZWF0ZVRpdGxlLCB0aGlzICk7XG5cdFx0dGhpcy50aXRsZS5tb2RlKCdkZWZhdWx0Jyk7XG5cblx0XHR0aGlzLm9uKCAndGl0bGU6cmVuZGVyJywgZnVuY3Rpb24oIHZpZXcgKSB7XG5cdFx0XHR2aWV3LiRlbC5hcHBlbmQoICc8c3BhbiBjbGFzcz1cImRhc2hpY29ucyBkYXNoaWNvbnMtYXJyb3ctZG93blwiPjwvc3Bhbj4nICk7XG5cdFx0fSk7XG5cblx0XHQvLyBCaW5kIGRlZmF1bHQgbWVudS5cblx0XHR0aGlzLm9uKCAnbWVudTpjcmVhdGU6ZGVmYXVsdCcsIHRoaXMuY3JlYXRlTWVudSwgdGhpcyApO1xuXHR9LFxuXHQvKipcblx0ICogQHJldHVybnMge3dwLm1lZGlhLnZpZXcuTWVkaWFGcmFtZX0gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmdcblx0ICovXG5cdHJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0Ly8gQWN0aXZhdGUgdGhlIGRlZmF1bHQgc3RhdGUgaWYgbm8gYWN0aXZlIHN0YXRlIGV4aXN0cy5cblx0XHRpZiAoICEgdGhpcy5zdGF0ZSgpICYmIHRoaXMub3B0aW9ucy5zdGF0ZSApIHtcblx0XHRcdHRoaXMuc2V0U3RhdGUoIHRoaXMub3B0aW9ucy5zdGF0ZSApO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBjYWxsICdyZW5kZXInIGRpcmVjdGx5IG9uIHRoZSBwYXJlbnQgY2xhc3Ncblx0XHQgKi9cblx0XHRyZXR1cm4gRnJhbWUucHJvdG90eXBlLnJlbmRlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH0sXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gdGl0bGVcblx0ICogQHRoaXMgd3AubWVkaWEuY29udHJvbGxlci5SZWdpb25cblx0ICovXG5cdGNyZWF0ZVRpdGxlOiBmdW5jdGlvbiggdGl0bGUgKSB7XG5cdFx0dGl0bGUudmlldyA9IG5ldyB3cC5tZWRpYS5WaWV3KHtcblx0XHRcdGNvbnRyb2xsZXI6IHRoaXMsXG5cdFx0XHR0YWdOYW1lOiAnaDEnXG5cdFx0fSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gbWVudVxuXHQgKiBAdGhpcyB3cC5tZWRpYS5jb250cm9sbGVyLlJlZ2lvblxuXHQgKi9cblx0Y3JlYXRlTWVudTogZnVuY3Rpb24oIG1lbnUgKSB7XG5cdFx0bWVudS52aWV3ID0gbmV3IHdwLm1lZGlhLnZpZXcuTWVudSh7XG5cdFx0XHRjb250cm9sbGVyOiB0aGlzXG5cdFx0fSk7XG5cdH0sXG5cblx0dG9nZ2xlTWVudTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy4kZWwuZmluZCggJy5tZWRpYS1tZW51JyApLnRvZ2dsZUNsYXNzKCAndmlzaWJsZScgKTtcblx0fSxcblxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHRvb2xiYXJcblx0ICogQHRoaXMgd3AubWVkaWEuY29udHJvbGxlci5SZWdpb25cblx0ICovXG5cdGNyZWF0ZVRvb2xiYXI6IGZ1bmN0aW9uKCB0b29sYmFyICkge1xuXHRcdHRvb2xiYXIudmlldyA9IG5ldyB3cC5tZWRpYS52aWV3LlRvb2xiYXIoe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpc1xuXHRcdH0pO1xuXHR9LFxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHJvdXRlclxuXHQgKiBAdGhpcyB3cC5tZWRpYS5jb250cm9sbGVyLlJlZ2lvblxuXHQgKi9cblx0Y3JlYXRlUm91dGVyOiBmdW5jdGlvbiggcm91dGVyICkge1xuXHRcdHJvdXRlci52aWV3ID0gbmV3IHdwLm1lZGlhLnZpZXcuUm91dGVyKHtcblx0XHRcdGNvbnRyb2xsZXI6IHRoaXNcblx0XHR9KTtcblx0fSxcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdCAqL1xuXHRjcmVhdGVJZnJhbWVTdGF0ZXM6IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHRcdHZhciBzZXR0aW5ncyA9IHdwLm1lZGlhLnZpZXcuc2V0dGluZ3MsXG5cdFx0XHR0YWJzID0gc2V0dGluZ3MudGFicyxcblx0XHRcdHRhYlVybCA9IHNldHRpbmdzLnRhYlVybCxcblx0XHRcdCRwb3N0SWQ7XG5cblx0XHRpZiAoICEgdGFicyB8fCAhIHRhYlVybCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBBZGQgdGhlIHBvc3QgSUQgdG8gdGhlIHRhYiBVUkwgaWYgaXQgZXhpc3RzLlxuXHRcdCRwb3N0SWQgPSAkKCcjcG9zdF9JRCcpO1xuXHRcdGlmICggJHBvc3RJZC5sZW5ndGggKSB7XG5cdFx0XHR0YWJVcmwgKz0gJyZwb3N0X2lkPScgKyAkcG9zdElkLnZhbCgpO1xuXHRcdH1cblxuXHRcdC8vIEdlbmVyYXRlIHRoZSB0YWIgc3RhdGVzLlxuXHRcdF8uZWFjaCggdGFicywgZnVuY3Rpb24oIHRpdGxlLCBpZCApIHtcblx0XHRcdHRoaXMuc3RhdGUoICdpZnJhbWU6JyArIGlkICkuc2V0KCBfLmRlZmF1bHRzKHtcblx0XHRcdFx0dGFiOiAgICAgaWQsXG5cdFx0XHRcdHNyYzogICAgIHRhYlVybCArICcmdGFiPScgKyBpZCxcblx0XHRcdFx0dGl0bGU6ICAgdGl0bGUsXG5cdFx0XHRcdGNvbnRlbnQ6ICdpZnJhbWUnLFxuXHRcdFx0XHRtZW51OiAgICAnZGVmYXVsdCdcblx0XHRcdH0sIG9wdGlvbnMgKSApO1xuXHRcdH0sIHRoaXMgKTtcblxuXHRcdHRoaXMub24oICdjb250ZW50OmNyZWF0ZTppZnJhbWUnLCB0aGlzLmlmcmFtZUNvbnRlbnQsIHRoaXMgKTtcblx0XHR0aGlzLm9uKCAnY29udGVudDpkZWFjdGl2YXRlOmlmcmFtZScsIHRoaXMuaWZyYW1lQ29udGVudENsZWFudXAsIHRoaXMgKTtcblx0XHR0aGlzLm9uKCAnbWVudTpyZW5kZXI6ZGVmYXVsdCcsIHRoaXMuaWZyYW1lTWVudSwgdGhpcyApO1xuXHRcdHRoaXMub24oICdvcGVuJywgdGhpcy5oaWphY2tUaGlja2JveCwgdGhpcyApO1xuXHRcdHRoaXMub24oICdjbG9zZScsIHRoaXMucmVzdG9yZVRoaWNrYm94LCB0aGlzICk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZW50XG5cdCAqIEB0aGlzIHdwLm1lZGlhLmNvbnRyb2xsZXIuUmVnaW9uXG5cdCAqL1xuXHRpZnJhbWVDb250ZW50OiBmdW5jdGlvbiggY29udGVudCApIHtcblx0XHR0aGlzLiRlbC5hZGRDbGFzcygnaGlkZS10b29sYmFyJyk7XG5cdFx0Y29udGVudC52aWV3ID0gbmV3IHdwLm1lZGlhLnZpZXcuSWZyYW1lKHtcblx0XHRcdGNvbnRyb2xsZXI6IHRoaXNcblx0XHR9KTtcblx0fSxcblxuXHRpZnJhbWVDb250ZW50Q2xlYW51cDogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy4kZWwucmVtb3ZlQ2xhc3MoJ2hpZGUtdG9vbGJhcicpO1xuXHR9LFxuXG5cdGlmcmFtZU1lbnU6IGZ1bmN0aW9uKCB2aWV3ICkge1xuXHRcdHZhciB2aWV3cyA9IHt9O1xuXG5cdFx0aWYgKCAhIHZpZXcgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Xy5lYWNoKCB3cC5tZWRpYS52aWV3LnNldHRpbmdzLnRhYnMsIGZ1bmN0aW9uKCB0aXRsZSwgaWQgKSB7XG5cdFx0XHR2aWV3c1sgJ2lmcmFtZTonICsgaWQgXSA9IHtcblx0XHRcdFx0dGV4dDogdGhpcy5zdGF0ZSggJ2lmcmFtZTonICsgaWQgKS5nZXQoJ3RpdGxlJyksXG5cdFx0XHRcdHByaW9yaXR5OiAyMDBcblx0XHRcdH07XG5cdFx0fSwgdGhpcyApO1xuXG5cdFx0dmlldy5zZXQoIHZpZXdzICk7XG5cdH0sXG5cblx0aGlqYWNrVGhpY2tib3g6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBmcmFtZSA9IHRoaXM7XG5cblx0XHRpZiAoICEgd2luZG93LnRiX3JlbW92ZSB8fCB0aGlzLl90Yl9yZW1vdmUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5fdGJfcmVtb3ZlID0gd2luZG93LnRiX3JlbW92ZTtcblx0XHR3aW5kb3cudGJfcmVtb3ZlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRmcmFtZS5jbG9zZSgpO1xuXHRcdFx0ZnJhbWUucmVzZXQoKTtcblx0XHRcdGZyYW1lLnNldFN0YXRlKCBmcmFtZS5vcHRpb25zLnN0YXRlICk7XG5cdFx0XHRmcmFtZS5fdGJfcmVtb3ZlLmNhbGwoIHdpbmRvdyApO1xuXHRcdH07XG5cdH0sXG5cblx0cmVzdG9yZVRoaWNrYm94OiBmdW5jdGlvbigpIHtcblx0XHRpZiAoICEgdGhpcy5fdGJfcmVtb3ZlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHdpbmRvdy50Yl9yZW1vdmUgPSB0aGlzLl90Yl9yZW1vdmU7XG5cdFx0ZGVsZXRlIHRoaXMuX3RiX3JlbW92ZTtcblx0fVxufSk7XG5cbi8vIE1hcCBzb21lIG9mIHRoZSBtb2RhbCdzIG1ldGhvZHMgdG8gdGhlIGZyYW1lLlxuXy5lYWNoKFsnb3BlbicsJ2Nsb3NlJywnYXR0YWNoJywnZGV0YWNoJywnZXNjYXBlJ10sIGZ1bmN0aW9uKCBtZXRob2QgKSB7XG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEudmlldy5NZWRpYUZyYW1lfSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0TWVkaWFGcmFtZS5wcm90b3R5cGVbIG1ldGhvZCBdID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCB0aGlzLm1vZGFsICkge1xuXHRcdFx0dGhpcy5tb2RhbFsgbWV0aG9kIF0uYXBwbHkoIHRoaXMubW9kYWwsIGFyZ3VtZW50cyApO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1lZGlhRnJhbWU7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuTWVudUl0ZW1cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyICQgPSBqUXVlcnksXG5cdE1lbnVJdGVtO1xuXG5NZW51SXRlbSA9IHdwLm1lZGlhLlZpZXcuZXh0ZW5kKHtcblx0dGFnTmFtZTogICAnYScsXG5cdGNsYXNzTmFtZTogJ21lZGlhLW1lbnUtaXRlbScsXG5cblx0YXR0cmlidXRlczoge1xuXHRcdGhyZWY6ICcjJ1xuXHR9LFxuXG5cdGV2ZW50czoge1xuXHRcdCdjbGljayc6ICdfY2xpY2snXG5cdH0sXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZXZlbnRcblx0ICovXG5cdF9jbGljazogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBjbGlja092ZXJyaWRlID0gdGhpcy5vcHRpb25zLmNsaWNrO1xuXG5cdFx0aWYgKCBldmVudCApIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXG5cdFx0aWYgKCBjbGlja092ZXJyaWRlICkge1xuXHRcdFx0Y2xpY2tPdmVycmlkZS5jYWxsKCB0aGlzICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuY2xpY2soKTtcblx0XHR9XG5cblx0XHQvLyBXaGVuIHNlbGVjdGluZyBhIHRhYiBhbG9uZyB0aGUgbGVmdCBzaWRlLFxuXHRcdC8vIGZvY3VzIHNob3VsZCBiZSB0cmFuc2ZlcnJlZCBpbnRvIHRoZSBtYWluIHBhbmVsXG5cdFx0aWYgKCAhIHdwLm1lZGlhLmlzVG91Y2hEZXZpY2UgKSB7XG5cdFx0XHQkKCcubWVkaWEtZnJhbWUtY29udGVudCBpbnB1dCcpLmZpcnN0KCkuZm9jdXMoKTtcblx0XHR9XG5cdH0sXG5cblx0Y2xpY2s6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBzdGF0ZSA9IHRoaXMub3B0aW9ucy5zdGF0ZTtcblxuXHRcdGlmICggc3RhdGUgKSB7XG5cdFx0XHR0aGlzLmNvbnRyb2xsZXIuc2V0U3RhdGUoIHN0YXRlICk7XG5cdFx0XHR0aGlzLnZpZXdzLnBhcmVudC4kZWwucmVtb3ZlQ2xhc3MoICd2aXNpYmxlJyApOyAvLyBUT0RPOiBvciBoaWRlIG9uIGFueSBjbGljaywgc2VlIGJlbG93XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogQHJldHVybnMge3dwLm1lZGlhLnZpZXcuTWVudUl0ZW19IHJldHVybnMgaXRzZWxmIHRvIGFsbG93IGNoYWluaW5nXG5cdCAqL1xuXHRyZW5kZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG5cdFx0aWYgKCBvcHRpb25zLnRleHQgKSB7XG5cdFx0XHR0aGlzLiRlbC50ZXh0KCBvcHRpb25zLnRleHQgKTtcblx0XHR9IGVsc2UgaWYgKCBvcHRpb25zLmh0bWwgKSB7XG5cdFx0XHR0aGlzLiRlbC5odG1sKCBvcHRpb25zLmh0bWwgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gTWVudUl0ZW07XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuTWVudVxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuUHJpb3JpdHlMaXN0XG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBNZW51SXRlbSA9IHdwLm1lZGlhLnZpZXcuTWVudUl0ZW0sXG5cdFByaW9yaXR5TGlzdCA9IHdwLm1lZGlhLnZpZXcuUHJpb3JpdHlMaXN0LFxuXHRNZW51O1xuXG5NZW51ID0gUHJpb3JpdHlMaXN0LmV4dGVuZCh7XG5cdHRhZ05hbWU6ICAgJ2RpdicsXG5cdGNsYXNzTmFtZTogJ21lZGlhLW1lbnUnLFxuXHRwcm9wZXJ0eTogICdzdGF0ZScsXG5cdEl0ZW1WaWV3OiAgTWVudUl0ZW0sXG5cdHJlZ2lvbjogICAgJ21lbnUnLFxuXG5cdC8qIFRPRE86IGFsdGVybmF0aXZlbHkgaGlkZSBvbiBhbnkgY2xpY2sgYW55d2hlcmVcblx0ZXZlbnRzOiB7XG5cdFx0J2NsaWNrJzogJ2NsaWNrJ1xuXHR9LFxuXG5cdGNsaWNrOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLiRlbC5yZW1vdmVDbGFzcyggJ3Zpc2libGUnICk7XG5cdH0sXG5cdCovXG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZFxuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEuVmlld31cblx0ICovXG5cdHRvVmlldzogZnVuY3Rpb24oIG9wdGlvbnMsIGlkICkge1xuXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXHRcdG9wdGlvbnNbIHRoaXMucHJvcGVydHkgXSA9IG9wdGlvbnNbIHRoaXMucHJvcGVydHkgXSB8fCBpZDtcblx0XHRyZXR1cm4gbmV3IHRoaXMuSXRlbVZpZXcoIG9wdGlvbnMgKS5yZW5kZXIoKTtcblx0fSxcblxuXHRyZWFkeTogZnVuY3Rpb24oKSB7XG5cdFx0LyoqXG5cdFx0ICogY2FsbCAncmVhZHknIGRpcmVjdGx5IG9uIHRoZSBwYXJlbnQgY2xhc3Ncblx0XHQgKi9cblx0XHRQcmlvcml0eUxpc3QucHJvdG90eXBlLnJlYWR5LmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR0aGlzLnZpc2liaWxpdHkoKTtcblx0fSxcblxuXHRzZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdC8qKlxuXHRcdCAqIGNhbGwgJ3NldCcgZGlyZWN0bHkgb24gdGhlIHBhcmVudCBjbGFzc1xuXHRcdCAqL1xuXHRcdFByaW9yaXR5TGlzdC5wcm90b3R5cGUuc2V0LmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR0aGlzLnZpc2liaWxpdHkoKTtcblx0fSxcblxuXHR1bnNldDogZnVuY3Rpb24oKSB7XG5cdFx0LyoqXG5cdFx0ICogY2FsbCAndW5zZXQnIGRpcmVjdGx5IG9uIHRoZSBwYXJlbnQgY2xhc3Ncblx0XHQgKi9cblx0XHRQcmlvcml0eUxpc3QucHJvdG90eXBlLnVuc2V0LmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR0aGlzLnZpc2liaWxpdHkoKTtcblx0fSxcblxuXHR2aXNpYmlsaXR5OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgcmVnaW9uID0gdGhpcy5yZWdpb24sXG5cdFx0XHR2aWV3ID0gdGhpcy5jb250cm9sbGVyWyByZWdpb24gXS5nZXQoKSxcblx0XHRcdHZpZXdzID0gdGhpcy52aWV3cy5nZXQoKSxcblx0XHRcdGhpZGUgPSAhIHZpZXdzIHx8IHZpZXdzLmxlbmd0aCA8IDI7XG5cblx0XHRpZiAoIHRoaXMgPT09IHZpZXcgKSB7XG5cdFx0XHR0aGlzLmNvbnRyb2xsZXIuJGVsLnRvZ2dsZUNsYXNzKCAnaGlkZS0nICsgcmVnaW9uLCBoaWRlICk7XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkXG5cdCAqL1xuXHRzZWxlY3Q6IGZ1bmN0aW9uKCBpZCApIHtcblx0XHR2YXIgdmlldyA9IHRoaXMuZ2V0KCBpZCApO1xuXG5cdFx0aWYgKCAhIHZpZXcgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5kZXNlbGVjdCgpO1xuXHRcdHZpZXcuJGVsLmFkZENsYXNzKCdhY3RpdmUnKTtcblx0fSxcblxuXHRkZXNlbGVjdDogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy4kZWwuY2hpbGRyZW4oKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG5cdH0sXG5cblx0aGlkZTogZnVuY3Rpb24oIGlkICkge1xuXHRcdHZhciB2aWV3ID0gdGhpcy5nZXQoIGlkICk7XG5cblx0XHRpZiAoICEgdmlldyApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2aWV3LiRlbC5hZGRDbGFzcygnaGlkZGVuJyk7XG5cdH0sXG5cblx0c2hvdzogZnVuY3Rpb24oIGlkICkge1xuXHRcdHZhciB2aWV3ID0gdGhpcy5nZXQoIGlkICk7XG5cblx0XHRpZiAoICEgdmlldyApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2aWV3LiRlbC5yZW1vdmVDbGFzcygnaGlkZGVuJyk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1lbnU7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuTW9kYWxcbiAqXG4gKiBBIG1vZGFsIHZpZXcsIHdoaWNoIHRoZSBtZWRpYSBtb2RhbCB1c2VzIGFzIGl0cyBkZWZhdWx0IGNvbnRhaW5lci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyICQgPSBqUXVlcnksXG5cdE1vZGFsO1xuXG5Nb2RhbCA9IHdwLm1lZGlhLlZpZXcuZXh0ZW5kKHtcblx0dGFnTmFtZTogICdkaXYnLFxuXHR0ZW1wbGF0ZTogd3AudGVtcGxhdGUoJ21lZGlhLW1vZGFsJyksXG5cblx0YXR0cmlidXRlczoge1xuXHRcdHRhYmluZGV4OiAwXG5cdH0sXG5cblx0ZXZlbnRzOiB7XG5cdFx0J2NsaWNrIC5tZWRpYS1tb2RhbC1iYWNrZHJvcCwgLm1lZGlhLW1vZGFsLWNsb3NlJzogJ2VzY2FwZUhhbmRsZXInLFxuXHRcdCdrZXlkb3duJzogJ2tleWRvd24nXG5cdH0sXG5cblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0Xy5kZWZhdWx0cyggdGhpcy5vcHRpb25zLCB7XG5cdFx0XHRjb250YWluZXI6IGRvY3VtZW50LmJvZHksXG5cdFx0XHR0aXRsZTogICAgICcnLFxuXHRcdFx0cHJvcGFnYXRlOiB0cnVlLFxuXHRcdFx0ZnJlZXplOiAgICB0cnVlXG5cdFx0fSk7XG5cblx0XHR0aGlzLmZvY3VzTWFuYWdlciA9IG5ldyB3cC5tZWRpYS52aWV3LkZvY3VzTWFuYWdlcih7XG5cdFx0XHRlbDogdGhpcy5lbFxuXHRcdH0pO1xuXHR9LFxuXHQvKipcblx0ICogQHJldHVybnMge09iamVjdH1cblx0ICovXG5cdHByZXBhcmU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHR0aXRsZTogdGhpcy5vcHRpb25zLnRpdGxlXG5cdFx0fTtcblx0fSxcblxuXHQvKipcblx0ICogQHJldHVybnMge3dwLm1lZGlhLnZpZXcuTW9kYWx9IFJldHVybnMgaXRzZWxmIHRvIGFsbG93IGNoYWluaW5nXG5cdCAqL1xuXHRhdHRhY2g6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggdGhpcy52aWV3cy5hdHRhY2hlZCApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICggISB0aGlzLnZpZXdzLnJlbmRlcmVkICkge1xuXHRcdFx0dGhpcy5yZW5kZXIoKTtcblx0XHR9XG5cblx0XHR0aGlzLiRlbC5hcHBlbmRUbyggdGhpcy5vcHRpb25zLmNvbnRhaW5lciApO1xuXG5cdFx0Ly8gTWFudWFsbHkgbWFyayB0aGUgdmlldyBhcyBhdHRhY2hlZCBhbmQgdHJpZ2dlciByZWFkeS5cblx0XHR0aGlzLnZpZXdzLmF0dGFjaGVkID0gdHJ1ZTtcblx0XHR0aGlzLnZpZXdzLnJlYWR5KCk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9wYWdhdGUoJ2F0dGFjaCcpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEudmlldy5Nb2RhbH0gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmdcblx0ICovXG5cdGRldGFjaDogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCB0aGlzLiRlbC5pcygnOnZpc2libGUnKSApIHtcblx0XHRcdHRoaXMuY2xvc2UoKTtcblx0XHR9XG5cblx0XHR0aGlzLiRlbC5kZXRhY2goKTtcblx0XHR0aGlzLnZpZXdzLmF0dGFjaGVkID0gZmFsc2U7XG5cdFx0cmV0dXJuIHRoaXMucHJvcGFnYXRlKCdkZXRhY2gnKTtcblx0fSxcblxuXHQvKipcblx0ICogQHJldHVybnMge3dwLm1lZGlhLnZpZXcuTW9kYWx9IFJldHVybnMgaXRzZWxmIHRvIGFsbG93IGNoYWluaW5nXG5cdCAqL1xuXHRvcGVuOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgJGVsID0gdGhpcy4kZWwsXG5cdFx0XHRvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuXHRcdFx0bWNlRWRpdG9yO1xuXG5cdFx0aWYgKCAkZWwuaXMoJzp2aXNpYmxlJykgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRpZiAoICEgdGhpcy52aWV3cy5hdHRhY2hlZCApIHtcblx0XHRcdHRoaXMuYXR0YWNoKCk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlIGBmcmVlemVgIG9wdGlvbiBpcyBzZXQsIHJlY29yZCB0aGUgd2luZG93J3Mgc2Nyb2xsIHBvc2l0aW9uLlxuXHRcdGlmICggb3B0aW9ucy5mcmVlemUgKSB7XG5cdFx0XHR0aGlzLl9mcmVlemUgPSB7XG5cdFx0XHRcdHNjcm9sbFRvcDogJCggd2luZG93ICkuc2Nyb2xsVG9wKClcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8gRGlzYWJsZSBwYWdlIHNjcm9sbGluZy5cblx0XHQkKCAnYm9keScgKS5hZGRDbGFzcyggJ21vZGFsLW9wZW4nICk7XG5cblx0XHQkZWwuc2hvdygpO1xuXG5cdFx0Ly8gVHJ5IHRvIGNsb3NlIHRoZSBvbnNjcmVlbiBrZXlib2FyZFxuXHRcdGlmICggJ29udG91Y2hlbmQnIGluIGRvY3VtZW50ICkge1xuXHRcdFx0aWYgKCAoIG1jZUVkaXRvciA9IHdpbmRvdy50aW55bWNlICYmIHdpbmRvdy50aW55bWNlLmFjdGl2ZUVkaXRvciApICAmJiAhIG1jZUVkaXRvci5pc0hpZGRlbigpICYmIG1jZUVkaXRvci5pZnJhbWVFbGVtZW50ICkge1xuXHRcdFx0XHRtY2VFZGl0b3IuaWZyYW1lRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0XHRtY2VFZGl0b3IuaWZyYW1lRWxlbWVudC5ibHVyKCk7XG5cblx0XHRcdFx0c2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0bWNlRWRpdG9yLmlmcmFtZUVsZW1lbnQuYmx1cigpO1xuXHRcdFx0XHR9LCAxMDAgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLiRlbC5mb2N1cygpO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvcGFnYXRlKCdvcGVuJyk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS52aWV3Lk1vZGFsfSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0Y2xvc2U6IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHRcdHZhciBmcmVlemUgPSB0aGlzLl9mcmVlemU7XG5cblx0XHRpZiAoICEgdGhpcy52aWV3cy5hdHRhY2hlZCB8fCAhIHRoaXMuJGVsLmlzKCc6dmlzaWJsZScpICkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Ly8gRW5hYmxlIHBhZ2Ugc2Nyb2xsaW5nLlxuXHRcdCQoICdib2R5JyApLnJlbW92ZUNsYXNzKCAnbW9kYWwtb3BlbicgKTtcblxuXHRcdC8vIEhpZGUgbW9kYWwgYW5kIHJlbW92ZSByZXN0cmljdGVkIG1lZGlhIG1vZGFsIHRhYiBmb2N1cyBvbmNlIGl0J3MgY2xvc2VkXG5cdFx0dGhpcy4kZWwuaGlkZSgpLnVuZGVsZWdhdGUoICdrZXlkb3duJyApO1xuXG5cdFx0Ly8gUHV0IGZvY3VzIGJhY2sgaW4gdXNlZnVsIGxvY2F0aW9uIG9uY2UgbW9kYWwgaXMgY2xvc2VkXG5cdFx0JCgnI3dwYm9keS1jb250ZW50JykuZm9jdXMoKTtcblxuXHRcdHRoaXMucHJvcGFnYXRlKCdjbG9zZScpO1xuXG5cdFx0Ly8gSWYgdGhlIGBmcmVlemVgIG9wdGlvbiBpcyBzZXQsIHJlc3RvcmUgdGhlIGNvbnRhaW5lcidzIHNjcm9sbCBwb3NpdGlvbi5cblx0XHRpZiAoIGZyZWV6ZSApIHtcblx0XHRcdCQoIHdpbmRvdyApLnNjcm9sbFRvcCggZnJlZXplLnNjcm9sbFRvcCApO1xuXHRcdH1cblxuXHRcdGlmICggb3B0aW9ucyAmJiBvcHRpb25zLmVzY2FwZSApIHtcblx0XHRcdHRoaXMucHJvcGFnYXRlKCdlc2NhcGUnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblx0LyoqXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS52aWV3Lk1vZGFsfSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0ZXNjYXBlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5jbG9zZSh7IGVzY2FwZTogdHJ1ZSB9KTtcblx0fSxcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxuXHQgKi9cblx0ZXNjYXBlSGFuZGxlcjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0dGhpcy5lc2NhcGUoKTtcblx0fSxcblxuXHQvKipcblx0ICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbnRlbnQgVmlld3MgdG8gcmVnaXN0ZXIgdG8gJy5tZWRpYS1tb2RhbC1jb250ZW50J1xuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEudmlldy5Nb2RhbH0gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmdcblx0ICovXG5cdGNvbnRlbnQ6IGZ1bmN0aW9uKCBjb250ZW50ICkge1xuXHRcdHRoaXMudmlld3Muc2V0KCAnLm1lZGlhLW1vZGFsLWNvbnRlbnQnLCBjb250ZW50ICk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRyaWdnZXJzIGEgbW9kYWwgZXZlbnQgYW5kIGlmIHRoZSBgcHJvcGFnYXRlYCBvcHRpb24gaXMgc2V0LFxuXHQgKiBmb3J3YXJkcyBldmVudHMgdG8gdGhlIG1vZGFsJ3MgY29udHJvbGxlci5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS52aWV3Lk1vZGFsfSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0cHJvcGFnYXRlOiBmdW5jdGlvbiggaWQgKSB7XG5cdFx0dGhpcy50cmlnZ2VyKCBpZCApO1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMucHJvcGFnYXRlICkge1xuXHRcdFx0dGhpcy5jb250cm9sbGVyLnRyaWdnZXIoIGlkICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZXZlbnRcblx0ICovXG5cdGtleWRvd246IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHQvLyBDbG9zZSB0aGUgbW9kYWwgd2hlbiBlc2NhcGUgaXMgcHJlc3NlZC5cblx0XHRpZiAoIDI3ID09PSBldmVudC53aGljaCAmJiB0aGlzLiRlbC5pcygnOnZpc2libGUnKSApIHtcblx0XHRcdHRoaXMuZXNjYXBlKCk7XG5cdFx0XHRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1vZGFsO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LlByaW9yaXR5TGlzdFxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgUHJpb3JpdHlMaXN0ID0gd3AubWVkaWEuVmlldy5leHRlbmQoe1xuXHR0YWdOYW1lOiAgICdkaXYnLFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuX3ZpZXdzID0ge307XG5cblx0XHR0aGlzLnNldCggXy5leHRlbmQoIHt9LCB0aGlzLl92aWV3cywgdGhpcy5vcHRpb25zLnZpZXdzICksIHsgc2lsZW50OiB0cnVlIH0pO1xuXHRcdGRlbGV0ZSB0aGlzLm9wdGlvbnMudmlld3M7XG5cblx0XHRpZiAoICEgdGhpcy5vcHRpb25zLnNpbGVudCApIHtcblx0XHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkXG5cdCAqIEBwYXJhbSB7d3AubWVkaWEuVmlld3xPYmplY3R9IHZpZXdcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICogQHJldHVybnMge3dwLm1lZGlhLnZpZXcuUHJpb3JpdHlMaXN0fSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0c2V0OiBmdW5jdGlvbiggaWQsIHZpZXcsIG9wdGlvbnMgKSB7XG5cdFx0dmFyIHByaW9yaXR5LCB2aWV3cywgaW5kZXg7XG5cblx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRcdC8vIEFjY2VwdCBhbiBvYmplY3Qgd2l0aCBhbiBgaWRgIDogYHZpZXdgIG1hcHBpbmcuXG5cdFx0aWYgKCBfLmlzT2JqZWN0KCBpZCApICkge1xuXHRcdFx0Xy5lYWNoKCBpZCwgZnVuY3Rpb24oIHZpZXcsIGlkICkge1xuXHRcdFx0XHR0aGlzLnNldCggaWQsIHZpZXcgKTtcblx0XHRcdH0sIHRoaXMgKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICggISAodmlldyBpbnN0YW5jZW9mIEJhY2tib25lLlZpZXcpICkge1xuXHRcdFx0dmlldyA9IHRoaXMudG9WaWV3KCB2aWV3LCBpZCwgb3B0aW9ucyApO1xuXHRcdH1cblx0XHR2aWV3LmNvbnRyb2xsZXIgPSB2aWV3LmNvbnRyb2xsZXIgfHwgdGhpcy5jb250cm9sbGVyO1xuXG5cdFx0dGhpcy51bnNldCggaWQgKTtcblxuXHRcdHByaW9yaXR5ID0gdmlldy5vcHRpb25zLnByaW9yaXR5IHx8IDEwO1xuXHRcdHZpZXdzID0gdGhpcy52aWV3cy5nZXQoKSB8fCBbXTtcblxuXHRcdF8uZmluZCggdmlld3MsIGZ1bmN0aW9uKCBleGlzdGluZywgaSApIHtcblx0XHRcdGlmICggZXhpc3Rpbmcub3B0aW9ucy5wcmlvcml0eSA+IHByaW9yaXR5ICkge1xuXHRcdFx0XHRpbmRleCA9IGk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5fdmlld3NbIGlkIF0gPSB2aWV3O1xuXHRcdHRoaXMudmlld3MuYWRkKCB2aWV3LCB7XG5cdFx0XHRhdDogXy5pc051bWJlciggaW5kZXggKSA/IGluZGV4IDogdmlld3MubGVuZ3RoIHx8IDBcblx0XHR9KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS5WaWV3fVxuXHQgKi9cblx0Z2V0OiBmdW5jdGlvbiggaWQgKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3ZpZXdzWyBpZCBdO1xuXHR9LFxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS52aWV3LlByaW9yaXR5TGlzdH1cblx0ICovXG5cdHVuc2V0OiBmdW5jdGlvbiggaWQgKSB7XG5cdFx0dmFyIHZpZXcgPSB0aGlzLmdldCggaWQgKTtcblxuXHRcdGlmICggdmlldyApIHtcblx0XHRcdHZpZXcucmVtb3ZlKCk7XG5cdFx0fVxuXG5cdFx0ZGVsZXRlIHRoaXMuX3ZpZXdzWyBpZCBdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICogQHJldHVybnMge3dwLm1lZGlhLlZpZXd9XG5cdCAqL1xuXHR0b1ZpZXc6IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHRcdHJldHVybiBuZXcgd3AubWVkaWEuVmlldyggb3B0aW9ucyApO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBQcmlvcml0eUxpc3Q7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuUm91dGVySXRlbVxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuTWVudUl0ZW1cbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIFJvdXRlckl0ZW0gPSB3cC5tZWRpYS52aWV3Lk1lbnVJdGVtLmV4dGVuZCh7XG5cdC8qKlxuXHQgKiBPbiBjbGljayBoYW5kbGVyIHRvIGFjdGl2YXRlIHRoZSBjb250ZW50IHJlZ2lvbidzIGNvcnJlc3BvbmRpbmcgbW9kZS5cblx0ICovXG5cdGNsaWNrOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgY29udGVudE1vZGUgPSB0aGlzLm9wdGlvbnMuY29udGVudE1vZGU7XG5cdFx0aWYgKCBjb250ZW50TW9kZSApIHtcblx0XHRcdHRoaXMuY29udHJvbGxlci5jb250ZW50Lm1vZGUoIGNvbnRlbnRNb2RlICk7XG5cdFx0fVxuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSb3V0ZXJJdGVtO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LlJvdXRlclxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuTWVudVxuICogQGF1Z21lbnRzIHdwLm1lZGlhLnZpZXcuUHJpb3JpdHlMaXN0XG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBNZW51ID0gd3AubWVkaWEudmlldy5NZW51LFxuXHRSb3V0ZXI7XG5cblJvdXRlciA9IE1lbnUuZXh0ZW5kKHtcblx0dGFnTmFtZTogICAnZGl2Jyxcblx0Y2xhc3NOYW1lOiAnbWVkaWEtcm91dGVyJyxcblx0cHJvcGVydHk6ICAnY29udGVudE1vZGUnLFxuXHRJdGVtVmlldzogIHdwLm1lZGlhLnZpZXcuUm91dGVySXRlbSxcblx0cmVnaW9uOiAgICAncm91dGVyJyxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmNvbnRyb2xsZXIub24oICdjb250ZW50OnJlbmRlcicsIHRoaXMudXBkYXRlLCB0aGlzICk7XG5cdFx0Ly8gQ2FsbCAnaW5pdGlhbGl6ZScgZGlyZWN0bHkgb24gdGhlIHBhcmVudCBjbGFzcy5cblx0XHRNZW51LnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0fSxcblxuXHR1cGRhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtb2RlID0gdGhpcy5jb250cm9sbGVyLmNvbnRlbnQubW9kZSgpO1xuXHRcdGlmICggbW9kZSApIHtcblx0XHRcdHRoaXMuc2VsZWN0KCBtb2RlICk7XG5cdFx0fVxuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSb3V0ZXI7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuU2VhcmNoXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBsMTBuID0gd3AubWVkaWEudmlldy5sMTBuLFxuXHRTZWFyY2g7XG5cblNlYXJjaCA9IHdwLm1lZGlhLlZpZXcuZXh0ZW5kKHtcblx0dGFnTmFtZTogICAnaW5wdXQnLFxuXHRjbGFzc05hbWU6ICdzZWFyY2gnLFxuXHRpZDogICAgICAgICdtZWRpYS1zZWFyY2gtaW5wdXQnLFxuXG5cdGF0dHJpYnV0ZXM6IHtcblx0XHR0eXBlOiAgICAgICAgJ3NlYXJjaCcsXG5cdFx0cGxhY2Vob2xkZXI6IGwxMG4uc2VhcmNoXG5cdH0sXG5cblx0ZXZlbnRzOiB7XG5cdFx0J2lucHV0JzogICdzZWFyY2gnLFxuXHRcdCdrZXl1cCc6ICAnc2VhcmNoJyxcblx0XHQnY2hhbmdlJzogJ3NlYXJjaCcsXG5cdFx0J3NlYXJjaCc6ICdzZWFyY2gnXG5cdH0sXG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS52aWV3LlNlYXJjaH0gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmdcblx0ICovXG5cdHJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5lbC52YWx1ZSA9IHRoaXMubW9kZWwuZXNjYXBlKCdzZWFyY2gnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRzZWFyY2g6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRpZiAoIGV2ZW50LnRhcmdldC52YWx1ZSApIHtcblx0XHRcdHRoaXMubW9kZWwuc2V0KCAnc2VhcmNoJywgZXZlbnQudGFyZ2V0LnZhbHVlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubW9kZWwudW5zZXQoJ3NlYXJjaCcpO1xuXHRcdH1cblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2VhcmNoO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LlNlbGVjdGlvblxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgbDEwbiA9IHdwLm1lZGlhLnZpZXcubDEwbixcblx0U2VsZWN0aW9uO1xuXG5TZWxlY3Rpb24gPSB3cC5tZWRpYS5WaWV3LmV4dGVuZCh7XG5cdHRhZ05hbWU6ICAgJ2RpdicsXG5cdGNsYXNzTmFtZTogJ21lZGlhLXNlbGVjdGlvbicsXG5cdHRlbXBsYXRlOiAgd3AudGVtcGxhdGUoJ21lZGlhLXNlbGVjdGlvbicpLFxuXG5cdGV2ZW50czoge1xuXHRcdCdjbGljayAuZWRpdC1zZWxlY3Rpb24nOiAgJ2VkaXQnLFxuXHRcdCdjbGljayAuY2xlYXItc2VsZWN0aW9uJzogJ2NsZWFyJ1xuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdF8uZGVmYXVsdHMoIHRoaXMub3B0aW9ucywge1xuXHRcdFx0ZWRpdGFibGU6ICBmYWxzZSxcblx0XHRcdGNsZWFyYWJsZTogdHJ1ZVxuXHRcdH0pO1xuXG5cdFx0LyoqXG5cdFx0ICogQG1lbWJlciB7d3AubWVkaWEudmlldy5BdHRhY2htZW50cy5TZWxlY3Rpb259XG5cdFx0ICovXG5cdFx0dGhpcy5hdHRhY2htZW50cyA9IG5ldyB3cC5tZWRpYS52aWV3LkF0dGFjaG1lbnRzLlNlbGVjdGlvbih7XG5cdFx0XHRjb250cm9sbGVyOiB0aGlzLmNvbnRyb2xsZXIsXG5cdFx0XHRjb2xsZWN0aW9uOiB0aGlzLmNvbGxlY3Rpb24sXG5cdFx0XHRzZWxlY3Rpb246ICB0aGlzLmNvbGxlY3Rpb24sXG5cdFx0XHRtb2RlbDogICAgICBuZXcgQmFja2JvbmUuTW9kZWwoKVxuXHRcdH0pO1xuXG5cdFx0dGhpcy52aWV3cy5zZXQoICcuc2VsZWN0aW9uLXZpZXcnLCB0aGlzLmF0dGFjaG1lbnRzICk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uLm9uKCAnYWRkIHJlbW92ZSByZXNldCcsIHRoaXMucmVmcmVzaCwgdGhpcyApO1xuXHRcdHRoaXMuY29udHJvbGxlci5vbiggJ2NvbnRlbnQ6YWN0aXZhdGUnLCB0aGlzLnJlZnJlc2gsIHRoaXMgKTtcblx0fSxcblxuXHRyZWFkeTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5yZWZyZXNoKCk7XG5cdH0sXG5cblx0cmVmcmVzaDogZnVuY3Rpb24oKSB7XG5cdFx0Ly8gSWYgdGhlIHNlbGVjdGlvbiBoYXNuJ3QgYmVlbiByZW5kZXJlZCwgYmFpbC5cblx0XHRpZiAoICEgdGhpcy4kZWwuY2hpbGRyZW4oKS5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIGNvbGxlY3Rpb24gPSB0aGlzLmNvbGxlY3Rpb24sXG5cdFx0XHRlZGl0aW5nID0gJ2VkaXQtc2VsZWN0aW9uJyA9PT0gdGhpcy5jb250cm9sbGVyLmNvbnRlbnQubW9kZSgpO1xuXG5cdFx0Ly8gSWYgbm90aGluZyBpcyBzZWxlY3RlZCwgZGlzcGxheSBub3RoaW5nLlxuXHRcdHRoaXMuJGVsLnRvZ2dsZUNsYXNzKCAnZW1wdHknLCAhIGNvbGxlY3Rpb24ubGVuZ3RoICk7XG5cdFx0dGhpcy4kZWwudG9nZ2xlQ2xhc3MoICdvbmUnLCAxID09PSBjb2xsZWN0aW9uLmxlbmd0aCApO1xuXHRcdHRoaXMuJGVsLnRvZ2dsZUNsYXNzKCAnZWRpdGluZycsIGVkaXRpbmcgKTtcblxuXHRcdHRoaXMuJCgnLmNvdW50JykudGV4dCggbDEwbi5zZWxlY3RlZC5yZXBsYWNlKCclZCcsIGNvbGxlY3Rpb24ubGVuZ3RoKSApO1xuXHR9LFxuXG5cdGVkaXQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGlmICggdGhpcy5vcHRpb25zLmVkaXRhYmxlICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLmVkaXRhYmxlLmNhbGwoIHRoaXMsIHRoaXMuY29sbGVjdGlvbiApO1xuXHRcdH1cblx0fSxcblxuXHRjbGVhcjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uLnJlc2V0KCk7XG5cblx0XHQvLyBLZWVwIGZvY3VzIGluc2lkZSBtZWRpYSBtb2RhbFxuXHRcdC8vIGFmdGVyIGNsZWFyIGxpbmsgaXMgc2VsZWN0ZWRcblx0XHR0aGlzLmNvbnRyb2xsZXIubW9kYWwuZm9jdXNNYW5hZ2VyLmZvY3VzKCk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNlbGVjdGlvbjtcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5TZXR0aW5nc1xuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgVmlldyA9IHdwLm1lZGlhLlZpZXcsXG5cdCQgPSBCYWNrYm9uZS4kLFxuXHRTZXR0aW5ncztcblxuU2V0dGluZ3MgPSBWaWV3LmV4dGVuZCh7XG5cdGV2ZW50czoge1xuXHRcdCdjbGljayBidXR0b24nOiAgICAndXBkYXRlSGFuZGxlcicsXG5cdFx0J2NoYW5nZSBpbnB1dCc6ICAgICd1cGRhdGVIYW5kbGVyJyxcblx0XHQnY2hhbmdlIHNlbGVjdCc6ICAgJ3VwZGF0ZUhhbmRsZXInLFxuXHRcdCdjaGFuZ2UgdGV4dGFyZWEnOiAndXBkYXRlSGFuZGxlcidcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLm1vZGVsID0gdGhpcy5tb2RlbCB8fCBuZXcgQmFja2JvbmUuTW9kZWwoKTtcblx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLm1vZGVsLCAnY2hhbmdlJywgdGhpcy51cGRhdGVDaGFuZ2VzICk7XG5cdH0sXG5cblx0cHJlcGFyZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIF8uZGVmYXVsdHMoe1xuXHRcdFx0bW9kZWw6IHRoaXMubW9kZWwudG9KU09OKClcblx0XHR9LCB0aGlzLm9wdGlvbnMgKTtcblx0fSxcblx0LyoqXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS52aWV3LlNldHRpbmdzfSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0cmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHRWaWV3LnByb3RvdHlwZS5yZW5kZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdC8vIFNlbGVjdCB0aGUgY29ycmVjdCB2YWx1ZXMuXG5cdFx0XyggdGhpcy5tb2RlbC5hdHRyaWJ1dGVzICkuY2hhaW4oKS5rZXlzKCkuZWFjaCggdGhpcy51cGRhdGUsIHRoaXMgKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICovXG5cdHVwZGF0ZTogZnVuY3Rpb24oIGtleSApIHtcblx0XHR2YXIgdmFsdWUgPSB0aGlzLm1vZGVsLmdldCgga2V5ICksXG5cdFx0XHQkc2V0dGluZyA9IHRoaXMuJCgnW2RhdGEtc2V0dGluZz1cIicgKyBrZXkgKyAnXCJdJyksXG5cdFx0XHQkYnV0dG9ucywgJHZhbHVlO1xuXG5cdFx0Ly8gQmFpbCBpZiB3ZSBkaWRuJ3QgZmluZCBhIG1hdGNoaW5nIHNldHRpbmcuXG5cdFx0aWYgKCAhICRzZXR0aW5nLmxlbmd0aCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBBdHRlbXB0IHRvIGRldGVybWluZSBob3cgdGhlIHNldHRpbmcgaXMgcmVuZGVyZWQgYW5kIHVwZGF0ZVxuXHRcdC8vIHRoZSBzZWxlY3RlZCB2YWx1ZS5cblxuXHRcdC8vIEhhbmRsZSBkcm9wZG93bnMuXG5cdFx0aWYgKCAkc2V0dGluZy5pcygnc2VsZWN0JykgKSB7XG5cdFx0XHQkdmFsdWUgPSAkc2V0dGluZy5maW5kKCdbdmFsdWU9XCInICsgdmFsdWUgKyAnXCJdJyk7XG5cblx0XHRcdGlmICggJHZhbHVlLmxlbmd0aCApIHtcblx0XHRcdFx0JHNldHRpbmcuZmluZCgnb3B0aW9uJykucHJvcCggJ3NlbGVjdGVkJywgZmFsc2UgKTtcblx0XHRcdFx0JHZhbHVlLnByb3AoICdzZWxlY3RlZCcsIHRydWUgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIElmIHdlIGNhbid0IGZpbmQgdGhlIGRlc2lyZWQgdmFsdWUsIHJlY29yZCB3aGF0ICppcyogc2VsZWN0ZWQuXG5cdFx0XHRcdHRoaXMubW9kZWwuc2V0KCBrZXksICRzZXR0aW5nLmZpbmQoJzpzZWxlY3RlZCcpLnZhbCgpICk7XG5cdFx0XHR9XG5cblx0XHQvLyBIYW5kbGUgYnV0dG9uIGdyb3Vwcy5cblx0XHR9IGVsc2UgaWYgKCAkc2V0dGluZy5oYXNDbGFzcygnYnV0dG9uLWdyb3VwJykgKSB7XG5cdFx0XHQkYnV0dG9ucyA9ICRzZXR0aW5nLmZpbmQoJ2J1dHRvbicpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcblx0XHRcdCRidXR0b25zLmZpbHRlciggJ1t2YWx1ZT1cIicgKyB2YWx1ZSArICdcIl0nICkuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xuXG5cdFx0Ly8gSGFuZGxlIHRleHQgaW5wdXRzIGFuZCB0ZXh0YXJlYXMuXG5cdFx0fSBlbHNlIGlmICggJHNldHRpbmcuaXMoJ2lucHV0W3R5cGU9XCJ0ZXh0XCJdLCB0ZXh0YXJlYScpICkge1xuXHRcdFx0aWYgKCAhICRzZXR0aW5nLmlzKCc6Zm9jdXMnKSApIHtcblx0XHRcdFx0JHNldHRpbmcudmFsKCB2YWx1ZSApO1xuXHRcdFx0fVxuXHRcdC8vIEhhbmRsZSBjaGVja2JveGVzLlxuXHRcdH0gZWxzZSBpZiAoICRzZXR0aW5nLmlzKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKSApIHtcblx0XHRcdCRzZXR0aW5nLnByb3AoICdjaGVja2VkJywgISEgdmFsdWUgJiYgJ2ZhbHNlJyAhPT0gdmFsdWUgKTtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZXZlbnRcblx0ICovXG5cdHVwZGF0ZUhhbmRsZXI6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgJHNldHRpbmcgPSAkKCBldmVudC50YXJnZXQgKS5jbG9zZXN0KCdbZGF0YS1zZXR0aW5nXScpLFxuXHRcdFx0dmFsdWUgPSBldmVudC50YXJnZXQudmFsdWUsXG5cdFx0XHR1c2VyU2V0dGluZztcblxuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRpZiAoICEgJHNldHRpbmcubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFVzZSB0aGUgY29ycmVjdCB2YWx1ZSBmb3IgY2hlY2tib3hlcy5cblx0XHRpZiAoICRzZXR0aW5nLmlzKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKSApIHtcblx0XHRcdHZhbHVlID0gJHNldHRpbmdbMF0uY2hlY2tlZDtcblx0XHR9XG5cblx0XHQvLyBVcGRhdGUgdGhlIGNvcnJlc3BvbmRpbmcgc2V0dGluZy5cblx0XHR0aGlzLm1vZGVsLnNldCggJHNldHRpbmcuZGF0YSgnc2V0dGluZycpLCB2YWx1ZSApO1xuXG5cdFx0Ly8gSWYgdGhlIHNldHRpbmcgaGFzIGEgY29ycmVzcG9uZGluZyB1c2VyIHNldHRpbmcsXG5cdFx0Ly8gdXBkYXRlIHRoYXQgYXMgd2VsbC5cblx0XHRpZiAoIHVzZXJTZXR0aW5nID0gJHNldHRpbmcuZGF0YSgndXNlclNldHRpbmcnKSApIHtcblx0XHRcdHdpbmRvdy5zZXRVc2VyU2V0dGluZyggdXNlclNldHRpbmcsIHZhbHVlICk7XG5cdFx0fVxuXHR9LFxuXG5cdHVwZGF0ZUNoYW5nZXM6IGZ1bmN0aW9uKCBtb2RlbCApIHtcblx0XHRpZiAoIG1vZGVsLmhhc0NoYW5nZWQoKSApIHtcblx0XHRcdF8oIG1vZGVsLmNoYW5nZWQgKS5jaGFpbigpLmtleXMoKS5lYWNoKCB0aGlzLnVwZGF0ZSwgdGhpcyApO1xuXHRcdH1cblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0dGluZ3M7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuU2V0dGluZ3MuQXR0YWNobWVudERpc3BsYXlcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LlNldHRpbmdzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBTZXR0aW5ncyA9IHdwLm1lZGlhLnZpZXcuU2V0dGluZ3MsXG5cdEF0dGFjaG1lbnREaXNwbGF5O1xuXG5BdHRhY2htZW50RGlzcGxheSA9IFNldHRpbmdzLmV4dGVuZCh7XG5cdGNsYXNzTmFtZTogJ2F0dGFjaG1lbnQtZGlzcGxheS1zZXR0aW5ncycsXG5cdHRlbXBsYXRlOiAgd3AudGVtcGxhdGUoJ2F0dGFjaG1lbnQtZGlzcGxheS1zZXR0aW5ncycpLFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBhdHRhY2htZW50ID0gdGhpcy5vcHRpb25zLmF0dGFjaG1lbnQ7XG5cblx0XHRfLmRlZmF1bHRzKCB0aGlzLm9wdGlvbnMsIHtcblx0XHRcdHVzZXJTZXR0aW5nczogZmFsc2Vcblx0XHR9KTtcblx0XHQvLyBDYWxsICdpbml0aWFsaXplJyBkaXJlY3RseSBvbiB0aGUgcGFyZW50IGNsYXNzLlxuXHRcdFNldHRpbmdzLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR0aGlzLmxpc3RlblRvKCB0aGlzLm1vZGVsLCAnY2hhbmdlOmxpbmsnLCB0aGlzLnVwZGF0ZUxpbmtUbyApO1xuXG5cdFx0aWYgKCBhdHRhY2htZW50ICkge1xuXHRcdFx0YXR0YWNobWVudC5vbiggJ2NoYW5nZTp1cGxvYWRpbmcnLCB0aGlzLnJlbmRlciwgdGhpcyApO1xuXHRcdH1cblx0fSxcblxuXHRkaXNwb3NlOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgYXR0YWNobWVudCA9IHRoaXMub3B0aW9ucy5hdHRhY2htZW50O1xuXHRcdGlmICggYXR0YWNobWVudCApIHtcblx0XHRcdGF0dGFjaG1lbnQub2ZmKCBudWxsLCBudWxsLCB0aGlzICk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIGNhbGwgJ2Rpc3Bvc2UnIGRpcmVjdGx5IG9uIHRoZSBwYXJlbnQgY2xhc3Ncblx0XHQgKi9cblx0XHRTZXR0aW5ncy5wcm90b3R5cGUuZGlzcG9zZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH0sXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEudmlldy5BdHRhY2htZW50RGlzcGxheX0gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmdcblx0ICovXG5cdHJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGF0dGFjaG1lbnQgPSB0aGlzLm9wdGlvbnMuYXR0YWNobWVudDtcblx0XHRpZiAoIGF0dGFjaG1lbnQgKSB7XG5cdFx0XHRfLmV4dGVuZCggdGhpcy5vcHRpb25zLCB7XG5cdFx0XHRcdHNpemVzOiBhdHRhY2htZW50LmdldCgnc2l6ZXMnKSxcblx0XHRcdFx0dHlwZTogIGF0dGFjaG1lbnQuZ2V0KCd0eXBlJylcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQgKiBjYWxsICdyZW5kZXInIGRpcmVjdGx5IG9uIHRoZSBwYXJlbnQgY2xhc3Ncblx0XHQgKi9cblx0XHRTZXR0aW5ncy5wcm90b3R5cGUucmVuZGVyLmNhbGwoIHRoaXMgKTtcblx0XHR0aGlzLnVwZGF0ZUxpbmtUbygpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHVwZGF0ZUxpbmtUbzogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGxpbmtUbyA9IHRoaXMubW9kZWwuZ2V0KCdsaW5rJyksXG5cdFx0XHQkaW5wdXQgPSB0aGlzLiQoJy5saW5rLXRvLWN1c3RvbScpLFxuXHRcdFx0YXR0YWNobWVudCA9IHRoaXMub3B0aW9ucy5hdHRhY2htZW50O1xuXG5cdFx0aWYgKCAnbm9uZScgPT09IGxpbmtUbyB8fCAnZW1iZWQnID09PSBsaW5rVG8gfHwgKCAhIGF0dGFjaG1lbnQgJiYgJ2N1c3RvbScgIT09IGxpbmtUbyApICkge1xuXHRcdFx0JGlucHV0LmFkZENsYXNzKCAnaGlkZGVuJyApO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggYXR0YWNobWVudCApIHtcblx0XHRcdGlmICggJ3Bvc3QnID09PSBsaW5rVG8gKSB7XG5cdFx0XHRcdCRpbnB1dC52YWwoIGF0dGFjaG1lbnQuZ2V0KCdsaW5rJykgKTtcblx0XHRcdH0gZWxzZSBpZiAoICdmaWxlJyA9PT0gbGlua1RvICkge1xuXHRcdFx0XHQkaW5wdXQudmFsKCBhdHRhY2htZW50LmdldCgndXJsJykgKTtcblx0XHRcdH0gZWxzZSBpZiAoICEgdGhpcy5tb2RlbC5nZXQoJ2xpbmtVcmwnKSApIHtcblx0XHRcdFx0JGlucHV0LnZhbCgnaHR0cDovLycpO1xuXHRcdFx0fVxuXG5cdFx0XHQkaW5wdXQucHJvcCggJ3JlYWRvbmx5JywgJ2N1c3RvbScgIT09IGxpbmtUbyApO1xuXHRcdH1cblxuXHRcdCRpbnB1dC5yZW1vdmVDbGFzcyggJ2hpZGRlbicgKTtcblxuXHRcdC8vIElmIHRoZSBpbnB1dCBpcyB2aXNpYmxlLCBmb2N1cyBhbmQgc2VsZWN0IGl0cyBjb250ZW50cy5cblx0XHRpZiAoICEgd3AubWVkaWEuaXNUb3VjaERldmljZSAmJiAkaW5wdXQuaXMoJzp2aXNpYmxlJykgKSB7XG5cdFx0XHQkaW5wdXQuZm9jdXMoKVswXS5zZWxlY3QoKTtcblx0XHR9XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF0dGFjaG1lbnREaXNwbGF5O1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LlNldHRpbmdzLkdhbGxlcnlcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LlNldHRpbmdzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBHYWxsZXJ5ID0gd3AubWVkaWEudmlldy5TZXR0aW5ncy5leHRlbmQoe1xuXHRjbGFzc05hbWU6ICdjb2xsZWN0aW9uLXNldHRpbmdzIGdhbGxlcnktc2V0dGluZ3MnLFxuXHR0ZW1wbGF0ZTogIHdwLnRlbXBsYXRlKCdnYWxsZXJ5LXNldHRpbmdzJylcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEdhbGxlcnk7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuU2V0dGluZ3MuUGxheWxpc3RcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LlNldHRpbmdzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBQbGF5bGlzdCA9IHdwLm1lZGlhLnZpZXcuU2V0dGluZ3MuZXh0ZW5kKHtcblx0Y2xhc3NOYW1lOiAnY29sbGVjdGlvbi1zZXR0aW5ncyBwbGF5bGlzdC1zZXR0aW5ncycsXG5cdHRlbXBsYXRlOiAgd3AudGVtcGxhdGUoJ3BsYXlsaXN0LXNldHRpbmdzJylcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBsYXlsaXN0O1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LlNpZGViYXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LlByaW9yaXR5TGlzdFxuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgU2lkZWJhciA9IHdwLm1lZGlhLnZpZXcuUHJpb3JpdHlMaXN0LmV4dGVuZCh7XG5cdGNsYXNzTmFtZTogJ21lZGlhLXNpZGViYXInXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBTaWRlYmFyO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LlNpdGVJY29uQ3JvcHBlclxuICpcbiAqIFVzZXMgdGhlIGltZ0FyZWFTZWxlY3QgcGx1Z2luIHRvIGFsbG93IGEgdXNlciB0byBjcm9wIGEgU2l0ZSBJY29uLlxuICpcbiAqIFRha2VzIGltZ0FyZWFTZWxlY3Qgb3B0aW9ucyBmcm9tXG4gKiB3cC5jdXN0b21pemUuU2l0ZUljb25Db250cm9sLmNhbGN1bGF0ZUltYWdlU2VsZWN0T3B0aW9ucy5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LkNyb3BwZXJcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIFZpZXcgPSB3cC5tZWRpYS52aWV3LFxuXHRTaXRlSWNvbkNyb3BwZXI7XG5cblNpdGVJY29uQ3JvcHBlciA9IFZpZXcuQ3JvcHBlci5leHRlbmQoe1xuXHRjbGFzc05hbWU6ICdjcm9wLWNvbnRlbnQgc2l0ZS1pY29uJyxcblxuXHRyZWFkeTogZnVuY3Rpb24gKCkge1xuXHRcdFZpZXcuQ3JvcHBlci5wcm90b3R5cGUucmVhZHkuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXG5cdFx0dGhpcy4kKCAnLmNyb3AtaW1hZ2UnICkub24oICdsb2FkJywgXy5iaW5kKCB0aGlzLmFkZFNpZGViYXIsIHRoaXMgKSApO1xuXHR9LFxuXG5cdGFkZFNpZGViYXI6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuc2lkZWJhciA9IG5ldyB3cC5tZWRpYS52aWV3LlNpZGViYXIoe1xuXHRcdFx0Y29udHJvbGxlcjogdGhpcy5jb250cm9sbGVyXG5cdFx0fSk7XG5cblx0XHR0aGlzLnNpZGViYXIuc2V0KCAncHJldmlldycsIG5ldyB3cC5tZWRpYS52aWV3LlNpdGVJY29uUHJldmlldyh7XG5cdFx0XHRjb250cm9sbGVyOiB0aGlzLmNvbnRyb2xsZXIsXG5cdFx0XHRhdHRhY2htZW50OiB0aGlzLm9wdGlvbnMuYXR0YWNobWVudFxuXHRcdH0pICk7XG5cblx0XHR0aGlzLmNvbnRyb2xsZXIuY3JvcHBlclZpZXcudmlld3MuYWRkKCB0aGlzLnNpZGViYXIgKTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2l0ZUljb25Dcm9wcGVyO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LlNpdGVJY29uUHJldmlld1xuICpcbiAqIFNob3dzIGEgcHJldmlldyBvZiB0aGUgU2l0ZSBJY29uIGFzIGEgZmF2aWNvbiBhbmQgYXBwIGljb24gd2hpbGUgY3JvcHBpbmcuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBWaWV3ID0gd3AubWVkaWEuVmlldyxcblx0JCA9IGpRdWVyeSxcblx0U2l0ZUljb25QcmV2aWV3O1xuXG5TaXRlSWNvblByZXZpZXcgPSBWaWV3LmV4dGVuZCh7XG5cdGNsYXNzTmFtZTogJ3NpdGUtaWNvbi1wcmV2aWV3Jyxcblx0dGVtcGxhdGU6IHdwLnRlbXBsYXRlKCAnc2l0ZS1pY29uLXByZXZpZXcnICksXG5cblx0cmVhZHk6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuY29udHJvbGxlci5pbWdTZWxlY3Quc2V0T3B0aW9ucyh7XG5cdFx0XHRvbkluaXQ6IHRoaXMudXBkYXRlUHJldmlldyxcblx0XHRcdG9uU2VsZWN0Q2hhbmdlOiB0aGlzLnVwZGF0ZVByZXZpZXdcblx0XHR9KTtcblx0fSxcblxuXHRwcmVwYXJlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dXJsOiB0aGlzLm9wdGlvbnMuYXR0YWNobWVudC5nZXQoICd1cmwnIClcblx0XHR9O1xuXHR9LFxuXG5cdHVwZGF0ZVByZXZpZXc6IGZ1bmN0aW9uKCBpbWcsIGNvb3JkcyApIHtcblx0XHR2YXIgcnggPSA2NCAvIGNvb3Jkcy53aWR0aCxcblx0XHRcdHJ5ID0gNjQgLyBjb29yZHMuaGVpZ2h0LFxuXHRcdFx0cHJldmlld19yeCA9IDE2IC8gY29vcmRzLndpZHRoLFxuXHRcdFx0cHJldmlld19yeSA9IDE2IC8gY29vcmRzLmhlaWdodDtcblxuXHRcdCQoICcjcHJldmlldy1hcHAtaWNvbicgKS5jc3Moe1xuXHRcdFx0d2lkdGg6IE1hdGgucm91bmQocnggKiB0aGlzLmltYWdlV2lkdGggKSArICdweCcsXG5cdFx0XHRoZWlnaHQ6IE1hdGgucm91bmQocnkgKiB0aGlzLmltYWdlSGVpZ2h0ICkgKyAncHgnLFxuXHRcdFx0bWFyZ2luTGVmdDogJy0nICsgTWF0aC5yb3VuZChyeCAqIGNvb3Jkcy54MSkgKyAncHgnLFxuXHRcdFx0bWFyZ2luVG9wOiAnLScgKyBNYXRoLnJvdW5kKHJ5ICogY29vcmRzLnkxKSArICdweCdcblx0XHR9KTtcblxuXHRcdCQoICcjcHJldmlldy1mYXZpY29uJyApLmNzcyh7XG5cdFx0XHR3aWR0aDogTWF0aC5yb3VuZCggcHJldmlld19yeCAqIHRoaXMuaW1hZ2VXaWR0aCApICsgJ3B4Jyxcblx0XHRcdGhlaWdodDogTWF0aC5yb3VuZCggcHJldmlld19yeSAqIHRoaXMuaW1hZ2VIZWlnaHQgKSArICdweCcsXG5cdFx0XHRtYXJnaW5MZWZ0OiAnLScgKyBNYXRoLnJvdW5kKCBwcmV2aWV3X3J4ICogY29vcmRzLngxICkgKyAncHgnLFxuXHRcdFx0bWFyZ2luVG9wOiAnLScgKyBNYXRoLmZsb29yKCBwcmV2aWV3X3J5KiBjb29yZHMueTEgKSArICdweCdcblx0XHR9KTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2l0ZUljb25QcmV2aWV3O1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LlNwaW5uZXJcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIFNwaW5uZXIgPSB3cC5tZWRpYS5WaWV3LmV4dGVuZCh7XG5cdHRhZ05hbWU6ICAgJ3NwYW4nLFxuXHRjbGFzc05hbWU6ICdzcGlubmVyJyxcblx0c3Bpbm5lclRpbWVvdXQ6IGZhbHNlLFxuXHRkZWxheTogNDAwLFxuXG5cdHNob3c6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggISB0aGlzLnNwaW5uZXJUaW1lb3V0ICkge1xuXHRcdFx0dGhpcy5zcGlubmVyVGltZW91dCA9IF8uZGVsYXkoZnVuY3Rpb24oICRlbCApIHtcblx0XHRcdFx0JGVsLmFkZENsYXNzKCAnaXMtYWN0aXZlJyApO1xuXHRcdFx0fSwgdGhpcy5kZWxheSwgdGhpcy4kZWwgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRoaWRlOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLiRlbC5yZW1vdmVDbGFzcyggJ2lzLWFjdGl2ZScgKTtcblx0XHR0aGlzLnNwaW5uZXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0KCB0aGlzLnNwaW5uZXJUaW1lb3V0ICk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3Bpbm5lcjtcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5Ub29sYmFyXG4gKlxuICogQSB0b29sYmFyIHdoaWNoIGNvbnNpc3RzIG9mIGEgcHJpbWFyeSBhbmQgYSBzZWNvbmRhcnkgc2VjdGlvbi4gRWFjaCBzZWN0aW9uc1xuICogY2FuIGJlIGZpbGxlZCB3aXRoIHZpZXdzLlxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgVmlldyA9IHdwLm1lZGlhLlZpZXcsXG5cdFRvb2xiYXI7XG5cblRvb2xiYXIgPSBWaWV3LmV4dGVuZCh7XG5cdHRhZ05hbWU6ICAgJ2RpdicsXG5cdGNsYXNzTmFtZTogJ21lZGlhLXRvb2xiYXInLFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBzdGF0ZSA9IHRoaXMuY29udHJvbGxlci5zdGF0ZSgpLFxuXHRcdFx0c2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb24gPSBzdGF0ZS5nZXQoJ3NlbGVjdGlvbicpLFxuXHRcdFx0bGlicmFyeSA9IHRoaXMubGlicmFyeSA9IHN0YXRlLmdldCgnbGlicmFyeScpO1xuXG5cdFx0dGhpcy5fdmlld3MgPSB7fTtcblxuXHRcdC8vIFRoZSB0b29sYmFyIGlzIGNvbXBvc2VkIG9mIHR3byBgUHJpb3JpdHlMaXN0YCB2aWV3cy5cblx0XHR0aGlzLnByaW1hcnkgICA9IG5ldyB3cC5tZWRpYS52aWV3LlByaW9yaXR5TGlzdCgpO1xuXHRcdHRoaXMuc2Vjb25kYXJ5ID0gbmV3IHdwLm1lZGlhLnZpZXcuUHJpb3JpdHlMaXN0KCk7XG5cdFx0dGhpcy5wcmltYXJ5LiRlbC5hZGRDbGFzcygnbWVkaWEtdG9vbGJhci1wcmltYXJ5IHNlYXJjaC1mb3JtJyk7XG5cdFx0dGhpcy5zZWNvbmRhcnkuJGVsLmFkZENsYXNzKCdtZWRpYS10b29sYmFyLXNlY29uZGFyeScpO1xuXG5cdFx0dGhpcy52aWV3cy5zZXQoWyB0aGlzLnNlY29uZGFyeSwgdGhpcy5wcmltYXJ5IF0pO1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuaXRlbXMgKSB7XG5cdFx0XHR0aGlzLnNldCggdGhpcy5vcHRpb25zLml0ZW1zLCB7IHNpbGVudDogdHJ1ZSB9KTtcblx0XHR9XG5cblx0XHRpZiAoICEgdGhpcy5vcHRpb25zLnNpbGVudCApIHtcblx0XHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWxlY3Rpb24gKSB7XG5cdFx0XHRzZWxlY3Rpb24ub24oICdhZGQgcmVtb3ZlIHJlc2V0JywgdGhpcy5yZWZyZXNoLCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBsaWJyYXJ5ICkge1xuXHRcdFx0bGlicmFyeS5vbiggJ2FkZCByZW1vdmUgcmVzZXQnLCB0aGlzLnJlZnJlc2gsIHRoaXMgKTtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEudmlldy5Ub29sYmFyfSBSZXR1cm5zIGl0c2VmIHRvIGFsbG93IGNoYWluaW5nXG5cdCAqL1xuXHRkaXNwb3NlOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoIHRoaXMuc2VsZWN0aW9uICkge1xuXHRcdFx0dGhpcy5zZWxlY3Rpb24ub2ZmKCBudWxsLCBudWxsLCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmxpYnJhcnkgKSB7XG5cdFx0XHR0aGlzLmxpYnJhcnkub2ZmKCBudWxsLCBudWxsLCB0aGlzICk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIGNhbGwgJ2Rpc3Bvc2UnIGRpcmVjdGx5IG9uIHRoZSBwYXJlbnQgY2xhc3Ncblx0XHQgKi9cblx0XHRyZXR1cm4gVmlldy5wcm90b3R5cGUuZGlzcG9zZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH0sXG5cblx0cmVhZHk6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMucmVmcmVzaCgpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWRcblx0ICogQHBhcmFtIHtCYWNrYm9uZS5WaWV3fE9iamVjdH0gdmlld1xuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS52aWV3LlRvb2xiYXJ9IFJldHVybnMgaXRzZWxmIHRvIGFsbG93IGNoYWluaW5nXG5cdCAqL1xuXHRzZXQ6IGZ1bmN0aW9uKCBpZCwgdmlldywgb3B0aW9ucyApIHtcblx0XHR2YXIgbGlzdDtcblx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRcdC8vIEFjY2VwdCBhbiBvYmplY3Qgd2l0aCBhbiBgaWRgIDogYHZpZXdgIG1hcHBpbmcuXG5cdFx0aWYgKCBfLmlzT2JqZWN0KCBpZCApICkge1xuXHRcdFx0Xy5lYWNoKCBpZCwgZnVuY3Rpb24oIHZpZXcsIGlkICkge1xuXHRcdFx0XHR0aGlzLnNldCggaWQsIHZpZXcsIHsgc2lsZW50OiB0cnVlIH0pO1xuXHRcdFx0fSwgdGhpcyApO1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICggISAoIHZpZXcgaW5zdGFuY2VvZiBCYWNrYm9uZS5WaWV3ICkgKSB7XG5cdFx0XHRcdHZpZXcuY2xhc3NlcyA9IFsgJ21lZGlhLWJ1dHRvbi0nICsgaWQgXS5jb25jYXQoIHZpZXcuY2xhc3NlcyB8fCBbXSApO1xuXHRcdFx0XHR2aWV3ID0gbmV3IHdwLm1lZGlhLnZpZXcuQnV0dG9uKCB2aWV3ICkucmVuZGVyKCk7XG5cdFx0XHR9XG5cblx0XHRcdHZpZXcuY29udHJvbGxlciA9IHZpZXcuY29udHJvbGxlciB8fCB0aGlzLmNvbnRyb2xsZXI7XG5cblx0XHRcdHRoaXMuX3ZpZXdzWyBpZCBdID0gdmlldztcblxuXHRcdFx0bGlzdCA9IHZpZXcub3B0aW9ucy5wcmlvcml0eSA8IDAgPyAnc2Vjb25kYXJ5JyA6ICdwcmltYXJ5Jztcblx0XHRcdHRoaXNbIGxpc3QgXS5zZXQoIGlkLCB2aWV3LCBvcHRpb25zICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhIG9wdGlvbnMuc2lsZW50ICkge1xuXHRcdFx0dGhpcy5yZWZyZXNoKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWRcblx0ICogQHJldHVybnMge3dwLm1lZGlhLnZpZXcuQnV0dG9ufVxuXHQgKi9cblx0Z2V0OiBmdW5jdGlvbiggaWQgKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3ZpZXdzWyBpZCBdO1xuXHR9LFxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS52aWV3LlRvb2xiYXJ9IFJldHVybnMgaXRzZWxmIHRvIGFsbG93IGNoYWluaW5nXG5cdCAqL1xuXHR1bnNldDogZnVuY3Rpb24oIGlkLCBvcHRpb25zICkge1xuXHRcdGRlbGV0ZSB0aGlzLl92aWV3c1sgaWQgXTtcblx0XHR0aGlzLnByaW1hcnkudW5zZXQoIGlkLCBvcHRpb25zICk7XG5cdFx0dGhpcy5zZWNvbmRhcnkudW5zZXQoIGlkLCBvcHRpb25zICk7XG5cblx0XHRpZiAoICEgb3B0aW9ucyB8fCAhIG9wdGlvbnMuc2lsZW50ICkge1xuXHRcdFx0dGhpcy5yZWZyZXNoKCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlZnJlc2g6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBzdGF0ZSA9IHRoaXMuY29udHJvbGxlci5zdGF0ZSgpLFxuXHRcdFx0bGlicmFyeSA9IHN0YXRlLmdldCgnbGlicmFyeScpLFxuXHRcdFx0c2VsZWN0aW9uID0gc3RhdGUuZ2V0KCdzZWxlY3Rpb24nKTtcblxuXHRcdF8uZWFjaCggdGhpcy5fdmlld3MsIGZ1bmN0aW9uKCBidXR0b24gKSB7XG5cdFx0XHRpZiAoICEgYnV0dG9uLm1vZGVsIHx8ICEgYnV0dG9uLm9wdGlvbnMgfHwgISBidXR0b24ub3B0aW9ucy5yZXF1aXJlcyApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgcmVxdWlyZXMgPSBidXR0b24ub3B0aW9ucy5yZXF1aXJlcyxcblx0XHRcdFx0ZGlzYWJsZWQgPSBmYWxzZTtcblxuXHRcdFx0Ly8gUHJldmVudCBpbnNlcnRpb24gb2YgYXR0YWNobWVudHMgaWYgYW55IG9mIHRoZW0gYXJlIHN0aWxsIHVwbG9hZGluZ1xuXHRcdFx0ZGlzYWJsZWQgPSBfLnNvbWUoIHNlbGVjdGlvbi5tb2RlbHMsIGZ1bmN0aW9uKCBhdHRhY2htZW50ICkge1xuXHRcdFx0XHRyZXR1cm4gYXR0YWNobWVudC5nZXQoJ3VwbG9hZGluZycpID09PSB0cnVlO1xuXHRcdFx0fSk7XG5cblx0XHRcdGlmICggcmVxdWlyZXMuc2VsZWN0aW9uICYmIHNlbGVjdGlvbiAmJiAhIHNlbGVjdGlvbi5sZW5ndGggKSB7XG5cdFx0XHRcdGRpc2FibGVkID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAoIHJlcXVpcmVzLmxpYnJhcnkgJiYgbGlicmFyeSAmJiAhIGxpYnJhcnkubGVuZ3RoICkge1xuXHRcdFx0XHRkaXNhYmxlZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRidXR0b24ubW9kZWwuc2V0KCAnZGlzYWJsZWQnLCBkaXNhYmxlZCApO1xuXHRcdH0pO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBUb29sYmFyO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LlRvb2xiYXIuRW1iZWRcbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS52aWV3LlRvb2xiYXIuU2VsZWN0XG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5Ub29sYmFyXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBTZWxlY3QgPSB3cC5tZWRpYS52aWV3LlRvb2xiYXIuU2VsZWN0LFxuXHRsMTBuID0gd3AubWVkaWEudmlldy5sMTBuLFxuXHRFbWJlZDtcblxuRW1iZWQgPSBTZWxlY3QuZXh0ZW5kKHtcblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0Xy5kZWZhdWx0cyggdGhpcy5vcHRpb25zLCB7XG5cdFx0XHR0ZXh0OiBsMTBuLmluc2VydEludG9Qb3N0LFxuXHRcdFx0cmVxdWlyZXM6IGZhbHNlXG5cdFx0fSk7XG5cdFx0Ly8gQ2FsbCAnaW5pdGlhbGl6ZScgZGlyZWN0bHkgb24gdGhlIHBhcmVudCBjbGFzcy5cblx0XHRTZWxlY3QucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9LFxuXG5cdHJlZnJlc2g6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB1cmwgPSB0aGlzLmNvbnRyb2xsZXIuc3RhdGUoKS5wcm9wcy5nZXQoJ3VybCcpO1xuXHRcdHRoaXMuZ2V0KCdzZWxlY3QnKS5tb2RlbC5zZXQoICdkaXNhYmxlZCcsICEgdXJsIHx8IHVybCA9PT0gJ2h0dHA6Ly8nICk7XG5cdFx0LyoqXG5cdFx0ICogY2FsbCAncmVmcmVzaCcgZGlyZWN0bHkgb24gdGhlIHBhcmVudCBjbGFzc1xuXHRcdCAqL1xuXHRcdFNlbGVjdC5wcm90b3R5cGUucmVmcmVzaC5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEVtYmVkO1xuIiwiLyoqXG4gKiB3cC5tZWRpYS52aWV3LlRvb2xiYXIuU2VsZWN0XG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEudmlldy5Ub29sYmFyXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBUb29sYmFyID0gd3AubWVkaWEudmlldy5Ub29sYmFyLFxuXHRsMTBuID0gd3AubWVkaWEudmlldy5sMTBuLFxuXHRTZWxlY3Q7XG5cblNlbGVjdCA9IFRvb2xiYXIuZXh0ZW5kKHtcblx0aW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cblx0XHRfLmJpbmRBbGwoIHRoaXMsICdjbGlja1NlbGVjdCcgKTtcblxuXHRcdF8uZGVmYXVsdHMoIG9wdGlvbnMsIHtcblx0XHRcdGV2ZW50OiAnc2VsZWN0Jyxcblx0XHRcdHN0YXRlOiBmYWxzZSxcblx0XHRcdHJlc2V0OiB0cnVlLFxuXHRcdFx0Y2xvc2U6IHRydWUsXG5cdFx0XHR0ZXh0OiAgbDEwbi5zZWxlY3QsXG5cblx0XHRcdC8vIERvZXMgdGhlIGJ1dHRvbiByZWx5IG9uIHRoZSBzZWxlY3Rpb24/XG5cdFx0XHRyZXF1aXJlczoge1xuXHRcdFx0XHRzZWxlY3Rpb246IHRydWVcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdG9wdGlvbnMuaXRlbXMgPSBfLmRlZmF1bHRzKCBvcHRpb25zLml0ZW1zIHx8IHt9LCB7XG5cdFx0XHRzZWxlY3Q6IHtcblx0XHRcdFx0c3R5bGU6ICAgICdwcmltYXJ5Jyxcblx0XHRcdFx0dGV4dDogICAgIG9wdGlvbnMudGV4dCxcblx0XHRcdFx0cHJpb3JpdHk6IDgwLFxuXHRcdFx0XHRjbGljazogICAgdGhpcy5jbGlja1NlbGVjdCxcblx0XHRcdFx0cmVxdWlyZXM6IG9wdGlvbnMucmVxdWlyZXNcblx0XHRcdH1cblx0XHR9KTtcblx0XHQvLyBDYWxsICdpbml0aWFsaXplJyBkaXJlY3RseSBvbiB0aGUgcGFyZW50IGNsYXNzLlxuXHRcdFRvb2xiYXIucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9LFxuXG5cdGNsaWNrU2VsZWN0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyxcblx0XHRcdGNvbnRyb2xsZXIgPSB0aGlzLmNvbnRyb2xsZXI7XG5cblx0XHRpZiAoIG9wdGlvbnMuY2xvc2UgKSB7XG5cdFx0XHRjb250cm9sbGVyLmNsb3NlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHRpb25zLmV2ZW50ICkge1xuXHRcdFx0Y29udHJvbGxlci5zdGF0ZSgpLnRyaWdnZXIoIG9wdGlvbnMuZXZlbnQgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdGlvbnMuc3RhdGUgKSB7XG5cdFx0XHRjb250cm9sbGVyLnNldFN0YXRlKCBvcHRpb25zLnN0YXRlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHRpb25zLnJlc2V0ICkge1xuXHRcdFx0Y29udHJvbGxlci5yZXNldCgpO1xuXHRcdH1cblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2VsZWN0O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgZHJvcHpvbmUgb24gV1AgZWRpdG9yIGluc3RhbmNlcyAoZWxlbWVudHMgd2l0aCAud3AtZWRpdG9yLXdyYXApXG4gKiBhbmQgcmVsYXlzIGRyYWcnbidkcm9wcGVkIGZpbGVzIHRvIGEgbWVkaWEgd29ya2Zsb3cuXG4gKlxuICogd3AubWVkaWEudmlldy5FZGl0b3JVcGxvYWRlclxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgVmlldyA9IHdwLm1lZGlhLlZpZXcsXG5cdGwxMG4gPSB3cC5tZWRpYS52aWV3LmwxMG4sXG5cdCQgPSBqUXVlcnksXG5cdEVkaXRvclVwbG9hZGVyO1xuXG5FZGl0b3JVcGxvYWRlciA9IFZpZXcuZXh0ZW5kKHtcblx0dGFnTmFtZTogICAnZGl2Jyxcblx0Y2xhc3NOYW1lOiAndXBsb2FkZXItZWRpdG9yJyxcblx0dGVtcGxhdGU6ICB3cC50ZW1wbGF0ZSggJ3VwbG9hZGVyLWVkaXRvcicgKSxcblxuXHRsb2NhbERyYWc6IGZhbHNlLFxuXHRvdmVyQ29udGFpbmVyOiBmYWxzZSxcblx0b3ZlckRyb3B6b25lOiBmYWxzZSxcblx0ZHJhZ2dpbmdGaWxlOiBudWxsLFxuXG5cdC8qKlxuXHQgKiBCaW5kIGRyYWcnbidkcm9wIGV2ZW50cyB0byBjYWxsYmFja3MuXG5cdCAqL1xuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XG5cblx0XHQvLyBCYWlsIGlmIG5vdCBlbmFibGVkIG9yIFVBIGRvZXMgbm90IHN1cHBvcnQgZHJhZyduJ2Ryb3Agb3IgRmlsZSBBUEkuXG5cdFx0aWYgKCAhIHdpbmRvdy50aW55TUNFUHJlSW5pdCB8fCAhIHdpbmRvdy50aW55TUNFUHJlSW5pdC5kcmFnRHJvcFVwbG9hZCB8fCAhIHRoaXMuYnJvd3NlclN1cHBvcnQoKSApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdHRoaXMuJGRvY3VtZW50ID0gJChkb2N1bWVudCk7XG5cdFx0dGhpcy5kcm9wem9uZXMgPSBbXTtcblx0XHR0aGlzLmZpbGVzID0gW107XG5cblx0XHR0aGlzLiRkb2N1bWVudC5vbiggJ2Ryb3AnLCAnLnVwbG9hZGVyLWVkaXRvcicsIF8uYmluZCggdGhpcy5kcm9wLCB0aGlzICkgKTtcblx0XHR0aGlzLiRkb2N1bWVudC5vbiggJ2RyYWdvdmVyJywgJy51cGxvYWRlci1lZGl0b3InLCBfLmJpbmQoIHRoaXMuZHJvcHpvbmVEcmFnb3ZlciwgdGhpcyApICk7XG5cdFx0dGhpcy4kZG9jdW1lbnQub24oICdkcmFnbGVhdmUnLCAnLnVwbG9hZGVyLWVkaXRvcicsIF8uYmluZCggdGhpcy5kcm9wem9uZURyYWdsZWF2ZSwgdGhpcyApICk7XG5cdFx0dGhpcy4kZG9jdW1lbnQub24oICdjbGljaycsICcudXBsb2FkZXItZWRpdG9yJywgXy5iaW5kKCB0aGlzLmNsaWNrLCB0aGlzICkgKTtcblxuXHRcdHRoaXMuJGRvY3VtZW50Lm9uKCAnZHJhZ292ZXInLCBfLmJpbmQoIHRoaXMuY29udGFpbmVyRHJhZ292ZXIsIHRoaXMgKSApO1xuXHRcdHRoaXMuJGRvY3VtZW50Lm9uKCAnZHJhZ2xlYXZlJywgXy5iaW5kKCB0aGlzLmNvbnRhaW5lckRyYWdsZWF2ZSwgdGhpcyApICk7XG5cblx0XHR0aGlzLiRkb2N1bWVudC5vbiggJ2RyYWdzdGFydCBkcmFnZW5kIGRyb3AnLCBfLmJpbmQoIGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHRoaXMubG9jYWxEcmFnID0gZXZlbnQudHlwZSA9PT0gJ2RyYWdzdGFydCc7XG5cblx0XHRcdGlmICggZXZlbnQudHlwZSA9PT0gJ2Ryb3AnICkge1xuXHRcdFx0XHR0aGlzLmNvbnRhaW5lckRyYWdsZWF2ZSgpO1xuXHRcdFx0fVxuXHRcdH0sIHRoaXMgKSApO1xuXG5cdFx0dGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrIGJyb3dzZXIgc3VwcG9ydCBmb3IgZHJhZyduJ2Ryb3AuXG5cdCAqXG5cdCAqIEByZXR1cm4gQm9vbGVhblxuXHQgKi9cblx0YnJvd3NlclN1cHBvcnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBzdXBwb3J0cyA9IGZhbHNlLCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuXHRcdHN1cHBvcnRzID0gKCAnZHJhZ2dhYmxlJyBpbiBkaXYgKSB8fCAoICdvbmRyYWdzdGFydCcgaW4gZGl2ICYmICdvbmRyb3AnIGluIGRpdiApO1xuXHRcdHN1cHBvcnRzID0gc3VwcG9ydHMgJiYgISEgKCB3aW5kb3cuRmlsZSAmJiB3aW5kb3cuRmlsZUxpc3QgJiYgd2luZG93LkZpbGVSZWFkZXIgKTtcblx0XHRyZXR1cm4gc3VwcG9ydHM7XG5cdH0sXG5cblx0aXNEcmFnZ2luZ0ZpbGU6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRpZiAoIHRoaXMuZHJhZ2dpbmdGaWxlICE9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZHJhZ2dpbmdGaWxlO1xuXHRcdH1cblxuXHRcdGlmICggXy5pc1VuZGVmaW5lZCggZXZlbnQub3JpZ2luYWxFdmVudCApIHx8IF8uaXNVbmRlZmluZWQoIGV2ZW50Lm9yaWdpbmFsRXZlbnQuZGF0YVRyYW5zZmVyICkgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5kcmFnZ2luZ0ZpbGUgPSBfLmluZGV4T2YoIGV2ZW50Lm9yaWdpbmFsRXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLCAnRmlsZXMnICkgPiAtMSAmJlxuXHRcdFx0Xy5pbmRleE9mKCBldmVudC5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2Zlci50eXBlcywgJ3RleHQvcGxhaW4nICkgPT09IC0xO1xuXG5cdFx0cmV0dXJuIHRoaXMuZHJhZ2dpbmdGaWxlO1xuXHR9LFxuXG5cdHJlZnJlc2g6IGZ1bmN0aW9uKCBlICkge1xuXHRcdHZhciBkcm9wem9uZV9pZDtcblx0XHRmb3IgKCBkcm9wem9uZV9pZCBpbiB0aGlzLmRyb3B6b25lcyApIHtcblx0XHRcdC8vIEhpZGUgdGhlIGRyb3B6b25lcyBvbmx5IGlmIGRyYWdnaW5nIGhhcyBsZWZ0IHRoZSBzY3JlZW4uXG5cdFx0XHR0aGlzLmRyb3B6b25lc1sgZHJvcHpvbmVfaWQgXS50b2dnbGUoIHRoaXMub3ZlckNvbnRhaW5lciB8fCB0aGlzLm92ZXJEcm9wem9uZSApO1xuXHRcdH1cblxuXHRcdGlmICggISBfLmlzVW5kZWZpbmVkKCBlICkgKSB7XG5cdFx0XHQkKCBlLnRhcmdldCApLmNsb3Nlc3QoICcudXBsb2FkZXItZWRpdG9yJyApLnRvZ2dsZUNsYXNzKCAnZHJvcHBhYmxlJywgdGhpcy5vdmVyRHJvcHpvbmUgKTtcblx0XHR9XG5cblx0XHRpZiAoICEgdGhpcy5vdmVyQ29udGFpbmVyICYmICEgdGhpcy5vdmVyRHJvcHpvbmUgKSB7XG5cdFx0XHR0aGlzLmRyYWdnaW5nRmlsZSA9IG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVuZGVyOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoICEgdGhpcy5pbml0aWFsaXplZCApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdFZpZXcucHJvdG90eXBlLnJlbmRlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0JCggJy53cC1lZGl0b3Itd3JhcCcgKS5lYWNoKCBfLmJpbmQoIHRoaXMuYXR0YWNoLCB0aGlzICkgKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRhdHRhY2g6IGZ1bmN0aW9uKCBpbmRleCwgZWRpdG9yICkge1xuXHRcdC8vIEF0dGFjaCBhIGRyb3B6b25lIHRvIGFuIGVkaXRvci5cblx0XHR2YXIgZHJvcHpvbmUgPSB0aGlzLiRlbC5jbG9uZSgpO1xuXHRcdHRoaXMuZHJvcHpvbmVzLnB1c2goIGRyb3B6b25lICk7XG5cdFx0JCggZWRpdG9yICkuYXBwZW5kKCBkcm9wem9uZSApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBXaGVuIGEgZmlsZSBpcyBkcm9wcGVkIG9uIHRoZSBlZGl0b3IgdXBsb2FkZXIsIG9wZW4gdXAgYW4gZWRpdG9yIG1lZGlhIHdvcmtmbG93XG5cdCAqIGFuZCB1cGxvYWQgdGhlIGZpbGUgaW1tZWRpYXRlbHkuXG5cdCAqXG5cdCAqIEBwYXJhbSAge2pRdWVyeS5FdmVudH0gZXZlbnQgVGhlICdkcm9wJyBldmVudC5cblx0ICovXG5cdGRyb3A6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgJHdyYXAsIHVwbG9hZFZpZXc7XG5cblx0XHR0aGlzLmNvbnRhaW5lckRyYWdsZWF2ZSggZXZlbnQgKTtcblx0XHR0aGlzLmRyb3B6b25lRHJhZ2xlYXZlKCBldmVudCApO1xuXG5cdFx0dGhpcy5maWxlcyA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzO1xuXHRcdGlmICggdGhpcy5maWxlcy5sZW5ndGggPCAxICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgYWN0aXZlIGVkaXRvciB0byB0aGUgZHJvcCB0YXJnZXQuXG5cdFx0JHdyYXAgPSAkKCBldmVudC50YXJnZXQgKS5wYXJlbnRzKCAnLndwLWVkaXRvci13cmFwJyApO1xuXHRcdGlmICggJHdyYXAubGVuZ3RoID4gMCAmJiAkd3JhcFswXS5pZCApIHtcblx0XHRcdHdpbmRvdy53cEFjdGl2ZUVkaXRvciA9ICR3cmFwWzBdLmlkLnNsaWNlKCAzLCAtNSApO1xuXHRcdH1cblxuXHRcdGlmICggISB0aGlzLndvcmtmbG93ICkge1xuXHRcdFx0dGhpcy53b3JrZmxvdyA9IHdwLm1lZGlhLmVkaXRvci5vcGVuKCB3aW5kb3cud3BBY3RpdmVFZGl0b3IsIHtcblx0XHRcdFx0ZnJhbWU6ICAgICdwb3N0Jyxcblx0XHRcdFx0c3RhdGU6ICAgICdpbnNlcnQnLFxuXHRcdFx0XHR0aXRsZTogICAgbDEwbi5hZGRNZWRpYSxcblx0XHRcdFx0bXVsdGlwbGU6IHRydWVcblx0XHRcdH0pO1xuXG5cdFx0XHR1cGxvYWRWaWV3ID0gdGhpcy53b3JrZmxvdy51cGxvYWRlcjtcblxuXHRcdFx0aWYgKCB1cGxvYWRWaWV3LnVwbG9hZGVyICYmIHVwbG9hZFZpZXcudXBsb2FkZXIucmVhZHkgKSB7XG5cdFx0XHRcdHRoaXMuYWRkRmlsZXMuYXBwbHkoIHRoaXMgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMud29ya2Zsb3cub24oICd1cGxvYWRlcjpyZWFkeScsIHRoaXMuYWRkRmlsZXMsIHRoaXMgKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy53b3JrZmxvdy5zdGF0ZSgpLnJlc2V0KCk7XG5cdFx0XHR0aGlzLmFkZEZpbGVzLmFwcGx5KCB0aGlzICk7XG5cdFx0XHR0aGlzLndvcmtmbG93Lm9wZW4oKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEFkZCB0aGUgZmlsZXMgdG8gdGhlIHVwbG9hZGVyLlxuXHQgKi9cblx0YWRkRmlsZXM6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggdGhpcy5maWxlcy5sZW5ndGggKSB7XG5cdFx0XHR0aGlzLndvcmtmbG93LnVwbG9hZGVyLnVwbG9hZGVyLnVwbG9hZGVyLmFkZEZpbGUoIF8udG9BcnJheSggdGhpcy5maWxlcyApICk7XG5cdFx0XHR0aGlzLmZpbGVzID0gW107XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNvbnRhaW5lckRyYWdvdmVyOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0aWYgKCB0aGlzLmxvY2FsRHJhZyB8fCAhIHRoaXMuaXNEcmFnZ2luZ0ZpbGUoIGV2ZW50ICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5vdmVyQ29udGFpbmVyID0gdHJ1ZTtcblx0XHR0aGlzLnJlZnJlc2goKTtcblx0fSxcblxuXHRjb250YWluZXJEcmFnbGVhdmU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMub3ZlckNvbnRhaW5lciA9IGZhbHNlO1xuXG5cdFx0Ly8gVGhyb3R0bGUgZHJhZ2xlYXZlIGJlY2F1c2UgaXQncyBjYWxsZWQgd2hlbiBib3VuY2luZyBmcm9tIHNvbWUgZWxlbWVudHMgdG8gb3RoZXJzLlxuXHRcdF8uZGVsYXkoIF8uYmluZCggdGhpcy5yZWZyZXNoLCB0aGlzICksIDUwICk7XG5cdH0sXG5cblx0ZHJvcHpvbmVEcmFnb3ZlcjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdGlmICggdGhpcy5sb2NhbERyYWcgfHwgISB0aGlzLmlzRHJhZ2dpbmdGaWxlKCBldmVudCApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMub3ZlckRyb3B6b25lID0gdHJ1ZTtcblx0XHR0aGlzLnJlZnJlc2goIGV2ZW50ICk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdGRyb3B6b25lRHJhZ2xlYXZlOiBmdW5jdGlvbiggZSApIHtcblx0XHR0aGlzLm92ZXJEcm9wem9uZSA9IGZhbHNlO1xuXHRcdF8uZGVsYXkoIF8uYmluZCggdGhpcy5yZWZyZXNoLCB0aGlzLCBlICksIDUwICk7XG5cdH0sXG5cblx0Y2xpY2s6IGZ1bmN0aW9uKCBlICkge1xuXHRcdC8vIEluIHRoZSByYXJlIGNhc2Ugd2hlcmUgdGhlIGRyb3B6b25lIGdldHMgc3R1Y2ssIGhpZGUgaXQgb24gY2xpY2suXG5cdFx0dGhpcy5jb250YWluZXJEcmFnbGVhdmUoIGUgKTtcblx0XHR0aGlzLmRyb3B6b25lRHJhZ2xlYXZlKCBlICk7XG5cdFx0dGhpcy5sb2NhbERyYWcgPSBmYWxzZTtcblx0fVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gRWRpdG9yVXBsb2FkZXI7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuVXBsb2FkZXJJbmxpbmVcbiAqXG4gKiBUaGUgaW5saW5lIHVwbG9hZGVyIHRoYXQgc2hvd3MgdXAgaW4gdGhlICdVcGxvYWQgRmlsZXMnIHRhYi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5tZWRpYS5WaWV3XG4gKiBAYXVnbWVudHMgd3AuQmFja2JvbmUuVmlld1xuICogQGF1Z21lbnRzIEJhY2tib25lLlZpZXdcbiAqL1xudmFyIFZpZXcgPSB3cC5tZWRpYS5WaWV3LFxuXHRVcGxvYWRlcklubGluZTtcblxuVXBsb2FkZXJJbmxpbmUgPSBWaWV3LmV4dGVuZCh7XG5cdHRhZ05hbWU6ICAgJ2RpdicsXG5cdGNsYXNzTmFtZTogJ3VwbG9hZGVyLWlubGluZScsXG5cdHRlbXBsYXRlOiAgd3AudGVtcGxhdGUoJ3VwbG9hZGVyLWlubGluZScpLFxuXG5cdGV2ZW50czoge1xuXHRcdCdjbGljayAuY2xvc2UnOiAnaGlkZSdcblx0fSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHRfLmRlZmF1bHRzKCB0aGlzLm9wdGlvbnMsIHtcblx0XHRcdG1lc3NhZ2U6ICcnLFxuXHRcdFx0c3RhdHVzOiAgdHJ1ZSxcblx0XHRcdGNhbkNsb3NlOiBmYWxzZVxuXHRcdH0pO1xuXG5cdFx0aWYgKCAhIHRoaXMub3B0aW9ucy4kYnJvd3NlciAmJiB0aGlzLmNvbnRyb2xsZXIudXBsb2FkZXIgKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMuJGJyb3dzZXIgPSB0aGlzLmNvbnRyb2xsZXIudXBsb2FkZXIuJGJyb3dzZXI7XG5cdFx0fVxuXG5cdFx0aWYgKCBfLmlzVW5kZWZpbmVkKCB0aGlzLm9wdGlvbnMucG9zdElkICkgKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMucG9zdElkID0gd3AubWVkaWEudmlldy5zZXR0aW5ncy5wb3N0LmlkO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5vcHRpb25zLnN0YXR1cyApIHtcblx0XHRcdHRoaXMudmlld3Muc2V0KCAnLnVwbG9hZC1pbmxpbmUtc3RhdHVzJywgbmV3IHdwLm1lZGlhLnZpZXcuVXBsb2FkZXJTdGF0dXMoe1xuXHRcdFx0XHRjb250cm9sbGVyOiB0aGlzLmNvbnRyb2xsZXJcblx0XHRcdH0pICk7XG5cdFx0fVxuXHR9LFxuXG5cdHByZXBhcmU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBzdWdnZXN0ZWRXaWR0aCA9IHRoaXMuY29udHJvbGxlci5zdGF0ZSgpLmdldCgnc3VnZ2VzdGVkV2lkdGgnKSxcblx0XHRcdHN1Z2dlc3RlZEhlaWdodCA9IHRoaXMuY29udHJvbGxlci5zdGF0ZSgpLmdldCgnc3VnZ2VzdGVkSGVpZ2h0JyksXG5cdFx0XHRkYXRhID0ge307XG5cblx0XHRkYXRhLm1lc3NhZ2UgPSB0aGlzLm9wdGlvbnMubWVzc2FnZTtcblx0XHRkYXRhLmNhbkNsb3NlID0gdGhpcy5vcHRpb25zLmNhbkNsb3NlO1xuXG5cdFx0aWYgKCBzdWdnZXN0ZWRXaWR0aCAmJiBzdWdnZXN0ZWRIZWlnaHQgKSB7XG5cdFx0XHRkYXRhLnN1Z2dlc3RlZFdpZHRoID0gc3VnZ2VzdGVkV2lkdGg7XG5cdFx0XHRkYXRhLnN1Z2dlc3RlZEhlaWdodCA9IHN1Z2dlc3RlZEhlaWdodDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YTtcblx0fSxcblx0LyoqXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS52aWV3LlVwbG9hZGVySW5saW5lfSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0ZGlzcG9zZTogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCB0aGlzLmRpc3Bvc2luZyApIHtcblx0XHRcdC8qKlxuXHRcdFx0ICogY2FsbCAnZGlzcG9zZScgZGlyZWN0bHkgb24gdGhlIHBhcmVudCBjbGFzc1xuXHRcdFx0ICovXG5cdFx0XHRyZXR1cm4gVmlldy5wcm90b3R5cGUuZGlzcG9zZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fVxuXG5cdFx0Ly8gUnVuIHJlbW92ZSBvbiBgZGlzcG9zZWAsIHNvIHdlIGNhbiBiZSBzdXJlIHRvIHJlZnJlc2ggdGhlXG5cdFx0Ly8gdXBsb2FkZXIgd2l0aCBhIHZpZXctbGVzcyBET00uIFRyYWNrIHdoZXRoZXIgd2UncmUgZGlzcG9zaW5nXG5cdFx0Ly8gc28gd2UgZG9uJ3QgdHJpZ2dlciBhbiBpbmZpbml0ZSBsb29wLlxuXHRcdHRoaXMuZGlzcG9zaW5nID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcy5yZW1vdmUoKTtcblx0fSxcblx0LyoqXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS52aWV3LlVwbG9hZGVySW5saW5lfSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0cmVtb3ZlOiBmdW5jdGlvbigpIHtcblx0XHQvKipcblx0XHQgKiBjYWxsICdyZW1vdmUnIGRpcmVjdGx5IG9uIHRoZSBwYXJlbnQgY2xhc3Ncblx0XHQgKi9cblx0XHR2YXIgcmVzdWx0ID0gVmlldy5wcm90b3R5cGUucmVtb3ZlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblxuXHRcdF8uZGVmZXIoIF8uYmluZCggdGhpcy5yZWZyZXNoLCB0aGlzICkgKTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5cdHJlZnJlc2g6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciB1cGxvYWRlciA9IHRoaXMuY29udHJvbGxlci51cGxvYWRlcjtcblxuXHRcdGlmICggdXBsb2FkZXIgKSB7XG5cdFx0XHR1cGxvYWRlci5yZWZyZXNoKCk7XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogQHJldHVybnMge3dwLm1lZGlhLnZpZXcuVXBsb2FkZXJJbmxpbmV9XG5cdCAqL1xuXHRyZWFkeTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyICRicm93c2VyID0gdGhpcy5vcHRpb25zLiRicm93c2VyLFxuXHRcdFx0JHBsYWNlaG9sZGVyO1xuXG5cdFx0aWYgKCB0aGlzLmNvbnRyb2xsZXIudXBsb2FkZXIgKSB7XG5cdFx0XHQkcGxhY2Vob2xkZXIgPSB0aGlzLiQoJy5icm93c2VyJyk7XG5cblx0XHRcdC8vIENoZWNrIGlmIHdlJ3ZlIGFscmVhZHkgcmVwbGFjZWQgdGhlIHBsYWNlaG9sZGVyLlxuXHRcdFx0aWYgKCAkcGxhY2Vob2xkZXJbMF0gPT09ICRicm93c2VyWzBdICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdCRicm93c2VyLmRldGFjaCgpLnRleHQoICRwbGFjZWhvbGRlci50ZXh0KCkgKTtcblx0XHRcdCRicm93c2VyWzBdLmNsYXNzTmFtZSA9ICRwbGFjZWhvbGRlclswXS5jbGFzc05hbWU7XG5cdFx0XHQkcGxhY2Vob2xkZXIucmVwbGFjZVdpdGgoICRicm93c2VyLnNob3coKSApO1xuXHRcdH1cblxuXHRcdHRoaXMucmVmcmVzaCgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXHRzaG93OiBmdW5jdGlvbigpIHtcblx0XHR0aGlzLiRlbC5yZW1vdmVDbGFzcyggJ2hpZGRlbicgKTtcblx0fSxcblx0aGlkZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy4kZWwuYWRkQ2xhc3MoICdoaWRkZW4nICk7XG5cdH1cblxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gVXBsb2FkZXJJbmxpbmU7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuVXBsb2FkZXJTdGF0dXNFcnJvclxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgVXBsb2FkZXJTdGF0dXNFcnJvciA9IHdwLm1lZGlhLlZpZXcuZXh0ZW5kKHtcblx0Y2xhc3NOYW1lOiAndXBsb2FkLWVycm9yJyxcblx0dGVtcGxhdGU6ICB3cC50ZW1wbGF0ZSgndXBsb2FkZXItc3RhdHVzLWVycm9yJylcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVwbG9hZGVyU3RhdHVzRXJyb3I7XG4iLCIvKipcbiAqIHdwLm1lZGlhLnZpZXcuVXBsb2FkZXJTdGF0dXNcbiAqXG4gKiBBbiB1cGxvYWRlciBzdGF0dXMgZm9yIG9uLWdvaW5nIHVwbG9hZHMuXG4gKlxuICogQGNsYXNzXG4gKiBAYXVnbWVudHMgd3AubWVkaWEuVmlld1xuICogQGF1Z21lbnRzIHdwLkJhY2tib25lLlZpZXdcbiAqIEBhdWdtZW50cyBCYWNrYm9uZS5WaWV3XG4gKi9cbnZhciBWaWV3ID0gd3AubWVkaWEuVmlldyxcblx0VXBsb2FkZXJTdGF0dXM7XG5cblVwbG9hZGVyU3RhdHVzID0gVmlldy5leHRlbmQoe1xuXHRjbGFzc05hbWU6ICdtZWRpYS11cGxvYWRlci1zdGF0dXMnLFxuXHR0ZW1wbGF0ZTogIHdwLnRlbXBsYXRlKCd1cGxvYWRlci1zdGF0dXMnKSxcblxuXHRldmVudHM6IHtcblx0XHQnY2xpY2sgLnVwbG9hZC1kaXNtaXNzLWVycm9ycyc6ICdkaXNtaXNzJ1xuXHR9LFxuXG5cdGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMucXVldWUgPSB3cC5VcGxvYWRlci5xdWV1ZTtcblx0XHR0aGlzLnF1ZXVlLm9uKCAnYWRkIHJlbW92ZSByZXNldCcsIHRoaXMudmlzaWJpbGl0eSwgdGhpcyApO1xuXHRcdHRoaXMucXVldWUub24oICdhZGQgcmVtb3ZlIHJlc2V0IGNoYW5nZTpwZXJjZW50JywgdGhpcy5wcm9ncmVzcywgdGhpcyApO1xuXHRcdHRoaXMucXVldWUub24oICdhZGQgcmVtb3ZlIHJlc2V0IGNoYW5nZTp1cGxvYWRpbmcnLCB0aGlzLmluZm8sIHRoaXMgKTtcblxuXHRcdHRoaXMuZXJyb3JzID0gd3AuVXBsb2FkZXIuZXJyb3JzO1xuXHRcdHRoaXMuZXJyb3JzLnJlc2V0KCk7XG5cdFx0dGhpcy5lcnJvcnMub24oICdhZGQgcmVtb3ZlIHJlc2V0JywgdGhpcy52aXNpYmlsaXR5LCB0aGlzICk7XG5cdFx0dGhpcy5lcnJvcnMub24oICdhZGQnLCB0aGlzLmVycm9yLCB0aGlzICk7XG5cdH0sXG5cdC8qKlxuXHQgKiBAZ2xvYmFsIHdwLlVwbG9hZGVyXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS52aWV3LlVwbG9hZGVyU3RhdHVzfVxuXHQgKi9cblx0ZGlzcG9zZTogZnVuY3Rpb24oKSB7XG5cdFx0d3AuVXBsb2FkZXIucXVldWUub2ZmKCBudWxsLCBudWxsLCB0aGlzICk7XG5cdFx0LyoqXG5cdFx0ICogY2FsbCAnZGlzcG9zZScgZGlyZWN0bHkgb24gdGhlIHBhcmVudCBjbGFzc1xuXHRcdCAqL1xuXHRcdFZpZXcucHJvdG90eXBlLmRpc3Bvc2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHZpc2liaWxpdHk6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuJGVsLnRvZ2dsZUNsYXNzKCAndXBsb2FkaW5nJywgISEgdGhpcy5xdWV1ZS5sZW5ndGggKTtcblx0XHR0aGlzLiRlbC50b2dnbGVDbGFzcyggJ2Vycm9ycycsICEhIHRoaXMuZXJyb3JzLmxlbmd0aCApO1xuXHRcdHRoaXMuJGVsLnRvZ2dsZSggISEgdGhpcy5xdWV1ZS5sZW5ndGggfHwgISEgdGhpcy5lcnJvcnMubGVuZ3RoICk7XG5cdH0sXG5cblx0cmVhZHk6IGZ1bmN0aW9uKCkge1xuXHRcdF8uZWFjaCh7XG5cdFx0XHQnJGJhcic6ICAgICAgJy5tZWRpYS1wcm9ncmVzcy1iYXIgZGl2Jyxcblx0XHRcdCckaW5kZXgnOiAgICAnLnVwbG9hZC1pbmRleCcsXG5cdFx0XHQnJHRvdGFsJzogICAgJy51cGxvYWQtdG90YWwnLFxuXHRcdFx0JyRmaWxlbmFtZSc6ICcudXBsb2FkLWZpbGVuYW1lJ1xuXHRcdH0sIGZ1bmN0aW9uKCBzZWxlY3Rvciwga2V5ICkge1xuXHRcdFx0dGhpc1sga2V5IF0gPSB0aGlzLiQoIHNlbGVjdG9yICk7XG5cdFx0fSwgdGhpcyApO1xuXG5cdFx0dGhpcy52aXNpYmlsaXR5KCk7XG5cdFx0dGhpcy5wcm9ncmVzcygpO1xuXHRcdHRoaXMuaW5mbygpO1xuXHR9LFxuXG5cdHByb2dyZXNzOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgcXVldWUgPSB0aGlzLnF1ZXVlLFxuXHRcdFx0JGJhciA9IHRoaXMuJGJhcjtcblxuXHRcdGlmICggISAkYmFyIHx8ICEgcXVldWUubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdCRiYXIud2lkdGgoICggcXVldWUucmVkdWNlKCBmdW5jdGlvbiggbWVtbywgYXR0YWNobWVudCApIHtcblx0XHRcdGlmICggISBhdHRhY2htZW50LmdldCgndXBsb2FkaW5nJykgKSB7XG5cdFx0XHRcdHJldHVybiBtZW1vICsgMTAwO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgcGVyY2VudCA9IGF0dGFjaG1lbnQuZ2V0KCdwZXJjZW50Jyk7XG5cdFx0XHRyZXR1cm4gbWVtbyArICggXy5pc051bWJlciggcGVyY2VudCApID8gcGVyY2VudCA6IDEwMCApO1xuXHRcdH0sIDAgKSAvIHF1ZXVlLmxlbmd0aCApICsgJyUnICk7XG5cdH0sXG5cblx0aW5mbzogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHF1ZXVlID0gdGhpcy5xdWV1ZSxcblx0XHRcdGluZGV4ID0gMCwgYWN0aXZlO1xuXG5cdFx0aWYgKCAhIHF1ZXVlLmxlbmd0aCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRhY3RpdmUgPSB0aGlzLnF1ZXVlLmZpbmQoIGZ1bmN0aW9uKCBhdHRhY2htZW50LCBpICkge1xuXHRcdFx0aW5kZXggPSBpO1xuXHRcdFx0cmV0dXJuIGF0dGFjaG1lbnQuZ2V0KCd1cGxvYWRpbmcnKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuJGluZGV4LnRleHQoIGluZGV4ICsgMSApO1xuXHRcdHRoaXMuJHRvdGFsLnRleHQoIHF1ZXVlLmxlbmd0aCApO1xuXHRcdHRoaXMuJGZpbGVuYW1lLmh0bWwoIGFjdGl2ZSA/IHRoaXMuZmlsZW5hbWUoIGFjdGl2ZS5nZXQoJ2ZpbGVuYW1lJykgKSA6ICcnICk7XG5cdH0sXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWVcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGZpbGVuYW1lOiBmdW5jdGlvbiggZmlsZW5hbWUgKSB7XG5cdFx0cmV0dXJuIF8uZXNjYXBlKCBmaWxlbmFtZSApO1xuXHR9LFxuXHQvKipcblx0ICogQHBhcmFtIHtCYWNrYm9uZS5Nb2RlbH0gZXJyb3Jcblx0ICovXG5cdGVycm9yOiBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdFx0dGhpcy52aWV3cy5hZGQoICcudXBsb2FkLWVycm9ycycsIG5ldyB3cC5tZWRpYS52aWV3LlVwbG9hZGVyU3RhdHVzRXJyb3Ioe1xuXHRcdFx0ZmlsZW5hbWU6IHRoaXMuZmlsZW5hbWUoIGVycm9yLmdldCgnZmlsZScpLm5hbWUgKSxcblx0XHRcdG1lc3NhZ2U6ICBlcnJvci5nZXQoJ21lc3NhZ2UnKVxuXHRcdH0pLCB7IGF0OiAwIH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBAZ2xvYmFsIHdwLlVwbG9hZGVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBldmVudFxuXHQgKi9cblx0ZGlzbWlzczogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdHZhciBlcnJvcnMgPSB0aGlzLnZpZXdzLmdldCgnLnVwbG9hZC1lcnJvcnMnKTtcblxuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRpZiAoIGVycm9ycyApIHtcblx0XHRcdF8uaW52b2tlKCBlcnJvcnMsICdyZW1vdmUnICk7XG5cdFx0fVxuXHRcdHdwLlVwbG9hZGVyLmVycm9ycy5yZXNldCgpO1xuXHR9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBVcGxvYWRlclN0YXR1cztcbiIsIi8qKlxuICogd3AubWVkaWEudmlldy5VcGxvYWRlcldpbmRvd1xuICpcbiAqIEFuIHVwbG9hZGVyIHdpbmRvdyB0aGF0IGFsbG93cyBmb3IgZHJhZ2dpbmcgYW5kIGRyb3BwaW5nIG1lZGlhLlxuICpcbiAqIEBjbGFzc1xuICogQGF1Z21lbnRzIHdwLm1lZGlhLlZpZXdcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gICAgICAgICAgICAgICAgICAgT3B0aW9ucyBoYXNoIHBhc3NlZCB0byB0aGUgdmlldy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucy51cGxvYWRlcl0gICAgICAgICAgVXBsb2FkZXIgcHJvcGVydGllcy5cbiAqIEBwYXJhbSB7alF1ZXJ5fSBbb3B0aW9ucy51cGxvYWRlci5icm93c2VyXVxuICogQHBhcmFtIHtqUXVlcnl9IFtvcHRpb25zLnVwbG9hZGVyLmRyb3B6b25lXSBqUXVlcnkgY29sbGVjdGlvbiBvZiB0aGUgZHJvcHpvbmUuXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnMudXBsb2FkZXIucGFyYW1zXVxuICovXG52YXIgJCA9IGpRdWVyeSxcblx0VXBsb2FkZXJXaW5kb3c7XG5cblVwbG9hZGVyV2luZG93ID0gd3AubWVkaWEuVmlldy5leHRlbmQoe1xuXHR0YWdOYW1lOiAgICdkaXYnLFxuXHRjbGFzc05hbWU6ICd1cGxvYWRlci13aW5kb3cnLFxuXHR0ZW1wbGF0ZTogIHdwLnRlbXBsYXRlKCd1cGxvYWRlci13aW5kb3cnKSxcblxuXHRpbml0aWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgdXBsb2FkZXI7XG5cblx0XHR0aGlzLiRicm93c2VyID0gJCgnPGEgaHJlZj1cIiNcIiBjbGFzcz1cImJyb3dzZXJcIiAvPicpLmhpZGUoKS5hcHBlbmRUbygnYm9keScpO1xuXG5cdFx0dXBsb2FkZXIgPSB0aGlzLm9wdGlvbnMudXBsb2FkZXIgPSBfLmRlZmF1bHRzKCB0aGlzLm9wdGlvbnMudXBsb2FkZXIgfHwge30sIHtcblx0XHRcdGRyb3B6b25lOiAgdGhpcy4kZWwsXG5cdFx0XHRicm93c2VyOiAgIHRoaXMuJGJyb3dzZXIsXG5cdFx0XHRwYXJhbXM6ICAgIHt9XG5cdFx0fSk7XG5cblx0XHQvLyBFbnN1cmUgdGhlIGRyb3B6b25lIGlzIGEgalF1ZXJ5IGNvbGxlY3Rpb24uXG5cdFx0aWYgKCB1cGxvYWRlci5kcm9wem9uZSAmJiAhICh1cGxvYWRlci5kcm9wem9uZSBpbnN0YW5jZW9mICQpICkge1xuXHRcdFx0dXBsb2FkZXIuZHJvcHpvbmUgPSAkKCB1cGxvYWRlci5kcm9wem9uZSApO1xuXHRcdH1cblxuXHRcdHRoaXMuY29udHJvbGxlci5vbiggJ2FjdGl2YXRlJywgdGhpcy5yZWZyZXNoLCB0aGlzICk7XG5cblx0XHR0aGlzLmNvbnRyb2xsZXIub24oICdkZXRhY2gnLCBmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuJGJyb3dzZXIucmVtb3ZlKCk7XG5cdFx0fSwgdGhpcyApO1xuXHR9LFxuXG5cdHJlZnJlc2g6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggdGhpcy51cGxvYWRlciApIHtcblx0XHRcdHRoaXMudXBsb2FkZXIucmVmcmVzaCgpO1xuXHRcdH1cblx0fSxcblxuXHRyZWFkeTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHBvc3RJZCA9IHdwLm1lZGlhLnZpZXcuc2V0dGluZ3MucG9zdC5pZCxcblx0XHRcdGRyb3B6b25lO1xuXG5cdFx0Ly8gSWYgdGhlIHVwbG9hZGVyIGFscmVhZHkgZXhpc3RzLCBiYWlsLlxuXHRcdGlmICggdGhpcy51cGxvYWRlciApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIHBvc3RJZCApIHtcblx0XHRcdHRoaXMub3B0aW9ucy51cGxvYWRlci5wYXJhbXMucG9zdF9pZCA9IHBvc3RJZDtcblx0XHR9XG5cdFx0dGhpcy51cGxvYWRlciA9IG5ldyB3cC5VcGxvYWRlciggdGhpcy5vcHRpb25zLnVwbG9hZGVyICk7XG5cblx0XHRkcm9wem9uZSA9IHRoaXMudXBsb2FkZXIuZHJvcHpvbmU7XG5cdFx0ZHJvcHpvbmUub24oICdkcm9wem9uZTplbnRlcicsIF8uYmluZCggdGhpcy5zaG93LCB0aGlzICkgKTtcblx0XHRkcm9wem9uZS5vbiggJ2Ryb3B6b25lOmxlYXZlJywgXy5iaW5kKCB0aGlzLmhpZGUsIHRoaXMgKSApO1xuXG5cdFx0JCggdGhpcy51cGxvYWRlciApLm9uKCAndXBsb2FkZXI6cmVhZHknLCBfLmJpbmQoIHRoaXMuX3JlYWR5LCB0aGlzICkgKTtcblx0fSxcblxuXHRfcmVhZHk6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMuY29udHJvbGxlci50cmlnZ2VyKCAndXBsb2FkZXI6cmVhZHknICk7XG5cdH0sXG5cblx0c2hvdzogZnVuY3Rpb24oKSB7XG5cdFx0dmFyICRlbCA9IHRoaXMuJGVsLnNob3coKTtcblxuXHRcdC8vIEVuc3VyZSB0aGF0IHRoZSBhbmltYXRpb24gaXMgdHJpZ2dlcmVkIGJ5IHdhaXRpbmcgdW50aWxcblx0XHQvLyB0aGUgdHJhbnNwYXJlbnQgZWxlbWVudCBpcyBwYWludGVkIGludG8gdGhlIERPTS5cblx0XHRfLmRlZmVyKCBmdW5jdGlvbigpIHtcblx0XHRcdCRlbC5jc3MoeyBvcGFjaXR5OiAxIH0pO1xuXHRcdH0pO1xuXHR9LFxuXG5cdGhpZGU6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciAkZWwgPSB0aGlzLiRlbC5jc3MoeyBvcGFjaXR5OiAwIH0pO1xuXG5cdFx0d3AubWVkaWEudHJhbnNpdGlvbiggJGVsICkuZG9uZSggZnVuY3Rpb24oKSB7XG5cdFx0XHQvLyBUcmFuc2l0aW9uIGVuZCBldmVudHMgYXJlIHN1YmplY3QgdG8gcmFjZSBjb25kaXRpb25zLlxuXHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIHZhbHVlIGlzIHNldCBhcyBpbnRlbmRlZC5cblx0XHRcdGlmICggJzAnID09PSAkZWwuY3NzKCdvcGFjaXR5JykgKSB7XG5cdFx0XHRcdCRlbC5oaWRlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBodHRwczovL2NvcmUudHJhYy53b3JkcHJlc3Mub3JnL3RpY2tldC8yNzM0MVxuXHRcdF8uZGVsYXkoIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAnMCcgPT09ICRlbC5jc3MoJ29wYWNpdHknKSAmJiAkZWwuaXMoJzp2aXNpYmxlJykgKSB7XG5cdFx0XHRcdCRlbC5oaWRlKCk7XG5cdFx0XHR9XG5cdFx0fSwgNTAwICk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVwbG9hZGVyV2luZG93O1xuIiwiLyoqXG4gKiB3cC5tZWRpYS5WaWV3XG4gKlxuICogVGhlIGJhc2UgdmlldyBjbGFzcyBmb3IgbWVkaWEuXG4gKlxuICogVW5kZWxlZ2F0aW5nIGV2ZW50cywgcmVtb3ZpbmcgZXZlbnRzIGZyb20gdGhlIG1vZGVsLCBhbmRcbiAqIHJlbW92aW5nIGV2ZW50cyBmcm9tIHRoZSBjb250cm9sbGVyIG1pcnJvciB0aGUgY29kZSBmb3JcbiAqIGBCYWNrYm9uZS5WaWV3LmRpc3Bvc2VgIGluIEJhY2tib25lIDAuOS44IGRldmVsb3BtZW50LlxuICpcbiAqIFRoaXMgYmVoYXZpb3IgaGFzIHNpbmNlIGJlZW4gcmVtb3ZlZCwgYW5kIHNob3VsZCBub3QgYmUgdXNlZFxuICogb3V0c2lkZSBvZiB0aGUgbWVkaWEgbWFuYWdlci5cbiAqXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyB3cC5CYWNrYm9uZS5WaWV3XG4gKiBAYXVnbWVudHMgQmFja2JvbmUuVmlld1xuICovXG52YXIgVmlldyA9IHdwLkJhY2tib25lLlZpZXcuZXh0ZW5kKHtcblx0Y29uc3RydWN0b3I6IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHRcdGlmICggb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRyb2xsZXIgKSB7XG5cdFx0XHR0aGlzLmNvbnRyb2xsZXIgPSBvcHRpb25zLmNvbnRyb2xsZXI7XG5cdFx0fVxuXHRcdHdwLkJhY2tib25lLlZpZXcuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHR9LFxuXHQvKipcblx0ICogQHRvZG8gVGhlIGludGVybmFsIGNvbW1lbnQgbWVudGlvbnMgdGhpcyBtaWdodCBoYXZlIGJlZW4gYSBzdG9wLWdhcFxuXHQgKiAgICAgICBiZWZvcmUgQmFja2JvbmUgMC45LjggY2FtZSBvdXQuIEZpZ3VyZSBvdXQgaWYgQmFja2JvbmUgY29yZSB0YWtlc1xuXHQgKiAgICAgICBjYXJlIG9mIHRoaXMgaW4gQmFja2JvbmUuVmlldyBub3cuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHt3cC5tZWRpYS5WaWV3fSBSZXR1cm5zIGl0c2VsZiB0byBhbGxvdyBjaGFpbmluZ1xuXHQgKi9cblx0ZGlzcG9zZTogZnVuY3Rpb24oKSB7XG5cdFx0Ly8gVW5kZWxlZ2F0aW5nIGV2ZW50cywgcmVtb3ZpbmcgZXZlbnRzIGZyb20gdGhlIG1vZGVsLCBhbmRcblx0XHQvLyByZW1vdmluZyBldmVudHMgZnJvbSB0aGUgY29udHJvbGxlciBtaXJyb3IgdGhlIGNvZGUgZm9yXG5cdFx0Ly8gYEJhY2tib25lLlZpZXcuZGlzcG9zZWAgaW4gQmFja2JvbmUgMC45LjggZGV2ZWxvcG1lbnQuXG5cdFx0dGhpcy51bmRlbGVnYXRlRXZlbnRzKCk7XG5cblx0XHRpZiAoIHRoaXMubW9kZWwgJiYgdGhpcy5tb2RlbC5vZmYgKSB7XG5cdFx0XHR0aGlzLm1vZGVsLm9mZiggbnVsbCwgbnVsbCwgdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5jb2xsZWN0aW9uICYmIHRoaXMuY29sbGVjdGlvbi5vZmYgKSB7XG5cdFx0XHR0aGlzLmNvbGxlY3Rpb24ub2ZmKCBudWxsLCBudWxsLCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0Ly8gVW5iaW5kIGNvbnRyb2xsZXIgZXZlbnRzLlxuXHRcdGlmICggdGhpcy5jb250cm9sbGVyICYmIHRoaXMuY29udHJvbGxlci5vZmYgKSB7XG5cdFx0XHR0aGlzLmNvbnRyb2xsZXIub2ZmKCBudWxsLCBudWxsLCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7d3AubWVkaWEuVmlld30gUmV0dXJucyBpdHNlbGYgdG8gYWxsb3cgY2hhaW5pbmdcblx0ICovXG5cdHJlbW92ZTogZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy5kaXNwb3NlKCk7XG5cdFx0LyoqXG5cdFx0ICogY2FsbCAncmVtb3ZlJyBkaXJlY3RseSBvbiB0aGUgcGFyZW50IGNsYXNzXG5cdFx0ICovXG5cdFx0cmV0dXJuIHdwLkJhY2tib25lLlZpZXcucHJvdG90eXBlLnJlbW92ZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFZpZXc7XG4iXX0=