PageSourceSearch

https://adaptivedatanetworks.com/js/min/module_lightbox.js

js adaptivedatanetworks.com collected 2026-10-06 02:28:10 UTC 47,687 bytes, 15 lines download raw bytes

1/*!
2 * Lightbox v2.10.0
3 * by Lokesh Dhakar
4 *
5 * More info:
6 * http://lokeshdhakar.com/projects/lightbox2/
7 *
8 * Copyright 2007, 2018 Lokesh Dhakar
9 * Released under the MIT license
10 * https://github.com/lokesh/lightbox2/blob/master/LICENSE
11 *
12 * @preserve
13 */
14!function(t,i){"function"==typeof define&&define.amd?define(["jquery"],i):"object"==typeof exports?module.exports=i(require("jquery")):t.lightbox=i(t.jQuery)}(this,function(g){function t(t){this.album=[],this.currentImageIndex=void 0,this.init(),this.options=g.extend({},this.constructor.defaults),this.option(t)}return t.defaults={albumLabel:"Image %1 of %2",alwaysShowNavOnTouchDevices:!1,fadeDuration:600,fitImagesInViewport:!0,imageFadeDuration:600,positionFromTop:50,resizeDuration:700,showImageNumberLabel:!0,wrapAround:!1,disableScrolling:!1,sanitizeTitle:!1},t.prototype.option=function(t){g.extend(this.options,t)},t.prototype.imageCountLabel=function(t,i){return this.options.albumLabel.replace(/%1/g,t).replace(/%2/g,i)},t.prototype.init=function(){var t=this;g(document).ready(function(){t.enable(),t.build()})},t.prototype.enable=function(){var i=this;g("body").on("click","a[rel^=lightbox], area[rel^=lightbox], a[data-lightbox], area[data-lightbox]",function(t){return i.start(g(t.currentTarget)),!1})},t.prototype.build=function(){if(!(0<g("#lightbox").length)){var i=this;g('<div id="lightboxOverlay" class="lightboxOverlay"></div><div id="lightbox" class="lightbox"><div class="lb-outerContainer"><div class="lb-container"><img class="lb-image" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" /><div class="lb-nav"><a class="lb-prev" href="" ></a><a class="lb-next" href="" ></a></div><div class="lb-loader"><a class="lb-cancel"></a></div></div></div><div class="lb-dataContainer"><div class="lb-data"><div class="lb-details"><span class="lb-caption"></span><span class="lb-number"></span></div><div class="lb-closeContainer"><a class="lb-close"></a></div></div></div></div>').appendTo(g("body")),this.$lightbox=g("#lightbox"),this.$overlay=g("#lightboxOverlay"),this.$outerContainer=this.$lightbox.find(".lb-outerContainer"),this.$container=this.$lightbox.find(".lb-container"),this.$image=this.$lightbox.find(".lb-image"),this.$nav=this.$lightbox.find(".lb-nav"),this.containerPadding={top:parseInt(this.$container.css("padding-top"),10),right:parseInt(this.$container.css("padding-right"),10),bottom:parseInt(this.$container.css("padding-bottom"),10),left:parseInt(this.$container.css("padding-left"),10)},this.imageBorderWidth={top:parseInt(this.$image.css("border-top-width"),10),right:parseInt(this.$image.css("border-right-width"),10),bottom:parseInt(this.$image.css("border-bottom-width"),10),left:parseInt(this.$image.css("border-left-width"),10)},this.$overlay.hide().on("click",function(){return i.end(),!1}),this.$lightbox.hide().on("click",function(t){return"lightbox"===g(t.target).attr("id")&&i.end(),!1}),this.$outerContainer.on("click",function(t){return"lightbox"===g(t.target).attr("id")&&i.end(),!1}),this.$lightbox.find(".lb-prev").on("click",function(){return 0===i.currentImageIndex?i.changeImage(i.album.length-1):i.changeImage(i.currentImageIndex-1),!1}),this.$lightbox.find(".lb-next").on("click",function(){return i.currentImageIndex===i.album.length-1?i.changeImage(0):i.changeImage(i.currentImageIndex+1),!1}),this.$nav.on("mousedown",function(t){3===t.which&&(i.$nav.css("pointer-events","none"),i.$lightbox.one("contextmenu",function(){setTimeout(function(){this.$nav.css("pointer-events","auto")}.bind(i),0)}))}),this.$lightbox.find(".lb-loader, .lb-close").on("click",function(){return i.end(),!1})}},t.prototype.start=function(t){var i=this,e=g(window);e.on("resize",g.proxy(this.sizeOverlay,this)),g("select, object, embed").css({visibility:"hidden"}),this.sizeOverlay(),this.album=[];var n=0;function a(t){i.album.push({alt:t.attr("data-alt"),link:t.attr("href"),title:t.attr("data-title")||t.attr("title")})}var o,s=t.attr("data-lightbox");if(s){o=g(t.prop("tagName")+'[data-lightbox="'+s+'"]');for(var r=0;r<o.length;r=++r)a(g(o[r])),o[r]===t[0]&&(n=r)}else if("lightbox"===t.attr("rel"))a(t);else{o=g(t.prop("tagName")+'[rel="'+t.attr("rel")+'"]');for(var h=0;h<o.length;
14h=++h)a(g(o[h])),o[h]===t[0]&&(n=h)}var l=e.scrollTop()+this.options.positionFromTop,d=e.scrollLeft();this.$lightbox.css({top:l+"px",left:d+"px"}).fadeIn(this.options.fadeDuration),this.options.disableScrolling&&g("html").addClass("lb-disable-scrolling"),this.changeImage(n)},t.prototype.changeImage=function(s){var r=this;this.disableKeyboardNav();var h=this.$lightbox.find(".lb-image");this.$overlay.fadeIn(this.options.fadeDuration),g(".lb-loader").fadeIn("slow"),this.$lightbox.find(".lb-image, .lb-nav, .lb-prev, .lb-next, .lb-dataContainer, .lb-numbers, .lb-caption").hide(),this.$outerContainer.addClass("animating");var l=new Image;l.onload=function(){var t,i,e,n,a,o;h.attr({alt:r.album[s].alt,src:r.album[s].link}),g(l),h.width(l.width),h.height(l.height),r.options.fitImagesInViewport&&(o=g(window).width(),a=g(window).height(),n=o-r.containerPadding.left-r.containerPadding.right-r.imageBorderWidth.left-r.imageBorderWidth.right-20,e=a-r.containerPadding.top-r.containerPadding.bottom-r.imageBorderWidth.top-r.imageBorderWidth.bottom-120,r.options.maxWidth&&r.options.maxWidth<n&&(n=r.options.maxWidth),r.options.maxHeight&&r.options.maxHeight<n&&(e=r.options.maxHeight),(l.width>n||l.height>e)&&(l.width/n>l.height/e?(i=n,t=parseInt(l.height/(l.width/i),10)):(t=e,i=parseInt(l.width/(l.height/t),10)),h.width(i),h.height(t))),r.sizeContainer(h.width(),h.height())},l.src=this.album[s].link,this.currentImageIndex=s},t.prototype.sizeOverlay=function(){this.$overlay.width(g(document).width()).height(g(document).height())},t.prototype.sizeContainer=function(t,i){var e=this,n=this.$outerContainer.outerWidth(),a=this.$outerContainer.outerHeight(),o=t+this.containerPadding.left+this.containerPadding.right+this.imageBorderWidth.left+this.imageBorderWidth.right,s=i+this.containerPadding.top+this.containerPadding.bottom+this.imageBorderWidth.top+this.imageBorderWidth.bottom;function r(){e.$lightbox.find(".lb-dataContainer").width(o),e.$lightbox.find(".lb-prevLink").height(s),e.$lightbox.find(".lb-nextLink").height(s),e.showImage()}n!==o||a!==s?this.$outerContainer.animate({width:o,height:s},this.options.resizeDuration,"swing",function(){r()}):r()},t.prototype.showImage=function(){this.$lightbox.find(".lb-loader").stop(!0).hide(),this.$lightbox.find(".lb-image").fadeIn(this.options.imageFadeDuration),this.updateNav(),this.updateDetails(),this.preloadNeighboringImages(),this.enableKeyboardNav()},t.prototype.updateNav=function(){var t=!1;try{document.createEvent("TouchEvent"),t=!!this.options.alwaysShowNavOnTouchDevices}catch(t){}this.$lightbox.find(".lb-nav").show(),1<this.album.length&&(this.options.wrapAround?(t&&this.$lightbox.find(".lb-prev, .lb-next").css("opacity","1"),this.$lightbox.find(".lb-prev, .lb-next").show()):(0<this.currentImageIndex&&(this.$lightbox.find(".lb-prev").show(),t&&this.$lightbox.find(".lb-prev").css("opacity","1")),this.currentImageIndex<this.album.length-1&&(this.$lightbox.find(".lb-next").show(),t&&this.$lightbox.find(".lb-next").css("opacity","1"))))},t.prototype.updateDetails=function(){var t=this;if(void 0!==this.album[this.currentImageIndex].title&&""!==this.album[this.currentImageIndex].title){var i=this.$lightbox.find(".lb-caption");this.options.sanitizeTitle?i.text(this.album[this.currentImageIndex].title):i.html(this.album[this.currentImageIndex].title),i.fadeIn("fast").find("a").on("click",function(t){void 0!==g(this).attr("target")?window.open(g(this).attr("href"),g(this).attr("target")):location.href=g(this).attr("href")})}if(1<this.album.length&&this.options.showImageNumberLabel){var e=this.imageCountLabel(this.currentImageIndex+1,this.album.length);this.$lightbox.find(".lb-number").text(e).fadeIn("fast")}else this.$lightbox.find(".lb-number").hide();this.$outerContainer.removeClass("animating"),this.$lightbox.find(".lb-dataContainer").fadeIn(this.options.resizeDuration,function(){return t.sizeOverlay()})},t.prototype.preloadNeighboringImages=function(){this.album.length>this.currentImageIndex+1&&((new Image).src=this.album[this.currentImageIndex+1].link);0<this.currentImageIndex&&((new Image).src=this.album[this.currentImageIndex-1].link)},t.prototype.enableKeyboardNav=function(){g(document).on("keyup.keyboard",g.proxy(this.keyboardAction,this))},t.prototype.disableKeyboardNav=function(){g(document).off(".keyboard")},t.prototype.keyboardAction=function(t){var i=t.keyCode,e=String.fromCharCode(i).toLowerCase();27===i||e.match(/x|o|c/)?this.end():"p"===e||37===i?0!==this.currentImageIndex?this.changeImage(this.currentImageIndex-1):this.options.wrapAround&&1<this.album.length&&this.changeImage(this.album.length-1):"n"!==e&&39!==i||(this.currentImageIndex!==this.album.length-1?this.changeImage(this.currentImageIndex+1):this.options.wrapAround&&1<this.album.length&&this.changeImage(0))},t.prototype.end=function(){this.disableKeyboardNav(),g(window).off("resize",this.sizeOverlay),this.$lightbox.fadeOut(this.options.fadeDuration),this.$overlay.fadeOut(this.options.fadeDuration),g("select, object, embed").css({visibility:"visible"}),this.options.disableScrolling&&g("html").removeClass("lb-disable-scrolling")},new t});
15//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vZHVsZV9saWdodGJveC5qcyJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImRlZmluZSIsImFtZCIsImV4cG9ydHMiLCJtb2R1bGUiLCJyZXF1aXJlIiwibGlnaHRib3giLCJqUXVlcnkiLCJ0aGlzIiwiJCIsIkxpZ2h0Ym94Iiwib3B0aW9ucyIsImFsYnVtIiwiY3VycmVudEltYWdlSW5kZXgiLCJpbml0IiwiZXh0ZW5kIiwiY29uc3RydWN0b3IiLCJkZWZhdWx0cyIsIm9wdGlvbiIsImFsYnVtTGFiZWwiLCJhbHdheXNTaG93TmF2T25Ub3VjaERldmljZXMiLCJmYWRlRHVyYXRpb24iLCJmaXRJbWFnZXNJblZpZXdwb3J0IiwiaW1hZ2VGYWRlRHVyYXRpb24iLCJwb3NpdGlvbkZyb21Ub3AiLCJyZXNpemVEdXJhdGlvbiIsInNob3dJbWFnZU51bWJlckxhYmVsIiwid3JhcEFyb3VuZCIsImRpc2FibGVTY3JvbGxpbmciLCJzYW5pdGl6ZVRpdGxlIiwicHJvdG90eXBlIiwiaW1hZ2VDb3VudExhYmVsIiwiY3VycmVudEltYWdlTnVtIiwidG90YWxJbWFnZXMiLCJyZXBsYWNlIiwic2VsZiIsImRvY3VtZW50IiwicmVhZHkiLCJlbmFibGUiLCJidWlsZCIsIm9uIiwiZXZlbnQiLCJzdGFydCIsImN1cnJlbnRUYXJnZXQiLCJsZW5ndGgiLCJhcHBlbmRUbyIsIiRsaWdodGJveCIsIiRvdmVybGF5IiwiJG91dGVyQ29udGFpbmVyIiwiZmluZCIsIiRjb250YWluZXIiLCIkaW1hZ2UiLCIkbmF2IiwiY29udGFpbmVyUGFkZGluZyIsInRvcCIsInBhcnNlSW50IiwiY3NzIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0IiwiaW1hZ2VCb3JkZXJXaWR0aCIsImhpZGUiLCJlbmQiLCJ0YXJnZXQiLCJhdHRyIiwiY2hhbmdlSW1hZ2UiLCJ3aGljaCIsIm9uZSIsInNldFRpbWVvdXQiLCJiaW5kIiwiJGxpbmsiLCIkd2luZG93Iiwid2luZG93IiwicHJveHkiLCJzaXplT3ZlcmxheSIsInZpc2liaWxpdHkiLCJpbWFnZU51bWJlciIsImFkZFRvQWxidW0iLCJwdXNoIiwiYWx0IiwibGluayIsInRpdGxlIiwiJGxpbmtzIiwiZGF0YUxpZ2h0Ym94VmFsdWUiLCJwcm9wIiwiaSIsImoiLCJzY3JvbGxUb3AiLCJzY3JvbGxMZWZ0IiwiZmFkZUluIiwiYWRkQ2xhc3MiLCJkaXNhYmxlS2V5Ym9hcmROYXYiLCJwcmVsb2FkZXIiLCJJbWFnZSIsIm9ubG9hZCIsImltYWdlSGVpZ2h0IiwiaW1hZ2VXaWR0aCIsIm1heEltYWdlSGVpZ2h0IiwibWF4SW1hZ2VXaWR0aCIsIndpbmRvd0hlaWdodCIsIndpbmRvd1dpZHRoIiwic3JjIiwid2lkdGgiLCJoZWlnaHQiLCJtYXhXaWR0aCIsIm1heEhlaWdodCIsInNpemVDb250YWluZXIiLCJvbGRXaWR0aCIsIm91dGVyV2lkdGgiLCJvbGRIZWlnaHQiLCJvdXRlckhlaWdodCIsIm5ld1dpZHRoIiwibmV3SGVpZ2h0IiwicG9zdFJlc2l6ZSIsInNob3dJbWFnZSIsImFuaW1hdGUiLCJzdG9wIiwidXBkYXRlTmF2IiwidXBkYXRlRGV0YWlscyIsInByZWxvYWROZWlnaGJvcmluZ0ltYWdlcyIsImVuYWJsZUtleWJvYXJkTmF2IiwiYWx3YXlzU2hvd05hdiIsImNyZWF0ZUV2ZW50IiwiZSIsInNob3ciLCIkY2FwdGlvbiIsInRleHQiLCJodG1sIiwidW5kZWZpbmVkIiwib3BlbiIsImxvY2F0aW9uIiwiaHJlZiIsImxhYmVsVGV4dCIsInJlbW92ZUNsYXNzIiwia2V5Ym9hcmRBY3Rpb24iLCJvZmYiLCJrZXljb2RlIiwia2V5Q29kZSIsImtleSIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsInRvTG93ZXJDYXNlIiwibWF0Y2giLCJmYWRlT3V0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0NBZUMsU0FBVUEsRUFBTUMsR0FDUyxtQkFBWEMsUUFBeUJBLE9BQU9DLElBRXZDRCxPQUFPLENBQUMsVUFBV0QsR0FDTyxpQkFBWkcsUUFJ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FFMkIsVUFBVUksR0FBRyxpQkFBa0IvQixFQUFFZ0UsTUFBTWpFLEtBQUs4SCxlQUFnQjlILFFBR2hFRSxFQUFTb0IsVUFBVTZELG1CQUFxQixXQUN0Q2xGLEVBQUUyQixVQUFVbUcsSUFBSSxjQUdsQjdILEVBQVNvQixVQUFVd0csZUFBaUIsU0FBUzdGLEdBQzNDLElBSUkrRixFQUFVL0YsRUFBTWdHLFFBQ2hCQyxFQUFVQyxPQUFPQyxhQUFhSixHQUFTSyxjQUxsQixLQU1yQkwsR0FBMkJFLEVBQUlJLE1BQU0sU0FDdkN0SSxLQUFLc0QsTUFDWSxNQUFSNEUsR0FQYyxLQU9DRixFQUNPLElBQTNCaEksS0FBS0ssa0JBQ1BMLEtBQUt5RCxZQUFZekQsS0FBS0ssa0JBQW9CLEdBQ2pDTCxLQUFLRyxRQUFRZ0IsWUFBa0MsRUFBcEJuQixLQUFLSSxNQUFNZ0MsUUFDL0NwQyxLQUFLeUQsWUFBWXpELEtBQUtJLE1BQU1nQyxPQUFTLEdBRXRCLE1BQVI4RixHQVpjLEtBWUNGLElBQ3BCaEksS0FBS0ssb0JBQXNCTCxLQUFLSSxNQUFNZ0MsT0FBUyxFQUNqRHBDLEtBQUt5RCxZQUFZekQsS0FBS0ssa0JBQW9CLEdBQ2pDTCxLQUFLRyxRQUFRZ0IsWUFBa0MsRUFBcEJuQixLQUFLSSxNQUFNZ0MsUUFDL0NwQyxLQUFLeUQsWUFBWSxLQU12QnZELEVBQVNvQixVQUFV
15Z0MsSUFBTSxXQUN2QnRELEtBQUttRixxQkFDTGxGLEVBQUUrRCxRQUFRK0QsSUFBSSxTQUFVL0gsS0FBS2tFLGFBQzdCbEUsS0FBS3NDLFVBQVVpRyxRQUFRdkksS0FBS0csUUFBUVUsY0FDcENiLEtBQUt1QyxTQUFTZ0csUUFBUXZJLEtBQUtHLFFBQVFVLGNBQ25DWixFQUFFLHlCQUF5QitDLElBQUksQ0FDN0JtQixXQUFZLFlBRVZuRSxLQUFLRyxRQUFRaUIsa0JBQ2ZuQixFQUFFLFFBQVE0SCxZQUFZLHlCQUluQixJQUFJM0giLCJmaWxlIjoibW9kdWxlX2xpZ2h0Ym94LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBMaWdodGJveCB2Mi4xMC4wXG4gKiBieSBMb2tlc2ggRGhha2FyXG4gKlxuICogTW9yZSBpbmZvOlxuICogaHR0cDovL2xva2VzaGRoYWthci5jb20vcHJvamVjdHMvbGlnaHRib3gyL1xuICpcbiAqIENvcHlyaWdodCAyMDA3LCAyMDE4IExva2VzaCBEaGFrYXJcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cHM6Ly9naXRodWIuY29tL2xva2VzaC9saWdodGJveDIvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICpcbiAqIEBwcmVzZXJ2ZVxuICovXG5cbi8vIFVzZXMgTm9kZSwgQU1EIG9yIGJyb3dzZXIgZ2xvYmFscyB0byBjcmVhdGUgYSBtb2R1bGUuXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS5cbiAgICAgICAgZGVmaW5lKFsnanF1ZXJ5J10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vIE5vZGUuIERvZXMgbm90IHdvcmsgd2l0aCBzdHJpY3QgQ29tbW9uSlMsIGJ1dFxuICAgICAgICAvLyBvbmx5IENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBtb2R1bGUuZXhwb3J0cyxcbiAgICAgICAgLy8gbGlrZSBOb2RlLlxuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnanF1ZXJ5JykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEJyb3dzZXIgZ2xvYmFscyAocm9vdCBpcyB3aW5kb3cpXG4gICAgICAgIHJvb3QubGlnaHRib3ggPSBmYWN0b3J5KHJvb3QualF1ZXJ5KTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uICgkKSB7XG5cbiAgZnVuY3Rpb24gTGlnaHRib3gob3B0aW9ucykge1xuICAgIHRoaXMuYWxidW0gPSBbXTtcbiAgICB0aGlzLmN1cnJlbnRJbWFnZUluZGV4ID0gdm9pZCAwO1xuICAgIHRoaXMuaW5pdCgpO1xuXG4gICAgLy8gb3B0aW9uc1xuICAgIHRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCB0aGlzLmNvbnN0cnVjdG9yLmRlZmF1bHRzKTtcbiAgICB0aGlzLm9wdGlvbihvcHRpb25zKTtcbiAgfVxuXG4gIC8vIERlc2NyaXB0aW9ucyBvZiBhbGwgb3B0aW9ucyBhdmFpbGFibGUgb24gdGhlIGRlbW8gc2l0ZTpcbiAgLy8gaHR0cDovL2xva2VzaGRoYWthci5jb20vcHJvamVjdHMvbGlnaHRib3gyL2luZGV4Lmh0bWwjb3B0aW9uc1xuICBMaWdodGJveC5kZWZhdWx0cyA9IHtcbiAgICBhbGJ1bUxhYmVsOiAnSW1hZ2UgJTEgb2YgJTInLFxuICAgIGFsd2F5c1Nob3dOYXZPblRvdWNoRGV2aWNlczogZmFsc2UsXG4gICAgZmFkZUR1cmF0aW9uOiA2MDAsXG4gICAgZml0SW1hZ2VzSW5WaWV3cG9ydDogdHJ1ZSxcbiAgICBpbWFnZUZhZGVEdXJhdGlvbjogNjAwLFxuICAgIC8vIG1heFdpZHRoOiA4MDAsXG4gICAgLy8gbWF4SGVpZ2h0OiA2MDAsXG4gICAgcG9zaXRpb25Gcm9tVG9wOiA1MCxcbiAgICByZXNpemVEdXJhdGlvbjogNzAwLFxuICAgIHNob3dJbWFnZU51bWJlckxhYmVsOiB0cnVlLFxuICAgIHdyYXBBcm91bmQ6IGZhbHNlLFxuICAgIGRpc2FibGVTY3JvbGxpbmc6IGZhbHNlLFxuICAgIC8qXG4gICAgU2FuaXRpemUgVGl0bGVcbiAgICBJZiB0aGUgY2FwdGlvbiBkYXRhIGlzIHRydXN0ZWQsIGZvciBleGFtcGxlIHlvdSBhcmUgaGFyZGNvZGluZyBpdCBpbiwgdGhlbiBsZWF2ZSB0aGlzIHRvIGZhbHNlLlxuICAgIFRoaXMgd2lsbCBmcmVlIHlvdSB0byBhZGQgaHRtbCB0YWdzLCBzdWNoIGFzIGxpbmtzLCBpbiB0aGUgY2FwdGlvbi5cblxuICAgIElmIHRoZSBjYXB0aW9uIGRhdGEgaXMgdXNlciBzdWJtaXR0ZWQgb3IgZnJvbSBzb21lIG90aGVyIHVudHJ1c3RlZCBzb3VyY2UsIHRoZW4gc2V0IHRoaXMgdG8gdHJ1ZVxuICAgIHRvIHByZXZlbnQgeHNzIGFuZCBvdGhlciBpbmplY3Rpb24gYXR0YWNrcy5cbiAgICAgKi9cbiAgICBzYW5pdGl6ZVRpdGxlOiBmYWxzZVxuICB9O1xuXG4gIExpZ2h0Ym94LnByb3RvdHlwZS5vcHRpb24gPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgJC5leHRlbmQodGhpcy5vcHRpb25zLCBvcHRpb25zKTtcbiAgfTtcblxuICBMaWdodGJveC5wcm90b3R5cGUuaW1hZ2VDb3VudExhYmVsID0gZnVuY3Rpb24oY3VycmVudEltYWdlTnVtLCB0b3RhbEltYWdlcykge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYWxidW1MYWJlbC5yZXBsYWNlKC8lMS9nLCBjdXJyZW50SW1hZ2VOdW0pLnJlcGxhY2UoLyUyL2csIHRvdGFsSW1hZ2VzKTtcbiAgfTtcblxuICBMaWdodGJveC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAvLyBCb3RoIGVuYWJsZSBhbmQgYnVpbGQgbWV0aG9kcyByZXF1aXJlIHRoZSBib2R5IHRhZyB0byBiZSBpbiB0aGUgRE9NLlxuICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5lbmFibGUoKTtcbiAgICAgIHNlbGYuYnVpbGQoKTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBMb29wIHRocm91Z2ggYW5jaG9ycyBhbmQgYXJlYW1hcHMgbG9va2luZyBmb3IgZWl0aGVyIGRhdGEtbGlnaHRib3ggYXR0cmlidXRlcyBvciByZWwgYXR0cmlidXRlc1xuICAvLyB0aGF0IGNvbnRhaW4gJ2xpZ2h0Ym94Jy4gV2hlbiB0aGVzZSBhcmUgY2xpY2tlZCwgc3RhcnQgbGlnaHRib3guXG4gIExpZ2h0Ym94LnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgJCgnYm9keScpLm9uKCdjbGljaycsICdhW3JlbF49bGlnaHRib3hdLCBhcmVhW3JlbF49bGlnaHRib3hdLCBhW2RhdGEtbGlnaHRib3hdLCBhcmVhW2RhdGEtbGlnaHRib3hdJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIHNlbGYuc3RhcnQoJChldmVudC5jdXJyZW50VGFyZ2V0KSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gQnVpbGQgaHRtbCBmb3IgdGhlIGxpZ2h0Ym94IGFuZCB0aGUgb3ZlcmxheS5cbiAgLy8gQXR0YWNoIGV2ZW50IGhhbmRsZXJzIHRvIH
15RoZSBuZXcgRE9NIGVsZW1lbnRzLiBjbGljayBjbGljayBjbGlja1xuICBMaWdodGJveC5wcm90b3R5cGUuYnVpbGQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoJCgnI2xpZ2h0Ym94JykubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICQoJzxkaXYgaWQ9XCJsaWdodGJveE92ZXJsYXlcIiBjbGFzcz1cImxpZ2h0Ym94T3ZlcmxheVwiPjwvZGl2PjxkaXYgaWQ9XCJsaWdodGJveFwiIGNsYXNzPVwibGlnaHRib3hcIj48ZGl2IGNsYXNzPVwibGItb3V0ZXJDb250YWluZXJcIj48ZGl2IGNsYXNzPVwibGItY29udGFpbmVyXCI+PGltZyBjbGFzcz1cImxiLWltYWdlXCIgc3JjPVwiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFJQUFBUC8vL3dBQUFDSDVCQUVBQUFBQUxBQUFBQUFCQUFFQUFBSUNSQUVBT3c9PVwiIC8+PGRpdiBjbGFzcz1cImxiLW5hdlwiPjxhIGNsYXNzPVwibGItcHJldlwiIGhyZWY9XCJcIiA+PC9hPjxhIGNsYXNzPVwibGItbmV4dFwiIGhyZWY9XCJcIiA+PC9hPjwvZGl2PjxkaXYgY2xhc3M9XCJsYi1sb2FkZXJcIj48YSBjbGFzcz1cImxiLWNhbmNlbFwiPjwvYT48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPVwibGItZGF0YUNvbnRhaW5lclwiPjxkaXYgY2xhc3M9XCJsYi1kYXRhXCI+PGRpdiBjbGFzcz1cImxiLWRldGFpbHNcIj48c3BhbiBjbGFzcz1cImxiLWNhcHRpb25cIj48L3NwYW4+PHNwYW4gY2xhc3M9XCJsYi1udW1iZXJcIj48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz1cImxiLWNsb3NlQ29udGFpbmVyXCI+PGEgY2xhc3M9XCJsYi1jbG9zZVwiPjwvYT48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4nKS5hcHBlbmRUbygkKCdib2R5JykpO1xuXG4gICAgLy8gQ2FjaGUgalF1ZXJ5IG9iamVjdHNcbiAgICB0aGlzLiRsaWdodGJveCAgICAgICA9ICQoJyNsaWdodGJveCcpO1xuICAgIHRoaXMuJG92ZXJsYXkgICAgICAgID0gJCgnI2xpZ2h0Ym94T3ZlcmxheScpO1xuICAgIHRoaXMuJG91dGVyQ29udGFpbmVyID0gdGhpcy4kbGlnaHRib3guZmluZCgnLmxiLW91dGVyQ29udGFpbmVyJyk7XG4gICAgdGhpcy4kY29udGFpbmVyICAgICAgPSB0aGlzLiRsaWdodGJveC5maW5kKCcubGItY29udGFpbmVyJyk7XG4gICAgdGhpcy4kaW1hZ2UgICAgICAgICAgPSB0aGlzLiRsaWdodGJveC5maW5kKCcubGItaW1hZ2UnKTtcbiAgICB0aGlzLiRuYXYgICAgICAgICAgICA9IHRoaXMuJGxpZ2h0Ym94LmZpbmQoJy5sYi1uYXYnKTtcblxuICAgIC8vIFN0b3JlIGNzcyB2YWx1ZXMgZm9yIGZ1dHVyZSBsb29rdXBcbiAgICB0aGlzLmNvbnRhaW5lclBhZGRpbmcgPSB7XG4gICAgICB0b3A6IHBhcnNlSW50KHRoaXMuJGNvbnRhaW5lci5jc3MoJ3BhZGRpbmctdG9wJyksIDEwKSxcbiAgICAgIHJpZ2h0OiBwYXJzZUludCh0aGlzLiRjb250YWluZXIuY3NzKCdwYWRkaW5nLXJpZ2h0JyksIDEwKSxcbiAgICAgIGJvdHRvbTogcGFyc2VJbnQodGhpcy4kY29udGFpbmVyLmNzcygncGFkZGluZy1ib3R0b20nKSwgMTApLFxuICAgICAgbGVmdDogcGFyc2VJbnQodGhpcy4kY29udGFpbmVyLmNzcygncGFkZGluZy1sZWZ0JyksIDEwKVxuICAgIH07XG5cbiAgICB0aGlzLmltYWdlQm9yZGVyV2lkdGggPSB7XG4gICAgICB0b3A6IHBhcnNlSW50KHRoaXMuJGltYWdlLmNzcygnYm9yZGVyLXRvcC13aWR0aCcpLCAxMCksXG4gICAgICByaWdodDogcGFyc2VJbnQodGhpcy4kaW1hZ2UuY3NzKCdib3JkZXItcmlnaHQtd2lkdGgnKSwgMTApLFxuICAgICAgYm90dG9tOiBwYXJzZUludCh0aGlzLiRpbWFnZS5jc3MoJ2JvcmRlci1ib3R0b20td2lkdGgnKSwgMTApLFxuICAgICAgbGVmdDogcGFyc2VJbnQodGhpcy4kaW1hZ2UuY3NzKCdib3JkZXItbGVmdC13aWR0aCcpLCAxMClcbiAgICB9O1xuXG4gICAgLy8gQXR0YWNoIGV2ZW50IGhhbmRsZXJzIHRvIHRoZSBuZXdseSBtaW50ZWQgRE9NIGVsZW1lbnRzXG4gICAgdGhpcy4kb3ZlcmxheS5oaWRlKCkub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLmVuZCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kbGlnaHRib3guaGlkZSgpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICBpZiAoJChldmVudC50YXJnZXQpLmF0dHIoJ2lkJykgPT09ICdsaWdodGJveCcpIHtcbiAgICAgICAgc2VsZi5lbmQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcblxuICAgIHRoaXMuJG91dGVyQ29udGFpbmVyLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICBpZiAoJChldmVudC50YXJnZXQpLmF0dHIoJ2lkJykgPT09ICdsaWdodGJveCcpIHtcbiAgICAgICAgc2VsZi5lbmQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcblxuICAgIHRoaXMuJGxpZ2h0Ym94LmZpbmQoJy5sYi1wcmV2Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoc2VsZi5jdXJyZW50SW1hZ2VJbmRleCA9PT0gMCkge1xuICAgICAgICBzZWxmLmNoYW5nZUltYWdlKHNlbGYuYWxidW0ubGVuZ3RoIC0gMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxmLmNoYW5nZUltYWdlKHNlbGYuY3VycmVudEltYWdlSW5kZXggLSAxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcblxuICAgIHRoaXMuJGxpZ2h0Ym94LmZpbmQoJy5sYi1uZXh0Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoc2VsZi5jdXJyZW50SW1hZ2VJbmRleCA9PT0gc2VsZi5hbGJ1bS5sZW5ndGggLSAxKSB7XG4gICAgICAgIHNlbGYuY2hhbmdlSW1hZ2UoMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxmLmNoYW5nZUltYWdlKHNlbGYuY3VycmVudEltYWdlSW5kZXggKyAxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcblxuICAgIC8qXG4gICAgICBTaG93IGNvbnRleHQgbWVudSBmb3IgaW1hZ2Ugb24gcmlnaHQtY2xpY2tcblxuICAgICAgVGhlcmUgaXMgYSBkaXYgY29udGFpbmluZyB0aGUgbmF2aWdhdGlvbiB0aGF0IHNwYW5zIHRoZSBlbnRpcmUgaW1hZ2UgYW5kIGxpdmVzIGFib3ZlIG9mIGl0LiBJZlxuICAgICAgeW91IHJpZ2h0LWNsaWNrLCB5b3UgYXJlIHJpZ2h0IGNsaWNraW5nIHRoaXMgZGl2IGFuZCBub3QgdGhlIGltYWdlLiBUaGlzIHByZXZlbn
15RzIHVzZXJzIGZyb21cbiAgICAgIHNhdmluZyB0aGUgaW1hZ2Ugb3IgdXNpbmcgb3RoZXIgY29udGV4dCBtZW51IGFjdGlvbnMgd2l0aCB0aGUgaW1hZ2UuXG5cbiAgICAgIFRvIGZpeCB0aGlzLCB3aGVuIHdlIGRldGVjdCB0aGUgcmlnaHQgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQgZG93biwgYnV0IG5vdCB5ZXQgY2xpY2tlZCwgd2VcbiAgICAgIHNldCBwb2ludGVyLWV2ZW50cyB0byBub25lIG9uIHRoZSBuYXYgZGl2LiBUaGlzIGlzIHNvIHRoYXQgdGhlIHVwY29taW5nIHJpZ2h0LWNsaWNrIGV2ZW50IG9uXG4gICAgICB0aGUgbmV4dCBtb3VzZXVwIHdpbGwgYnViYmxlIGRvd24gdG8gdGhlIGltYWdlLiBPbmNlIHRoZSByaWdodC1jbGljay9jb250ZXh0bWVudSBldmVudCBvY2N1cnNcbiAgICAgIHdlIHNldCB0aGUgcG9pbnRlciBldmVudHMgYmFjayB0byBhdXRvIGZvciB0aGUgbmF2IGRpdiBzbyBpdCBjYW4gY2FwdHVyZSBob3ZlciBhbmQgbGVmdC1jbGlja1xuICAgICAgZXZlbnRzIGFzIHVzdWFsLlxuICAgICAqL1xuICAgIHRoaXMuJG5hdi5vbignbW91c2Vkb3duJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC53aGljaCA9PT0gMykge1xuICAgICAgICBzZWxmLiRuYXYuY3NzKCdwb2ludGVyLWV2ZW50cycsICdub25lJyk7XG5cbiAgICAgICAgc2VsZi4kbGlnaHRib3gub25lKCdjb250ZXh0bWVudScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHRoaXMuJG5hdi5jc3MoJ3BvaW50ZXItZXZlbnRzJywgJ2F1dG8nKTtcbiAgICAgICAgICB9LmJpbmQoc2VsZiksIDApO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuXG4gICAgdGhpcy4kbGlnaHRib3guZmluZCgnLmxiLWxvYWRlciwgLmxiLWNsb3NlJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLmVuZCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIFNob3cgb3ZlcmxheSBhbmQgbGlnaHRib3guIElmIHRoZSBpbWFnZSBpcyBwYXJ0IG9mIGEgc2V0LCBhZGQgc2libGluZ3MgdG8gYWxidW0gYXJyYXkuXG4gIExpZ2h0Ym94LnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uKCRsaW5rKSB7XG4gICAgdmFyIHNlbGYgICAgPSB0aGlzO1xuICAgIHZhciAkd2luZG93ID0gJCh3aW5kb3cpO1xuXG4gICAgJHdpbmRvdy5vbigncmVzaXplJywgJC5wcm94eSh0aGlzLnNpemVPdmVybGF5LCB0aGlzKSk7XG5cbiAgICAkKCdzZWxlY3QsIG9iamVjdCwgZW1iZWQnKS5jc3Moe1xuICAgICAgdmlzaWJpbGl0eTogJ2hpZGRlbidcbiAgICB9KTtcblxuICAgIHRoaXMuc2l6ZU92ZXJsYXkoKTtcblxuICAgIHRoaXMuYWxidW0gPSBbXTtcbiAgICB2YXIgaW1hZ2VOdW1iZXIgPSAwO1xuXG4gICAgZnVuY3Rpb24gYWRkVG9BbGJ1bSgkbGluaykge1xuICAgICAgc2VsZi5hbGJ1bS5wdXNoKHtcbiAgICAgICAgYWx0OiAkbGluay5hdHRyKCdkYXRhLWFsdCcpLFxuICAgICAgICBsaW5rOiAkbGluay5hdHRyKCdocmVmJyksXG4gICAgICAgIHRpdGxlOiAkbGluay5hdHRyKCdkYXRhLXRpdGxlJykgfHwgJGxpbmsuYXR0cigndGl0bGUnKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gU3VwcG9ydCBib3RoIGRhdGEtbGlnaHRib3ggYXR0cmlidXRlIGFuZCByZWwgYXR0cmlidXRlIGltcGxlbWVudGF0aW9uc1xuICAgIHZhciBkYXRhTGlnaHRib3hWYWx1ZSA9ICRsaW5rLmF0dHIoJ2RhdGEtbGlnaHRib3gnKTtcbiAgICB2YXIgJGxpbmtzO1xuXG4gICAgaWYgKGRhdGFMaWdodGJveFZhbHVlKSB7XG4gICAgICAkbGlua3MgPSAkKCRsaW5rLnByb3AoJ3RhZ05hbWUnKSArICdbZGF0YS1saWdodGJveD1cIicgKyBkYXRhTGlnaHRib3hWYWx1ZSArICdcIl0nKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgJGxpbmtzLmxlbmd0aDsgaSA9ICsraSkge1xuICAgICAgICBhZGRUb0FsYnVtKCQoJGxpbmtzW2ldKSk7XG4gICAgICAgIGlmICgkbGlua3NbaV0gPT09ICRsaW5rWzBdKSB7XG4gICAgICAgICAgaW1hZ2VOdW1iZXIgPSBpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICgkbGluay5hdHRyKCdyZWwnKSA9PT0gJ2xpZ2h0Ym94Jykge1xuICAgICAgICAvLyBJZiBpbWFnZSBpcyBub3QgcGFydCBvZiBhIHNldFxuICAgICAgICBhZGRUb0FsYnVtKCRsaW5rKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIGltYWdlIGlzIHBhcnQgb2YgYSBzZXRcbiAgICAgICAgJGxpbmtzID0gJCgkbGluay5wcm9wKCd0YWdOYW1lJykgKyAnW3JlbD1cIicgKyAkbGluay5hdHRyKCdyZWwnKSArICdcIl0nKTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAkbGlua3MubGVuZ3RoOyBqID0gKytqKSB7XG4gICAgICAgICAgYWRkVG9BbGJ1bSgkKCRsaW5rc1tqXSkpO1xuICAgICAgICAgIGlmICgkbGlua3Nbal0gPT09ICRsaW5rWzBdKSB7XG4gICAgICAgICAgICBpbWFnZU51bWJlciA9IGo7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUG9zaXRpb24gTGlnaHRib3hcbiAgICB2YXIgdG9wICA9ICR3aW5kb3cuc2Nyb2xsVG9wKCkgKyB0aGlzLm9wdGlvbnMucG9zaXRpb25Gcm9tVG9wO1xuICAgIHZhciBsZWZ0ID0gJHdpbmRvdy5zY3JvbGxMZWZ0KCk7XG4gICAgdGhpcy4kbGlnaHRib3guY3NzKHtcbiAgICAgIHRvcDogdG9wICsgJ3B4JyxcbiAgICAgIGxlZnQ6IGxlZnQgKyAncHgnXG4gICAgfSkuZmFkZUluKHRoaXMub3B0aW9ucy5mYWRlRHVyYXRpb24pO1xuXG4gICAgLy8gRGlzYWJsZSBzY3JvbGxpbmcgb2YgdGhlIHBhZ2Ugd2hpbGUgb3BlblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZGlzYWJsZVNjcm9sbGluZykge1xuICAgICAgJCgnaHRtbCcpLmFkZENsYXNzKCdsYi1kaXNhYmxlLXNjcm9sbGluZycpO1xuICAgIH1cblxuICAgIHRoaXMuY2hhbmdlSW1hZ2UoaW1hZ2VOdW1iZXIpO1xuICB9O1xuXG4gIC8vIEhpZGUgbW9zdCBVSSBlbGVtZW50cyBpbiBwcmVwYXJhdGlvbiBmb3IgdGhlIGFuaW1hdGVkIHJlc2l6aW5nIG9mIHRoZSBsaWdodGJveC5cbiAgTGlnaHRib3gucHJvdG90eXBlLmNoYW5nZUltYWdlID0gZnVuY3Rpb24oaW1hZ2VOdW1iZXIpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB0aGlzLmRpc2FibGVLZXlib2FyZE5hdigpO1xuICAgIHZhciAkaW1hZ2UgPSB0aGlzLiRsaWdodGJveC5maW5kKCcubGItaW1hZ2UnKTtcblxuICAgI
15HRoaXMuJG92ZXJsYXkuZmFkZUluKHRoaXMub3B0aW9ucy5mYWRlRHVyYXRpb24pO1xuXG4gICAgJCgnLmxiLWxvYWRlcicpLmZhZGVJbignc2xvdycpO1xuICAgIHRoaXMuJGxpZ2h0Ym94LmZpbmQoJy5sYi1pbWFnZSwgLmxiLW5hdiwgLmxiLXByZXYsIC5sYi1uZXh0LCAubGItZGF0YUNvbnRhaW5lciwgLmxiLW51bWJlcnMsIC5sYi1jYXB0aW9uJykuaGlkZSgpO1xuXG4gICAgdGhpcy4kb3V0ZXJDb250YWluZXIuYWRkQ2xhc3MoJ2FuaW1hdGluZycpO1xuXG4gICAgLy8gV2hlbiBpbWFnZSB0byBzaG93IGlzIHByZWxvYWRlZCwgd2Ugc2VuZCB0aGUgd2lkdGggYW5kIGhlaWdodCB0byBzaXplQ29udGFpbmVyKClcbiAgICB2YXIgcHJlbG9hZGVyID0gbmV3IEltYWdlKCk7XG4gICAgcHJlbG9hZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyICRwcmVsb2FkZXI7XG4gICAgICB2YXIgaW1hZ2VIZWlnaHQ7XG4gICAgICB2YXIgaW1hZ2VXaWR0aDtcbiAgICAgIHZhciBtYXhJbWFnZUhlaWdodDtcbiAgICAgIHZhciBtYXhJbWFnZVdpZHRoO1xuICAgICAgdmFyIHdpbmRvd0hlaWdodDtcbiAgICAgIHZhciB3aW5kb3dXaWR0aDtcblxuICAgICAgJGltYWdlLmF0dHIoe1xuICAgICAgICAnYWx0Jzogc2VsZi5hbGJ1bVtpbWFnZU51bWJlcl0uYWx0LFxuICAgICAgICAnc3JjJzogc2VsZi5hbGJ1bVtpbWFnZU51bWJlcl0ubGlua1xuICAgICAgfSk7XG5cbiAgICAgICRwcmVsb2FkZXIgPSAkKHByZWxvYWRlcik7XG5cbiAgICAgICRpbWFnZS53aWR0aChwcmVsb2FkZXIud2lkdGgpO1xuICAgICAgJGltYWdlLmhlaWdodChwcmVsb2FkZXIuaGVpZ2h0KTtcblxuICAgICAgaWYgKHNlbGYub3B0aW9ucy5maXRJbWFnZXNJblZpZXdwb3J0KSB7XG4gICAgICAgIC8vIEZpdCBpbWFnZSBpbnNpZGUgdGhlIHZpZXdwb3J0LlxuICAgICAgICAvLyBUYWtlIGludG8gYWNjb3VudCB0aGUgYm9yZGVyIGFyb3VuZCB0aGUgaW1hZ2UgYW5kIGFuIGFkZGl0aW9uYWwgMTBweCBndXR0ZXIgb24gZWFjaCBzaWRlLlxuXG4gICAgICAgIHdpbmRvd1dpZHRoICAgID0gJCh3aW5kb3cpLndpZHRoKCk7XG4gICAgICAgIHdpbmRvd0hlaWdodCAgID0gJCh3aW5kb3cpLmhlaWdodCgpO1xuICAgICAgICBtYXhJbWFnZVdpZHRoICA9IHdpbmRvd1dpZHRoIC0gc2VsZi5jb250YWluZXJQYWRkaW5nLmxlZnQgLSBzZWxmLmNvbnRhaW5lclBhZGRpbmcucmlnaHQgLSBzZWxmLmltYWdlQm9yZGVyV2lkdGgubGVmdCAtIHNlbGYuaW1hZ2VCb3JkZXJXaWR0aC5yaWdodCAtIDIwO1xuICAgICAgICBtYXhJbWFnZUhlaWdodCA9IHdpbmRvd0hlaWdodCAtIHNlbGYuY29udGFpbmVyUGFkZGluZy50b3AgLSBzZWxmLmNvbnRhaW5lclBhZGRpbmcuYm90dG9tIC0gc2VsZi5pbWFnZUJvcmRlcldpZHRoLnRvcCAtIHNlbGYuaW1hZ2VCb3JkZXJXaWR0aC5ib3R0b20gLSAxMjA7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgaW1hZ2Ugc2l6ZSBpcyBsYXJnZXIgdGhlbiBtYXhXaWR0aHxtYXhIZWlnaHQgaW4gc2V0dGluZ3NcbiAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5tYXhXaWR0aCAmJiBzZWxmLm9wdGlvbnMubWF4V2lkdGggPCBtYXhJbWFnZVdpZHRoKSB7XG4gICAgICAgICAgbWF4SW1hZ2VXaWR0aCA9IHNlbGYub3B0aW9ucy5tYXhXaWR0aDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5vcHRpb25zLm1heEhlaWdodCAmJiBzZWxmLm9wdGlvbnMubWF4SGVpZ2h0IDwgbWF4SW1hZ2VXaWR0aCkge1xuICAgICAgICAgIG1heEltYWdlSGVpZ2h0ID0gc2VsZi5vcHRpb25zLm1heEhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElzIHRoZSBjdXJyZW50IGltYWdlJ3Mgd2lkdGggb3IgaGVpZ2h0IGlzIGdy
15ZWF0ZXIgdGhhbiB0aGUgbWF4SW1hZ2VXaWR0aCBvciBtYXhJbWFnZUhlaWdodFxuICAgICAgICAvLyBvcHRpb24gdGhhbiB3ZSBuZWVkIHRvIHNpemUgZG93biB3aGlsZSBtYWludGFpbmluZyB0aGUgYXNwZWN0IHJhdGlvLlxuICAgICAgICBpZiAoKHByZWxvYWRlci53aWR0aCA+IG1heEltYWdlV2lkdGgpIHx8IChwcmVsb2FkZXIuaGVpZ2h0ID4gbWF4SW1hZ2VIZWlnaHQpKSB7XG4gICAgICAgICAgaWYgKChwcmVsb2FkZXIud2lkdGggLyBtYXhJbWFnZVdpZHRoKSA+IChwcmVsb2FkZXIuaGVpZ2h0IC8gbWF4SW1hZ2VIZWlnaHQpKSB7XG4gICAgICAgICAgICBpbWFnZVdpZHRoICA9IG1heEltYWdlV2lkdGg7XG4gICAgICAgICAgICBpbWFnZUhlaWdodCA9IHBhcnNlSW50KHByZWxvYWRlci5oZWlnaHQgLyAocHJlbG9hZGVyLndpZHRoIC8gaW1hZ2VXaWR0aCksIDEwKTtcbiAgICAgICAgICAgICRpbWFnZS53aWR0aChpbWFnZVdpZHRoKTtcbiAgICAgICAgICAgICRpbWFnZS5oZWlnaHQoaW1hZ2VIZWlnaHQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbWFnZUhlaWdodCA9IG1heEltYWdlSGVpZ2h0O1xuICAgICAgICAgICAgaW1hZ2VXaWR0aCA9IHBhcnNlSW50KHByZWxvYWRlci53aWR0aCAvIChwcmVsb2FkZXIuaGVpZ2h0IC8gaW1hZ2VIZWlnaHQpLCAxMCk7XG4gICAgICAgICAgICAkaW1hZ2Uud2lkdGgoaW1hZ2VXaWR0aCk7XG4gICAgICAgICAgICAkaW1hZ2UuaGVpZ2h0KGltYWdlSGVpZ2h0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNlbGYuc2l6ZUNvbnRhaW5lcigkaW1hZ2Uud2lkdGgoKSwgJGltYWdlLmhlaWdodCgpKTtcbiAgICB9O1xuXG4gICAgcHJlbG9hZGVyLnNyYyAgICAgICAgICA9IHRoaXMuYWxidW1baW1hZ2VOdW1iZXJdLmxpbms7XG4gICAgdGhpcy5jdXJyZW50SW1hZ2VJbmRleCA9IGltYWdlTnVtYmVyO1xuICB9O1xuXG4gIC8vIFN0cmV0Y2ggb3ZlcmxheSB0byBmaXQgdGhlIHZpZXdwb3J0XG4gIExpZ2h0Ym94LnByb3RvdHlwZS5zaXplT3ZlcmxheSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuJG92ZXJsYXlcbiAgICAgIC53aWR0aCgkKGRvY3VtZW50KS53aWR0aCgpKVxuICAgICAgLmhlaWdodCgkKGRvY3VtZW50KS5oZWlnaHQoKSk7XG4gIH07XG5cbiAgLy8gQW5pbWF0ZSB0aGUgc2l6ZSBvZiB0aGUgbGlnaHRib3ggdG8gZml0IHRoZSBpbWFnZSB3ZSBhcmUgc2hvd2luZ1xuICBMaWdodGJveC5wcm90b3R5cGUuc2l6ZUNvbnRhaW5lciA9IGZ1bmN0aW9uKGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdmFyIG9sZFdpZHRoICA9IHRoaXMuJG91dGVyQ29udGFpbmVyLm91dGVyV2lkdGgoKTtcbiAgICB2YXIgb2xkSGVpZ2h0ID0gdGhpcy4kb3V0ZXJDb250YWluZXIub3V0ZXJIZWlnaHQoKTtcbiAgICB2YXIgbmV3V2lkdGggID0gaW1hZ2VXaWR0aCArIHRoaXMuY29udGFpbmVyUGFkZGluZy5sZWZ0ICsgdGh
15pcy5jb250YWluZXJQYWRkaW5nLnJpZ2h0ICsgdGhpcy5pbWFnZUJvcmRlcldpZHRoLmxlZnQgKyB0aGlzLmltYWdlQm9yZGVyV2lkdGgucmlnaHQ7XG4gICAgdmFyIG5ld0hlaWdodCA9IGltYWdlSGVpZ2h0ICsgdGhpcy5jb250YWluZXJQYWRkaW5nLnRvcCArIHRoaXMuY29udGFpbmVyUGFkZGluZy5ib3R0b20gKyB0aGlzLmltYWdlQm9yZGVyV2lkdGgudG9wICsgdGhpcy5pbWFnZUJvcmRlcldpZHRoLmJvdHRvbTtcblxuICAgIGZ1bmN0aW9uIHBvc3RSZXNpemUoKSB7XG4gICAgICBzZWxmLiRsaWdodGJveC5maW5kKCcubGItZGF0YUNvbnRhaW5lcicpLndpZHRoKG5ld1dpZHRoKTtcbiAgICAgIHNlbGYuJGxpZ2h0Ym94LmZpbmQoJy5sYi1wcmV2TGluaycpLmhlaWdodChuZXdIZWlnaHQpO1xuICAgICAgc2VsZi4kbGlnaHRib3guZmluZCgnLmxiLW5leHRMaW5rJykuaGVpZ2h0KG5ld0hlaWdodCk7XG4gICAgICBzZWxmLnNob3dJbWFnZSgpO1xuICAgIH1cblxuICAgIGlmIChvbGRXaWR0aCAhPT0gbmV3V2lkdGggfHwgb2xkSGVpZ2h0ICE9PSBuZXdIZWlnaHQpIHtcbiAgICAgIHRoaXMuJG91dGVyQ29udGFpbmVyLmFuaW1hdGUoe1xuICAgICAgICB3aWR0aDogbmV3V2lkdGgsXG4gICAgICAgIGhlaWdodDogbmV3SGVpZ2h0XG4gICAgICB9LCB0aGlzLm9wdGlvbnMucmVzaXplRHVyYXRpb24sICdzd2luZycsIGZ1bmN0aW9uKCkge1xuICAgICAgICBwb3N0UmVzaXplKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9zdFJlc2l6ZSgpO1xuICAgIH1cbiAgfTtcblxuICAvLyBEaXNwbGF5IHRoZSBpbWFnZSBhbmQgaXRzIGRldGFpbHMgYW5kIGJlZ2luIHByZWxvYWQgbmVpZ2hib3JpbmcgaW1hZ2VzLlxuICBMaWdodGJveC5wcm90b3R5cGUuc2hvd0ltYWdlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy4kbGlnaHRib3guZmluZCgnLmxiLWxvYWRlcicpLnN0b3AodHJ1ZSkuaGlkZSgpO1xuICAgIHRoaXMuJGxpZ2h0Ym94LmZpbmQoJy5sYi1pbWFnZScpLmZhZGVJbih0aGlzLm9wdGlvbnMuaW1hZ2VGYWRlRHVyYXRpb24pO1xuXG4gICAgdGhpcy51cGRhdGVOYXYoKTtcbiAgICB0aGlzLnVwZGF0ZURldGFpbHMoKTtcbiAgICB0aGlzLnByZWxvYWROZWlnaGJvcmluZ0ltYWdlcygpO1xuICAgIHRoaXMuZW5hYmxlS2V5Ym9hcmROYXYoKTtcbiAgfTtcblxuICAvLyBEaXNwbGF5IHByZXZpb3VzIGFuZCBuZXh0IG5hdmlnYXRpb24gaWYgYXBwcm9wcmlhdGUuXG4gIExpZ2h0Ym94LnByb3RvdHlwZS51cGRhdGVOYXYgPSBmdW5jdGlvbigpIHtcbiAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGJyb3dzZXIgc3VwcG9ydHMgdG91Y2ggZXZlbnRzLiBJZiBzbywgd2UgdGFrZSB0aGUgY29uc2VydmF0aXZlIGFwcHJvYWNoXG4gICAgLy8gYW5kIGFzc3VtZSB0aGF0IG1vdXNlIGhvdmVyIGV2ZW50cyBhcmUgbm90IHN1cHBvcnRlZCBhbmQgYWx3YXlzIHNob3cgcHJldi9uZXh0IG5hdmlnYXRpb25cbiAgICAvLyBhcnJvd3MgaW4gaW1hZ2Ugc2V0cy5cbiAgICB2YXIgYWx3YXlzU2hvd05hdiA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBkb2
15N1bWVudC5jcmVhdGVFdmVudCgnVG91Y2hFdmVudCcpO1xuICAgICAgYWx3YXlzU2hvd05hdiA9ICh0aGlzLm9wdGlvbnMuYWx3YXlzU2hvd05hdk9uVG91Y2hEZXZpY2VzKSA/IHRydWUgOiBmYWxzZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgdGhpcy4kbGlnaHRib3guZmluZCgnLmxiLW5hdicpLnNob3coKTtcblxuICAgIGlmICh0aGlzLmFsYnVtLmxlbmd0aCA+IDEpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMud3JhcEFyb3VuZCkge1xuICAgICAgICBpZiAoYWx3YXlzU2hvd05hdikge1xuICAgICAgICAgIHRoaXMuJGxpZ2h0Ym94LmZpbmQoJy5sYi1wcmV2LCAubGItbmV4dCcpLmNzcygnb3BhY2l0eScsICcxJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kbGlnaHRib3guZmluZCgnLmxiLXByZXYsIC5sYi1uZXh0Jykuc2hvdygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEltYWdlSW5kZXggPiAwKSB7XG4gICAgICAgICAgdGhpcy4kbGlnaHRib3guZmluZCgnLmxiLXByZXYnKS5zaG93KCk7XG4gICAgICAgICAgaWYgKGFsd2F5c1Nob3dOYXYpIHtcbiAgICAgICAgICAgIHRoaXMuJGxpZ2h0Ym94LmZpbmQoJy5sYi1wcmV2JykuY3NzKCdvcGFjaXR5JywgJzEnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEltYWdlSW5kZXggPCB0aGlzLmFsYnVtLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICB0aGlzLiRsaWdodGJveC5maW5kKCcubGItbmV4dCcpLnNob3coKTtcbiAgICAgICAgICBpZiAoYWx3YXlzU2hvd05hdikge1xuICAgICAgICAgICAgdGhpcy4kbGlnaHRib3guZmluZCgnLmxiLW5leHQnKS5jc3MoJ29wYWNpdHknLCAnMScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBEaXNwbGF5IGNhcHRpb24sIGltYWdlIG51bWJlciwgYW5kIGNsb3NpbmcgYnV0dG9uLlxuICBMaWdodGJveC5wcm90b3R5cGUudXBkYXRlRGV0YWlscyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIC8vIEVuYWJsZSBhbmNob3IgY2xpY2tzIGluIHRoZSBpbmplY3RlZCBjYXB0aW9uIGh0bWwuXG4gICAgLy8gVGhhbmtzIE5hdGUgV3JpZ2h0IGZvciB0aGUgZml4LiBAaHR0cHM6Ly9naXRodWIuY29tL05hdGVXclxuICAgIGlmICh0eXBlb2YgdGhpcy5hbGJ1bVt0aGlzLmN1cnJlbnRJbWFnZUluZGV4XS50aXRsZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIHRoaXMuYWxidW1bdGhpcy5jdXJyZW50SW1hZ2VJbmRleF0udGl0bGUgIT09ICcnKSB7XG4gICAgICB2Y
15XIgJGNhcHRpb24gPSB0aGlzLiRsaWdodGJveC5maW5kKCcubGItY2FwdGlvbicpO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5zYW5pdGl6ZVRpdGxlKSB7XG4gICAgICAgICRjYXB0aW9uLnRleHQodGhpcy5hbGJ1bVt0aGlzLmN1cnJlbnRJbWFnZUluZGV4XS50aXRsZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkY2FwdGlvbi5odG1sKHRoaXMuYWxidW1bdGhpcy5jdXJyZW50SW1hZ2VJbmRleF0udGl0bGUpO1xuICAgICAgfVxuICAgICAgJGNhcHRpb24uZmFkZUluKCdmYXN0JylcbiAgICAgICAgLmZpbmQoJ2EnKS5vbignY2xpY2snLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgIGlmICgkKHRoaXMpLmF0dHIoJ3RhcmdldCcpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKCQodGhpcykuYXR0cignaHJlZicpLCAkKHRoaXMpLmF0dHIoJ3RhcmdldCcpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9jYXRpb24uaHJlZiA9ICQodGhpcykuYXR0cignaHJlZicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWxidW0ubGVuZ3RoID4gMSAmJiB0aGlzLm9wdGlvbnMuc2hvd0ltYWdlTnVtYmVyTGFiZWwpIHtcbiAgICAgIHZhciBsYWJlbFRleHQgPSB0aGlzLmltYWdlQ291bnRMYWJlbCh0aGlzLmN1cnJlbnRJbWFnZUluZGV4ICsgMSwgdGhpcy5hbGJ1bS5sZW5ndGgpO1xuICAgICAgdGhpcy4kbGlnaHRib3guZmluZCgnLmxiLW51bWJlcicpLnRleHQobGFiZWxUZXh0KS5mYWRlSW4oJ2Zhc3QnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4kbGlnaHRib3guZmluZCgnLmxiLW51bWJlcicpLmhpZGUoKTtcbiAgICB9XG5cbiAgICB0aGlzLiRvdXRlckNvbnRhaW5lci5yZW1vdmVDbGFzcygnYW5pbWF0aW5nJyk7XG5cbiAgICB0aGlzLiRsaWdodGJveC5maW5kKCcubGItZGF0YUNvbnRhaW5lcicpLmZhZGVJbih0aGlzLm9wdGlvbnMucmVzaXplRHVyYXRpb24sIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHNlbGYuc2l6ZU92ZXJsYXkoKTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyBQcmVsb2FkIHByZXZpb3VzIGFuZCBuZXh0IGltYWdlcyBpbiBzZXQuXG4gIExpZ2h0Ym94LnByb3RvdHlwZS5wcmVsb2FkTmVpZ2hib3JpbmdJbWFnZXMgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5hbGJ1bS5sZW5ndGggPiB0aGlzLmN1cnJlbnRJbWFnZUluZGV4ICsgMSkge1xuICAgICAgdmFyIHByZWxvYWROZXh0ID0gbmV3IEltYWdlKCk7XG4gICAgICBwcmVsb2FkTmV4dC5zcmMgPSB0aGlzLmFsYnVtW3RoaXMuY3VycmVudEltYWdlSW5kZXggKyAxXS5saW5rO1xuICAgIH1cbiAgICBpZiAodGhpcy5jdXJyZW50SW1hZ2VJbmRleCA+IDApIHtcbiAgICAgIHZhciBwcmVsb2FkUHJldiA9IG5ldyBJbWFnZSgpO1xuICAgICAgcHJlbG9hZFByZXYuc3JjID0gdGhpcy5hbGJ1bVt0aGlzLmN1cnJlbnRJbWFnZUluZGV4IC0gMV0ubGluaztcbiAgICB9XG4gIH07XG5cbiAgTGlnaHRib3gucHJvdG90eXBlLmVuYWJsZUtleWJvYXJkTmF2ID0gZnVuY3Rpb24oKSB7XG4gICAgJChkb2N1bWVudCkub24oJ2tleXVwLmtleWJvYXJkJywgJC5wcm94eSh0aGlzLmtleWJvYXJkQWN0aW9uLCB0aGlzKSk7XG4gIH07XG5cbiAgTGlnaHRib3gucHJvdG90eXBlLmRpc2FibGVLZXlib2FyZE5hdiA9IGZ1bmN0aW9uKCkge1xuICAgICQoZG9jdW1lbnQpLm9mZignLmtleWJvYXJkJyk7XG4gIH07XG5cbiAgTGlnaHRib3gucHJvdG90eXBlLmtleWJvYXJkQWN0aW9uID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICB2YXIgS0VZQ09ERV9FU0MgICAgICAgID0gMjc7XG4gICAgdmFyIEtFWUNPREVfTEVGVEFSUk9XICA9IDM3O1xuICAgIHZhciBLRVlDT0RFX1JJR0hUQVJST1cgPSAzOTtcblxuICAgIHZhciBrZXljb2RlID0gZXZlbnQua2V5Q29kZTtcbiAgICB2YXIga2V5ICAgICA9IFN0cmluZy5mcm9tQ2hhckNvZGUoa2V5Y29kZSkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoa2V5Y29kZSA9PT0gS0VZQ09ERV9FU0MgfHwga2V5Lm1hdGNoKC94fG98Yy8pKSB7XG4gICAgICB0aGlzLmVuZCgpO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAncCcgfHwga2V5Y29kZSA9PT0gS0VZQ09ERV9MRUZUQVJST1cpIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRJbWFnZUluZGV4ICE9PSAwKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlSW1hZ2UodGhpcy5jdXJyZW50SW1hZ2VJbmRleCAtIDEpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMud3JhcEFyb3VuZCAmJiB0aGlzLmFsYnVtLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VJbWFnZSh0aGlzLmFsYnVtLmxlbmd0aCAtIDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbicgfHwga2V5Y29kZSA9PT0gS0VZQ09ERV9SSUdIVEFSUk9XKSB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50SW1hZ2VJbmRleCAhPT0gdGhpcy5hbGJ1bS5sZW5ndGggLSAxKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlSW1hZ2UodGhpcy5jdXJyZW50SW1hZ2VJbmRleCArIDEpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMud3JhcEFyb3VuZCAmJiB0aGlzLmFsYnVtLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VJbWFnZSgwKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLy8gQ2xvc2luZyB0aW1lLiA6LShcbiAgTGlnaHRib3gucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuZGlzYWJsZUtleWJvYXJkTmF2KCk7XG4gICAgJCh3aW5kb3cpLm9mZigncmVzaXplJywgdGhpcy5zaXplT3ZlcmxheSk7XG4gICAgdGhpcy4kbGlnaHRib3guZmFkZU91dCh0aGlzLm9wdGlvbnMuZmFkZUR1cmF0aW9uKTtcbiAgICB0aGlzLiRvdmVybGF5LmZhZGVPdXQodGhpcy5vcHRpb25zLmZhZGVEdXJhdGlvbik7XG4gICAgJCgnc2VsZWN0LCBvYmplY3QsIGVtYmVkJykuY3NzKHtcbiAgICAgIHZpc2liaWxpdHk6ICd2aXNpYmxlJ1xuICAgIH0pO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZGlzYWJsZVNjcm9sbGluZykge1xuICAgICAgJCgnaHRtbCcpLnJlbW92ZUNsYXNzKCdsYi1kaXNhYmxlLXNjcm9sbGluZycpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbmV3IExpZ2h0Ym94KCk7XG59KSk7XG4iXX0=

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.