From c6b4c646177ff0a98ca97c6bd43a43cadcdc8497 Mon Sep 17 00:00:00 2001 From: Yuta Imaya Date: Fri, 7 Mar 2014 17:33:18 +0900 Subject: [PATCH 01/21] change build tool (ant -> grunt), implant source map file --- Gruntfile.js | 148 ++ README.en.md | 21 +- README.md | 22 +- bin/crc32.dev.min.js | 8 + bin/crc32.min.js | 2 +- bin/deflate.dev.min.js | 26 + bin/deflate.min.js | 2 +- bin/deflate.min.js.map | 8 - bin/gunzip.dev.min.js | 27 + bin/gunzip.min.js | 4 +- bin/gunzip.min.js.map | 8 - bin/gzip.dev.min.js | 33 + bin/gzip.min.js | 2 +- bin/gzip.min.js.map | 8 - bin/inflate.dev.min.js | 16 + bin/inflate.min.js | 2 +- bin/inflate.min.js.map | 8 - bin/inflate_stream.dev.min.js | 14 + bin/inflate_stream.min.js | 2 +- bin/inflate_stream.min.js.map | 8 - bin/node-zlib.dev.js | 54 + bin/node-zlib.js | 2 +- bin/node-zlib.js.map | 8 - bin/rawdeflate.dev.min.js | 24 + bin/rawdeflate.min.js | 2 +- bin/rawdeflate.min.js.map | 8 - bin/rawinflate.dev.min.js | 15 + bin/rawinflate.min.js | 2 +- bin/rawinflate.min.js.map | 8 - bin/unzip.dev.min.js | 32 + bin/unzip.min.js | 2 +- bin/unzip.min.js.map | 8 - bin/zip.dev.min.js | 38 + bin/zip.min.js | 2 +- bin/zip.min.js.map | 8 - bin/zlib.dev.min.js | 40 + bin/zlib.min.js | 2 +- bin/zlib.min.js.map | 8 - bin/zlib.pretty.dev.js | 3744 +++++++++++++++++++++++++++++++++ bin/zlib.pretty.js | 3743 ++++++++++++++++++++++++++++++++ bin/zlib_and_gzip.dev.min.js | 52 + bin/zlib_and_gzip.min.js | 8 +- bin/zlib_and_gzip.min.js.map | 8 - build.json | 129 ++ package.json | 4 +- 45 files changed, 8181 insertions(+), 139 deletions(-) create mode 100644 Gruntfile.js create mode 100644 bin/crc32.dev.min.js create mode 100644 bin/deflate.dev.min.js delete mode 100644 bin/deflate.min.js.map create mode 100644 bin/gunzip.dev.min.js delete mode 100644 bin/gunzip.min.js.map create mode 100644 bin/gzip.dev.min.js delete mode 100644 bin/gzip.min.js.map create mode 100644 bin/inflate.dev.min.js delete mode 100644 bin/inflate.min.js.map create mode 100644 bin/inflate_stream.dev.min.js delete mode 100644 bin/inflate_stream.min.js.map create mode 100644 bin/node-zlib.dev.js delete mode 100644 bin/node-zlib.js.map create mode 100644 bin/rawdeflate.dev.min.js delete mode 100644 bin/rawdeflate.min.js.map create mode 100644 bin/rawinflate.dev.min.js delete mode 100644 bin/rawinflate.min.js.map create mode 100644 bin/unzip.dev.min.js delete mode 100644 bin/unzip.min.js.map create mode 100644 bin/zip.dev.min.js delete mode 100644 bin/zip.min.js.map create mode 100644 bin/zlib.dev.min.js delete mode 100644 bin/zlib.min.js.map create mode 100644 bin/zlib.pretty.dev.js create mode 100644 bin/zlib.pretty.js create mode 100644 bin/zlib_and_gzip.dev.min.js delete mode 100644 bin/zlib_and_gzip.min.js.map create mode 100644 build.json diff --git a/Gruntfile.js b/Gruntfile.js new file mode 100644 index 0000000..a2983da --- /dev/null +++ b/Gruntfile.js @@ -0,0 +1,148 @@ +module.exports = function(grunt) { + grunt.loadNpmTasks('grunt-closure-tools'); + grunt.loadNpmTasks('grunt-contrib-concat'); + + var license = grunt.file.read('LICENSE_min'); + var basefiles = [ + 'closure-primitives/base.js', + 'define/typedarray/hybrid.js', + 'src/*.js' + ]; + var config = grunt.file.readJSON("build.json"); + var targets = Object.keys(config); + + grunt.initConfig({ + closureDepsWriter: { + options: { + depswriter: 'closure-primitives/depswriter.py', + root_with_prefix: ['"src ../src"'] + }, + deps: { + dest: 'closure-primitives/deps.js' + } + }, + closureCompiler: mergeObject( + { + options: { + compilerFile: 'vendor/google-closure-compiler/compiler.jar', + checkModified: false, + compilerOpts: { + compilation_level: 'PERFORMANCE_OPTIMIZATIONS', + language_in: 'ECMASCRIPT5_STRICT', + source_map_format: "V3", + manage_closure_dependencies: true, + summary_detail_level: 3, + warning_level: 'VERBOSE', + jscomp_error: [ + 'accessControls', + 'checkTypes', + 'checkVars', + 'const', + 'constantProperty', + 'duplicate', + 'visibility' + ], + output_wrapper: + '"' + license + '(function() {%output%}).call(this);"' + } + } + }, (function() { + var result = {}; + + targets.forEach(function(target) { + result[target] = createClosureCompilerSetting(target); + }); + + return result; + })() + ), + 'concat': mergeObject( + { + options: { + process: concatProcess + } + }, (function() { + var result = {}; + + targets.forEach(function(target) { + result[target] = createConcatSettings(target); + }); + + return result; + })() + ) + }); + + // create compile settings + function createClosureCompilerSetting(target) { + return { + src: basefiles.concat(config[target].src), + dest: config[target].dest, + TEMPcompilerOpts: mergeObject( + { + create_source_map: config[target].map + }, + config[target].compilerOpts || {} + ) + } + } + + // create concat settings + function createConcatSettings(target) { + return { + src: config[target].dest, + dest: config[target].dev + } + } + + // concat sourcemaps + function concatProcess(src, filepath) { + var mapfile = filepath + ".map"; + + var result = + src + '//# sourceMappingURL=data:application/json;base64,' + + new Buffer(updateSourceMaps(mapfile)).toString('base64'); + grunt.file.delete(mapfile); + + return result; + } + + // update sourcemaps + function updateSourceMaps(path) { + var mapObject = grunt.file.readJSON(path); + var contents = []; + + /* + // source data-url version + mapObject.sources.forEach(function(sourcePath, i) { + mapObject.sources[i] = 'data:text/plain;charset=utf-8;base64,' + + new Buffer(grunt.file.read(sourcePath, {encoding: null}).toString('base64')) + }); + */ + + // sourceContent version + mapObject.sources.forEach(function(sourcePath) { + contents.push(grunt.file.read(sourcePath, {encoding: null}).toString()) + }); + + mapObject.sourcesContent = contents; + + return JSON.stringify(mapObject); + } + + // merge object + function mergeObject(dst, src) { + Object.keys(src).forEach(function(key) { + dst[key] = src[key]; + }); + + return dst; + } + + grunt.registerTask("default", targets); + grunt.registerTask("all", targets); + grunt.registerTask("deps", ["closureDepsWriter:deps"]); + targets.forEach(function(target) { + grunt.registerTask(target, ["closureCompiler:" + target, "concat:" + target]); + }); +}; \ No newline at end of file diff --git a/README.en.md b/README.en.md index 5559dd5..8ec8cbb 100644 --- a/README.en.md +++ b/README.en.md @@ -218,16 +218,14 @@ see unit tests. If you want to know the code before compile, SourceMaps and PrettyPrint can be used. -### SourceMaps +### Source Map -If you want to enable the SourceMaps if, you can use the `src` directory and *.min.js.map. +If you want to use the Source Map, use `dev` version. - - inflate.min.js - - inflate.min.js.map - - [src] - - (source files) +For example, you want to use Inflate with Source Map. -`[src]` is zlib.js source code directory. + - inflate.min.js // release version + - inflate.dev.min.js // development version <- use this ### Pretty Print @@ -238,20 +236,19 @@ If you want to enable the SourceMaps if, you can use the `src` directory and *.m How to build ------------ -Build using Ant and Closure Compiler. +Build using Grunt and Closure Compiler. ### Requirement -- Ant 1.8+ -- JRE 1.6+ +- Grunt - Python ### Build -Use "ant" command. +Use "grunt" command. ``` -$ ant [target] +$ grunt [target] ``` #### Build target diff --git a/README.md b/README.md index a81f993..f0ca4c5 100644 --- a/README.md +++ b/README.md @@ -237,16 +237,13 @@ zlib.js では JavaScript ファイルを minify された形で提供してい そういった時のために SourceMaps ファイルや Pretty Print されたファイルも提供しています。 -### SourceMaps +### Source Map -SourceMaps を有効にするには以下のように対象となるファイルに `.map` を付けたファイルと、変換前のソースコードである `src` ディレクトリを配置します。 +Source Map を使いたい場合はファイル名に `dev` のついたバージョンを使います。 +例えば Source Map を有効にした Inflate を使いたい場合は以下になります。 - - inflate.min.js - - inflate.min.js.map - - [src] - - (source files) - -なお、ここに書いてある `[src]` は zlib.js のリポジトリの `src` ディレクトリをコピーしてください。 + - inflate.min.js // リリースバージョン + - inflate.dev.min.js // 開発バージョン(これを使う) ### Pretty Print @@ -259,20 +256,19 @@ SourceMaps とは異なりますが、minify の変数名の短縮のみ避け How to build ------------ -ビルドは Ant と Closure Compiler を使用して行います。 +ビルドは Grunt と Closure Compiler を使用して行います。 ### 必要な環境 -- Ant 1.8+ -- JRE 1.6+ +- Grunt - Python ### ビルド -Ant を使ってビルドを行います。 +Grunt を使ってビルドを行います。 ``` -$ ant [target] +$ grunt [target] ``` #### ビルドターゲット diff --git a/bin/crc32.dev.min.js b/bin/crc32.dev.min.js new file mode 100644 index 0000000..39b0fb1 --- /dev/null +++ b/bin/crc32.dev.min.js @@ -0,0 +1,8 @@ +/** @license zlib.js 2012 - imaya [ https://github.com/imaya/zlib.js ] The MIT License */(function() {'use strict';var f=this;function h(c,a){var b=c.split("."),e=f;!(b[0]in e)&&e.execScript&&e.execScript("var "+b[0]);for(var d;b.length&&(d=b.shift());)!b.length&&void 0!==a?e[d]=a:e=e[d]?e[d]:e[d]={}};var l={c:function(c,a,b){return l.update(c,0,a,b)},update:function(c,a,b,e){var d=l.a,g="number"===typeof b?b:b=0,k="number"===typeof e?e:c.length;a^=4294967295;for(g=k&7;g--;++b)a=a>>>8^d[(a^c[b])&255];for(g=k>>3;g--;b+=8)a=a>>>8^d[(a^c[b])&255],a=a>>>8^d[(a^c[b+1])&255],a=a>>>8^d[(a^c[b+2])&255],a=a>>>8^d[(a^c[b+3])&255],a=a>>>8^d[(a^c[b+4])&255],a=a>>>8^d[(a^c[b+5])&255],a=a>>>8^d[(a^c[b+6])&255],a=a>>>8^d[(a^c[b+7])&255];return(a^4294967295)>>>0},d:function(c,a){return(l.a[(c^a)&255]^c>>>8)>>> +0},b:[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759, +2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977, +2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755, +2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956, +3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270, +936918E3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]};l.a="undefined"!==typeof Uint8Array&&"undefined"!==typeof Uint16Array&&"undefined"!==typeof Uint32Array&&"undefined"!==typeof DataView?new Uint32Array(l.b):l.b;h("Zlib.CRC32",l);h("Zlib.CRC32.calc",l.c);h("Zlib.CRC32.update",l.update);}).call(this); +//# sourceMappingURL=data:application/json;base64,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Q0EwQ2xCLFVBMUNrQixDQTBDTixTQTFDTSxDQTBDTSxVQTFDTixDQTBDa0IsVUExQ2xCLENBMEM4QixVQTFDOUIsQ0EwQzBDLFNBMUMxQyxDQTJDbEIsVUEzQ2tCLENBMkNOLFVBM0NNLENBMkNNLFVBM0NOLENBMkNrQixTQTNDbEIsQ0FuRUQsQ0FxSG5CTCxFQUFBQyxFQUFBLENDN0d5QixXRGdJbEIsR0NoSUosTUFBT0ssV0RnSUgsRUMvSG1CLFdEK0huQixHQy9ISixNQUFPQyxZRCtISCxFQzlIbUIsV0Q4SG5CLEdDOUhKLE1BQU9DLFlEOEhILEVDN0hnQixXRDZIaEIsR0M3SEosTUFBT0MsU0Q2SEgsQ0FBaUIsSUFBSUQsV0FBSixDQUFnQkUsQ0FBQUMsRUFBaEIsQ0FBakIsQ0FBc0RELENBQUFDLEUsQ0Q4c0MzRDlCLENBQUEsQ0d2MUNnQitCLFlIdTFDaEIsQ0d2MUM4QnBCLENIdTFDOUIsQ0FBQVgsRUFBQSxDR3QxQ2dCK0IsaUJIczFDaEIsQ0d0MUNtQ25CLENBQUFvQixFSHMxQ25DLENBQUFoQyxFQUFBLENHcjFDZ0IrQixtQkhxMUNoQixDR3IxQ3FDaEIsQ0FBQUMsT0hxMUNyQzsiLCJzb3VyY2VzIjpbImNsb3N1cmUtcHJpbWl0aXZlcy9iYXNlLmpzIiwic3JjL2NyYzMyLmpzIiwiZGVmaW5lL3R5cGVkYXJyYXkvaHlicmlkLmpzIiwiZXhwb3J0L2NyYzMyLmpzIl0sIm5hbWVzIjpbImdvb2cuZ2xvYmFsIiwiZ29vZy5leHBvcnRQYXRoXyIsIm5hbWUiLCJvcHRfb2JqZWN0IiwicGFydHMiLCJzcGxpdCIsImN1ciIsImV4ZWNTY3JpcHQiLCJwYXJ0IiwibGVuZ3RoIiwic2hpZnQiLCJ1bmRlZmluZWQiLCJabGliLkNSQzMyIiwiWmxpYi5DUkMzMi5jYWxjIiwiZGF0YSIsInBvcyIsIlpsaWIuQ1JDMzIudXBkYXRlIiwidXBkYXRlIiwiY3JjIiwidGFibGUiLCJabGliLkNSQzMyLlRhYmxlIiwiVGFibGUiLCJpIiwiaWwiLCJabGliLkNSQzMyLnNpbmdsZSIsIm51bSIsIlVpbnQ4QXJyYXkiLCJVaW50MTZBcnJheSIsIlVpbnQzMkFycmF5IiwiRGF0YVZpZXciLCJabGliLkNSQzMyLlRhYmxlXyIsIlRhYmxlXyIsInB1YmxpY1BhdGgiLCJjYWxjIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDA2IFRoZSBDbG9zdXJlIExpYnJhcnkgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTLUlTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXcgQm9vdHN0cmFwIGZvciB0aGUgR29vZ2xlIEpTIExpYnJhcnkgKENsb3N1cmUpLlxuICpcbiAqIEluIHVuY29tcGlsZWQgbW9kZSBiYXNlLmpzIHdpbGwgd3JpdGUgb3V0IENsb3N1cmUncyBkZXBzIGZpbGUsIHVubGVzcyB0aGVcbiAqIGdsb2JhbCA8Y29kZT5DTE9TVVJFX05PX0RFUFM8L2NvZGU+IGlzIHNldCB0byB0cnVlLiAgVGhpcyBhbGxvd3MgcHJvamVjdHMgdG9cbiAqIGluY2x1ZGUgdGhlaXIgb3duIGRlcHMgZmlsZShzKSBmcm9tIGRpZmZlcmVudCBsb2NhdGlvbnMuXG4gKlxuICovXG5cblxuLyoqXG4gKiBAZGVmaW5lIHtib29sZWFufSBPdmVycmlkZGVuIHRvIHRydWUgYnkgdGhlIGNvbXBpbGVyIHdoZW4gLS1jbG9zdXJlX3Bhc3NcbiAqICAgICBvciAtLW1hcmtfYXNfY29tcGlsZWQgaXMgc3BlY2lmaWVkLlxuICovXG52YXIgQ09NUElMRUQgPSBmYWxzZTtcblxuXG4vKipcbiAqIEJhc2UgbmFtZXNwYWNlIGZvciB0aGUgQ2xvc3VyZSBsaWJyYXJ5LiAgQ2hlY2tzIHRvIHNlZSBnb29nIGlzXG4gKiBhbHJlYWR5IGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgc2NvcGUgYmVmb3JlIGFzc2lnbmluZyB0byBwcmV2ZW50XG4gKiBjbG9iYmVyaW5nIGlmIGJhc2UuanMgaXMgbG9hZGVkIG1vcmUgdGhhbiBvbmNlLlxuICpcbiAqIEBjb25zdFxuICovXG52YXIgZ29vZyA9IGdvb2cgfHwge307IC8vIElkZW50aWZpZXMgdGhpcyBmaWxlIGFzIHRoZSBDbG9zdXJlIGJhc2UuXG5cblxuLyoqXG4gKiBSZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBjb250ZXh0LiAgSW4gbW9zdCBjYXNlcyB0aGlzIHdpbGwgYmUgJ3dpbmRvdycuXG4gKi9cbmdvb2cuZ2xvYmFsID0gdGhpcztcblxuXG4vKipcbiAqIEBkZWZpbmUge2Jvb2xlYW59IERFQlVHIGlzIHByb3ZpZGVkIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCBkZWJ1Z2dpbmcgY29kZVxuICogdGhhdCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGluIGEgcHJvZHVjdGlvbiBqc19iaW5hcnkgY2FuIGJlIGVhc2lseSBzdHJpcHBlZFxuICogYnkgc3BlY2lmeWluZyAtLWRlZmluZSBnb29nLkRFQlVHPWZhbHNlIHRvIHRoZSBKU0NvbXBpbGVyLiBGb3IgZXhhbXBsZSwgbW9zdFxuICogdG9TdHJpbmcoKSBtZXRob2RzIHNob3VsZCBiZSBkZWNsYXJlZCBpbnNpZGUgYW4gXCJpZiAoZ29vZy5ERUJVRylcIiBjb25kaXRpb25hbFxuICogYmVjYXVzZSB0aGV5IGFyZSBnZW5lcmFsbHkgdXNlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIGFuZCBpdCBpcyBkaWZmaWN1bHRcbiAqIGZvciB0aGUgSlNDb21waWxlciB0byBzdGF0aWNhbGx5IGRldGVybWluZSB3aGV0aGVyIHRoZXkgYXJlIHVzZWQuXG4gKi9cbmdvb2cuREVCVUcgPSB0cnVlO1xuXG5cbi8qKlxuICogQGRlZmluZSB7c3RyaW5nfSBMT0NBTEUgZGVmaW5lcyB0aGUgbG9jYWxlIGJlaW5nIHVzZWQgZm9yIGNvbXBpbGF0aW9uLiBJdCBpc1xuICogdXNlZCB0byBzZWxlY3QgbG9jYWxlIHNwZWNpZmljIGRhdGEgdG8gYmUgY29tcGlsZWQgaW4ganMgYmluYXJ5LiBCVUlMRCBydWxlXG4gKiBjYW4gc3BlY2lmeSB0aGlzIHZhbHVlIGJ5IFwiLS1kZWZpbmUgZ29vZy5MT0NBTEU9PGxvY2FsZV9uYW1lPlwiIGFzIEpTQ29tcGlsZXJcbiAqIG9wdGlvbi5cbiAqXG4gKiBUYWtlIGludG8gYWNjb3VudCB0aGF0IHRoZSBsb2NhbGUgY29kZSBmb3JtYXQgaXMgaW1wb3J0YW50LiBZb3Ugc2hvdWxkIHVzZVxuICogdGhlIGNhbm9uaWNhbCBVbmljb2RlIGZvcm1hdCB3aXRoIGh5cGhlbiBhcyBhIGRlbGltaXRlci4gTGFuZ3VhZ2UgbXVzdCBiZVxuICogbG93ZXJjYXNlLCBMYW5ndWFnZSBTY3JpcHQgLSBDYXBpdGFsaXplZCwgUmVnaW9uIC0gVVBQRVJDQVNFLlxuICogVGhlcmUgYXJlIGZldyBleGFtcGxlczogcHQtQlIsIGVuLCBlbi1VUywgc3ItTGF0aW4tQk8sIHpoLUhhbnMtQ04uXG4gKlxuICogU2VlIG1vcmUgaW5mbyBhYm91dCBsb2NhbGUgY29kZXMgaGVyZTpcbiAqIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1LyNVbmljb2RlX0xhbmd1YWdlX2FuZF9Mb2NhbGVfSWRlbnRpZmllcnNcbiAqXG4gKiBGb3IgbGFuZ3VhZ2UgY29kZXMgeW91IHNob3VsZCB1c2UgdmFsdWVzIGRlZmluZWQgYnkgSVNPIDY5My0xLiBTZWUgaXQgaGVyZVxuICogaHR0cDovL3d3dy53My5vcmcvV0FJL0VSL0lHL2VydC9pc282MzkuaHRtLiBUaGVyZSBpcyBvbmx5IG9uZSBleGNlcHRpb24gZnJvbVxuICogdGhpcyBydWxlOiB0aGUgSGVicmV3IGxhbmd1YWdlLiBGb3IgbGVnYWN5IHJlYXNvbnMgdGhlIG9sZCBjb2RlIChpdykgc2hvdWxkXG4gKiBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIG5ldyBjb2RlIChoZSksIHNlZSBodHRwOi8vd2lraS9NYWluL0lJSVN5bm9ueW1zLlxuICovXG5nb29nLkxPQ0FMRSA9ICdlbic7ICAvLyBkZWZhdWx0IHRvIGVuXG5cblxuLyoqXG4gKiBDcmVhdGVzIG9iamVjdCBzdHVicyBmb3IgYSBuYW1lc3BhY2UuICBUaGUgcHJlc2VuY2Ugb2Ygb25lIG9yIG1vcmVcbiAqIGdvb2cucHJvdmlkZSgpIGNhbGxzIGluZGljYXRlIHRoYXQgdGhlIGZpbGUgZGVmaW5lcyB0aGUgZ2l2ZW5cbiAqIG9iamVjdHMvbmFtZXNwYWNlcy4gIEJ1aWxkIHRvb2xzIGFsc28gc2NhbiBmb3IgcHJvdmlkZS9yZXF1aXJlIHN0YXRlbWVudHNcbiAqIHRvIGRpc2Nlcm4gZGVwZW5kZW5jaWVzLCBidWlsZCBkZXBlbmRlbmN5IGZpbGVzIChzZWUgZGVwcy5qcyksIGV0Yy5cbiAqIEBzZWUgZ29vZy5yZXF1aXJlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lc3BhY2UgcHJvdmlkZWQgYnkgdGhpcyBmaWxlIGluIHRoZSBmb3JtXG4gKiAgICAgXCJnb29nLnBhY2thZ2UucGFydFwiLlxuICovXG5nb29nLnByb3ZpZGUgPSBmdW5jdGlvbihuYW1lKSB7XG4gIGlmICghQ09NUElMRUQpIHtcbiAgICAvLyBFbnN1cmUgdGhhdCB0aGUgc2FtZSBuYW1lc3BhY2UgaXNuJ3QgcHJvdmlkZWQgdHdpY2UuIFRoaXMgaXMgaW50ZW5kZWRcbiAgICAvLyB0byB0ZWFjaCBuZXcgZGV2ZWxvcGVycyB0aGF0ICdnb29nLnByb3ZpZGUnIGlzIGVmZmVjdGl2ZWx5IGEgdmFyaWFibGVcbiAgICAvLyBkZWNsYXJhdGlvbi4gQW5kIHdoZW4gSlNDb21waWxlciB0cmFuc2Zvcm1zIGdvb2cucHJvdmlkZSBpbnRvIGEgcmVhbFxuICAgIC8vIHZhcmlhYmxlIGRlY2xhcmF0aW9uLCB0aGUgY29tcGlsZWQgSlMgc2hvdWxkIHdvcmsgdGhlIHNhbWUgYXMgdGhlIHJhd1xuICAgIC8vIEpTLS1ldmVuIHdoZW4gdGhlIHJhdyBKUyB1c2VzIGdvb2cucHJvdmlkZSBpbmNvcnJlY3RseS5cbiAgICBpZiAoZ29vZy5pc1Byb3ZpZGVkXyhuYW1lKSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ05hbWVzcGFjZSBcIicgKyBuYW1lICsgJ1wiIGFscmVhZHkgZGVjbGFyZWQuJyk7XG4gICAgfVxuICAgIGRlbGV0ZSBnb29nLmltcGxpY2l0TmFtZXNwYWNlc19bbmFtZV07XG5cbiAgICB2YXIgbmFtZXNwYWNlID0gbmFtZTtcbiAgICB3aGlsZSAoKG5hbWVzcGFjZSA9IG5hbWVzcGFjZS5zdWJzdHJpbmcoMCwgbmFtZXNwYWNlLmxhc3RJbmRleE9mKCcuJykpKSkge1xuICAgICAgaWYgKGdvb2cuZ2V0T2JqZWN0QnlOYW1lKG5hbWVzcGFjZSkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBnb29nLmltcGxpY2l0TmFtZXNwYWNlc19bbmFtZXNwYWNlXSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgZ29vZy5leHBvcnRQYXRoXyhuYW1lKTtcbn07XG5cblxuLyoqXG4gKiBNYXJrcyB0aGF0IHRoZSBjdXJyZW50IGZpbGUgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdGVzdGluZywgYW5kIG5ldmVyIGZvclxuICogbGl2ZSBjb2RlIGluIHByb2R1Y3Rpb24uXG4gKiBAcGFyYW0ge3N0cmluZz19IG9wdF9tZXNzYWdlIE9wdGlvbmFsIG1lc3NhZ2UgdG8gYWRkIHRvIHRoZSBlcnJvciB0aGF0J3NcbiAqICAgICByYWlzZWQgd2hlbiB1c2VkIGluIHByb2R1Y3Rpb24gY29kZS5cbiAqL1xuZ29vZy5zZXRUZXN0T25seSA9IGZ1bmN0aW9uKG9wdF9tZXNzYWdlKSB7XG4gIGlmIChDT01QSUxFRCAmJiAhZ29vZy5ERUJVRykge1xuICAgIG9wdF9tZXNzYWdlID0gb3B0X21lc3NhZ2UgfHwgJyc7XG4gICAgdGhyb3cgRXJyb3IoJ0ltcG9ydGluZyB0ZXN0LW9ubHkgY29kZSBpbnRvIG5vbi1kZWJ1ZyBlbnZpcm9ubWVudCcgK1xuICAgICAgICAgICAgICAgIG9wdF9tZXNzYWdlID8gJzogJyArIG9wdF9tZXNzYWdlIDogJy4nKTtcbiAgfVxufTtcblxuXG5pZiAoIUNPTVBJTEVEKSB7XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBnaXZlbiBuYW1lIGhhcyBiZWVuIGdvb2cucHJvdmlkZWQuIFRoaXMgd2lsbCByZXR1cm4gZmFsc2UgZm9yXG4gICAqIG5hbWVzIHRoYXQgYXJlIGF2YWlsYWJsZSBvbmx5IGFzIGltcGxpY2l0IG5hbWVzcGFjZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIG9iamVjdCB0byBsb29rIGZvci5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgbmFtZSBoYXMgYmVlbiBwcm92aWRlZC5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdvb2cuaXNQcm92aWRlZF8gPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuICFnb29nLmltcGxpY2l0TmFtZXNwYWNlc19bbmFtZV0gJiYgISFnb29nLmdldE9iamVjdEJ5TmFtZShuYW1lKTtcbiAgfTtcblxuICAvKipcbiAgICogTmFtZXNwYWNlcyBpbXBsaWNpdGx5IGRlZmluZWQgYnkgZ29vZy5wcm92aWRlLiBGb3IgZXhhbXBsZSxcbiAgICogZ29vZy5wcm92aWRlKCdnb29nLmV2ZW50cy5FdmVudCcpIGltcGxpY2l0bHkgZGVjbGFyZXNcbiAgICogdGhhdCAnZ29vZycgYW5kICdnb29nLmV2ZW50cycgbXVzdCBiZSBuYW1lc3BhY2VzLlxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ29vZy5pbXBsaWNpdE5hbWVzcGFjZXNfID0ge307XG59XG5cblxuLyoqXG4gKiBCdWlsZHMgYW4gb2JqZWN0IHN0cnVjdHVyZSBmb3IgdGhlIHByb3ZpZGVkIG5hbWVzcGFjZSBwYXRoLFxuICogZW5zdXJpbmcgdGhhdCBuYW1lcyB0aGF0IGFscmVhZHkgZXhpc3QgYXJlIG5vdCBvdmVyd3JpdHRlbi4gRm9yXG4gKiBleGFtcGxlOlxuICogXCJhLmIuY1wiIC0+IGEgPSB7fTthLmI9e307YS5iLmM9e307XG4gKiBVc2VkIGJ5IGdvb2cucHJvdmlkZSBhbmQgZ29vZy5leHBvcnRTeW1ib2wuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBuYW1lIG9mIHRoZSBvYmplY3QgdGhhdCB0aGlzIGZpbGUgZGVmaW5lcy5cbiAqIEBwYXJhbSB7Kj19IG9wdF9vYmplY3QgdGhlIG9iamVjdCB0byBleHBvc2UgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aC5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0X29iamVjdFRvRXhwb3J0VG8gVGhlIG9iamVjdCB0byBhZGQgdGhlIHBhdGggdG87IGRlZmF1bHRcbiAqICAgICBpcyB8Z29vZy5nbG9iYWx8LlxuICogQHByaXZhdGVcbiAqL1xuZ29vZy5leHBvcnRQYXRoXyA9IGZ1bmN0aW9uKG5hbWUsIG9wdF9vYmplY3QsIG9wdF9vYmplY3RUb0V4cG9ydFRvKSB7XG4gIHZhciBwYXJ0cyA9IG5hbWUuc3BsaXQoJy4nKTtcbiAgdmFyIGN1ciA9IG9wdF9vYmplY3RUb0V4cG9ydFRvIHx8IGdvb2cuZ2xvYmFsO1xuXG4gIC8vIEludGVybmV0IEV4cGxvcmVyIGV4aGliaXRzIHN0cmFuZ2UgYmVoYXZpb3Igd2hlbiB0aHJvd2luZyBlcnJvcnMgZnJvbVxuICAvLyBtZXRob2RzIGV4dGVybmVkIGluIHRoaXMgbWFubmVyLiAgU2VlIHRoZSB0ZXN0RXhwb3J0U3ltYm9sRXhjZXB0aW9ucyBpblxuICAvLyBiYXNlX3Rlc3QuaHRtbCBmb3IgYW4gZXhhbXBsZS5cbiAgaWYgKCEocGFydHNbMF0gaW4gY3VyKSAmJiBjdXIuZXhlY1NjcmlwdCkge1xuICAgIGN1ci5leGVjU2NyaXB0KCd2YXIgJyArIHBhcnRzWzBdKTtcbiAgfVxuXG4gIC8vIENlcnRhaW4gYnJvd3NlcnMgY2Fubm90IHBhcnNlIGNvZGUgaW4gdGhlIGZvcm0gZm9yKChhIGluIGIpOyBjOyk7XG4gIC8vIFRoaXMgcGF0dGVybiBpcyBwcm9kdWNlZCBieSB0aGUgSlNDb21waWxlciB3aGVuIGl0IGNvbGxhcHNlcyB0aGVcbiAgLy8gc3RhdGVtZW50IGFib3ZlIGludG8gdGhlIGNvbmRpdGlvbmFsIGxvb3AgYmVsb3cuIFRvIHByZXZlbnQgdGhpcyBmcm9tXG4gIC8vIGhhcHBlbmluZywgdXNlIGEgZm9yLWxvb3AgYW5kIHJlc2VydmUgdGhlIGluaXQgbG9naWMgYXMgYmVsb3cuXG5cbiAgLy8gUGFyZW50aGVzZXMgYWRkZWQgdG8gZWxpbWluYXRlIHN0cmljdCBKUyB3YXJuaW5nIGluIEZpcmVmb3guXG4gIGZvciAodmFyIHBhcnQ7IHBhcnRzLmxlbmd0aCAmJiAocGFydCA9IHBhcnRzLnNoaWZ0KCkpOykge1xuICAgIGlmICghcGFydHMubGVuZ3RoICYmIGdvb2cuaXNEZWYob3B0X29iamVjdCkpIHtcbiAgICAgIC8vIGxhc3QgcGFydCBhbmQgd2UgaGF2ZSBhbiBvYmplY3Q7IHVzZSBpdFxuICAgICAgY3VyW3BhcnRdID0gb3B0X29iamVjdDtcbiAgICB9IGVsc2UgaWYgKGN1cltwYXJ0XSkge1xuICAgICAgY3VyID0gY3VyW3BhcnRdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXIgPSBjdXJbcGFydF0gPSB7fTtcbiAgICB9XG4gIH1cbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCBiYXNlZCBvbiBpdHMgZnVsbHkgcXVhbGlmaWVkIGV4dGVybmFsIG5hbWUuICBJZiB5b3UgYXJlXG4gKiB1c2luZyBhIGNvbXBpbGF0aW9uIHBhc3MgdGhhdCByZW5hbWVzIHByb3BlcnR5IG5hbWVzIGJld2FyZSB0aGF0IHVzaW5nIHRoaXNcbiAqIGZ1bmN0aW9uIHdpbGwgbm90IGZpbmQgcmVuYW1lZCBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZS5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0X29iaiBUaGUgb2JqZWN0IHdpdGhpbiB3aGljaCB0byBsb29rOyBkZWZhdWx0IGlzXG4gKiAgICAgfGdvb2cuZ2xvYmFsfC5cbiAqIEByZXR1cm4gez99IFRoZSB2YWx1ZSAob2JqZWN0IG9yIHByaW1pdGl2ZSkgb3IsIGlmIG5vdCBmb3VuZCwgbnVsbC5cbiAqL1xuZ29vZy5nZXRPYmplY3RCeU5hbWUgPSBmdW5jdGlvbihuYW1lLCBvcHRfb2JqKSB7XG4gIHZhciBwYXJ0cyA9IG5hbWUuc3BsaXQoJy4nKTtcbiAgdmFyIGN1ciA9IG9wdF9vYmogfHwgZ29vZy5nbG9iYWw7XG4gIGZvciAodmFyIHBhcnQ7IHBhcnQgPSBwYXJ0cy5zaGlmdCgpOyApIHtcbiAgICBpZiAoZ29vZy5pc0RlZkFuZE5vdE51bGwoY3VyW3BhcnRdKSkge1xuICAgICAgY3VyID0gY3VyW3BhcnRdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGN1cjtcbn07XG5cblxuLyoqXG4gKiBHbG9iYWxpemVzIGEgd2hvbGUgbmFtZXNwYWNlLCBzdWNoIGFzIGdvb2cgb3IgZ29vZy5sYW5nLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG5hbWVzcGFjZSB0byBnbG9iYWxpemUuXG4gKiBAcGFyYW0ge09iamVjdD19IG9wdF9nbG9iYWwgVGhlIG9iamVjdCB0byBhZGQgdGhlIHByb3BlcnRpZXMgdG8uXG4gKiBAZGVwcmVjYXRlZCBQcm9wZXJ0aWVzIG1heSBiZSBleHBsaWNpdGx5IGV4cG9ydGVkIHRvIHRoZSBnbG9iYWwgc2NvcGUsIGJ1dFxuICogICAgIHRoaXMgc2hvdWxkIG5vIGxvbmdlciBiZSBkb25lIGluIGJ1bGsuXG4gKi9cbmdvb2cuZ2xvYmFsaXplID0gZnVuY3Rpb24ob2JqLCBvcHRfZ2xvYmFsKSB7XG4gIHZhciBnbG9iYWwgPSBvcHRfZ2xvYmFsIHx8IGdvb2cuZ2xvYmFsO1xuICBmb3IgKHZhciB4IGluIG9iaikge1xuICAgIGdsb2JhbFt4XSA9IG9ialt4XTtcbiAgfVxufTtcblxuXG4vKipcbiAqIEFkZHMgYSBkZXBlbmRlbmN5IGZyb20gYSBmaWxlIHRvIHRoZSBmaWxlcyBpdCByZXF1aXJlcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxQYXRoIFRoZSBwYXRoIHRvIHRoZSBqcyBmaWxlLlxuICogQHBhcmFtIHtBcnJheX0gcHJvdmlkZXMgQW4gYXJyYXkgb2Ygc3RyaW5ncyB3aXRoIHRoZSBuYW1lcyBvZiB0aGUgb2JqZWN0c1xuICogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBmaWxlIHByb3ZpZGVzLlxuICogQHBhcmFtIHtBcnJheX0gcmVxdWlyZXMgQW4gYXJyYXkgb2Ygc3RyaW5ncyB3aXRoIHRoZSBuYW1lcyBvZiB0aGUgb2JqZWN0c1xuICogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBmaWxlIHJlcXVpcmVzLlxuICovXG5nb29nLmFkZERlcGVuZGVuY3kgPSBmdW5jdGlvbihyZWxQYXRoLCBwcm92aWRlcywgcmVxdWlyZXMpIHtcbiAgaWYgKCFDT01QSUxFRCkge1xuICAgIHZhciBwcm92aWRlLCByZXF1aXJlO1xuICAgIHZhciBwYXRoID0gcmVsUGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgdmFyIGRlcHMgPSBnb29nLmRlcGVuZGVuY2llc187XG4gICAgZm9yICh2YXIgaSA9IDA7IHByb3ZpZGUgPSBwcm92aWRlc1tpXTsgaSsrKSB7XG4gICAgICBkZXBzLm5hbWVUb1BhdGhbcHJvdmlkZV0gPSBwYXRoO1xuICAgICAgaWYgKCEocGF0aCBpbiBkZXBzLnBhdGhUb05hbWVzKSkge1xuICAgICAgICBkZXBzLnBhdGhUb05hbWVzW3BhdGhdID0ge307XG4gICAgICB9XG4gICAgICBkZXBzLnBhdGhUb05hbWVzW3BhdGhdW3Byb3ZpZGVdID0gdHJ1ZTtcbiAgICB9XG4gICAgZm9yICh2YXIgaiA9IDA7IHJlcXVpcmUgPSByZXF1aXJlc1tqXTsgaisrKSB7XG4gICAgICBpZiAoIShwYXRoIGluIGRlcHMucmVxdWlyZXMpKSB7XG4gICAgICAgIGRlcHMucmVxdWlyZXNbcGF0aF0gPSB7fTtcbiAgICAgIH1cbiAgICAgIGRlcHMucmVxdWlyZXNbcGF0aF1bcmVxdWlyZV0gPSB0cnVlO1xuICAgIH1cbiAgfVxufTtcblxuXG5cblxuLy8gTk9URShubmF6ZSk6IFRoZSBkZWJ1ZyBET00gbG9hZGVyIHdhcyBpbmNsdWRlZCBpbiBiYXNlLmpzIGFzIGFuIG9yaWduYWxcbi8vIHdheSB0byBkbyBcImRlYnVnLW1vZGVcIiBkZXZlbG9wbWVudC4gIFRoZSBkZXBlbmRlbmN5IHN5c3RlbSBjYW4gc29tZXRpbWVzXG4vLyBiZSBjb25mdXNpbmcsIGFzIGNhbiB0aGUgZGVidWcgRE9NIGxvYWRlcidzIGFzeW5jcm9ub3VzIG5hdHVyZS5cbi8vXG4vLyBXaXRoIHRoZSBET00gbG9hZGVyLCBhIGNhbGwgdG8gZ29vZy5yZXF1aXJlKCkgaXMgbm90IGJsb2NraW5nIC0tIHRoZVxuLy8gc2NyaXB0IHdpbGwgbm90IGxvYWQgdW50aWwgc29tZSBwb2ludCBhZnRlciB0aGUgY3VycmVudCBzY3JpcHQuICBJZiBhXG4vLyBuYW1lc3BhY2UgaXMgbmVlZGVkIGF0IHJ1bnRpbWUsIGl0IG5lZWRzIHRvIGJlIGRlZmluZWQgaW4gYSBwcmV2aW91c1xuLy8gc2NyaXB0LCBvciBsb2FkZWQgdmlhIHJlcXVpcmUoKSB3aXRoIGl0cyByZWdpc3RlcmVkIGRlcGVuZGVuY2llcy5cbi8vIFVzZXItZGVmaW5lZCBuYW1lc3BhY2VzIG1heSBuZWVkIHRoZWlyIG93biBkZXBzIGZpbGUuICBTZWUgaHR0cDovL2dvL2pzX2RlcHMsXG4vLyBodHRwOi8vZ28vZ2VuanNkZXBzLCBvciwgZXh0ZXJuYWxseSwgRGVwc1dyaXRlci5cbi8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vY2xvc3VyZS9saWJyYXJ5L2RvY3MvZGVwc3dyaXRlci5odG1sXG4vL1xuLy8gQmVjYXVzZSBvZiBsZWdhY3kgY2xpZW50cywgdGhlIERPTSBsb2FkZXIgY2FuJ3QgYmUgZWFzaWx5IHJlbW92ZWQgZnJvbVxuLy8gYmFzZS5qcy4gIFdvcmsgaXMgYmVpbmcgZG9uZSB0byBtYWtlIGl0IGRpc2FibGVhYmxlIG9yIHJlcGxhY2VhYmxlIGZvclxuLy8gZGlmZmVyZW50IGVudmlyb25tZW50cyAoRE9NLWxlc3MgSmF2YVNjcmlwdCBpbnRlcnByZXRlcnMgbGlrZSBSaGlubyBvciBWOCxcbi8vIGZvciBleGFtcGxlKS4gU2VlIGJvb3RzdHJhcC8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5cblxuLyoqXG4gKiBAZGVmaW5lIHtib29sZWFufSBXaGV0aGVyIHRvIGVuYWJsZSB0aGUgZGVidWcgbG9hZGVyLlxuICpcbiAqIElmIGVuYWJsZWQsIGEgY2FsbCB0byBnb29nLnJlcXVpcmUoKSB3aWxsIGF0dGVtcHQgdG8gbG9hZCB0aGUgbmFtZXNwYWNlIGJ5XG4gKiBhcHBlbmRpbmcgYSBzY3JpcHQgdGFnIHRvIHRoZSBET00gKGlmIHRoZSBuYW1lc3BhY2UgaGFzIGJlZW4gcmVnaXN0ZXJlZCkuXG4gKlxuICogSWYgZGlzYWJsZWQsIGdvb2cucmVxdWlyZSgpIHdpbGwgc2ltcGx5IGFzc2VydCB0aGF0IHRoZSBuYW1lc3BhY2UgaGFzIGJlZW5cbiAqIHByb3ZpZGVkIChhbmQgZGVwZW5kIG9uIHRoZSBmYWN0IHRoYXQgc29tZSBvdXRzaWRlIHRvb2wgY29ycmVjdGx5IG9yZGVyZWRcbiAqIHRoZSBzY3JpcHQpLlxuICovXG5nb29nLkVOQUJMRV9ERUJVR19MT0FERVIgPSB0cnVlO1xuXG5cbi8qKlxuICogSW1wbGVtZW50cyBhIHN5c3RlbSBmb3IgdGhlIGR5bmFtaWMgcmVzb2x1dGlvbiBvZiBkZXBlbmRlbmNpZXNcbiAqIHRoYXQgd29ya3MgaW4gcGFyYWxsZWwgd2l0aCB0aGUgQlVJTEQgc3lzdGVtLiBOb3RlIHRoYXQgYWxsIGNhbGxzXG4gKiB0byBnb29nLnJlcXVpcmUgd2lsbCBiZSBzdHJpcHBlZCBieSB0aGUgSlNDb21waWxlciB3aGVuIHRoZVxuICogLS1jbG9zdXJlX3Bhc3Mgb3B0aW9uIGlzIHVzZWQuXG4gKiBAc2VlIGdvb2cucHJvdmlkZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZXNwYWNlIHRvIGluY2x1ZGUgKGFzIHdhcyBnaXZlbiBpbiBnb29nLnByb3ZpZGUoKSlcbiAqICAgICBpbiB0aGUgZm9ybSBcImdvb2cucGFja2FnZS5wYXJ0XCIuXG4gKi9cbmdvb2cucmVxdWlyZSA9IGZ1bmN0aW9uKG5hbWUpIHtcblxuICAvLyBpZiB0aGUgb2JqZWN0IGFscmVhZHkgZXhpc3RzIHdlIGRvIG5vdCBuZWVkIGRvIGRvIGFueXRoaW5nXG4gIC8vIFRPRE8oYXJ2KTogSWYgd2Ugc3RhcnQgdG8gc3VwcG9ydCByZXF1aXJlIGJhc2VkIG9uIGZpbGUgbmFtZSB0aGlzIGhhc1xuICAvLyAgICAgICAgICAgIHRvIGNoYW5nZVxuICAvLyBUT0RPKGFydik6IElmIHdlIGFsbG93IGdvb2cuZm9vLiogdGhpcyBoYXMgdG8gY2hhbmdlXG4gIC8vIFRPRE8oYXJ2KTogSWYgd2UgaW1wbGVtZW50IGR5bmFtaWMgbG9hZCBhZnRlciBwYWdlIGxvYWQgd2Ugc2hvdWxkIHByb2JhYmx5XG4gIC8vICAgICAgICAgICAgbm90IHJlbW92ZSB0aGlzIGNvZGUgZm9yIHRoZSBjb21waWxlZCBvdXRwdXRcbiAgaWYgKCFDT01QSUxFRCkge1xuICAgIGlmIChnb29nLmlzUHJvdmlkZWRfKG5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGdvb2cuRU5BQkxFX0RFQlVHX0xPQURFUikge1xuICAgICAgdmFyIHBhdGggPSBnb29nLmdldFBhdGhGcm9tRGVwc18obmFtZSk7XG4gICAgICBpZiAocGF0aCkge1xuICAgICAgICBnb29nLmluY2x1ZGVkX1twYXRoXSA9IHRydWU7XG4gICAgICAgIGdvb2cud3JpdGVTY3JpcHRzXygpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGVycm9yTWVzc2FnZSA9ICdnb29nLnJlcXVpcmUgY291bGQgbm90IGZpbmQ6ICcgKyBuYW1lO1xuICAgIGlmIChnb29nLmdsb2JhbC5jb25zb2xlKSB7XG4gICAgICBnb29nLmdsb2JhbC5jb25zb2xlWydlcnJvciddKGVycm9yTWVzc2FnZSk7XG4gICAgfVxuXG5cbiAgICAgIHRocm93IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cbiAgfVxufTtcblxuXG4vKipcbiAqIFBhdGggZm9yIGluY2x1ZGVkIHNjcmlwdHNcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmdvb2cuYmFzZVBhdGggPSAnJztcblxuXG4vKipcbiAqIEEgaG9vayBmb3Igb3ZlcnJpZGluZyB0aGUgYmFzZSBwYXRoLlxuICogQHR5cGUge3N0cmluZ3x1bmRlZmluZWR9XG4gKi9cbmdvb2cuZ2xvYmFsLkNMT1NVUkVfQkFTRV9QQVRIO1xuXG5cbi8qKlxuICogV2hldGhlciB0byB3cml0ZSBvdXQgQ2xvc3VyZSdzIGRlcHMgZmlsZS4gQnkgZGVmYXVsdCxcbiAqIHRoZSBkZXBzIGFyZSB3cml0dGVuLlxuICogQHR5cGUge2Jvb2xlYW58dW5kZWZpbmVkfVxuICovXG5nb29nLmdsb2JhbC5DTE9TVVJFX05PX0RFUFM7XG5cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRvIGltcG9ydCBhIHNpbmdsZSBzY3JpcHQuIFRoaXMgaXMgbWVhbnQgdG8gYmUgb3ZlcnJpZGRlbiB3aGVuXG4gKiBDbG9zdXJlIGlzIGJlaW5nIHJ1biBpbiBub24tSFRNTCBjb250ZXh0cywgc3VjaCBhcyB3ZWIgd29ya2Vycy4gSXQncyBkZWZpbmVkXG4gKiBpbiB0aGUgZ2xvYmFsIHNjb3BlIHNvIHRoYXQgaXQgY2FuIGJlIHNldCBiZWZvcmUgYmFzZS5qcyBpcyBsb2FkZWQsIHdoaWNoXG4gKiBhbGxvd3MgZGVwcy5qcyB0byBiZSBpbXBvcnRlZCBwcm9wZXJseS5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gaXMgcGFzc2VkIHRoZSBzY3JpcHQgc291cmNlLCB3aGljaCBpcyBhIHJlbGF0aXZlIFVSSS4gSXQgc2hvdWxkXG4gKiByZXR1cm4gdHJ1ZSBpZiB0aGUgc2NyaXB0IHdhcyBpbXBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5nb29nLmdsb2JhbC5DTE9TVVJFX0lNUE9SVF9TQ1JJUFQ7XG5cblxuLyoqXG4gKiBOdWxsIGZ1bmN0aW9uIHVzZWQgZm9yIGRlZmF1bHQgdmFsdWVzIG9mIGNhbGxiYWNrcywgZXRjLlxuICogQHJldHVybiB7dm9pZH0gTm90aGluZy5cbiAqL1xuZ29vZy5udWxsRnVuY3Rpb24gPSBmdW5jdGlvbigpIHt9O1xuXG5cbi8qKlxuICogVGhlIGlkZW50aXR5IGZ1bmN0aW9uLiBSZXR1cm5zIGl0cyBmaXJzdCBhcmd1bWVudC5cbiAqXG4gKiBAcGFyYW0geyo9fSBvcHRfcmV0dXJuVmFsdWUgVGhlIHNpbmdsZSB2YWx1ZSB0aGF0IHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBAcGFyYW0gey4uLip9IHZhcl9hcmdzIE9wdGlvbmFsIHRyYWlsaW5nIGFyZ3VtZW50cy4gVGhlc2UgYXJlIGlnbm9yZWQuXG4gKiBAcmV0dXJuIHs/fSBUaGUgZmlyc3QgYXJndW1lbnQuIFdlIGNhbid0IGtub3cgdGhlIHR5cGUgLS0ganVzdCBwYXNzIGl0IGFsb25nXG4gKiAgICAgIHdpdGhvdXQgdHlwZS5cbiAqIEBkZXByZWNhdGVkIFVzZSBnb29nLmZ1bmN0aW9ucy5pZGVudGl0eSBpbnN0ZWFkLlxuICovXG5nb29nLmlkZW50aXR5RnVuY3Rpb24gPSBmdW5jdGlvbihvcHRfcmV0dXJuVmFsdWUsIHZhcl9hcmdzKSB7XG4gIHJldHVybiBvcHRfcmV0dXJuVmFsdWU7XG59O1xuXG5cbi8qKlxuICogV2hlbiBkZWZpbmluZyBhIGNsYXNzIEZvbyB3aXRoIGFuIGFic3RyYWN0IG1ldGhvZCBiYXIoKSwgeW91IGNhbiBkbzpcbiAqXG4gKiBGb28ucHJvdG90eXBlLmJhciA9IGdvb2cuYWJzdHJhY3RNZXRob2RcbiAqXG4gKiBOb3cgaWYgYSBzdWJjbGFzcyBvZiBGb28gZmFpbHMgdG8gb3ZlcnJpZGUgYmFyKCksIGFuIGVycm9yXG4gKiB3aWxsIGJlIHRocm93biB3aGVuIGJhcigpIGlzIGludm9rZWQuXG4gKlxuICogTm90ZTogVGhpcyBkb2VzIG5vdCB0YWtlIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBvdmVycmlkZSBhc1xuICogYW4gYXJndW1lbnQgYmVjYXVzZSB0aGF0IHdvdWxkIG1ha2UgaXQgbW9yZSBkaWZmaWN1bHQgdG8gb2JmdXNjYXRlXG4gKiBvdXIgSmF2YVNjcmlwdCBjb2RlLlxuICpcbiAqIEB0eXBlIHshRnVuY3Rpb259XG4gKiBAdGhyb3dzIHtFcnJvcn0gd2hlbiBpbnZva2VkIHRvIGluZGljYXRlIHRoZSBtZXRob2Qgc2hvdWxkIGJlXG4gKiAgIG92ZXJyaWRkZW4uXG4gKi9cbmdvb2cuYWJzdHJhY3RNZXRob2QgPSBmdW5jdGlvbigpIHtcbiAgdGhyb3cgRXJyb3IoJ3VuaW1wbGVtZW50ZWQgYWJzdHJhY3QgbWV0aG9kJyk7XG59O1xuXG5cbi8qKlxuICogQWRkcyBhIHtAY29kZSBnZXRJbnN0YW5jZX0gc3RhdGljIG1ldGhvZCB0aGF0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgaW5zdGFuY2VcbiAqIG9iamVjdC5cbiAqIEBwYXJhbSB7IUZ1bmN0aW9ufSBjdG9yIFRoZSBjb25zdHJ1Y3RvciBmb3IgdGhlIGNsYXNzIHRvIGFkZCB0aGUgc3RhdGljXG4gKiAgICAgbWV0aG9kIHRvLlxuICovXG5nb29nLmFkZFNpbmdsZXRvbkdldHRlciA9IGZ1bmN0aW9uKGN0b3IpIHtcbiAgY3Rvci5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChjdG9yLmluc3RhbmNlXykge1xuICAgICAgcmV0dXJuIGN0b3IuaW5zdGFuY2VfO1xuICAgIH1cbiAgICBpZiAoZ29vZy5ERUJVRykge1xuICAgICAgLy8gTk9URTogSlNDb21waWxlciBjYW4ndCBvcHRpbWl6ZSBhd2F5IEFycmF5I3B1c2guXG4gICAgICBnb29nLmluc3RhbnRpYXRlZFNpbmdsZXRvbnNfW2dvb2cuaW5zdGFudGlhdGVkU2luZ2xldG9uc18ubGVuZ3RoXSA9IGN0b3I7XG4gICAgfVxuICAgIHJldHVybiBjdG9yLmluc3RhbmNlXyA9IG5ldyBjdG9yO1xuICB9O1xufTtcblxuXG4vKipcbiAqIEFsbCBzaW5nbGV0b24gY2xhc3NlcyB0aGF0IGhhdmUgYmVlbiBpbnN0YW50aWF0ZWQsIGZvciB0ZXN0aW5nLiBEb24ndCByZWFkXG4gKiBpdCBkaXJlY3RseSwgdXNlIHRoZSB7QGNvZGUgZ29vZy50ZXN0aW5nLnNpbmdsZXRvbn0gbW9kdWxlLiBUaGUgY29tcGlsZXJcbiAqIHJlbW92ZXMgdGhpcyB2YXJpYWJsZSBpZiB1bnVzZWQuXG4gKiBAdHlwZSB7IUFycmF5LjwhRnVuY3Rpb24+fVxuICogQHByaXZhdGVcbiAqL1xuZ29vZy5pbnN0YW50aWF0ZWRTaW5nbGV0b25zXyA9IFtdO1xuXG5cbmlmICghQ09NUElMRUQgJiYgZ29vZy5FTkFCTEVfREVCVUdfTE9BREVSKSB7XG4gIC8qKlxuICAgKiBPYmplY3QgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHVybHMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBhZGRlZC4gVGhpc1xuICAgKiByZWNvcmQgYWxsb3dzIHRoZSBwcmV2ZW50aW9uIG9mIGNpcmN1bGFyIGRlcGVuZGVuY2llcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdvb2cuaW5jbHVkZWRfID0ge307XG5cblxuICAvKipcbiAgICogVGhpcyBvYmplY3QgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIGRlcGVuZGVuY2llcyBhbmQgb3RoZXIgZGF0YSB0aGF0IGlzXG4gICAqIHVzZWQgZm9yIGxvYWRpbmcgc2NyaXB0c1xuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgZ29vZy5kZXBlbmRlbmNpZXNfID0ge1xuICAgIHBhdGhUb05hbWVzOiB7fSwgLy8gMSB0byBtYW55XG4gICAgbmFtZVRvUGF0aDoge30sIC8vIDEgdG8gMVxuICAgIHJlcXVpcmVzOiB7fSwgLy8gMSB0byBtYW55XG4gICAgLy8gdXNlZCB3aGVuIHJlc29sdmluZyBkZXBlbmRlbmNpZXMgdG8gcHJldmVudCB1cyBmcm9tXG4gICAgLy8gdmlzaXRpbmcgdGhlIGZpbGUgdHdpY2VcbiAgICB2aXNpdGVkOiB7fSxcbiAgICB3cml0dGVuOiB7fSAvLyB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygc2NyaXB0IGZpbGVzIHdlIGhhdmUgd3JpdHRlblxuICB9O1xuXG5cbiAgLyoqXG4gICAqIFRyaWVzIHRvIGRldGVjdCB3aGV0aGVyIGlzIGluIHRoZSBjb250ZXh0IG9mIGFuIEhUTUwgZG9jdW1lbnQuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgaXQgbG9va3MgbGlrZSBIVE1MIGRvY3VtZW50LlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ29vZy5pbkh0bWxEb2N1bWVudF8gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZG9jID0gZ29vZy5nbG9iYWwuZG9jdW1lbnQ7XG4gICAgcmV0dXJuIHR5cGVvZiBkb2MgIT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgJ3dyaXRlJyBpbiBkb2M7ICAvLyBYVUxEb2N1bWVudCBtaXNzZXMgd3JpdGUuXG4gIH07XG5cblxuICAvKipcbiAgICogVHJpZXMgdG8gZGV0ZWN0IHRoZSBiYXNlIHBhdGggb2YgdGhlIGJhc2UuanMgc2NyaXB0IHRoYXQgYm9vdHN0cmFwcyBDbG9zdXJlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnb29nLmZpbmRCYXNlUGF0aF8gPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoZ29vZy5nbG9iYWwuQ0xPU1VSRV9CQVNFX1BBVEgpIHtcbiAgICAgIGdvb2cuYmFzZVBhdGggPSBnb29nLmdsb2JhbC5DTE9TVVJFX0JBU0VfUEFUSDtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKCFnb29nLmluSHRtbERvY3VtZW50XygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBkb2MgPSBnb29nLmdsb2JhbC5kb2N1bWVudDtcbiAgICB2YXIgc2NyaXB0cyA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0Jyk7XG4gICAgLy8gU2VhcmNoIGJhY2t3YXJkcyBzaW5jZSB0aGUgY3VycmVudCBzY3JpcHQgaXMgaW4gYWxtb3N0IGFsbCBjYXNlcyB0aGUgb25lXG4gICAgLy8gdGhhdCBoYXMgYmFzZS5qcy5cbiAgICBmb3IgKHZhciBpID0gc2NyaXB0cy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdmFyIHNyYyA9IHNjcmlwdHNbaV0uc3JjO1xuICAgICAgdmFyIHFtYXJrID0gc3JjLmxhc3RJbmRleE9mKCc/Jyk7XG4gICAgICB2YXIgbCA9IHFtYXJrID09IC0xID8gc3JjLmxlbmd0aCA6IHFtYXJrO1xuICAgICAgaWYgKHNyYy5zdWJzdHIobCAtIDcsIDcpID09ICdiYXNlLmpzJykge1xuICAgICAgICBnb29nLmJhc2VQYXRoID0gc3JjLnN1YnN0cigwLCBsIC0gNyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cblxuICAvKipcbiAgICogSW1wb3J0cyBhIHNjcmlwdCBpZiwgYW5kIG9ubHkgaWYsIHRoYXQgc2NyaXB0IGhhc24ndCBhbHJlYWR5IGJlZW4gaW1wb3J0ZWQuXG4gICAqIChNdXN0IGJlIGNhbGxlZCBhdCBleGVjdXRpb24gdGltZSlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNyYyBTY3JpcHQgc291cmNlLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ29vZy5pbXBvcnRTY3JpcHRfID0gZnVuY3Rpb24oc3JjKSB7XG4gICAgdmFyIGltcG9ydFNjcmlwdCA9IGdvb2cuZ2xvYmFsLkNMT1NVUkVfSU1QT1JUX1NDUklQVCB8fFxuICAgICAgICBnb29nLndyaXRlU2NyaXB0VGFnXztcbiAgICBpZiAoIWdvb2cuZGVwZW5kZW5jaWVzXy53cml0dGVuW3NyY10gJiYgaW1wb3J0U2NyaXB0KHNyYykpIHtcbiAgICAgIGdvb2cuZGVwZW5kZW5jaWVzXy53cml0dGVuW3NyY10gPSB0cnVlO1xuICAgIH1cbiAgfTtcblxuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaW1wb3J0IGZ1bmN0aW9uLiBXcml0ZXMgYSBzY3JpcHQgdGFnIHRvXG4gICAqIGltcG9ydCB0aGUgc2NyaXB0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3JjIFRoZSBzY3JpcHQgc291cmNlLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBzY3JpcHQgd2FzIGltcG9ydGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnb29nLndyaXRlU2NyaXB0VGFnXyA9IGZ1bmN0aW9uKHNyYykge1xuICAgIGlmIChnb29nLmluSHRtbERvY3VtZW50XygpKSB7XG4gICAgICB2YXIgZG9jID0gZ29vZy5nbG9iYWwuZG9jdW1lbnQ7XG4gICAgICBkb2Mud3JpdGUoXG4gICAgICAgICAgJzxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiIHNyYz1cIicgKyBzcmMgKyAnXCI+PC8nICsgJ3NjcmlwdD4nKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xuXG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGRlcGVuZGVuY2llcyBiYXNlZCBvbiB0aGUgZGVwZW5kZW5jaWVzIGFkZGVkIHVzaW5nIGFkZERlcGVuZGVuY3lcbiAgICogYW5kIGNhbGxzIGltcG9ydFNjcmlwdF8gaW4gdGhlIGNvcnJlY3Qgb3JkZXIuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnb29nLndyaXRlU2NyaXB0c18gPSBmdW5jdGlvbigpIHtcbiAgICAvLyB0aGUgc2NyaXB0cyB3ZSBuZWVkIHRvIHdyaXRlIHRoaXMgdGltZVxuICAgIHZhciBzY3JpcHRzID0gW107XG4gICAgdmFyIHNlZW5TY3JpcHQgPSB7fTtcbiAgICB2YXIgZGVwcyA9IGdvb2cuZGVwZW5kZW5jaWVzXztcblxuICAgIGZ1bmN0aW9uIHZpc2l0Tm9kZShwYXRoKSB7XG4gICAgICBpZiAocGF0aCBpbiBkZXBzLndyaXR0ZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyB3ZSBoYXZlIGFscmVhZHkgdmlzaXRlZCB0aGlzIG9uZS4gV2UgY2FuIGdldCBoZXJlIGlmIHdlIGhhdmUgY3ljbGljXG4gICAgICAvLyBkZXBlbmRlbmNpZXNcbiAgICAgIGlmIChwYXRoIGluIGRlcHMudmlzaXRlZCkge1xuICAgICAgICBpZiAoIShwYXRoIGluIHNlZW5TY3JpcHQpKSB7XG4gICAgICAgICAgc2VlblNjcmlwdFtwYXRoXSA9IHRydWU7XG4gICAgICAgICAgc2NyaXB0cy5wdXNoKHBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGVwcy52aXNpdGVkW3BhdGhdID0gdHJ1ZTtcblxuICAgICAgaWYgKHBhdGggaW4gZGVwcy5yZXF1aXJlcykge1xuICAgICAgICBmb3IgKHZhciByZXF1aXJlTmFtZSBpbiBkZXBzLnJlcXVpcmVzW3BhdGhdKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIHJlcXVpcmVkIG5hbWUgaXMgZGVmaW5lZCwgd2UgYXNzdW1lIHRoYXQgaXQgd2FzIGFscmVhZHlcbiAgICAgICAgICAvLyBib290c3RyYXBwZWQgYnkgb3RoZXIgbWVhbnMuXG4gICAgICAgICAgaWYgKCFnb29nLmlzUHJvdmlkZWRfKHJlcXVpcmVOYW1lKSkge1xuICAgICAgICAgICAgaWYgKHJlcXVpcmVOYW1lIGluIGRlcHMubmFtZVRvUGF0aCkge1xuICAgICAgICAgICAgICB2aXNpdE5vZGUoZGVwcy5uYW1lVG9QYXRoW3JlcXVpcmVOYW1lXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvcignVW5kZWZpbmVkIG5hbWVUb1BhdGggZm9yICcgKyByZXF1aXJlTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghKHBhdGggaW4gc2VlblNjcmlwdCkpIHtcbiAgICAgICAgc2VlblNjcmlwdFtwYXRoXSA9IHRydWU7XG4gICAgICAgIHNjcmlwdHMucHVzaChwYXRoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBwYXRoIGluIGdvb2cuaW5jbHVkZWRfKSB7XG4gICAgICBpZiAoIWRlcHMud3JpdHRlbltwYXRoXSkge1xuICAgICAgICB2aXNpdE5vZGUocGF0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoc2NyaXB0c1tpXSkge1xuICAgICAgICBnb29nLmltcG9ydFNjcmlwdF8oZ29vZy5iYXNlUGF0aCArIHNjcmlwdHNbaV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ1VuZGVmaW5lZCBzY3JpcHQgaW5wdXQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cblxuICAvKipcbiAgICogTG9va3MgYXQgdGhlIGRlcGVuZGVuY3kgcnVsZXMgYW5kIHRyaWVzIHRvIGRldGVybWluZSB0aGUgc2NyaXB0IGZpbGUgdGhhdFxuICAgKiBmdWxmaWxscyBhIHBhcnRpY3VsYXIgcnVsZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJ1bGUgSW4gdGhlIGZvcm0gZ29vZy5uYW1lc3BhY2UuQ2xhc3Mgb3IgcHJvamVjdC5zY3JpcHQuXG4gICAqIEByZXR1cm4gez9zdHJpbmd9IFVybCBjb3JyZXNwb25kaW5nIHRvIHRoZSBydWxlLCBvciBudWxsLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ29vZy5nZXRQYXRoRnJvbURlcHNfID0gZnVuY3Rpb24ocnVsZSkge1xuICAgIGlmIChydWxlIGluIGdvb2cuZGVwZW5kZW5jaWVzXy5uYW1lVG9QYXRoKSB7XG4gICAgICByZXR1cm4gZ29vZy5kZXBlbmRlbmNpZXNfLm5hbWVUb1BhdGhbcnVsZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICBnb29nLmZpbmRCYXNlUGF0aF8oKTtcblxuICAvLyBBbGxvdyBwcm9qZWN0cyB0byBtYW5hZ2UgdGhlIGRlcHMgZmlsZXMgdGhlbXNlbHZlcy5cbiAgaWYgKCFnb29nLmdsb2JhbC5DTE9TVVJFX05PX0RFUFMpIHtcbiAgICBnb29nLmltcG9ydFNjcmlwdF8oZ29vZy5iYXNlUGF0aCArICdkZXBzLmpzJyk7XG4gIH1cbn1cblxuXG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBMYW5ndWFnZSBFbmhhbmNlbWVudHNcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblxuLyoqXG4gKiBUaGlzIGlzIGEgXCJmaXhlZFwiIHZlcnNpb24gb2YgdGhlIHR5cGVvZiBvcGVyYXRvci4gIEl0IGRpZmZlcnMgZnJvbSB0aGUgdHlwZW9mXG4gKiBvcGVyYXRvciBpbiBzdWNoIGEgd2F5IHRoYXQgbnVsbCByZXR1cm5zICdudWxsJyBhbmQgYXJyYXlzIHJldHVybiAnYXJyYXknLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZ2V0IHRoZSB0eXBlIG9mLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgdHlwZS5cbiAqL1xuZ29vZy50eXBlT2YgPSBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIgcyA9IHR5cGVvZiB2YWx1ZTtcbiAgaWYgKHMgPT0gJ29iamVjdCcpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIC8vIENoZWNrIHRoZXNlIGZpcnN0LCBzbyB3ZSBjYW4gYXZvaWQgY2FsbGluZyBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIGlmXG4gICAgICAvLyBwb3NzaWJsZS5cbiAgICAgIC8vXG4gICAgICAvLyBJRSBpbXByb3Blcmx5IG1hcnNoYWxzIHR5ZXBvZiBhY3Jvc3MgZXhlY3V0aW9uIGNvbnRleHRzLCBidXQgYVxuICAgICAgLy8gY3Jvc3MtY29udGV4dCBvYmplY3Qgd2lsbCBzdGlsbCByZXR1cm4gZmFsc2UgZm9yIFwiaW5zdGFuY2VvZiBPYmplY3RcIi5cbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgIHJldHVybiAnYXJyYXknO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICByZXR1cm4gcztcbiAgICAgIH1cblxuICAgICAgLy8gSEFDSzogSW4gb3JkZXIgdG8gdXNlIGFuIE9iamVjdCBwcm90b3R5cGUgbWV0aG9kIG9uIHRoZSBhcmJpdHJhcnlcbiAgICAgIC8vICAgdmFsdWUsIHRoZSBjb21waWxlciByZXF1aXJlcyB0aGUgdmFsdWUgYmUgY2FzdCB0byB0eXBlIE9iamVjdCxcbiAgICAgIC8vICAgZXZlbiB0aG91Z2ggdGhlIEVDTUEgc3BlYyBleHBsaWNpdGx5IGFsbG93cyBpdC5cbiAgICAgIHZhciBjbGFzc05hbWUgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoXG4gICAgICAgICAgLyoqIEB0eXBlIHtPYmplY3R9ICovICh2YWx1ZSkpO1xuICAgICAgLy8gSW4gRmlyZWZveCAzLjYsIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGlmcmFtZSB3aW5kb3cgb2JqZWN0cycgbGVuZ3RoXG4gICAgICAvLyBwcm9wZXJ0eSB0aHJvd3MgYW4gTlNfRVJST1JfRkFJTFVSRSwgc28gd2UgbmVlZCB0byBzcGVjaWFsLWNhc2UgaXRcbiAgICAgIC8vIGhlcmUuXG4gICAgICBpZiAoY2xhc3NOYW1lID09ICdbb2JqZWN0IFdpbmRvd10nKSB7XG4gICAgICAgIHJldHVybiAnb2JqZWN0JztcbiAgICAgIH1cblxuICAgICAgLy8gV2UgY2Fubm90IGFsd2F5cyB1c2UgY29uc3RydWN0b3IgPT0gQXJyYXkgb3IgaW5zdGFuY2VvZiBBcnJheSBiZWNhdXNlXG4gICAgICAvLyBkaWZmZXJlbnQgZnJhbWVzIGhhdmUgZGlmZmVyZW50IEFycmF5IG9iamVjdHMuIEluIElFNiwgaWYgdGhlIGlmcmFtZVxuICAgICAgLy8gd2hlcmUgdGhlIGFycmF5IHdhcyBjcmVhdGVkIGlzIGRlc3Ryb3llZCwgdGhlIGFycmF5IGxvc2VzIGl0c1xuICAgICAgLy8gcHJvdG90eXBlLiBUaGVuIGRlcmVmZXJlbmNpbmcgdmFsLnNwbGljZSBoZXJlIHRocm93cyBhbiBleGNlcHRpb24sIHNvXG4gICAgICAvLyB3ZSBjYW4ndCB1c2UgZ29vZy5pc0Z1bmN0aW9uLiBDYWxsaW5nIHR5cGVvZiBkaXJlY3RseSByZXR1cm5zICd1bmtub3duJ1xuICAgICAgLy8gc28gdGhhdCB3aWxsIHdvcmsuIEluIHRoaXMgY2FzZSwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBmYWxzZSBhbmRcbiAgICAgIC8vIG1vc3QgYXJyYXkgZnVuY3Rpb25zIHdpbGwgc3RpbGwgd29yayBiZWNhdXNlIHRoZSBhcnJheSBpcyBzdGlsbFxuICAgICAgLy8gYXJyYXktbGlrZSAoc3VwcG9ydHMgbGVuZ3RoIGFuZCBbXSkgZXZlbiB0aG91Z2ggaXQgaGFzIGxvc3QgaXRzXG4gICAgICAvLyBwcm90b3R5cGUuXG4gICAgICAvLyBNYXJrIE1pbGxlciBub3RpY2VkIHRoYXQgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ1xuICAgICAgLy8gYWxsb3dzIGFjY2VzcyB0byB0aGUgdW5mb3JnZWFibGUgW1tDbGFzc11dIHByb3BlcnR5LlxuICAgICAgLy8gIDE1LjIuNC4yIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgKCApXG4gICAgICAvLyAgV2hlbiB0aGUgdG9TdHJpbmcgbWV0aG9kIGlzIGNhbGxlZCwgdGhlIGZvbGxvd2luZyBzdGVwcyBhcmUgdGFrZW46XG4gICAgICAvLyAgICAgIDEuIEdldCB0aGUgW1tDbGFzc11dIHByb3BlcnR5IG9mIHRoaXMgb2JqZWN0LlxuICAgICAgLy8gICAgICAyLiBDb21wdXRlIGEgc3RyaW5nIHZhbHVlIGJ5IGNvbmNhdGVuYXRpbmcgdGhlIHRocmVlIHN0cmluZ3NcbiAgICAgIC8vICAgICAgICAgXCJbb2JqZWN0IFwiLCBSZXN1bHQoMSksIGFuZCBcIl1cIi5cbiAgICAgIC8vICAgICAgMy4gUmV0dXJuIFJlc3VsdCgyKS5cbiAgICAgIC8vIGFuZCB0aGlzIGJlaGF2aW9yIHN1cnZpdmVzIHRoZSBkZXN0cnVjdGlvbiBvZiB0aGUgZXhlY3V0aW9uIGNvbnRleHQuXG4gICAgICBpZiAoKGNsYXNzTmFtZSA9PSAnW29iamVjdCBBcnJheV0nIHx8XG4gICAgICAgICAgIC8vIEluIElFIGFsbCBub24gdmFsdWUgdHlwZXMgYXJlIHdyYXBwZWQgYXMgb2JqZWN0cyBhY3Jvc3Mgd2luZG93XG4gICAgICAgICAgIC8vIGJvdW5kYXJpZXMgKG5vdCBpZnJhbWUgdGhvdWdoKSBzbyB3ZSBoYXZlIHRvIGRvIG9iamVjdCBkZXRlY3Rpb25cbiAgICAgICAgICAgLy8gZm9yIHRoaXMgZWRnZSBjYXNlXG4gICAgICAgICAgIHR5cGVvZiB2YWx1ZS5sZW5ndGggPT0gJ251bWJlcicgJiZcbiAgICAgICAgICAgdHlwZW9mIHZhbHVlLnNwbGljZSAhPSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICB0eXBlb2YgdmFsdWUucHJvcGVydHlJc0VudW1lcmFibGUgIT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIXZhbHVlLnByb3BlcnR5SXNFbnVtZXJhYmxlKCdzcGxpY2UnKVxuXG4gICAgICAgICAgKSkge1xuICAgICAgICByZXR1cm4gJ2FycmF5JztcbiAgICAgIH1cbiAgICAgIC8vIEhBQ0s6IFRoZXJlIGlzIHN0aWxsIGFuIGFycmF5IGNhc2UgdGhhdCBmYWlscy5cbiAgICAgIC8vICAgICBmdW5jdGlvbiBBcnJheUltcG9zdG9yKCkge31cbiAgICAgIC8vICAgICBBcnJheUltcG9zdG9yLnByb3RvdHlwZSA9IFtdO1xuICAgICAgLy8gICAgIHZhciBpbXBvc3RvciA9IG5ldyBBcnJheUltcG9zdG9yO1xuICAgICAgLy8gdGhpcyBjYW4gYmUgZml4ZWQgYnkgZ2V0dGluZyByaWQgb2YgdGhlIGZhc3QgcGF0aFxuICAgICAgLy8gKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpIGFuZCBzb2xlbHkgcmVseWluZyBvblxuICAgICAgLy8gKHZhbHVlICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcudmFsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEFycmF5XScpXG4gICAgICAvLyBidXQgdGhhdCB3b3VsZCByZXF1aXJlIG1hbnkgbW9yZSBmdW5jdGlvbiBjYWxscyBhbmQgaXMgbm90IHdhcnJhbnRlZFxuICAgICAgLy8gdW5sZXNzIGNsb3N1cmUgY29kZSBpcyByZWNlaXZpbmcgb2JqZWN0cyBmcm9tIHVudHJ1c3RlZCBzb3VyY2VzLlxuXG4gICAgICAvLyBJRSBpbiBjcm9zcy13aW5kb3cgY2FsbHMgZG9lcyBub3QgY29ycmVjdGx5IG1hcnNoYWwgdGhlIGZ1bmN0aW9uIHR5cGVcbiAgICAgIC8vIChpdCBhcHBlYXJzIGp1c3QgYXMgYW4gb2JqZWN0KSBzbyB3ZSBjYW5ub3QgdXNlIGp1c3QgdHlwZW9mIHZhbCA9PVxuICAgICAgLy8gJ2Z1bmN0aW9uJy4gSG93ZXZlciwgaWYgdGhlIG9iamVjdCBoYXMgYSBjYWxsIHByb3BlcnR5LCBpdCBpcyBhXG4gICAgICAvLyBmdW5jdGlvbi5cbiAgICAgIGlmICgoY2xhc3NOYW1lID09ICdbb2JqZWN0IEZ1bmN0aW9uXScgfHxcbiAgICAgICAgICB0eXBlb2YgdmFsdWUuY2FsbCAhPSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgIHR5cGVvZiB2YWx1ZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSAhPSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICF2YWx1ZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgnY2FsbCcpKSkge1xuICAgICAgICByZXR1cm4gJ2Z1bmN0aW9uJztcbiAgICAgIH1cblxuXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuXG4gIH0gZWxzZSBpZiAocyA9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZS5jYWxsID09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gSW4gU2FmYXJpIHR5cGVvZiBub2RlTGlzdCByZXR1cm5zICdmdW5jdGlvbicsIGFuZCBvbiBGaXJlZm94XG4gICAgLy8gdHlwZW9mIGJlaGF2ZXMgc2ltaWxhcmx5IGZvciBIVE1Me0FwcGxldCxFbWJlZCxPYmplY3R9RWxlbWVudHNcbiAgICAvLyBhbmQgUmVnRXhwcy4gIFdlIHdvdWxkIGxpa2UgdG8gcmV0dXJuIG9iamVjdCBmb3IgdGhvc2UgYW5kIHdlIGNhblxuICAgIC8vIGRldGVjdCBhbiBpbnZhbGlkIGZ1bmN0aW9uIGJ5IG1ha2luZyBzdXJlIHRoYXQgdGhlIGZ1bmN0aW9uXG4gICAgLy8gb2JqZWN0IGhhcyBhIGNhbGwgbWV0aG9kLlxuICAgIHJldHVybiAnb2JqZWN0JztcbiAgfVxuICByZXR1cm4gcztcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBub3QgfHVuZGVmaW5lZHwuXG4gKiBXQVJOSU5HOiBEbyBub3QgdXNlIHRoaXMgdG8gdGVzdCBpZiBhbiBvYmplY3QgaGFzIGEgcHJvcGVydHkuIFVzZSB0aGUgaW5cbiAqIG9wZXJhdG9yIGluc3RlYWQuICBBZGRpdGlvbmFsbHksIHRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBnbG9iYWxcbiAqIHVuZGVmaW5lZCB2YXJpYWJsZSBoYXMgbm90IGJlZW4gcmVkZWZpbmVkLlxuICogQHBhcmFtIHsqfSB2YWwgVmFyaWFibGUgdG8gdGVzdC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdmFyaWFibGUgaXMgZGVmaW5lZC5cbiAqL1xuZ29vZy5pc0RlZiA9IGZ1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSB1bmRlZmluZWQ7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgfG51bGx8XG4gKiBAcGFyYW0geyp9IHZhbCBWYXJpYWJsZSB0byB0ZXN0LlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB2YXJpYWJsZSBpcyBudWxsLlxuICovXG5nb29nLmlzTnVsbCA9IGZ1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gdmFsID09PSBudWxsO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGlzIGRlZmluZWQgYW5kIG5vdCBudWxsXG4gKiBAcGFyYW0geyp9IHZhbCBWYXJpYWJsZSB0byB0ZXN0LlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB2YXJpYWJsZSBpcyBkZWZpbmVkIGFuZCBub3QgbnVsbC5cbiAqL1xuZ29vZy5pc0RlZkFuZE5vdE51bGwgPSBmdW5jdGlvbih2YWwpIHtcbiAgLy8gTm90ZSB0aGF0IHVuZGVmaW5lZCA9PSBudWxsLlxuICByZXR1cm4gdmFsICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgYW4gYXJyYXlcbiAqIEBwYXJhbSB7Kn0gdmFsIFZhcmlhYmxlIHRvIHRlc3QuXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHZhcmlhYmxlIGlzIGFuIGFycmF5LlxuICovXG5nb29nLmlzQXJyYXkgPSBmdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIGdvb2cudHlwZU9mKHZhbCkgPT0gJ2FycmF5Jztcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCBsb29rcyBsaWtlIGFuIGFycmF5LiBUbyBxdWFsaWZ5IGFzIGFycmF5IGxpa2VcbiAqIHRoZSB2YWx1ZSBuZWVkcyB0byBiZSBlaXRoZXIgYSBOb2RlTGlzdCBvciBhbiBvYmplY3Qgd2l0aCBhIE51bWJlciBsZW5ndGhcbiAqIHByb3BlcnR5LlxuICogQHBhcmFtIHsqfSB2YWwgVmFyaWFibGUgdG8gdGVzdC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdmFyaWFibGUgaXMgYW4gYXJyYXkuXG4gKi9cbmdvb2cuaXNBcnJheUxpa2UgPSBmdW5jdGlvbih2YWwpIHtcbiAgdmFyIHR5cGUgPSBnb29nLnR5cGVPZih2YWwpO1xuICByZXR1cm4gdHlwZSA9PSAnYXJyYXknIHx8IHR5cGUgPT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbC5sZW5ndGggPT0gJ251bWJlcic7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3QgbG9va3MgbGlrZSBhIERhdGUuIFRvIHF1YWxpZnkgYXMgRGF0ZS1saWtlXG4gKiB0aGUgdmFsdWUgbmVlZHMgdG8gYmUgYW4gb2JqZWN0IGFuZCBoYXZlIGEgZ2V0RnVsbFllYXIoKSBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gdmFsIFZhcmlhYmxlIHRvIHRlc3QuXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHZhcmlhYmxlIGlzIGEgbGlrZSBhIERhdGUuXG4gKi9cbmdvb2cuaXNEYXRlTGlrZSA9IGZ1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gZ29vZy5pc09iamVjdCh2YWwpICYmIHR5cGVvZiB2YWwuZ2V0RnVsbFllYXIgPT0gJ2Z1bmN0aW9uJztcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBhIHN0cmluZ1xuICogQHBhcmFtIHsqfSB2YWwgVmFyaWFibGUgdG8gdGVzdC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdmFyaWFibGUgaXMgYSBzdHJpbmcuXG4gKi9cbmdvb2cuaXNTdHJpbmcgPSBmdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gJ3N0cmluZyc7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgYSBib29sZWFuXG4gKiBAcGFyYW0geyp9IHZhbCBWYXJpYWJsZSB0byB0ZXN0LlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB2YXJpYWJsZSBpcyBib29sZWFuLlxuICovXG5nb29nLmlzQm9vbGVhbiA9IGZ1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PSAnYm9vbGVhbic7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgYSBudW1iZXJcbiAqIEBwYXJhbSB7Kn0gdmFsIFZhcmlhYmxlIHRvIHRlc3QuXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHZhcmlhYmxlIGlzIGEgbnVtYmVyLlxuICovXG5nb29nLmlzTnVtYmVyID0gZnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09ICdudW1iZXInO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGlzIGEgZnVuY3Rpb25cbiAqIEBwYXJhbSB7Kn0gdmFsIFZhcmlhYmxlIHRvIHRlc3QuXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHZhcmlhYmxlIGlzIGEgZnVuY3Rpb24uXG4gKi9cbmdvb2cuaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gZ29vZy50eXBlT2YodmFsKSA9PSAnZnVuY3Rpb24nO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGlzIGFuIG9iamVjdC4gIFRoaXMgaW5jbHVkZXMgYXJyYXlzXG4gKiBhbmQgZnVuY3Rpb25zLlxuICogQHBhcmFtIHsqfSB2YWwgVmFyaWFibGUgdG8gdGVzdC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdmFyaWFibGUgaXMgYW4gb2JqZWN0LlxuICovXG5nb29nLmlzT2JqZWN0ID0gZnVuY3Rpb24odmFsKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbDtcbiAgcmV0dXJuIHR5cGUgPT0gJ29iamVjdCcgJiYgdmFsICE9IG51bGwgfHwgdHlwZSA9PSAnZnVuY3Rpb24nO1xuICAvLyByZXR1cm4gT2JqZWN0KHZhbCkgPT09IHZhbCBhbHNvIHdvcmtzLCBidXQgaXMgc2xvd2VyLCBlc3BlY2lhbGx5IGlmIHZhbCBpc1xuICAvLyBub3QgYW4gb2JqZWN0LlxufTtcblxuXG4vKipcbiAqIEdldHMgYSB1bmlxdWUgSUQgZm9yIGFuIG9iamVjdC4gVGhpcyBtdXRhdGVzIHRoZSBvYmplY3Qgc28gdGhhdCBmdXJ0aGVyXG4gKiBjYWxscyB3aXRoIHRoZSBzYW1lIG9iamVjdCBhcyBhIHBhcmFtZXRlciByZXR1cm5zIHRoZSBzYW1lIHZhbHVlLiBUaGUgdW5pcXVlXG4gKiBJRCBpcyBndWFyYW50ZWVkIHRvIGJlIHVuaXF1ZSBhY3Jvc3MgdGhlIGN1cnJlbnQgc2Vzc2lvbiBhbW9uZ3N0IG9iamVjdHMgdGhhdFxuICogYXJlIHBhc3NlZCBpbnRvIHtAY29kZSBnZXRVaWR9LiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGUgSUQgaXMgdW5pcXVlXG4gKiBvciBjb25zaXN0ZW50IGFjcm9zcyBzZXNzaW9ucy4gSXQgaXMgdW5zYWZlIHRvIGdlbmVyYXRlIHVuaXF1ZSBJRCBmb3JcbiAqIGZ1bmN0aW9uIHByb3RvdHlwZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIGdldCB0aGUgdW5pcXVlIElEIGZvci5cbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHVuaXF1ZSBJRCBmb3IgdGhlIG9iamVjdC5cbiAqL1xuZ29vZy5nZXRVaWQgPSBmdW5jdGlvbihvYmopIHtcbiAgLy8gVE9ETyhhcnYpOiBNYWtlIHRoZSB0eXBlIHN0cmljdGVyLCBkbyBub3QgYWNjZXB0IG51bGwuXG5cbiAgLy8gSW4gT3BlcmEgd2luZG93Lmhhc093blByb3BlcnR5IGV4aXN0cyBidXQgYWx3YXlzIHJldHVybnMgZmFsc2Ugc28gd2UgYXZvaWRcbiAgLy8gdXNpbmcgaXQuIEFzIGEgY29uc2VxdWVuY2UgdGhlIHVuaXF1ZSBJRCBnZW5lcmF0ZWQgZm9yIEJhc2VDbGFzcy5wcm90b3R5cGVcbiAgLy8gYW5kIFN1YkNsYXNzLnByb3RvdHlwZSB3aWxsIGJlIHRoZSBzYW1lLlxuICByZXR1cm4gb2JqW2dvb2cuVUlEX1BST1BFUlRZX10gfHxcbiAgICAgIChvYmpbZ29vZy5VSURfUFJPUEVSVFlfXSA9ICsrZ29vZy51aWRDb3VudGVyXyk7XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgdW5pcXVlIElEIGZyb20gYW4gb2JqZWN0LiBUaGlzIGlzIHVzZWZ1bCBpZiB0aGUgb2JqZWN0IHdhc1xuICogcHJldmlvdXNseSBtdXRhdGVkIHVzaW5nIHtAY29kZSBnb29nLmdldFVpZH0gaW4gd2hpY2ggY2FzZSB0aGUgbXV0YXRpb24gaXNcbiAqIHVuZG9uZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byByZW1vdmUgdGhlIHVuaXF1ZSBJRCBmaWVsZCBmcm9tLlxuICovXG5nb29nLnJlbW92ZVVpZCA9IGZ1bmN0aW9uKG9iaikge1xuICAvLyBUT0RPKGFydik6IE1ha2UgdGhlIHR5cGUgc3RyaWN0ZXIsIGRvIG5vdCBhY2NlcHQgbnVsbC5cblxuICAvLyBET00gbm9kZXMgaW4gSUUgYXJlIG5vdCBpbnN0YW5jZSBvZiBPYmplY3QgYW5kIHRocm93cyBleGNlcHRpb25cbiAgLy8gZm9yIGRlbGV0ZS4gSW5zdGVhZCB3ZSB0cnkgdG8gdXNlIHJlbW92ZUF0dHJpYnV0ZVxuICBpZiAoJ3JlbW92ZUF0dHJpYnV0ZScgaW4gb2JqKSB7XG4gICAgb2JqLnJlbW92ZUF0dHJpYnV0ZShnb29nLlVJRF9QUk9QRVJUWV8pO1xuICB9XG4gIC8qKiBAcHJlc2VydmVUcnkgKi9cbiAgdHJ5IHtcbiAgICBkZWxldGUgb2JqW2dvb2cuVUlEX1BST1BFUlRZX107XG4gIH0gY2F0Y2ggKGV4KSB7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBOYW1lIGZvciB1bmlxdWUgSUQgcHJvcGVydHkuIEluaXRpYWxpemVkIGluIGEgd2F5IHRvIGhlbHAgYXZvaWQgY29sbGlzaW9uc1xuICogd2l0aCBvdGhlciBjbG9zdXJlIGphdmFzY3JpcHQgb24gdGhlIHNhbWUgcGFnZS5cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5nb29nLlVJRF9QUk9QRVJUWV8gPSAnY2xvc3VyZV91aWRfJyArXG4gICAgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMjE0NzQ4MzY0OCkudG9TdHJpbmcoMzYpO1xuXG5cbi8qKlxuICogQ291bnRlciBmb3IgVUlELlxuICogQHR5cGUge251bWJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbmdvb2cudWlkQ291bnRlcl8gPSAwO1xuXG5cbi8qKlxuICogQWRkcyBhIGhhc2ggY29kZSBmaWVsZCB0byBhbiBvYmplY3QuIFRoZSBoYXNoIGNvZGUgaXMgdW5pcXVlIGZvciB0aGVcbiAqIGdpdmVuIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBnZXQgdGhlIGhhc2ggY29kZSBmb3IuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBoYXNoIGNvZGUgZm9yIHRoZSBvYmplY3QuXG4gKiBAZGVwcmVjYXRlZCBVc2UgZ29vZy5nZXRVaWQgaW5zdGVhZC5cbiAqL1xuZ29vZy5nZXRIYXNoQ29kZSA9IGdvb2cuZ2V0VWlkO1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgaGFzaCBjb2RlIGZpZWxkIGZyb20gYW4gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIHJlbW92ZSB0aGUgZmllbGQgZnJvbS5cbiAqIEBkZXByZWNhdGVkIFVzZSBnb29nLnJlbW92ZVVpZCBpbnN0ZWFkLlxuICovXG5nb29nLnJlbW92ZUhhc2hDb2RlID0gZ29vZy5yZW1vdmVVaWQ7XG5cblxuLyoqXG4gKiBDbG9uZXMgYSB2YWx1ZS4gVGhlIGlucHV0IG1heSBiZSBhbiBPYmplY3QsIEFycmF5LCBvciBiYXNpYyB0eXBlLiBPYmplY3RzIGFuZFxuICogYXJyYXlzIHdpbGwgYmUgY2xvbmVkIHJlY3Vyc2l2ZWx5LlxuICpcbiAqIFdBUk5JTkdTOlxuICogPGNvZGU+Z29vZy5jbG9uZU9iamVjdDwvY29kZT4gZG9lcyBub3QgZGV0ZWN0IHJlZmVyZW5jZSBsb29wcy4gT2JqZWN0cyB0aGF0XG4gKiByZWZlciB0byB0aGVtc2VsdmVzIHdpbGwgY2F1c2UgaW5maW5pdGUgcmVjdXJzaW9uLlxuICpcbiAqIDxjb2RlPmdvb2cuY2xvbmVPYmplY3Q8L2NvZGU+IGlzIHVuYXdhcmUgb2YgdW5pcXVlIGlkZW50aWZpZXJzLCBhbmQgY29waWVzXG4gKiBVSURzIGNyZWF0ZWQgYnkgPGNvZGU+Z2V0VWlkPC9jb2RlPiBpbnRvIGNsb25lZCByZXN1bHRzLlxuICpcbiAqIEBwYXJhbSB7Kn0gb2JqIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAqIEByZXR1cm4geyp9IEEgY2xvbmUgb2YgdGhlIGlucHV0IHZhbHVlLlxuICogQGRlcHJlY2F0ZWQgZ29vZy5jbG9uZU9iamVjdCBpcyB1bnNhZmUuIFByZWZlciB0aGUgZ29vZy5vYmplY3QgbWV0aG9kcy5cbiAqL1xuZ29vZy5jbG9uZU9iamVjdCA9IGZ1bmN0aW9uKG9iaikge1xuICB2YXIgdHlwZSA9IGdvb2cudHlwZU9mKG9iaik7XG4gIGlmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2FycmF5Jykge1xuICAgIGlmIChvYmouY2xvbmUpIHtcbiAgICAgIHJldHVybiBvYmouY2xvbmUoKTtcbiAgICB9XG4gICAgdmFyIGNsb25lID0gdHlwZSA9PSAnYXJyYXknID8gW10gOiB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBjbG9uZVtrZXldID0gZ29vZy5jbG9uZU9iamVjdChvYmpba2V5XSk7XG4gICAgfVxuICAgIHJldHVybiBjbG9uZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG5cbi8qKlxuICogRm9yd2FyZCBkZWNsYXJhdGlvbiBmb3IgdGhlIGNsb25lIG1ldGhvZC4gVGhpcyBpcyBuZWNlc3NhcnkgdW50aWwgdGhlXG4gKiBjb21waWxlciBjYW4gYmV0dGVyIHN1cHBvcnQgZHVjay10eXBpbmcgY29uc3RydWN0cyBhcyB1c2VkIGluXG4gKiBnb29nLmNsb25lT2JqZWN0LlxuICpcbiAqIFRPRE8oYnJlbm5lbWFuKTogUmVtb3ZlIG9uY2UgdGhlIEpTQ29tcGlsZXIgY2FuIGluZmVyIHRoYXQgdGhlIGNoZWNrIGZvclxuICogcHJvdG8uY2xvbmUgaXMgc2FmZSBpbiBnb29nLmNsb25lT2JqZWN0LlxuICpcbiAqIEB0eXBlIHtGdW5jdGlvbn1cbiAqL1xuT2JqZWN0LnByb3RvdHlwZS5jbG9uZTtcblxuXG4vKipcbiAqIEEgbmF0aXZlIGltcGxlbWVudGF0aW9uIG9mIGdvb2cuYmluZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEEgZnVuY3Rpb24gdG8gcGFydGlhbGx5IGFwcGx5LlxuICogQHBhcmFtIHtPYmplY3R8dW5kZWZpbmVkfSBzZWxmT2JqIFNwZWNpZmllcyB0aGUgb2JqZWN0IHdoaWNoIHx0aGlzfCBzaG91bGRcbiAqICAgICBwb2ludCB0byB3aGVuIHRoZSBmdW5jdGlvbiBpcyBydW4uXG4gKiBAcGFyYW0gey4uLip9IHZhcl9hcmdzIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRoYXQgYXJlIHBhcnRpYWxseVxuICogICAgIGFwcGxpZWQgdG8gdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybiB7IUZ1bmN0aW9ufSBBIHBhcnRpYWxseS1hcHBsaWVkIGZvcm0gb2YgdGhlIGZ1bmN0aW9uIGJpbmQoKSB3YXNcbiAqICAgICBpbnZva2VkIGFzIGEgbWV0aG9kIG9mLlxuICogQHByaXZhdGVcbiAqIEBzdXBwcmVzcyB7ZGVwcmVjYXRlZH0gVGhlIGNvbXBpbGVyIHRoaW5rcyB0aGF0IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG4gKiAgICAgaXMgZGVwcmVjYXRlZCBiZWNhdXNlIHNvbWUgcGVvcGxlIGhhdmUgZGVjbGFyZWQgYSBwdXJlLUpTIHZlcnNpb24uXG4gKiAgICAgT25seSB0aGUgcHVyZS1KUyB2ZXJzaW9uIGlzIHRydWx5IGRlcHJlY2F0ZWQuXG4gKi9cbmdvb2cuYmluZE5hdGl2ZV8gPSBmdW5jdGlvbihmbiwgc2VsZk9iaiwgdmFyX2FyZ3MpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IUZ1bmN0aW9ufSAqLyAoZm4uY2FsbC5hcHBseShmbi5iaW5kLCBhcmd1bWVudHMpKTtcbn07XG5cblxuLyoqXG4gKiBBIHB1cmUtSlMgaW1wbGVtZW50YXRpb24gb2YgZ29vZy5iaW5kLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQSBmdW5jdGlvbiB0byBwYXJ0aWFsbHkgYXBwbHkuXG4gKiBAcGFyYW0ge09iamVjdHx1bmRlZmluZWR9IHNlbGZPYmogU3BlY2lmaWVzIHRoZSBvYmplY3Qgd2hpY2ggfHRoaXN8IHNob3VsZFxuICogICAgIHBvaW50IHRvIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIHJ1bi5cbiAqIEBwYXJhbSB7Li4uKn0gdmFyX2FyZ3MgQWRkaXRpb25hbCBhcmd1bWVudHMgdGhhdCBhcmUgcGFydGlhbGx5XG4gKiAgICAgYXBwbGllZCB0byB0aGUgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHshRnVuY3Rpb259IEEgcGFydGlhbGx5LWFwcGxpZWQgZm9ybSBvZiB0aGUgZnVuY3Rpb24gYmluZCgpIHdhc1xuICogICAgIGludm9rZWQgYXMgYSBtZXRob2Qgb2YuXG4gKiBAcHJpdmF0ZVxuICovXG5nb29nLmJpbmRKc18gPSBmdW5jdGlvbihmbiwgc2VsZk9iaiwgdmFyX2FyZ3MpIHtcbiAgaWYgKCFmbikge1xuICAgIHRocm93IG5ldyBFcnJvcigpO1xuICB9XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgLy8gUHJlcGVuZCB0aGUgYm91bmQgYXJndW1lbnRzIHRvIHRoZSBjdXJyZW50IGFyZ3VtZW50cy5cbiAgICAgIHZhciBuZXdBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KG5ld0FyZ3MsIGJvdW5kQXJncyk7XG4gICAgICByZXR1cm4gZm4uYXBwbHkoc2VsZk9iaiwgbmV3QXJncyk7XG4gICAgfTtcblxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmbi5hcHBseShzZWxmT2JqLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cbn07XG5cblxuLyoqXG4gKiBQYXJ0aWFsbHkgYXBwbGllcyB0aGlzIGZ1bmN0aW9uIHRvIGEgcGFydGljdWxhciAndGhpcyBvYmplY3QnIGFuZCB6ZXJvIG9yXG4gKiBtb3JlIGFyZ3VtZW50cy4gVGhlIHJlc3VsdCBpcyBhIG5ldyBmdW5jdGlvbiB3aXRoIHNvbWUgYXJndW1lbnRzIG9mIHRoZSBmaXJzdFxuICogZnVuY3Rpb24gcHJlLWZpbGxlZCBhbmQgdGhlIHZhbHVlIG9mIHx0aGlzfCAncHJlLXNwZWNpZmllZCcuPGJyPjxicj5cbiAqXG4gKiBSZW1haW5pbmcgYXJndW1lbnRzIHNwZWNpZmllZCBhdCBjYWxsLXRpbWUgYXJlIGFwcGVuZGVkIHRvIHRoZSBwcmUtXG4gKiBzcGVjaWZpZWQgb25lcy48YnI+PGJyPlxuICpcbiAqIEFsc28gc2VlOiB7QGxpbmsgI3BhcnRpYWx9Ljxicj48YnI+XG4gKlxuICogVXNhZ2U6XG4gKiA8cHJlPnZhciBiYXJNZXRoQm91bmQgPSBiaW5kKG15RnVuY3Rpb24sIG15T2JqLCAnYXJnMScsICdhcmcyJyk7XG4gKiBiYXJNZXRoQm91bmQoJ2FyZzMnLCAnYXJnNCcpOzwvcHJlPlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEEgZnVuY3Rpb24gdG8gcGFydGlhbGx5IGFwcGx5LlxuICogQHBhcmFtIHtPYmplY3R8dW5kZWZpbmVkfSBzZWxmT2JqIFNwZWNpZmllcyB0aGUgb2JqZWN0IHdoaWNoIHx0aGlzfCBzaG91bGRcbiAqICAgICBwb2ludCB0byB3aGVuIHRoZSBmdW5jdGlvbiBpcyBydW4uXG4gKiBAcGFyYW0gey4uLip9IHZhcl9hcmdzIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRoYXQgYXJlIHBhcnRpYWxseVxuICogICAgIGFwcGxpZWQgdG8gdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybiB7IUZ1bmN0aW9ufSBBIHBhcnRpYWxseS1hcHBsaWVkIGZvcm0gb2YgdGhlIGZ1bmN0aW9uIGJpbmQoKSB3YXNcbiAqICAgICBpbnZva2VkIGFzIGEgbWV0aG9kIG9mLlxuICogQHN1cHByZXNzIHtkZXByZWNhdGVkfSBTZWUgYWJvdmUuXG4gKi9cbmdvb2cuYmluZCA9IGZ1bmN0aW9uKGZuLCBzZWxmT2JqLCB2YXJfYXJncykge1xuICAvLyBUT0RPKG5pY2tzYW50b3MpOiBuYXJyb3cgdGhlIHR5cGUgc2lnbmF0dXJlLlxuICBpZiAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgJiZcbiAgICAgIC8vIE5PVEUobmlja3NhbnRvcyk6IFNvbWVib2R5IHB1bGxlZCBiYXNlLmpzIGludG8gdGhlIGRlZmF1bHRcbiAgICAgIC8vIENocm9tZSBleHRlbnNpb24gZW52aXJvbm1lbnQuIFRoaXMgbWVhbnMgdGhhdCBmb3IgQ2hyb21lIGV4dGVuc2lvbnMsXG4gICAgICAvLyB0aGV5IGdldCB0aGUgaW1wbGVtZW50YXRpb24gb2YgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgdGhhdFxuICAgICAgLy8gY2FsbHMgZ29vZy5iaW5kIGluc3RlYWQgb2YgdGhlIG5hdGl2ZSBvbmUuIEV2ZW4gd29yc2UsIHdlIGRvbid0IHdhbnRcbiAgICAgIC8vIHRvIGludHJvZHVjZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbiBnb29nLmJpbmQgYW5kXG4gICAgICAvLyBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCwgc28gd2UgaGF2ZSB0byBoYWNrIHRoaXMgdG8gbWFrZSBzdXJlIGl0XG4gICAgICAvLyB3b3JrcyBjb3JyZWN0bHkuXG4gICAgICBGdW5jdGlvbi5wcm90b3R5cGUuYmluZC50b1N0cmluZygpLmluZGV4T2YoJ25hdGl2ZSBjb2RlJykgIT0gLTEpIHtcbiAgICBnb29nLmJpbmQgPSBnb29nLmJpbmROYXRpdmVfO1xuICB9IGVsc2Uge1xuICAgIGdvb2cuYmluZCA9IGdvb2cuYmluZEpzXztcbiAgfVxuICByZXR1cm4gZ29vZy5iaW5kLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59O1xuXG5cbi8qKlxuICogTGlrZSBiaW5kKCksIGV4Y2VwdCB0aGF0IGEgJ3RoaXMgb2JqZWN0JyBpcyBub3QgcmVxdWlyZWQuIFVzZWZ1bCB3aGVuIHRoZVxuICogdGFyZ2V0IGZ1bmN0aW9uIGlzIGFscmVhZHkgYm91bmQuXG4gKlxuICogVXNhZ2U6XG4gKiB2YXIgZyA9IHBhcnRpYWwoZiwgYXJnMSwgYXJnMik7XG4gKiBnKGFyZzMsIGFyZzQpO1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEEgZnVuY3Rpb24gdG8gcGFydGlhbGx5IGFwcGx5LlxuICogQHBhcmFtIHsuLi4qfSB2YXJfYXJncyBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0aGF0IGFyZSBwYXJ0aWFsbHlcbiAqICAgICBhcHBsaWVkIHRvIGZuLlxuICogQHJldHVybiB7IUZ1bmN0aW9ufSBBIHBhcnRpYWxseS1hcHBsaWVkIGZvcm0gb2YgdGhlIGZ1bmN0aW9uIGJpbmQoKSB3YXNcbiAqICAgICBpbnZva2VkIGFzIGEgbWV0aG9kIG9mLlxuICovXG5nb29nLnBhcnRpYWwgPSBmdW5jdGlvbihmbiwgdmFyX2FyZ3MpIHtcbiAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgLy8gUHJlcGVuZCB0aGUgYm91bmQgYXJndW1lbnRzIHRvIHRoZSBjdXJyZW50IGFyZ3VtZW50cy5cbiAgICB2YXIgbmV3QXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgbmV3QXJncy51bnNoaWZ0LmFwcGx5KG5ld0FyZ3MsIGFyZ3MpO1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBuZXdBcmdzKTtcbiAgfTtcbn07XG5cblxuLyoqXG4gKiBDb3BpZXMgYWxsIHRoZSBtZW1iZXJzIG9mIGEgc291cmNlIG9iamVjdCB0byBhIHRhcmdldCBvYmplY3QuIFRoaXMgbWV0aG9kXG4gKiBkb2VzIG5vdCB3b3JrIG9uIGFsbCBicm93c2VycyBmb3IgYWxsIG9iamVjdHMgdGhhdCBjb250YWluIGtleXMgc3VjaCBhc1xuICogdG9TdHJpbmcgb3IgaGFzT3duUHJvcGVydHkuIFVzZSBnb29nLm9iamVjdC5leHRlbmQgZm9yIHRoaXMgcHVycG9zZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXQgVGFyZ2V0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBTb3VyY2UuXG4gKi9cbmdvb2cubWl4aW4gPSBmdW5jdGlvbih0YXJnZXQsIHNvdXJjZSkge1xuICBmb3IgKHZhciB4IGluIHNvdXJjZSkge1xuICAgIHRhcmdldFt4XSA9IHNvdXJjZVt4XTtcbiAgfVxuXG4gIC8vIEZvciBJRTcgb3IgbG93ZXIsIHRoZSBmb3ItaW4tbG9vcCBkb2VzIG5vdCBjb250YWluIGFueSBwcm9wZXJ0aWVzIHRoYXQgYXJlXG4gIC8vIG5vdCBlbnVtZXJhYmxlIG9uIHRoZSBwcm90b3R5cGUgb2JqZWN0IChmb3IgZXhhbXBsZSwgaXNQcm90b3R5cGVPZiBmcm9tXG4gIC8vIE9iamVjdC5wcm90b3R5cGUpIGJ1dCBhbHNvIGl0IHdpbGwgbm90IGluY2x1ZGUgJ3JlcGxhY2UnIG9uIG9iamVjdHMgdGhhdFxuICAvLyBleHRlbmQgU3RyaW5nIGFuZCBjaGFuZ2UgJ3JlcGxhY2UnIChub3QgdGhhdCBpdCBpcyBjb21tb24gZm9yIGFueW9uZSB0b1xuICAvLyBleHRlbmQgYW55dGhpbmcgZXhjZXB0IE9iamVjdCkuXG59O1xuXG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfSBBbiBpbnRlZ2VyIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kc1xuICogICAgIGJldHdlZW4gbWlkbmlnaHQsIEphbnVhcnkgMSwgMTk3MCBhbmQgdGhlIGN1cnJlbnQgdGltZS5cbiAqL1xuZ29vZy5ub3cgPSBEYXRlLm5vdyB8fCAoZnVuY3Rpb24oKSB7XG4gIC8vIFVuYXJ5IHBsdXMgb3BlcmF0b3IgY29udmVydHMgaXRzIG9wZXJhbmQgdG8gYSBudW1iZXIgd2hpY2ggaW4gdGhlIGNhc2Ugb2ZcbiAgLy8gYSBkYXRlIGlzIGRvbmUgYnkgY2FsbGluZyBnZXRUaW1lKCkuXG4gIHJldHVybiArbmV3IERhdGUoKTtcbn0pO1xuXG5cbi8qKlxuICogRXZhbHMgamF2YXNjcmlwdCBpbiB0aGUgZ2xvYmFsIHNjb3BlLiAgSW4gSUUgdGhpcyB1c2VzIGV4ZWNTY3JpcHQsIG90aGVyXG4gKiBicm93c2VycyB1c2UgZ29vZy5nbG9iYWwuZXZhbC4gSWYgZ29vZy5nbG9iYWwuZXZhbCBkb2VzIG5vdCBldmFsdWF0ZSBpbiB0aGVcbiAqIGdsb2JhbCBzY29wZSAoZm9yIGV4YW1wbGUsIGluIFNhZmFyaSksIGFwcGVuZHMgYSBzY3JpcHQgdGFnIGluc3RlYWQuXG4gKiBUaHJvd3MgYW4gZXhjZXB0aW9uIGlmIG5laXRoZXIgZXhlY1NjcmlwdCBvciBldmFsIGlzIGRlZmluZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gc2NyaXB0IEphdmFTY3JpcHQgc3RyaW5nLlxuICovXG5nb29nLmdsb2JhbEV2YWwgPSBmdW5jdGlvbihzY3JpcHQpIHtcbiAgaWYgKGdvb2cuZ2xvYmFsLmV4ZWNTY3JpcHQpIHtcbiAgICBnb29nLmdsb2JhbC5leGVjU2NyaXB0KHNjcmlwdCwgJ0phdmFTY3JpcHQnKTtcbiAgfSBlbHNlIGlmIChnb29nLmdsb2JhbC5ldmFsKSB7XG4gICAgLy8gVGVzdCB0byBzZWUgaWYgZXZhbCB3b3Jrc1xuICAgIGlmIChnb29nLmV2YWxXb3Jrc0Zvckdsb2JhbHNfID09IG51bGwpIHtcbiAgICAgIGdvb2cuZ2xvYmFsLmV2YWwoJ3ZhciBfZXRfID0gMTsnKTtcbiAgICAgIGlmICh0eXBlb2YgZ29vZy5nbG9iYWxbJ19ldF8nXSAhPSAndW5kZWZpbmVkJykge1xuICAgICAgICBkZWxldGUgZ29vZy5nbG9iYWxbJ19ldF8nXTtcbiAgICAgICAgZ29vZy5ldmFsV29ya3NGb3JHbG9iYWxzXyA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnb29nLmV2YWxXb3Jrc0Zvckdsb2JhbHNfID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGdvb2cuZXZhbFdvcmtzRm9yR2xvYmFsc18pIHtcbiAgICAgIGdvb2cuZ2xvYmFsLmV2YWwoc2NyaXB0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGRvYyA9IGdvb2cuZ2xvYmFsLmRvY3VtZW50O1xuICAgICAgdmFyIHNjcmlwdEVsdCA9IGRvYy5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgIHNjcmlwdEVsdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gICAgICBzY3JpcHRFbHQuZGVmZXIgPSBmYWxzZTtcbiAgICAgIC8vIE5vdGUodXNlcik6IGNhbid0IHVzZSAuaW5uZXJIVE1MIHNpbmNlIFwidCgnPHRlc3Q+JylcIiB3aWxsIGZhaWwgYW5kXG4gICAgICAvLyAudGV4dCBkb2Vzbid0IHdvcmsgaW4gU2FmYXJpIDIuICBUaGVyZWZvcmUgd2UgYXBwZW5kIGEgdGV4dCBub2RlLlxuICAgICAgc2NyaXB0RWx0LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZShzY3JpcHQpKTtcbiAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdEVsdCk7XG4gICAgICBkb2MuYm9keS5yZW1vdmVDaGlsZChzY3JpcHRFbHQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBFcnJvcignZ29vZy5nbG9iYWxFdmFsIG5vdCBhdmFpbGFibGUnKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB3ZSBjYW4gY2FsbCAnZXZhbCcgZGlyZWN0bHkgdG8gZXZhbCBjb2RlIGluIHRoZVxuICogZ2xvYmFsIHNjb3BlLiBTZXQgdG8gYSBCb29sZWFuIGJ5IHRoZSBmaXJzdCBjYWxsIHRvIGdvb2cuZ2xvYmFsRXZhbCAod2hpY2hcbiAqIGVtcGlyaWNhbGx5IHRlc3RzIHdoZXRoZXIgZXZhbCB3b3JrcyBmb3IgZ2xvYmFscykuIEBzZWUgZ29vZy5nbG9iYWxFdmFsXG4gKiBAdHlwZSB7P2Jvb2xlYW59XG4gKiBAcHJpdmF0ZVxuICovXG5nb29nLmV2YWxXb3Jrc0Zvckdsb2JhbHNfID0gbnVsbDtcblxuXG4vKipcbiAqIE9wdGlvbmFsIG1hcCBvZiBDU1MgY2xhc3MgbmFtZXMgdG8gb2JmdXNjYXRlZCBuYW1lcyB1c2VkIHdpdGhcbiAqIGdvb2cuZ2V0Q3NzTmFtZSgpLlxuICogQHR5cGUge09iamVjdHx1bmRlZmluZWR9XG4gKiBAcHJpdmF0ZVxuICogQHNlZSBnb29nLnNldENzc05hbWVNYXBwaW5nXG4gKi9cbmdvb2cuY3NzTmFtZU1hcHBpbmdfO1xuXG5cbi8qKlxuICogT3B0aW9uYWwgb2JmdXNjYXRpb24gc3R5bGUgZm9yIENTUyBjbGFzcyBuYW1lcy4gU2hvdWxkIGJlIHNldCB0byBlaXRoZXJcbiAqICdCWV9XSE9MRScgb3IgJ0JZX1BBUlQnIGlmIGRlZmluZWQuXG4gKiBAdHlwZSB7c3RyaW5nfHVuZGVmaW5lZH1cbiAqIEBwcml2YXRlXG4gKiBAc2VlIGdvb2cuc2V0Q3NzTmFtZU1hcHBpbmdcbiAqL1xuZ29vZy5jc3NOYW1lTWFwcGluZ1N0eWxlXztcblxuXG4vKipcbiAqIEhhbmRsZXMgc3RyaW5ncyB0aGF0IGFyZSBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIENTUyBjbGFzcyBuYW1lcy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHdvcmtzIGluIHRhbmRlbSB3aXRoIEBzZWUgZ29vZy5zZXRDc3NOYW1lTWFwcGluZy5cbiAqXG4gKiBXaXRob3V0IGFueSBtYXBwaW5nIHNldCwgdGhlIGFyZ3VtZW50cyBhcmUgc2ltcGxlIGpvaW5lZCB3aXRoIGFcbiAqIGh5cGhlbiBhbmQgcGFzc2VkIHRocm91Z2ggdW5hbHRlcmVkLlxuICpcbiAqIFdoZW4gdGhlcmUgaXMgYSBtYXBwaW5nLCB0aGVyZSBhcmUgdHdvIHBvc3NpYmxlIHN0eWxlcyBpbiB3aGljaFxuICogdGhlc2UgbWFwcGluZ3MgYXJlIHVzZWQuIEluIHRoZSBCWV9QQVJUIHN0eWxlLCBlYWNoIHBhcnQgKGkuZS4gaW5cbiAqIGJldHdlZW4gaHlwaGVucykgb2YgdGhlIHBhc3NlZCBpbiBjc3MgbmFtZSBpcyByZXdyaXR0ZW4gYWNjb3JkaW5nXG4gKiB0byB0aGUgbWFwLiBJbiB0aGUgQllfV0hPTEUgc3R5bGUsIHRoZSBmdWxsIGNzcyBuYW1lIGlzIGxvb2tlZCB1cCBpblxuICogdGhlIG1hcCBkaXJlY3RseS4gSWYgYSByZXdyaXRlIGlzIG5vdCBzcGVjaWZpZWQgYnkgdGhlIG1hcCwgdGhlXG4gKiBjb21waWxlciB3aWxsIG91dHB1dCBhIHdhcm5pbmcuXG4gKlxuICogV2hlbiB0aGUgbWFwcGluZyBpcyBwYXNzZWQgdG8gdGhlIGNvbXBpbGVyLCBpdCB3aWxsIHJlcGxhY2UgY2FsbHNcbiAqIHRvIGdvb2cuZ2V0Q3NzTmFtZSB3aXRoIHRoZSBzdHJpbmdzIGZyb20gdGhlIG1hcHBpbmcsIGUuZy5cbiAqICAgICB2YXIgeCA9IGdvb2cuZ2V0Q3NzTmFtZSgnZm9vJyk7XG4gKiAgICAgdmFyIHkgPSBnb29nLmdldENzc05hbWUodGhpcy5iYXNlQ2xhc3MsICdhY3RpdmUnKTtcbiAqICBiZWNvbWVzOlxuICogICAgIHZhciB4PSAnZm9vJztcbiAqICAgICB2YXIgeSA9IHRoaXMuYmFzZUNsYXNzICsgJy1hY3RpdmUnO1xuICpcbiAqIElmIG9uZSBhcmd1bWVudCBpcyBwYXNzZWQgaXQgd2lsbCBiZSBwcm9jZXNzZWQsIGlmIHR3byBhcmUgcGFzc2VkXG4gKiBvbmx5IHRoZSBtb2RpZmllciB3aWxsIGJlIHByb2Nlc3NlZCwgYXMgaXQgaXMgYXNzdW1lZCB0aGUgZmlyc3RcbiAqIGFyZ3VtZW50IHdhcyBnZW5lcmF0ZWQgYXMgYSByZXN1bHQgb2YgY2FsbGluZyBnb29nLmdldENzc05hbWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSBUaGUgY2xhc3MgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0X21vZGlmaWVyIEEgbW9kaWZpZXIgdG8gYmUgYXBwZW5kZWQgdG8gdGhlIGNsYXNzIG5hbWUuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjbGFzcyBuYW1lIG9yIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBjbGFzcyBuYW1lIGFuZFxuICogICAgIHRoZSBtb2RpZmllci5cbiAqL1xuZ29vZy5nZXRDc3NOYW1lID0gZnVuY3Rpb24oY2xhc3NOYW1lLCBvcHRfbW9kaWZpZXIpIHtcbiAgdmFyIGdldE1hcHBpbmcgPSBmdW5jdGlvbihjc3NOYW1lKSB7XG4gICAgcmV0dXJuIGdvb2cuY3NzTmFtZU1hcHBpbmdfW2Nzc05hbWVdIHx8IGNzc05hbWU7XG4gIH07XG5cbiAgdmFyIHJlbmFtZUJ5UGFydHMgPSBmdW5jdGlvbihjc3NOYW1lKSB7XG4gICAgLy8gUmVtYXAgYWxsIHRoZSBwYXJ0cyBpbmRpdmlkdWFsbHkuXG4gICAgdmFyIHBhcnRzID0gY3NzTmFtZS5zcGxpdCgnLScpO1xuICAgIHZhciBtYXBwZWQgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBtYXBwZWQucHVzaChnZXRNYXBwaW5nKHBhcnRzW2ldKSk7XG4gICAgfVxuICAgIHJldHVybiBtYXBwZWQuam9pbignLScpO1xuICB9O1xuXG4gIHZhciByZW5hbWU7XG4gIGlmIChnb29nLmNzc05hbWVNYXBwaW5nXykge1xuICAgIHJlbmFtZSA9IGdvb2cuY3NzTmFtZU1hcHBpbmdTdHlsZV8gPT0gJ0JZX1dIT0xFJyA/XG4gICAgICAgIGdldE1hcHBpbmcgOiByZW5hbWVCeVBhcnRzO1xuICB9IGVsc2Uge1xuICAgIHJlbmFtZSA9IGZ1bmN0aW9uKGEpIHtcbiAgICAgIHJldHVybiBhO1xuICAgIH07XG4gIH1cblxuICBpZiAob3B0X21vZGlmaWVyKSB7XG4gICAgcmV0dXJuIGNsYXNzTmFtZSArICctJyArIHJlbmFtZShvcHRfbW9kaWZpZXIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiByZW5hbWUoY2xhc3NOYW1lKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIFNldHMgdGhlIG1hcCB0byBjaGVjayB3aGVuIHJldHVybmluZyBhIHZhbHVlIGZyb20gZ29vZy5nZXRDc3NOYW1lKCkuIEV4YW1wbGU6XG4gKiA8cHJlPlxuICogZ29vZy5zZXRDc3NOYW1lTWFwcGluZyh7XG4gKiAgIFwiZ29vZ1wiOiBcImFcIixcbiAqICAgXCJkaXNhYmxlZFwiOiBcImJcIixcbiAqIH0pO1xuICpcbiAqIHZhciB4ID0gZ29vZy5nZXRDc3NOYW1lKCdnb29nJyk7XG4gKiAvLyBUaGUgZm9sbG93aW5nIGV2YWx1YXRlcyB0bzogXCJhIGEtYlwiLlxuICogZ29vZy5nZXRDc3NOYW1lKCdnb29nJykgKyAnICcgKyBnb29nLmdldENzc05hbWUoeCwgJ2Rpc2FibGVkJylcbiAqIDwvcHJlPlxuICogV2hlbiBkZWNsYXJlZCBhcyBhIG1hcCBvZiBzdHJpbmcgbGl0ZXJhbHMgdG8gc3RyaW5nIGxpdGVyYWxzLCB0aGUgSlNDb21waWxlclxuICogd2lsbCByZXBsYWNlIGFsbCBjYWxscyB0byBnb29nLmdldENzc05hbWUoKSB1c2luZyB0aGUgc3VwcGxpZWQgbWFwIGlmIHRoZVxuICogLS1jbG9zdXJlX3Bhc3MgZmxhZyBpcyBzZXQuXG4gKlxuICogQHBhcmFtIHshT2JqZWN0fSBtYXBwaW5nIEEgbWFwIG9mIHN0cmluZ3MgdG8gc3RyaW5ncyB3aGVyZSBrZXlzIGFyZSBwb3NzaWJsZVxuICogICAgIGFyZ3VtZW50cyB0byBnb29nLmdldENzc05hbWUoKSBhbmQgdmFsdWVzIGFyZSB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXNcbiAqICAgICB0aGF0IHNob3VsZCBiZSByZXR1cm5lZC5cbiAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0X3N0eWxlIFRoZSBzdHlsZSBvZiBjc3MgbmFtZSBtYXBwaW5nLiBUaGVyZSBhcmUgdHdvIHZhbGlkXG4gKiAgICAgb3B0aW9uczogJ0JZX1BBUlQnLCBhbmQgJ0JZX1dIT0xFJy5cbiAqIEBzZWUgZ29vZy5nZXRDc3NOYW1lIGZvciBhIGRlc2NyaXB0aW9uLlxuICovXG5nb29nLnNldENzc05hbWVNYXBwaW5nID0gZnVuY3Rpb24obWFwcGluZywgb3B0X3N0eWxlKSB7XG4gIGdvb2cuY3NzTmFtZU1hcHBpbmdfID0gbWFwcGluZztcbiAgZ29vZy5jc3NOYW1lTWFwcGluZ1N0eWxlXyA9IG9wdF9zdHlsZTtcbn07XG5cblxuLyoqXG4gKiBUbyB1c2UgQ1NTIHJlbmFtaW5nIGluIGNvbXBpbGVkIG1vZGUsIG9uZSBvZiB0aGUgaW5wdXQgZmlsZXMgc2hvdWxkIGhhdmUgYVxuICogY2FsbCB0byBnb29nLnNldENzc05hbWVNYXBwaW5nKCkgd2l0aCBhbiBvYmplY3QgbGl0ZXJhbCB0aGF0IHRoZSBKU0NvbXBpbGVyXG4gKiBjYW4gZXh0cmFjdCBhbmQgdXNlIHRvIHJlcGxhY2UgYWxsIGNhbGxzIHRvIGdvb2cuZ2V0Q3NzTmFtZSgpLiBJbiB1bmNvbXBpbGVkXG4gKiBtb2RlLCBKYXZhU2NyaXB0IGNvZGUgc2hvdWxkIGJlIGxvYWRlZCBiZWZvcmUgdGhpcyBiYXNlLmpzIGZpbGUgdGhhdCBkZWNsYXJlc1xuICogYSBnbG9iYWwgdmFyaWFibGUsIENMT1NVUkVfQ1NTX05BTUVfTUFQUElORywgd2hpY2ggaXMgdXNlZCBiZWxvdy4gVGhpcyBpc1xuICogdG8gZW5zdXJlIHRoYXQgdGhlIG1hcHBpbmcgaXMgbG9hZGVkIGJlZm9yZSBhbnkgY2FsbHMgdG8gZ29vZy5nZXRDc3NOYW1lKClcbiAqIGFyZSBtYWRlIGluIHVuY29tcGlsZWQgbW9kZS5cbiAqXG4gKiBBIGhvb2sgZm9yIG92ZXJyaWRpbmcgdGhlIENTUyBuYW1lIG1hcHBpbmcuXG4gKiBAdHlwZSB7T2JqZWN0fHVuZGVmaW5lZH1cbiAqL1xuZ29vZy5nbG9iYWwuQ0xPU1VSRV9DU1NfTkFNRV9NQVBQSU5HO1xuXG5cbmlmICghQ09NUElMRUQgJiYgZ29vZy5nbG9iYWwuQ0xPU1VSRV9DU1NfTkFNRV9NQVBQSU5HKSB7XG4gIC8vIFRoaXMgZG9lcyBub3QgY2FsbCBnb29nLnNldENzc05hbWVNYXBwaW5nKCkgYmVjYXVzZSB0aGUgSlNDb21waWxlclxuICAvLyByZXF1aXJlcyB0aGF0IGdvb2cuc2V0Q3NzTmFtZU1hcHBpbmcoKSBiZSBjYWxsZWQgd2l0aCBhbiBvYmplY3QgbGl0ZXJhbC5cbiAgZ29vZy5jc3NOYW1lTWFwcGluZ18gPSBnb29nLmdsb2JhbC5DTE9TVVJFX0NTU19OQU1FX01BUFBJTkc7XG59XG5cblxuLyoqXG4gKiBBYnN0cmFjdCBpbXBsZW1lbnRhdGlvbiBvZiBnb29nLmdldE1zZyBmb3IgdXNlIHdpdGggbG9jYWxpemVkIG1lc3NhZ2VzLlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciBUcmFuc2xhdGFibGUgc3RyaW5nLCBwbGFjZXMgaG9sZGVycyBpbiB0aGUgZm9ybSB7JGZvb30uXG4gKiBAcGFyYW0ge09iamVjdD19IG9wdF92YWx1ZXMgTWFwIG9mIHBsYWNlIGhvbGRlciBuYW1lIHRvIHZhbHVlLlxuICogQHJldHVybiB7c3RyaW5nfSBtZXNzYWdlIHdpdGggcGxhY2Vob2xkZXJzIGZpbGxlZC5cbiAqL1xuZ29vZy5nZXRNc2cgPSBmdW5jdGlvbihzdHIsIG9wdF92YWx1ZXMpIHtcbiAgdmFyIHZhbHVlcyA9IG9wdF92YWx1ZXMgfHwge307XG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZXMpIHtcbiAgICB2YXIgdmFsdWUgPSAoJycgKyB2YWx1ZXNba2V5XSkucmVwbGFjZSgvXFwkL2csICckJCQkJyk7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFxcXHtcXFxcJCcgKyBrZXkgKyAnXFxcXH0nLCAnZ2knKSwgdmFsdWUpO1xuICB9XG4gIHJldHVybiBzdHI7XG59O1xuXG5cbi8qKlxuICogRXhwb3NlcyBhbiB1bm9iZnVzY2F0ZWQgZ2xvYmFsIG5hbWVzcGFjZSBwYXRoIGZvciB0aGUgZ2l2ZW4gb2JqZWN0LlxuICogTm90ZSB0aGF0IGZpZWxkcyBvZiB0aGUgZXhwb3J0ZWQgb2JqZWN0ICp3aWxsKiBiZSBvYmZ1c2NhdGVkLFxuICogdW5sZXNzIHRoZXkgYXJlIGV4cG9ydGVkIGluIHR1cm4gdmlhIHRoaXMgZnVuY3Rpb24gb3JcbiAqIGdvb2cuZXhwb3J0UHJvcGVydHlcbiAqXG4gKiA8cD5BbHNvIGhhbmR5IGZvciBtYWtpbmcgcHVibGljIGl0ZW1zIHRoYXQgYXJlIGRlZmluZWQgaW4gYW5vbnltb3VzXG4gKiBjbG9zdXJlcy5cbiAqXG4gKiBleC4gZ29vZy5leHBvcnRTeW1ib2woJ3B1YmxpYy5wYXRoLkZvbycsIEZvbyk7XG4gKlxuICogZXguIGdvb2cuZXhwb3J0U3ltYm9sKCdwdWJsaWMucGF0aC5Gb28uc3RhdGljRnVuY3Rpb24nLFxuICogICAgICAgICAgICAgICAgICAgICAgIEZvby5zdGF0aWNGdW5jdGlvbik7XG4gKiAgICAgcHVibGljLnBhdGguRm9vLnN0YXRpY0Z1bmN0aW9uKCk7XG4gKlxuICogZXguIGdvb2cuZXhwb3J0U3ltYm9sKCdwdWJsaWMucGF0aC5Gb28ucHJvdG90eXBlLm15TWV0aG9kJyxcbiAqICAgICAgICAgICAgICAgICAgICAgICBGb28ucHJvdG90eXBlLm15TWV0aG9kKTtcbiAqICAgICBuZXcgcHVibGljLnBhdGguRm9vKCkubXlNZXRob2QoKTtcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHVibGljUGF0aCBVbm9iZnVzY2F0ZWQgbmFtZSB0byBleHBvcnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBPYmplY3QgdGhlIG5hbWUgc2hvdWxkIHBvaW50IHRvLlxuICogQHBhcmFtIHtPYmplY3Q9fSBvcHRfb2JqZWN0VG9FeHBvcnRUbyBUaGUgb2JqZWN0IHRvIGFkZCB0aGUgcGF0aCB0bzsgZGVmYXVsdFxuICogICAgIGlzIHxnb29nLmdsb2JhbHwuXG4gKi9cbmdvb2cuZXhwb3J0U3ltYm9sID0gZnVuY3Rpb24ocHVibGljUGF0aCwgb2JqZWN0LCBvcHRfb2JqZWN0VG9FeHBvcnRUbykge1xuICBnb29nLmV4cG9ydFBhdGhfKHB1YmxpY1BhdGgsIG9iamVjdCwgb3B0X29iamVjdFRvRXhwb3J0VG8pO1xufTtcblxuXG4vKipcbiAqIEV4cG9ydHMgYSBwcm9wZXJ0eSB1bm9iZnVzY2F0ZWQgaW50byB0aGUgb2JqZWN0J3MgbmFtZXNwYWNlLlxuICogZXguIGdvb2cuZXhwb3J0UHJvcGVydHkoRm9vLCAnc3RhdGljRnVuY3Rpb24nLCBGb28uc3RhdGljRnVuY3Rpb24pO1xuICogZXguIGdvb2cuZXhwb3J0UHJvcGVydHkoRm9vLnByb3RvdHlwZSwgJ215TWV0aG9kJywgRm9vLnByb3RvdHlwZS5teU1ldGhvZCk7XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IE9iamVjdCB3aG9zZSBzdGF0aWMgcHJvcGVydHkgaXMgYmVpbmcgZXhwb3J0ZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gcHVibGljTmFtZSBVbm9iZnVzY2F0ZWQgbmFtZSB0byBleHBvcnQuXG4gKiBAcGFyYW0geyp9IHN5bWJvbCBPYmplY3QgdGhlIG5hbWUgc2hvdWxkIHBvaW50IHRvLlxuICovXG5nb29nLmV4cG9ydFByb3BlcnR5ID0gZnVuY3Rpb24ob2JqZWN0LCBwdWJsaWNOYW1lLCBzeW1ib2wpIHtcbiAgb2JqZWN0W3B1YmxpY05hbWVdID0gc3ltYm9sO1xufTtcblxuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlci5cbiAqXG4gKiBVc2FnZTpcbiAqIDxwcmU+XG4gKiBmdW5jdGlvbiBQYXJlbnRDbGFzcyhhLCBiKSB7IH1cbiAqIFBhcmVudENsYXNzLnByb3RvdHlwZS5mb28gPSBmdW5jdGlvbihhKSB7IH1cbiAqXG4gKiBmdW5jdGlvbiBDaGlsZENsYXNzKGEsIGIsIGMpIHtcbiAqICAgZ29vZy5iYXNlKHRoaXMsIGEsIGIpO1xuICogfVxuICogZ29vZy5pbmhlcml0cyhDaGlsZENsYXNzLCBQYXJlbnRDbGFzcyk7XG4gKlxuICogdmFyIGNoaWxkID0gbmV3IENoaWxkQ2xhc3MoJ2EnLCAnYicsICdzZWUnKTtcbiAqIGNoaWxkLmZvbygpOyAvLyB3b3Jrc1xuICogPC9wcmU+XG4gKlxuICogSW4gYWRkaXRpb24sIGEgc3VwZXJjbGFzcycgaW1wbGVtZW50YXRpb24gb2YgYSBtZXRob2QgY2FuIGJlIGludm9rZWRcbiAqIGFzIGZvbGxvd3M6XG4gKlxuICogPHByZT5cbiAqIENoaWxkQ2xhc3MucHJvdG90eXBlLmZvbyA9IGZ1bmN0aW9uKGEpIHtcbiAqICAgQ2hpbGRDbGFzcy5zdXBlckNsYXNzXy5mb28uY2FsbCh0aGlzLCBhKTtcbiAqICAgLy8gb3RoZXIgY29kZVxuICogfTtcbiAqIDwvcHJlPlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNoaWxkQ3RvciBDaGlsZCBjbGFzcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcmVudEN0b3IgUGFyZW50IGNsYXNzLlxuICovXG5nb29nLmluaGVyaXRzID0gZnVuY3Rpb24oY2hpbGRDdG9yLCBwYXJlbnRDdG9yKSB7XG4gIC8qKiBAY29uc3RydWN0b3IgKi9cbiAgZnVuY3Rpb24gdGVtcEN0b3IoKSB7fTtcbiAgdGVtcEN0b3IucHJvdG90eXBlID0gcGFyZW50Q3Rvci5wcm90b3R5cGU7XG4gIGNoaWxkQ3Rvci5zdXBlckNsYXNzXyA9IHBhcmVudEN0b3IucHJvdG90eXBlO1xuICBjaGlsZEN0b3IucHJvdG90eXBlID0gbmV3IHRlbXBDdG9yKCk7XG4gIGNoaWxkQ3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjaGlsZEN0b3I7XG59O1xuXG5cbi8qKlxuICogQ2FsbCB1cCB0byB0aGUgc3VwZXJjbGFzcy5cbiAqXG4gKiBJZiB0aGlzIGlzIGNhbGxlZCBmcm9tIGEgY29uc3RydWN0b3IsIHRoZW4gdGhpcyBjYWxscyB0aGUgc3VwZXJjbGFzc1xuICogY29udHJ1Y3RvciB3aXRoIGFyZ3VtZW50cyAxLU4uXG4gKlxuICogSWYgdGhpcyBpcyBjYWxsZWQgZnJvbSBhIHByb3RvdHlwZSBtZXRob2QsIHRoZW4geW91IG11c3QgcGFzc1xuICogdGhlIG5hbWUgb2YgdGhlIG1ldGhvZCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIHRoaXMgZnVuY3Rpb24uIElmXG4gKiB5b3UgZG8gbm90LCB5b3Ugd2lsbCBnZXQgYSBydW50aW1lIGVycm9yLiBUaGlzIGNhbGxzIHRoZSBzdXBlcmNsYXNzJ1xuICogbWV0aG9kIHdpdGggYXJndW1lbnRzIDItTi5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIG9ubHkgd29ya3MgaWYgeW91IHVzZSBnb29nLmluaGVyaXRzIHRvIGV4cHJlc3NcbiAqIGluaGVyaXRhbmNlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB5b3VyIGNsYXNzZXMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBpcyBhIGNvbXBpbGVyIHByaW1pdGl2ZS4gQXQgY29tcGlsZS10aW1lLCB0aGVcbiAqIGNvbXBpbGVyIHdpbGwgZG8gbWFjcm8gZXhwYW5zaW9uIHRvIHJlbW92ZSBhIGxvdCBvZlxuICogdGhlIGV4dHJhIG92ZXJoZWFkIHRoYXQgdGhpcyBmdW5jdGlvbiBpbnRyb2R1Y2VzLiBUaGUgY29tcGlsZXJcbiAqIHdpbGwgYWxzbyBlbmZvcmNlIGEgbG90IG9mIHRoZSBhc3N1bXB0aW9ucyB0aGF0IHRoaXMgZnVuY3Rpb25cbiAqIG1ha2VzLCBhbmQgdHJlYXQgaXQgYXMgYSBjb21waWxlciBlcnJvciBpZiB5b3UgYnJlYWsgdGhlbS5cbiAqXG4gKiBAcGFyYW0geyFPYmplY3R9IG1lIFNob3VsZCBhbHdheXMgYmUgXCJ0aGlzXCIuXG4gKiBAcGFyYW0geyo9fSBvcHRfbWV0aG9kTmFtZSBUaGUgbWV0aG9kIG5hbWUgaWYgY2FsbGluZyBhIHN1cGVyIG1ldGhvZC5cbiAqIEBwYXJhbSB7Li4uKn0gdmFyX2FyZ3MgVGhlIHJlc3Qgb2YgdGhlIGFyZ3VtZW50cy5cbiAqIEByZXR1cm4geyp9IFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHN1cGVyY2xhc3MgbWV0aG9kLlxuICovXG5nb29nLmJhc2UgPSBmdW5jdGlvbihtZSwgb3B0X21ldGhvZE5hbWUsIHZhcl9hcmdzKSB7XG4gIHZhciBjYWxsZXIgPSBhcmd1bWVudHMuY2FsbGVlLmNhbGxlcjtcbiAgaWYgKGNhbGxlci5zdXBlckNsYXNzXykge1xuICAgIC8vIFRoaXMgaXMgYSBjb25zdHJ1Y3Rvci4gQ2FsbCB0aGUgc3VwZXJjbGFzcyBjb25zdHJ1Y3Rvci5cbiAgICByZXR1cm4gY2FsbGVyLnN1cGVyQ2xhc3NfLmNvbnN0cnVjdG9yLmFwcGx5KFxuICAgICAgICBtZSwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG4gIH1cblxuICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gIHZhciBmb3VuZENhbGxlciA9IGZhbHNlO1xuICBmb3IgKHZhciBjdG9yID0gbWUuY29uc3RydWN0b3I7XG4gICAgICAgY3RvcjsgY3RvciA9IGN0b3Iuc3VwZXJDbGFzc18gJiYgY3Rvci5zdXBlckNsYXNzXy5jb25zdHJ1Y3Rvcikge1xuICAgIGlmIChjdG9yLnByb3RvdHlwZVtvcHRfbWV0aG9kTmFtZV0gPT09IGNhbGxlcikge1xuICAgICAgZm91bmRDYWxsZXIgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoZm91bmRDYWxsZXIpIHtcbiAgICAgIHJldHVybiBjdG9yLnByb3RvdHlwZVtvcHRfbWV0aG9kTmFtZV0uYXBwbHkobWUsIGFyZ3MpO1xuICAgIH1cbiAgfVxuXG4gIC8vIElmIHdlIGRpZCBub3QgZmluZCB0aGUgY2FsbGVyIGluIHRoZSBwcm90b3R5cGUgY2hhaW4sXG4gIC8vIHRoZW4gb25lIG9mIHR3byB0aGluZ3MgaGFwcGVuZWQ6XG4gIC8vIDEpIFRoZSBjYWxsZXIgaXMgYW4gaW5zdGFuY2UgbWV0aG9kLlxuICAvLyAyKSBUaGlzIG1ldGhvZCB3YXMgbm90IGNhbGxlZCBieSB0aGUgcmlnaHQgY2FsbGVyLlxuICBpZiAobWVbb3B0X21ldGhvZE5hbWVdID09PSBjYWxsZXIpIHtcbiAgICByZXR1cm4gbWUuY29uc3RydWN0b3IucHJvdG90eXBlW29wdF9tZXRob2ROYW1lXS5hcHBseShtZSwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdnb29nLmJhc2UgY2FsbGVkIGZyb20gYSBtZXRob2Qgb2Ygb25lIG5hbWUgJyArXG4gICAgICAgICd0byBhIG1ldGhvZCBvZiBhIGRpZmZlcmVudCBuYW1lJyk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBBbGxvdyBmb3IgYWxpYXNpbmcgd2l0aGluIHNjb3BlIGZ1bmN0aW9ucy4gIFRoaXMgZnVuY3Rpb24gZXhpc3RzIGZvclxuICogdW5jb21waWxlZCBjb2RlIC0gaW4gY29tcGlsZWQgY29kZSB0aGUgY2FsbHMgd2lsbCBiZSBpbmxpbmVkIGFuZCB0aGVcbiAqIGFsaWFzZXMgYXBwbGllZC4gIEluIHVuY29tcGlsZWQgY29kZSB0aGUgZnVuY3Rpb24gaXMgc2ltcGx5IHJ1biBzaW5jZSB0aGVcbiAqIGFsaWFzZXMgYXMgd3JpdHRlbiBhcmUgdmFsaWQgSmF2YVNjcmlwdC5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gZm4gRnVuY3Rpb24gdG8gY2FsbC4gIFRoaXMgZnVuY3Rpb24gY2FuIGNvbnRhaW4gYWxpYXNlc1xuICogICAgIHRvIG5hbWVzcGFjZXMgKGUuZy4gXCJ2YXIgZG9tID0gZ29vZy5kb21cIikgb3IgY2xhc3Nlc1xuICogICAgKGUuZy4gXCJ2YXIgVGltZXIgPSBnb29nLlRpbWVyXCIpLlxuICovXG5nb29nLnNjb3BlID0gZnVuY3Rpb24oZm4pIHtcbiAgZm4uY2FsbChnb29nLmdsb2JhbCk7XG59O1xuXG5cbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBDUkMzMiDlrp/oo4UuXG4gKi9cbmdvb2cucHJvdmlkZSgnWmxpYi5DUkMzMicpO1xuXG5nb29nLnJlcXVpcmUoJ1VTRV9UWVBFREFSUkFZJyk7XG5cbi8qKiBAZGVmaW5lIHtib29sZWFufSAqL1xudmFyIFpMSUJfQ1JDMzJfQ09NUEFDVCA9IGZhbHNlO1xuXG5nb29nLnNjb3BlKGZ1bmN0aW9uKCkge1xuXG4vKipcbiAqIENSQzMyIOODj+ODg+OCt+ODpeWApOOCkuWPluW+l1xuICogQHBhcmFtIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBkYXRhIGRhdGEgYnl0ZSBhcnJheS5cbiAqIEBwYXJhbSB7bnVtYmVyPX0gcG9zIGRhdGEgcG9zaXRpb24uXG4gKiBAcGFyYW0ge251bWJlcj19IGxlbmd0aCBkYXRhIGxlbmd0aC5cbiAqIEByZXR1cm4ge251bWJlcn0gQ1JDMzIuXG4gKi9cblpsaWIuQ1JDMzIuY2FsYyA9IGZ1bmN0aW9uKGRhdGEsIHBvcywgbGVuZ3RoKSB7XG4gIHJldHVybiBabGliLkNSQzMyLnVwZGF0ZShkYXRhLCAwLCBwb3MsIGxlbmd0aCk7XG59O1xuXG4vKipcbiAqIENSQzMy44OP44OD44K344Ol5YCk44KS5pu05pawXG4gKiBAcGFyYW0geyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IGRhdGEgZGF0YSBieXRlIGFycmF5LlxuICogQHBhcmFtIHtudW1iZXJ9IGNyYyBDUkMzMi5cbiAqIEBwYXJhbSB7bnVtYmVyPX0gcG9zIGRhdGEgcG9zaXRpb24uXG4gKiBAcGFyYW0ge251bWJlcj19IGxlbmd0aCBkYXRhIGxlbmd0aC5cbiAqIEByZXR1cm4ge251bWJlcn0gQ1JDMzIuXG4gKi9cblpsaWIuQ1JDMzIudXBkYXRlID0gZnVuY3Rpb24oZGF0YSwgY3JjLCBwb3MsIGxlbmd0aCkge1xuICB2YXIgdGFibGUgPSBabGliLkNSQzMyLlRhYmxlO1xuICB2YXIgaSA9ICh0eXBlb2YgcG9zID09PSAnbnVtYmVyJykgPyBwb3MgOiAocG9zID0gMCk7XG4gIHZhciBpbCA9ICh0eXBlb2YgbGVuZ3RoID09PSAnbnVtYmVyJykgPyBsZW5ndGggOiBkYXRhLmxlbmd0aDtcblxuICBjcmMgXj0gMHhmZmZmZmZmZjtcblxuICAvLyBsb29wIHVucm9sbGluZyBmb3IgcGVyZm9ybWFuY2VcbiAgZm9yIChpID0gaWwgJiA3OyBpLS07ICsrcG9zKSB7XG4gICAgY3JjID0gKGNyYyA+Pj4gOCkgXiB0YWJsZVsoY3JjIF4gZGF0YVtwb3NdKSAmIDB4ZmZdO1xuICB9XG4gIGZvciAoaSA9IGlsID4+IDM7IGktLTsgcG9zICs9IDgpIHtcbiAgICBjcmMgPSAoY3JjID4+PiA4KSBeIHRhYmxlWyhjcmMgXiBkYXRhW3BvcyAgICBdKSAmIDB4ZmZdO1xuICAgIGNyYyA9IChjcmMgPj4+IDgpIF4gdGFibGVbKGNyYyBeIGRhdGFbcG9zICsgMV0pICYgMHhmZl07XG4gICAgY3JjID0gKGNyYyA+Pj4gOCkgXiB0YWJsZVsoY3JjIF4gZGF0YVtwb3MgKyAyXSkgJiAweGZmXTtcbiAgICBjcmMgPSAoY3JjID4+PiA4KSBeIHRhYmxlWyhjcmMgXiBkYXRhW3BvcyArIDNdKSAmIDB4ZmZdO1xuICAgIGNyYyA9IChjcmMgPj4+IDgpIF4gdGFibGVbKGNyYyBeIGRhdGFbcG9zICsgNF0pICYgMHhmZl07XG4gICAgY3JjID0gKGNyYyA+Pj4gOCkgXiB0YWJsZVsoY3JjIF4gZGF0YVtwb3MgKyA1XSkgJiAweGZmXTtcbiAgICBjcmMgPSAoY3JjID4+PiA4KSBeIHRhYmxlWyhjcmMgXiBkYXRhW3BvcyArIDZdKSAmIDB4ZmZdO1xuICAgIGNyYyA9IChjcmMgPj4+IDgpIF4gdGFibGVbKGNyYyBeIGRhdGFbcG9zICsgN10pICYgMHhmZl07XG4gIH1cblxuICByZXR1cm4gKGNyYyBeIDB4ZmZmZmZmZmYpID4+PiAwO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gbnVtXG4gKiBAcGFyYW0ge251bWJlcn0gY3JjXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5abGliLkNSQzMyLnNpbmdsZSA9IGZ1bmN0aW9uKG51bSwgY3JjKSB7XG4gIHJldHVybiAoWmxpYi5DUkMzMi5UYWJsZVsobnVtIF4gY3JjKSAmIDB4ZmZdIF4gKG51bSA+Pj4gOCkpID4+PiAwO1xufTtcblxuLyoqXG4gKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59XG4gKiBAY29uc3RcbiAqIEBwcml2YXRlXG4gKi9cblpsaWIuQ1JDMzIuVGFibGVfID0gW1xuICAweDAwMDAwMDAwLCAweDc3MDczMDk2LCAweGVlMGU2MTJjLCAweDk5MDk1MWJhLCAweDA3NmRjNDE5LCAweDcwNmFmNDhmLFxuICAweGU5NjNhNTM1LCAweDllNjQ5NWEzLCAweDBlZGI4ODMyLCAweDc5ZGNiOGE0LCAweGUwZDVlOTFlLCAweDk3ZDJkOTg4LFxuICAweDA5YjY0YzJiLCAweDdlYjE3Y2JkLCAweGU3YjgyZDA3LCAweDkwYmYxZDkxLCAweDFkYjcxMDY0LCAweDZhYjAyMGYyLFxuICAweGYzYjk3MTQ4LCAweDg0YmU0MWRlLCAweDFhZGFkNDdkLCAweDZkZGRlNGViLCAweGY0ZDRiNTUxLCAweDgzZDM4NWM3LFxuICAweDEzNmM5ODU2LCAweDY0NmJhOGMwLCAweGZkNjJmOTdhLCAweDhhNjVjOWVjLCAweDE0MDE1YzRmLCAweDYzMDY2Y2Q5LFxuICAweGZhMGYzZDYzLCAweDhkMDgwZGY1LCAweDNiNmUyMGM4LCAweDRjNjkxMDVlLCAweGQ1NjA0MWU0LCAweGEyNjc3MTcyLFxuICAweDNjMDNlNGQxLCAweDRiMDRkNDQ3LCAweGQyMGQ4NWZkLCAweGE1MGFiNTZiLCAweDM1YjVhOGZhLCAweDQyYjI5ODZjLFxuICAweGRiYmJjOWQ2LCAweGFjYmNmOTQwLCAweDMyZDg2Y2UzLCAweDQ1ZGY1Yzc1LCAweGRjZDYwZGNmLCAweGFiZDEzZDU5LFxuICAweDI2ZDkzMGFjLCAweDUxZGUwMDNhLCAweGM4ZDc1MTgwLCAweGJmZDA2MTE2LCAweDIxYjRmNGI1LCAweDU2YjNjNDIzLFxuICAweGNmYmE5NTk5LCAweGI4YmRhNTBmLCAweDI4MDJiODllLCAweDVmMDU4ODA4LCAweGM2MGNkOWIyLCAweGIxMGJlOTI0LFxuICAweDJmNmY3Yzg3LCAweDU4Njg0YzExLCAweGMxNjExZGFiLCAweGI2NjYyZDNkLCAweDc2ZGM0MTkwLCAweDAxZGI3MTA2LFxuICAweDk4ZDIyMGJjLCAweGVmZDUxMDJhLCAweDcxYjE4NTg5LCAweDA2YjZiNTFmLCAweDlmYmZlNGE1LCAweGU4YjhkNDMzLFxuICAweDc4MDdjOWEyLCAweDBmMDBmOTM0LCAweDk2MDlhODhlLCAweGUxMGU5ODE4LCAweDdmNmEwZGJiLCAweDA4NmQzZDJkLFxuICAweDkxNjQ2Yzk3LCAweGU2NjM1YzAxLCAweDZiNmI1MWY0LCAweDFjNmM2MTYyLCAweDg1NjUzMGQ4LCAweGYyNjIwMDRlLFxuICAweDZjMDY5NWVkLCAweDFiMDFhNTdiLCAweDgyMDhmNGMxLCAweGY1MGZjNDU3LCAweDY1YjBkOWM2LCAweDEyYjdlOTUwLFxuICAweDhiYmViOGVhLCAweGZjYjk4ODdjLCAweDYyZGQxZGRmLCAweDE1ZGEyZDQ5LCAweDhjZDM3Y2YzLCAweGZiZDQ0YzY1LFxuICAweDRkYjI2MTU4LCAweDNhYjU1MWNlLCAweGEzYmMwMDc0LCAweGQ0YmIzMGUyLCAweDRhZGZhNTQxLCAweDNkZDg5NWQ3LFxuICAweGE0ZDFjNDZkLCAweGQzZDZmNGZiLCAweDQzNjllOTZhLCAweDM0NmVkOWZjLCAweGFkNjc4ODQ2LCAweGRhNjBiOGQwLFxuICAweDQ0MDQyZDczLCAweDMzMDMxZGU1LCAweGFhMGE0YzVmLCAweGRkMGQ3Y2M5LCAweDUwMDU3MTNjLCAweDI3MDI0MWFhLFxuICAweGJlMGIxMDEwLCAweGM5MGMyMDg2LCAweDU3NjhiNTI1LCAweDIwNmY4NWIzLCAweGI5NjZkNDA5LCAweGNlNjFlNDlmLFxuICAweDVlZGVmOTBlLCAweDI5ZDljOTk4LCAweGIwZDA5ODIyLCAweGM3ZDdhOGI0LCAweDU5YjMzZDE3LCAweDJlYjQwZDgxLFxuICAweGI3YmQ1YzNiLCAweGMwYmE2Y2FkLCAweGVkYjg4MzIwLCAweDlhYmZiM2I2LCAweDAzYjZlMjBjLCAweDc0YjFkMjlhLFxuICAweGVhZDU0NzM5LCAweDlkZDI3N2FmLCAweDA0ZGIyNjE1LCAweDczZGMxNjgzLCAweGUzNjMwYjEyLCAweDk0NjQzYjg0LFxuICAweDBkNmQ2YTNlLCAweDdhNmE1YWE4LCAweGU0MGVjZjBiLCAweDkzMDlmZjlkLCAweDBhMDBhZTI3LCAweDdkMDc5ZWIxLFxuICAweGYwMGY5MzQ0LCAweDg3MDhhM2QyLCAweDFlMDFmMjY4LCAweDY5MDZjMmZlLCAweGY3NjI1NzVkLCAweDgwNjU2N2NiLFxuICAweDE5NmMzNjcxLCAweDZlNmIwNmU3LCAweGZlZDQxYjc2LCAweDg5ZDMyYmUwLCAweDEwZGE3YTVhLCAweDY3ZGQ0YWNjLFxuICAweGY5YjlkZjZmLCAweDhlYmVlZmY5LCAweDE3YjdiZTQzLCAweDYwYjA4ZWQ1LCAweGQ2ZDZhM2U4LCAweGExZDE5MzdlLFxuICAweDM4ZDhjMmM0LCAweDRmZGZmMjUyLCAweGQxYmI2N2YxLCAweGE2YmM1NzY3LCAweDNmYjUwNmRkLCAweDQ4YjIzNjRiLFxuICAweGQ4MGQyYmRhLCAweGFmMGExYjRjLCAweDM2MDM0YWY2LCAweDQxMDQ3YTYwLCAweGRmNjBlZmMzLCAweGE4NjdkZjU1LFxuICAweDMxNmU4ZWVmLCAweDQ2NjliZTc5LCAweGNiNjFiMzhjLCAweGJjNjY4MzFhLCAweDI1NmZkMmEwLCAweDUyNjhlMjM2LFxuICAweGNjMGM3Nzk1LCAweGJiMGI0NzAzLCAweDIyMDIxNmI5LCAweDU1MDUyNjJmLCAweGM1YmEzYmJlLCAweGIyYmQwYjI4LFxuICAweDJiYjQ1YTkyLCAweDVjYjM2YTA0LCAweGMyZDdmZmE3LCAweGI1ZDBjZjMxLCAweDJjZDk5ZThiLCAweDViZGVhZTFkLFxuICAweDliNjRjMmIwLCAweGVjNjNmMjI2LCAweDc1NmFhMzljLCAweDAyNmQ5MzBhLCAweDljMDkwNmE5LCAweGViMGUzNjNmLFxuICAweDcyMDc2Nzg1LCAweDA1MDA1NzEzLCAweDk1YmY0YTgyLCAweGUyYjg3YTE0LCAweDdiYjEyYmFlLCAweDBjYjYxYjM4LFxuICAweDkyZDI4ZTliLCAweGU1ZDViZTBkLCAweDdjZGNlZmI3LCAweDBiZGJkZjIxLCAweDg2ZDNkMmQ0LCAweGYxZDRlMjQyLFxuICAweDY4ZGRiM2Y4LCAweDFmZGE4MzZlLCAweDgxYmUxNmNkLCAweGY2YjkyNjViLCAweDZmYjA3N2UxLCAweDE4Yjc0Nzc3LFxuICAweDg4MDg1YWU2LCAweGZmMGY2YTcwLCAweDY2MDYzYmNhLCAweDExMDEwYjVjLCAweDhmNjU5ZWZmLCAweGY4NjJhZTY5LFxuICAweDYxNmJmZmQzLCAweDE2NmNjZjQ1LCAweGEwMGFlMjc4LCAweGQ3MGRkMmVlLCAweDRlMDQ4MzU0LCAweDM5MDNiM2MyLFxuICAweGE3NjcyNjYxLCAweGQwNjAxNmY3LCAweDQ5Njk0NzRkLCAweDNlNmU3N2RiLCAweGFlZDE2YTRhLCAweGQ5ZDY1YWRjLFxuICAweDQwZGYwYjY2LCAweDM3ZDgzYmYwLCAweGE5YmNhZTUzLCAweGRlYmI5ZWM1LCAweDQ3YjJjZjdmLCAweDMwYjVmZmU5LFxuICAweGJkYmRmMjFjLCAweGNhYmFjMjhhLCAweDUzYjM5MzMwLCAweDI0YjRhM2E2LCAweGJhZDAzNjA1LCAweGNkZDcwNjkzLFxuICAweDU0ZGU1NzI5LCAweDIzZDk2N2JmLCAweGIzNjY3YTJlLCAweGM0NjE0YWI4LCAweDVkNjgxYjAyLCAweDJhNmYyYjk0LFxuICAweGI0MGJiZTM3LCAweGMzMGM4ZWExLCAweDVhMDVkZjFiLCAweDJkMDJlZjhkXG5dO1xuXG4vKipcbiAqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQzMkFycmF5KX0gQ1JDLTMyIFRhYmxlLlxuICogQGNvbnN0XG4gKi9cblpsaWIuQ1JDMzIuVGFibGUgPSBaTElCX0NSQzMyX0NPTVBBQ1QgPyAoZnVuY3Rpb24oKSB7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50MzJBcnJheSl9ICovXG4gIHZhciB0YWJsZSA9IG5ldyAoVVNFX1RZUEVEQVJSQVkgPyBVaW50MzJBcnJheSA6IEFycmF5KSgyNTYpO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGM7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgaTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBqO1xuXG4gIGZvciAoaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgIGMgPSBpO1xuICAgIGZvciAoaiA9IDA7IGogPCA4OyArK2opIHtcbiAgICAgIGMgPSAoYyAmIDEpID8gKDB4ZWRCODgzMjAgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpO1xuICAgIH1cbiAgICB0YWJsZVtpXSA9IGMgPj4+IDA7XG4gIH1cblxuICByZXR1cm4gdGFibGU7XG59KSgpIDogVVNFX1RZUEVEQVJSQVkgPyBuZXcgVWludDMyQXJyYXkoWmxpYi5DUkMzMi5UYWJsZV8pIDogWmxpYi5DUkMzMi5UYWJsZV87XG5cbn0pO1xuIiwiLyoqXG4gKiBkZWZpbmVzXG4gKi9cblxuZ29vZy5wcm92aWRlKCdVU0VfVFlQRURBUlJBWScpO1xuXG4vLyBTYWZhcmkg44GMIHR5cGVvZiBVaW50OEFycmF5ID09PSAnb2JqZWN0JyDjgavjgarjgovjgZ/jgoHjgIFcbi8vIOacquWumue+qeOBi+WQpuOBi+OBpyBUeXBlZCBBcnJheSDjga7kvb/nlKjjgpLmsbrlrprjgZnjgotcblxuLyoqIEBjb25zdCB7Ym9vbGVhbn0gdXNlIHR5cGVkIGFycmF5IGZsYWcuICovXG52YXIgVVNFX1RZUEVEQVJSQVkgPVxuICAodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnKSAmJlxuICAodHlwZW9mIFVpbnQxNkFycmF5ICE9PSAndW5kZWZpbmVkJykgJiZcbiAgKHR5cGVvZiBVaW50MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCcpICYmXG4gICh0eXBlb2YgRGF0YVZpZXcgIT09ICd1bmRlZmluZWQnKTtcbiIsImdvb2cucmVxdWlyZSgnWmxpYi5DUkMzMicpO1xuXG5nb29nLmV4cG9ydFN5bWJvbCgnWmxpYi5DUkMzMicsIFpsaWIuQ1JDMzIpO1xuZ29vZy5leHBvcnRTeW1ib2woJ1psaWIuQ1JDMzIuY2FsYycsIFpsaWIuQ1JDMzIuY2FsYyk7XG5nb29nLmV4cG9ydFN5bWJvbCgnWmxpYi5DUkMzMi51cGRhdGUnLCBabGliLkNSQzMyLnVwZGF0ZSk7Il19 \ No newline at end of file diff --git a/bin/crc32.min.js b/bin/crc32.min.js index 865e57e..a977cf1 100644 --- a/bin/crc32.min.js +++ b/bin/crc32.min.js @@ -4,4 +4,4 @@ 2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755, 2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956, 3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270, -936918E3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]};l.a="undefined"!==typeof Uint8Array&&"undefined"!==typeof Uint16Array&&"undefined"!==typeof Uint32Array?new Uint32Array(l.b):l.b;h("Zlib.CRC32",l);h("Zlib.CRC32.calc",l.c);h("Zlib.CRC32.update",l.update);}).call(this); //@ sourceMappingURL=crc32.min.js.map +936918E3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]};l.a="undefined"!==typeof Uint8Array&&"undefined"!==typeof Uint16Array&&"undefined"!==typeof Uint32Array&&"undefined"!==typeof DataView?new Uint32Array(l.b):l.b;h("Zlib.CRC32",l);h("Zlib.CRC32.calc",l.c);h("Zlib.CRC32.update",l.update);}).call(this); diff --git a/bin/deflate.dev.min.js b/bin/deflate.dev.min.js new file mode 100644 index 0000000..f816b4d --- /dev/null +++ b/bin/deflate.dev.min.js @@ -0,0 +1,26 @@ +/** @license zlib.js 2012 - imaya [ https://github.com/imaya/zlib.js ] The MIT License */(function() {'use strict';var n=void 0,w=!0,aa=this;function ba(f,d){var c=f.split("."),e=aa;!(c[0]in e)&&e.execScript&&e.execScript("var "+c[0]);for(var b;c.length&&(b=c.shift());)!c.length&&d!==n?e[b]=d:e=e[b]?e[b]:e[b]={}};var C="undefined"!==typeof Uint8Array&&"undefined"!==typeof Uint16Array&&"undefined"!==typeof Uint32Array&&"undefined"!==typeof DataView;function K(f,d){this.index="number"===typeof d?d:0;this.e=0;this.buffer=f instanceof(C?Uint8Array:Array)?f:new (C?Uint8Array:Array)(32768);if(2*this.buffer.length<=this.index)throw Error("invalid index");this.buffer.length<=this.index&&ca(this)}function ca(f){var d=f.buffer,c,e=d.length,b=new (C?Uint8Array:Array)(e<<1);if(C)b.set(d);else for(c=0;c>>8&255]<<16|L[f>>>16&255]<<8|L[f>>>24&255])>>32-d:L[f]>>8-d);if(8>d+a)g=g<>d-m-1&1,8===++a&&(a=0,e[b++]=L[g],g=0,b===e.length&&(e=ca(this)));e[b]=g;this.buffer=e;this.e=a;this.index=b};K.prototype.finish=function(){var f=this.buffer,d=this.index,c;0M;++M){for(var N=M,S=N,ea=7,N=N>>>1;N;N>>>=1)S<<=1,S|=N&1,--ea;da[M]=(S<>>0}var L=da;function ia(f){this.buffer=new (C?Uint16Array:Array)(2*f);this.length=0}ia.prototype.getParent=function(f){return 2*((f-2)/4|0)};ia.prototype.push=function(f,d){var c,e,b=this.buffer,a;c=this.length;b[this.length++]=d;for(b[this.length++]=f;0b[e])a=b[c],b[c]=b[e],b[e]=a,a=b[c+1],b[c+1]=b[e+1],b[e+1]=a,c=e;else break;return this.length}; +ia.prototype.pop=function(){var f,d,c=this.buffer,e,b,a;d=c[0];f=c[1];this.length-=2;c[0]=c[this.length];c[1]=c[this.length+1];for(a=0;;){b=2*a+2;if(b>=this.length)break;b+2c[b]&&(b+=2);if(c[b]>c[a])e=c[a],c[a]=c[b],c[b]=e,e=c[a+1],c[a+1]=c[b+1],c[b+1]=e;else break;a=b}return{index:f,value:d,length:this.length}};function ka(f,d){this.d=la;this.i=0;this.input=C&&f instanceof Array?new Uint8Array(f):f;this.c=0;d&&(d.lazy&&(this.i=d.lazy),"number"===typeof d.compressionType&&(this.d=d.compressionType),d.outputBuffer&&(this.a=C&&d.outputBuffer instanceof Array?new Uint8Array(d.outputBuffer):d.outputBuffer),"number"===typeof d.outputIndex&&(this.c=d.outputIndex));this.a||(this.a=new (C?Uint8Array:Array)(32768))}var la=2,na={NONE:0,h:1,g:la,n:3},T=[],U; +for(U=0;288>U;U++)switch(w){case 143>=U:T.push([U+48,8]);break;case 255>=U:T.push([U-144+400,9]);break;case 279>=U:T.push([U-256+0,7]);break;case 287>=U:T.push([U-280+192,8]);break;default:throw"invalid literal: "+U;} +ka.prototype.f=function(){var f,d,c,e,b=this.input;switch(this.d){case 0:c=0;for(e=b.length;c>>8&255;l[h++]=p&255;l[h++]=p>>>8&255;if(C)l.set(a,h),h+=a.length,l=l.subarray(0,h);else{t=0;for(u=a.length;tv)for(;0v?v:138,A>v-3&&A=A?(E[D++]=17,E[D++]=A-3,H[17]++):(E[D++]=18,E[D++]=A-11,H[18]++),v-=A;else if(E[D++]=F[r],H[F[r]]++,v--,3>v)for(;0v?v:6,A>v-3&&Ay;y++)ja[y]=ga[La[y]];for(Q=19;4=b:return[265,b-11,1];case 14>=b:return[266,b-13,1];case 16>=b:return[267,b-15,1];case 18>=b:return[268,b-17,1];case 22>=b:return[269,b-19,2];case 26>=b:return[270,b-23,2];case 30>=b:return[271,b-27,2];case 34>=b:return[272, +b-31,2];case 42>=b:return[273,b-35,3];case 50>=b:return[274,b-43,3];case 58>=b:return[275,b-51,3];case 66>=b:return[276,b-59,3];case 82>=b:return[277,b-67,4];case 98>=b:return[278,b-83,4];case 114>=b:return[279,b-99,4];case 130>=b:return[280,b-115,4];case 162>=b:return[281,b-131,5];case 194>=b:return[282,b-163,5];case 226>=b:return[283,b-195,5];case 257>=b:return[284,b-227,5];case 258===b:return[285,b-258,0];default:throw"invalid length: "+b;}}var d=[],c,e;for(c=3;258>=c;c++)e=f(c),d[c]=e[2]<<24| +e[1]<<16|e[0];return d}(),Ha=C?new Uint32Array(sa):sa; +function oa(f,d){function c(b,c){var a=b.k,d=[],e=0,f;f=Ha[b.length];d[e++]=f&65535;d[e++]=f>>16&255;d[e++]=f>>24;var g;switch(w){case 1===a:g=[0,a-1,0];break;case 2===a:g=[1,a-2,0];break;case 3===a:g=[2,a-3,0];break;case 4===a:g=[3,a-4,0];break;case 6>=a:g=[4,a-5,1];break;case 8>=a:g=[5,a-7,1];break;case 12>=a:g=[6,a-9,2];break;case 16>=a:g=[7,a-13,2];break;case 24>=a:g=[8,a-17,3];break;case 32>=a:g=[9,a-25,3];break;case 48>=a:g=[10,a-33,4];break;case 64>=a:g=[11,a-49,4];break;case 96>=a:g=[12,a- +65,5];break;case 128>=a:g=[13,a-97,5];break;case 192>=a:g=[14,a-129,6];break;case 256>=a:g=[15,a-193,6];break;case 384>=a:g=[16,a-257,7];break;case 512>=a:g=[17,a-385,7];break;case 768>=a:g=[18,a-513,8];break;case 1024>=a:g=[19,a-769,8];break;case 1536>=a:g=[20,a-1025,9];break;case 2048>=a:g=[21,a-1537,9];break;case 3072>=a:g=[22,a-2049,10];break;case 4096>=a:g=[23,a-3073,10];break;case 6144>=a:g=[24,a-4097,11];break;case 8192>=a:g=[25,a-6145,11];break;case 12288>=a:g=[26,a-8193,12];break;case 16384>= +a:g=[27,a-12289,12];break;case 24576>=a:g=[28,a-16385,13];break;case 32768>=a:g=[29,a-24577,13];break;default:throw"invalid distance";}f=g;d[e++]=f[0];d[e++]=f[1];d[e++]=f[2];var k,m;k=0;for(m=d.length;k=a;)s[a++]=0;for(a=0;29>=a;)x[a++]=0}s[256]=1;e=0;for(b=d.length;e=b){u&&c(u,-1);a=0;for(g=b-e;ag&&d+ga&&(b=e,a=g);if(258===g)break}return new ra(a,d-b)} +function pa(f,d){var c=f.length,e=new ia(572),b=new (C?Uint8Array:Array)(c),a,g,m,k,p;if(!C)for(k=0;k2*b[h-1]+a[h]&&(b[h]=2*b[h-1]+a[h]),m[h]=Array(b[h]),k[h]=Array(b[h]);for(l=0;lf[l]?(m[h][q]=s,k[h][q]=d,x+=2):(m[h][q]=f[l],k[h][q]=l,++l);p[h]=0;1===a[h]&&e(h)}return g} +function qa(f){var d=new (C?Uint16Array:Array)(f.length),c=[],e=[],b=0,a,g,m,k;a=0;for(g=f.length;a>>=1}return d};function Ka(f,d){this.input=f;this.a=new (C?Uint8Array:Array)(32768);this.d=V.g;var c={},e;if((d||!(d={}))&&"number"===typeof d.compressionType)this.d=d.compressionType;for(e in d)c[e]=d[e];c.outputBuffer=this.a;this.j=new ka(this.input,c)}var V=na; +Ka.prototype.f=function(){var f,d,c,e,b,a,g=0;a=this.a;switch(8){case 8:f=Math.LOG2E*Math.log(32768)-8;break;default:throw Error("invalid compression method");}d=f<<4|8;a[g++]=d;switch(8){case 8:switch(this.d){case V.NONE:e=0;break;case V.h:e=1;break;case V.g:e=2;break;default:throw Error("unsupported compression type");}break;default:throw Error("invalid compression method");}c=e<<6|0;a[g++]=c|31-(256*d+c)%31;var m=this.input;if("string"===typeof m){var k=m.split(""),p,t;p=0;for(t=k.length;p>>0;m=k}for(var u=1,l=0,h=m.length,q,s=0;0>>0;this.j.c=g;a=this.j.f();g=a.length;C&&(a=new Uint8Array(a.buffer),a.length<=g+4&&(this.a=new Uint8Array(a.length+4),this.a.set(a),a=this.a),a=a.subarray(0,g+4));a[g++]=b>>24&255;a[g++]=b>>16&255;a[g++]=b>>8&255;a[g++]=b&255;return a};ba("Zlib.Deflate",Ka);ba("Zlib.Deflate.compress",function(f,d){return(new Ka(f,d)).f()});ba("Zlib.Deflate.prototype.compress",Ka.prototype.f);var Ma={NONE:V.NONE,FIXED:V.h,DYNAMIC:V.g},Na,Oa,W,Pa;if(Object.keys)Na=Object.keys(Ma);else for(Oa in Na=[],W=0,Ma)Na[W++]=Oa;W=0;for(Pa=Na.length;Wf[l]?(m[h][q]=s,k[h][q]=d,x+=2):(m[h][q]=f[l],k[h][q]=l,++l);p[h]=0;1===a[h]&&e(h)}return g} function qa(f){var d=new (C?Uint16Array:Array)(f.length),c=[],e=[],b=0,a,g,m,k;a=0;for(g=f.length;a>>=1}return d};function Ka(f,d){this.input=f;this.a=new (C?Uint8Array:Array)(32768);this.d=V.g;var c={},e;if((d||!(d={}))&&"number"===typeof d.compressionType)this.d=d.compressionType;for(e in d)c[e]=d[e];c.outputBuffer=this.a;this.j=new ka(this.input,c)}var V=na; Ka.prototype.f=function(){var f,d,c,e,b,a,g=0;a=this.a;switch(8){case 8:f=Math.LOG2E*Math.log(32768)-8;break;default:throw Error("invalid compression method");}d=f<<4|8;a[g++]=d;switch(8){case 8:switch(this.d){case V.NONE:e=0;break;case V.h:e=1;break;case V.g:e=2;break;default:throw Error("unsupported compression type");}break;default:throw Error("invalid compression method");}c=e<<6|0;a[g++]=c|31-(256*d+c)%31;var m=this.input;if("string"===typeof m){var k=m.split(""),p,t;p=0;for(t=k.length;p>>0;m=k}for(var u=1,l=0,h=m.length,q,s=0;0>>0;this.j.c=g;a=this.j.f();g=a.length;C&&(a=new Uint8Array(a.buffer),a.length<=g+4&&(this.a=new Uint8Array(a.length+4),this.a.set(a),a=this.a),a=a.subarray(0,g+4));a[g++]=b>>24&255;a[g++]=b>>16&255;a[g++]=b>>8&255;a[g++]=b&255;return a};ba("Zlib.Deflate",Ka);ba("Zlib.Deflate.compress",function(f,d){return(new Ka(f,d)).f()});ba("Zlib.Deflate.prototype.compress",Ka.prototype.f);var Ma={NONE:V.NONE,FIXED:V.h,DYNAMIC:V.g},Na,Oa,W,Pa;if(Object.keys)Na=Object.keys(Ma);else for(Oa in Na=[],W=0,Ma)Na[W++]=Oa;W=0;for(Pa=Na.length;W>>0;m=k}for(var u=1,l=0,h=m.length,q,s=0;0>>0;this.j.c=g;a=this.j.f();g=a.length;C&&(a=new Uint8Array(a.buffer),a.length<=g+4&&(this.a=new Uint8Array(a.length+4),this.a.set(a),a=this.a),a=a.subarray(0,g+4));a[g++]=b>>24&255;a[g++]=b>>16&255;a[g++]=b>>8&255;a[g++]=b&255;return a};ba("Zlib.Deflate",Ka);ba("Zlib.Deflate.compress",function(f,d){return(new Ka(f,d)).f()});ba("Zlib.Deflate.prototype.compress",Ka.prototype.f);var Ma={NONE:V.NONE,FIXED:V.h,DYNAMIC:V.g},Na,Oa,W,Pa;if(Object.keys)Na=Object.keys(Ma);else for(Oa in Na=[],W=0,Ma)Na[W++]=Oa;W=0;for(Pa=Na.length;Wv;++v)for(var w=v,ba=7,w=w>>>1;w;w>>>=1)--ba;function x(e,c,d){var b,a="number"===typeof c?c:c=0,f="number"===typeof d?d:e.length;b=-1;for(a=f&7;a--;++c)b=b>>>8^z[(b^e[c])&255];for(a=f>>3;a--;c+=8)b=b>>>8^z[(b^e[c])&255],b=b>>>8^z[(b^e[c+1])&255],b=b>>>8^z[(b^e[c+2])&255],b=b>>>8^z[(b^e[c+3])&255],b=b>>>8^z[(b^e[c+4])&255],b=b>>>8^z[(b^e[c+5])&255],b=b>>>8^z[(b^e[c+6])&255],b=b>>>8^z[(b^e[c+7])&255];return(b^4294967295)>>>0} +var A=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759, +2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977, +2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755, +2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956, +3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270, +936918E3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117],z=u?new Uint32Array(A):A;function B(){}B.prototype.getName=function(){return this.name};B.prototype.getData=function(){return this.data};B.prototype.H=function(){return this.I};function D(e){var c=e.length,d=0,b=Number.POSITIVE_INFINITY,a,f,g,k,m,p,t,h,l,y;for(h=0;hd&&(d=e[h]),e[h]>=1;y=g<<16|h;for(l=p;lF;F++)switch(!0){case 143>=F:E.push([F+48,8]);break;case 255>=F:E.push([F-144+400,9]);break;case 279>=F:E.push([F-256+0,7]);break;case 287>=F:E.push([F-280+192,8]);break;default:n("invalid literal: "+F)} +var ca=function(){function e(a){switch(!0){case 3===a:return[257,a-3,0];case 4===a:return[258,a-4,0];case 5===a:return[259,a-5,0];case 6===a:return[260,a-6,0];case 7===a:return[261,a-7,0];case 8===a:return[262,a-8,0];case 9===a:return[263,a-9,0];case 10===a:return[264,a-10,0];case 12>=a:return[265,a-11,1];case 14>=a:return[266,a-13,1];case 16>=a:return[267,a-15,1];case 18>=a:return[268,a-17,1];case 22>=a:return[269,a-19,2];case 26>=a:return[270,a-23,2];case 30>=a:return[271,a-27,2];case 34>=a:return[272, +a-31,2];case 42>=a:return[273,a-35,3];case 50>=a:return[274,a-43,3];case 58>=a:return[275,a-51,3];case 66>=a:return[276,a-59,3];case 82>=a:return[277,a-67,4];case 98>=a:return[278,a-83,4];case 114>=a:return[279,a-99,4];case 130>=a:return[280,a-115,4];case 162>=a:return[281,a-131,5];case 194>=a:return[282,a-163,5];case 226>=a:return[283,a-195,5];case 257>=a:return[284,a-227,5];case 258===a:return[285,a-258,0];default:n("invalid length: "+a)}}var c=[],d,b;for(d=3;258>=d;d++)b=e(d),c[d]=b[2]<<24|b[1]<< +16|b[0];return c}();u&&new Uint32Array(ca);function G(e,c){this.i=[];this.j=32768;this.d=this.f=this.c=this.n=0;this.input=u?new Uint8Array(e):e;this.o=!1;this.k=H;this.z=!1;if(c||!(c={}))c.index&&(this.c=c.index),c.bufferSize&&(this.j=c.bufferSize),c.bufferType&&(this.k=c.bufferType),c.resize&&(this.z=c.resize);switch(this.k){case I:this.a=32768;this.b=new (u?Uint8Array:Array)(32768+this.j+258);break;case H:this.a=0;this.b=new (u?Uint8Array:Array)(this.j);this.e=this.F;this.q=this.B;this.l=this.D;break;default:n(Error("invalid inflate mode"))}} +var I=0,H=1; +G.prototype.g=function(){for(;!this.o;){var e=J(this,3);e&1&&(this.o=!0);e>>>=1;switch(e){case 0:var c=this.input,d=this.c,b=this.b,a=this.a,f=c.length,g=q,k=q,m=b.length,p=q;this.d=this.f=0;d+1>=f&&n(Error("invalid uncompressed block header: LEN"));g=c[d++]|c[d++]<<8;d+1>=f&&n(Error("invalid uncompressed block header: NLEN"));k=c[d++]|c[d++]<<8;g===~k&&n(Error("invalid uncompressed block header: length verify"));d+g>c.length&&n(Error("input buffer is broken"));switch(this.k){case I:for(;a+g>b.length;){p= +m-a;g-=p;if(u)b.set(c.subarray(d,d+p),a),a+=p,d+=p;else for(;p--;)b[a++]=c[d++];this.a=a;b=this.e();a=this.a}break;case H:for(;a+g>b.length;)b=this.e({t:2});break;default:n(Error("invalid inflate mode"))}if(u)b.set(c.subarray(d,d+g),a),a+=g,d+=g;else for(;g--;)b[a++]=c[d++];this.c=d;this.a=a;this.b=b;break;case 1:this.l(da,ea);break;case 2:fa(this);break;default:n(Error("unknown BTYPE: "+e))}}return this.q()}; +var K=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],L=u?new Uint16Array(K):K,N=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258],O=u?new Uint16Array(N):N,P=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0],Q=u?new Uint8Array(P):P,R=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],ga=u?new Uint16Array(R):R,ha=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12, +13,13],U=u?new Uint8Array(ha):ha,V=new (u?Uint8Array:Array)(288),W,ia;W=0;for(ia=V.length;W=W?8:255>=W?9:279>=W?7:8;var da=D(V),X=new (u?Uint8Array:Array)(30),Y,ja;Y=0;for(ja=X.length;Y=g&&n(Error("input buffer is broken")),d|=a[f++]<>>c;e.d=b-c;e.c=f;return k} +function Z(e,c){for(var d=e.f,b=e.d,a=e.input,f=e.c,g=a.length,k=c[0],m=c[1],p,t;b=g);)d|=a[f++]<>>16;e.f=d>>t;e.d=b-t;e.c=f;return p&65535} +function fa(e){function c(a,c,b){var d,e=this.w,f,g;for(g=0;gf)b>=a&&(this.a=b,d=this.e(),b=this.a),d[b++]=f;else{g=f-257;m=O[g];0=a&&(this.a=b,d=this.e(),b=this.a);for(;m--;)d[b]=d[b++-k]}for(;8<=this.d;)this.d-=8,this.c--;this.a=b}; +G.prototype.D=function(e,c){var d=this.b,b=this.a;this.r=e;for(var a=d.length,f,g,k,m;256!==(f=Z(this,e));)if(256>f)b>=a&&(d=this.e(),a=d.length),d[b++]=f;else{g=f-257;m=O[g];0a&&(d=this.e(),a=d.length);for(;m--;)d[b]=d[b++-k]}for(;8<=this.d;)this.d-=8,this.c--;this.a=b}; +G.prototype.e=function(){var e=new (u?Uint8Array:Array)(this.a-32768),c=this.a-32768,d,b,a=this.b;if(u)e.set(a.subarray(32768,e.length));else{d=0;for(b=e.length;dd;++d)a[d]=a[c+d];this.a=32768;return a}; +G.prototype.F=function(e){var c,d=this.input.length/this.c+1|0,b,a,f,g=this.input,k=this.b;e&&("number"===typeof e.t&&(d=e.t),"number"===typeof e.A&&(d+=e.A));2>d?(b=(g.length-this.c)/this.r[2],f=258*(b/2)|0,a=fc&&(this.b.length=c),e=this.b);return this.buffer=e};function $(e){this.input=e;this.c=0;this.m=[];this.s=!1}$.prototype.G=function(){this.s||this.g();return this.m.slice()}; +$.prototype.g=function(){for(var e=this.input.length;this.c>>0;x(a,q,q)!==t&&n(Error("invalid CRC-32 checksum: 0x"+x(a,q,q).toString(16)+" / 0x"+t.toString(16)));c.M= +d=(h[l++]|h[l++]<<8|h[l++]<<16|h[l++]<<24)>>>0;(a.length&4294967295)!==d&&n(Error("invalid input size: "+(a.length&4294967295)+" / "+d));this.m.push(c);this.c=l}this.s=!0;var y=this.m,s,M,S=0,T=0,C;s=0;for(M=y.length;sd&&(d=e[h]),e[h]>=1;y=g<<16|h;for(l=p;lF;F++)switch(!0){case 143>=F:E.push([F+48,8]);break;case 255>=F:E.push([F-144+400,9]);break;case 279>=F:E.push([F-256+0,7]);break;case 287>=F:E.push([F-280+192,8]);break;default:n("invalid literal: "+F)} +936918E3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117],z=u?new Uint32Array(A):A;function B(){}B.prototype.getName=function(){return this.name};B.prototype.getData=function(){return this.data};B.prototype.H=function(){return this.I};function D(e){var c=e.length,d=0,b=Number.POSITIVE_INFINITY,a,f,g,k,m,p,t,h,l,y;for(h=0;hd&&(d=e[h]),e[h]>=1;y=g<<16|h;for(l=p;lF;F++)switch(!0){case 143>=F:E.push([F+48,8]);break;case 255>=F:E.push([F-144+400,9]);break;case 279>=F:E.push([F-256+0,7]);break;case 287>=F:E.push([F-280+192,8]);break;default:n("invalid literal: "+F)} var ca=function(){function e(a){switch(!0){case 3===a:return[257,a-3,0];case 4===a:return[258,a-4,0];case 5===a:return[259,a-5,0];case 6===a:return[260,a-6,0];case 7===a:return[261,a-7,0];case 8===a:return[262,a-8,0];case 9===a:return[263,a-9,0];case 10===a:return[264,a-10,0];case 12>=a:return[265,a-11,1];case 14>=a:return[266,a-13,1];case 16>=a:return[267,a-15,1];case 18>=a:return[268,a-17,1];case 22>=a:return[269,a-19,2];case 26>=a:return[270,a-23,2];case 30>=a:return[271,a-27,2];case 34>=a:return[272, a-31,2];case 42>=a:return[273,a-35,3];case 50>=a:return[274,a-43,3];case 58>=a:return[275,a-51,3];case 66>=a:return[276,a-59,3];case 82>=a:return[277,a-67,4];case 98>=a:return[278,a-83,4];case 114>=a:return[279,a-99,4];case 130>=a:return[280,a-115,4];case 162>=a:return[281,a-131,5];case 194>=a:return[282,a-163,5];case 226>=a:return[283,a-195,5];case 257>=a:return[284,a-227,5];case 258===a:return[285,a-258,0];default:n("invalid length: "+a)}}var c=[],d,b;for(d=3;258>=d;d++)b=e(d),c[d]=b[2]<<24|b[1]<< 16|b[0];return c}();u&&new Uint32Array(ca);function G(e,c){this.i=[];this.j=32768;this.d=this.f=this.c=this.n=0;this.input=u?new Uint8Array(e):e;this.o=!1;this.k=H;this.z=!1;if(c||!(c={}))c.index&&(this.c=c.index),c.bufferSize&&(this.j=c.bufferSize),c.bufferType&&(this.k=c.bufferType),c.resize&&(this.z=c.resize);switch(this.k){case I:this.a=32768;this.b=new (u?Uint8Array:Array)(32768+this.j+258);break;case H:this.a=0;this.b=new (u?Uint8Array:Array)(this.j);this.e=this.F;this.q=this.B;this.l=this.D;break;default:n(Error("invalid inflate mode"))}} @@ -23,4 +23,4 @@ G.prototype.q=function(){var e=0,c=this.b,d=this.i,b,a=new (u?Uint8Array:Array)( G.prototype.B=function(){var e,c=this.a;u?this.z?(e=new Uint8Array(c),e.set(this.b.subarray(0,c))):e=this.b.subarray(0,c):(this.b.length>c&&(this.b.length=c),e=this.b);return this.buffer=e};function $(e){this.input=e;this.c=0;this.m=[];this.s=!1}$.prototype.G=function(){this.s||this.g();return this.m.slice()}; $.prototype.g=function(){for(var e=this.input.length;this.c>>0;x(a,q,q)!==t&&n(Error("invalid CRC-32 checksum: 0x"+x(a,q,q).toString(16)+" / 0x"+t.toString(16)));c.M= -d=(h[l++]|h[l++]<<8|h[l++]<<16|h[l++]<<24)>>>0;(a.length&4294967295)!==d&&n(Error("invalid input size: "+(a.length&4294967295)+" / "+d));this.m.push(c);this.c=l}this.s=!0;var y=this.m,s,M,S=0,T=0,C;s=0;for(M=y.length;s>>0;(a.length&4294967295)!==d&&n(Error("invalid input size: "+(a.length&4294967295)+" / "+d));this.m.push(c);this.c=l}this.s=!0;var y=this.m,s,M,S=0,T=0,C;s=0;for(M=y.length;s>>8&255]<<16|H[f>>>16&255]<<8|H[f>>>24&255])>>32-e:H[f]>>8-e);if(8>e+g)l=l<>e-m-1&1,8===++g&&(g=0,a[b++]=H[l],l=0,b===a.length&&(a=ga(this)));a[b]=l;this.buffer=a;this.f=g;this.index=b};F.prototype.finish=function(){var f=this.buffer,e=this.index,c;0M;++M){for(var N=M,S=N,ja=7,N=N>>>1;N;N>>>=1)S<<=1,S|=N&1,--ja;ia[M]=(S<>>0}var H=ia;function ka(f,e,c){var a,b="number"===typeof e?e:e=0,g="number"===typeof c?c:f.length;a=-1;for(b=g&7;b--;++e)a=a>>>8^T[(a^f[e])&255];for(b=g>>3;b--;e+=8)a=a>>>8^T[(a^f[e])&255],a=a>>>8^T[(a^f[e+1])&255],a=a>>>8^T[(a^f[e+2])&255],a=a>>>8^T[(a^f[e+3])&255],a=a>>>8^T[(a^f[e+4])&255],a=a>>>8^T[(a^f[e+5])&255],a=a>>>8^T[(a^f[e+6])&255],a=a>>>8^T[(a^f[e+7])&255];return(a^4294967295)>>>0} +var la=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759, +2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977, +2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755, +2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956, +3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270, +936918E3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117],T=C?new Uint32Array(la):la;function U(f){this.buffer=new (C?Uint16Array:Array)(2*f);this.length=0}U.prototype.getParent=function(f){return 2*((f-2)/4|0)};U.prototype.push=function(f,e){var c,a,b=this.buffer,g;c=this.length;b[this.length++]=e;for(b[this.length++]=f;0b[a])g=b[c],b[c]=b[a],b[a]=g,g=b[c+1],b[c+1]=b[a+1],b[a+1]=g,c=a;else break;return this.length}; +U.prototype.pop=function(){var f,e,c=this.buffer,a,b,g;e=c[0];f=c[1];this.length-=2;c[0]=c[this.length];c[1]=c[this.length+1];for(g=0;;){b=2*g+2;if(b>=this.length)break;b+2c[b]&&(b+=2);if(c[b]>c[g])a=c[g],c[g]=c[b],c[b]=a,a=c[g+1],c[g+1]=c[b+1],c[b+1]=a;else break;g=b}return{index:f,value:e,length:this.length}};function ma(f,e){this.h=na;this.j=0;this.input=C&&f instanceof Array?new Uint8Array(f):f;this.c=0;e&&(e.lazy&&(this.j=e.lazy),"number"===typeof e.compressionType&&(this.h=e.compressionType),e.outputBuffer&&(this.a=C&&e.outputBuffer instanceof Array?new Uint8Array(e.outputBuffer):e.outputBuffer),"number"===typeof e.outputIndex&&(this.c=e.outputIndex));this.a||(this.a=new (C?Uint8Array:Array)(32768))}var na=2,V=[],$; +for($=0;288>$;$++)switch(v){case 143>=$:V.push([$+48,8]);break;case 255>=$:V.push([$-144+400,9]);break;case 279>=$:V.push([$-256+0,7]);break;case 287>=$:V.push([$-280+192,8]);break;default:throw"invalid literal: "+$;} +ma.prototype.g=function(){var f,e,c,a,b=this.input;switch(this.h){case 0:c=0;for(a=b.length;c>>8&255;n[k++]=h&255;n[k++]=h>>>8&255;if(C)n.set(g,k),k+=g.length,n=n.subarray(0,k);else{s=0;for(x=g.length;st)for(;0t?t:138,A>t-3&&A=A?(E[D++]=17,E[D++]=A-3,J[17]++):(E[D++]=18,E[D++]=A-11,J[18]++),t-=A;else if(E[D++]=G[r],J[G[r]]++,t--,3>t)for(;0t?t:6,A>t-3&&Ay;y++)ea[y]=ba[Ha[y]];for(Q=19;4=b:return[265,b-11,1];case 14>=b:return[266,b-13,1];case 16>=b:return[267,b-15,1];case 18>=b:return[268,b-17,1];case 22>=b:return[269,b-19,2];case 26>=b:return[270,b-23,2];case 30>=b:return[271,b-27,2];case 34>=b:return[272, +b-31,2];case 42>=b:return[273,b-35,3];case 50>=b:return[274,b-43,3];case 58>=b:return[275,b-51,3];case 66>=b:return[276,b-59,3];case 82>=b:return[277,b-67,4];case 98>=b:return[278,b-83,4];case 114>=b:return[279,b-99,4];case 130>=b:return[280,b-115,4];case 162>=b:return[281,b-131,5];case 194>=b:return[282,b-163,5];case 226>=b:return[283,b-195,5];case 257>=b:return[284,b-227,5];case 258===b:return[285,b-258,0];default:throw"invalid length: "+b;}}var e=[],c,a;for(c=3;258>=c;c++)a=f(c),e[c]=a[2]<<24| +a[1]<<16|a[0];return e}(),Ia=C?new Uint32Array(Ga):Ga; +function oa(f,e){function c(b,e){var a=b.k,c=[],g=0,f;f=Ia[b.length];c[g++]=f&65535;c[g++]=f>>16&255;c[g++]=f>>24;var d;switch(v){case 1===a:d=[0,a-1,0];break;case 2===a:d=[1,a-2,0];break;case 3===a:d=[2,a-3,0];break;case 4===a:d=[3,a-4,0];break;case 6>=a:d=[4,a-5,1];break;case 8>=a:d=[5,a-7,1];break;case 12>=a:d=[6,a-9,2];break;case 16>=a:d=[7,a-13,2];break;case 24>=a:d=[8,a-17,3];break;case 32>=a:d=[9,a-25,3];break;case 48>=a:d=[10,a-33,4];break;case 64>=a:d=[11,a-49,4];break;case 96>=a:d=[12,a- +65,5];break;case 128>=a:d=[13,a-97,5];break;case 192>=a:d=[14,a-129,6];break;case 256>=a:d=[15,a-193,6];break;case 384>=a:d=[16,a-257,7];break;case 512>=a:d=[17,a-385,7];break;case 768>=a:d=[18,a-513,8];break;case 1024>=a:d=[19,a-769,8];break;case 1536>=a:d=[20,a-1025,9];break;case 2048>=a:d=[21,a-1537,9];break;case 3072>=a:d=[22,a-2049,10];break;case 4096>=a:d=[23,a-3073,10];break;case 6144>=a:d=[24,a-4097,11];break;case 8192>=a:d=[25,a-6145,11];break;case 12288>=a:d=[26,a-8193,12];break;case 16384>= +a:d=[27,a-12289,12];break;case 24576>=a:d=[28,a-16385,13];break;case 32768>=a:d=[29,a-24577,13];break;default:throw"invalid distance";}f=d;c[g++]=f[0];c[g++]=f[1];c[g++]=f[2];var h,l;h=0;for(l=c.length;h=g;)u[g++]=0;for(g=0;29>=g;)w[g++]=0}u[256]=1;a=0;for(b=e.length;a=b){x&&c(x,-1);g=0;for(l=b-a;gl&&e+lg&&(b=a,g=l);if(258===l)break}return new Fa(g,e-b)} +function pa(f,e){var c=f.length,a=new U(572),b=new (C?Uint8Array:Array)(c),g,l,m,d,h;if(!C)for(d=0;d2*b[k-1]+g[k]&&(b[k]=2*b[k-1]+g[k]),m[k]=Array(b[k]),d[k]=Array(b[k]);for(n=0;nf[n]?(m[k][q]=u,d[k][q]=e,w+=2):(m[k][q]=f[n],d[k][q]=n,++n);h[k]=0;1===g[k]&&a(k)}return l} +function qa(f){var e=new (C?Uint16Array:Array)(f.length),c=[],a=[],b=0,g,l,m,d;g=0;for(l=f.length;g>>=1}return e};function La(f,e){this.input=f;this.c=this.i=0;this.d={};e&&(e.flags&&(this.d=e.flags),"string"===typeof e.filename&&(this.filename=e.filename),"string"===typeof e.comment&&(this.l=e.comment),e.deflateOptions&&(this.e=e.deflateOptions));this.e||(this.e={})} +La.prototype.g=function(){var f,e,c,a,b,g,l,m,d=new (C?Uint8Array:Array)(32768),h=0,s=this.input,x=this.i,n=this.filename,k=this.l;d[h++]=31;d[h++]=139;d[h++]=8;f=0;this.d.fname&&(f|=Ma);this.d.fcomment&&(f|=Na);this.d.fhcrc&&(f|=Oa);d[h++]=f;e=(Date.now?Date.now():+new Date)/1E3|0;d[h++]=e&255;d[h++]=e>>>8&255;d[h++]=e>>>16&255;d[h++]=e>>>24&255;d[h++]=0;d[h++]=Pa;if(this.d.fname!==p){l=0;for(m=n.length;l>>8&255),d[h++]=g&255;d[h++]=0}if(this.d.comment){l= +0;for(m=k.length;l>>8&255),d[h++]=g&255;d[h++]=0}this.d.fhcrc&&(c=ka(d,0,h)&65535,d[h++]=c&255,d[h++]=c>>>8&255);this.e.outputBuffer=d;this.e.outputIndex=h;b=new ma(s,this.e);d=b.g();h=b.c;C&&(h+8>d.buffer.byteLength?(this.a=new Uint8Array(h+8),this.a.set(new Uint8Array(d.buffer)),d=this.a):d=new Uint8Array(d.buffer));a=ka(s,p,p);d[h++]=a&255;d[h++]=a>>>8&255;d[h++]=a>>>16&255;d[h++]=a>>>24&255;m=s.length;d[h++]=m&255;d[h++]=m>>>8&255;d[h++]=m>>>16&255;d[h++]= +m>>>24&255;this.i=x;C&&h>>8&255]<<16|H[f>>>16&255]<<8|H[f>>>24&255])>>32-e:H[f]>>8-e);if(8>e+g)l=l<>e-m-1&1,8===++g&&(g=0,a[b++]=H[l],l=0,b===a.length&&(a=ga(this)));a[b]=l;this.buffer=a;this.f=g;this.index=b};F.prototype.finish=function(){var f=this.buffer,e=this.index,c;0M;++M){for(var N=M,S=N,ja=7,N=N>>>1;N;N>>>=1)S<<=1,S|=N&1,--ja;ia[M]=(S<>>0}var H=ia;function ka(f,e,c){var a,b="number"===typeof e?e:e=0,g="number"===typeof c?c:f.length;a=-1;for(b=g&7;b--;++e)a=a>>>8^T[(a^f[e])&255];for(b=g>>3;b--;e+=8)a=a>>>8^T[(a^f[e])&255],a=a>>>8^T[(a^f[e+1])&255],a=a>>>8^T[(a^f[e+2])&255],a=a>>>8^T[(a^f[e+3])&255],a=a>>>8^T[(a^f[e+4])&255],a=a>>>8^T[(a^f[e+5])&255],a=a>>>8^T[(a^f[e+6])&255],a=a>>>8^T[(a^f[e+7])&255];return(a^4294967295)>>>0} var la=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759, diff --git a/bin/gzip.min.js.map b/bin/gzip.min.js.map deleted file mode 100644 index c276e5c..0000000 --- a/bin/gzip.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"./gzip.min.js", -"lineCount":32, -"mappings":"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", -"sources":["../closure-primitives/base.js","../define/typedarray/hybrid.js","../src/bitstream.js","../src/crc32.js","../src/heap.js","../src/rawdeflate.js","../src/gzip.js","../export/gzip.js"], -"names":["goog.global","goog.exportPath_","name","opt_object","parts","split","cur","execScript","part","length","shift","JSCompiler_alias_VOID","USE_TYPEDARRAY","Uint8Array","Uint16Array","Uint32Array","DataView","Zlib.BitStream","buffer","bufferPosition","index","bitindex","Array","Zlib.BitStream.DefaultBlockSize","Error","expandBuffer","Zlib.BitStream.prototype.expandBuffer","oldbuf","i","il","set","prototype","writeBits","Zlib.BitStream.prototype.writeBits","number","n","reverse","current","Zlib.BitStream.ReverseTable","finish","Zlib.BitStream.prototype.finish","output","subarray","table","r","s","Zlib.CRC32.update","data","pos","crc","Zlib.CRC32.Table","Zlib.CRC32.Table_","Zlib.Heap","getParent","Zlib.Heap.prototype.getParent","push","Zlib.Heap.prototype.push","value","parent","heap","swap","pop","Zlib.Heap.prototype.pop","Zlib.RawDeflate","input","opt_params","compressionType","Zlib.RawDeflate.CompressionType.DYNAMIC","lazy","op","DYNAMIC","JSCompiler_alias_TRUE","compress","Zlib.RawDeflate.prototype.compress","blockArray","position","NONE","slice","bfinal","len","nlen","makeNocompressBlock","isFinalBlock","FIXED","stream","makeFixedHuffmanBlock","lz77","literal","dataArray","apply","makeDynamicHuffmanBlock","btype","hlit","hdist","hclen","hclenOrder","litLenLengths","litLenCodes","distLengths","distCodes","treeLengths","transLengths","treeCodes","code","bitlen","getLengths_","freqsLitLen","getCodesFromLengths_","freqsDist","src","j","runLength","l","result","nResult","rpt","freqs","codes","litLen","dist","Zlib.RawDeflate.Lz77Match","backwardDistance","c","Zlib.RawDeflate.Lz77Match.LengthCodeTable","Zlib.RawDeflate.prototype.lz77","writeMatch","match","offset","codeArray","lz77buf","skipLength","prevMatch","matchKey","matchList","longestMatch","tmp","Zlib.RawDeflate.Lz77MinLength","Zlib.RawDeflate.WindowSize","searchLongestMatch_","Zlib.RawDeflate.prototype.searchLongestMatch_","currentMatch","matchMax","matchLength","dl","Zlib.RawDeflate.Lz77MaxLength","Zlib.RawDeflate.prototype.getLengths_","limit","nSymbols","nodes","values","codeLength","reversePackageMerge_","Zlib.RawDeflate.prototype.reversePackageMerge_","symbols","takePackage","x","type","currentPosition","minimumCost","flag","excess","half","t","weight","next","Zlib.RawDeflate.prototype.getCodesFromLengths_","lengths","count","startCode","m","Zlib.RawDeflate.MaxCodeLength","Zlib.Gzip","ip","flags","filename","comment","deflateOptions","Zlib.Gzip.prototype.compress","flg","mtime","crc16","crc32","rawdeflate","Zlib.Gzip.DefaultBufferSize","Zlib.Gzip.FlagsMask.FNAME","Zlib.Gzip.FlagsMask.FCOMMENT","Zlib.Gzip.FlagsMask.FHCRC","Date","now","Zlib.Gzip.OperatingSystem.UNKNOWN","charCodeAt","byteLength","UNKNOWN","FHCRC","FNAME","FCOMMENT","publicPath"] -} diff --git a/bin/inflate.dev.min.js b/bin/inflate.dev.min.js new file mode 100644 index 0000000..3a310ea --- /dev/null +++ b/bin/inflate.dev.min.js @@ -0,0 +1,16 @@ +/** @license zlib.js 2012 - imaya [ https://github.com/imaya/zlib.js ] The MIT License */(function() {'use strict';var m=this;function q(c,d){var a=c.split("."),b=m;!(a[0]in b)&&b.execScript&&b.execScript("var "+a[0]);for(var e;a.length&&(e=a.shift());)!a.length&&void 0!==d?b[e]=d:b=b[e]?b[e]:b[e]={}};var s="undefined"!==typeof Uint8Array&&"undefined"!==typeof Uint16Array&&"undefined"!==typeof Uint32Array&&"undefined"!==typeof DataView;function t(c){var d=c.length,a=0,b=Number.POSITIVE_INFINITY,e,f,g,h,k,l,p,n,r,K;for(n=0;na&&(a=c[n]),c[n]>=1;K=g<<16|n;for(r=l;r>>=1;switch(c){case 0:var d=this.input,a=this.a,b=this.c,e=this.b,f=d.length,g=void 0,h=void 0,k=b.length,l=void 0;this.d=this.f=0;if(a+1>=f)throw Error("invalid uncompressed block header: LEN");g=d[a++]|d[a++]<<8;if(a+1>=f)throw Error("invalid uncompressed block header: NLEN");h=d[a++]|d[a++]<<8;if(g===~h)throw Error("invalid uncompressed block header: length verify");if(a+g>d.length)throw Error("input buffer is broken");switch(this.i){case w:for(;e+ +g>b.length;){l=k-e;g-=l;if(s)b.set(d.subarray(a,a+l),e),e+=l,a+=l;else for(;l--;)b[e++]=d[a++];this.b=e;b=this.e();e=this.b}break;case v:for(;e+g>b.length;)b=this.e({p:2});break;default:throw Error("invalid inflate mode");}if(s)b.set(d.subarray(a,a+g),e),e+=g,a+=g;else for(;g--;)b[e++]=d[a++];this.a=a;this.b=e;this.c=b;break;case 1:this.j(z,A);break;case 2:B(this);break;default:throw Error("unknown BTYPE: "+c);}}return this.n()}; +var C=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],D=s?new Uint16Array(C):C,E=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258],F=s?new Uint16Array(E):E,G=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0],H=s?new Uint8Array(G):G,I=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],J=s?new Uint16Array(I):I,L=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13, +13],M=s?new Uint8Array(L):L,N=new (s?Uint8Array:Array)(288),O,P;O=0;for(P=N.length;O=O?8:255>=O?9:279>=O?7:8;var z=t(N),Q=new (s?Uint8Array:Array)(30),R,S;R=0;for(S=Q.length;R=g)throw Error("input buffer is broken");a|=e[f++]<>>d;c.d=b-d;c.a=f;return h} +function T(c,d){for(var a=c.f,b=c.d,e=c.input,f=c.a,g=e.length,h=d[0],k=d[1],l,p;b=g);)a|=e[f++]<>>16;c.f=a>>p;c.d=b-p;c.a=f;return l&65535} +function B(c){function d(a,c,b){var d,e=this.q,f,g;for(g=0;gf)b>=e&&(this.b=b,a=this.e(),b=this.b),a[b++]=f;else{g=f-257;k=F[g];0=e&&(this.b=b,a=this.e(),b=this.b);for(;k--;)a[b]=a[b++-h]}for(;8<=this.d;)this.d-=8,this.a--;this.b=b}; +u.prototype.z=function(c,d){var a=this.c,b=this.b;this.o=c;for(var e=a.length,f,g,h,k;256!==(f=T(this,c));)if(256>f)b>=e&&(a=this.e(),e=a.length),a[b++]=f;else{g=f-257;k=F[g];0e&&(a=this.e(),e=a.length);for(;k--;)a[b]=a[b++-h]}for(;8<=this.d;)this.d-=8,this.a--;this.b=b}; +u.prototype.e=function(){var c=new (s?Uint8Array:Array)(this.b-32768),d=this.b-32768,a,b,e=this.c;if(s)c.set(e.subarray(32768,c.length));else{a=0;for(b=c.length;aa;++a)e[a]=e[d+a];this.b=32768;return e}; +u.prototype.A=function(c){var d,a=this.input.length/this.a+1|0,b,e,f,g=this.input,h=this.c;c&&("number"===typeof c.p&&(a=c.p),"number"===typeof c.v&&(a+=c.v));2>a?(b=(g.length-this.a)/this.o[2],f=258*(b/2)|0,e=fd&&(this.c.length=d),c=this.c);return this.buffer=c};function U(c,d){var a,b;this.input=c;this.a=0;if(d||!(d={}))d.index&&(this.a=d.index),d.verify&&(this.B=d.verify);a=c[this.a++];b=c[this.a++];switch(a&15){case V:this.method=V;break;default:throw Error("unsupported compression method");}if(0!==((a<<8)+b)%31)throw Error("invalid fcheck flag:"+((a<<8)+b)%31);if(b&32)throw Error("fdict flag is not supported");this.r=new u(c,{index:this.a,bufferSize:d.bufferSize,bufferType:d.bufferType,resize:d.resize})} +U.prototype.k=function(){var c=this.input,d,a;d=this.r.k();this.a=this.r.a;if(this.B){a=(c[this.a++]<<24|c[this.a++]<<16|c[this.a++]<<8|c[this.a++])>>>0;var b=d;if("string"===typeof b){var e=b.split(""),f,g;f=0;for(g=e.length;f>>0;b=e}for(var h=1,k=0,l=b.length,p,n=0;0>>0)throw Error("invalid adler-32 checksum");}return d};var V=8;q("Zlib.Inflate",U);q("Zlib.Inflate.prototype.decompress",U.prototype.k);var W={ADAPTIVE:x.t,BLOCK:x.u},X,Y,Z,$;if(Object.keys)X=Object.keys(W);else for(Y in X=[],Z=0,W)X[Z++]=Y;Z=0;for($=X.length;Z<$;++Z)Y=X[Z],q("Zlib.Inflate.BufferType."+Y,W[Y]);}).call(this); +//# sourceMappingURL=data:application/json;base64,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QUFBLENBQVosQ0FDRUgsQ0FBQSxDQUFLdkgsQ0FBQSxFQUFMLENBQUEsQ0FBWXdILENBSVh4SCxFQUFBLENBQUksQ0FBVCxLQUFZc0QsQ0FBWixDQUFpQmlFLENBQUE3SSxPQUFqQixDQUE4QnNCLENBQTlCLENBQWtDc0QsQ0FBbEMsQ0FBc0MsRUFBRXRELENBQXhDLENBQ0V3SCxDVDh6Q0YsQ1M5ekNRRCxDQUFBLENBQUt2SCxDQUFMLENUOHpDUixDQUFBOUIsQ0FBQSxDUzd6Q29CLDBCVDZ6Q3BCLENTN3pDdUNzSixDVDZ6Q3ZDLENTN3pDNENFLENBQUFDLENBQWVILENBQWZHLENUNnpDNUM7Iiwic291cmNlcyI6WyJjbG9zdXJlLXByaW1pdGl2ZXMvYmFzZS5qcyIsImRlZmluZS90eXBlZGFycmF5L2h5YnJpZC5qcyIsInNyYy9odWZmbWFuLmpzIiwic3JjL3Jhd2luZmxhdGUuanMiLCJzcmMvaW5mbGF0ZS5qcyIsInNyYy9hZGxlcjMyLmpzIiwic3JjL3V0aWwuanMiLCJzcmMvemxpYi5qcyIsImV4cG9ydC9pbmZsYXRlLmpzIiwic3JjL2V4cG9ydF9vYmplY3QuanMiXSwibmFtZXMiOlsiZ29vZy5nbG9iYWwiLCJnb29nLmV4cG9ydFBhdGhfIiwibmFtZSIsIm9wdF9vYmplY3QiLCJwYXJ0cyIsInNwbGl0IiwiY3VyIiwiZXhlY1NjcmlwdCIsInBhcnQiLCJsZW5ndGgiLCJzaGlmdCIsInVuZGVmaW5lZCIsIlVTRV9UWVBFREFSUkFZIiwiVWludDhBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJEYXRhVmlldyIsIlpsaWIuSHVmZm1hbi5idWlsZEh1ZmZtYW5UYWJsZSIsImxlbmd0aHMiLCJsaXN0U2l6ZSIsIm1heENvZGVMZW5ndGgiLCJtaW5Db2RlTGVuZ3RoIiwiTnVtYmVyIiwiUE9TSVRJVkVfSU5GSU5JVFkiLCJzaXplIiwidGFibGUiLCJiaXRMZW5ndGgiLCJjb2RlIiwic2tpcCIsInJldmVyc2VkIiwicnRlbXAiLCJpIiwiaiIsInZhbHVlIiwiQXJyYXkiLCJabGliLlJhd0luZmxhdGUiLCJpbnB1dCIsIm9wdF9wYXJhbXMiLCJibG9ja3MiLCJidWZmZXJTaXplIiwiWkxJQl9SQVdfSU5GTEFURV9CVUZGRVJfU0laRSIsImJpdHNidWZsZW4iLCJiaXRzYnVmIiwiaXAiLCJ0b3RhbHBvcyIsImJmaW5hbCIsImJ1ZmZlclR5cGUiLCJabGliLlJhd0luZmxhdGUuQnVmZmVyVHlwZS5BREFQVElWRSIsInJlc2l6ZSIsIlpsaWIuUmF3SW5mbGF0ZS5CdWZmZXJUeXBlLkJMT0NLIiwib3AiLCJabGliLlJhd0luZmxhdGUuTWF4QmFja3dhcmRMZW5ndGgiLCJvdXRwdXQiLCJabGliLlJhd0luZmxhdGUuTWF4Q29weUxlbmd0aCIsImV4cGFuZEJ1ZmZlciIsImV4cGFuZEJ1ZmZlckFkYXB0aXZlIiwiY29uY2F0QnVmZmVyIiwiY29uY2F0QnVmZmVyRHluYW1pYyIsImRlY29kZUh1ZmZtYW4iLCJkZWNvZGVIdWZmbWFuQWRhcHRpdmUiLCJFcnJvciIsIkJMT0NLIiwiQURBUFRJVkUiLCJabGliLlJhd0luZmxhdGUuQnVmZmVyVHlwZSIsInByb3RvdHlwZSIsImRlY29tcHJlc3MiLCJabGliLlJhd0luZmxhdGUucHJvdG90eXBlLmRlY29tcHJlc3MiLCJoZHIiLCJyZWFkQml0cyIsInBhcnNlQmxvY2siLCJpbnB1dExlbmd0aCIsImxlbiIsIm5sZW4iLCJvbGVuZ3RoIiwicHJlQ29weSIsInNldCIsInN1YmFycmF5IiwiWmxpYi5SYXdJbmZsYXRlLkZpeGVkTGl0ZXJhbExlbmd0aFRhYmxlIiwiWmxpYi5SYXdJbmZsYXRlLkZpeGVkRGlzdGFuY2VUYWJsZSIsInBhcnNlRHluYW1pY0h1ZmZtYW5CbG9jayIsIlpsaWIuUmF3SW5mbGF0ZS5PcmRlciIsIlpsaWIuUmF3SW5mbGF0ZS5MZW5ndGhDb2RlVGFibGUiLCJabGliLlJhd0luZmxhdGUuTGVuZ3RoRXh0cmFUYWJsZSIsIlpsaWIuUmF3SW5mbGF0ZS5EaXN0Q29kZVRhYmxlIiwiWmxpYi5SYXdJbmZsYXRlLkRpc3RFeHRyYVRhYmxlIiwiaWwiLCJabGliLlJhd0luZmxhdGUucHJvdG90eXBlLnJlYWRCaXRzIiwib2N0ZXQiLCJabGliLlJhd0luZmxhdGUucHJvdG90eXBlLnJlYWRDb2RlQnlUYWJsZSIsImNvZGVUYWJsZSIsImNvZGVXaXRoTGVuZ3RoIiwiY29kZUxlbmd0aCIsIlpsaWIuUmF3SW5mbGF0ZS5wcm90b3R5cGUucGFyc2VEeW5hbWljSHVmZm1hbkJsb2NrIiwiZGVjb2RlIiwibnVtIiwicHJldiIsInJlcGVhdCIsInJlYWRDb2RlQnlUYWJsZSIsImhsaXQiLCJoZGlzdCIsImhjbGVuIiwiY29kZUxlbmd0aHMiLCJabGliLlJhd0luZmxhdGUuT3JkZXIubGVuZ3RoIiwiY29kZUxlbmd0aHNUYWJsZSIsImxpdGxlbkxlbmd0aHMiLCJkaXN0TGVuZ3RocyIsImNhbGwiLCJabGliLlJhd0luZmxhdGUucHJvdG90eXBlLmRlY29kZUh1ZmZtYW4iLCJsaXRsZW4iLCJkaXN0IiwiY3VycmVudExpdGxlblRhYmxlIiwidGkiLCJjb2RlRGlzdCIsIlpsaWIuUmF3SW5mbGF0ZS5wcm90b3R5cGUuZGVjb2RlSHVmZm1hbkFkYXB0aXZlIiwiWmxpYi5SYXdJbmZsYXRlLnByb3RvdHlwZS5leHBhbmRCdWZmZXIiLCJidWZmZXIiLCJiYWNrd2FyZCIsInB1c2giLCJabGliLlJhd0luZmxhdGUucHJvdG90eXBlLmV4cGFuZEJ1ZmZlckFkYXB0aXZlIiwib3B0X3BhcmFtIiwicmF0aW8iLCJtYXhIdWZmQ29kZSIsIm5ld1NpemUiLCJtYXhJbmZsYXRlU2l6ZSIsImZpeFJhdGlvIiwiYWRkUmF0aW8iLCJabGliLlJhd0luZmxhdGUucHJvdG90eXBlLmNvbmNhdEJ1ZmZlciIsInBvcyIsImJsb2NrIiwiamwiLCJzbGljZSIsIlpsaWIuUmF3SW5mbGF0ZS5wcm90b3R5cGUuY29uY2F0QnVmZmVyRHluYW1pYyIsIlpsaWIuSW5mbGF0ZSIsImNtZiIsImZsZyIsInZlcmlmeSIsIlpsaWIuQ29tcHJlc3Npb25NZXRob2QuREVGTEFURSIsIm1ldGhvZCIsInJhd2luZmxhdGUiLCJabGliLkluZmxhdGUucHJvdG90eXBlLmRlY29tcHJlc3MiLCJhZGxlcjMyIiwiYXJyYXkiLCJ0bXAiLCJjaGFyQ29kZUF0IiwiczEiLCJzMiIsInRsZW4iLCJabGliLkFkbGVyMzIuT3B0aW1pemF0aW9uUGFyYW1ldGVyIiwiREVGTEFURSIsInB1YmxpY1BhdGgiLCJrZXlzIiwia2V5IiwiT2JqZWN0IiwiZXhwb3J0S2V5VmFsdWUiLCJvYmplY3QiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMDYgVGhlIENsb3N1cmUgTGlicmFyeSBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMtSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cbi8qKlxuICogQGZpbGVvdmVydmlldyBCb290c3RyYXAgZm9yIHRoZSBHb29nbGUgSlMgTGlicmFyeSAoQ2xvc3VyZSkuXG4gKlxuICogSW4gdW5jb21waWxlZCBtb2RlIGJhc2UuanMgd2lsbCB3cml0ZSBvdXQgQ2xvc3VyZSdzIGRlcHMgZmlsZSwgdW5sZXNzIHRoZVxuICogZ2xvYmFsIDxjb2RlPkNMT1NVUkVfTk9fREVQUzwvY29kZT4gaXMgc2V0IHRvIHRydWUuICBUaGlzIGFsbG93cyBwcm9qZWN0cyB0b1xuICogaW5jbHVkZSB0aGVpciBvd24gZGVwcyBmaWxlKHMpIGZyb20gZGlmZmVyZW50IGxvY2F0aW9ucy5cbiAqXG4gKi9cblxuXG4vKipcbiAqIEBkZWZpbmUge2Jvb2xlYW59IE92ZXJyaWRkZW4gdG8gdHJ1ZSBieSB0aGUgY29tcGlsZXIgd2hlbiAtLWNsb3N1cmVfcGFzc1xuICogICAgIG9yIC0tbWFya19hc19jb21waWxlZCBpcyBzcGVjaWZpZWQuXG4gKi9cbnZhciBDT01QSUxFRCA9IGZhbHNlO1xuXG5cbi8qKlxuICogQmFzZSBuYW1lc3BhY2UgZm9yIHRoZSBDbG9zdXJlIGxpYnJhcnkuICBDaGVja3MgdG8gc2VlIGdvb2cgaXNcbiAqIGFscmVhZHkgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBzY29wZSBiZWZvcmUgYXNzaWduaW5nIHRvIHByZXZlbnRcbiAqIGNsb2JiZXJpbmcgaWYgYmFzZS5qcyBpcyBsb2FkZWQgbW9yZSB0aGFuIG9uY2UuXG4gKlxuICogQGNvbnN0XG4gKi9cbnZhciBnb29nID0gZ29vZyB8fCB7fTsgLy8gSWRlbnRpZmllcyB0aGlzIGZpbGUgYXMgdGhlIENsb3N1cmUgYmFzZS5cblxuXG4vKipcbiAqIFJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIGNvbnRleHQuICBJbiBtb3N0IGNhc2VzIHRoaXMgd2lsbCBiZSAnd2luZG93Jy5cbiAqL1xuZ29vZy5nbG9iYWwgPSB0aGlzO1xuXG5cbi8qKlxuICogQGRlZmluZSB7Ym9vbGVhbn0gREVCVUcgaXMgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IGRlYnVnZ2luZyBjb2RlXG4gKiB0aGF0IHNob3VsZCBub3QgYmUgaW5jbHVkZWQgaW4gYSBwcm9kdWN0aW9uIGpzX2JpbmFyeSBjYW4gYmUgZWFzaWx5IHN0cmlwcGVkXG4gKiBieSBzcGVjaWZ5aW5nIC0tZGVmaW5lIGdvb2cuREVCVUc9ZmFsc2UgdG8gdGhlIEpTQ29tcGlsZXIuIEZvciBleGFtcGxlLCBtb3N0XG4gKiB0b1N0cmluZygpIG1ldGhvZHMgc2hvdWxkIGJlIGRlY2xhcmVkIGluc2lkZSBhbiBcImlmIChnb29nLkRFQlVHKVwiIGNvbmRpdGlvbmFsXG4gKiBiZWNhdXNlIHRoZXkgYXJlIGdlbmVyYWxseSB1c2VkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgYW5kIGl0IGlzIGRpZmZpY3VsdFxuICogZm9yIHRoZSBKU0NvbXBpbGVyIHRvIHN0YXRpY2FsbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhleSBhcmUgdXNlZC5cbiAqL1xuZ29vZy5ERUJVRyA9IHRydWU7XG5cblxuLyoqXG4gKiBAZGVmaW5lIHtzdHJpbmd9IExPQ0FMRSBkZWZpbmVzIHRoZSBsb2NhbGUgYmVpbmcgdXNlZCBmb3IgY29tcGlsYXRpb24uIEl0IGlzXG4gKiB1c2VkIHRvIHNlbGVjdCBsb2NhbGUgc3BlY2lmaWMgZGF0YSB0byBiZSBjb21waWxlZCBpbiBqcyBiaW5hcnkuIEJVSUxEIHJ1bGVcbiAqIGNhbiBzcGVjaWZ5IHRoaXMgdmFsdWUgYnkgXCItLWRlZmluZSBnb29nLkxPQ0FMRT08bG9jYWxlX25hbWU+XCIgYXMgSlNDb21waWxlclxuICogb3B0aW9uLlxuICpcbiAqIFRha2UgaW50byBhY2NvdW50IHRoYXQgdGhlIGxvY2FsZSBjb2RlIGZvcm1hdCBpcyBpbXBvcnRhbnQuIFlvdSBzaG91bGQgdXNlXG4gKiB0aGUgY2Fub25pY2FsIFVuaWNvZGUgZm9ybWF0IHdpdGggaHlwaGVuIGFzIGEgZGVsaW1pdGVyLiBMYW5ndWFnZSBtdXN0IGJlXG4gKiBsb3dlcmNhc2UsIExhbmd1YWdlIFNjcmlwdCAtIENhcGl0YWxpemVkLCBSZWdpb24gLSBVUFBFUkNBU0UuXG4gKiBUaGVyZSBhcmUgZmV3IGV4YW1wbGVzOiBwdC1CUiwgZW4sIGVuLVVTLCBzci1MYXRpbi1CTywgemgtSGFucy1DTi5cbiAqXG4gKiBTZWUgbW9yZSBpbmZvIGFib3V0IGxvY2FsZSBjb2RlcyBoZXJlOlxuICogaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvI1VuaWNvZGVfTGFuZ3VhZ2VfYW5kX0xvY2FsZV9JZGVudGlmaWVyc1xuICpcbiAqIEZvciBsYW5ndWFnZSBjb2RlcyB5b3Ugc2hvdWxkIHVzZSB2YWx1ZXMgZGVmaW5lZCBieSBJU08gNjkzLTEuIFNlZSBpdCBoZXJlXG4gKiBodHRwOi8vd3d3LnczLm9yZy9XQUkvRVIvSUcvZXJ0L2lzbzYzOS5odG0uIFRoZXJlIGlzIG9ubHkgb25lIGV4Y2VwdGlvbiBmcm9tXG4gKiB0aGlzIHJ1bGU6IHRoZSBIZWJyZXcgbGFuZ3VhZ2UuIEZvciBsZWdhY3kgcmVhc29ucyB0aGUgb2xkIGNvZGUgKGl3KSBzaG91bGRcbiAqIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgbmV3IGNvZGUgKGhlKSwgc2VlIGh0dHA6Ly93aWtpL01haW4vSUlJU3lub255bXMuXG4gKi9cbmdvb2cuTE9DQUxFID0gJ2VuJzsgIC8vIGRlZmF1bHQgdG8gZW5cblxuXG4vKipcbiAqIENyZWF0ZXMgb2JqZWN0IHN0dWJzIGZvciBhIG5hbWVzcGFjZS4gIFRoZSBwcmVzZW5jZSBvZiBvbmUgb3IgbW9yZVxuICogZ29vZy5wcm92aWRlKCkgY2FsbHMgaW5kaWNhdGUgdGhhdCB0aGUgZmlsZSBkZWZpbmVzIHRoZSBnaXZlblxuICogb2JqZWN0cy9uYW1lc3BhY2VzLiAgQnVpbGQgdG9vbHMgYWxzbyBzY2FuIGZvciBwcm92aWRlL3JlcXVpcmUgc3RhdGVtZW50c1xuICogdG8gZGlzY2VybiBkZXBlbmRlbmNpZXMsIGJ1aWxkIGRlcGVuZGVuY3kgZmlsZXMgKHNlZSBkZXBzLmpzKSwgZXRjLlxuICogQHNlZSBnb29nLnJlcXVpcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWVzcGFjZSBwcm92aWRlZCBieSB0aGlzIGZpbGUgaW4gdGhlIGZvcm1cbiAqICAgICBcImdvb2cucGFja2FnZS5wYXJ0XCIuXG4gKi9cbmdvb2cucHJvdmlkZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgaWYgKCFDT01QSUxFRCkge1xuICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBzYW1lIG5hbWVzcGFjZSBpc24ndCBwcm92aWRlZCB0d2ljZS4gVGhpcyBpcyBpbnRlbmRlZFxuICAgIC8vIHRvIHRlYWNoIG5ldyBkZXZlbG9wZXJzIHRoYXQgJ2dvb2cucHJvdmlkZScgaXMgZWZmZWN0aXZlbHkgYSB2YXJpYWJsZVxuICAgIC8vIGRlY2xhcmF0aW9uLiBBbmQgd2hlbiBKU0NvbXBpbGVyIHRyYW5zZm9ybXMgZ29vZy5wcm92aWRlIGludG8gYSByZWFsXG4gICAgLy8gdmFyaWFibGUgZGVjbGFyYXRpb24sIHRoZSBjb21waWxlZCBKUyBzaG91bGQgd29yayB0aGUgc2FtZSBhcyB0aGUgcmF3XG4gICAgLy8gSlMtLWV2ZW4gd2hlbiB0aGUgcmF3IEpTIHVzZXMgZ29vZy5wcm92aWRlIGluY29ycmVjdGx5LlxuICAgIGlmIChnb29nLmlzUHJvdmlkZWRfKG5hbWUpKSB7XG4gICAgICB0aHJvdyBFcnJvcignTmFtZXNwYWNlIFwiJyArIG5hbWUgKyAnXCIgYWxyZWFkeSBkZWNsYXJlZC4nKTtcbiAgICB9XG4gICAgZGVsZXRlIGdvb2cuaW1wbGljaXROYW1lc3BhY2VzX1tuYW1lXTtcblxuICAgIHZhciBuYW1lc3BhY2UgPSBuYW1lO1xuICAgIHdoaWxlICgobmFtZXNwYWNlID0gbmFtZXNwYWNlLnN1YnN0cmluZygwLCBuYW1lc3BhY2UubGFzdEluZGV4T2YoJy4nKSkpKSB7XG4gICAgICBpZiAoZ29vZy5nZXRPYmplY3RCeU5hbWUobmFtZXNwYWNlKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGdvb2cuaW1wbGljaXROYW1lc3BhY2VzX1tuYW1lc3BhY2VdID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBnb29nLmV4cG9ydFBhdGhfKG5hbWUpO1xufTtcblxuXG4vKipcbiAqIE1hcmtzIHRoYXQgdGhlIGN1cnJlbnQgZmlsZSBzaG91bGQgb25seSBiZSB1c2VkIGZvciB0ZXN0aW5nLCBhbmQgbmV2ZXIgZm9yXG4gKiBsaXZlIGNvZGUgaW4gcHJvZHVjdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0X21lc3NhZ2UgT3B0aW9uYWwgbWVzc2FnZSB0byBhZGQgdG8gdGhlIGVycm9yIHRoYXQnc1xuICogICAgIHJhaXNlZCB3aGVuIHVzZWQgaW4gcHJvZHVjdGlvbiBjb2RlLlxuICovXG5nb29nLnNldFRlc3RPbmx5ID0gZnVuY3Rpb24ob3B0X21lc3NhZ2UpIHtcbiAgaWYgKENPTVBJTEVEICYmICFnb29nLkRFQlVHKSB7XG4gICAgb3B0X21lc3NhZ2UgPSBvcHRfbWVzc2FnZSB8fCAnJztcbiAgICB0aHJvdyBFcnJvcignSW1wb3J0aW5nIHRlc3Qtb25seSBjb2RlIGludG8gbm9uLWRlYnVnIGVudmlyb25tZW50JyArXG4gICAgICAgICAgICAgICAgb3B0X21lc3NhZ2UgPyAnOiAnICsgb3B0X21lc3NhZ2UgOiAnLicpO1xuICB9XG59O1xuXG5cbmlmICghQ09NUElMRUQpIHtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIGdpdmVuIG5hbWUgaGFzIGJlZW4gZ29vZy5wcm92aWRlZC4gVGhpcyB3aWxsIHJldHVybiBmYWxzZSBmb3JcbiAgICogbmFtZXMgdGhhdCBhcmUgYXZhaWxhYmxlIG9ubHkgYXMgaW1wbGljaXQgbmFtZXNwYWNlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgbmFtZSBvZiB0aGUgb2JqZWN0IHRvIGxvb2sgZm9yLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHRoZSBuYW1lIGhhcyBiZWVuIHByb3ZpZGVkLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ29vZy5pc1Byb3ZpZGVkXyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gIWdvb2cuaW1wbGljaXROYW1lc3BhY2VzX1tuYW1lXSAmJiAhIWdvb2cuZ2V0T2JqZWN0QnlOYW1lKG5hbWUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBOYW1lc3BhY2VzIGltcGxpY2l0bHkgZGVmaW5lZCBieSBnb29nLnByb3ZpZGUuIEZvciBleGFtcGxlLFxuICAgKiBnb29nLnByb3ZpZGUoJ2dvb2cuZXZlbnRzLkV2ZW50JykgaW1wbGljaXRseSBkZWNsYXJlc1xuICAgKiB0aGF0ICdnb29nJyBhbmQgJ2dvb2cuZXZlbnRzJyBtdXN0IGJlIG5hbWVzcGFjZXMuXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnb29nLmltcGxpY2l0TmFtZXNwYWNlc18gPSB7fTtcbn1cblxuXG4vKipcbiAqIEJ1aWxkcyBhbiBvYmplY3Qgc3RydWN0dXJlIGZvciB0aGUgcHJvdmlkZWQgbmFtZXNwYWNlIHBhdGgsXG4gKiBlbnN1cmluZyB0aGF0IG5hbWVzIHRoYXQgYWxyZWFkeSBleGlzdCBhcmUgbm90IG92ZXJ3cml0dGVuLiBGb3JcbiAqIGV4YW1wbGU6XG4gKiBcImEuYi5jXCIgLT4gYSA9IHt9O2EuYj17fTthLmIuYz17fTtcbiAqIFVzZWQgYnkgZ29vZy5wcm92aWRlIGFuZCBnb29nLmV4cG9ydFN5bWJvbC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIG9iamVjdCB0aGF0IHRoaXMgZmlsZSBkZWZpbmVzLlxuICogQHBhcmFtIHsqPX0gb3B0X29iamVjdCB0aGUgb2JqZWN0IHRvIGV4cG9zZSBhdCB0aGUgZW5kIG9mIHRoZSBwYXRoLlxuICogQHBhcmFtIHtPYmplY3Q9fSBvcHRfb2JqZWN0VG9FeHBvcnRUbyBUaGUgb2JqZWN0IHRvIGFkZCB0aGUgcGF0aCB0bzsgZGVmYXVsdFxuICogICAgIGlzIHxnb29nLmdsb2JhbHwuXG4gKiBAcHJpdmF0ZVxuICovXG5nb29nLmV4cG9ydFBhdGhfID0gZnVuY3Rpb24obmFtZSwgb3B0X29iamVjdCwgb3B0X29iamVjdFRvRXhwb3J0VG8pIHtcbiAgdmFyIHBhcnRzID0gbmFtZS5zcGxpdCgnLicpO1xuICB2YXIgY3VyID0gb3B0X29iamVjdFRvRXhwb3J0VG8gfHwgZ29vZy5nbG9iYWw7XG5cbiAgLy8gSW50ZXJuZXQgRXhwbG9yZXIgZXhoaWJpdHMgc3RyYW5nZSBiZWhhdmlvciB3aGVuIHRocm93aW5nIGVycm9ycyBmcm9tXG4gIC8vIG1ldGhvZHMgZXh0ZXJuZWQgaW4gdGhpcyBtYW5uZXIuICBTZWUgdGhlIHRlc3RFeHBvcnRTeW1ib2xFeGNlcHRpb25zIGluXG4gIC8vIGJhc2VfdGVzdC5odG1sIGZvciBhbiBleGFtcGxlLlxuICBpZiAoIShwYXJ0c1swXSBpbiBjdXIpICYmIGN1ci5leGVjU2NyaXB0KSB7XG4gICAgY3VyLmV4ZWNTY3JpcHQoJ3ZhciAnICsgcGFydHNbMF0pO1xuICB9XG5cbiAgLy8gQ2VydGFpbiBicm93c2VycyBjYW5ub3QgcGFyc2UgY29kZSBpbiB0aGUgZm9ybSBmb3IoKGEgaW4gYik7IGM7KTtcbiAgLy8gVGhpcyBwYXR0ZXJuIGlzIHByb2R1Y2VkIGJ5IHRoZSBKU0NvbXBpbGVyIHdoZW4gaXQgY29sbGFwc2VzIHRoZVxuICAvLyBzdGF0ZW1lbnQgYWJvdmUgaW50byB0aGUgY29uZGl0aW9uYWwgbG9vcCBiZWxvdy4gVG8gcHJldmVudCB0aGlzIGZyb21cbiAgLy8gaGFwcGVuaW5nLCB1c2UgYSBmb3ItbG9vcCBhbmQgcmVzZXJ2ZSB0aGUgaW5pdCBsb2dpYyBhcyBiZWxvdy5cblxuICAvLyBQYXJlbnRoZXNlcyBhZGRlZCB0byBlbGltaW5hdGUgc3RyaWN0IEpTIHdhcm5pbmcgaW4gRmlyZWZveC5cbiAgZm9yICh2YXIgcGFydDsgcGFydHMubGVuZ3RoICYmIChwYXJ0ID0gcGFydHMuc2hpZnQoKSk7KSB7XG4gICAgaWYgKCFwYXJ0cy5sZW5ndGggJiYgZ29vZy5pc0RlZihvcHRfb2JqZWN0KSkge1xuICAgICAgLy8gbGFzdCBwYXJ0IGFuZCB3ZSBoYXZlIGFuIG9iamVjdDsgdXNlIGl0XG4gICAgICBjdXJbcGFydF0gPSBvcHRfb2JqZWN0O1xuICAgIH0gZWxzZSBpZiAoY3VyW3BhcnRdKSB7XG4gICAgICBjdXIgPSBjdXJbcGFydF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1ciA9IGN1cltwYXJ0XSA9IHt9O1xuICAgIH1cbiAgfVxufTtcblxuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IGJhc2VkIG9uIGl0cyBmdWxseSBxdWFsaWZpZWQgZXh0ZXJuYWwgbmFtZS4gIElmIHlvdSBhcmVcbiAqIHVzaW5nIGEgY29tcGlsYXRpb24gcGFzcyB0aGF0IHJlbmFtZXMgcHJvcGVydHkgbmFtZXMgYmV3YXJlIHRoYXQgdXNpbmcgdGhpc1xuICogZnVuY3Rpb24gd2lsbCBub3QgZmluZCByZW5hbWVkIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lLlxuICogQHBhcmFtIHtPYmplY3Q9fSBvcHRfb2JqIFRoZSBvYmplY3Qgd2l0aGluIHdoaWNoIHRvIGxvb2s7IGRlZmF1bHQgaXNcbiAqICAgICB8Z29vZy5nbG9iYWx8LlxuICogQHJldHVybiB7P30gVGhlIHZhbHVlIChvYmplY3Qgb3IgcHJpbWl0aXZlKSBvciwgaWYgbm90IGZvdW5kLCBudWxsLlxuICovXG5nb29nLmdldE9iamVjdEJ5TmFtZSA9IGZ1bmN0aW9uKG5hbWUsIG9wdF9vYmopIHtcbiAgdmFyIHBhcnRzID0gbmFtZS5zcGxpdCgnLicpO1xuICB2YXIgY3VyID0gb3B0X29iaiB8fCBnb29nLmdsb2JhbDtcbiAgZm9yICh2YXIgcGFydDsgcGFydCA9IHBhcnRzLnNoaWZ0KCk7ICkge1xuICAgIGlmIChnb29nLmlzRGVmQW5kTm90TnVsbChjdXJbcGFydF0pKSB7XG4gICAgICBjdXIgPSBjdXJbcGFydF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3VyO1xufTtcblxuXG4vKipcbiAqIEdsb2JhbGl6ZXMgYSB3aG9sZSBuYW1lc3BhY2UsIHN1Y2ggYXMgZ29vZyBvciBnb29nLmxhbmcuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgbmFtZXNwYWNlIHRvIGdsb2JhbGl6ZS5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0X2dsb2JhbCBUaGUgb2JqZWN0IHRvIGFkZCB0aGUgcHJvcGVydGllcyB0by5cbiAqIEBkZXByZWNhdGVkIFByb3BlcnRpZXMgbWF5IGJlIGV4cGxpY2l0bHkgZXhwb3J0ZWQgdG8gdGhlIGdsb2JhbCBzY29wZSwgYnV0XG4gKiAgICAgdGhpcyBzaG91bGQgbm8gbG9uZ2VyIGJlIGRvbmUgaW4gYnVsay5cbiAqL1xuZ29vZy5nbG9iYWxpemUgPSBmdW5jdGlvbihvYmosIG9wdF9nbG9iYWwpIHtcbiAgdmFyIGdsb2JhbCA9IG9wdF9nbG9iYWwgfHwgZ29vZy5nbG9iYWw7XG4gIGZvciAodmFyIHggaW4gb2JqKSB7XG4gICAgZ2xvYmFsW3hdID0gb2JqW3hdO1xuICB9XG59O1xuXG5cbi8qKlxuICogQWRkcyBhIGRlcGVuZGVuY3kgZnJvbSBhIGZpbGUgdG8gdGhlIGZpbGVzIGl0IHJlcXVpcmVzLlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbFBhdGggVGhlIHBhdGggdG8gdGhlIGpzIGZpbGUuXG4gKiBAcGFyYW0ge0FycmF5fSBwcm92aWRlcyBBbiBhcnJheSBvZiBzdHJpbmdzIHdpdGggdGhlIG5hbWVzIG9mIHRoZSBvYmplY3RzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGZpbGUgcHJvdmlkZXMuXG4gKiBAcGFyYW0ge0FycmF5fSByZXF1aXJlcyBBbiBhcnJheSBvZiBzdHJpbmdzIHdpdGggdGhlIG5hbWVzIG9mIHRoZSBvYmplY3RzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGZpbGUgcmVxdWlyZXMuXG4gKi9cbmdvb2cuYWRkRGVwZW5kZW5jeSA9IGZ1bmN0aW9uKHJlbFBhdGgsIHByb3ZpZGVzLCByZXF1aXJlcykge1xuICBpZiAoIUNPTVBJTEVEKSB7XG4gICAgdmFyIHByb3ZpZGUsIHJlcXVpcmU7XG4gICAgdmFyIHBhdGggPSByZWxQYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICB2YXIgZGVwcyA9IGdvb2cuZGVwZW5kZW5jaWVzXztcbiAgICBmb3IgKHZhciBpID0gMDsgcHJvdmlkZSA9IHByb3ZpZGVzW2ldOyBpKyspIHtcbiAgICAgIGRlcHMubmFtZVRvUGF0aFtwcm92aWRlXSA9IHBhdGg7XG4gICAgICBpZiAoIShwYXRoIGluIGRlcHMucGF0aFRvTmFtZXMpKSB7XG4gICAgICAgIGRlcHMucGF0aFRvTmFtZXNbcGF0aF0gPSB7fTtcbiAgICAgIH1cbiAgICAgIGRlcHMucGF0aFRvTmFtZXNbcGF0aF1bcHJvdmlkZV0gPSB0cnVlO1xuICAgIH1cbiAgICBmb3IgKHZhciBqID0gMDsgcmVxdWlyZSA9IHJlcXVpcmVzW2pdOyBqKyspIHtcbiAgICAgIGlmICghKHBhdGggaW4gZGVwcy5yZXF1aXJlcykpIHtcbiAgICAgICAgZGVwcy5yZXF1aXJlc1twYXRoXSA9IHt9O1xuICAgICAgfVxuICAgICAgZGVwcy5yZXF1aXJlc1twYXRoXVtyZXF1aXJlXSA9IHRydWU7XG4gICAgfVxuICB9XG59O1xuXG5cblxuXG4vLyBOT1RFKG5uYXplKTogVGhlIGRlYnVnIERPTSBsb2FkZXIgd2FzIGluY2x1ZGVkIGluIGJhc2UuanMgYXMgYW4gb3JpZ25hbFxuLy8gd2F5IHRvIGRvIFwiZGVidWctbW9kZVwiIGRldmVsb3BtZW50LiAgVGhlIGRlcGVuZGVuY3kgc3lzdGVtIGNhbiBzb21ldGltZXNcbi8vIGJlIGNvbmZ1c2luZywgYXMgY2FuIHRoZSBkZWJ1ZyBET00gbG9hZGVyJ3MgYXN5bmNyb25vdXMgbmF0dXJlLlxuLy9cbi8vIFdpdGggdGhlIERPTSBsb2FkZXIsIGEgY2FsbCB0byBnb29nLnJlcXVpcmUoKSBpcyBub3QgYmxvY2tpbmcgLS0gdGhlXG4vLyBzY3JpcHQgd2lsbCBub3QgbG9hZCB1bnRpbCBzb21lIHBvaW50IGFmdGVyIHRoZSBjdXJyZW50IHNjcmlwdC4gIElmIGFcbi8vIG5hbWVzcGFjZSBpcyBuZWVkZWQgYXQgcnVudGltZSwgaXQgbmVlZHMgdG8gYmUgZGVmaW5lZCBpbiBhIHByZXZpb3VzXG4vLyBzY3JpcHQsIG9yIGxvYWRlZCB2aWEgcmVxdWlyZSgpIHdpdGggaXRzIHJlZ2lzdGVyZWQgZGVwZW5kZW5jaWVzLlxuLy8gVXNlci1kZWZpbmVkIG5hbWVzcGFjZXMgbWF5IG5lZWQgdGhlaXIgb3duIGRlcHMgZmlsZS4gIFNlZSBodHRwOi8vZ28vanNfZGVwcyxcbi8vIGh0dHA6Ly9nby9nZW5qc2RlcHMsIG9yLCBleHRlcm5hbGx5LCBEZXBzV3JpdGVyLlxuLy8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9jbG9zdXJlL2xpYnJhcnkvZG9jcy9kZXBzd3JpdGVyLmh0bWxcbi8vXG4vLyBCZWNhdXNlIG9mIGxlZ2FjeSBjbGllbnRzLCB0aGUgRE9NIGxvYWRlciBjYW4ndCBiZSBlYXNpbHkgcmVtb3ZlZCBmcm9tXG4vLyBiYXNlLmpzLiAgV29yayBpcyBiZWluZyBkb25lIHRvIG1ha2UgaXQgZGlzYWJsZWFibGUgb3IgcmVwbGFjZWFibGUgZm9yXG4vLyBkaWZmZXJlbnQgZW52aXJvbm1lbnRzIChET00tbGVzcyBKYXZhU2NyaXB0IGludGVycHJldGVycyBsaWtlIFJoaW5vIG9yIFY4LFxuLy8gZm9yIGV4YW1wbGUpLiBTZWUgYm9vdHN0cmFwLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuXG4vKipcbiAqIEBkZWZpbmUge2Jvb2xlYW59IFdoZXRoZXIgdG8gZW5hYmxlIHRoZSBkZWJ1ZyBsb2FkZXIuXG4gKlxuICogSWYgZW5hYmxlZCwgYSBjYWxsIHRvIGdvb2cucmVxdWlyZSgpIHdpbGwgYXR0ZW1wdCB0byBsb2FkIHRoZSBuYW1lc3BhY2UgYnlcbiAqIGFwcGVuZGluZyBhIHNjcmlwdCB0YWcgdG8gdGhlIERPTSAoaWYgdGhlIG5hbWVzcGFjZSBoYXMgYmVlbiByZWdpc3RlcmVkKS5cbiAqXG4gKiBJZiBkaXNhYmxlZCwgZ29vZy5yZXF1aXJlKCkgd2lsbCBzaW1wbHkgYXNzZXJ0IHRoYXQgdGhlIG5hbWVzcGFjZSBoYXMgYmVlblxuICogcHJvdmlkZWQgKGFuZCBkZXBlbmQgb24gdGhlIGZhY3QgdGhhdCBzb21lIG91dHNpZGUgdG9vbCBjb3JyZWN0bHkgb3JkZXJlZFxuICogdGhlIHNjcmlwdCkuXG4gKi9cbmdvb2cuRU5BQkxFX0RFQlVHX0xPQURFUiA9IHRydWU7XG5cblxuLyoqXG4gKiBJbXBsZW1lbnRzIGEgc3lzdGVtIGZvciB0aGUgZHluYW1pYyByZXNvbHV0aW9uIG9mIGRlcGVuZGVuY2llc1xuICogdGhhdCB3b3JrcyBpbiBwYXJhbGxlbCB3aXRoIHRoZSBCVUlMRCBzeXN0ZW0uIE5vdGUgdGhhdCBhbGwgY2FsbHNcbiAqIHRvIGdvb2cucmVxdWlyZSB3aWxsIGJlIHN0cmlwcGVkIGJ5IHRoZSBKU0NvbXBpbGVyIHdoZW4gdGhlXG4gKiAtLWNsb3N1cmVfcGFzcyBvcHRpb24gaXMgdXNlZC5cbiAqIEBzZWUgZ29vZy5wcm92aWRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lc3BhY2UgdG8gaW5jbHVkZSAoYXMgd2FzIGdpdmVuIGluIGdvb2cucHJvdmlkZSgpKVxuICogICAgIGluIHRoZSBmb3JtIFwiZ29vZy5wYWNrYWdlLnBhcnRcIi5cbiAqL1xuZ29vZy5yZXF1aXJlID0gZnVuY3Rpb24obmFtZSkge1xuXG4gIC8vIGlmIHRoZSBvYmplY3QgYWxyZWFkeSBleGlzdHMgd2UgZG8gbm90IG5lZWQgZG8gZG8gYW55dGhpbmdcbiAgLy8gVE9ETyhhcnYpOiBJZiB3ZSBzdGFydCB0byBzdXBwb3J0IHJlcXVpcmUgYmFzZWQgb24gZmlsZSBuYW1lIHRoaXMgaGFzXG4gIC8vICAgICAgICAgICAgdG8gY2hhbmdlXG4gIC8vIFRPRE8oYXJ2KTogSWYgd2UgYWxsb3cgZ29vZy5mb28uKiB0aGlzIGhhcyB0byBjaGFuZ2VcbiAgLy8gVE9ETyhhcnYpOiBJZiB3ZSBpbXBsZW1lbnQgZHluYW1pYyBsb2FkIGFmdGVyIHBhZ2UgbG9hZCB3ZSBzaG91bGQgcHJvYmFibHlcbiAgLy8gICAgICAgICAgICBub3QgcmVtb3ZlIHRoaXMgY29kZSBmb3IgdGhlIGNvbXBpbGVkIG91dHB1dFxuICBpZiAoIUNPTVBJTEVEKSB7XG4gICAgaWYgKGdvb2cuaXNQcm92aWRlZF8obmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZ29vZy5FTkFCTEVfREVCVUdfTE9BREVSKSB7XG4gICAgICB2YXIgcGF0aCA9IGdvb2cuZ2V0UGF0aEZyb21EZXBzXyhuYW1lKTtcbiAgICAgIGlmIChwYXRoKSB7XG4gICAgICAgIGdvb2cuaW5jbHVkZWRfW3BhdGhdID0gdHJ1ZTtcbiAgICAgICAgZ29vZy53cml0ZVNjcmlwdHNfKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZXJyb3JNZXNzYWdlID0gJ2dvb2cucmVxdWlyZSBjb3VsZCBub3QgZmluZDogJyArIG5hbWU7XG4gICAgaWYgKGdvb2cuZ2xvYmFsLmNvbnNvbGUpIHtcbiAgICAgIGdvb2cuZ2xvYmFsLmNvbnNvbGVbJ2Vycm9yJ10oZXJyb3JNZXNzYWdlKTtcbiAgICB9XG5cblxuICAgICAgdGhyb3cgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblxuICB9XG59O1xuXG5cbi8qKlxuICogUGF0aCBmb3IgaW5jbHVkZWQgc2NyaXB0c1xuICogQHR5cGUge3N0cmluZ31cbiAqL1xuZ29vZy5iYXNlUGF0aCA9ICcnO1xuXG5cbi8qKlxuICogQSBob29rIGZvciBvdmVycmlkaW5nIHRoZSBiYXNlIHBhdGguXG4gKiBAdHlwZSB7c3RyaW5nfHVuZGVmaW5lZH1cbiAqL1xuZ29vZy5nbG9iYWwuQ0xPU1VSRV9CQVNFX1BBVEg7XG5cblxuLyoqXG4gKiBXaGV0aGVyIHRvIHdyaXRlIG91dCBDbG9zdXJlJ3MgZGVwcyBmaWxlLiBCeSBkZWZhdWx0LFxuICogdGhlIGRlcHMgYXJlIHdyaXR0ZW4uXG4gKiBAdHlwZSB7Ym9vbGVhbnx1bmRlZmluZWR9XG4gKi9cbmdvb2cuZ2xvYmFsLkNMT1NVUkVfTk9fREVQUztcblxuXG4vKipcbiAqIEEgZnVuY3Rpb24gdG8gaW1wb3J0IGEgc2luZ2xlIHNjcmlwdC4gVGhpcyBpcyBtZWFudCB0byBiZSBvdmVycmlkZGVuIHdoZW5cbiAqIENsb3N1cmUgaXMgYmVpbmcgcnVuIGluIG5vbi1IVE1MIGNvbnRleHRzLCBzdWNoIGFzIHdlYiB3b3JrZXJzLiBJdCdzIGRlZmluZWRcbiAqIGluIHRoZSBnbG9iYWwgc2NvcGUgc28gdGhhdCBpdCBjYW4gYmUgc2V0IGJlZm9yZSBiYXNlLmpzIGlzIGxvYWRlZCwgd2hpY2hcbiAqIGFsbG93cyBkZXBzLmpzIHRvIGJlIGltcG9ydGVkIHByb3Blcmx5LlxuICpcbiAqIFRoZSBmdW5jdGlvbiBpcyBwYXNzZWQgdGhlIHNjcmlwdCBzb3VyY2UsIHdoaWNoIGlzIGEgcmVsYXRpdmUgVVJJLiBJdCBzaG91bGRcbiAqIHJldHVybiB0cnVlIGlmIHRoZSBzY3JpcHQgd2FzIGltcG9ydGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmdvb2cuZ2xvYmFsLkNMT1NVUkVfSU1QT1JUX1NDUklQVDtcblxuXG4vKipcbiAqIE51bGwgZnVuY3Rpb24gdXNlZCBmb3IgZGVmYXVsdCB2YWx1ZXMgb2YgY2FsbGJhY2tzLCBldGMuXG4gKiBAcmV0dXJuIHt2b2lkfSBOb3RoaW5nLlxuICovXG5nb29nLm51bGxGdW5jdGlvbiA9IGZ1bmN0aW9uKCkge307XG5cblxuLyoqXG4gKiBUaGUgaWRlbnRpdHkgZnVuY3Rpb24uIFJldHVybnMgaXRzIGZpcnN0IGFyZ3VtZW50LlxuICpcbiAqIEBwYXJhbSB7Kj19IG9wdF9yZXR1cm5WYWx1ZSBUaGUgc2luZ2xlIHZhbHVlIHRoYXQgd2lsbCBiZSByZXR1cm5lZC5cbiAqIEBwYXJhbSB7Li4uKn0gdmFyX2FyZ3MgT3B0aW9uYWwgdHJhaWxpbmcgYXJndW1lbnRzLiBUaGVzZSBhcmUgaWdub3JlZC5cbiAqIEByZXR1cm4gez99IFRoZSBmaXJzdCBhcmd1bWVudC4gV2UgY2FuJ3Qga25vdyB0aGUgdHlwZSAtLSBqdXN0IHBhc3MgaXQgYWxvbmdcbiAqICAgICAgd2l0aG91dCB0eXBlLlxuICogQGRlcHJlY2F0ZWQgVXNlIGdvb2cuZnVuY3Rpb25zLmlkZW50aXR5IGluc3RlYWQuXG4gKi9cbmdvb2cuaWRlbnRpdHlGdW5jdGlvbiA9IGZ1bmN0aW9uKG9wdF9yZXR1cm5WYWx1ZSwgdmFyX2FyZ3MpIHtcbiAgcmV0dXJuIG9wdF9yZXR1cm5WYWx1ZTtcbn07XG5cblxuLyoqXG4gKiBXaGVuIGRlZmluaW5nIGEgY2xhc3MgRm9vIHdpdGggYW4gYWJzdHJhY3QgbWV0aG9kIGJhcigpLCB5b3UgY2FuIGRvOlxuICpcbiAqIEZvby5wcm90b3R5cGUuYmFyID0gZ29vZy5hYnN0cmFjdE1ldGhvZFxuICpcbiAqIE5vdyBpZiBhIHN1YmNsYXNzIG9mIEZvbyBmYWlscyB0byBvdmVycmlkZSBiYXIoKSwgYW4gZXJyb3JcbiAqIHdpbGwgYmUgdGhyb3duIHdoZW4gYmFyKCkgaXMgaW52b2tlZC5cbiAqXG4gKiBOb3RlOiBUaGlzIGRvZXMgbm90IHRha2UgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIG92ZXJyaWRlIGFzXG4gKiBhbiBhcmd1bWVudCBiZWNhdXNlIHRoYXQgd291bGQgbWFrZSBpdCBtb3JlIGRpZmZpY3VsdCB0byBvYmZ1c2NhdGVcbiAqIG91ciBKYXZhU2NyaXB0IGNvZGUuXG4gKlxuICogQHR5cGUgeyFGdW5jdGlvbn1cbiAqIEB0aHJvd3Mge0Vycm9yfSB3aGVuIGludm9rZWQgdG8gaW5kaWNhdGUgdGhlIG1ldGhvZCBzaG91bGQgYmVcbiAqICAgb3ZlcnJpZGRlbi5cbiAqL1xuZ29vZy5hYnN0cmFjdE1ldGhvZCA9IGZ1bmN0aW9uKCkge1xuICB0aHJvdyBFcnJvcigndW5pbXBsZW1lbnRlZCBhYnN0cmFjdCBtZXRob2QnKTtcbn07XG5cblxuLyoqXG4gKiBBZGRzIGEge0Bjb2RlIGdldEluc3RhbmNlfSBzdGF0aWMgbWV0aG9kIHRoYXQgYWx3YXlzIHJldHVybiB0aGUgc2FtZSBpbnN0YW5jZVxuICogb2JqZWN0LlxuICogQHBhcmFtIHshRnVuY3Rpb259IGN0b3IgVGhlIGNvbnN0cnVjdG9yIGZvciB0aGUgY2xhc3MgdG8gYWRkIHRoZSBzdGF0aWNcbiAqICAgICBtZXRob2QgdG8uXG4gKi9cbmdvb2cuYWRkU2luZ2xldG9uR2V0dGVyID0gZnVuY3Rpb24oY3Rvcikge1xuICBjdG9yLmdldEluc3RhbmNlID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKGN0b3IuaW5zdGFuY2VfKSB7XG4gICAgICByZXR1cm4gY3Rvci5pbnN0YW5jZV87XG4gICAgfVxuICAgIGlmIChnb29nLkRFQlVHKSB7XG4gICAgICAvLyBOT1RFOiBKU0NvbXBpbGVyIGNhbid0IG9wdGltaXplIGF3YXkgQXJyYXkjcHVzaC5cbiAgICAgIGdvb2cuaW5zdGFudGlhdGVkU2luZ2xldG9uc19bZ29vZy5pbnN0YW50aWF0ZWRTaW5nbGV0b25zXy5sZW5ndGhdID0gY3RvcjtcbiAgICB9XG4gICAgcmV0dXJuIGN0b3IuaW5zdGFuY2VfID0gbmV3IGN0b3I7XG4gIH07XG59O1xuXG5cbi8qKlxuICogQWxsIHNpbmdsZXRvbiBjbGFzc2VzIHRoYXQgaGF2ZSBiZWVuIGluc3RhbnRpYXRlZCwgZm9yIHRlc3RpbmcuIERvbid0IHJlYWRcbiAqIGl0IGRpcmVjdGx5LCB1c2UgdGhlIHtAY29kZSBnb29nLnRlc3Rpbmcuc2luZ2xldG9ufSBtb2R1bGUuIFRoZSBjb21waWxlclxuICogcmVtb3ZlcyB0aGlzIHZhcmlhYmxlIGlmIHVudXNlZC5cbiAqIEB0eXBlIHshQXJyYXkuPCFGdW5jdGlvbj59XG4gKiBAcHJpdmF0ZVxuICovXG5nb29nLmluc3RhbnRpYXRlZFNpbmdsZXRvbnNfID0gW107XG5cblxuaWYgKCFDT01QSUxFRCAmJiBnb29nLkVOQUJMRV9ERUJVR19MT0FERVIpIHtcbiAgLyoqXG4gICAqIE9iamVjdCB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdXJscyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGFkZGVkLiBUaGlzXG4gICAqIHJlY29yZCBhbGxvd3MgdGhlIHByZXZlbnRpb24gb2YgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ29vZy5pbmNsdWRlZF8gPSB7fTtcblxuXG4gIC8qKlxuICAgKiBUaGlzIG9iamVjdCBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgZGVwZW5kZW5jaWVzIGFuZCBvdGhlciBkYXRhIHRoYXQgaXNcbiAgICogdXNlZCBmb3IgbG9hZGluZyBzY3JpcHRzXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBnb29nLmRlcGVuZGVuY2llc18gPSB7XG4gICAgcGF0aFRvTmFtZXM6IHt9LCAvLyAxIHRvIG1hbnlcbiAgICBuYW1lVG9QYXRoOiB7fSwgLy8gMSB0byAxXG4gICAgcmVxdWlyZXM6IHt9LCAvLyAxIHRvIG1hbnlcbiAgICAvLyB1c2VkIHdoZW4gcmVzb2x2aW5nIGRlcGVuZGVuY2llcyB0byBwcmV2ZW50IHVzIGZyb21cbiAgICAvLyB2aXNpdGluZyB0aGUgZmlsZSB0d2ljZVxuICAgIHZpc2l0ZWQ6IHt9LFxuICAgIHdyaXR0ZW46IHt9IC8vIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBzY3JpcHQgZmlsZXMgd2UgaGF2ZSB3cml0dGVuXG4gIH07XG5cblxuICAvKipcbiAgICogVHJpZXMgdG8gZGV0ZWN0IHdoZXRoZXIgaXMgaW4gdGhlIGNvbnRleHQgb2YgYW4gSFRNTCBkb2N1bWVudC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBpdCBsb29rcyBsaWtlIEhUTUwgZG9jdW1lbnQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnb29nLmluSHRtbERvY3VtZW50XyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBkb2MgPSBnb29nLmdsb2JhbC5kb2N1bWVudDtcbiAgICByZXR1cm4gdHlwZW9mIGRvYyAhPSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAnd3JpdGUnIGluIGRvYzsgIC8vIFhVTERvY3VtZW50IG1pc3NlcyB3cml0ZS5cbiAgfTtcblxuXG4gIC8qKlxuICAgKiBUcmllcyB0byBkZXRlY3QgdGhlIGJhc2UgcGF0aCBvZiB0aGUgYmFzZS5qcyBzY3JpcHQgdGhhdCBib290c3RyYXBzIENsb3N1cmVcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdvb2cuZmluZEJhc2VQYXRoXyA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChnb29nLmdsb2JhbC5DTE9TVVJFX0JBU0VfUEFUSCkge1xuICAgICAgZ29vZy5iYXNlUGF0aCA9IGdvb2cuZ2xvYmFsLkNMT1NVUkVfQkFTRV9QQVRIO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoIWdvb2cuaW5IdG1sRG9jdW1lbnRfKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGRvYyA9IGdvb2cuZ2xvYmFsLmRvY3VtZW50O1xuICAgIHZhciBzY3JpcHRzID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTtcbiAgICAvLyBTZWFyY2ggYmFja3dhcmRzIHNpbmNlIHRoZSBjdXJyZW50IHNjcmlwdCBpcyBpbiBhbG1vc3QgYWxsIGNhc2VzIHRoZSBvbmVcbiAgICAvLyB0aGF0IGhhcyBiYXNlLmpzLlxuICAgIGZvciAodmFyIGkgPSBzY3JpcHRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICB2YXIgc3JjID0gc2NyaXB0c1tpXS5zcmM7XG4gICAgICB2YXIgcW1hcmsgPSBzcmMubGFzdEluZGV4T2YoJz8nKTtcbiAgICAgIHZhciBsID0gcW1hcmsgPT0gLTEgPyBzcmMubGVuZ3RoIDogcW1hcms7XG4gICAgICBpZiAoc3JjLnN1YnN0cihsIC0gNywgNykgPT0gJ2Jhc2UuanMnKSB7XG4gICAgICAgIGdvb2cuYmFzZVBhdGggPSBzcmMuc3Vic3RyKDAsIGwgLSA3KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuXG4gIC8qKlxuICAgKiBJbXBvcnRzIGEgc2NyaXB0IGlmLCBhbmQgb25seSBpZiwgdGhhdCBzY3JpcHQgaGFzbid0IGFscmVhZHkgYmVlbiBpbXBvcnRlZC5cbiAgICogKE11c3QgYmUgY2FsbGVkIGF0IGV4ZWN1dGlvbiB0aW1lKVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3JjIFNjcmlwdCBzb3VyY2UuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnb29nLmltcG9ydFNjcmlwdF8gPSBmdW5jdGlvbihzcmMpIHtcbiAgICB2YXIgaW1wb3J0U2NyaXB0ID0gZ29vZy5nbG9iYWwuQ0xPU1VSRV9JTVBPUlRfU0NSSVBUIHx8XG4gICAgICAgIGdvb2cud3JpdGVTY3JpcHRUYWdfO1xuICAgIGlmICghZ29vZy5kZXBlbmRlbmNpZXNfLndyaXR0ZW5bc3JjXSAmJiBpbXBvcnRTY3JpcHQoc3JjKSkge1xuICAgICAgZ29vZy5kZXBlbmRlbmNpZXNfLndyaXR0ZW5bc3JjXSA9IHRydWU7XG4gICAgfVxuICB9O1xuXG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBpbXBvcnQgZnVuY3Rpb24uIFdyaXRlcyBhIHNjcmlwdCB0YWcgdG9cbiAgICogaW1wb3J0IHRoZSBzY3JpcHQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzcmMgVGhlIHNjcmlwdCBzb3VyY2UuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNjcmlwdCB3YXMgaW1wb3J0ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdvb2cud3JpdGVTY3JpcHRUYWdfID0gZnVuY3Rpb24oc3JjKSB7XG4gICAgaWYgKGdvb2cuaW5IdG1sRG9jdW1lbnRfKCkpIHtcbiAgICAgIHZhciBkb2MgPSBnb29nLmdsb2JhbC5kb2N1bWVudDtcbiAgICAgIGRvYy53cml0ZShcbiAgICAgICAgICAnPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCIgc3JjPVwiJyArIHNyYyArICdcIj48LycgKyAnc2NyaXB0PicpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH07XG5cblxuICAvKipcbiAgICogUmVzb2x2ZXMgZGVwZW5kZW5jaWVzIGJhc2VkIG9uIHRoZSBkZXBlbmRlbmNpZXMgYWRkZWQgdXNpbmcgYWRkRGVwZW5kZW5jeVxuICAgKiBhbmQgY2FsbHMgaW1wb3J0U2NyaXB0XyBpbiB0aGUgY29ycmVjdCBvcmRlci5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdvb2cud3JpdGVTY3JpcHRzXyA9IGZ1bmN0aW9uKCkge1xuICAgIC8vIHRoZSBzY3JpcHRzIHdlIG5lZWQgdG8gd3JpdGUgdGhpcyB0aW1lXG4gICAgdmFyIHNjcmlwdHMgPSBbXTtcbiAgICB2YXIgc2VlblNjcmlwdCA9IHt9O1xuICAgIHZhciBkZXBzID0gZ29vZy5kZXBlbmRlbmNpZXNfO1xuXG4gICAgZnVuY3Rpb24gdmlzaXROb2RlKHBhdGgpIHtcbiAgICAgIGlmIChwYXRoIGluIGRlcHMud3JpdHRlbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIHdlIGhhdmUgYWxyZWFkeSB2aXNpdGVkIHRoaXMgb25lLiBXZSBjYW4gZ2V0IGhlcmUgaWYgd2UgaGF2ZSBjeWNsaWNcbiAgICAgIC8vIGRlcGVuZGVuY2llc1xuICAgICAgaWYgKHBhdGggaW4gZGVwcy52aXNpdGVkKSB7XG4gICAgICAgIGlmICghKHBhdGggaW4gc2VlblNjcmlwdCkpIHtcbiAgICAgICAgICBzZWVuU2NyaXB0W3BhdGhdID0gdHJ1ZTtcbiAgICAgICAgICBzY3JpcHRzLnB1c2gocGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkZXBzLnZpc2l0ZWRbcGF0aF0gPSB0cnVlO1xuXG4gICAgICBpZiAocGF0aCBpbiBkZXBzLnJlcXVpcmVzKSB7XG4gICAgICAgIGZvciAodmFyIHJlcXVpcmVOYW1lIGluIGRlcHMucmVxdWlyZXNbcGF0aF0pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgcmVxdWlyZWQgbmFtZSBpcyBkZWZpbmVkLCB3ZSBhc3N1bWUgdGhhdCBpdCB3YXMgYWxyZWFkeVxuICAgICAgICAgIC8vIGJvb3RzdHJhcHBlZCBieSBvdGhlciBtZWFucy5cbiAgICAgICAgICBpZiAoIWdvb2cuaXNQcm92aWRlZF8ocmVxdWlyZU5hbWUpKSB7XG4gICAgICAgICAgICBpZiAocmVxdWlyZU5hbWUgaW4gZGVwcy5uYW1lVG9QYXRoKSB7XG4gICAgICAgICAgICAgIHZpc2l0Tm9kZShkZXBzLm5hbWVUb1BhdGhbcmVxdWlyZU5hbWVdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCdVbmRlZmluZWQgbmFtZVRvUGF0aCBmb3IgJyArIHJlcXVpcmVOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCEocGF0aCBpbiBzZWVuU2NyaXB0KSkge1xuICAgICAgICBzZWVuU2NyaXB0W3BhdGhdID0gdHJ1ZTtcbiAgICAgICAgc2NyaXB0cy5wdXNoKHBhdGgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIHBhdGggaW4gZ29vZy5pbmNsdWRlZF8pIHtcbiAgICAgIGlmICghZGVwcy53cml0dGVuW3BhdGhdKSB7XG4gICAgICAgIHZpc2l0Tm9kZShwYXRoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChzY3JpcHRzW2ldKSB7XG4gICAgICAgIGdvb2cuaW1wb3J0U2NyaXB0Xyhnb29nLmJhc2VQYXRoICsgc2NyaXB0c1tpXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBFcnJvcignVW5kZWZpbmVkIHNjcmlwdCBpbnB1dCcpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuXG4gIC8qKlxuICAgKiBMb29rcyBhdCB0aGUgZGVwZW5kZW5jeSBydWxlcyBhbmQgdHJpZXMgdG8gZGV0ZXJtaW5lIHRoZSBzY3JpcHQgZmlsZSB0aGF0XG4gICAqIGZ1bGZpbGxzIGEgcGFydGljdWxhciBydWxlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcnVsZSBJbiB0aGUgZm9ybSBnb29nLm5hbWVzcGFjZS5DbGFzcyBvciBwcm9qZWN0LnNjcmlwdC5cbiAgICogQHJldHVybiB7P3N0cmluZ30gVXJsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJ1bGUsIG9yIG51bGwuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnb29nLmdldFBhdGhGcm9tRGVwc18gPSBmdW5jdGlvbihydWxlKSB7XG4gICAgaWYgKHJ1bGUgaW4gZ29vZy5kZXBlbmRlbmNpZXNfLm5hbWVUb1BhdGgpIHtcbiAgICAgIHJldHVybiBnb29nLmRlcGVuZGVuY2llc18ubmFtZVRvUGF0aFtydWxlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIGdvb2cuZmluZEJhc2VQYXRoXygpO1xuXG4gIC8vIEFsbG93IHByb2plY3RzIHRvIG1hbmFnZSB0aGUgZGVwcyBmaWxlcyB0aGVtc2VsdmVzLlxuICBpZiAoIWdvb2cuZ2xvYmFsLkNMT1NVUkVfTk9fREVQUykge1xuICAgIGdvb2cuaW1wb3J0U2NyaXB0Xyhnb29nLmJhc2VQYXRoICsgJ2RlcHMuanMnKTtcbiAgfVxufVxuXG5cblxuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIExhbmd1YWdlIEVuaGFuY2VtZW50c1xuLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuXG4vKipcbiAqIFRoaXMgaXMgYSBcImZpeGVkXCIgdmVyc2lvbiBvZiB0aGUgdHlwZW9mIG9wZXJhdG9yLiAgSXQgZGlmZmVycyBmcm9tIHRoZSB0eXBlb2ZcbiAqIG9wZXJhdG9yIGluIHN1Y2ggYSB3YXkgdGhhdCBudWxsIHJldHVybnMgJ251bGwnIGFuZCBhcnJheXMgcmV0dXJuICdhcnJheScuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBnZXQgdGhlIHR5cGUgb2YuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSB0eXBlLlxuICovXG5nb29nLnR5cGVPZiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBzID0gdHlwZW9mIHZhbHVlO1xuICBpZiAocyA9PSAnb2JqZWN0Jykge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgLy8gQ2hlY2sgdGhlc2UgZmlyc3QsIHNvIHdlIGNhbiBhdm9pZCBjYWxsaW5nIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgaWZcbiAgICAgIC8vIHBvc3NpYmxlLlxuICAgICAgLy9cbiAgICAgIC8vIElFIGltcHJvcGVybHkgbWFyc2hhbHMgdHllcG9mIGFjcm9zcyBleGVjdXRpb24gY29udGV4dHMsIGJ1dCBhXG4gICAgICAvLyBjcm9zcy1jb250ZXh0IG9iamVjdCB3aWxsIHN0aWxsIHJldHVybiBmYWxzZSBmb3IgXCJpbnN0YW5jZW9mIE9iamVjdFwiLlxuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgcmV0dXJuICdhcnJheSc7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBzO1xuICAgICAgfVxuXG4gICAgICAvLyBIQUNLOiBJbiBvcmRlciB0byB1c2UgYW4gT2JqZWN0IHByb3RvdHlwZSBtZXRob2Qgb24gdGhlIGFyYml0cmFyeVxuICAgICAgLy8gICB2YWx1ZSwgdGhlIGNvbXBpbGVyIHJlcXVpcmVzIHRoZSB2YWx1ZSBiZSBjYXN0IHRvIHR5cGUgT2JqZWN0LFxuICAgICAgLy8gICBldmVuIHRob3VnaCB0aGUgRUNNQSBzcGVjIGV4cGxpY2l0bHkgYWxsb3dzIGl0LlxuICAgICAgdmFyIGNsYXNzTmFtZSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChcbiAgICAgICAgICAvKiogQHR5cGUge09iamVjdH0gKi8gKHZhbHVlKSk7XG4gICAgICAvLyBJbiBGaXJlZm94IDMuNiwgYXR0ZW1wdGluZyB0byBhY2Nlc3MgaWZyYW1lIHdpbmRvdyBvYmplY3RzJyBsZW5ndGhcbiAgICAgIC8vIHByb3BlcnR5IHRocm93cyBhbiBOU19FUlJPUl9GQUlMVVJFLCBzbyB3ZSBuZWVkIHRvIHNwZWNpYWwtY2FzZSBpdFxuICAgICAgLy8gaGVyZS5cbiAgICAgIGlmIChjbGFzc05hbWUgPT0gJ1tvYmplY3QgV2luZG93XScpIHtcbiAgICAgICAgcmV0dXJuICdvYmplY3QnO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSBjYW5ub3QgYWx3YXlzIHVzZSBjb25zdHJ1Y3RvciA9PSBBcnJheSBvciBpbnN0YW5jZW9mIEFycmF5IGJlY2F1c2VcbiAgICAgIC8vIGRpZmZlcmVudCBmcmFtZXMgaGF2ZSBkaWZmZXJlbnQgQXJyYXkgb2JqZWN0cy4gSW4gSUU2LCBpZiB0aGUgaWZyYW1lXG4gICAgICAvLyB3aGVyZSB0aGUgYXJyYXkgd2FzIGNyZWF0ZWQgaXMgZGVzdHJveWVkLCB0aGUgYXJyYXkgbG9zZXMgaXRzXG4gICAgICAvLyBwcm90b3R5cGUuIFRoZW4gZGVyZWZlcmVuY2luZyB2YWwuc3BsaWNlIGhlcmUgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgc29cbiAgICAgIC8vIHdlIGNhbid0IHVzZSBnb29nLmlzRnVuY3Rpb24uIENhbGxpbmcgdHlwZW9mIGRpcmVjdGx5IHJldHVybnMgJ3Vua25vd24nXG4gICAgICAvLyBzbyB0aGF0IHdpbGwgd29yay4gSW4gdGhpcyBjYXNlLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGZhbHNlIGFuZFxuICAgICAgLy8gbW9zdCBhcnJheSBmdW5jdGlvbnMgd2lsbCBzdGlsbCB3b3JrIGJlY2F1c2UgdGhlIGFycmF5IGlzIHN0aWxsXG4gICAgICAvLyBhcnJheS1saWtlIChzdXBwb3J0cyBsZW5ndGggYW5kIFtdKSBldmVuIHRob3VnaCBpdCBoYXMgbG9zdCBpdHNcbiAgICAgIC8vIHByb3RvdHlwZS5cbiAgICAgIC8vIE1hcmsgTWlsbGVyIG5vdGljZWQgdGhhdCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nXG4gICAgICAvLyBhbGxvd3MgYWNjZXNzIHRvIHRoZSB1bmZvcmdlYWJsZSBbW0NsYXNzXV0gcHJvcGVydHkuXG4gICAgICAvLyAgMTUuMi40LjIgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAoIClcbiAgICAgIC8vICBXaGVuIHRoZSB0b1N0cmluZyBtZXRob2QgaXMgY2FsbGVkLCB0aGUgZm9sbG93aW5nIHN0ZXBzIGFyZSB0YWtlbjpcbiAgICAgIC8vICAgICAgMS4gR2V0IHRoZSBbW0NsYXNzXV0gcHJvcGVydHkgb2YgdGhpcyBvYmplY3QuXG4gICAgICAvLyAgICAgIDIuIENvbXB1dGUgYSBzdHJpbmcgdmFsdWUgYnkgY29uY2F0ZW5hdGluZyB0aGUgdGhyZWUgc3RyaW5nc1xuICAgICAgLy8gICAgICAgICBcIltvYmplY3QgXCIsIFJlc3VsdCgxKSwgYW5kIFwiXVwiLlxuICAgICAgLy8gICAgICAzLiBSZXR1cm4gUmVzdWx0KDIpLlxuICAgICAgLy8gYW5kIHRoaXMgYmVoYXZpb3Igc3Vydml2ZXMgdGhlIGRlc3RydWN0aW9uIG9mIHRoZSBleGVjdXRpb24gY29udGV4dC5cbiAgICAgIGlmICgoY2xhc3NOYW1lID09ICdbb2JqZWN0IEFycmF5XScgfHxcbiAgICAgICAgICAgLy8gSW4gSUUgYWxsIG5vbiB2YWx1ZSB0eXBlcyBhcmUgd3JhcHBlZCBhcyBvYmplY3RzIGFjcm9zcyB3aW5kb3dcbiAgICAgICAgICAgLy8gYm91bmRhcmllcyAobm90IGlmcmFtZSB0aG91Z2gpIHNvIHdlIGhhdmUgdG8gZG8gb2JqZWN0IGRldGVjdGlvblxuICAgICAgICAgICAvLyBmb3IgdGhpcyBlZGdlIGNhc2VcbiAgICAgICAgICAgdHlwZW9mIHZhbHVlLmxlbmd0aCA9PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICB0eXBlb2YgdmFsdWUuc3BsaWNlICE9ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgIHR5cGVvZiB2YWx1ZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSAhPSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAhdmFsdWUucHJvcGVydHlJc0VudW1lcmFibGUoJ3NwbGljZScpXG5cbiAgICAgICAgICApKSB7XG4gICAgICAgIHJldHVybiAnYXJyYXknO1xuICAgICAgfVxuICAgICAgLy8gSEFDSzogVGhlcmUgaXMgc3RpbGwgYW4gYXJyYXkgY2FzZSB0aGF0IGZhaWxzLlxuICAgICAgLy8gICAgIGZ1bmN0aW9uIEFycmF5SW1wb3N0b3IoKSB7fVxuICAgICAgLy8gICAgIEFycmF5SW1wb3N0b3IucHJvdG90eXBlID0gW107XG4gICAgICAvLyAgICAgdmFyIGltcG9zdG9yID0gbmV3IEFycmF5SW1wb3N0b3I7XG4gICAgICAvLyB0aGlzIGNhbiBiZSBmaXhlZCBieSBnZXR0aW5nIHJpZCBvZiB0aGUgZmFzdCBwYXRoXG4gICAgICAvLyAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkgYW5kIHNvbGVseSByZWx5aW5nIG9uXG4gICAgICAvLyAodmFsdWUgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy52YWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJylcbiAgICAgIC8vIGJ1dCB0aGF0IHdvdWxkIHJlcXVpcmUgbWFueSBtb3JlIGZ1bmN0aW9uIGNhbGxzIGFuZCBpcyBub3Qgd2FycmFudGVkXG4gICAgICAvLyB1bmxlc3MgY2xvc3VyZSBjb2RlIGlzIHJlY2VpdmluZyBvYmplY3RzIGZyb20gdW50cnVzdGVkIHNvdXJjZXMuXG5cbiAgICAgIC8vIElFIGluIGNyb3NzLXdpbmRvdyBjYWxscyBkb2VzIG5vdCBjb3JyZWN0bHkgbWFyc2hhbCB0aGUgZnVuY3Rpb24gdHlwZVxuICAgICAgLy8gKGl0IGFwcGVhcnMganVzdCBhcyBhbiBvYmplY3QpIHNvIHdlIGNhbm5vdCB1c2UganVzdCB0eXBlb2YgdmFsID09XG4gICAgICAvLyAnZnVuY3Rpb24nLiBIb3dldmVyLCBpZiB0aGUgb2JqZWN0IGhhcyBhIGNhbGwgcHJvcGVydHksIGl0IGlzIGFcbiAgICAgIC8vIGZ1bmN0aW9uLlxuICAgICAgaWYgKChjbGFzc05hbWUgPT0gJ1tvYmplY3QgRnVuY3Rpb25dJyB8fFxuICAgICAgICAgIHR5cGVvZiB2YWx1ZS5jYWxsICE9ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgdHlwZW9mIHZhbHVlLnByb3BlcnR5SXNFbnVtZXJhYmxlICE9ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgIXZhbHVlLnByb3BlcnR5SXNFbnVtZXJhYmxlKCdjYWxsJykpKSB7XG4gICAgICAgIHJldHVybiAnZnVuY3Rpb24nO1xuICAgICAgfVxuXG5cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdudWxsJztcbiAgICB9XG5cbiAgfSBlbHNlIGlmIChzID09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlLmNhbGwgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBJbiBTYWZhcmkgdHlwZW9mIG5vZGVMaXN0IHJldHVybnMgJ2Z1bmN0aW9uJywgYW5kIG9uIEZpcmVmb3hcbiAgICAvLyB0eXBlb2YgYmVoYXZlcyBzaW1pbGFybHkgZm9yIEhUTUx7QXBwbGV0LEVtYmVkLE9iamVjdH1FbGVtZW50c1xuICAgIC8vIGFuZCBSZWdFeHBzLiAgV2Ugd291bGQgbGlrZSB0byByZXR1cm4gb2JqZWN0IGZvciB0aG9zZSBhbmQgd2UgY2FuXG4gICAgLy8gZGV0ZWN0IGFuIGludmFsaWQgZnVuY3Rpb24gYnkgbWFraW5nIHN1cmUgdGhhdCB0aGUgZnVuY3Rpb25cbiAgICAvLyBvYmplY3QgaGFzIGEgY2FsbCBtZXRob2QuXG4gICAgcmV0dXJuICdvYmplY3QnO1xuICB9XG4gIHJldHVybiBzO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGlzIG5vdCB8dW5kZWZpbmVkfC5cbiAqIFdBUk5JTkc6IERvIG5vdCB1c2UgdGhpcyB0byB0ZXN0IGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eS4gVXNlIHRoZSBpblxuICogb3BlcmF0b3IgaW5zdGVhZC4gIEFkZGl0aW9uYWxseSwgdGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGdsb2JhbFxuICogdW5kZWZpbmVkIHZhcmlhYmxlIGhhcyBub3QgYmVlbiByZWRlZmluZWQuXG4gKiBAcGFyYW0geyp9IHZhbCBWYXJpYWJsZSB0byB0ZXN0LlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB2YXJpYWJsZSBpcyBkZWZpbmVkLlxuICovXG5nb29nLmlzRGVmID0gZnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB2YWwgIT09IHVuZGVmaW5lZDtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyB8bnVsbHxcbiAqIEBwYXJhbSB7Kn0gdmFsIFZhcmlhYmxlIHRvIHRlc3QuXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHZhcmlhYmxlIGlzIG51bGwuXG4gKi9cbmdvb2cuaXNOdWxsID0gZnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB2YWwgPT09IG51bGw7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgZGVmaW5lZCBhbmQgbm90IG51bGxcbiAqIEBwYXJhbSB7Kn0gdmFsIFZhcmlhYmxlIHRvIHRlc3QuXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHZhcmlhYmxlIGlzIGRlZmluZWQgYW5kIG5vdCBudWxsLlxuICovXG5nb29nLmlzRGVmQW5kTm90TnVsbCA9IGZ1bmN0aW9uKHZhbCkge1xuICAvLyBOb3RlIHRoYXQgdW5kZWZpbmVkID09IG51bGwuXG4gIHJldHVybiB2YWwgIT0gbnVsbDtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBhbiBhcnJheVxuICogQHBhcmFtIHsqfSB2YWwgVmFyaWFibGUgdG8gdGVzdC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdmFyaWFibGUgaXMgYW4gYXJyYXkuXG4gKi9cbmdvb2cuaXNBcnJheSA9IGZ1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gZ29vZy50eXBlT2YodmFsKSA9PSAnYXJyYXknO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0IGxvb2tzIGxpa2UgYW4gYXJyYXkuIFRvIHF1YWxpZnkgYXMgYXJyYXkgbGlrZVxuICogdGhlIHZhbHVlIG5lZWRzIHRvIGJlIGVpdGhlciBhIE5vZGVMaXN0IG9yIGFuIG9iamVjdCB3aXRoIGEgTnVtYmVyIGxlbmd0aFxuICogcHJvcGVydHkuXG4gKiBAcGFyYW0geyp9IHZhbCBWYXJpYWJsZSB0byB0ZXN0LlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB2YXJpYWJsZSBpcyBhbiBhcnJheS5cbiAqL1xuZ29vZy5pc0FycmF5TGlrZSA9IGZ1bmN0aW9uKHZhbCkge1xuICB2YXIgdHlwZSA9IGdvb2cudHlwZU9mKHZhbCk7XG4gIHJldHVybiB0eXBlID09ICdhcnJheScgfHwgdHlwZSA9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsLmxlbmd0aCA9PSAnbnVtYmVyJztcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCBsb29rcyBsaWtlIGEgRGF0ZS4gVG8gcXVhbGlmeSBhcyBEYXRlLWxpa2VcbiAqIHRoZSB2YWx1ZSBuZWVkcyB0byBiZSBhbiBvYmplY3QgYW5kIGhhdmUgYSBnZXRGdWxsWWVhcigpIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSB2YWwgVmFyaWFibGUgdG8gdGVzdC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdmFyaWFibGUgaXMgYSBsaWtlIGEgRGF0ZS5cbiAqL1xuZ29vZy5pc0RhdGVMaWtlID0gZnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiBnb29nLmlzT2JqZWN0KHZhbCkgJiYgdHlwZW9mIHZhbC5nZXRGdWxsWWVhciA9PSAnZnVuY3Rpb24nO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGlzIGEgc3RyaW5nXG4gKiBAcGFyYW0geyp9IHZhbCBWYXJpYWJsZSB0byB0ZXN0LlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB2YXJpYWJsZSBpcyBhIHN0cmluZy5cbiAqL1xuZ29vZy5pc1N0cmluZyA9IGZ1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PSAnc3RyaW5nJztcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBhIGJvb2xlYW5cbiAqIEBwYXJhbSB7Kn0gdmFsIFZhcmlhYmxlIHRvIHRlc3QuXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHZhcmlhYmxlIGlzIGJvb2xlYW4uXG4gKi9cbmdvb2cuaXNCb29sZWFuID0gZnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09ICdib29sZWFuJztcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBhIG51bWJlclxuICogQHBhcmFtIHsqfSB2YWwgVmFyaWFibGUgdG8gdGVzdC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdmFyaWFibGUgaXMgYSBudW1iZXIuXG4gKi9cbmdvb2cuaXNOdW1iZXIgPSBmdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gJ251bWJlcic7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgYSBmdW5jdGlvblxuICogQHBhcmFtIHsqfSB2YWwgVmFyaWFibGUgdG8gdGVzdC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdmFyaWFibGUgaXMgYSBmdW5jdGlvbi5cbiAqL1xuZ29vZy5pc0Z1bmN0aW9uID0gZnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiBnb29nLnR5cGVPZih2YWwpID09ICdmdW5jdGlvbic7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgYW4gb2JqZWN0LiAgVGhpcyBpbmNsdWRlcyBhcnJheXNcbiAqIGFuZCBmdW5jdGlvbnMuXG4gKiBAcGFyYW0geyp9IHZhbCBWYXJpYWJsZSB0byB0ZXN0LlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB2YXJpYWJsZSBpcyBhbiBvYmplY3QuXG4gKi9cbmdvb2cuaXNPYmplY3QgPSBmdW5jdGlvbih2YWwpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xuICByZXR1cm4gdHlwZSA9PSAnb2JqZWN0JyAmJiB2YWwgIT0gbnVsbCB8fCB0eXBlID09ICdmdW5jdGlvbic7XG4gIC8vIHJldHVybiBPYmplY3QodmFsKSA9PT0gdmFsIGFsc28gd29ya3MsIGJ1dCBpcyBzbG93ZXIsIGVzcGVjaWFsbHkgaWYgdmFsIGlzXG4gIC8vIG5vdCBhbiBvYmplY3QuXG59O1xuXG5cbi8qKlxuICogR2V0cyBhIHVuaXF1ZSBJRCBmb3IgYW4gb2JqZWN0LiBUaGlzIG11dGF0ZXMgdGhlIG9iamVjdCBzbyB0aGF0IGZ1cnRoZXJcbiAqIGNhbGxzIHdpdGggdGhlIHNhbWUgb2JqZWN0IGFzIGEgcGFyYW1ldGVyIHJldHVybnMgdGhlIHNhbWUgdmFsdWUuIFRoZSB1bmlxdWVcbiAqIElEIGlzIGd1YXJhbnRlZWQgdG8gYmUgdW5pcXVlIGFjcm9zcyB0aGUgY3VycmVudCBzZXNzaW9uIGFtb25nc3Qgb2JqZWN0cyB0aGF0XG4gKiBhcmUgcGFzc2VkIGludG8ge0Bjb2RlIGdldFVpZH0uIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBJRCBpcyB1bmlxdWVcbiAqIG9yIGNvbnNpc3RlbnQgYWNyb3NzIHNlc3Npb25zLiBJdCBpcyB1bnNhZmUgdG8gZ2VuZXJhdGUgdW5pcXVlIElEIGZvclxuICogZnVuY3Rpb24gcHJvdG90eXBlcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gZ2V0IHRoZSB1bmlxdWUgSUQgZm9yLlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgdW5pcXVlIElEIGZvciB0aGUgb2JqZWN0LlxuICovXG5nb29nLmdldFVpZCA9IGZ1bmN0aW9uKG9iaikge1xuICAvLyBUT0RPKGFydik6IE1ha2UgdGhlIHR5cGUgc3RyaWN0ZXIsIGRvIG5vdCBhY2NlcHQgbnVsbC5cblxuICAvLyBJbiBPcGVyYSB3aW5kb3cuaGFzT3duUHJvcGVydHkgZXhpc3RzIGJ1dCBhbHdheXMgcmV0dXJucyBmYWxzZSBzbyB3ZSBhdm9pZFxuICAvLyB1c2luZyBpdC4gQXMgYSBjb25zZXF1ZW5jZSB0aGUgdW5pcXVlIElEIGdlbmVyYXRlZCBmb3IgQmFzZUNsYXNzLnByb3RvdHlwZVxuICAvLyBhbmQgU3ViQ2xhc3MucHJvdG90eXBlIHdpbGwgYmUgdGhlIHNhbWUuXG4gIHJldHVybiBvYmpbZ29vZy5VSURfUFJPUEVSVFlfXSB8fFxuICAgICAgKG9ialtnb29nLlVJRF9QUk9QRVJUWV9dID0gKytnb29nLnVpZENvdW50ZXJfKTtcbn07XG5cblxuLyoqXG4gKiBSZW1vdmVzIHRoZSB1bmlxdWUgSUQgZnJvbSBhbiBvYmplY3QuIFRoaXMgaXMgdXNlZnVsIGlmIHRoZSBvYmplY3Qgd2FzXG4gKiBwcmV2aW91c2x5IG11dGF0ZWQgdXNpbmcge0Bjb2RlIGdvb2cuZ2V0VWlkfSBpbiB3aGljaCBjYXNlIHRoZSBtdXRhdGlvbiBpc1xuICogdW5kb25lLlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIHJlbW92ZSB0aGUgdW5pcXVlIElEIGZpZWxkIGZyb20uXG4gKi9cbmdvb2cucmVtb3ZlVWlkID0gZnVuY3Rpb24ob2JqKSB7XG4gIC8vIFRPRE8oYXJ2KTogTWFrZSB0aGUgdHlwZSBzdHJpY3RlciwgZG8gbm90IGFjY2VwdCBudWxsLlxuXG4gIC8vIERPTSBub2RlcyBpbiBJRSBhcmUgbm90IGluc3RhbmNlIG9mIE9iamVjdCBhbmQgdGhyb3dzIGV4Y2VwdGlvblxuICAvLyBmb3IgZGVsZXRlLiBJbnN0ZWFkIHdlIHRyeSB0byB1c2UgcmVtb3ZlQXR0cmlidXRlXG4gIGlmICgncmVtb3ZlQXR0cmlidXRlJyBpbiBvYmopIHtcbiAgICBvYmoucmVtb3ZlQXR0cmlidXRlKGdvb2cuVUlEX1BST1BFUlRZXyk7XG4gIH1cbiAgLyoqIEBwcmVzZXJ2ZVRyeSAqL1xuICB0cnkge1xuICAgIGRlbGV0ZSBvYmpbZ29vZy5VSURfUFJPUEVSVFlfXTtcbiAgfSBjYXRjaCAoZXgpIHtcbiAgfVxufTtcblxuXG4vKipcbiAqIE5hbWUgZm9yIHVuaXF1ZSBJRCBwcm9wZXJ0eS4gSW5pdGlhbGl6ZWQgaW4gYSB3YXkgdG8gaGVscCBhdm9pZCBjb2xsaXNpb25zXG4gKiB3aXRoIG90aGVyIGNsb3N1cmUgamF2YXNjcmlwdCBvbiB0aGUgc2FtZSBwYWdlLlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cbmdvb2cuVUlEX1BST1BFUlRZXyA9ICdjbG9zdXJlX3VpZF8nICtcbiAgICBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyMTQ3NDgzNjQ4KS50b1N0cmluZygzNik7XG5cblxuLyoqXG4gKiBDb3VudGVyIGZvciBVSUQuXG4gKiBAdHlwZSB7bnVtYmVyfVxuICogQHByaXZhdGVcbiAqL1xuZ29vZy51aWRDb3VudGVyXyA9IDA7XG5cblxuLyoqXG4gKiBBZGRzIGEgaGFzaCBjb2RlIGZpZWxkIHRvIGFuIG9iamVjdC4gVGhlIGhhc2ggY29kZSBpcyB1bmlxdWUgZm9yIHRoZVxuICogZ2l2ZW4gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIGdldCB0aGUgaGFzaCBjb2RlIGZvci5cbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIGhhc2ggY29kZSBmb3IgdGhlIG9iamVjdC5cbiAqIEBkZXByZWNhdGVkIFVzZSBnb29nLmdldFVpZCBpbnN0ZWFkLlxuICovXG5nb29nLmdldEhhc2hDb2RlID0gZ29vZy5nZXRVaWQ7XG5cblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBoYXNoIGNvZGUgZmllbGQgZnJvbSBhbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gcmVtb3ZlIHRoZSBmaWVsZCBmcm9tLlxuICogQGRlcHJlY2F0ZWQgVXNlIGdvb2cucmVtb3ZlVWlkIGluc3RlYWQuXG4gKi9cbmdvb2cucmVtb3ZlSGFzaENvZGUgPSBnb29nLnJlbW92ZVVpZDtcblxuXG4vKipcbiAqIENsb25lcyBhIHZhbHVlLiBUaGUgaW5wdXQgbWF5IGJlIGFuIE9iamVjdCwgQXJyYXksIG9yIGJhc2ljIHR5cGUuIE9iamVjdHMgYW5kXG4gKiBhcnJheXMgd2lsbCBiZSBjbG9uZWQgcmVjdXJzaXZlbHkuXG4gKlxuICogV0FSTklOR1M6XG4gKiA8Y29kZT5nb29nLmNsb25lT2JqZWN0PC9jb2RlPiBkb2VzIG5vdCBkZXRlY3QgcmVmZXJlbmNlIGxvb3BzLiBPYmplY3RzIHRoYXRcbiAqIHJlZmVyIHRvIHRoZW1zZWx2ZXMgd2lsbCBjYXVzZSBpbmZpbml0ZSByZWN1cnNpb24uXG4gKlxuICogPGNvZGU+Z29vZy5jbG9uZU9iamVjdDwvY29kZT4gaXMgdW5hd2FyZSBvZiB1bmlxdWUgaWRlbnRpZmllcnMsIGFuZCBjb3BpZXNcbiAqIFVJRHMgY3JlYXRlZCBieSA8Y29kZT5nZXRVaWQ8L2NvZGU+IGludG8gY2xvbmVkIHJlc3VsdHMuXG4gKlxuICogQHBhcmFtIHsqfSBvYmogVGhlIHZhbHVlIHRvIGNsb25lLlxuICogQHJldHVybiB7Kn0gQSBjbG9uZSBvZiB0aGUgaW5wdXQgdmFsdWUuXG4gKiBAZGVwcmVjYXRlZCBnb29nLmNsb25lT2JqZWN0IGlzIHVuc2FmZS4gUHJlZmVyIHRoZSBnb29nLm9iamVjdCBtZXRob2RzLlxuICovXG5nb29nLmNsb25lT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gIHZhciB0eXBlID0gZ29vZy50eXBlT2Yob2JqKTtcbiAgaWYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnYXJyYXknKSB7XG4gICAgaWYgKG9iai5jbG9uZSkge1xuICAgICAgcmV0dXJuIG9iai5jbG9uZSgpO1xuICAgIH1cbiAgICB2YXIgY2xvbmUgPSB0eXBlID09ICdhcnJheScgPyBbXSA6IHt9O1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGNsb25lW2tleV0gPSBnb29nLmNsb25lT2JqZWN0KG9ialtrZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cblxuLyoqXG4gKiBGb3J3YXJkIGRlY2xhcmF0aW9uIGZvciB0aGUgY2xvbmUgbWV0aG9kLiBUaGlzIGlzIG5lY2Vzc2FyeSB1bnRpbCB0aGVcbiAqIGNvbXBpbGVyIGNhbiBiZXR0ZXIgc3VwcG9ydCBkdWNrLXR5cGluZyBjb25zdHJ1Y3RzIGFzIHVzZWQgaW5cbiAqIGdvb2cuY2xvbmVPYmplY3QuXG4gKlxuICogVE9ETyhicmVubmVtYW4pOiBSZW1vdmUgb25jZSB0aGUgSlNDb21waWxlciBjYW4gaW5mZXIgdGhhdCB0aGUgY2hlY2sgZm9yXG4gKiBwcm90by5jbG9uZSBpcyBzYWZlIGluIGdvb2cuY2xvbmVPYmplY3QuXG4gKlxuICogQHR5cGUge0Z1bmN0aW9ufVxuICovXG5PYmplY3QucHJvdG90eXBlLmNsb25lO1xuXG5cbi8qKlxuICogQSBuYXRpdmUgaW1wbGVtZW50YXRpb24gb2YgZ29vZy5iaW5kLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQSBmdW5jdGlvbiB0byBwYXJ0aWFsbHkgYXBwbHkuXG4gKiBAcGFyYW0ge09iamVjdHx1bmRlZmluZWR9IHNlbGZPYmogU3BlY2lmaWVzIHRoZSBvYmplY3Qgd2hpY2ggfHRoaXN8IHNob3VsZFxuICogICAgIHBvaW50IHRvIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIHJ1bi5cbiAqIEBwYXJhbSB7Li4uKn0gdmFyX2FyZ3MgQWRkaXRpb25hbCBhcmd1bWVudHMgdGhhdCBhcmUgcGFydGlhbGx5XG4gKiAgICAgYXBwbGllZCB0byB0aGUgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHshRnVuY3Rpb259IEEgcGFydGlhbGx5LWFwcGxpZWQgZm9ybSBvZiB0aGUgZnVuY3Rpb24gYmluZCgpIHdhc1xuICogICAgIGludm9rZWQgYXMgYSBtZXRob2Qgb2YuXG4gKiBAcHJpdmF0ZVxuICogQHN1cHByZXNzIHtkZXByZWNhdGVkfSBUaGUgY29tcGlsZXIgdGhpbmtzIHRoYXQgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcbiAqICAgICBpcyBkZXByZWNhdGVkIGJlY2F1c2Ugc29tZSBwZW9wbGUgaGF2ZSBkZWNsYXJlZCBhIHB1cmUtSlMgdmVyc2lvbi5cbiAqICAgICBPbmx5IHRoZSBwdXJlLUpTIHZlcnNpb24gaXMgdHJ1bHkgZGVwcmVjYXRlZC5cbiAqL1xuZ29vZy5iaW5kTmF0aXZlXyA9IGZ1bmN0aW9uKGZuLCBzZWxmT2JqLCB2YXJfYXJncykge1xuICByZXR1cm4gLyoqIEB0eXBlIHshRnVuY3Rpb259ICovIChmbi5jYWxsLmFwcGx5KGZuLmJpbmQsIGFyZ3VtZW50cykpO1xufTtcblxuXG4vKipcbiAqIEEgcHVyZS1KUyBpbXBsZW1lbnRhdGlvbiBvZiBnb29nLmJpbmQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBBIGZ1bmN0aW9uIHRvIHBhcnRpYWxseSBhcHBseS5cbiAqIEBwYXJhbSB7T2JqZWN0fHVuZGVmaW5lZH0gc2VsZk9iaiBTcGVjaWZpZXMgdGhlIG9iamVjdCB3aGljaCB8dGhpc3wgc2hvdWxkXG4gKiAgICAgcG9pbnQgdG8gd2hlbiB0aGUgZnVuY3Rpb24gaXMgcnVuLlxuICogQHBhcmFtIHsuLi4qfSB2YXJfYXJncyBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0aGF0IGFyZSBwYXJ0aWFsbHlcbiAqICAgICBhcHBsaWVkIHRvIHRoZSBmdW5jdGlvbi5cbiAqIEByZXR1cm4geyFGdW5jdGlvbn0gQSBwYXJ0aWFsbHktYXBwbGllZCBmb3JtIG9mIHRoZSBmdW5jdGlvbiBiaW5kKCkgd2FzXG4gKiAgICAgaW52b2tlZCBhcyBhIG1ldGhvZCBvZi5cbiAqIEBwcml2YXRlXG4gKi9cbmdvb2cuYmluZEpzXyA9IGZ1bmN0aW9uKGZuLCBzZWxmT2JqLCB2YXJfYXJncykge1xuICBpZiAoIWZuKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gIH1cblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcbiAgICB2YXIgYm91bmRBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAvLyBQcmVwZW5kIHRoZSBib3VuZCBhcmd1bWVudHMgdG8gdGhlIGN1cnJlbnQgYXJndW1lbnRzLlxuICAgICAgdmFyIG5ld0FyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkobmV3QXJncywgYm91bmRBcmdzKTtcbiAgICAgIHJldHVybiBmbi5hcHBseShzZWxmT2JqLCBuZXdBcmdzKTtcbiAgICB9O1xuXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGZuLmFwcGx5KHNlbGZPYmosIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxufTtcblxuXG4vKipcbiAqIFBhcnRpYWxseSBhcHBsaWVzIHRoaXMgZnVuY3Rpb24gdG8gYSBwYXJ0aWN1bGFyICd0aGlzIG9iamVjdCcgYW5kIHplcm8gb3JcbiAqIG1vcmUgYXJndW1lbnRzLiBUaGUgcmVzdWx0IGlzIGEgbmV3IGZ1bmN0aW9uIHdpdGggc29tZSBhcmd1bWVudHMgb2YgdGhlIGZpcnN0XG4gKiBmdW5jdGlvbiBwcmUtZmlsbGVkIGFuZCB0aGUgdmFsdWUgb2YgfHRoaXN8ICdwcmUtc3BlY2lmaWVkJy48YnI+PGJyPlxuICpcbiAqIFJlbWFpbmluZyBhcmd1bWVudHMgc3BlY2lmaWVkIGF0IGNhbGwtdGltZSBhcmUgYXBwZW5kZWQgdG8gdGhlIHByZS1cbiAqIHNwZWNpZmllZCBvbmVzLjxicj48YnI+XG4gKlxuICogQWxzbyBzZWU6IHtAbGluayAjcGFydGlhbH0uPGJyPjxicj5cbiAqXG4gKiBVc2FnZTpcbiAqIDxwcmU+dmFyIGJhck1ldGhCb3VuZCA9IGJpbmQobXlGdW5jdGlvbiwgbXlPYmosICdhcmcxJywgJ2FyZzInKTtcbiAqIGJhck1ldGhCb3VuZCgnYXJnMycsICdhcmc0Jyk7PC9wcmU+XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQSBmdW5jdGlvbiB0byBwYXJ0aWFsbHkgYXBwbHkuXG4gKiBAcGFyYW0ge09iamVjdHx1bmRlZmluZWR9IHNlbGZPYmogU3BlY2lmaWVzIHRoZSBvYmplY3Qgd2hpY2ggfHRoaXN8IHNob3VsZFxuICogICAgIHBvaW50IHRvIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIHJ1bi5cbiAqIEBwYXJhbSB7Li4uKn0gdmFyX2FyZ3MgQWRkaXRpb25hbCBhcmd1bWVudHMgdGhhdCBhcmUgcGFydGlhbGx5XG4gKiAgICAgYXBwbGllZCB0byB0aGUgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHshRnVuY3Rpb259IEEgcGFydGlhbGx5LWFwcGxpZWQgZm9ybSBvZiB0aGUgZnVuY3Rpb24gYmluZCgpIHdhc1xuICogICAgIGludm9rZWQgYXMgYSBtZXRob2Qgb2YuXG4gKiBAc3VwcHJlc3Mge2RlcHJlY2F0ZWR9IFNlZSBhYm92ZS5cbiAqL1xuZ29vZy5iaW5kID0gZnVuY3Rpb24oZm4sIHNlbGZPYmosIHZhcl9hcmdzKSB7XG4gIC8vIFRPRE8obmlja3NhbnRvcyk6IG5hcnJvdyB0aGUgdHlwZSBzaWduYXR1cmUuXG4gIGlmIChGdW5jdGlvbi5wcm90b3R5cGUuYmluZCAmJlxuICAgICAgLy8gTk9URShuaWNrc2FudG9zKTogU29tZWJvZHkgcHVsbGVkIGJhc2UuanMgaW50byB0aGUgZGVmYXVsdFxuICAgICAgLy8gQ2hyb21lIGV4dGVuc2lvbiBlbnZpcm9ubWVudC4gVGhpcyBtZWFucyB0aGF0IGZvciBDaHJvbWUgZXh0ZW5zaW9ucyxcbiAgICAgIC8vIHRoZXkgZ2V0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB0aGF0XG4gICAgICAvLyBjYWxscyBnb29nLmJpbmQgaW5zdGVhZCBvZiB0aGUgbmF0aXZlIG9uZS4gRXZlbiB3b3JzZSwgd2UgZG9uJ3Qgd2FudFxuICAgICAgLy8gdG8gaW50cm9kdWNlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuIGdvb2cuYmluZCBhbmRcbiAgICAgIC8vIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLCBzbyB3ZSBoYXZlIHRvIGhhY2sgdGhpcyB0byBtYWtlIHN1cmUgaXRcbiAgICAgIC8vIHdvcmtzIGNvcnJlY3RseS5cbiAgICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLnRvU3RyaW5nKCkuaW5kZXhPZignbmF0aXZlIGNvZGUnKSAhPSAtMSkge1xuICAgIGdvb2cuYmluZCA9IGdvb2cuYmluZE5hdGl2ZV87XG4gIH0gZWxzZSB7XG4gICAgZ29vZy5iaW5kID0gZ29vZy5iaW5kSnNfO1xuICB9XG4gIHJldHVybiBnb29nLmJpbmQuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbn07XG5cblxuLyoqXG4gKiBMaWtlIGJpbmQoKSwgZXhjZXB0IHRoYXQgYSAndGhpcyBvYmplY3QnIGlzIG5vdCByZXF1aXJlZC4gVXNlZnVsIHdoZW4gdGhlXG4gKiB0YXJnZXQgZnVuY3Rpb24gaXMgYWxyZWFkeSBib3VuZC5cbiAqXG4gKiBVc2FnZTpcbiAqIHZhciBnID0gcGFydGlhbChmLCBhcmcxLCBhcmcyKTtcbiAqIGcoYXJnMywgYXJnNCk7XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQSBmdW5jdGlvbiB0byBwYXJ0aWFsbHkgYXBwbHkuXG4gKiBAcGFyYW0gey4uLip9IHZhcl9hcmdzIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRoYXQgYXJlIHBhcnRpYWxseVxuICogICAgIGFwcGxpZWQgdG8gZm4uXG4gKiBAcmV0dXJuIHshRnVuY3Rpb259IEEgcGFydGlhbGx5LWFwcGxpZWQgZm9ybSBvZiB0aGUgZnVuY3Rpb24gYmluZCgpIHdhc1xuICogICAgIGludm9rZWQgYXMgYSBtZXRob2Qgb2YuXG4gKi9cbmdvb2cucGFydGlhbCA9IGZ1bmN0aW9uKGZuLCB2YXJfYXJncykge1xuICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAvLyBQcmVwZW5kIHRoZSBib3VuZCBhcmd1bWVudHMgdG8gdGhlIGN1cnJlbnQgYXJndW1lbnRzLlxuICAgIHZhciBuZXdBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICBuZXdBcmdzLnVuc2hpZnQuYXBwbHkobmV3QXJncywgYXJncyk7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIG5ld0FyZ3MpO1xuICB9O1xufTtcblxuXG4vKipcbiAqIENvcGllcyBhbGwgdGhlIG1lbWJlcnMgb2YgYSBzb3VyY2Ugb2JqZWN0IHRvIGEgdGFyZ2V0IG9iamVjdC4gVGhpcyBtZXRob2RcbiAqIGRvZXMgbm90IHdvcmsgb24gYWxsIGJyb3dzZXJzIGZvciBhbGwgb2JqZWN0cyB0aGF0IGNvbnRhaW4ga2V5cyBzdWNoIGFzXG4gKiB0b1N0cmluZyBvciBoYXNPd25Qcm9wZXJ0eS4gVXNlIGdvb2cub2JqZWN0LmV4dGVuZCBmb3IgdGhpcyBwdXJwb3NlLlxuICogQHBhcmFtIHtPYmplY3R9IHRhcmdldCBUYXJnZXQuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFNvdXJjZS5cbiAqL1xuZ29vZy5taXhpbiA9IGZ1bmN0aW9uKHRhcmdldCwgc291cmNlKSB7XG4gIGZvciAodmFyIHggaW4gc291cmNlKSB7XG4gICAgdGFyZ2V0W3hdID0gc291cmNlW3hdO1xuICB9XG5cbiAgLy8gRm9yIElFNyBvciBsb3dlciwgdGhlIGZvci1pbi1sb29wIGRvZXMgbm90IGNvbnRhaW4gYW55IHByb3BlcnRpZXMgdGhhdCBhcmVcbiAgLy8gbm90IGVudW1lcmFibGUgb24gdGhlIHByb3RvdHlwZSBvYmplY3QgKGZvciBleGFtcGxlLCBpc1Byb3RvdHlwZU9mIGZyb21cbiAgLy8gT2JqZWN0LnByb3RvdHlwZSkgYnV0IGFsc28gaXQgd2lsbCBub3QgaW5jbHVkZSAncmVwbGFjZScgb24gb2JqZWN0cyB0aGF0XG4gIC8vIGV4dGVuZCBTdHJpbmcgYW5kIGNoYW5nZSAncmVwbGFjZScgKG5vdCB0aGF0IGl0IGlzIGNvbW1vbiBmb3IgYW55b25lIHRvXG4gIC8vIGV4dGVuZCBhbnl0aGluZyBleGNlcHQgT2JqZWN0KS5cbn07XG5cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IEFuIGludGVnZXIgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzXG4gKiAgICAgYmV0d2VlbiBtaWRuaWdodCwgSmFudWFyeSAxLCAxOTcwIGFuZCB0aGUgY3VycmVudCB0aW1lLlxuICovXG5nb29nLm5vdyA9IERhdGUubm93IHx8IChmdW5jdGlvbigpIHtcbiAgLy8gVW5hcnkgcGx1cyBvcGVyYXRvciBjb252ZXJ0cyBpdHMgb3BlcmFuZCB0byBhIG51bWJlciB3aGljaCBpbiB0aGUgY2FzZSBvZlxuICAvLyBhIGRhdGUgaXMgZG9uZSBieSBjYWxsaW5nIGdldFRpbWUoKS5cbiAgcmV0dXJuICtuZXcgRGF0ZSgpO1xufSk7XG5cblxuLyoqXG4gKiBFdmFscyBqYXZhc2NyaXB0IGluIHRoZSBnbG9iYWwgc2NvcGUuICBJbiBJRSB0aGlzIHVzZXMgZXhlY1NjcmlwdCwgb3RoZXJcbiAqIGJyb3dzZXJzIHVzZSBnb29nLmdsb2JhbC5ldmFsLiBJZiBnb29nLmdsb2JhbC5ldmFsIGRvZXMgbm90IGV2YWx1YXRlIGluIHRoZVxuICogZ2xvYmFsIHNjb3BlIChmb3IgZXhhbXBsZSwgaW4gU2FmYXJpKSwgYXBwZW5kcyBhIHNjcmlwdCB0YWcgaW5zdGVhZC5cbiAqIFRocm93cyBhbiBleGNlcHRpb24gaWYgbmVpdGhlciBleGVjU2NyaXB0IG9yIGV2YWwgaXMgZGVmaW5lZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzY3JpcHQgSmF2YVNjcmlwdCBzdHJpbmcuXG4gKi9cbmdvb2cuZ2xvYmFsRXZhbCA9IGZ1bmN0aW9uKHNjcmlwdCkge1xuICBpZiAoZ29vZy5nbG9iYWwuZXhlY1NjcmlwdCkge1xuICAgIGdvb2cuZ2xvYmFsLmV4ZWNTY3JpcHQoc2NyaXB0LCAnSmF2YVNjcmlwdCcpO1xuICB9IGVsc2UgaWYgKGdvb2cuZ2xvYmFsLmV2YWwpIHtcbiAgICAvLyBUZXN0IHRvIHNlZSBpZiBldmFsIHdvcmtzXG4gICAgaWYgKGdvb2cuZXZhbFdvcmtzRm9yR2xvYmFsc18gPT0gbnVsbCkge1xuICAgICAgZ29vZy5nbG9iYWwuZXZhbCgndmFyIF9ldF8gPSAxOycpO1xuICAgICAgaWYgKHR5cGVvZiBnb29nLmdsb2JhbFsnX2V0XyddICE9ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGRlbGV0ZSBnb29nLmdsb2JhbFsnX2V0XyddO1xuICAgICAgICBnb29nLmV2YWxXb3Jrc0Zvckdsb2JhbHNfID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdvb2cuZXZhbFdvcmtzRm9yR2xvYmFsc18gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ29vZy5ldmFsV29ya3NGb3JHbG9iYWxzXykge1xuICAgICAgZ29vZy5nbG9iYWwuZXZhbChzY3JpcHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZG9jID0gZ29vZy5nbG9iYWwuZG9jdW1lbnQ7XG4gICAgICB2YXIgc2NyaXB0RWx0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgc2NyaXB0RWx0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiAgICAgIHNjcmlwdEVsdC5kZWZlciA9IGZhbHNlO1xuICAgICAgLy8gTm90ZSh1c2VyKTogY2FuJ3QgdXNlIC5pbm5lckhUTUwgc2luY2UgXCJ0KCc8dGVzdD4nKVwiIHdpbGwgZmFpbCBhbmRcbiAgICAgIC8vIC50ZXh0IGRvZXNuJ3Qgd29yayBpbiBTYWZhcmkgMi4gIFRoZXJlZm9yZSB3ZSBhcHBlbmQgYSB0ZXh0IG5vZGUuXG4gICAgICBzY3JpcHRFbHQuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKHNjcmlwdCkpO1xuICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0RWx0KTtcbiAgICAgIGRvYy5ib2R5LnJlbW92ZUNoaWxkKHNjcmlwdEVsdCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IEVycm9yKCdnb29nLmdsb2JhbEV2YWwgbm90IGF2YWlsYWJsZScpO1xuICB9XG59O1xuXG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHdlIGNhbiBjYWxsICdldmFsJyBkaXJlY3RseSB0byBldmFsIGNvZGUgaW4gdGhlXG4gKiBnbG9iYWwgc2NvcGUuIFNldCB0byBhIEJvb2xlYW4gYnkgdGhlIGZpcnN0IGNhbGwgdG8gZ29vZy5nbG9iYWxFdmFsICh3aGljaFxuICogZW1waXJpY2FsbHkgdGVzdHMgd2hldGhlciBldmFsIHdvcmtzIGZvciBnbG9iYWxzKS4gQHNlZSBnb29nLmdsb2JhbEV2YWxcbiAqIEB0eXBlIHs/Ym9vbGVhbn1cbiAqIEBwcml2YXRlXG4gKi9cbmdvb2cuZXZhbFdvcmtzRm9yR2xvYmFsc18gPSBudWxsO1xuXG5cbi8qKlxuICogT3B0aW9uYWwgbWFwIG9mIENTUyBjbGFzcyBuYW1lcyB0byBvYmZ1c2NhdGVkIG5hbWVzIHVzZWQgd2l0aFxuICogZ29vZy5nZXRDc3NOYW1lKCkuXG4gKiBAdHlwZSB7T2JqZWN0fHVuZGVmaW5lZH1cbiAqIEBwcml2YXRlXG4gKiBAc2VlIGdvb2cuc2V0Q3NzTmFtZU1hcHBpbmdcbiAqL1xuZ29vZy5jc3NOYW1lTWFwcGluZ187XG5cblxuLyoqXG4gKiBPcHRpb25hbCBvYmZ1c2NhdGlvbiBzdHlsZSBmb3IgQ1NTIGNsYXNzIG5hbWVzLiBTaG91bGQgYmUgc2V0IHRvIGVpdGhlclxuICogJ0JZX1dIT0xFJyBvciAnQllfUEFSVCcgaWYgZGVmaW5lZC5cbiAqIEB0eXBlIHtzdHJpbmd8dW5kZWZpbmVkfVxuICogQHByaXZhdGVcbiAqIEBzZWUgZ29vZy5zZXRDc3NOYW1lTWFwcGluZ1xuICovXG5nb29nLmNzc05hbWVNYXBwaW5nU3R5bGVfO1xuXG5cbi8qKlxuICogSGFuZGxlcyBzdHJpbmdzIHRoYXQgYXJlIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgQ1NTIGNsYXNzIG5hbWVzLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gd29ya3MgaW4gdGFuZGVtIHdpdGggQHNlZSBnb29nLnNldENzc05hbWVNYXBwaW5nLlxuICpcbiAqIFdpdGhvdXQgYW55IG1hcHBpbmcgc2V0LCB0aGUgYXJndW1lbnRzIGFyZSBzaW1wbGUgam9pbmVkIHdpdGggYVxuICogaHlwaGVuIGFuZCBwYXNzZWQgdGhyb3VnaCB1bmFsdGVyZWQuXG4gKlxuICogV2hlbiB0aGVyZSBpcyBhIG1hcHBpbmcsIHRoZXJlIGFyZSB0d28gcG9zc2libGUgc3R5bGVzIGluIHdoaWNoXG4gKiB0aGVzZSBtYXBwaW5ncyBhcmUgdXNlZC4gSW4gdGhlIEJZX1BBUlQgc3R5bGUsIGVhY2ggcGFydCAoaS5lLiBpblxuICogYmV0d2VlbiBoeXBoZW5zKSBvZiB0aGUgcGFzc2VkIGluIGNzcyBuYW1lIGlzIHJld3JpdHRlbiBhY2NvcmRpbmdcbiAqIHRvIHRoZSBtYXAuIEluIHRoZSBCWV9XSE9MRSBzdHlsZSwgdGhlIGZ1bGwgY3NzIG5hbWUgaXMgbG9va2VkIHVwIGluXG4gKiB0aGUgbWFwIGRpcmVjdGx5LiBJZiBhIHJld3JpdGUgaXMgbm90IHNwZWNpZmllZCBieSB0aGUgbWFwLCB0aGVcbiAqIGNvbXBpbGVyIHdpbGwgb3V0cHV0IGEgd2FybmluZy5cbiAqXG4gKiBXaGVuIHRoZSBtYXBwaW5nIGlzIHBhc3NlZCB0byB0aGUgY29tcGlsZXIsIGl0IHdpbGwgcmVwbGFjZSBjYWxsc1xuICogdG8gZ29vZy5nZXRDc3NOYW1lIHdpdGggdGhlIHN0cmluZ3MgZnJvbSB0aGUgbWFwcGluZywgZS5nLlxuICogICAgIHZhciB4ID0gZ29vZy5nZXRDc3NOYW1lKCdmb28nKTtcbiAqICAgICB2YXIgeSA9IGdvb2cuZ2V0Q3NzTmFtZSh0aGlzLmJhc2VDbGFzcywgJ2FjdGl2ZScpO1xuICogIGJlY29tZXM6XG4gKiAgICAgdmFyIHg9ICdmb28nO1xuICogICAgIHZhciB5ID0gdGhpcy5iYXNlQ2xhc3MgKyAnLWFjdGl2ZSc7XG4gKlxuICogSWYgb25lIGFyZ3VtZW50IGlzIHBhc3NlZCBpdCB3aWxsIGJlIHByb2Nlc3NlZCwgaWYgdHdvIGFyZSBwYXNzZWRcbiAqIG9ubHkgdGhlIG1vZGlmaWVyIHdpbGwgYmUgcHJvY2Vzc2VkLCBhcyBpdCBpcyBhc3N1bWVkIHRoZSBmaXJzdFxuICogYXJndW1lbnQgd2FzIGdlbmVyYXRlZCBhcyBhIHJlc3VsdCBvZiBjYWxsaW5nIGdvb2cuZ2V0Q3NzTmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lIFRoZSBjbGFzcyBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmc9fSBvcHRfbW9kaWZpZXIgQSBtb2RpZmllciB0byBiZSBhcHBlbmRlZCB0byB0aGUgY2xhc3MgbmFtZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNsYXNzIG5hbWUgb3IgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIGNsYXNzIG5hbWUgYW5kXG4gKiAgICAgdGhlIG1vZGlmaWVyLlxuICovXG5nb29nLmdldENzc05hbWUgPSBmdW5jdGlvbihjbGFzc05hbWUsIG9wdF9tb2RpZmllcikge1xuICB2YXIgZ2V0TWFwcGluZyA9IGZ1bmN0aW9uKGNzc05hbWUpIHtcbiAgICByZXR1cm4gZ29vZy5jc3NOYW1lTWFwcGluZ19bY3NzTmFtZV0gfHwgY3NzTmFtZTtcbiAgfTtcblxuICB2YXIgcmVuYW1lQnlQYXJ0cyA9IGZ1bmN0aW9uKGNzc05hbWUpIHtcbiAgICAvLyBSZW1hcCBhbGwgdGhlIHBhcnRzIGluZGl2aWR1YWxseS5cbiAgICB2YXIgcGFydHMgPSBjc3NOYW1lLnNwbGl0KCctJyk7XG4gICAgdmFyIG1hcHBlZCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG1hcHBlZC5wdXNoKGdldE1hcHBpbmcocGFydHNbaV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcHBlZC5qb2luKCctJyk7XG4gIH07XG5cbiAgdmFyIHJlbmFtZTtcbiAgaWYgKGdvb2cuY3NzTmFtZU1hcHBpbmdfKSB7XG4gICAgcmVuYW1lID0gZ29vZy5jc3NOYW1lTWFwcGluZ1N0eWxlXyA9PSAnQllfV0hPTEUnID9cbiAgICAgICAgZ2V0TWFwcGluZyA6IHJlbmFtZUJ5UGFydHM7XG4gIH0gZWxzZSB7XG4gICAgcmVuYW1lID0gZnVuY3Rpb24oYSkge1xuICAgICAgcmV0dXJuIGE7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChvcHRfbW9kaWZpZXIpIHtcbiAgICByZXR1cm4gY2xhc3NOYW1lICsgJy0nICsgcmVuYW1lKG9wdF9tb2RpZmllcik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJlbmFtZShjbGFzc05hbWUpO1xuICB9XG59O1xuXG5cbi8qKlxuICogU2V0cyB0aGUgbWFwIHRvIGNoZWNrIHdoZW4gcmV0dXJuaW5nIGEgdmFsdWUgZnJvbSBnb29nLmdldENzc05hbWUoKS4gRXhhbXBsZTpcbiAqIDxwcmU+XG4gKiBnb29nLnNldENzc05hbWVNYXBwaW5nKHtcbiAqICAgXCJnb29nXCI6IFwiYVwiLFxuICogICBcImRpc2FibGVkXCI6IFwiYlwiLFxuICogfSk7XG4gKlxuICogdmFyIHggPSBnb29nLmdldENzc05hbWUoJ2dvb2cnKTtcbiAqIC8vIFRoZSBmb2xsb3dpbmcgZXZhbHVhdGVzIHRvOiBcImEgYS1iXCIuXG4gKiBnb29nLmdldENzc05hbWUoJ2dvb2cnKSArICcgJyArIGdvb2cuZ2V0Q3NzTmFtZSh4LCAnZGlzYWJsZWQnKVxuICogPC9wcmU+XG4gKiBXaGVuIGRlY2xhcmVkIGFzIGEgbWFwIG9mIHN0cmluZyBsaXRlcmFscyB0byBzdHJpbmcgbGl0ZXJhbHMsIHRoZSBKU0NvbXBpbGVyXG4gKiB3aWxsIHJlcGxhY2UgYWxsIGNhbGxzIHRvIGdvb2cuZ2V0Q3NzTmFtZSgpIHVzaW5nIHRoZSBzdXBwbGllZCBtYXAgaWYgdGhlXG4gKiAtLWNsb3N1cmVfcGFzcyBmbGFnIGlzIHNldC5cbiAqXG4gKiBAcGFyYW0geyFPYmplY3R9IG1hcHBpbmcgQSBtYXAgb2Ygc3RyaW5ncyB0byBzdHJpbmdzIHdoZXJlIGtleXMgYXJlIHBvc3NpYmxlXG4gKiAgICAgYXJndW1lbnRzIHRvIGdvb2cuZ2V0Q3NzTmFtZSgpIGFuZCB2YWx1ZXMgYXJlIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlc1xuICogICAgIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkLlxuICogQHBhcmFtIHtzdHJpbmc9fSBvcHRfc3R5bGUgVGhlIHN0eWxlIG9mIGNzcyBuYW1lIG1hcHBpbmcuIFRoZXJlIGFyZSB0d28gdmFsaWRcbiAqICAgICBvcHRpb25zOiAnQllfUEFSVCcsIGFuZCAnQllfV0hPTEUnLlxuICogQHNlZSBnb29nLmdldENzc05hbWUgZm9yIGEgZGVzY3JpcHRpb24uXG4gKi9cbmdvb2cuc2V0Q3NzTmFtZU1hcHBpbmcgPSBmdW5jdGlvbihtYXBwaW5nLCBvcHRfc3R5bGUpIHtcbiAgZ29vZy5jc3NOYW1lTWFwcGluZ18gPSBtYXBwaW5nO1xuICBnb29nLmNzc05hbWVNYXBwaW5nU3R5bGVfID0gb3B0X3N0eWxlO1xufTtcblxuXG4vKipcbiAqIFRvIHVzZSBDU1MgcmVuYW1pbmcgaW4gY29tcGlsZWQgbW9kZSwgb25lIG9mIHRoZSBpbnB1dCBmaWxlcyBzaG91bGQgaGF2ZSBhXG4gKiBjYWxsIHRvIGdvb2cuc2V0Q3NzTmFtZU1hcHBpbmcoKSB3aXRoIGFuIG9iamVjdCBsaXRlcmFsIHRoYXQgdGhlIEpTQ29tcGlsZXJcbiAqIGNhbiBleHRyYWN0IGFuZCB1c2UgdG8gcmVwbGFjZSBhbGwgY2FsbHMgdG8gZ29vZy5nZXRDc3NOYW1lKCkuIEluIHVuY29tcGlsZWRcbiAqIG1vZGUsIEphdmFTY3JpcHQgY29kZSBzaG91bGQgYmUgbG9hZGVkIGJlZm9yZSB0aGlzIGJhc2UuanMgZmlsZSB0aGF0IGRlY2xhcmVzXG4gKiBhIGdsb2JhbCB2YXJpYWJsZSwgQ0xPU1VSRV9DU1NfTkFNRV9NQVBQSU5HLCB3aGljaCBpcyB1c2VkIGJlbG93LiBUaGlzIGlzXG4gKiB0byBlbnN1cmUgdGhhdCB0aGUgbWFwcGluZyBpcyBsb2FkZWQgYmVmb3JlIGFueSBjYWxscyB0byBnb29nLmdldENzc05hbWUoKVxuICogYXJlIG1hZGUgaW4gdW5jb21waWxlZCBtb2RlLlxuICpcbiAqIEEgaG9vayBmb3Igb3ZlcnJpZGluZyB0aGUgQ1NTIG5hbWUgbWFwcGluZy5cbiAqIEB0eXBlIHtPYmplY3R8dW5kZWZpbmVkfVxuICovXG5nb29nLmdsb2JhbC5DTE9TVVJFX0NTU19OQU1FX01BUFBJTkc7XG5cblxuaWYgKCFDT01QSUxFRCAmJiBnb29nLmdsb2JhbC5DTE9TVVJFX0NTU19OQU1FX01BUFBJTkcpIHtcbiAgLy8gVGhpcyBkb2VzIG5vdCBjYWxsIGdvb2cuc2V0Q3NzTmFtZU1hcHBpbmcoKSBiZWNhdXNlIHRoZSBKU0NvbXBpbGVyXG4gIC8vIHJlcXVpcmVzIHRoYXQgZ29vZy5zZXRDc3NOYW1lTWFwcGluZygpIGJlIGNhbGxlZCB3aXRoIGFuIG9iamVjdCBsaXRlcmFsLlxuICBnb29nLmNzc05hbWVNYXBwaW5nXyA9IGdvb2cuZ2xvYmFsLkNMT1NVUkVfQ1NTX05BTUVfTUFQUElORztcbn1cblxuXG4vKipcbiAqIEFic3RyYWN0IGltcGxlbWVudGF0aW9uIG9mIGdvb2cuZ2V0TXNnIGZvciB1c2Ugd2l0aCBsb2NhbGl6ZWQgbWVzc2FnZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIFRyYW5zbGF0YWJsZSBzdHJpbmcsIHBsYWNlcyBob2xkZXJzIGluIHRoZSBmb3JtIHskZm9vfS5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0X3ZhbHVlcyBNYXAgb2YgcGxhY2UgaG9sZGVyIG5hbWUgdG8gdmFsdWUuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IG1lc3NhZ2Ugd2l0aCBwbGFjZWhvbGRlcnMgZmlsbGVkLlxuICovXG5nb29nLmdldE1zZyA9IGZ1bmN0aW9uKHN0ciwgb3B0X3ZhbHVlcykge1xuICB2YXIgdmFsdWVzID0gb3B0X3ZhbHVlcyB8fCB7fTtcbiAgZm9yICh2YXIga2V5IGluIHZhbHVlcykge1xuICAgIHZhciB2YWx1ZSA9ICgnJyArIHZhbHVlc1trZXldKS5yZXBsYWNlKC9cXCQvZywgJyQkJCQnKTtcbiAgICBzdHIgPSBzdHIucmVwbGFjZShuZXcgUmVnRXhwKCdcXFxce1xcXFwkJyArIGtleSArICdcXFxcfScsICdnaScpLCB2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHN0cjtcbn07XG5cblxuLyoqXG4gKiBFeHBvc2VzIGFuIHVub2JmdXNjYXRlZCBnbG9iYWwgbmFtZXNwYWNlIHBhdGggZm9yIHRoZSBnaXZlbiBvYmplY3QuXG4gKiBOb3RlIHRoYXQgZmllbGRzIG9mIHRoZSBleHBvcnRlZCBvYmplY3QgKndpbGwqIGJlIG9iZnVzY2F0ZWQsXG4gKiB1bmxlc3MgdGhleSBhcmUgZXhwb3J0ZWQgaW4gdHVybiB2aWEgdGhpcyBmdW5jdGlvbiBvclxuICogZ29vZy5leHBvcnRQcm9wZXJ0eVxuICpcbiAqIDxwPkFsc28gaGFuZHkgZm9yIG1ha2luZyBwdWJsaWMgaXRlbXMgdGhhdCBhcmUgZGVmaW5lZCBpbiBhbm9ueW1vdXNcbiAqIGNsb3N1cmVzLlxuICpcbiAqIGV4LiBnb29nLmV4cG9ydFN5bWJvbCgncHVibGljLnBhdGguRm9vJywgRm9vKTtcbiAqXG4gKiBleC4gZ29vZy5leHBvcnRTeW1ib2woJ3B1YmxpYy5wYXRoLkZvby5zdGF0aWNGdW5jdGlvbicsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgRm9vLnN0YXRpY0Z1bmN0aW9uKTtcbiAqICAgICBwdWJsaWMucGF0aC5Gb28uc3RhdGljRnVuY3Rpb24oKTtcbiAqXG4gKiBleC4gZ29vZy5leHBvcnRTeW1ib2woJ3B1YmxpYy5wYXRoLkZvby5wcm90b3R5cGUubXlNZXRob2QnLFxuICogICAgICAgICAgICAgICAgICAgICAgIEZvby5wcm90b3R5cGUubXlNZXRob2QpO1xuICogICAgIG5ldyBwdWJsaWMucGF0aC5Gb28oKS5teU1ldGhvZCgpO1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwdWJsaWNQYXRoIFVub2JmdXNjYXRlZCBuYW1lIHRvIGV4cG9ydC5cbiAqIEBwYXJhbSB7Kn0gb2JqZWN0IE9iamVjdCB0aGUgbmFtZSBzaG91bGQgcG9pbnQgdG8uXG4gKiBAcGFyYW0ge09iamVjdD19IG9wdF9vYmplY3RUb0V4cG9ydFRvIFRoZSBvYmplY3QgdG8gYWRkIHRoZSBwYXRoIHRvOyBkZWZhdWx0XG4gKiAgICAgaXMgfGdvb2cuZ2xvYmFsfC5cbiAqL1xuZ29vZy5leHBvcnRTeW1ib2wgPSBmdW5jdGlvbihwdWJsaWNQYXRoLCBvYmplY3QsIG9wdF9vYmplY3RUb0V4cG9ydFRvKSB7XG4gIGdvb2cuZXhwb3J0UGF0aF8ocHVibGljUGF0aCwgb2JqZWN0LCBvcHRfb2JqZWN0VG9FeHBvcnRUbyk7XG59O1xuXG5cbi8qKlxuICogRXhwb3J0cyBhIHByb3BlcnR5IHVub2JmdXNjYXRlZCBpbnRvIHRoZSBvYmplY3QncyBuYW1lc3BhY2UuXG4gKiBleC4gZ29vZy5leHBvcnRQcm9wZXJ0eShGb28sICdzdGF0aWNGdW5jdGlvbicsIEZvby5zdGF0aWNGdW5jdGlvbik7XG4gKiBleC4gZ29vZy5leHBvcnRQcm9wZXJ0eShGb28ucHJvdG90eXBlLCAnbXlNZXRob2QnLCBGb28ucHJvdG90eXBlLm15TWV0aG9kKTtcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgT2JqZWN0IHdob3NlIHN0YXRpYyBwcm9wZXJ0eSBpcyBiZWluZyBleHBvcnRlZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwdWJsaWNOYW1lIFVub2JmdXNjYXRlZCBuYW1lIHRvIGV4cG9ydC5cbiAqIEBwYXJhbSB7Kn0gc3ltYm9sIE9iamVjdCB0aGUgbmFtZSBzaG91bGQgcG9pbnQgdG8uXG4gKi9cbmdvb2cuZXhwb3J0UHJvcGVydHkgPSBmdW5jdGlvbihvYmplY3QsIHB1YmxpY05hbWUsIHN5bWJvbCkge1xuICBvYmplY3RbcHVibGljTmFtZV0gPSBzeW1ib2w7XG59O1xuXG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyLlxuICpcbiAqIFVzYWdlOlxuICogPHByZT5cbiAqIGZ1bmN0aW9uIFBhcmVudENsYXNzKGEsIGIpIHsgfVxuICogUGFyZW50Q2xhc3MucHJvdG90eXBlLmZvbyA9IGZ1bmN0aW9uKGEpIHsgfVxuICpcbiAqIGZ1bmN0aW9uIENoaWxkQ2xhc3MoYSwgYiwgYykge1xuICogICBnb29nLmJhc2UodGhpcywgYSwgYik7XG4gKiB9XG4gKiBnb29nLmluaGVyaXRzKENoaWxkQ2xhc3MsIFBhcmVudENsYXNzKTtcbiAqXG4gKiB2YXIgY2hpbGQgPSBuZXcgQ2hpbGRDbGFzcygnYScsICdiJywgJ3NlZScpO1xuICogY2hpbGQuZm9vKCk7IC8vIHdvcmtzXG4gKiA8L3ByZT5cbiAqXG4gKiBJbiBhZGRpdGlvbiwgYSBzdXBlcmNsYXNzJyBpbXBsZW1lbnRhdGlvbiBvZiBhIG1ldGhvZCBjYW4gYmUgaW52b2tlZFxuICogYXMgZm9sbG93czpcbiAqXG4gKiA8cHJlPlxuICogQ2hpbGRDbGFzcy5wcm90b3R5cGUuZm9vID0gZnVuY3Rpb24oYSkge1xuICogICBDaGlsZENsYXNzLnN1cGVyQ2xhc3NfLmZvby5jYWxsKHRoaXMsIGEpO1xuICogICAvLyBvdGhlciBjb2RlXG4gKiB9O1xuICogPC9wcmU+XG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2hpbGRDdG9yIENoaWxkIGNsYXNzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyZW50Q3RvciBQYXJlbnQgY2xhc3MuXG4gKi9cbmdvb2cuaW5oZXJpdHMgPSBmdW5jdGlvbihjaGlsZEN0b3IsIHBhcmVudEN0b3IpIHtcbiAgLyoqIEBjb25zdHJ1Y3RvciAqL1xuICBmdW5jdGlvbiB0ZW1wQ3RvcigpIHt9O1xuICB0ZW1wQ3Rvci5wcm90b3R5cGUgPSBwYXJlbnRDdG9yLnByb3RvdHlwZTtcbiAgY2hpbGRDdG9yLnN1cGVyQ2xhc3NfID0gcGFyZW50Q3Rvci5wcm90b3R5cGU7XG4gIGNoaWxkQ3Rvci5wcm90b3R5cGUgPSBuZXcgdGVtcEN0b3IoKTtcbiAgY2hpbGRDdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNoaWxkQ3Rvcjtcbn07XG5cblxuLyoqXG4gKiBDYWxsIHVwIHRvIHRoZSBzdXBlcmNsYXNzLlxuICpcbiAqIElmIHRoaXMgaXMgY2FsbGVkIGZyb20gYSBjb25zdHJ1Y3RvciwgdGhlbiB0aGlzIGNhbGxzIHRoZSBzdXBlcmNsYXNzXG4gKiBjb250cnVjdG9yIHdpdGggYXJndW1lbnRzIDEtTi5cbiAqXG4gKiBJZiB0aGlzIGlzIGNhbGxlZCBmcm9tIGEgcHJvdG90eXBlIG1ldGhvZCwgdGhlbiB5b3UgbXVzdCBwYXNzXG4gKiB0aGUgbmFtZSBvZiB0aGUgbWV0aG9kIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gdGhpcyBmdW5jdGlvbi4gSWZcbiAqIHlvdSBkbyBub3QsIHlvdSB3aWxsIGdldCBhIHJ1bnRpbWUgZXJyb3IuIFRoaXMgY2FsbHMgdGhlIHN1cGVyY2xhc3MnXG4gKiBtZXRob2Qgd2l0aCBhcmd1bWVudHMgMi1OLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gb25seSB3b3JrcyBpZiB5b3UgdXNlIGdvb2cuaW5oZXJpdHMgdG8gZXhwcmVzc1xuICogaW5oZXJpdGFuY2UgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHlvdXIgY2xhc3Nlcy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGEgY29tcGlsZXIgcHJpbWl0aXZlLiBBdCBjb21waWxlLXRpbWUsIHRoZVxuICogY29tcGlsZXIgd2lsbCBkbyBtYWNybyBleHBhbnNpb24gdG8gcmVtb3ZlIGEgbG90IG9mXG4gKiB0aGUgZXh0cmEgb3ZlcmhlYWQgdGhhdCB0aGlzIGZ1bmN0aW9uIGludHJvZHVjZXMuIFRoZSBjb21waWxlclxuICogd2lsbCBhbHNvIGVuZm9yY2UgYSBsb3Qgb2YgdGhlIGFzc3VtcHRpb25zIHRoYXQgdGhpcyBmdW5jdGlvblxuICogbWFrZXMsIGFuZCB0cmVhdCBpdCBhcyBhIGNvbXBpbGVyIGVycm9yIGlmIHlvdSBicmVhayB0aGVtLlxuICpcbiAqIEBwYXJhbSB7IU9iamVjdH0gbWUgU2hvdWxkIGFsd2F5cyBiZSBcInRoaXNcIi5cbiAqIEBwYXJhbSB7Kj19IG9wdF9tZXRob2ROYW1lIFRoZSBtZXRob2QgbmFtZSBpZiBjYWxsaW5nIGEgc3VwZXIgbWV0aG9kLlxuICogQHBhcmFtIHsuLi4qfSB2YXJfYXJncyBUaGUgcmVzdCBvZiB0aGUgYXJndW1lbnRzLlxuICogQHJldHVybiB7Kn0gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgc3VwZXJjbGFzcyBtZXRob2QuXG4gKi9cbmdvb2cuYmFzZSA9IGZ1bmN0aW9uKG1lLCBvcHRfbWV0aG9kTmFtZSwgdmFyX2FyZ3MpIHtcbiAgdmFyIGNhbGxlciA9IGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyO1xuICBpZiAoY2FsbGVyLnN1cGVyQ2xhc3NfKSB7XG4gICAgLy8gVGhpcyBpcyBhIGNvbnN0cnVjdG9yLiBDYWxsIHRoZSBzdXBlcmNsYXNzIGNvbnN0cnVjdG9yLlxuICAgIHJldHVybiBjYWxsZXIuc3VwZXJDbGFzc18uY29uc3RydWN0b3IuYXBwbHkoXG4gICAgICAgIG1lLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgfVxuXG4gIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcbiAgdmFyIGZvdW5kQ2FsbGVyID0gZmFsc2U7XG4gIGZvciAodmFyIGN0b3IgPSBtZS5jb25zdHJ1Y3RvcjtcbiAgICAgICBjdG9yOyBjdG9yID0gY3Rvci5zdXBlckNsYXNzXyAmJiBjdG9yLnN1cGVyQ2xhc3NfLmNvbnN0cnVjdG9yKSB7XG4gICAgaWYgKGN0b3IucHJvdG90eXBlW29wdF9tZXRob2ROYW1lXSA9PT0gY2FsbGVyKSB7XG4gICAgICBmb3VuZENhbGxlciA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChmb3VuZENhbGxlcikge1xuICAgICAgcmV0dXJuIGN0b3IucHJvdG90eXBlW29wdF9tZXRob2ROYW1lXS5hcHBseShtZSwgYXJncyk7XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgd2UgZGlkIG5vdCBmaW5kIHRoZSBjYWxsZXIgaW4gdGhlIHByb3RvdHlwZSBjaGFpbixcbiAgLy8gdGhlbiBvbmUgb2YgdHdvIHRoaW5ncyBoYXBwZW5lZDpcbiAgLy8gMSkgVGhlIGNhbGxlciBpcyBhbiBpbnN0YW5jZSBtZXRob2QuXG4gIC8vIDIpIFRoaXMgbWV0aG9kIHdhcyBub3QgY2FsbGVkIGJ5IHRoZSByaWdodCBjYWxsZXIuXG4gIGlmIChtZVtvcHRfbWV0aG9kTmFtZV0gPT09IGNhbGxlcikge1xuICAgIHJldHVybiBtZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGVbb3B0X21ldGhvZE5hbWVdLmFwcGx5KG1lLCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ2dvb2cuYmFzZSBjYWxsZWQgZnJvbSBhIG1ldGhvZCBvZiBvbmUgbmFtZSAnICtcbiAgICAgICAgJ3RvIGEgbWV0aG9kIG9mIGEgZGlmZmVyZW50IG5hbWUnKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIEFsbG93IGZvciBhbGlhc2luZyB3aXRoaW4gc2NvcGUgZnVuY3Rpb25zLiAgVGhpcyBmdW5jdGlvbiBleGlzdHMgZm9yXG4gKiB1bmNvbXBpbGVkIGNvZGUgLSBpbiBjb21waWxlZCBjb2RlIHRoZSBjYWxscyB3aWxsIGJlIGlubGluZWQgYW5kIHRoZVxuICogYWxpYXNlcyBhcHBsaWVkLiAgSW4gdW5jb21waWxlZCBjb2RlIHRoZSBmdW5jdGlvbiBpcyBzaW1wbHkgcnVuIHNpbmNlIHRoZVxuICogYWxpYXNlcyBhcyB3cml0dGVuIGFyZSB2YWxpZCBKYXZhU2NyaXB0LlxuICogQHBhcmFtIHtmdW5jdGlvbigpfSBmbiBGdW5jdGlvbiB0byBjYWxsLiAgVGhpcyBmdW5jdGlvbiBjYW4gY29udGFpbiBhbGlhc2VzXG4gKiAgICAgdG8gbmFtZXNwYWNlcyAoZS5nLiBcInZhciBkb20gPSBnb29nLmRvbVwiKSBvciBjbGFzc2VzXG4gKiAgICAoZS5nLiBcInZhciBUaW1lciA9IGdvb2cuVGltZXJcIikuXG4gKi9cbmdvb2cuc2NvcGUgPSBmdW5jdGlvbihmbikge1xuICBmbi5jYWxsKGdvb2cuZ2xvYmFsKTtcbn07XG5cblxuIiwiLyoqXG4gKiBkZWZpbmVzXG4gKi9cblxuZ29vZy5wcm92aWRlKCdVU0VfVFlQRURBUlJBWScpO1xuXG4vLyBTYWZhcmkg44GMIHR5cGVvZiBVaW50OEFycmF5ID09PSAnb2JqZWN0JyDjgavjgarjgovjgZ/jgoHjgIFcbi8vIOacquWumue+qeOBi+WQpuOBi+OBpyBUeXBlZCBBcnJheSDjga7kvb/nlKjjgpLmsbrlrprjgZnjgotcblxuLyoqIEBjb25zdCB7Ym9vbGVhbn0gdXNlIHR5cGVkIGFycmF5IGZsYWcuICovXG52YXIgVVNFX1RZUEVEQVJSQVkgPVxuICAodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnKSAmJlxuICAodHlwZW9mIFVpbnQxNkFycmF5ICE9PSAndW5kZWZpbmVkJykgJiZcbiAgKHR5cGVvZiBVaW50MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCcpICYmXG4gICh0eXBlb2YgRGF0YVZpZXcgIT09ICd1bmRlZmluZWQnKTtcbiIsImdvb2cucHJvdmlkZSgnWmxpYi5IdWZmbWFuJyk7XG5cbmdvb2cucmVxdWlyZSgnVVNFX1RZUEVEQVJSQVknKTtcblxuZ29vZy5zY29wZShmdW5jdGlvbigpIHtcblxuLyoqXG4gKiBidWlsZCBodWZmbWFuIHRhYmxlIGZyb20gbGVuZ3RoIGxpc3QuXG4gKiBAcGFyYW0geyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IGxlbmd0aHMgbGVuZ3RoIGxpc3QuXG4gKiBAcmV0dXJuIHshQXJyYXl9IGh1ZmZtYW4gdGFibGUuXG4gKi9cblpsaWIuSHVmZm1hbi5idWlsZEh1ZmZtYW5UYWJsZSA9IGZ1bmN0aW9uKGxlbmd0aHMpIHtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGxlbmd0aCBsaXN0IHNpemUuICovXG4gIHZhciBsaXN0U2l6ZSA9IGxlbmd0aHMubGVuZ3RoO1xuICAvKiogQHR5cGUge251bWJlcn0gbWF4IGNvZGUgbGVuZ3RoIGZvciB0YWJsZSBzaXplLiAqL1xuICB2YXIgbWF4Q29kZUxlbmd0aCA9IDA7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBtaW4gY29kZSBsZW5ndGggZm9yIHRhYmxlIHNpemUuICovXG4gIHZhciBtaW5Db2RlTGVuZ3RoID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAvKiogQHR5cGUge251bWJlcn0gdGFibGUgc2l6ZS4gKi9cbiAgdmFyIHNpemU7XG4gIC8qKiBAdHlwZSB7IShBcnJheXxVaW50OEFycmF5KX0gaHVmZm1hbiBjb2RlIHRhYmxlLiAqL1xuICB2YXIgdGFibGU7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBiaXQgbGVuZ3RoLiAqL1xuICB2YXIgYml0TGVuZ3RoO1xuICAvKiogQHR5cGUge251bWJlcn0gaHVmZm1hbiBjb2RlLiAqL1xuICB2YXIgY29kZTtcbiAgLyoqXG4gICAqIOOCteOCpOOCuuOBjCAyXm1heGxlbmd0aCDlgIvjga7jg4bjg7zjg5bjg6vjgpLln4vjgoHjgovjgZ/jgoHjga7jgrnjgq3jg4Pjg5fplbcuXG4gICAqIEB0eXBlIHtudW1iZXJ9IHNraXAgbGVuZ3RoIGZvciB0YWJsZSBmaWxsaW5nLlxuICAgKi9cbiAgdmFyIHNraXA7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSByZXZlcnNlZCBjb2RlLiAqL1xuICB2YXIgcmV2ZXJzZWQ7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSByZXZlcnNlIHRlbXAuICovXG4gIHZhciBydGVtcDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGxvb3AgY291bnRlci4gKi9cbiAgdmFyIGk7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBsb29wIGxpbWl0LiAqL1xuICB2YXIgaWw7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBsb29wIGNvdW50ZXIuICovXG4gIHZhciBqO1xuICAvKiogQHR5cGUge251bWJlcn0gdGFibGUgdmFsdWUuICovXG4gIHZhciB2YWx1ZTtcblxuICAvLyBNYXRoLm1heCDjga/pgYXjgYTjga7jgafmnIDplbfjga7lgKTjga8gZm9yLWxvb3Ag44Gn5Y+W5b6X44GZ44KLXG4gIGZvciAoaSA9IDAsIGlsID0gbGlzdFNpemU7IGkgPCBpbDsgKytpKSB7XG4gICAgaWYgKGxlbmd0aHNbaV0gPiBtYXhDb2RlTGVuZ3RoKSB7XG4gICAgICBtYXhDb2RlTGVuZ3RoID0gbGVuZ3Roc1tpXTtcbiAgICB9XG4gICAgaWYgKGxlbmd0aHNbaV0gPCBtaW5Db2RlTGVuZ3RoKSB7XG4gICAgICBtaW5Db2RlTGVuZ3RoID0gbGVuZ3Roc1tpXTtcbiAgICB9XG4gIH1cblxuICBzaXplID0gMSA8PCBtYXhDb2RlTGVuZ3RoO1xuICB0YWJsZSA9IG5ldyAoVVNFX1RZUEVEQVJSQVkgPyBVaW50MzJBcnJheSA6IEFycmF5KShzaXplKTtcblxuICAvLyDjg5Pjg4Pjg4jplbfjga7nn63jgYTpoIbjgYvjgonjg4/jg5Xjg57jg7PnrKblj7fjgpLlibLjgorlvZPjgabjgotcbiAgZm9yIChiaXRMZW5ndGggPSAxLCBjb2RlID0gMCwgc2tpcCA9IDI7IGJpdExlbmd0aCA8PSBtYXhDb2RlTGVuZ3RoOykge1xuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0U2l6ZTsgKytpKSB7XG4gICAgICBpZiAobGVuZ3Roc1tpXSA9PT0gYml0TGVuZ3RoKSB7XG4gICAgICAgIC8vIOODk+ODg+ODiOOCquODvOODgOODvOOBjOmAhuOBq+OBquOCi+OBn+OCgeODk+ODg+ODiOmVt+WIhuS4puOBs+OCkuWPjei7ouOBmeOCi1xuICAgICAgICBmb3IgKHJldmVyc2VkID0gMCwgcnRlbXAgPSBjb2RlLCBqID0gMDsgaiA8IGJpdExlbmd0aDsgKytqKSB7XG4gICAgICAgICAgcmV2ZXJzZWQgPSAocmV2ZXJzZWQgPDwgMSkgfCAocnRlbXAgJiAxKTtcbiAgICAgICAgICBydGVtcCA+Pj0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOacgOWkp+ODk+ODg+ODiOmVt+OCkuOCguOBqOOBq+ODhuODvOODluODq+OCkuS9nOOCi+OBn+OCgeOAgVxuICAgICAgICAvLyDmnIDlpKfjg5Pjg4Pjg4jplbfku6XlpJbjgafjga8gMCAvIDEg44Gp44Gh44KJ44Gn44KC6Imv44GE566H5omA44GM44Gn44GN44KLXG4gICAgICAgIC8vIOOBneOBruOBqeOBoeOCieOBp+OCguiJr+OBhOWgtOaJgOOBr+WQjOOBmOWApOOBp+Wfi+OCgeOCi+OBk+OBqOOBp1xuICAgICAgICAvLyDmnKzmnaXjga7jg5Pjg4Pjg4jplbfku6XkuIrjga7jg5Pjg4Pjg4jmlbDlj5blvpfjgZfjgabjgoLllY/poYzjgYzotbfjgZPjgonjgarjgYTjgojjgYbjgavjgZnjgotcbiAgICAgICAgdmFsdWUgPSAoYml0TGVuZ3RoIDw8IDE2KSB8IGk7XG4gICAgICAgIGZvciAoaiA9IHJldmVyc2VkOyBqIDwgc2l6ZTsgaiArPSBza2lwKSB7XG4gICAgICAgICAgdGFibGVbal0gPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgICsrY29kZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDmrKHjga7jg5Pjg4Pjg4jplbfjgbhcbiAgICArK2JpdExlbmd0aDtcbiAgICBjb2RlIDw8PSAxO1xuICAgIHNraXAgPDw9IDE7XG4gIH1cblxuICByZXR1cm4gW3RhYmxlLCBtYXhDb2RlTGVuZ3RoLCBtaW5Db2RlTGVuZ3RoXTtcbn07XG5cblxuLy8gZW5kIG9mIHNjb3BlXG59KTtcblxuLyogdmltOnNldCBleHBhbmR0YWIgdHM9MiBzdz0yIHR3PTgwOiAqL1xuIiwiZ29vZy5wcm92aWRlKCdabGliLlJhd0luZmxhdGUnKTtcblxuZ29vZy5yZXF1aXJlKCdVU0VfVFlQRURBUlJBWScpO1xuZ29vZy5yZXF1aXJlKCdabGliLkh1ZmZtYW4nKTtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogQGRlZmluZSB7bnVtYmVyfSBidWZmZXIgYmxvY2sgc2l6ZS4gKi9cbnZhciBaTElCX1JBV19JTkZMQVRFX0JVRkZFUl9TSVpFID0gMHg4MDAwOyAvLyBbIDB4ODAwMCA+PSBaTElCX0JVRkZFUl9CTE9DS19TSVpFIF1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5nb29nLnNjb3BlKGZ1bmN0aW9uKCkge1xuXG52YXIgYnVpbGRIdWZmbWFuVGFibGUgPSBabGliLkh1ZmZtYW4uYnVpbGRIdWZmbWFuVGFibGU7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0geyEoVWludDhBcnJheXxBcnJheS48bnVtYmVyPil9IGlucHV0IGlucHV0IGJ1ZmZlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRfcGFyYW1zIG9wdGlvbiBwYXJhbWV0ZXIuXG4gKlxuICogb3B0X3BhcmFtcyDjga/ku6XkuIvjga7jg5fjg63jg5Hjg4bjgqPjgpLmjIflrprjgZnjgovkuovjgYzjgafjgY3jgb7jgZnjgIJcbiAqICAgLSBpbmRleDogaW5wdXQgYnVmZmVyIOOBriBkZWZsYXRlIOOCs+ODs+ODhuODiuOBrumWi+Wni+S9jee9ri5cbiAqICAgLSBibG9ja1NpemU6IOODkOODg+ODleOCoeOBruODluODreODg+OCr+OCteOCpOOCui5cbiAqICAgLSBidWZmZXJUeXBlOiBabGliLlJhd0luZmxhdGUuQnVmZmVyVHlwZSDjga7lgKTjgavjgojjgaPjgabjg5Djg4Pjg5XjgqHjga7nrqHnkIbmlrnms5XjgpLmjIflrprjgZnjgosuXG4gKiAgIC0gcmVzaXplOiDnorrkv53jgZfjgZ/jg5Djg4Pjg5XjgqHjgYzlrp/pmpvjga7lpKfjgY3jgZXjgojjgorlpKfjgY3jgYvjgaPjgZ/loLTlkIjjgavliIfjgoroqbDjgoHjgosuXG4gKi9cblpsaWIuUmF3SW5mbGF0ZSA9IGZ1bmN0aW9uKGlucHV0LCBvcHRfcGFyYW1zKSB7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gaW5mbGF0ZWQgYnVmZmVyICovXG4gIHRoaXMuYnVmZmVyO1xuICAvKiogQHR5cGUgeyFBcnJheS48KEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpPn0gKi9cbiAgdGhpcy5ibG9ja3MgPSBbXTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGJsb2NrIHNpemUuICovXG4gIHRoaXMuYnVmZmVyU2l6ZSA9IFpMSUJfUkFXX0lORkxBVEVfQlVGRkVSX1NJWkU7XG4gIC8qKiBAdHlwZSB7IW51bWJlcn0gdG90YWwgb3V0cHV0IGJ1ZmZlciBwb2ludGVyLiAqL1xuICB0aGlzLnRvdGFscG9zID0gMDtcbiAgLyoqIEB0eXBlIHshbnVtYmVyfSBpbnB1dCBidWZmZXIgcG9pbnRlci4gKi9cbiAgdGhpcy5pcCA9IDA7XG4gIC8qKiBAdHlwZSB7IW51bWJlcn0gYml0IHN0cmVhbSByZWFkZXIgYnVmZmVyLiAqL1xuICB0aGlzLmJpdHNidWYgPSAwO1xuICAvKiogQHR5cGUgeyFudW1iZXJ9IGJpdCBzdHJlYW0gcmVhZGVyIGJ1ZmZlciBzaXplLiAqL1xuICB0aGlzLmJpdHNidWZsZW4gPSAwO1xuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IGlucHV0IGJ1ZmZlci4gKi9cbiAgdGhpcy5pbnB1dCA9IFVTRV9UWVBFREFSUkFZID8gbmV3IFVpbnQ4QXJyYXkoaW5wdXQpIDogaW5wdXQ7XG4gIC8qKiBAdHlwZSB7IShVaW50OEFycmF5fEFycmF5LjxudW1iZXI+KX0gb3V0cHV0IGJ1ZmZlci4gKi9cbiAgdGhpcy5vdXRwdXQ7XG4gIC8qKiBAdHlwZSB7IW51bWJlcn0gb3V0cHV0IGJ1ZmZlciBwb2ludGVyLiAqL1xuICB0aGlzLm9wO1xuICAvKiogQHR5cGUge2Jvb2xlYW59IGlzIGZpbmFsIGJsb2NrIGZsYWcuICovXG4gIHRoaXMuYmZpbmFsID0gZmFsc2U7XG4gIC8qKiBAdHlwZSB7WmxpYi5SYXdJbmZsYXRlLkJ1ZmZlclR5cGV9IGJ1ZmZlciBtYW5hZ2VtZW50LiAqL1xuICB0aGlzLmJ1ZmZlclR5cGUgPSBabGliLlJhd0luZmxhdGUuQnVmZmVyVHlwZS5BREFQVElWRTtcbiAgLyoqIEB0eXBlIHtib29sZWFufSByZXNpemUgZmxhZyBmb3IgbWVtb3J5IHNpemUgb3B0aW1pemF0aW9uLiAqL1xuICB0aGlzLnJlc2l6ZSA9IGZhbHNlO1xuICAvKiogQHR5cGUge251bWJlcn0gcHJldmlvdXMgUkxFIHZhbHVlICovXG4gIHRoaXMucHJldjtcblxuICAvLyBvcHRpb24gcGFyYW1ldGVyc1xuICBpZiAob3B0X3BhcmFtcyB8fCAhKG9wdF9wYXJhbXMgPSB7fSkpIHtcbiAgICBpZiAob3B0X3BhcmFtc1snaW5kZXgnXSkge1xuICAgICAgdGhpcy5pcCA9IG9wdF9wYXJhbXNbJ2luZGV4J107XG4gICAgfVxuICAgIGlmIChvcHRfcGFyYW1zWydidWZmZXJTaXplJ10pIHtcbiAgICAgIHRoaXMuYnVmZmVyU2l6ZSA9IG9wdF9wYXJhbXNbJ2J1ZmZlclNpemUnXTtcbiAgICB9XG4gICAgaWYgKG9wdF9wYXJhbXNbJ2J1ZmZlclR5cGUnXSkge1xuICAgICAgdGhpcy5idWZmZXJUeXBlID0gb3B0X3BhcmFtc1snYnVmZmVyVHlwZSddO1xuICAgIH1cbiAgICBpZiAob3B0X3BhcmFtc1sncmVzaXplJ10pIHtcbiAgICAgIHRoaXMucmVzaXplID0gb3B0X3BhcmFtc1sncmVzaXplJ107XG4gICAgfVxuICB9XG5cbiAgLy8gaW5pdGlhbGl6ZVxuICBzd2l0Y2ggKHRoaXMuYnVmZmVyVHlwZSkge1xuICAgIGNhc2UgWmxpYi5SYXdJbmZsYXRlLkJ1ZmZlclR5cGUuQkxPQ0s6XG4gICAgICB0aGlzLm9wID0gWmxpYi5SYXdJbmZsYXRlLk1heEJhY2t3YXJkTGVuZ3RoO1xuICAgICAgdGhpcy5vdXRwdXQgPVxuICAgICAgICBuZXcgKFVTRV9UWVBFREFSUkFZID8gVWludDhBcnJheSA6IEFycmF5KShcbiAgICAgICAgICBabGliLlJhd0luZmxhdGUuTWF4QmFja3dhcmRMZW5ndGggK1xuICAgICAgICAgIHRoaXMuYnVmZmVyU2l6ZSArXG4gICAgICAgICAgWmxpYi5SYXdJbmZsYXRlLk1heENvcHlMZW5ndGhcbiAgICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgWmxpYi5SYXdJbmZsYXRlLkJ1ZmZlclR5cGUuQURBUFRJVkU6XG4gICAgICB0aGlzLm9wID0gMDtcbiAgICAgIHRoaXMub3V0cHV0ID0gbmV3IChVU0VfVFlQRURBUlJBWSA/IFVpbnQ4QXJyYXkgOiBBcnJheSkodGhpcy5idWZmZXJTaXplKTtcbiAgICAgIHRoaXMuZXhwYW5kQnVmZmVyID0gdGhpcy5leHBhbmRCdWZmZXJBZGFwdGl2ZTtcbiAgICAgIHRoaXMuY29uY2F0QnVmZmVyID0gdGhpcy5jb25jYXRCdWZmZXJEeW5hbWljO1xuICAgICAgdGhpcy5kZWNvZGVIdWZmbWFuID0gdGhpcy5kZWNvZGVIdWZmbWFuQWRhcHRpdmU7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGluZmxhdGUgbW9kZScpO1xuICB9XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cblpsaWIuUmF3SW5mbGF0ZS5CdWZmZXJUeXBlID0ge1xuICBCTE9DSzogMCxcbiAgQURBUFRJVkU6IDFcbn07XG5cbi8qKlxuICogZGVjb21wcmVzcy5cbiAqIEByZXR1cm4geyEoVWludDhBcnJheXxBcnJheS48bnVtYmVyPil9IGluZmxhdGVkIGJ1ZmZlci5cbiAqL1xuWmxpYi5SYXdJbmZsYXRlLnByb3RvdHlwZS5kZWNvbXByZXNzID0gZnVuY3Rpb24oKSB7XG4gIHdoaWxlICghdGhpcy5iZmluYWwpIHtcbiAgICB0aGlzLnBhcnNlQmxvY2soKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmNvbmNhdEJ1ZmZlcigpO1xufTtcblxuLyoqXG4gKiBAY29uc3RcbiAqIEB0eXBlIHtudW1iZXJ9IG1heCBiYWNrd2FyZCBsZW5ndGggZm9yIExaNzcuXG4gKi9cblpsaWIuUmF3SW5mbGF0ZS5NYXhCYWNrd2FyZExlbmd0aCA9IDMyNzY4O1xuXG4vKipcbiAqIEBjb25zdFxuICogQHR5cGUge251bWJlcn0gbWF4IGNvcHkgbGVuZ3RoIGZvciBMWjc3LlxuICovXG5abGliLlJhd0luZmxhdGUuTWF4Q29weUxlbmd0aCA9IDI1ODtcblxuLyoqXG4gKiBodWZmbWFuIG9yZGVyXG4gKiBAY29uc3RcbiAqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfVxuICovXG5abGliLlJhd0luZmxhdGUuT3JkZXIgPSAoZnVuY3Rpb24odGFibGUpIHtcbiAgcmV0dXJuIFVTRV9UWVBFREFSUkFZID8gbmV3IFVpbnQxNkFycmF5KHRhYmxlKSA6IHRhYmxlO1xufSkoWzE2LCAxNywgMTgsIDAsIDgsIDcsIDksIDYsIDEwLCA1LCAxMSwgNCwgMTIsIDMsIDEzLCAyLCAxNCwgMSwgMTVdKTtcblxuLyoqXG4gKiBodWZmbWFuIGxlbmd0aCBjb2RlIHRhYmxlLlxuICogQGNvbnN0XG4gKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50MTZBcnJheSl9XG4gKi9cblpsaWIuUmF3SW5mbGF0ZS5MZW5ndGhDb2RlVGFibGUgPSAoZnVuY3Rpb24odGFibGUpIHtcbiAgcmV0dXJuIFVTRV9UWVBFREFSUkFZID8gbmV3IFVpbnQxNkFycmF5KHRhYmxlKSA6IHRhYmxlO1xufSkoW1xuICAweDAwMDMsIDB4MDAwNCwgMHgwMDA1LCAweDAwMDYsIDB4MDAwNywgMHgwMDA4LCAweDAwMDksIDB4MDAwYSwgMHgwMDBiLFxuICAweDAwMGQsIDB4MDAwZiwgMHgwMDExLCAweDAwMTMsIDB4MDAxNywgMHgwMDFiLCAweDAwMWYsIDB4MDAyMywgMHgwMDJiLFxuICAweDAwMzMsIDB4MDAzYiwgMHgwMDQzLCAweDAwNTMsIDB4MDA2MywgMHgwMDczLCAweDAwODMsIDB4MDBhMywgMHgwMGMzLFxuICAweDAwZTMsIDB4MDEwMiwgMHgwMTAyLCAweDAxMDJcbl0pO1xuXG4vKipcbiAqIGh1ZmZtYW4gbGVuZ3RoIGV4dHJhLWJpdHMgdGFibGUuXG4gKiBAY29uc3RcbiAqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfVxuICovXG5abGliLlJhd0luZmxhdGUuTGVuZ3RoRXh0cmFUYWJsZSA9IChmdW5jdGlvbih0YWJsZSkge1xuICByZXR1cm4gVVNFX1RZUEVEQVJSQVkgPyBuZXcgVWludDhBcnJheSh0YWJsZSkgOiB0YWJsZTtcbn0pKFtcbiAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMiwgMiwgMiwgMiwgMywgMywgMywgMywgNCwgNCwgNCwgNCwgNSwgNSxcbiAgNSwgNSwgMCwgMCwgMFxuXSk7XG5cbi8qKlxuICogaHVmZm1hbiBkaXN0IGNvZGUgdGFibGUuXG4gKiBAY29uc3RcbiAqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQxNkFycmF5KX1cbiAqL1xuWmxpYi5SYXdJbmZsYXRlLkRpc3RDb2RlVGFibGUgPSAoZnVuY3Rpb24odGFibGUpIHtcbiAgcmV0dXJuIFVTRV9UWVBFREFSUkFZID8gbmV3IFVpbnQxNkFycmF5KHRhYmxlKSA6IHRhYmxlO1xufSkoW1xuICAweDAwMDEsIDB4MDAwMiwgMHgwMDAzLCAweDAwMDQsIDB4MDAwNSwgMHgwMDA3LCAweDAwMDksIDB4MDAwZCwgMHgwMDExLFxuICAweDAwMTksIDB4MDAyMSwgMHgwMDMxLCAweDAwNDEsIDB4MDA2MSwgMHgwMDgxLCAweDAwYzEsIDB4MDEwMSwgMHgwMTgxLFxuICAweDAyMDEsIDB4MDMwMSwgMHgwNDAxLCAweDA2MDEsIDB4MDgwMSwgMHgwYzAxLCAweDEwMDEsIDB4MTgwMSwgMHgyMDAxLFxuICAweDMwMDEsIDB4NDAwMSwgMHg2MDAxXG5dKTtcblxuLyoqXG4gKiBodWZmbWFuIGRpc3QgZXh0cmEtYml0cyB0YWJsZS5cbiAqIEBjb25zdFxuICogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9XG4gKi9cblpsaWIuUmF3SW5mbGF0ZS5EaXN0RXh0cmFUYWJsZSA9IChmdW5jdGlvbih0YWJsZSkge1xuICByZXR1cm4gVVNFX1RZUEVEQVJSQVkgPyBuZXcgVWludDhBcnJheSh0YWJsZSkgOiB0YWJsZTtcbn0pKFtcbiAgMCwgMCwgMCwgMCwgMSwgMSwgMiwgMiwgMywgMywgNCwgNCwgNSwgNSwgNiwgNiwgNywgNywgOCwgOCwgOSwgOSwgMTAsIDEwLCAxMSxcbiAgMTEsIDEyLCAxMiwgMTMsIDEzXG5dKTtcblxuLyoqXG4gKiBmaXhlZCBodWZmbWFuIGxlbmd0aCBjb2RlIHRhYmxlXG4gKiBAY29uc3RcbiAqIEB0eXBlIHshQXJyYXl9XG4gKi9cblpsaWIuUmF3SW5mbGF0ZS5GaXhlZExpdGVyYWxMZW5ndGhUYWJsZSA9IChmdW5jdGlvbih0YWJsZSkge1xuICByZXR1cm4gdGFibGU7XG59KSgoZnVuY3Rpb24oKSB7XG4gIHZhciBsZW5ndGhzID0gbmV3IChVU0VfVFlQRURBUlJBWSA/IFVpbnQ4QXJyYXkgOiBBcnJheSkoMjg4KTtcbiAgdmFyIGksIGlsO1xuXG4gIGZvciAoaSA9IDAsIGlsID0gbGVuZ3Rocy5sZW5ndGg7IGkgPCBpbDsgKytpKSB7XG4gICAgbGVuZ3Roc1tpXSA9XG4gICAgICAoaSA8PSAxNDMpID8gOCA6XG4gICAgICAoaSA8PSAyNTUpID8gOSA6XG4gICAgICAoaSA8PSAyNzkpID8gNyA6XG4gICAgICA4O1xuICB9XG5cbiAgcmV0dXJuIGJ1aWxkSHVmZm1hblRhYmxlKGxlbmd0aHMpO1xufSkoKSk7XG5cbi8qKlxuICogZml4ZWQgaHVmZm1hbiBkaXN0YW5jZSBjb2RlIHRhYmxlXG4gKiBAY29uc3RcbiAqIEB0eXBlIHshQXJyYXl9XG4gKi9cblpsaWIuUmF3SW5mbGF0ZS5GaXhlZERpc3RhbmNlVGFibGUgPSAoZnVuY3Rpb24odGFibGUpIHtcbiAgcmV0dXJuIHRhYmxlO1xufSkoKGZ1bmN0aW9uKCkge1xuICB2YXIgbGVuZ3RocyA9IG5ldyAoVVNFX1RZUEVEQVJSQVkgPyBVaW50OEFycmF5IDogQXJyYXkpKDMwKTtcbiAgdmFyIGksIGlsO1xuXG4gIGZvciAoaSA9IDAsIGlsID0gbGVuZ3Rocy5sZW5ndGg7IGkgPCBpbDsgKytpKSB7XG4gICAgbGVuZ3Roc1tpXSA9IDU7XG4gIH1cblxuICByZXR1cm4gYnVpbGRIdWZmbWFuVGFibGUobGVuZ3Rocyk7XG59KSgpKTtcblxuLyoqXG4gKiBwYXJzZSBkZWZsYXRlZCBibG9jay5cbiAqL1xuWmxpYi5SYXdJbmZsYXRlLnByb3RvdHlwZS5wYXJzZUJsb2NrID0gZnVuY3Rpb24oKSB7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBoZWFkZXIgKi9cbiAgdmFyIGhkciA9IHRoaXMucmVhZEJpdHMoMyk7XG5cbiAgLy8gQkZJTkFMXG4gIGlmIChoZHIgJiAweDEpIHtcbiAgICB0aGlzLmJmaW5hbCA9IHRydWU7XG4gIH1cblxuICAvLyBCVFlQRVxuICBoZHIgPj4+PSAxO1xuICBzd2l0Y2ggKGhkcikge1xuICAgIC8vIHVuY29tcHJlc3NlZFxuICAgIGNhc2UgMDpcbiAgICAgIHRoaXMucGFyc2VVbmNvbXByZXNzZWRCbG9jaygpO1xuICAgICAgYnJlYWs7XG4gICAgLy8gZml4ZWQgaHVmZm1hblxuICAgIGNhc2UgMTpcbiAgICAgIHRoaXMucGFyc2VGaXhlZEh1ZmZtYW5CbG9jaygpO1xuICAgICAgYnJlYWs7XG4gICAgLy8gZHluYW1pYyBodWZmbWFuXG4gICAgY2FzZSAyOlxuICAgICAgdGhpcy5wYXJzZUR5bmFtaWNIdWZmbWFuQmxvY2soKTtcbiAgICAgIGJyZWFrO1xuICAgIC8vIHJlc2VydmVkIG9yIG90aGVyXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBCVFlQRTogJyArIGhkcik7XG4gIH1cbn07XG5cbi8qKlxuICogcmVhZCBpbmZsYXRlIGJpdHNcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGggYml0cyBsZW5ndGguXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHJlYWQgYml0cy5cbiAqL1xuWmxpYi5SYXdJbmZsYXRlLnByb3RvdHlwZS5yZWFkQml0cyA9IGZ1bmN0aW9uKGxlbmd0aCkge1xuICB2YXIgYml0c2J1ZiA9IHRoaXMuYml0c2J1ZjtcbiAgdmFyIGJpdHNidWZsZW4gPSB0aGlzLmJpdHNidWZsZW47XG4gIHZhciBpbnB1dCA9IHRoaXMuaW5wdXQ7XG4gIHZhciBpcCA9IHRoaXMuaXA7XG5cbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGlucHV0IGFuZCBvdXRwdXQgYnl0ZS4gKi9cbiAgdmFyIG9jdGV0O1xuXG4gIC8vIG5vdCBlbm91Z2ggYnVmZmVyXG4gIHdoaWxlIChiaXRzYnVmbGVuIDwgbGVuZ3RoKSB7XG4gICAgLy8gaW5wdXQgYnl0ZVxuICAgIGlmIChpcCA+PSBpbnB1dExlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnB1dCBidWZmZXIgaXMgYnJva2VuJyk7XG4gICAgfVxuXG4gICAgLy8gY29uY2F0IG9jdGV0XG4gICAgYml0c2J1ZiB8PSBpbnB1dFtpcCsrXSA8PCBiaXRzYnVmbGVuO1xuICAgIGJpdHNidWZsZW4gKz0gODtcbiAgfVxuXG4gIC8vIG91dHB1dCBieXRlXG4gIG9jdGV0ID0gYml0c2J1ZiAmIC8qIE1BU0sgKi8gKCgxIDw8IGxlbmd0aCkgLSAxKTtcbiAgYml0c2J1ZiA+Pj49IGxlbmd0aDtcbiAgYml0c2J1ZmxlbiAtPSBsZW5ndGg7XG5cbiAgdGhpcy5iaXRzYnVmID0gYml0c2J1ZjtcbiAgdGhpcy5iaXRzYnVmbGVuID0gYml0c2J1ZmxlbjtcbiAgdGhpcy5pcCA9IGlwO1xuXG4gIHJldHVybiBvY3RldDtcbn07XG5cbi8qKlxuICogcmVhZCBodWZmbWFuIGNvZGUgdXNpbmcgdGFibGVcbiAqIEBwYXJhbSB7QXJyYXl9IHRhYmxlIGh1ZmZtYW4gY29kZSB0YWJsZS5cbiAqIEByZXR1cm4ge251bWJlcn0gaHVmZm1hbiBjb2RlLlxuICovXG5abGliLlJhd0luZmxhdGUucHJvdG90eXBlLnJlYWRDb2RlQnlUYWJsZSA9IGZ1bmN0aW9uKHRhYmxlKSB7XG4gIHZhciBiaXRzYnVmID0gdGhpcy5iaXRzYnVmO1xuICB2YXIgYml0c2J1ZmxlbiA9IHRoaXMuYml0c2J1ZmxlbjtcbiAgdmFyIGlucHV0ID0gdGhpcy5pbnB1dDtcbiAgdmFyIGlwID0gdGhpcy5pcDtcblxuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IGh1ZmZtYW4gY29kZSB0YWJsZSAqL1xuICB2YXIgY29kZVRhYmxlID0gdGFibGVbMF07XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgbWF4Q29kZUxlbmd0aCA9IHRhYmxlWzFdO1xuICAvKiogQHR5cGUge251bWJlcn0gY29kZSBsZW5ndGggJiBjb2RlICgxNmJpdCwgMTZiaXQpICovXG4gIHZhciBjb2RlV2l0aExlbmd0aDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGNvZGUgYml0cyBsZW5ndGggKi9cbiAgdmFyIGNvZGVMZW5ndGg7XG5cbiAgLy8gbm90IGVub3VnaCBidWZmZXJcbiAgd2hpbGUgKGJpdHNidWZsZW4gPCBtYXhDb2RlTGVuZ3RoKSB7XG4gICAgaWYgKGlwID49IGlucHV0TGVuZ3RoKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgYml0c2J1ZiB8PSBpbnB1dFtpcCsrXSA8PCBiaXRzYnVmbGVuO1xuICAgIGJpdHNidWZsZW4gKz0gODtcbiAgfVxuXG4gIC8vIHJlYWQgbWF4IGxlbmd0aFxuICBjb2RlV2l0aExlbmd0aCA9IGNvZGVUYWJsZVtiaXRzYnVmICYgKCgxIDw8IG1heENvZGVMZW5ndGgpIC0gMSldO1xuICBjb2RlTGVuZ3RoID0gY29kZVdpdGhMZW5ndGggPj4+IDE2O1xuXG4gIHRoaXMuYml0c2J1ZiA9IGJpdHNidWYgPj4gY29kZUxlbmd0aDtcbiAgdGhpcy5iaXRzYnVmbGVuID0gYml0c2J1ZmxlbiAtIGNvZGVMZW5ndGg7XG4gIHRoaXMuaXAgPSBpcDtcblxuICByZXR1cm4gY29kZVdpdGhMZW5ndGggJiAweGZmZmY7XG59O1xuXG4vKipcbiAqIHBhcnNlIHVuY29tcHJlc3NlZCBibG9jay5cbiAqL1xuWmxpYi5SYXdJbmZsYXRlLnByb3RvdHlwZS5wYXJzZVVuY29tcHJlc3NlZEJsb2NrID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpbnB1dCA9IHRoaXMuaW5wdXQ7XG4gIHZhciBpcCA9IHRoaXMuaXA7XG4gIHZhciBvdXRwdXQgPSB0aGlzLm91dHB1dDtcbiAgdmFyIG9wID0gdGhpcy5vcDtcblxuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAvKiogQHR5cGUge251bWJlcn0gYmxvY2sgbGVuZ3RoICovXG4gIHZhciBsZW47XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBudW1iZXIgZm9yIGNoZWNrIGJsb2NrIGxlbmd0aCAqL1xuICB2YXIgbmxlbjtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IG91dHB1dCBidWZmZXIgbGVuZ3RoICovXG4gIHZhciBvbGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGNvcHkgY291bnRlciAqL1xuICB2YXIgcHJlQ29weTtcblxuICAvLyBza2lwIGJ1ZmZlcmVkIGhlYWRlciBiaXRzXG4gIHRoaXMuYml0c2J1ZiA9IDA7XG4gIHRoaXMuYml0c2J1ZmxlbiA9IDA7XG5cbiAgLy8gbGVuXG4gIGlmIChpcCArIDEgPj0gaW5wdXRMZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgdW5jb21wcmVzc2VkIGJsb2NrIGhlYWRlcjogTEVOJyk7XG4gIH1cbiAgbGVuID0gaW5wdXRbaXArK10gfCAoaW5wdXRbaXArK10gPDwgOCk7XG5cbiAgLy8gbmxlblxuICBpZiAoaXAgKyAxID49IGlucHV0TGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHVuY29tcHJlc3NlZCBibG9jayBoZWFkZXI6IE5MRU4nKTtcbiAgfVxuICBubGVuID0gaW5wdXRbaXArK10gfCAoaW5wdXRbaXArK10gPDwgOCk7XG5cbiAgLy8gY2hlY2sgbGVuICYgbmxlblxuICBpZiAobGVuID09PSB+bmxlbikge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB1bmNvbXByZXNzZWQgYmxvY2sgaGVhZGVyOiBsZW5ndGggdmVyaWZ5Jyk7XG4gIH1cblxuICAvLyBjaGVjayBzaXplXG4gIGlmIChpcCArIGxlbiA+IGlucHV0Lmxlbmd0aCkgeyB0aHJvdyBuZXcgRXJyb3IoJ2lucHV0IGJ1ZmZlciBpcyBicm9rZW4nKTsgfVxuXG4gIC8vIGV4cGFuZCBidWZmZXJcbiAgc3dpdGNoICh0aGlzLmJ1ZmZlclR5cGUpIHtcbiAgICBjYXNlIFpsaWIuUmF3SW5mbGF0ZS5CdWZmZXJUeXBlLkJMT0NLOlxuICAgICAgLy8gcHJlIGNvcHlcbiAgICAgIHdoaWxlIChvcCArIGxlbiA+IG91dHB1dC5sZW5ndGgpIHtcbiAgICAgICAgcHJlQ29weSA9IG9sZW5ndGggLSBvcDtcbiAgICAgICAgbGVuIC09IHByZUNvcHk7XG4gICAgICAgIGlmIChVU0VfVFlQRURBUlJBWSkge1xuICAgICAgICAgIG91dHB1dC5zZXQoaW5wdXQuc3ViYXJyYXkoaXAsIGlwICsgcHJlQ29weSksIG9wKTtcbiAgICAgICAgICBvcCArPSBwcmVDb3B5O1xuICAgICAgICAgIGlwICs9IHByZUNvcHk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2hpbGUgKHByZUNvcHktLSkge1xuICAgICAgICAgICAgb3V0cHV0W29wKytdID0gaW5wdXRbaXArK107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub3AgPSBvcDtcbiAgICAgICAgb3V0cHV0ID0gdGhpcy5leHBhbmRCdWZmZXIoKTtcbiAgICAgICAgb3AgPSB0aGlzLm9wO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBabGliLlJhd0luZmxhdGUuQnVmZmVyVHlwZS5BREFQVElWRTpcbiAgICAgIHdoaWxlIChvcCArIGxlbiA+IG91dHB1dC5sZW5ndGgpIHtcbiAgICAgICAgb3V0cHV0ID0gdGhpcy5leHBhbmRCdWZmZXIoe2ZpeFJhdGlvOiAyfSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGluZmxhdGUgbW9kZScpO1xuICB9XG5cbiAgLy8gY29weVxuICBpZiAoVVNFX1RZUEVEQVJSQVkpIHtcbiAgICBvdXRwdXQuc2V0KGlucHV0LnN1YmFycmF5KGlwLCBpcCArIGxlbiksIG9wKTtcbiAgICBvcCArPSBsZW47XG4gICAgaXAgKz0gbGVuO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChsZW4tLSkge1xuICAgICAgb3V0cHV0W29wKytdID0gaW5wdXRbaXArK107XG4gICAgfVxuICB9XG5cbiAgdGhpcy5pcCA9IGlwO1xuICB0aGlzLm9wID0gb3A7XG4gIHRoaXMub3V0cHV0ID0gb3V0cHV0O1xufTtcblxuLyoqXG4gKiBwYXJzZSBmaXhlZCBodWZmbWFuIGJsb2NrLlxuICovXG5abGliLlJhd0luZmxhdGUucHJvdG90eXBlLnBhcnNlRml4ZWRIdWZmbWFuQmxvY2sgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5kZWNvZGVIdWZmbWFuKFxuICAgIFpsaWIuUmF3SW5mbGF0ZS5GaXhlZExpdGVyYWxMZW5ndGhUYWJsZSxcbiAgICBabGliLlJhd0luZmxhdGUuRml4ZWREaXN0YW5jZVRhYmxlXG4gICk7XG59O1xuXG4vKipcbiAqIHBhcnNlIGR5bmFtaWMgaHVmZm1hbiBibG9jay5cbiAqL1xuWmxpYi5SYXdJbmZsYXRlLnByb3RvdHlwZS5wYXJzZUR5bmFtaWNIdWZmbWFuQmxvY2sgPSBmdW5jdGlvbigpIHtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IG51bWJlciBvZiBsaXRlcmFsIGFuZCBsZW5ndGggY29kZXMuICovXG4gIHZhciBobGl0ID0gdGhpcy5yZWFkQml0cyg1KSArIDI1NztcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IG51bWJlciBvZiBkaXN0YW5jZSBjb2Rlcy4gKi9cbiAgdmFyIGhkaXN0ID0gdGhpcy5yZWFkQml0cyg1KSArIDE7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBudW1iZXIgb2YgY29kZSBsZW5ndGhzLiAqL1xuICB2YXIgaGNsZW4gPSB0aGlzLnJlYWRCaXRzKDQpICsgNDtcbiAgLyoqIEB0eXBlIHshKFVpbnQ4QXJyYXl8QXJyYXkuPG51bWJlcj4pfSBjb2RlIGxlbmd0aHMuICovXG4gIHZhciBjb2RlTGVuZ3RocyA9XG4gICAgbmV3IChVU0VfVFlQRURBUlJBWSA/IFVpbnQ4QXJyYXkgOiBBcnJheSkoWmxpYi5SYXdJbmZsYXRlLk9yZGVyLmxlbmd0aCk7XG4gIC8qKiBAdHlwZSB7IUFycmF5fSBjb2RlIGxlbmd0aHMgdGFibGUuICovXG4gIHZhciBjb2RlTGVuZ3Roc1RhYmxlO1xuICAvKiogQHR5cGUgeyEoVWludDhBcnJheXxBcnJheS48bnVtYmVyPil9IGxpdGVyYWwgYW5kIGxlbmd0aCBjb2RlIGxlbmd0aHMuICovXG4gIHZhciBsaXRsZW5MZW5ndGhzO1xuICAvKiogQHR5cGUgeyEoVWludDhBcnJheXxBcnJheS48bnVtYmVyPil9IGRpc3RhbmNlIGNvZGUgbGVuZ3Rocy4gKi9cbiAgdmFyIGRpc3RMZW5ndGhzO1xuICAvKiogQHR5cGUge251bWJlcn0gbG9vcCBjb3VudGVyLiAqL1xuICB2YXIgaTtcblxuICAvLyBkZWNvZGUgY29kZSBsZW5ndGhzXG4gIGZvciAoaSA9IDA7IGkgPCBoY2xlbjsgKytpKSB7XG4gICAgY29kZUxlbmd0aHNbWmxpYi5SYXdJbmZsYXRlLk9yZGVyW2ldXSA9IHRoaXMucmVhZEJpdHMoMyk7XG4gIH1cbiAgaWYgKCFVU0VfVFlQRURBUlJBWSkge1xuICAgIGZvciAoaSA9IGhjbGVuLCBoY2xlbiA9IGNvZGVMZW5ndGhzLmxlbmd0aDsgaSA8IGhjbGVuOyArK2kpIHtcbiAgICAgIGNvZGVMZW5ndGhzW1psaWIuUmF3SW5mbGF0ZS5PcmRlcltpXV0gPSAwO1xuICAgIH1cbiAgfVxuICBjb2RlTGVuZ3Roc1RhYmxlID0gYnVpbGRIdWZmbWFuVGFibGUoY29kZUxlbmd0aHMpO1xuXG4gIC8qKlxuICAgKiBkZWNvZGUgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtudW1iZXJ9IG51bSBudW1iZXIgb2YgbGVuZ3Rocy5cbiAgICogQHBhcmFtIHshQXJyYXl9IHRhYmxlIGNvZGUgbGVuZ3RocyB0YWJsZS5cbiAgICogQHBhcmFtIHshKFVpbnQ4QXJyYXl8QXJyYXkuPG51bWJlcj4pfSBsZW5ndGhzIGNvZGUgbGVuZ3RocyBidWZmZXIuXG4gICAqIEByZXR1cm4geyEoVWludDhBcnJheXxBcnJheS48bnVtYmVyPil9IGNvZGUgbGVuZ3RocyBidWZmZXIuXG4gICAqL1xuICBmdW5jdGlvbiBkZWNvZGUobnVtLCB0YWJsZSwgbGVuZ3Rocykge1xuICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgIHZhciBjb2RlO1xuICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgIHZhciBwcmV2ID0gdGhpcy5wcmV2O1xuICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgIHZhciByZXBlYXQ7XG4gICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gICAgdmFyIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbnVtOykge1xuICAgICAgY29kZSA9IHRoaXMucmVhZENvZGVCeVRhYmxlKHRhYmxlKTtcbiAgICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgIHJlcGVhdCA9IDMgKyB0aGlzLnJlYWRCaXRzKDIpO1xuICAgICAgICAgIHdoaWxlIChyZXBlYXQtLSkgeyBsZW5ndGhzW2krK10gPSBwcmV2OyB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgcmVwZWF0ID0gMyArIHRoaXMucmVhZEJpdHMoMyk7XG4gICAgICAgICAgd2hpbGUgKHJlcGVhdC0tKSB7IGxlbmd0aHNbaSsrXSA9IDA7IH1cbiAgICAgICAgICBwcmV2ID0gMDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICByZXBlYXQgPSAxMSArIHRoaXMucmVhZEJpdHMoNyk7XG4gICAgICAgICAgd2hpbGUgKHJlcGVhdC0tKSB7IGxlbmd0aHNbaSsrXSA9IDA7IH1cbiAgICAgICAgICBwcmV2ID0gMDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBsZW5ndGhzW2krK10gPSBjb2RlO1xuICAgICAgICAgIHByZXYgPSBjb2RlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucHJldiA9IHByZXY7XG5cbiAgICByZXR1cm4gbGVuZ3RocztcbiAgfVxuXG4gIC8vIGxpdGVyYWwgYW5kIGxlbmd0aCBjb2RlXG4gIGxpdGxlbkxlbmd0aHMgPSBuZXcgKFVTRV9UWVBFREFSUkFZID8gVWludDhBcnJheSA6IEFycmF5KShobGl0KTtcblxuICAvLyBkaXN0YW5jZSBjb2RlXG4gIGRpc3RMZW5ndGhzID0gbmV3IChVU0VfVFlQRURBUlJBWSA/IFVpbnQ4QXJyYXkgOiBBcnJheSkoaGRpc3QpO1xuXG4gIHRoaXMucHJldiA9IDA7XG4gIHRoaXMuZGVjb2RlSHVmZm1hbihcbiAgICBidWlsZEh1ZmZtYW5UYWJsZShkZWNvZGUuY2FsbCh0aGlzLCBobGl0LCBjb2RlTGVuZ3Roc1RhYmxlLCBsaXRsZW5MZW5ndGhzKSksXG4gICAgYnVpbGRIdWZmbWFuVGFibGUoZGVjb2RlLmNhbGwodGhpcywgaGRpc3QsIGNvZGVMZW5ndGhzVGFibGUsIGRpc3RMZW5ndGhzKSlcbiAgKTtcbn07XG5cbi8qKlxuICogZGVjb2RlIGh1ZmZtYW4gY29kZVxuICogQHBhcmFtIHshQXJyYXl9IGxpdGxlbiBsaXRlcmFsIGFuZCBsZW5ndGggY29kZSB0YWJsZS5cbiAqIEBwYXJhbSB7IUFycmF5fSBkaXN0IGRpc3RpbmF0aW9uIGNvZGUgdGFibGUuXG4gKi9cblpsaWIuUmF3SW5mbGF0ZS5wcm90b3R5cGUuZGVjb2RlSHVmZm1hbiA9IGZ1bmN0aW9uKGxpdGxlbiwgZGlzdCkge1xuICB2YXIgb3V0cHV0ID0gdGhpcy5vdXRwdXQ7XG4gIHZhciBvcCA9IHRoaXMub3A7XG5cbiAgdGhpcy5jdXJyZW50TGl0bGVuVGFibGUgPSBsaXRsZW47XG5cbiAgLyoqIEB0eXBlIHtudW1iZXJ9IG91dHB1dCBwb3NpdGlvbiBsaW1pdC4gKi9cbiAgdmFyIG9sZW5ndGggPSBvdXRwdXQubGVuZ3RoIC0gWmxpYi5SYXdJbmZsYXRlLk1heENvcHlMZW5ndGg7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBodWZmbWFuIGNvZGUuICovXG4gIHZhciBjb2RlO1xuICAvKiogQHR5cGUge251bWJlcn0gdGFibGUgaW5kZXguICovXG4gIHZhciB0aTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGh1ZmZtYW4gY29kZSBkaXN0aW5hdGlvbi4gKi9cbiAgdmFyIGNvZGVEaXN0O1xuICAvKiogQHR5cGUge251bWJlcn0gaHVmZm1hbiBjb2RlIGxlbmd0aC4gKi9cbiAgdmFyIGNvZGVMZW5ndGg7XG5cbiAgd2hpbGUgKChjb2RlID0gdGhpcy5yZWFkQ29kZUJ5VGFibGUobGl0bGVuKSkgIT09IDI1Nikge1xuICAgIC8vIGxpdGVyYWxcbiAgICBpZiAoY29kZSA8IDI1Nikge1xuICAgICAgaWYgKG9wID49IG9sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5vcCA9IG9wO1xuICAgICAgICBvdXRwdXQgPSB0aGlzLmV4cGFuZEJ1ZmZlcigpO1xuICAgICAgICBvcCA9IHRoaXMub3A7XG4gICAgICB9XG4gICAgICBvdXRwdXRbb3ArK10gPSBjb2RlO1xuXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBsZW5ndGggY29kZVxuICAgIHRpID0gY29kZSAtIDI1NztcbiAgICBjb2RlTGVuZ3RoID0gWmxpYi5SYXdJbmZsYXRlLkxlbmd0aENvZGVUYWJsZVt0aV07XG4gICAgaWYgKFpsaWIuUmF3SW5mbGF0ZS5MZW5ndGhFeHRyYVRhYmxlW3RpXSA+IDApIHtcbiAgICAgIGNvZGVMZW5ndGggKz0gdGhpcy5yZWFkQml0cyhabGliLlJhd0luZmxhdGUuTGVuZ3RoRXh0cmFUYWJsZVt0aV0pO1xuICAgIH1cblxuICAgIC8vIGRpc3QgY29kZVxuICAgIGNvZGUgPSB0aGlzLnJlYWRDb2RlQnlUYWJsZShkaXN0KTtcbiAgICBjb2RlRGlzdCA9IFpsaWIuUmF3SW5mbGF0ZS5EaXN0Q29kZVRhYmxlW2NvZGVdO1xuICAgIGlmIChabGliLlJhd0luZmxhdGUuRGlzdEV4dHJhVGFibGVbY29kZV0gPiAwKSB7XG4gICAgICBjb2RlRGlzdCArPSB0aGlzLnJlYWRCaXRzKFpsaWIuUmF3SW5mbGF0ZS5EaXN0RXh0cmFUYWJsZVtjb2RlXSk7XG4gICAgfVxuXG4gICAgLy8gbHo3NyBkZWNvZGVcbiAgICBpZiAob3AgPj0gb2xlbmd0aCkge1xuICAgICAgdGhpcy5vcCA9IG9wO1xuICAgICAgb3V0cHV0ID0gdGhpcy5leHBhbmRCdWZmZXIoKTtcbiAgICAgIG9wID0gdGhpcy5vcDtcbiAgICB9XG4gICAgd2hpbGUgKGNvZGVMZW5ndGgtLSkge1xuICAgICAgb3V0cHV0W29wXSA9IG91dHB1dFsob3ArKykgLSBjb2RlRGlzdF07XG4gICAgfVxuICB9XG5cbiAgd2hpbGUgKHRoaXMuYml0c2J1ZmxlbiA+PSA4KSB7XG4gICAgdGhpcy5iaXRzYnVmbGVuIC09IDg7XG4gICAgdGhpcy5pcC0tO1xuICB9XG4gIHRoaXMub3AgPSBvcDtcbn07XG5cbi8qKlxuICogZGVjb2RlIGh1ZmZtYW4gY29kZSAoYWRhcHRpdmUpXG4gKiBAcGFyYW0geyFBcnJheX0gbGl0bGVuIGxpdGVyYWwgYW5kIGxlbmd0aCBjb2RlIHRhYmxlLlxuICogQHBhcmFtIHshQXJyYXl9IGRpc3QgZGlzdGluYXRpb24gY29kZSB0YWJsZS5cbiAqL1xuWmxpYi5SYXdJbmZsYXRlLnByb3RvdHlwZS5kZWNvZGVIdWZmbWFuQWRhcHRpdmUgPSBmdW5jdGlvbihsaXRsZW4sIGRpc3QpIHtcbiAgdmFyIG91dHB1dCA9IHRoaXMub3V0cHV0O1xuICB2YXIgb3AgPSB0aGlzLm9wO1xuXG4gIHRoaXMuY3VycmVudExpdGxlblRhYmxlID0gbGl0bGVuO1xuXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBvdXRwdXQgcG9zaXRpb24gbGltaXQuICovXG4gIHZhciBvbGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGh1ZmZtYW4gY29kZS4gKi9cbiAgdmFyIGNvZGU7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSB0YWJsZSBpbmRleC4gKi9cbiAgdmFyIHRpO1xuICAvKiogQHR5cGUge251bWJlcn0gaHVmZm1hbiBjb2RlIGRpc3RpbmF0aW9uLiAqL1xuICB2YXIgY29kZURpc3Q7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBodWZmbWFuIGNvZGUgbGVuZ3RoLiAqL1xuICB2YXIgY29kZUxlbmd0aDtcblxuICB3aGlsZSAoKGNvZGUgPSB0aGlzLnJlYWRDb2RlQnlUYWJsZShsaXRsZW4pKSAhPT0gMjU2KSB7XG4gICAgLy8gbGl0ZXJhbFxuICAgIGlmIChjb2RlIDwgMjU2KSB7XG4gICAgICBpZiAob3AgPj0gb2xlbmd0aCkge1xuICAgICAgICBvdXRwdXQgPSB0aGlzLmV4cGFuZEJ1ZmZlcigpO1xuICAgICAgICBvbGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIG91dHB1dFtvcCsrXSA9IGNvZGU7XG5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGxlbmd0aCBjb2RlXG4gICAgdGkgPSBjb2RlIC0gMjU3O1xuICAgIGNvZGVMZW5ndGggPSBabGliLlJhd0luZmxhdGUuTGVuZ3RoQ29kZVRhYmxlW3RpXTtcbiAgICBpZiAoWmxpYi5SYXdJbmZsYXRlLkxlbmd0aEV4dHJhVGFibGVbdGldID4gMCkge1xuICAgICAgY29kZUxlbmd0aCArPSB0aGlzLnJlYWRCaXRzKFpsaWIuUmF3SW5mbGF0ZS5MZW5ndGhFeHRyYVRhYmxlW3RpXSk7XG4gICAgfVxuXG4gICAgLy8gZGlzdCBjb2RlXG4gICAgY29kZSA9IHRoaXMucmVhZENvZGVCeVRhYmxlKGRpc3QpO1xuICAgIGNvZGVEaXN0ID0gWmxpYi5SYXdJbmZsYXRlLkRpc3RDb2RlVGFibGVbY29kZV07XG4gICAgaWYgKFpsaWIuUmF3SW5mbGF0ZS5EaXN0RXh0cmFUYWJsZVtjb2RlXSA+IDApIHtcbiAgICAgIGNvZGVEaXN0ICs9IHRoaXMucmVhZEJpdHMoWmxpYi5SYXdJbmZsYXRlLkRpc3RFeHRyYVRhYmxlW2NvZGVdKTtcbiAgICB9XG5cbiAgICAvLyBsejc3IGRlY29kZVxuICAgIGlmIChvcCArIGNvZGVMZW5ndGggPiBvbGVuZ3RoKSB7XG4gICAgICBvdXRwdXQgPSB0aGlzLmV4cGFuZEJ1ZmZlcigpO1xuICAgICAgb2xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG4gICAgfVxuICAgIHdoaWxlIChjb2RlTGVuZ3RoLS0pIHtcbiAgICAgIG91dHB1dFtvcF0gPSBvdXRwdXRbKG9wKyspIC0gY29kZURpc3RdO1xuICAgIH1cbiAgfVxuXG4gIHdoaWxlICh0aGlzLmJpdHNidWZsZW4gPj0gOCkge1xuICAgIHRoaXMuYml0c2J1ZmxlbiAtPSA4O1xuICAgIHRoaXMuaXAtLTtcbiAgfVxuICB0aGlzLm9wID0gb3A7XG59O1xuXG4vKipcbiAqIGV4cGFuZCBvdXRwdXQgYnVmZmVyLlxuICogQHBhcmFtIHtPYmplY3Q9fSBvcHRfcGFyYW0gb3B0aW9uIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJuIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBvdXRwdXQgYnVmZmVyLlxuICovXG5abGliLlJhd0luZmxhdGUucHJvdG90eXBlLmV4cGFuZEJ1ZmZlciA9IGZ1bmN0aW9uKG9wdF9wYXJhbSkge1xuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IHN0b3JlIGJ1ZmZlci4gKi9cbiAgdmFyIGJ1ZmZlciA9XG4gICAgbmV3IChVU0VfVFlQRURBUlJBWSA/IFVpbnQ4QXJyYXkgOiBBcnJheSkoXG4gICAgICAgIHRoaXMub3AgLSBabGliLlJhd0luZmxhdGUuTWF4QmFja3dhcmRMZW5ndGhcbiAgICApO1xuICAvKiogQHR5cGUge251bWJlcn0gYmFja3dhcmQgYmFzZSBwb2ludCAqL1xuICB2YXIgYmFja3dhcmQgPSB0aGlzLm9wIC0gWmxpYi5SYXdJbmZsYXRlLk1heEJhY2t3YXJkTGVuZ3RoO1xuICAvKiogQHR5cGUge251bWJlcn0gY29weSBpbmRleC4gKi9cbiAgdmFyIGk7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBjb3B5IGxpbWl0ICovXG4gIHZhciBpbDtcblxuICB2YXIgb3V0cHV0ID0gdGhpcy5vdXRwdXQ7XG5cbiAgLy8gY29weSB0byBvdXRwdXQgYnVmZmVyXG4gIGlmIChVU0VfVFlQRURBUlJBWSkge1xuICAgIGJ1ZmZlci5zZXQob3V0cHV0LnN1YmFycmF5KFpsaWIuUmF3SW5mbGF0ZS5NYXhCYWNrd2FyZExlbmd0aCwgYnVmZmVyLmxlbmd0aCkpO1xuICB9IGVsc2Uge1xuICAgIGZvciAoaSA9IDAsIGlsID0gYnVmZmVyLmxlbmd0aDsgaSA8IGlsOyArK2kpIHtcbiAgICAgIGJ1ZmZlcltpXSA9IG91dHB1dFtpICsgWmxpYi5SYXdJbmZsYXRlLk1heEJhY2t3YXJkTGVuZ3RoXTtcbiAgICB9XG4gIH1cblxuICB0aGlzLmJsb2Nrcy5wdXNoKGJ1ZmZlcik7XG4gIHRoaXMudG90YWxwb3MgKz0gYnVmZmVyLmxlbmd0aDtcblxuICAvLyBjb3B5IHRvIGJhY2t3YXJkIGJ1ZmZlclxuICBpZiAoVVNFX1RZUEVEQVJSQVkpIHtcbiAgICBvdXRwdXQuc2V0KFxuICAgICAgb3V0cHV0LnN1YmFycmF5KGJhY2t3YXJkLCBiYWNrd2FyZCArIFpsaWIuUmF3SW5mbGF0ZS5NYXhCYWNrd2FyZExlbmd0aClcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGZvciAoaSA9IDA7IGkgPCBabGliLlJhd0luZmxhdGUuTWF4QmFja3dhcmRMZW5ndGg7ICsraSkge1xuICAgICAgb3V0cHV0W2ldID0gb3V0cHV0W2JhY2t3YXJkICsgaV07XG4gICAgfVxuICB9XG5cbiAgdGhpcy5vcCA9IFpsaWIuUmF3SW5mbGF0ZS5NYXhCYWNrd2FyZExlbmd0aDtcblxuICByZXR1cm4gb3V0cHV0O1xufTtcblxuLyoqXG4gKiBleHBhbmQgb3V0cHV0IGJ1ZmZlci4gKGFkYXB0aXZlKVxuICogQHBhcmFtIHtPYmplY3Q9fSBvcHRfcGFyYW0gb3B0aW9uIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJuIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBvdXRwdXQgYnVmZmVyIHBvaW50ZXIuXG4gKi9cblpsaWIuUmF3SW5mbGF0ZS5wcm90b3R5cGUuZXhwYW5kQnVmZmVyQWRhcHRpdmUgPSBmdW5jdGlvbihvcHRfcGFyYW0pIHtcbiAgLyoqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBzdG9yZSBidWZmZXIuICovXG4gIHZhciBidWZmZXI7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBleHBhbnRpb24gcmF0aW8uICovXG4gIHZhciByYXRpbyA9ICh0aGlzLmlucHV0Lmxlbmd0aCAvIHRoaXMuaXAgKyAxKSB8IDA7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBtYXhpbXVtIG51bWJlciBvZiBodWZmbWFuIGNvZGUuICovXG4gIHZhciBtYXhIdWZmQ29kZTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IG5ldyBvdXRwdXQgYnVmZmVyIHNpemUuICovXG4gIHZhciBuZXdTaXplO1xuICAvKiogQHR5cGUge251bWJlcn0gbWF4IGluZmxhdGUgc2l6ZS4gKi9cbiAgdmFyIG1heEluZmxhdGVTaXplO1xuXG4gIHZhciBpbnB1dCA9IHRoaXMuaW5wdXQ7XG4gIHZhciBvdXRwdXQgPSB0aGlzLm91dHB1dDtcblxuICBpZiAob3B0X3BhcmFtKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRfcGFyYW0uZml4UmF0aW8gPT09ICdudW1iZXInKSB7XG4gICAgICByYXRpbyA9IG9wdF9wYXJhbS5maXhSYXRpbztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRfcGFyYW0uYWRkUmF0aW8gPT09ICdudW1iZXInKSB7XG4gICAgICByYXRpbyArPSBvcHRfcGFyYW0uYWRkUmF0aW87XG4gICAgfVxuICB9XG5cbiAgLy8gY2FsY3VsYXRlIG5ldyBidWZmZXIgc2l6ZVxuICBpZiAocmF0aW8gPCAyKSB7XG4gICAgbWF4SHVmZkNvZGUgPVxuICAgICAgKGlucHV0Lmxlbmd0aCAtIHRoaXMuaXApIC8gdGhpcy5jdXJyZW50TGl0bGVuVGFibGVbMl07XG4gICAgbWF4SW5mbGF0ZVNpemUgPSAobWF4SHVmZkNvZGUgLyAyICogMjU4KSB8IDA7XG4gICAgbmV3U2l6ZSA9IG1heEluZmxhdGVTaXplIDwgb3V0cHV0Lmxlbmd0aCA/XG4gICAgICBvdXRwdXQubGVuZ3RoICsgbWF4SW5mbGF0ZVNpemUgOlxuICAgICAgb3V0cHV0Lmxlbmd0aCA8PCAxO1xuICB9IGVsc2Uge1xuICAgIG5ld1NpemUgPSBvdXRwdXQubGVuZ3RoICogcmF0aW87XG4gIH1cblxuICAvLyBidWZmZXIgZXhwYW50aW9uXG4gIGlmIChVU0VfVFlQRURBUlJBWSkge1xuICAgIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KG5ld1NpemUpO1xuICAgIGJ1ZmZlci5zZXQob3V0cHV0KTtcbiAgfSBlbHNlIHtcbiAgICBidWZmZXIgPSBvdXRwdXQ7XG4gIH1cblxuICB0aGlzLm91dHB1dCA9IGJ1ZmZlcjtcblxuICByZXR1cm4gdGhpcy5vdXRwdXQ7XG59O1xuXG4vKipcbiAqIGNvbmNhdCBvdXRwdXQgYnVmZmVyLlxuICogQHJldHVybiB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gb3V0cHV0IGJ1ZmZlci5cbiAqL1xuWmxpYi5SYXdJbmZsYXRlLnByb3RvdHlwZS5jb25jYXRCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGJ1ZmZlciBwb2ludGVyLiAqL1xuICB2YXIgcG9zID0gMDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGJ1ZmZlciBwb2ludGVyLiAqL1xuICB2YXIgbGltaXQgPSB0aGlzLnRvdGFscG9zICsgKHRoaXMub3AgLSBabGliLlJhd0luZmxhdGUuTWF4QmFja3dhcmRMZW5ndGgpO1xuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IG91dHB1dCBibG9jayBhcnJheS4gKi9cbiAgdmFyIG91dHB1dCA9IHRoaXMub3V0cHV0O1xuICAvKiogQHR5cGUgeyFBcnJheX0gYmxvY2tzIGFycmF5LiAqL1xuICB2YXIgYmxvY2tzID0gdGhpcy5ibG9ja3M7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gb3V0cHV0IGJsb2NrIGFycmF5LiAqL1xuICB2YXIgYmxvY2s7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gb3V0cHV0IGJ1ZmZlci4gKi9cbiAgdmFyIGJ1ZmZlciA9IG5ldyAoVVNFX1RZUEVEQVJSQVkgPyBVaW50OEFycmF5IDogQXJyYXkpKGxpbWl0KTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGxvb3AgY291bnRlci4gKi9cbiAgdmFyIGk7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBsb29wIGxpbWl0ZXIuICovXG4gIHZhciBpbDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGxvb3AgY291bnRlci4gKi9cbiAgdmFyIGo7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBsb29wIGxpbWl0ZXIuICovXG4gIHZhciBqbDtcblxuICAvLyBzaW5nbGUgYnVmZmVyXG4gIGlmIChibG9ja3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFVTRV9UWVBFREFSUkFZID9cbiAgICAgIHRoaXMub3V0cHV0LnN1YmFycmF5KFpsaWIuUmF3SW5mbGF0ZS5NYXhCYWNrd2FyZExlbmd0aCwgdGhpcy5vcCkgOlxuICAgICAgdGhpcy5vdXRwdXQuc2xpY2UoWmxpYi5SYXdJbmZsYXRlLk1heEJhY2t3YXJkTGVuZ3RoLCB0aGlzLm9wKTtcbiAgfVxuXG4gIC8vIGNvcHkgdG8gYnVmZmVyXG4gIGZvciAoaSA9IDAsIGlsID0gYmxvY2tzLmxlbmd0aDsgaSA8IGlsOyArK2kpIHtcbiAgICBibG9jayA9IGJsb2Nrc1tpXTtcbiAgICBmb3IgKGogPSAwLCBqbCA9IGJsb2NrLmxlbmd0aDsgaiA8IGpsOyArK2opIHtcbiAgICAgIGJ1ZmZlcltwb3MrK10gPSBibG9ja1tqXTtcbiAgICB9XG4gIH1cblxuICAvLyBjdXJyZW50IGJ1ZmZlclxuICBmb3IgKGkgPSBabGliLlJhd0luZmxhdGUuTWF4QmFja3dhcmRMZW5ndGgsIGlsID0gdGhpcy5vcDsgaSA8IGlsOyArK2kpIHtcbiAgICBidWZmZXJbcG9zKytdID0gb3V0cHV0W2ldO1xuICB9XG5cbiAgdGhpcy5ibG9ja3MgPSBbXTtcbiAgdGhpcy5idWZmZXIgPSBidWZmZXI7XG5cbiAgcmV0dXJuIHRoaXMuYnVmZmVyO1xufTtcblxuLyoqXG4gKiBjb25jYXQgb3V0cHV0IGJ1ZmZlci4gKGR5bmFtaWMpXG4gKiBAcmV0dXJuIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBvdXRwdXQgYnVmZmVyLlxuICovXG5abGliLlJhd0luZmxhdGUucHJvdG90eXBlLmNvbmNhdEJ1ZmZlckR5bmFtaWMgPSBmdW5jdGlvbigpIHtcbiAgLyoqIEB0eXBlIHtBcnJheS48bnVtYmVyPnxVaW50OEFycmF5fSBvdXRwdXQgYnVmZmVyLiAqL1xuICB2YXIgYnVmZmVyO1xuICB2YXIgb3AgPSB0aGlzLm9wO1xuXG4gIGlmIChVU0VfVFlQRURBUlJBWSkge1xuICAgIGlmICh0aGlzLnJlc2l6ZSkge1xuICAgICAgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkob3ApO1xuICAgICAgYnVmZmVyLnNldCh0aGlzLm91dHB1dC5zdWJhcnJheSgwLCBvcCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBidWZmZXIgPSB0aGlzLm91dHB1dC5zdWJhcnJheSgwLCBvcCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICh0aGlzLm91dHB1dC5sZW5ndGggPiBvcCkge1xuICAgICAgdGhpcy5vdXRwdXQubGVuZ3RoID0gb3A7XG4gICAgfVxuICAgIGJ1ZmZlciA9IHRoaXMub3V0cHV0O1xuICB9XG5cbiAgdGhpcy5idWZmZXIgPSBidWZmZXI7XG5cbiAgcmV0dXJuIHRoaXMuYnVmZmVyO1xufTtcblxuLy8gZW5kIG9mIHNjb3BlXG59KTtcblxuLyogdmltOnNldCBleHBhbmR0YWIgdHM9MiBzdz0yIHR3PTgwOiAqL1xuIiwiZ29vZy5wcm92aWRlKCdabGliLkluZmxhdGUnKTtcblxuZ29vZy5yZXF1aXJlKCdVU0VfVFlQRURBUlJBWScpO1xuZ29vZy5yZXF1aXJlKCdabGliLkFkbGVyMzInKTtcbmdvb2cucmVxdWlyZSgnWmxpYi5SYXdJbmZsYXRlJyk7XG5cbmdvb2cuc2NvcGUoZnVuY3Rpb24oKSB7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0geyEoVWludDhBcnJheXxBcnJheSl9IGlucHV0IGRlZmxhdGVkIGJ1ZmZlci5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0X3BhcmFtcyBvcHRpb24gcGFyYW1ldGVycy5cbiAqXG4gKiBvcHRfcGFyYW1zIOOBr+S7peS4i+OBruODl+ODreODkeODhuOCo+OCkuaMh+WumuOBmeOCi+S6i+OBjOOBp+OBjeOBvuOBmeOAglxuICogICAtIGluZGV4OiBpbnB1dCBidWZmZXIg44GuIGRlZmxhdGUg44Kz44Oz44OG44OK44Gu6ZaL5aeL5L2N572uLlxuICogICAtIGJsb2NrU2l6ZTog44OQ44OD44OV44Kh44Gu44OW44Ot44OD44Kv44K144Kk44K6LlxuICogICAtIHZlcmlmeTog5Ly45by144GM57WC44KP44Gj44Gf5b6MIGFkbGVyLTMyIGNoZWNrc3VtIOOBruaknOiovOOCkuihjOOBhuOBiy5cbiAqICAgLSBidWZmZXJUeXBlOiBabGliLkluZmxhdGUuQnVmZmVyVHlwZSDjga7lgKTjgavjgojjgaPjgabjg5Djg4Pjg5XjgqHjga7nrqHnkIbmlrnms5XjgpLmjIflrprjgZnjgosuXG4gKiAgICAgICBabGliLkluZmxhdGUuQnVmZmVyVHlwZSDjga8gWmxpYi5SYXdJbmZsYXRlLkJ1ZmZlclR5cGUg44Gu44Ko44Kk44Oq44Ki44K5LlxuICovXG5abGliLkluZmxhdGUgPSBmdW5jdGlvbihpbnB1dCwgb3B0X3BhcmFtcykge1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGJ1ZmZlclNpemU7XG4gIC8qKiBAdHlwZSB7WmxpYi5JbmZsYXRlLkJ1ZmZlclR5cGV9ICovXG4gIHZhciBidWZmZXJUeXBlO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGNtZjtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBmbGc7XG5cbiAgLyoqIEB0eXBlIHshKFVpbnQ4QXJyYXl8QXJyYXkpfSAqL1xuICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB0aGlzLmlwID0gMDtcbiAgLyoqIEB0eXBlIHtabGliLlJhd0luZmxhdGV9ICovXG4gIHRoaXMucmF3aW5mbGF0ZTtcbiAgLyoqIEB0eXBlIHsoYm9vbGVhbnx1bmRlZmluZWQpfSB2ZXJpZnkgZmxhZy4gKi9cbiAgdGhpcy52ZXJpZnk7XG5cbiAgLy8gb3B0aW9uIHBhcmFtZXRlcnNcbiAgaWYgKG9wdF9wYXJhbXMgfHwgIShvcHRfcGFyYW1zID0ge30pKSB7XG4gICAgaWYgKG9wdF9wYXJhbXNbJ2luZGV4J10pIHtcbiAgICAgIHRoaXMuaXAgPSBvcHRfcGFyYW1zWydpbmRleCddO1xuICAgIH1cbiAgICBpZiAob3B0X3BhcmFtc1sndmVyaWZ5J10pIHtcbiAgICAgIHRoaXMudmVyaWZ5ID0gb3B0X3BhcmFtc1sndmVyaWZ5J107XG4gICAgfVxuICB9XG5cbiAgLy8gQ29tcHJlc3Npb24gTWV0aG9kIGFuZCBGbGFnc1xuICBjbWYgPSBpbnB1dFt0aGlzLmlwKytdO1xuICBmbGcgPSBpbnB1dFt0aGlzLmlwKytdO1xuXG4gIC8vIGNvbXByZXNzaW9uIG1ldGhvZFxuICBzd2l0Y2ggKGNtZiAmIDB4MGYpIHtcbiAgICBjYXNlIFpsaWIuQ29tcHJlc3Npb25NZXRob2QuREVGTEFURTpcbiAgICAgIHRoaXMubWV0aG9kID0gWmxpYi5Db21wcmVzc2lvbk1ldGhvZC5ERUZMQVRFO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5zdXBwb3J0ZWQgY29tcHJlc3Npb24gbWV0aG9kJyk7XG4gIH1cblxuICAvLyBmY2hlY2tcbiAgaWYgKCgoY21mIDw8IDgpICsgZmxnKSAlIDMxICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGZjaGVjayBmbGFnOicgKyAoKGNtZiA8PCA4KSArIGZsZykgJSAzMSk7XG4gIH1cblxuICAvLyBmZGljdCAobm90IHN1cHBvcnRlZClcbiAgaWYgKGZsZyAmIDB4MjApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZkaWN0IGZsYWcgaXMgbm90IHN1cHBvcnRlZCcpO1xuICB9XG5cbiAgLy8gUmF3SW5mbGF0ZVxuICB0aGlzLnJhd2luZmxhdGUgPSBuZXcgWmxpYi5SYXdJbmZsYXRlKGlucHV0LCB7XG4gICAgJ2luZGV4JzogdGhpcy5pcCxcbiAgICAnYnVmZmVyU2l6ZSc6IG9wdF9wYXJhbXNbJ2J1ZmZlclNpemUnXSxcbiAgICAnYnVmZmVyVHlwZSc6IG9wdF9wYXJhbXNbJ2J1ZmZlclR5cGUnXSxcbiAgICAncmVzaXplJzogb3B0X3BhcmFtc1sncmVzaXplJ11cbiAgfSk7XG59XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuWmxpYi5JbmZsYXRlLkJ1ZmZlclR5cGUgPSBabGliLlJhd0luZmxhdGUuQnVmZmVyVHlwZTtcblxuLyoqXG4gKiBkZWNvbXByZXNzLlxuICogQHJldHVybiB7IShVaW50OEFycmF5fEFycmF5KX0gaW5mbGF0ZWQgYnVmZmVyLlxuICovXG5abGliLkluZmxhdGUucHJvdG90eXBlLmRlY29tcHJlc3MgPSBmdW5jdGlvbigpIHtcbiAgLyoqIEB0eXBlIHshKEFycmF5fFVpbnQ4QXJyYXkpfSBpbnB1dCBidWZmZXIuICovXG4gIHZhciBpbnB1dCA9IHRoaXMuaW5wdXQ7XG4gIC8qKiBAdHlwZSB7IShVaW50OEFycmF5fEFycmF5KX0gaW5mbGF0ZWQgYnVmZmVyLiAqL1xuICB2YXIgYnVmZmVyO1xuICAvKiogQHR5cGUge251bWJlcn0gYWRsZXItMzIgY2hlY2tzdW0gKi9cbiAgdmFyIGFkbGVyMzI7XG5cbiAgYnVmZmVyID0gdGhpcy5yYXdpbmZsYXRlLmRlY29tcHJlc3MoKTtcbiAgdGhpcy5pcCA9IHRoaXMucmF3aW5mbGF0ZS5pcDtcblxuICAvLyB2ZXJpZnkgYWRsZXItMzJcbiAgaWYgKHRoaXMudmVyaWZ5KSB7XG4gICAgYWRsZXIzMiA9IChcbiAgICAgIGlucHV0W3RoaXMuaXArK10gPDwgMjQgfCBpbnB1dFt0aGlzLmlwKytdIDw8IDE2IHxcbiAgICAgIGlucHV0W3RoaXMuaXArK10gPDwgOCB8IGlucHV0W3RoaXMuaXArK11cbiAgICApID4+PiAwO1xuXG4gICAgaWYgKGFkbGVyMzIgIT09IFpsaWIuQWRsZXIzMihidWZmZXIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgYWRsZXItMzIgY2hlY2tzdW0nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnVmZmVyO1xufTtcblxuLy8gZW5kIG9mIHNjb3BlXG59KTtcblxuLyogdmltOnNldCBleHBhbmR0YWIgdHM9MiBzdz0yIHR3PTgwOiAqL1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IEFkbGVyMzIgY2hlY2tzdW0g5a6f6KOFLlxuICovXG5nb29nLnByb3ZpZGUoJ1psaWIuQWRsZXIzMicpO1xuXG5nb29nLnJlcXVpcmUoJ1VTRV9UWVBFREFSUkFZJyk7XG5nb29nLnJlcXVpcmUoJ1psaWIuVXRpbCcpO1xuXG5nb29nLnNjb3BlKGZ1bmN0aW9uKCkge1xuXG4vKipcbiAqIEFkbGVyMzIg44OP44OD44K344Ol5YCk44Gu5L2c5oiQXG4gKiBAcGFyYW0geyEoQXJyYXl8VWludDhBcnJheXxzdHJpbmcpfSBhcnJheSDnrpflh7rjgavkvb/nlKjjgZnjgosgYnl0ZSBhcnJheS5cbiAqIEByZXR1cm4ge251bWJlcn0gQWRsZXIzMiDjg4/jg4Pjgrfjg6XlgKQuXG4gKi9cblpsaWIuQWRsZXIzMiA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gIGlmICh0eXBlb2YoYXJyYXkpID09PSAnc3RyaW5nJykge1xuICAgIGFycmF5ID0gWmxpYi5VdGlsLnN0cmluZ1RvQnl0ZUFycmF5KGFycmF5KTtcbiAgfVxuICByZXR1cm4gWmxpYi5BZGxlcjMyLnVwZGF0ZSgxLCBhcnJheSk7XG59O1xuXG4vKipcbiAqIEFkbGVyMzIg44OP44OD44K344Ol5YCk44Gu5pu05pawXG4gKiBAcGFyYW0ge251bWJlcn0gYWRsZXIg54++5Zyo44Gu44OP44OD44K344Ol5YCkLlxuICogQHBhcmFtIHshKEFycmF5fFVpbnQ4QXJyYXkpfSBhcnJheSDmm7TmlrDjgavkvb/nlKjjgZnjgosgYnl0ZSBhcnJheS5cbiAqIEByZXR1cm4ge251bWJlcn0gQWRsZXIzMiDjg4/jg4Pjgrfjg6XlgKQuXG4gKi9cblpsaWIuQWRsZXIzMi51cGRhdGUgPSBmdW5jdGlvbihhZGxlciwgYXJyYXkpIHtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBzMSA9IGFkbGVyICYgMHhmZmZmO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIHMyID0gKGFkbGVyID4+PiAxNikgJiAweGZmZmY7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBhcnJheSBsZW5ndGggKi9cbiAgdmFyIGxlbiA9IGFycmF5Lmxlbmd0aDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGxvb3AgbGVuZ3RoIChkb24ndCBvdmVyZmxvdykgKi9cbiAgdmFyIHRsZW47XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBhcnJheSBpbmRleCAqL1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGxlbiA+IDApIHtcbiAgICB0bGVuID0gbGVuID4gWmxpYi5BZGxlcjMyLk9wdGltaXphdGlvblBhcmFtZXRlciA/XG4gICAgICBabGliLkFkbGVyMzIuT3B0aW1pemF0aW9uUGFyYW1ldGVyIDogbGVuO1xuICAgIGxlbiAtPSB0bGVuO1xuICAgIGRvIHtcbiAgICAgIHMxICs9IGFycmF5W2krK107XG4gICAgICBzMiArPSBzMTtcbiAgICB9IHdoaWxlICgtLXRsZW4pO1xuXG4gICAgczEgJT0gNjU1MjE7XG4gICAgczIgJT0gNjU1MjE7XG4gIH1cblxuICByZXR1cm4gKChzMiA8PCAxNikgfCBzMSkgPj4+IDA7XG59O1xuXG4vKipcbiAqIEFkbGVyMzIg5pyA6YGp5YyW44OR44Op44Oh44O844K/XG4gKiDnj77nirbjgafjga8gMTAyNCDnqIvluqbjgYzmnIDpgakuXG4gKiBAc2VlIGh0dHA6Ly9qc3BlcmYuY29tL2FkbGVyLTMyLXNpbXBsZS12cy1vcHRpbWl6ZWQvM1xuICogQGRlZmluZSB7bnVtYmVyfVxuICovXG5abGliLkFkbGVyMzIuT3B0aW1pemF0aW9uUGFyYW1ldGVyID0gMTAyNDtcblxuLy8gZW5kIG9mIHNjb3BlXG59KTtcblxuLyogdmltOnNldCBleHBhbmR0YWIgdHM9MiBzdz0yIHR3PTgwOiAqL1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IOmbkeWkmuOBqumWouaVsOe+pOOCkuOBvuOBqOOCgeOBn+ODouOCuOODpeODvOODq+Wun+ijhS5cbiAqL1xuZ29vZy5wcm92aWRlKCdabGliLlV0aWwnKTtcblxuZ29vZy5zY29wZShmdW5jdGlvbigpIHtcblxuLyoqXG4gKiBCeXRlIFN0cmluZyDjgYvjgokgQnl0ZSBBcnJheSDjgavlpInmj5suXG4gKiBAcGFyYW0geyFzdHJpbmd9IHN0ciBieXRlIHN0cmluZy5cbiAqIEByZXR1cm4geyFBcnJheS48bnVtYmVyPn0gYnl0ZSBhcnJheS5cbiAqL1xuWmxpYi5VdGlsLnN0cmluZ1RvQnl0ZUFycmF5ID0gZnVuY3Rpb24oc3RyKSB7XG4gIC8qKiBAdHlwZSB7IUFycmF5Ljwoc3RyaW5nfG51bWJlcik+fSAqL1xuICB2YXIgdG1wID0gc3RyLnNwbGl0KCcnKTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBpO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGlsO1xuXG4gIGZvciAoaSA9IDAsIGlsID0gdG1wLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcbiAgICB0bXBbaV0gPSAodG1wW2ldLmNoYXJDb2RlQXQoMCkgJiAweGZmKSA+Pj4gMDtcbiAgfVxuXG4gIHJldHVybiB0bXA7XG59O1xuXG4vLyBlbmQgb2Ygc2NvcGVcbn0pO1xuXG4vKiB2aW06c2V0IGV4cGFuZHRhYiB0cz0yIHN3PTIgdHc9ODA6ICovXG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgWmxpYiBuYW1lc3BhY2UuIFpsaWIg44Gu5LuV5qeY44Gr5rqW5oug44GX44Gf5Zyn57iu44GvIFpsaWIuRGVmbGF0ZSDjgaflrp/oo4VcbiAqIOOBleOCjOOBpuOBhOOCiy4g44GT44KM44GvIEluZmxhdGUg44Go44Gu5YWx5a2Y44KS6ICD5oWu44GX44Gm44GE44KL54K6LlxuICovXG5cbmdvb2cucHJvdmlkZSgnWmxpYicpO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmdvb2cuc2NvcGUoZnVuY3Rpb24oKSB7XG5cbi8qKlxuICogQ29tcHJlc3Npb24gTWV0aG9kXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5abGliLkNvbXByZXNzaW9uTWV0aG9kID0ge1xuICBERUZMQVRFOiA4LFxuICBSRVNFUlZFRDogMTVcbn07XG5cbi8vIGVuZCBvZiBzY29wZVxufSk7XG5cbi8qIHZpbTpzZXQgZXhwYW5kdGFiIHRzPTIgc3c9MiB0dz04MDogKi9cbiIsImdvb2cucmVxdWlyZSgnWmxpYi5JbmZsYXRlJyk7XG5nb29nLnJlcXVpcmUoJ1psaWIuZXhwb3J0T2JqZWN0Jyk7XG5cbmdvb2cuZXhwb3J0U3ltYm9sKCdabGliLkluZmxhdGUnLCBabGliLkluZmxhdGUpO1xuZ29vZy5leHBvcnRTeW1ib2woXG4gICdabGliLkluZmxhdGUucHJvdG90eXBlLmRlY29tcHJlc3MnLFxuICBabGliLkluZmxhdGUucHJvdG90eXBlLmRlY29tcHJlc3Ncbik7XG5abGliLmV4cG9ydE9iamVjdCgnWmxpYi5JbmZsYXRlLkJ1ZmZlclR5cGUnLCB7XG4gICdBREFQVElWRSc6IFpsaWIuSW5mbGF0ZS5CdWZmZXJUeXBlLkFEQVBUSVZFLFxuICAnQkxPQ0snOiBabGliLkluZmxhdGUuQnVmZmVyVHlwZS5CTE9DS1xufSk7XG4iLCJnb29nLnByb3ZpZGUoJ1psaWIuZXhwb3J0T2JqZWN0Jyk7XG5cbmdvb2cucmVxdWlyZSgnWmxpYicpO1xuXG5nb29nLnNjb3BlKGZ1bmN0aW9uKCkge1xuXG5abGliLmV4cG9ydE9iamVjdCA9IGZ1bmN0aW9uKGVudW1TdHJpbmcsIGV4cG9ydEtleVZhbHVlKSB7XG4gIC8qKiBAdHlwZSB7QXJyYXkuPHN0cmluZz59ICovXG4gIHZhciBrZXlzO1xuICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgdmFyIGtleTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBpO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGlsO1xuXG4gIGlmIChPYmplY3Qua2V5cykge1xuICAgIGtleXMgPSBPYmplY3Qua2V5cyhleHBvcnRLZXlWYWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAga2V5cyA9IFtdO1xuICAgIGkgPSAwO1xuICAgIGZvciAoa2V5IGluIGV4cG9ydEtleVZhbHVlKSB7XG4gICAgICBrZXlzW2krK10gPSBrZXk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChpID0gMCwgaWwgPSBrZXlzLmxlbmd0aDsgaSA8IGlsOyArK2kpIHtcbiAgICBrZXkgPSBrZXlzW2ldO1xuICAgIGdvb2cuZXhwb3J0U3ltYm9sKGVudW1TdHJpbmcgKyAnLicgKyBrZXksIGV4cG9ydEtleVZhbHVlW2tleV0pXG4gIH1cbn07XG5cbn0pOyJdfQ== \ No newline at end of file diff --git a/bin/inflate.min.js b/bin/inflate.min.js index 3f0e3be..74f06cd 100644 --- a/bin/inflate.min.js +++ b/bin/inflate.min.js @@ -12,4 +12,4 @@ u.prototype.e=function(){var c=new (s?Uint8Array:Array)(this.b-32768),d=this.b-3 u.prototype.A=function(c){var d,a=this.input.length/this.a+1|0,b,e,f,g=this.input,h=this.c;c&&("number"===typeof c.p&&(a=c.p),"number"===typeof c.v&&(a+=c.v));2>a?(b=(g.length-this.a)/this.o[2],f=258*(b/2)|0,e=fd&&(this.c.length=d),c=this.c);return this.buffer=c};function U(c,d){var a,b;this.input=c;this.a=0;if(d||!(d={}))d.index&&(this.a=d.index),d.verify&&(this.B=d.verify);a=c[this.a++];b=c[this.a++];switch(a&15){case V:this.method=V;break;default:throw Error("unsupported compression method");}if(0!==((a<<8)+b)%31)throw Error("invalid fcheck flag:"+((a<<8)+b)%31);if(b&32)throw Error("fdict flag is not supported");this.r=new u(c,{index:this.a,bufferSize:d.bufferSize,bufferType:d.bufferType,resize:d.resize})} -U.prototype.k=function(){var c=this.input,d,a;d=this.r.k();this.a=this.r.a;if(this.B){a=(c[this.a++]<<24|c[this.a++]<<16|c[this.a++]<<8|c[this.a++])>>>0;var b=d;if("string"===typeof b){var e=b.split(""),f,g;f=0;for(g=e.length;f>>0;b=e}for(var h=1,k=0,l=b.length,p,n=0;0>>0)throw Error("invalid adler-32 checksum");}return d};var V=8;q("Zlib.Inflate",U);q("Zlib.Inflate.prototype.decompress",U.prototype.k);var W={ADAPTIVE:x.t,BLOCK:x.u},X,Y,Z,$;if(Object.keys)X=Object.keys(W);else for(Y in X=[],Z=0,W)X[Z++]=Y;Z=0;for($=X.length;Z<$;++Z)Y=X[Z],q("Zlib.Inflate.BufferType."+Y,W[Y]);}).call(this); //@ sourceMappingURL=inflate.min.js.map +U.prototype.k=function(){var c=this.input,d,a;d=this.r.k();this.a=this.r.a;if(this.B){a=(c[this.a++]<<24|c[this.a++]<<16|c[this.a++]<<8|c[this.a++])>>>0;var b=d;if("string"===typeof b){var e=b.split(""),f,g;f=0;for(g=e.length;f>>0;b=e}for(var h=1,k=0,l=b.length,p,n=0;0>>0)throw Error("invalid adler-32 checksum");}return d};var V=8;q("Zlib.Inflate",U);q("Zlib.Inflate.prototype.decompress",U.prototype.k);var W={ADAPTIVE:x.t,BLOCK:x.u},X,Y,Z,$;if(Object.keys)X=Object.keys(W);else for(Y in X=[],Z=0,W)X[Z++]=Y;Z=0;for($=X.length;Z<$;++Z)Y=X[Z],q("Zlib.Inflate.BufferType."+Y,W[Y]);}).call(this); diff --git a/bin/inflate.min.js.map b/bin/inflate.min.js.map deleted file mode 100644 index 42a5cec..0000000 --- a/bin/inflate.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"./inflate.min.js", -"lineCount":15, -"mappings":"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", -"sources":["../closure-primitives/base.js","../define/typedarray/hybrid.js","../src/huffman.js","../src/rawinflate.js","../src/inflate.js","../src/adler32.js","../src/util.js","../src/zlib.js","../export/inflate.js","../src/export_object.js"], -"names":["goog.global","goog.exportPath_","name","opt_object","parts","split","cur","execScript","part","length","shift","undefined","USE_TYPEDARRAY","Uint8Array","Uint16Array","Uint32Array","DataView","Zlib.Huffman.buildHuffmanTable","lengths","listSize","maxCodeLength","minCodeLength","Number","POSITIVE_INFINITY","size","table","bitLength","code","skip","reversed","rtemp","i","j","value","Array","Zlib.RawInflate","input","opt_params","blocks","bufferSize","ZLIB_RAW_INFLATE_BUFFER_SIZE","bitsbuflen","bitsbuf","ip","totalpos","bfinal","bufferType","Zlib.RawInflate.BufferType.ADAPTIVE","resize","Zlib.RawInflate.BufferType.BLOCK","op","Zlib.RawInflate.MaxBackwardLength","output","Zlib.RawInflate.MaxCopyLength","expandBuffer","expandBufferAdaptive","concatBuffer","concatBufferDynamic","decodeHuffman","decodeHuffmanAdaptive","Error","BLOCK","ADAPTIVE","Zlib.RawInflate.BufferType","prototype","decompress","Zlib.RawInflate.prototype.decompress","hdr","readBits","parseBlock","inputLength","len","nlen","olength","preCopy","set","subarray","Zlib.RawInflate.FixedLiteralLengthTable","Zlib.RawInflate.FixedDistanceTable","parseDynamicHuffmanBlock","Zlib.RawInflate.Order","Zlib.RawInflate.LengthCodeTable","Zlib.RawInflate.LengthExtraTable","Zlib.RawInflate.DistCodeTable","Zlib.RawInflate.DistExtraTable","il","Zlib.RawInflate.prototype.readBits","octet","Zlib.RawInflate.prototype.readCodeByTable","codeTable","codeWithLength","codeLength","Zlib.RawInflate.prototype.parseDynamicHuffmanBlock","decode","num","prev","repeat","readCodeByTable","hlit","hdist","hclen","codeLengths","Zlib.RawInflate.Order.length","codeLengthsTable","litlenLengths","distLengths","call","Zlib.RawInflate.prototype.decodeHuffman","litlen","dist","currentLitlenTable","ti","codeDist","Zlib.RawInflate.prototype.decodeHuffmanAdaptive","Zlib.RawInflate.prototype.expandBuffer","buffer","backward","push","Zlib.RawInflate.prototype.expandBufferAdaptive","opt_param","ratio","maxHuffCode","newSize","maxInflateSize","fixRatio","addRatio","Zlib.RawInflate.prototype.concatBuffer","pos","block","jl","slice","Zlib.RawInflate.prototype.concatBufferDynamic","Zlib.Inflate","cmf","flg","verify","Zlib.CompressionMethod.DEFLATE","method","rawinflate","Zlib.Inflate.prototype.decompress","adler32","array","tmp","charCodeAt","s1","s2","tlen","Zlib.Adler32.OptimizationParameter","DEFLATE","publicPath","keys","key","Object","exportKeyValue","object"] -} diff --git a/bin/inflate_stream.dev.min.js b/bin/inflate_stream.dev.min.js new file mode 100644 index 0000000..fc787f5 --- /dev/null +++ b/bin/inflate_stream.dev.min.js @@ -0,0 +1,14 @@ +/** @license zlib.js 2012 - imaya [ https://github.com/imaya/zlib.js ] The MIT License */(function() {'use strict';var m=void 0,p=!0,s=this;function t(a,d){var b=a.split("."),c=s;!(b[0]in c)&&c.execScript&&c.execScript("var "+b[0]);for(var e;b.length&&(e=b.shift());)!b.length&&d!==m?c[e]=d:c=c[e]?c[e]:c[e]={}};var u="undefined"!==typeof Uint8Array&&"undefined"!==typeof Uint16Array&&"undefined"!==typeof Uint32Array&&"undefined"!==typeof DataView;function v(a){var d=a.length,b=0,c=Number.POSITIVE_INFINITY,e,g,f,l,h,k,n,q,r,w;for(q=0;qb&&(b=a[q]),a[q]>=1;w=f<<16|q;for(r=k;r(e=D(this,3)))E(this),c=-1;else{e&1&&(this.l=p);e>>>=1;switch(e){case 0:this.h=0;break;case 1:this.h=1;break;case 2:this.h=2;break;default:throw Error("unknown BTYPE: "+e);}this.status=2;c=m}0>c&&(b=p);break;case 2:case 3:switch(this.h){case 0:var g;var f=m,l=m,h=this.input,k=this.a;this.status=3;if(k+4>=h.length)g=-1;else{f=h[k++]|h[k++]<< +8;l=h[k++]|h[k++]<<8;if(f===~l)throw Error("invalid uncompressed block header: length verify");this.d=this.e=0;this.a=k;this.m=f;this.status=4;g=m}0>g&&(b=p);break;case 1:this.status=3;this.k=F;this.n=G;this.status=4;break;case 2:0>I(this)&&(b=p)}break;case 4:case 5:switch(this.h){case 0:var n;a:{var q=this.input,r=this.a,w=this.c,B=this.b,H=this.m;for(this.status=5;H--;){B===w.length&&(w=J(this,{o:2}));if(r>=q.length){this.a=r;this.b=B;this.m=H+1;n=-1;break a}w[B++]=q[r++]}0>H&&(this.status=6);this.a= +r;this.b=B;n=0}0>n&&(b=p);break;case 1:case 2:0>K(this)&&(b=p)}break;case 6:this.l?b=p:this.status=A}var z,x=this.b;this.v?u?(z=new Uint8Array(x),z.set(this.c.subarray(this.g,x))):z=this.c.slice(this.g,x):z=u?this.c.subarray(this.g,x):this.c.slice(this.g,x);this.buffer=z;this.g=x;return this.buffer}; +var L=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],M=u?new Uint16Array(L):L,N=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258],aa=u?new Uint16Array(N):N,O=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0],P=u?new Uint8Array(O):O,Q=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],ba=u?new Uint16Array(Q):Q,R=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12, +13,13],S=u?new Uint8Array(R):R,T=new (u?Uint8Array:Array)(288),U,V;U=0;for(V=T.length;U=U?8:255>=U?9:279>=U?7:8;var F=v(T),W=new (u?Uint8Array:Array)(30),X,Y;X=0;for(Y=W.length;X>>d;a.d=c-d;a.a=g;return f} +function Z(a,d){for(var b=a.e,c=a.d,e=a.input,g=a.a,f=d[0],l=d[1],h,k,n;c>>16;a.e=b>>n;a.d=c-n;a.a=g;return k&65535}function C(a){a.u=a.a;a.s=a.d;a.r=a.e}function E(a){a.a=a.u;a.d=a.s;a.e=a.r} +function I(a){function d(){function a(b,c,d){var e,f=this.p,g,h,k;for(h=0;he)throw Error("not enough input");switch(e){case 16:if(0>(k=D(this,2)))throw Error("not enough input");for(g=3+k;g--;)d[h++]=f;break;case 17:if(0>(k=D(this,3)))throw Error("not enough input");for(g=3+k;g--;)d[h++]=0;f=0;break;case 18:if(0>(k=D(this,7)))throw Error("not enough input");for(g=11+k;g--;)d[h++]=0;f=0;break;default:f=d[h++]=e}}this.p=f;return d}var d;for(k=0;k(d=D(this,3)))throw Error("not enough input"); +g[M[k]]=d}f=v(g);l=new (u?Uint8Array:Array)(b);h=new (u?Uint8Array:Array)(c);this.p=0;this.k=v(a.call(this,b,f,l));this.n=v(a.call(this,c,f,h))}var b,c,e,g=new (u?Uint8Array:Array)(M.length),f,l,h,k=0;a.status=3;C(a);b=D(a,5)+257;c=D(a,5)+1;e=D(a,4)+4;if(0>b||0>c||0>e)return E(a),-1;try{d.call(a)}catch(n){return E(a),-1}a.status=4;return 0} +function K(a){var d=a.c,b=a.b,c,e,g,f,l=a.k,h=a.n,k=d.length,n;for(a.status=5;;){C(a);c=Z(a,l);if(0>c)return a.b=b,E(a),-1;if(256===c)break;if(256>c)b===k&&(d=J(a),k=d.length),d[b++]=c;else{e=c-257;f=aa[e];if(0n)return a.b=b,E(a),-1;f+=n}c=Z(a,h);if(0>c)return a.b=b,E(a),-1;g=ba[c];if(0n)return a.b=b,E(a),-1;g+=n}b+f>=k&&(d=J(a),k=d.length);for(;f--;)d[b]=d[b++-g];if(a.a===a.input.length)return a.b=b,-1}}for(;8<=a.d;)a.d-=8,a.a--;a.b=b;a.status=6} +function J(a,d){var b,c=a.input.length/a.a+1|0,e,g,f,l=a.input,h=a.c;d&&("number"===typeof d.o&&(c=d.o),"number"===typeof d.q&&(c+=d.q));2>c?(e=(l.length-a.a)/a.k[2],f=258*(e/2)|0,g=fe}if(c)return new (u?Uint8Array:Array);d=this.f.i(this.input,this.a);0!==this.f.a&&(this.input=u?this.input.subarray(this.f.a):this.input.slice(this.f.a),this.a=0);return d};$.prototype.j=function(){return this.f.j()};t("Zlib.InflateStream",$);t("Zlib.InflateStream.prototype.decompress",$.prototype.i);t("Zlib.InflateStream.prototype.getBytes",$.prototype.j);}).call(this); +//# sourceMappingURL=data:application/json;base64,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djFDc0NWLENOdTFDdEMsQ0FBQS9JLEVBQUEsQ01yMUNBeUoseUNOcTFDQSxDTXAxQ0FWLENBQUEzRixVQUFBQyxFTm8xQ0EsQ0FBQXJELEVBQUEsQ01qMUNBeUosdUNOaTFDQSxDTWgxQ0FWLENBQUEzRixVQUFBeUYsRU5nMUNBOyIsInNvdXJjZXMiOlsiY2xvc3VyZS1wcmltaXRpdmVzL2Jhc2UuanMiLCJkZWZpbmUvdHlwZWRhcnJheS9oeWJyaWQuanMiLCJzcmMvaHVmZm1hbi5qcyIsInNyYy9yYXdpbmZsYXRlX3N0cmVhbS5qcyIsInNyYy9pbmZsYXRlX3N0cmVhbS5qcyIsInNyYy96bGliLmpzIiwiZXhwb3J0L2luZmxhdGVfc3RyZWFtLmpzIl0sIm5hbWVzIjpbImdvb2cuZ2xvYmFsIiwiZ29vZy5leHBvcnRQYXRoXyIsIm5hbWUiLCJvcHRfb2JqZWN0IiwicGFydHMiLCJzcGxpdCIsImN1ciIsImV4ZWNTY3JpcHQiLCJwYXJ0IiwibGVuZ3RoIiwic2hpZnQiLCJKU0NvbXBpbGVyX2FsaWFzX1ZPSUQiLCJVU0VfVFlQRURBUlJBWSIsIlVpbnQ4QXJyYXkiLCJVaW50MTZBcnJheSIsIlVpbnQzMkFycmF5IiwiRGF0YVZpZXciLCJabGliLkh1ZmZtYW4uYnVpbGRIdWZmbWFuVGFibGUiLCJsZW5ndGhzIiwibGlzdFNpemUiLCJtYXhDb2RlTGVuZ3RoIiwibWluQ29kZUxlbmd0aCIsIk51bWJlciIsIlBPU0lUSVZFX0lORklOSVRZIiwic2l6ZSIsInRhYmxlIiwiYml0TGVuZ3RoIiwiY29kZSIsInNraXAiLCJyZXZlcnNlZCIsInJ0ZW1wIiwiaSIsImoiLCJ2YWx1ZSIsIkFycmF5IiwiWmxpYi5SYXdJbmZsYXRlU3RyZWFtIiwiaW5wdXQiLCJpcCIsIm9wdF9idWZmZXJzaXplIiwiYmxvY2tzIiwiYnVmZmVyU2l6ZSIsIlpMSUJfU1RSRUFNX1JBV19JTkZMQVRFX0JVRkZFUl9TSVpFIiwidG90YWxwb3MiLCJiaXRzYnVmbGVuIiwiYml0c2J1ZiIsIm91dHB1dCIsIm9wIiwicmVzaXplIiwiYmZpbmFsIiwic3AiLCJzdGF0dXMiLCJabGliLlJhd0luZmxhdGVTdHJlYW0uU3RhdHVzLklOSVRJQUxJWkVEIiwiSU5JVElBTElaRUQiLCJwcm90b3R5cGUiLCJkZWNvbXByZXNzIiwiWmxpYi5SYXdJbmZsYXRlU3RyZWFtLnByb3RvdHlwZS5kZWNvbXByZXNzIiwibmV3SW5wdXQiLCJzdG9wIiwiQkxPQ0tfSEVBREVSX1NUQVJUIiwiaGRyIiwicmVhZEJsb2NrSGVhZGVyIiwic2F2ZV8iLCJyZWFkQml0cyIsInJlc3RvcmVfIiwiSlNDb21waWxlcl9hbGlhc19UUlVFIiwiY3VycmVudEJsb2NrVHlwZSIsIlVOQ09NUFJFU1NFRCIsIkZJWEVEIiwiRFlOQU1JQyIsIkVycm9yIiwiQkxPQ0tfSEVBREVSX0VORCIsIkJMT0NLX0JPRFlfU1RBUlQiLCJsZW4iLCJubGVuIiwicmVhZFVuY29tcHJlc3NlZEJsb2NrSGVhZGVyIiwiYmxvY2tMZW5ndGgiLCJCTE9DS19CT0RZX0VORCIsInBhcnNlRml4ZWRIdWZmbWFuQmxvY2siLCJsaXRsZW5UYWJsZSIsIlpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5GaXhlZExpdGVyYWxMZW5ndGhUYWJsZSIsImRpc3RUYWJsZSIsIlpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5GaXhlZERpc3RhbmNlVGFibGUiLCJwYXJzZUR5bmFtaWNIdWZmbWFuQmxvY2siLCJERUNPREVfQkxPQ0tfU1RBUlQiLCJwYXJzZVVuY29tcHJlc3NlZEJsb2NrIiwiZXhwYW5kQnVmZmVyIiwiREVDT0RFX0JMT0NLX0VORCIsImRlY29kZUh1ZmZtYW4iLCJidWZmZXIiLCJjb25jYXRCdWZmZXIiLCJzZXQiLCJzdWJhcnJheSIsInNsaWNlIiwiWmxpYi5SYXdJbmZsYXRlU3RyZWFtLk9yZGVyIiwiWmxpYi5SYXdJbmZsYXRlU3RyZWFtLkxlbmd0aENvZGVUYWJsZSIsIlpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5MZW5ndGhFeHRyYVRhYmxlIiwiWmxpYi5SYXdJbmZsYXRlU3RyZWFtLkRpc3RDb2RlVGFibGUiLCJabGliLlJhd0luZmxhdGVTdHJlYW0uRGlzdEV4dHJhVGFibGUiLCJpbCIsIlpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5wcm90b3R5cGUucmVhZEJpdHMiLCJvY3RldCIsIlpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5wcm90b3R5cGUucmVhZENvZGVCeVRhYmxlIiwiY29kZVRhYmxlIiwiY29kZVdpdGhMZW5ndGgiLCJjb2RlTGVuZ3RoIiwiWmxpYi5SYXdJbmZsYXRlU3RyZWFtLnByb3RvdHlwZS5zYXZlXyIsImlwXyIsImJpdHNidWZsZW5fIiwiYml0c2J1Zl8iLCJabGliLlJhd0luZmxhdGVTdHJlYW0ucHJvdG90eXBlLnJlc3RvcmVfIiwiWmxpYi5SYXdJbmZsYXRlU3RyZWFtLnByb3RvdHlwZS5wYXJzZUR5bmFtaWNIdWZmbWFuQmxvY2siLCJwYXJzZUR5bmFtaWNIdWZmbWFuQmxvY2tJbXBsIiwiZGVjb2RlIiwibnVtIiwicHJldiIsInJlcGVhdCIsImJpdHMiLCJyZWFkQ29kZUJ5VGFibGUiLCJoY2xlbiIsImNvZGVMZW5ndGhzIiwiY29kZUxlbmd0aHNUYWJsZSIsImxpdGxlbkxlbmd0aHMiLCJobGl0IiwiZGlzdExlbmd0aHMiLCJoZGlzdCIsImNhbGwiLCJabGliLlJhd0luZmxhdGVTdHJlYW0uT3JkZXIubGVuZ3RoIiwiZSIsIlpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5wcm90b3R5cGUuZGVjb2RlSHVmZm1hbiIsInRpIiwiY29kZURpc3QiLCJsaXRsZW4iLCJkaXN0Iiwib2xlbmd0aCIsIlpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5wcm90b3R5cGUuZXhwYW5kQnVmZmVyIiwib3B0X3BhcmFtIiwicmF0aW8iLCJtYXhIdWZmQ29kZSIsIm5ld1NpemUiLCJtYXhJbmZsYXRlU2l6ZSIsImZpeFJhdGlvIiwiYWRkUmF0aW8iLCJnZXRCeXRlcyIsIlpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5wcm90b3R5cGUuZ2V0Qnl0ZXMiLCJabGliLkluZmxhdGVTdHJlYW0iLCJyYXdpbmZsYXRlIiwiWmxpYi5JbmZsYXRlU3RyZWFtLnByb3RvdHlwZS5kZWNvbXByZXNzIiwidG1wIiwiY29uY2F0IiwiY21mIiwiZmxnIiwiREVGTEFURSIsIm1ldGhvZCIsIlpsaWIuSW5mbGF0ZVN0cmVhbS5wcm90b3R5cGUuZ2V0Qnl0ZXMiLCJwdWJsaWNQYXRoIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDA2IFRoZSBDbG9zdXJlIExpYnJhcnkgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTLUlTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXcgQm9vdHN0cmFwIGZvciB0aGUgR29vZ2xlIEpTIExpYnJhcnkgKENsb3N1cmUpLlxuICpcbiAqIEluIHVuY29tcGlsZWQgbW9kZSBiYXNlLmpzIHdpbGwgd3JpdGUgb3V0IENsb3N1cmUncyBkZXBzIGZpbGUsIHVubGVzcyB0aGVcbiAqIGdsb2JhbCA8Y29kZT5DTE9TVVJFX05PX0RFUFM8L2NvZGU+IGlzIHNldCB0byB0cnVlLiAgVGhpcyBhbGxvd3MgcHJvamVjdHMgdG9cbiAqIGluY2x1ZGUgdGhlaXIgb3duIGRlcHMgZmlsZShzKSBmcm9tIGRpZmZlcmVudCBsb2NhdGlvbnMuXG4gKlxuICovXG5cblxuLyoqXG4gKiBAZGVmaW5lIHtib29sZWFufSBPdmVycmlkZGVuIHRvIHRydWUgYnkgdGhlIGNvbXBpbGVyIHdoZW4gLS1jbG9zdXJlX3Bhc3NcbiAqICAgICBvciAtLW1hcmtfYXNfY29tcGlsZWQgaXMgc3BlY2lmaWVkLlxuICovXG52YXIgQ09NUElMRUQgPSBmYWxzZTtcblxuXG4vKipcbiAqIEJhc2UgbmFtZXNwYWNlIGZvciB0aGUgQ2xvc3VyZSBsaWJyYXJ5LiAgQ2hlY2tzIHRvIHNlZSBnb29nIGlzXG4gKiBhbHJlYWR5IGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgc2NvcGUgYmVmb3JlIGFzc2lnbmluZyB0byBwcmV2ZW50XG4gKiBjbG9iYmVyaW5nIGlmIGJhc2UuanMgaXMgbG9hZGVkIG1vcmUgdGhhbiBvbmNlLlxuICpcbiAqIEBjb25zdFxuICovXG52YXIgZ29vZyA9IGdvb2cgfHwge307IC8vIElkZW50aWZpZXMgdGhpcyBmaWxlIGFzIHRoZSBDbG9zdXJlIGJhc2UuXG5cblxuLyoqXG4gKiBSZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBjb250ZXh0LiAgSW4gbW9zdCBjYXNlcyB0aGlzIHdpbGwgYmUgJ3dpbmRvdycuXG4gKi9cbmdvb2cuZ2xvYmFsID0gdGhpcztcblxuXG4vKipcbiAqIEBkZWZpbmUge2Jvb2xlYW59IERFQlVHIGlzIHByb3ZpZGVkIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCBkZWJ1Z2dpbmcgY29kZVxuICogdGhhdCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGluIGEgcHJvZHVjdGlvbiBqc19iaW5hcnkgY2FuIGJlIGVhc2lseSBzdHJpcHBlZFxuICogYnkgc3BlY2lmeWluZyAtLWRlZmluZSBnb29nLkRFQlVHPWZhbHNlIHRvIHRoZSBKU0NvbXBpbGVyLiBGb3IgZXhhbXBsZSwgbW9zdFxuICogdG9TdHJpbmcoKSBtZXRob2RzIHNob3VsZCBiZSBkZWNsYXJlZCBpbnNpZGUgYW4gXCJpZiAoZ29vZy5ERUJVRylcIiBjb25kaXRpb25hbFxuICogYmVjYXVzZSB0aGV5IGFyZSBnZW5lcmFsbHkgdXNlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIGFuZCBpdCBpcyBkaWZmaWN1bHRcbiAqIGZvciB0aGUgSlNDb21waWxlciB0byBzdGF0aWNhbGx5IGRldGVybWluZSB3aGV0aGVyIHRoZXkgYXJlIHVzZWQuXG4gKi9cbmdvb2cuREVCVUcgPSB0cnVlO1xuXG5cbi8qKlxuICogQGRlZmluZSB7c3RyaW5nfSBMT0NBTEUgZGVmaW5lcyB0aGUgbG9jYWxlIGJlaW5nIHVzZWQgZm9yIGNvbXBpbGF0aW9uLiBJdCBpc1xuICogdXNlZCB0byBzZWxlY3QgbG9jYWxlIHNwZWNpZmljIGRhdGEgdG8gYmUgY29tcGlsZWQgaW4ganMgYmluYXJ5LiBCVUlMRCBydWxlXG4gKiBjYW4gc3BlY2lmeSB0aGlzIHZhbHVlIGJ5IFwiLS1kZWZpbmUgZ29vZy5MT0NBTEU9PGxvY2FsZV9uYW1lPlwiIGFzIEpTQ29tcGlsZXJcbiAqIG9wdGlvbi5cbiAqXG4gKiBUYWtlIGludG8gYWNjb3VudCB0aGF0IHRoZSBsb2NhbGUgY29kZSBmb3JtYXQgaXMgaW1wb3J0YW50LiBZb3Ugc2hvdWxkIHVzZVxuICogdGhlIGNhbm9uaWNhbCBVbmljb2RlIGZvcm1hdCB3aXRoIGh5cGhlbiBhcyBhIGRlbGltaXRlci4gTGFuZ3VhZ2UgbXVzdCBiZVxuICogbG93ZXJjYXNlLCBMYW5ndWFnZSBTY3JpcHQgLSBDYXBpdGFsaXplZCwgUmVnaW9uIC0gVVBQRVJDQVNFLlxuICogVGhlcmUgYXJlIGZldyBleGFtcGxlczogcHQtQlIsIGVuLCBlbi1VUywgc3ItTGF0aW4tQk8sIHpoLUhhbnMtQ04uXG4gKlxuICogU2VlIG1vcmUgaW5mbyBhYm91dCBsb2NhbGUgY29kZXMgaGVyZTpcbiAqIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1LyNVbmljb2RlX0xhbmd1YWdlX2FuZF9Mb2NhbGVfSWRlbnRpZmllcnNcbiAqXG4gKiBGb3IgbGFuZ3VhZ2UgY29kZXMgeW91IHNob3VsZCB1c2UgdmFsdWVzIGRlZmluZWQgYnkgSVNPIDY5My0xLiBTZWUgaXQgaGVyZVxuICogaHR0cDovL3d3dy53My5vcmcvV0FJL0VSL0lHL2VydC9pc282MzkuaHRtLiBUaGVyZSBpcyBvbmx5IG9uZSBleGNlcHRpb24gZnJvbVxuICogdGhpcyBydWxlOiB0aGUgSGVicmV3IGxhbmd1YWdlLiBGb3IgbGVnYWN5IHJlYXNvbnMgdGhlIG9sZCBjb2RlIChpdykgc2hvdWxkXG4gKiBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIG5ldyBjb2RlIChoZSksIHNlZSBodHRwOi8vd2lraS9NYWluL0lJSVN5bm9ueW1zLlxuICovXG5nb29nLkxPQ0FMRSA9ICdlbic7ICAvLyBkZWZhdWx0IHRvIGVuXG5cblxuLyoqXG4gKiBDcmVhdGVzIG9iamVjdCBzdHVicyBmb3IgYSBuYW1lc3BhY2UuICBUaGUgcHJlc2VuY2Ugb2Ygb25lIG9yIG1vcmVcbiAqIGdvb2cucHJvdmlkZSgpIGNhbGxzIGluZGljYXRlIHRoYXQgdGhlIGZpbGUgZGVmaW5lcyB0aGUgZ2l2ZW5cbiAqIG9iamVjdHMvbmFtZXNwYWNlcy4gIEJ1aWxkIHRvb2xzIGFsc28gc2NhbiBmb3IgcHJvdmlkZS9yZXF1aXJlIHN0YXRlbWVudHNcbiAqIHRvIGRpc2Nlcm4gZGVwZW5kZW5jaWVzLCBidWlsZCBkZXBlbmRlbmN5IGZpbGVzIChzZWUgZGVwcy5qcyksIGV0Yy5cbiAqIEBzZWUgZ29vZy5yZXF1aXJlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lc3BhY2UgcHJvdmlkZWQgYnkgdGhpcyBmaWxlIGluIHRoZSBmb3JtXG4gKiAgICAgXCJnb29nLnBhY2thZ2UucGFydFwiLlxuICovXG5nb29nLnByb3ZpZGUgPSBmdW5jdGlvbihuYW1lKSB7XG4gIGlmICghQ09NUElMRUQpIHtcbiAgICAvLyBFbnN1cmUgdGhhdCB0aGUgc2FtZSBuYW1lc3BhY2UgaXNuJ3QgcHJvdmlkZWQgdHdpY2UuIFRoaXMgaXMgaW50ZW5kZWRcbiAgICAvLyB0byB0ZWFjaCBuZXcgZGV2ZWxvcGVycyB0aGF0ICdnb29nLnByb3ZpZGUnIGlzIGVmZmVjdGl2ZWx5IGEgdmFyaWFibGVcbiAgICAvLyBkZWNsYXJhdGlvbi4gQW5kIHdoZW4gSlNDb21waWxlciB0cmFuc2Zvcm1zIGdvb2cucHJvdmlkZSBpbnRvIGEgcmVhbFxuICAgIC8vIHZhcmlhYmxlIGRlY2xhcmF0aW9uLCB0aGUgY29tcGlsZWQgSlMgc2hvdWxkIHdvcmsgdGhlIHNhbWUgYXMgdGhlIHJhd1xuICAgIC8vIEpTLS1ldmVuIHdoZW4gdGhlIHJhdyBKUyB1c2VzIGdvb2cucHJvdmlkZSBpbmNvcnJlY3RseS5cbiAgICBpZiAoZ29vZy5pc1Byb3ZpZGVkXyhuYW1lKSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ05hbWVzcGFjZSBcIicgKyBuYW1lICsgJ1wiIGFscmVhZHkgZGVjbGFyZWQuJyk7XG4gICAgfVxuICAgIGRlbGV0ZSBnb29nLmltcGxpY2l0TmFtZXNwYWNlc19bbmFtZV07XG5cbiAgICB2YXIgbmFtZXNwYWNlID0gbmFtZTtcbiAgICB3aGlsZSAoKG5hbWVzcGFjZSA9IG5hbWVzcGFjZS5zdWJzdHJpbmcoMCwgbmFtZXNwYWNlLmxhc3RJbmRleE9mKCcuJykpKSkge1xuICAgICAgaWYgKGdvb2cuZ2V0T2JqZWN0QnlOYW1lKG5hbWVzcGFjZSkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBnb29nLmltcGxpY2l0TmFtZXNwYWNlc19bbmFtZXNwYWNlXSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgZ29vZy5leHBvcnRQYXRoXyhuYW1lKTtcbn07XG5cblxuLyoqXG4gKiBNYXJrcyB0aGF0IHRoZSBjdXJyZW50IGZpbGUgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdGVzdGluZywgYW5kIG5ldmVyIGZvclxuICogbGl2ZSBjb2RlIGluIHByb2R1Y3Rpb24uXG4gKiBAcGFyYW0ge3N0cmluZz19IG9wdF9tZXNzYWdlIE9wdGlvbmFsIG1lc3NhZ2UgdG8gYWRkIHRvIHRoZSBlcnJvciB0aGF0J3NcbiAqICAgICByYWlzZWQgd2hlbiB1c2VkIGluIHByb2R1Y3Rpb24gY29kZS5cbiAqL1xuZ29vZy5zZXRUZXN0T25seSA9IGZ1bmN0aW9uKG9wdF9tZXNzYWdlKSB7XG4gIGlmIChDT01QSUxFRCAmJiAhZ29vZy5ERUJVRykge1xuICAgIG9wdF9tZXNzYWdlID0gb3B0X21lc3NhZ2UgfHwgJyc7XG4gICAgdGhyb3cgRXJyb3IoJ0ltcG9ydGluZyB0ZXN0LW9ubHkgY29kZSBpbnRvIG5vbi1kZWJ1ZyBlbnZpcm9ubWVudCcgK1xuICAgICAgICAgICAgICAgIG9wdF9tZXNzYWdlID8gJzogJyArIG9wdF9tZXNzYWdlIDogJy4nKTtcbiAgfVxufTtcblxuXG5pZiAoIUNPTVBJTEVEKSB7XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBnaXZlbiBuYW1lIGhhcyBiZWVuIGdvb2cucHJvdmlkZWQuIFRoaXMgd2lsbCByZXR1cm4gZmFsc2UgZm9yXG4gICAqIG5hbWVzIHRoYXQgYXJlIGF2YWlsYWJsZSBvbmx5IGFzIGltcGxpY2l0IG5hbWVzcGFjZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIG9iamVjdCB0byBsb29rIGZvci5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgbmFtZSBoYXMgYmVlbiBwcm92aWRlZC5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdvb2cuaXNQcm92aWRlZF8gPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuICFnb29nLmltcGxpY2l0TmFtZXNwYWNlc19bbmFtZV0gJiYgISFnb29nLmdldE9iamVjdEJ5TmFtZShuYW1lKTtcbiAgfTtcblxuICAvKipcbiAgICogTmFtZXNwYWNlcyBpbXBsaWNpdGx5IGRlZmluZWQgYnkgZ29vZy5wcm92aWRlLiBGb3IgZXhhbXBsZSxcbiAgICogZ29vZy5wcm92aWRlKCdnb29nLmV2ZW50cy5FdmVudCcpIGltcGxpY2l0bHkgZGVjbGFyZXNcbiAgICogdGhhdCAnZ29vZycgYW5kICdnb29nLmV2ZW50cycgbXVzdCBiZSBuYW1lc3BhY2VzLlxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ29vZy5pbXBsaWNpdE5hbWVzcGFjZXNfID0ge307XG59XG5cblxuLyoqXG4gKiBCdWlsZHMgYW4gb2JqZWN0IHN0cnVjdHVyZSBmb3IgdGhlIHByb3ZpZGVkIG5hbWVzcGFjZSBwYXRoLFxuICogZW5zdXJpbmcgdGhhdCBuYW1lcyB0aGF0IGFscmVhZHkgZXhpc3QgYXJlIG5vdCBvdmVyd3JpdHRlbi4gRm9yXG4gKiBleGFtcGxlOlxuICogXCJhLmIuY1wiIC0+IGEgPSB7fTthLmI9e307YS5iLmM9e307XG4gKiBVc2VkIGJ5IGdvb2cucHJvdmlkZSBhbmQgZ29vZy5leHBvcnRTeW1ib2wuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBuYW1lIG9mIHRoZSBvYmplY3QgdGhhdCB0aGlzIGZpbGUgZGVmaW5lcy5cbiAqIEBwYXJhbSB7Kj19IG9wdF9vYmplY3QgdGhlIG9iamVjdCB0byBleHBvc2UgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aC5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0X29iamVjdFRvRXhwb3J0VG8gVGhlIG9iamVjdCB0byBhZGQgdGhlIHBhdGggdG87IGRlZmF1bHRcbiAqICAgICBpcyB8Z29vZy5nbG9iYWx8LlxuICogQHByaXZhdGVcbiAqL1xuZ29vZy5leHBvcnRQYXRoXyA9IGZ1bmN0aW9uKG5hbWUsIG9wdF9vYmplY3QsIG9wdF9vYmplY3RUb0V4cG9ydFRvKSB7XG4gIHZhciBwYXJ0cyA9IG5hbWUuc3BsaXQoJy4nKTtcbiAgdmFyIGN1ciA9IG9wdF9vYmplY3RUb0V4cG9ydFRvIHx8IGdvb2cuZ2xvYmFsO1xuXG4gIC8vIEludGVybmV0IEV4cGxvcmVyIGV4aGliaXRzIHN0cmFuZ2UgYmVoYXZpb3Igd2hlbiB0aHJvd2luZyBlcnJvcnMgZnJvbVxuICAvLyBtZXRob2RzIGV4dGVybmVkIGluIHRoaXMgbWFubmVyLiAgU2VlIHRoZSB0ZXN0RXhwb3J0U3ltYm9sRXhjZXB0aW9ucyBpblxuICAvLyBiYXNlX3Rlc3QuaHRtbCBmb3IgYW4gZXhhbXBsZS5cbiAgaWYgKCEocGFydHNbMF0gaW4gY3VyKSAmJiBjdXIuZXhlY1NjcmlwdCkge1xuICAgIGN1ci5leGVjU2NyaXB0KCd2YXIgJyArIHBhcnRzWzBdKTtcbiAgfVxuXG4gIC8vIENlcnRhaW4gYnJvd3NlcnMgY2Fubm90IHBhcnNlIGNvZGUgaW4gdGhlIGZvcm0gZm9yKChhIGluIGIpOyBjOyk7XG4gIC8vIFRoaXMgcGF0dGVybiBpcyBwcm9kdWNlZCBieSB0aGUgSlNDb21waWxlciB3aGVuIGl0IGNvbGxhcHNlcyB0aGVcbiAgLy8gc3RhdGVtZW50IGFib3ZlIGludG8gdGhlIGNvbmRpdGlvbmFsIGxvb3AgYmVsb3cuIFRvIHByZXZlbnQgdGhpcyBmcm9tXG4gIC8vIGhhcHBlbmluZywgdXNlIGEgZm9yLWxvb3AgYW5kIHJlc2VydmUgdGhlIGluaXQgbG9naWMgYXMgYmVsb3cuXG5cbiAgLy8gUGFyZW50aGVzZXMgYWRkZWQgdG8gZWxpbWluYXRlIHN0cmljdCBKUyB3YXJuaW5nIGluIEZpcmVmb3guXG4gIGZvciAodmFyIHBhcnQ7IHBhcnRzLmxlbmd0aCAmJiAocGFydCA9IHBhcnRzLnNoaWZ0KCkpOykge1xuICAgIGlmICghcGFydHMubGVuZ3RoICYmIGdvb2cuaXNEZWYob3B0X29iamVjdCkpIHtcbiAgICAgIC8vIGxhc3QgcGFydCBhbmQgd2UgaGF2ZSBhbiBvYmplY3Q7IHVzZSBpdFxuICAgICAgY3VyW3BhcnRdID0gb3B0X29iamVjdDtcbiAgICB9IGVsc2UgaWYgKGN1cltwYXJ0XSkge1xuICAgICAgY3VyID0gY3VyW3BhcnRdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXIgPSBjdXJbcGFydF0gPSB7fTtcbiAgICB9XG4gIH1cbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCBiYXNlZCBvbiBpdHMgZnVsbHkgcXVhbGlmaWVkIGV4dGVybmFsIG5hbWUuICBJZiB5b3UgYXJlXG4gKiB1c2luZyBhIGNvbXBpbGF0aW9uIHBhc3MgdGhhdCByZW5hbWVzIHByb3BlcnR5IG5hbWVzIGJld2FyZSB0aGF0IHVzaW5nIHRoaXNcbiAqIGZ1bmN0aW9uIHdpbGwgbm90IGZpbmQgcmVuYW1lZCBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZS5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0X29iaiBUaGUgb2JqZWN0IHdpdGhpbiB3aGljaCB0byBsb29rOyBkZWZhdWx0IGlzXG4gKiAgICAgfGdvb2cuZ2xvYmFsfC5cbiAqIEByZXR1cm4gez99IFRoZSB2YWx1ZSAob2JqZWN0IG9yIHByaW1pdGl2ZSkgb3IsIGlmIG5vdCBmb3VuZCwgbnVsbC5cbiAqL1xuZ29vZy5nZXRPYmplY3RCeU5hbWUgPSBmdW5jdGlvbihuYW1lLCBvcHRfb2JqKSB7XG4gIHZhciBwYXJ0cyA9IG5hbWUuc3BsaXQoJy4nKTtcbiAgdmFyIGN1ciA9IG9wdF9vYmogfHwgZ29vZy5nbG9iYWw7XG4gIGZvciAodmFyIHBhcnQ7IHBhcnQgPSBwYXJ0cy5zaGlmdCgpOyApIHtcbiAgICBpZiAoZ29vZy5pc0RlZkFuZE5vdE51bGwoY3VyW3BhcnRdKSkge1xuICAgICAgY3VyID0gY3VyW3BhcnRdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGN1cjtcbn07XG5cblxuLyoqXG4gKiBHbG9iYWxpemVzIGEgd2hvbGUgbmFtZXNwYWNlLCBzdWNoIGFzIGdvb2cgb3IgZ29vZy5sYW5nLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG5hbWVzcGFjZSB0byBnbG9iYWxpemUuXG4gKiBAcGFyYW0ge09iamVjdD19IG9wdF9nbG9iYWwgVGhlIG9iamVjdCB0byBhZGQgdGhlIHByb3BlcnRpZXMgdG8uXG4gKiBAZGVwcmVjYXRlZCBQcm9wZXJ0aWVzIG1heSBiZSBleHBsaWNpdGx5IGV4cG9ydGVkIHRvIHRoZSBnbG9iYWwgc2NvcGUsIGJ1dFxuICogICAgIHRoaXMgc2hvdWxkIG5vIGxvbmdlciBiZSBkb25lIGluIGJ1bGsuXG4gKi9cbmdvb2cuZ2xvYmFsaXplID0gZnVuY3Rpb24ob2JqLCBvcHRfZ2xvYmFsKSB7XG4gIHZhciBnbG9iYWwgPSBvcHRfZ2xvYmFsIHx8IGdvb2cuZ2xvYmFsO1xuICBmb3IgKHZhciB4IGluIG9iaikge1xuICAgIGdsb2JhbFt4XSA9IG9ialt4XTtcbiAgfVxufTtcblxuXG4vKipcbiAqIEFkZHMgYSBkZXBlbmRlbmN5IGZyb20gYSBmaWxlIHRvIHRoZSBmaWxlcyBpdCByZXF1aXJlcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxQYXRoIFRoZSBwYXRoIHRvIHRoZSBqcyBmaWxlLlxuICogQHBhcmFtIHtBcnJheX0gcHJvdmlkZXMgQW4gYXJyYXkgb2Ygc3RyaW5ncyB3aXRoIHRoZSBuYW1lcyBvZiB0aGUgb2JqZWN0c1xuICogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBmaWxlIHByb3ZpZGVzLlxuICogQHBhcmFtIHtBcnJheX0gcmVxdWlyZXMgQW4gYXJyYXkgb2Ygc3RyaW5ncyB3aXRoIHRoZSBuYW1lcyBvZiB0aGUgb2JqZWN0c1xuICogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBmaWxlIHJlcXVpcmVzLlxuICovXG5nb29nLmFkZERlcGVuZGVuY3kgPSBmdW5jdGlvbihyZWxQYXRoLCBwcm92aWRlcywgcmVxdWlyZXMpIHtcbiAgaWYgKCFDT01QSUxFRCkge1xuICAgIHZhciBwcm92aWRlLCByZXF1aXJlO1xuICAgIHZhciBwYXRoID0gcmVsUGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgdmFyIGRlcHMgPSBnb29nLmRlcGVuZGVuY2llc187XG4gICAgZm9yICh2YXIgaSA9IDA7IHByb3ZpZGUgPSBwcm92aWRlc1tpXTsgaSsrKSB7XG4gICAgICBkZXBzLm5hbWVUb1BhdGhbcHJvdmlkZV0gPSBwYXRoO1xuICAgICAgaWYgKCEocGF0aCBpbiBkZXBzLnBhdGhUb05hbWVzKSkge1xuICAgICAgICBkZXBzLnBhdGhUb05hbWVzW3BhdGhdID0ge307XG4gICAgICB9XG4gICAgICBkZXBzLnBhdGhUb05hbWVzW3BhdGhdW3Byb3ZpZGVdID0gdHJ1ZTtcbiAgICB9XG4gICAgZm9yICh2YXIgaiA9IDA7IHJlcXVpcmUgPSByZXF1aXJlc1tqXTsgaisrKSB7XG4gICAgICBpZiAoIShwYXRoIGluIGRlcHMucmVxdWlyZXMpKSB7XG4gICAgICAgIGRlcHMucmVxdWlyZXNbcGF0aF0gPSB7fTtcbiAgICAgIH1cbiAgICAgIGRlcHMucmVxdWlyZXNbcGF0aF1bcmVxdWlyZV0gPSB0cnVlO1xuICAgIH1cbiAgfVxufTtcblxuXG5cblxuLy8gTk9URShubmF6ZSk6IFRoZSBkZWJ1ZyBET00gbG9hZGVyIHdhcyBpbmNsdWRlZCBpbiBiYXNlLmpzIGFzIGFuIG9yaWduYWxcbi8vIHdheSB0byBkbyBcImRlYnVnLW1vZGVcIiBkZXZlbG9wbWVudC4gIFRoZSBkZXBlbmRlbmN5IHN5c3RlbSBjYW4gc29tZXRpbWVzXG4vLyBiZSBjb25mdXNpbmcsIGFzIGNhbiB0aGUgZGVidWcgRE9NIGxvYWRlcidzIGFzeW5jcm9ub3VzIG5hdHVyZS5cbi8vXG4vLyBXaXRoIHRoZSBET00gbG9hZGVyLCBhIGNhbGwgdG8gZ29vZy5yZXF1aXJlKCkgaXMgbm90IGJsb2NraW5nIC0tIHRoZVxuLy8gc2NyaXB0IHdpbGwgbm90IGxvYWQgdW50aWwgc29tZSBwb2ludCBhZnRlciB0aGUgY3VycmVudCBzY3JpcHQuICBJZiBhXG4vLyBuYW1lc3BhY2UgaXMgbmVlZGVkIGF0IHJ1bnRpbWUsIGl0IG5lZWRzIHRvIGJlIGRlZmluZWQgaW4gYSBwcmV2aW91c1xuLy8gc2NyaXB0LCBvciBsb2FkZWQgdmlhIHJlcXVpcmUoKSB3aXRoIGl0cyByZWdpc3RlcmVkIGRlcGVuZGVuY2llcy5cbi8vIFVzZXItZGVmaW5lZCBuYW1lc3BhY2VzIG1heSBuZWVkIHRoZWlyIG93biBkZXBzIGZpbGUuICBTZWUgaHR0cDovL2dvL2pzX2RlcHMsXG4vLyBodHRwOi8vZ28vZ2VuanNkZXBzLCBvciwgZXh0ZXJuYWxseSwgRGVwc1dyaXRlci5cbi8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vY2xvc3VyZS9saWJyYXJ5L2RvY3MvZGVwc3dyaXRlci5odG1sXG4vL1xuLy8gQmVjYXVzZSBvZiBsZWdhY3kgY2xpZW50cywgdGhlIERPTSBsb2FkZXIgY2FuJ3QgYmUgZWFzaWx5IHJlbW92ZWQgZnJvbVxuLy8gYmFzZS5qcy4gIFdvcmsgaXMgYmVpbmcgZG9uZSB0byBtYWtlIGl0IGRpc2FibGVhYmxlIG9yIHJlcGxhY2VhYmxlIGZvclxuLy8gZGlmZmVyZW50IGVudmlyb25tZW50cyAoRE9NLWxlc3MgSmF2YVNjcmlwdCBpbnRlcnByZXRlcnMgbGlrZSBSaGlubyBvciBWOCxcbi8vIGZvciBleGFtcGxlKS4gU2VlIGJvb3RzdHJhcC8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5cblxuLyoqXG4gKiBAZGVmaW5lIHtib29sZWFufSBXaGV0aGVyIHRvIGVuYWJsZSB0aGUgZGVidWcgbG9hZGVyLlxuICpcbiAqIElmIGVuYWJsZWQsIGEgY2FsbCB0byBnb29nLnJlcXVpcmUoKSB3aWxsIGF0dGVtcHQgdG8gbG9hZCB0aGUgbmFtZXNwYWNlIGJ5XG4gKiBhcHBlbmRpbmcgYSBzY3JpcHQgdGFnIHRvIHRoZSBET00gKGlmIHRoZSBuYW1lc3BhY2UgaGFzIGJlZW4gcmVnaXN0ZXJlZCkuXG4gKlxuICogSWYgZGlzYWJsZWQsIGdvb2cucmVxdWlyZSgpIHdpbGwgc2ltcGx5IGFzc2VydCB0aGF0IHRoZSBuYW1lc3BhY2UgaGFzIGJlZW5cbiAqIHByb3ZpZGVkIChhbmQgZGVwZW5kIG9uIHRoZSBmYWN0IHRoYXQgc29tZSBvdXRzaWRlIHRvb2wgY29ycmVjdGx5IG9yZGVyZWRcbiAqIHRoZSBzY3JpcHQpLlxuICovXG5nb29nLkVOQUJMRV9ERUJVR19MT0FERVIgPSB0cnVlO1xuXG5cbi8qKlxuICogSW1wbGVtZW50cyBhIHN5c3RlbSBmb3IgdGhlIGR5bmFtaWMgcmVzb2x1dGlvbiBvZiBkZXBlbmRlbmNpZXNcbiAqIHRoYXQgd29ya3MgaW4gcGFyYWxsZWwgd2l0aCB0aGUgQlVJTEQgc3lzdGVtLiBOb3RlIHRoYXQgYWxsIGNhbGxzXG4gKiB0byBnb29nLnJlcXVpcmUgd2lsbCBiZSBzdHJpcHBlZCBieSB0aGUgSlNDb21waWxlciB3aGVuIHRoZVxuICogLS1jbG9zdXJlX3Bhc3Mgb3B0aW9uIGlzIHVzZWQuXG4gKiBAc2VlIGdvb2cucHJvdmlkZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZXNwYWNlIHRvIGluY2x1ZGUgKGFzIHdhcyBnaXZlbiBpbiBnb29nLnByb3ZpZGUoKSlcbiAqICAgICBpbiB0aGUgZm9ybSBcImdvb2cucGFja2FnZS5wYXJ0XCIuXG4gKi9cbmdvb2cucmVxdWlyZSA9IGZ1bmN0aW9uKG5hbWUpIHtcblxuICAvLyBpZiB0aGUgb2JqZWN0IGFscmVhZHkgZXhpc3RzIHdlIGRvIG5vdCBuZWVkIGRvIGRvIGFueXRoaW5nXG4gIC8vIFRPRE8oYXJ2KTogSWYgd2Ugc3RhcnQgdG8gc3VwcG9ydCByZXF1aXJlIGJhc2VkIG9uIGZpbGUgbmFtZSB0aGlzIGhhc1xuICAvLyAgICAgICAgICAgIHRvIGNoYW5nZVxuICAvLyBUT0RPKGFydik6IElmIHdlIGFsbG93IGdvb2cuZm9vLiogdGhpcyBoYXMgdG8gY2hhbmdlXG4gIC8vIFRPRE8oYXJ2KTogSWYgd2UgaW1wbGVtZW50IGR5bmFtaWMgbG9hZCBhZnRlciBwYWdlIGxvYWQgd2Ugc2hvdWxkIHByb2JhYmx5XG4gIC8vICAgICAgICAgICAgbm90IHJlbW92ZSB0aGlzIGNvZGUgZm9yIHRoZSBjb21waWxlZCBvdXRwdXRcbiAgaWYgKCFDT01QSUxFRCkge1xuICAgIGlmIChnb29nLmlzUHJvdmlkZWRfKG5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGdvb2cuRU5BQkxFX0RFQlVHX0xPQURFUikge1xuICAgICAgdmFyIHBhdGggPSBnb29nLmdldFBhdGhGcm9tRGVwc18obmFtZSk7XG4gICAgICBpZiAocGF0aCkge1xuICAgICAgICBnb29nLmluY2x1ZGVkX1twYXRoXSA9IHRydWU7XG4gICAgICAgIGdvb2cud3JpdGVTY3JpcHRzXygpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGVycm9yTWVzc2FnZSA9ICdnb29nLnJlcXVpcmUgY291bGQgbm90IGZpbmQ6ICcgKyBuYW1lO1xuICAgIGlmIChnb29nLmdsb2JhbC5jb25zb2xlKSB7XG4gICAgICBnb29nLmdsb2JhbC5jb25zb2xlWydlcnJvciddKGVycm9yTWVzc2FnZSk7XG4gICAgfVxuXG5cbiAgICAgIHRocm93IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cbiAgfVxufTtcblxuXG4vKipcbiAqIFBhdGggZm9yIGluY2x1ZGVkIHNjcmlwdHNcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmdvb2cuYmFzZVBhdGggPSAnJztcblxuXG4vKipcbiAqIEEgaG9vayBmb3Igb3ZlcnJpZGluZyB0aGUgYmFzZSBwYXRoLlxuICogQHR5cGUge3N0cmluZ3x1bmRlZmluZWR9XG4gKi9cbmdvb2cuZ2xvYmFsLkNMT1NVUkVfQkFTRV9QQVRIO1xuXG5cbi8qKlxuICogV2hldGhlciB0byB3cml0ZSBvdXQgQ2xvc3VyZSdzIGRlcHMgZmlsZS4gQnkgZGVmYXVsdCxcbiAqIHRoZSBkZXBzIGFyZSB3cml0dGVuLlxuICogQHR5cGUge2Jvb2xlYW58dW5kZWZpbmVkfVxuICovXG5nb29nLmdsb2JhbC5DTE9TVVJFX05PX0RFUFM7XG5cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRvIGltcG9ydCBhIHNpbmdsZSBzY3JpcHQuIFRoaXMgaXMgbWVhbnQgdG8gYmUgb3ZlcnJpZGRlbiB3aGVuXG4gKiBDbG9zdXJlIGlzIGJlaW5nIHJ1biBpbiBub24tSFRNTCBjb250ZXh0cywgc3VjaCBhcyB3ZWIgd29ya2Vycy4gSXQncyBkZWZpbmVkXG4gKiBpbiB0aGUgZ2xvYmFsIHNjb3BlIHNvIHRoYXQgaXQgY2FuIGJlIHNldCBiZWZvcmUgYmFzZS5qcyBpcyBsb2FkZWQsIHdoaWNoXG4gKiBhbGxvd3MgZGVwcy5qcyB0byBiZSBpbXBvcnRlZCBwcm9wZXJseS5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gaXMgcGFzc2VkIHRoZSBzY3JpcHQgc291cmNlLCB3aGljaCBpcyBhIHJlbGF0aXZlIFVSSS4gSXQgc2hvdWxkXG4gKiByZXR1cm4gdHJ1ZSBpZiB0aGUgc2NyaXB0IHdhcyBpbXBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5nb29nLmdsb2JhbC5DTE9TVVJFX0lNUE9SVF9TQ1JJUFQ7XG5cblxuLyoqXG4gKiBOdWxsIGZ1bmN0aW9uIHVzZWQgZm9yIGRlZmF1bHQgdmFsdWVzIG9mIGNhbGxiYWNrcywgZXRjLlxuICogQHJldHVybiB7dm9pZH0gTm90aGluZy5cbiAqL1xuZ29vZy5udWxsRnVuY3Rpb24gPSBmdW5jdGlvbigpIHt9O1xuXG5cbi8qKlxuICogVGhlIGlkZW50aXR5IGZ1bmN0aW9uLiBSZXR1cm5zIGl0cyBmaXJzdCBhcmd1bWVudC5cbiAqXG4gKiBAcGFyYW0geyo9fSBvcHRfcmV0dXJuVmFsdWUgVGhlIHNpbmdsZSB2YWx1ZSB0aGF0IHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBAcGFyYW0gey4uLip9IHZhcl9hcmdzIE9wdGlvbmFsIHRyYWlsaW5nIGFyZ3VtZW50cy4gVGhlc2UgYXJlIGlnbm9yZWQuXG4gKiBAcmV0dXJuIHs/fSBUaGUgZmlyc3QgYXJndW1lbnQuIFdlIGNhbid0IGtub3cgdGhlIHR5cGUgLS0ganVzdCBwYXNzIGl0IGFsb25nXG4gKiAgICAgIHdpdGhvdXQgdHlwZS5cbiAqIEBkZXByZWNhdGVkIFVzZSBnb29nLmZ1bmN0aW9ucy5pZGVudGl0eSBpbnN0ZWFkLlxuICovXG5nb29nLmlkZW50aXR5RnVuY3Rpb24gPSBmdW5jdGlvbihvcHRfcmV0dXJuVmFsdWUsIHZhcl9hcmdzKSB7XG4gIHJldHVybiBvcHRfcmV0dXJuVmFsdWU7XG59O1xuXG5cbi8qKlxuICogV2hlbiBkZWZpbmluZyBhIGNsYXNzIEZvbyB3aXRoIGFuIGFic3RyYWN0IG1ldGhvZCBiYXIoKSwgeW91IGNhbiBkbzpcbiAqXG4gKiBGb28ucHJvdG90eXBlLmJhciA9IGdvb2cuYWJzdHJhY3RNZXRob2RcbiAqXG4gKiBOb3cgaWYgYSBzdWJjbGFzcyBvZiBGb28gZmFpbHMgdG8gb3ZlcnJpZGUgYmFyKCksIGFuIGVycm9yXG4gKiB3aWxsIGJlIHRocm93biB3aGVuIGJhcigpIGlzIGludm9rZWQuXG4gKlxuICogTm90ZTogVGhpcyBkb2VzIG5vdCB0YWtlIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBvdmVycmlkZSBhc1xuICogYW4gYXJndW1lbnQgYmVjYXVzZSB0aGF0IHdvdWxkIG1ha2UgaXQgbW9yZSBkaWZmaWN1bHQgdG8gb2JmdXNjYXRlXG4gKiBvdXIgSmF2YVNjcmlwdCBjb2RlLlxuICpcbiAqIEB0eXBlIHshRnVuY3Rpb259XG4gKiBAdGhyb3dzIHtFcnJvcn0gd2hlbiBpbnZva2VkIHRvIGluZGljYXRlIHRoZSBtZXRob2Qgc2hvdWxkIGJlXG4gKiAgIG92ZXJyaWRkZW4uXG4gKi9cbmdvb2cuYWJzdHJhY3RNZXRob2QgPSBmdW5jdGlvbigpIHtcbiAgdGhyb3cgRXJyb3IoJ3VuaW1wbGVtZW50ZWQgYWJzdHJhY3QgbWV0aG9kJyk7XG59O1xuXG5cbi8qKlxuICogQWRkcyBhIHtAY29kZSBnZXRJbnN0YW5jZX0gc3RhdGljIG1ldGhvZCB0aGF0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgaW5zdGFuY2VcbiAqIG9iamVjdC5cbiAqIEBwYXJhbSB7IUZ1bmN0aW9ufSBjdG9yIFRoZSBjb25zdHJ1Y3RvciBmb3IgdGhlIGNsYXNzIHRvIGFkZCB0aGUgc3RhdGljXG4gKiAgICAgbWV0aG9kIHRvLlxuICovXG5nb29nLmFkZFNpbmdsZXRvbkdldHRlciA9IGZ1bmN0aW9uKGN0b3IpIHtcbiAgY3Rvci5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChjdG9yLmluc3RhbmNlXykge1xuICAgICAgcmV0dXJuIGN0b3IuaW5zdGFuY2VfO1xuICAgIH1cbiAgICBpZiAoZ29vZy5ERUJVRykge1xuICAgICAgLy8gTk9URTogSlNDb21waWxlciBjYW4ndCBvcHRpbWl6ZSBhd2F5IEFycmF5I3B1c2guXG4gICAgICBnb29nLmluc3RhbnRpYXRlZFNpbmdsZXRvbnNfW2dvb2cuaW5zdGFudGlhdGVkU2luZ2xldG9uc18ubGVuZ3RoXSA9IGN0b3I7XG4gICAgfVxuICAgIHJldHVybiBjdG9yLmluc3RhbmNlXyA9IG5ldyBjdG9yO1xuICB9O1xufTtcblxuXG4vKipcbiAqIEFsbCBzaW5nbGV0b24gY2xhc3NlcyB0aGF0IGhhdmUgYmVlbiBpbnN0YW50aWF0ZWQsIGZvciB0ZXN0aW5nLiBEb24ndCByZWFkXG4gKiBpdCBkaXJlY3RseSwgdXNlIHRoZSB7QGNvZGUgZ29vZy50ZXN0aW5nLnNpbmdsZXRvbn0gbW9kdWxlLiBUaGUgY29tcGlsZXJcbiAqIHJlbW92ZXMgdGhpcyB2YXJpYWJsZSBpZiB1bnVzZWQuXG4gKiBAdHlwZSB7IUFycmF5LjwhRnVuY3Rpb24+fVxuICogQHByaXZhdGVcbiAqL1xuZ29vZy5pbnN0YW50aWF0ZWRTaW5nbGV0b25zXyA9IFtdO1xuXG5cbmlmICghQ09NUElMRUQgJiYgZ29vZy5FTkFCTEVfREVCVUdfTE9BREVSKSB7XG4gIC8qKlxuICAgKiBPYmplY3QgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHVybHMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBhZGRlZC4gVGhpc1xuICAgKiByZWNvcmQgYWxsb3dzIHRoZSBwcmV2ZW50aW9uIG9mIGNpcmN1bGFyIGRlcGVuZGVuY2llcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdvb2cuaW5jbHVkZWRfID0ge307XG5cblxuICAvKipcbiAgICogVGhpcyBvYmplY3QgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIGRlcGVuZGVuY2llcyBhbmQgb3RoZXIgZGF0YSB0aGF0IGlzXG4gICAqIHVzZWQgZm9yIGxvYWRpbmcgc2NyaXB0c1xuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgZ29vZy5kZXBlbmRlbmNpZXNfID0ge1xuICAgIHBhdGhUb05hbWVzOiB7fSwgLy8gMSB0byBtYW55XG4gICAgbmFtZVRvUGF0aDoge30sIC8vIDEgdG8gMVxuICAgIHJlcXVpcmVzOiB7fSwgLy8gMSB0byBtYW55XG4gICAgLy8gdXNlZCB3aGVuIHJlc29sdmluZyBkZXBlbmRlbmNpZXMgdG8gcHJldmVudCB1cyBmcm9tXG4gICAgLy8gdmlzaXRpbmcgdGhlIGZpbGUgdHdpY2VcbiAgICB2aXNpdGVkOiB7fSxcbiAgICB3cml0dGVuOiB7fSAvLyB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygc2NyaXB0IGZpbGVzIHdlIGhhdmUgd3JpdHRlblxuICB9O1xuXG5cbiAgLyoqXG4gICAqIFRyaWVzIHRvIGRldGVjdCB3aGV0aGVyIGlzIGluIHRoZSBjb250ZXh0IG9mIGFuIEhUTUwgZG9jdW1lbnQuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgaXQgbG9va3MgbGlrZSBIVE1MIGRvY3VtZW50LlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ29vZy5pbkh0bWxEb2N1bWVudF8gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZG9jID0gZ29vZy5nbG9iYWwuZG9jdW1lbnQ7XG4gICAgcmV0dXJuIHR5cGVvZiBkb2MgIT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgJ3dyaXRlJyBpbiBkb2M7ICAvLyBYVUxEb2N1bWVudCBtaXNzZXMgd3JpdGUuXG4gIH07XG5cblxuICAvKipcbiAgICogVHJpZXMgdG8gZGV0ZWN0IHRoZSBiYXNlIHBhdGggb2YgdGhlIGJhc2UuanMgc2NyaXB0IHRoYXQgYm9vdHN0cmFwcyBDbG9zdXJlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnb29nLmZpbmRCYXNlUGF0aF8gPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoZ29vZy5nbG9iYWwuQ0xPU1VSRV9CQVNFX1BBVEgpIHtcbiAgICAgIGdvb2cuYmFzZVBhdGggPSBnb29nLmdsb2JhbC5DTE9TVVJFX0JBU0VfUEFUSDtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKCFnb29nLmluSHRtbERvY3VtZW50XygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBkb2MgPSBnb29nLmdsb2JhbC5kb2N1bWVudDtcbiAgICB2YXIgc2NyaXB0cyA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0Jyk7XG4gICAgLy8gU2VhcmNoIGJhY2t3YXJkcyBzaW5jZSB0aGUgY3VycmVudCBzY3JpcHQgaXMgaW4gYWxtb3N0IGFsbCBjYXNlcyB0aGUgb25lXG4gICAgLy8gdGhhdCBoYXMgYmFzZS5qcy5cbiAgICBmb3IgKHZhciBpID0gc2NyaXB0cy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdmFyIHNyYyA9IHNjcmlwdHNbaV0uc3JjO1xuICAgICAgdmFyIHFtYXJrID0gc3JjLmxhc3RJbmRleE9mKCc/Jyk7XG4gICAgICB2YXIgbCA9IHFtYXJrID09IC0xID8gc3JjLmxlbmd0aCA6IHFtYXJrO1xuICAgICAgaWYgKHNyYy5zdWJzdHIobCAtIDcsIDcpID09ICdiYXNlLmpzJykge1xuICAgICAgICBnb29nLmJhc2VQYXRoID0gc3JjLnN1YnN0cigwLCBsIC0gNyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cblxuICAvKipcbiAgICogSW1wb3J0cyBhIHNjcmlwdCBpZiwgYW5kIG9ubHkgaWYsIHRoYXQgc2NyaXB0IGhhc24ndCBhbHJlYWR5IGJlZW4gaW1wb3J0ZWQuXG4gICAqIChNdXN0IGJlIGNhbGxlZCBhdCBleGVjdXRpb24gdGltZSlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNyYyBTY3JpcHQgc291cmNlLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ29vZy5pbXBvcnRTY3JpcHRfID0gZnVuY3Rpb24oc3JjKSB7XG4gICAgdmFyIGltcG9ydFNjcmlwdCA9IGdvb2cuZ2xvYmFsLkNMT1NVUkVfSU1QT1JUX1NDUklQVCB8fFxuICAgICAgICBnb29nLndyaXRlU2NyaXB0VGFnXztcbiAgICBpZiAoIWdvb2cuZGVwZW5kZW5jaWVzXy53cml0dGVuW3NyY10gJiYgaW1wb3J0U2NyaXB0KHNyYykpIHtcbiAgICAgIGdvb2cuZGVwZW5kZW5jaWVzXy53cml0dGVuW3NyY10gPSB0cnVlO1xuICAgIH1cbiAgfTtcblxuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaW1wb3J0IGZ1bmN0aW9uLiBXcml0ZXMgYSBzY3JpcHQgdGFnIHRvXG4gICAqIGltcG9ydCB0aGUgc2NyaXB0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3JjIFRoZSBzY3JpcHQgc291cmNlLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBzY3JpcHQgd2FzIGltcG9ydGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnb29nLndyaXRlU2NyaXB0VGFnXyA9IGZ1bmN0aW9uKHNyYykge1xuICAgIGlmIChnb29nLmluSHRtbERvY3VtZW50XygpKSB7XG4gICAgICB2YXIgZG9jID0gZ29vZy5nbG9iYWwuZG9jdW1lbnQ7XG4gICAgICBkb2Mud3JpdGUoXG4gICAgICAgICAgJzxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiIHNyYz1cIicgKyBzcmMgKyAnXCI+PC8nICsgJ3NjcmlwdD4nKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xuXG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGRlcGVuZGVuY2llcyBiYXNlZCBvbiB0aGUgZGVwZW5kZW5jaWVzIGFkZGVkIHVzaW5nIGFkZERlcGVuZGVuY3lcbiAgICogYW5kIGNhbGxzIGltcG9ydFNjcmlwdF8gaW4gdGhlIGNvcnJlY3Qgb3JkZXIuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnb29nLndyaXRlU2NyaXB0c18gPSBmdW5jdGlvbigpIHtcbiAgICAvLyB0aGUgc2NyaXB0cyB3ZSBuZWVkIHRvIHdyaXRlIHRoaXMgdGltZVxuICAgIHZhciBzY3JpcHRzID0gW107XG4gICAgdmFyIHNlZW5TY3JpcHQgPSB7fTtcbiAgICB2YXIgZGVwcyA9IGdvb2cuZGVwZW5kZW5jaWVzXztcblxuICAgIGZ1bmN0aW9uIHZpc2l0Tm9kZShwYXRoKSB7XG4gICAgICBpZiAocGF0aCBpbiBkZXBzLndyaXR0ZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyB3ZSBoYXZlIGFscmVhZHkgdmlzaXRlZCB0aGlzIG9uZS4gV2UgY2FuIGdldCBoZXJlIGlmIHdlIGhhdmUgY3ljbGljXG4gICAgICAvLyBkZXBlbmRlbmNpZXNcbiAgICAgIGlmIChwYXRoIGluIGRlcHMudmlzaXRlZCkge1xuICAgICAgICBpZiAoIShwYXRoIGluIHNlZW5TY3JpcHQpKSB7XG4gICAgICAgICAgc2VlblNjcmlwdFtwYXRoXSA9IHRydWU7XG4gICAgICAgICAgc2NyaXB0cy5wdXNoKHBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGVwcy52aXNpdGVkW3BhdGhdID0gdHJ1ZTtcblxuICAgICAgaWYgKHBhdGggaW4gZGVwcy5yZXF1aXJlcykge1xuICAgICAgICBmb3IgKHZhciByZXF1aXJlTmFtZSBpbiBkZXBzLnJlcXVpcmVzW3BhdGhdKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIHJlcXVpcmVkIG5hbWUgaXMgZGVmaW5lZCwgd2UgYXNzdW1lIHRoYXQgaXQgd2FzIGFscmVhZHlcbiAgICAgICAgICAvLyBib290c3RyYXBwZWQgYnkgb3RoZXIgbWVhbnMuXG4gICAgICAgICAgaWYgKCFnb29nLmlzUHJvdmlkZWRfKHJlcXVpcmVOYW1lKSkge1xuICAgICAgICAgICAgaWYgKHJlcXVpcmVOYW1lIGluIGRlcHMubmFtZVRvUGF0aCkge1xuICAgICAgICAgICAgICB2aXNpdE5vZGUoZGVwcy5uYW1lVG9QYXRoW3JlcXVpcmVOYW1lXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvcignVW5kZWZpbmVkIG5hbWVUb1BhdGggZm9yICcgKyByZXF1aXJlTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghKHBhdGggaW4gc2VlblNjcmlwdCkpIHtcbiAgICAgICAgc2VlblNjcmlwdFtwYXRoXSA9IHRydWU7XG4gICAgICAgIHNjcmlwdHMucHVzaChwYXRoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBwYXRoIGluIGdvb2cuaW5jbHVkZWRfKSB7XG4gICAgICBpZiAoIWRlcHMud3JpdHRlbltwYXRoXSkge1xuICAgICAgICB2aXNpdE5vZGUocGF0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoc2NyaXB0c1tpXSkge1xuICAgICAgICBnb29nLmltcG9ydFNjcmlwdF8oZ29vZy5iYXNlUGF0aCArIHNjcmlwdHNbaV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ1VuZGVmaW5lZCBzY3JpcHQgaW5wdXQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cblxuICAvKipcbiAgICogTG9va3MgYXQgdGhlIGRlcGVuZGVuY3kgcnVsZXMgYW5kIHRyaWVzIHRvIGRldGVybWluZSB0aGUgc2NyaXB0IGZpbGUgdGhhdFxuICAgKiBmdWxmaWxscyBhIHBhcnRpY3VsYXIgcnVsZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJ1bGUgSW4gdGhlIGZvcm0gZ29vZy5uYW1lc3BhY2UuQ2xhc3Mgb3IgcHJvamVjdC5zY3JpcHQuXG4gICAqIEByZXR1cm4gez9zdHJpbmd9IFVybCBjb3JyZXNwb25kaW5nIHRvIHRoZSBydWxlLCBvciBudWxsLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ29vZy5nZXRQYXRoRnJvbURlcHNfID0gZnVuY3Rpb24ocnVsZSkge1xuICAgIGlmIChydWxlIGluIGdvb2cuZGVwZW5kZW5jaWVzXy5uYW1lVG9QYXRoKSB7XG4gICAgICByZXR1cm4gZ29vZy5kZXBlbmRlbmNpZXNfLm5hbWVUb1BhdGhbcnVsZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICBnb29nLmZpbmRCYXNlUGF0aF8oKTtcblxuICAvLyBBbGxvdyBwcm9qZWN0cyB0byBtYW5hZ2UgdGhlIGRlcHMgZmlsZXMgdGhlbXNlbHZlcy5cbiAgaWYgKCFnb29nLmdsb2JhbC5DTE9TVVJFX05PX0RFUFMpIHtcbiAgICBnb29nLmltcG9ydFNjcmlwdF8oZ29vZy5iYXNlUGF0aCArICdkZXBzLmpzJyk7XG4gIH1cbn1cblxuXG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBMYW5ndWFnZSBFbmhhbmNlbWVudHNcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblxuLyoqXG4gKiBUaGlzIGlzIGEgXCJmaXhlZFwiIHZlcnNpb24gb2YgdGhlIHR5cGVvZiBvcGVyYXRvci4gIEl0IGRpZmZlcnMgZnJvbSB0aGUgdHlwZW9mXG4gKiBvcGVyYXRvciBpbiBzdWNoIGEgd2F5IHRoYXQgbnVsbCByZXR1cm5zICdudWxsJyBhbmQgYXJyYXlzIHJldHVybiAnYXJyYXknLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZ2V0IHRoZSB0eXBlIG9mLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgdHlwZS5cbiAqL1xuZ29vZy50eXBlT2YgPSBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIgcyA9IHR5cGVvZiB2YWx1ZTtcbiAgaWYgKHMgPT0gJ29iamVjdCcpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIC8vIENoZWNrIHRoZXNlIGZpcnN0LCBzbyB3ZSBjYW4gYXZvaWQgY2FsbGluZyBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIGlmXG4gICAgICAvLyBwb3NzaWJsZS5cbiAgICAgIC8vXG4gICAgICAvLyBJRSBpbXByb3Blcmx5IG1hcnNoYWxzIHR5ZXBvZiBhY3Jvc3MgZXhlY3V0aW9uIGNvbnRleHRzLCBidXQgYVxuICAgICAgLy8gY3Jvc3MtY29udGV4dCBvYmplY3Qgd2lsbCBzdGlsbCByZXR1cm4gZmFsc2UgZm9yIFwiaW5zdGFuY2VvZiBPYmplY3RcIi5cbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgIHJldHVybiAnYXJyYXknO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICByZXR1cm4gcztcbiAgICAgIH1cblxuICAgICAgLy8gSEFDSzogSW4gb3JkZXIgdG8gdXNlIGFuIE9iamVjdCBwcm90b3R5cGUgbWV0aG9kIG9uIHRoZSBhcmJpdHJhcnlcbiAgICAgIC8vICAgdmFsdWUsIHRoZSBjb21waWxlciByZXF1aXJlcyB0aGUgdmFsdWUgYmUgY2FzdCB0byB0eXBlIE9iamVjdCxcbiAgICAgIC8vICAgZXZlbiB0aG91Z2ggdGhlIEVDTUEgc3BlYyBleHBsaWNpdGx5IGFsbG93cyBpdC5cbiAgICAgIHZhciBjbGFzc05hbWUgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoXG4gICAgICAgICAgLyoqIEB0eXBlIHtPYmplY3R9ICovICh2YWx1ZSkpO1xuICAgICAgLy8gSW4gRmlyZWZveCAzLjYsIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGlmcmFtZSB3aW5kb3cgb2JqZWN0cycgbGVuZ3RoXG4gICAgICAvLyBwcm9wZXJ0eSB0aHJvd3MgYW4gTlNfRVJST1JfRkFJTFVSRSwgc28gd2UgbmVlZCB0byBzcGVjaWFsLWNhc2UgaXRcbiAgICAgIC8vIGhlcmUuXG4gICAgICBpZiAoY2xhc3NOYW1lID09ICdbb2JqZWN0IFdpbmRvd10nKSB7XG4gICAgICAgIHJldHVybiAnb2JqZWN0JztcbiAgICAgIH1cblxuICAgICAgLy8gV2UgY2Fubm90IGFsd2F5cyB1c2UgY29uc3RydWN0b3IgPT0gQXJyYXkgb3IgaW5zdGFuY2VvZiBBcnJheSBiZWNhdXNlXG4gICAgICAvLyBkaWZmZXJlbnQgZnJhbWVzIGhhdmUgZGlmZmVyZW50IEFycmF5IG9iamVjdHMuIEluIElFNiwgaWYgdGhlIGlmcmFtZVxuICAgICAgLy8gd2hlcmUgdGhlIGFycmF5IHdhcyBjcmVhdGVkIGlzIGRlc3Ryb3llZCwgdGhlIGFycmF5IGxvc2VzIGl0c1xuICAgICAgLy8gcHJvdG90eXBlLiBUaGVuIGRlcmVmZXJlbmNpbmcgdmFsLnNwbGljZSBoZXJlIHRocm93cyBhbiBleGNlcHRpb24sIHNvXG4gICAgICAvLyB3ZSBjYW4ndCB1c2UgZ29vZy5pc0Z1bmN0aW9uLiBDYWxsaW5nIHR5cGVvZiBkaXJlY3RseSByZXR1cm5zICd1bmtub3duJ1xuICAgICAgLy8gc28gdGhhdCB3aWxsIHdvcmsuIEluIHRoaXMgY2FzZSwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBmYWxzZSBhbmRcbiAgICAgIC8vIG1vc3QgYXJyYXkgZnVuY3Rpb25zIHdpbGwgc3RpbGwgd29yayBiZWNhdXNlIHRoZSBhcnJheSBpcyBzdGlsbFxuICAgICAgLy8gYXJyYXktbGlrZSAoc3VwcG9ydHMgbGVuZ3RoIGFuZCBbXSkgZXZlbiB0aG91Z2ggaXQgaGFzIGxvc3QgaXRzXG4gICAgICAvLyBwcm90b3R5cGUuXG4gICAgICAvLyBNYXJrIE1pbGxlciBub3RpY2VkIHRoYXQgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ1xuICAgICAgLy8gYWxsb3dzIGFjY2VzcyB0byB0aGUgdW5mb3JnZWFibGUgW1tDbGFzc11dIHByb3BlcnR5LlxuICAgICAgLy8gIDE1LjIuNC4yIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgKCApXG4gICAgICAvLyAgV2hlbiB0aGUgdG9TdHJpbmcgbWV0aG9kIGlzIGNhbGxlZCwgdGhlIGZvbGxvd2luZyBzdGVwcyBhcmUgdGFrZW46XG4gICAgICAvLyAgICAgIDEuIEdldCB0aGUgW1tDbGFzc11dIHByb3BlcnR5IG9mIHRoaXMgb2JqZWN0LlxuICAgICAgLy8gICAgICAyLiBDb21wdXRlIGEgc3RyaW5nIHZhbHVlIGJ5IGNvbmNhdGVuYXRpbmcgdGhlIHRocmVlIHN0cmluZ3NcbiAgICAgIC8vICAgICAgICAgXCJbb2JqZWN0IFwiLCBSZXN1bHQoMSksIGFuZCBcIl1cIi5cbiAgICAgIC8vICAgICAgMy4gUmV0dXJuIFJlc3VsdCgyKS5cbiAgICAgIC8vIGFuZCB0aGlzIGJlaGF2aW9yIHN1cnZpdmVzIHRoZSBkZXN0cnVjdGlvbiBvZiB0aGUgZXhlY3V0aW9uIGNvbnRleHQuXG4gICAgICBpZiAoKGNsYXNzTmFtZSA9PSAnW29iamVjdCBBcnJheV0nIHx8XG4gICAgICAgICAgIC8vIEluIElFIGFsbCBub24gdmFsdWUgdHlwZXMgYXJlIHdyYXBwZWQgYXMgb2JqZWN0cyBhY3Jvc3Mgd2luZG93XG4gICAgICAgICAgIC8vIGJvdW5kYXJpZXMgKG5vdCBpZnJhbWUgdGhvdWdoKSBzbyB3ZSBoYXZlIHRvIGRvIG9iamVjdCBkZXRlY3Rpb25cbiAgICAgICAgICAgLy8gZm9yIHRoaXMgZWRnZSBjYXNlXG4gICAgICAgICAgIHR5cGVvZiB2YWx1ZS5sZW5ndGggPT0gJ251bWJlcicgJiZcbiAgICAgICAgICAgdHlwZW9mIHZhbHVlLnNwbGljZSAhPSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICB0eXBlb2YgdmFsdWUucHJvcGVydHlJc0VudW1lcmFibGUgIT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIXZhbHVlLnByb3BlcnR5SXNFbnVtZXJhYmxlKCdzcGxpY2UnKVxuXG4gICAgICAgICAgKSkge1xuICAgICAgICByZXR1cm4gJ2FycmF5JztcbiAgICAgIH1cbiAgICAgIC8vIEhBQ0s6IFRoZXJlIGlzIHN0aWxsIGFuIGFycmF5IGNhc2UgdGhhdCBmYWlscy5cbiAgICAgIC8vICAgICBmdW5jdGlvbiBBcnJheUltcG9zdG9yKCkge31cbiAgICAgIC8vICAgICBBcnJheUltcG9zdG9yLnByb3RvdHlwZSA9IFtdO1xuICAgICAgLy8gICAgIHZhciBpbXBvc3RvciA9IG5ldyBBcnJheUltcG9zdG9yO1xuICAgICAgLy8gdGhpcyBjYW4gYmUgZml4ZWQgYnkgZ2V0dGluZyByaWQgb2YgdGhlIGZhc3QgcGF0aFxuICAgICAgLy8gKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpIGFuZCBzb2xlbHkgcmVseWluZyBvblxuICAgICAgLy8gKHZhbHVlICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcudmFsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEFycmF5XScpXG4gICAgICAvLyBidXQgdGhhdCB3b3VsZCByZXF1aXJlIG1hbnkgbW9yZSBmdW5jdGlvbiBjYWxscyBhbmQgaXMgbm90IHdhcnJhbnRlZFxuICAgICAgLy8gdW5sZXNzIGNsb3N1cmUgY29kZSBpcyByZWNlaXZpbmcgb2JqZWN0cyBmcm9tIHVudHJ1c3RlZCBzb3VyY2VzLlxuXG4gICAgICAvLyBJRSBpbiBjcm9zcy13aW5kb3cgY2FsbHMgZG9lcyBub3QgY29ycmVjdGx5IG1hcnNoYWwgdGhlIGZ1bmN0aW9uIHR5cGVcbiAgICAgIC8vIChpdCBhcHBlYXJzIGp1c3QgYXMgYW4gb2JqZWN0KSBzbyB3ZSBjYW5ub3QgdXNlIGp1c3QgdHlwZW9mIHZhbCA9PVxuICAgICAgLy8gJ2Z1bmN0aW9uJy4gSG93ZXZlciwgaWYgdGhlIG9iamVjdCBoYXMgYSBjYWxsIHByb3BlcnR5LCBpdCBpcyBhXG4gICAgICAvLyBmdW5jdGlvbi5cbiAgICAgIGlmICgoY2xhc3NOYW1lID09ICdbb2JqZWN0IEZ1bmN0aW9uXScgfHxcbiAgICAgICAgICB0eXBlb2YgdmFsdWUuY2FsbCAhPSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgIHR5cGVvZiB2YWx1ZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSAhPSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICF2YWx1ZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgnY2FsbCcpKSkge1xuICAgICAgICByZXR1cm4gJ2Z1bmN0aW9uJztcbiAgICAgIH1cblxuXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuXG4gIH0gZWxzZSBpZiAocyA9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZS5jYWxsID09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gSW4gU2FmYXJpIHR5cGVvZiBub2RlTGlzdCByZXR1cm5zICdmdW5jdGlvbicsIGFuZCBvbiBGaXJlZm94XG4gICAgLy8gdHlwZW9mIGJlaGF2ZXMgc2ltaWxhcmx5IGZvciBIVE1Me0FwcGxldCxFbWJlZCxPYmplY3R9RWxlbWVudHNcbiAgICAvLyBhbmQgUmVnRXhwcy4gIFdlIHdvdWxkIGxpa2UgdG8gcmV0dXJuIG9iamVjdCBmb3IgdGhvc2UgYW5kIHdlIGNhblxuICAgIC8vIGRldGVjdCBhbiBpbnZhbGlkIGZ1bmN0aW9uIGJ5IG1ha2luZyBzdXJlIHRoYXQgdGhlIGZ1bmN0aW9uXG4gICAgLy8gb2JqZWN0IGhhcyBhIGNhbGwgbWV0aG9kLlxuICAgIHJldHVybiAnb2JqZWN0JztcbiAgfVxuICByZXR1cm4gcztcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBub3QgfHVuZGVmaW5lZHwuXG4gKiBXQVJOSU5HOiBEbyBub3QgdXNlIHRoaXMgdG8gdGVzdCBpZiBhbiBvYmplY3QgaGFzIGEgcHJvcGVydHkuIFVzZSB0aGUgaW5cbiAqIG9wZXJhdG9yIGluc3RlYWQuICBBZGRpdGlvbmFsbHksIHRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBnbG9iYWxcbiAqIHVuZGVmaW5lZCB2YXJpYWJsZSBoYXMgbm90IGJlZW4gcmVkZWZpbmVkLlxuICogQHBhcmFtIHsqfSB2YWwgVmFyaWFibGUgdG8gdGVzdC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdmFyaWFibGUgaXMgZGVmaW5lZC5cbiAqL1xuZ29vZy5pc0RlZiA9IGZ1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSB1bmRlZmluZWQ7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgfG51bGx8XG4gKiBAcGFyYW0geyp9IHZhbCBWYXJpYWJsZSB0byB0ZXN0LlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB2YXJpYWJsZSBpcyBudWxsLlxuICovXG5nb29nLmlzTnVsbCA9IGZ1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gdmFsID09PSBudWxsO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGlzIGRlZmluZWQgYW5kIG5vdCBudWxsXG4gKiBAcGFyYW0geyp9IHZhbCBWYXJpYWJsZSB0byB0ZXN0LlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB2YXJpYWJsZSBpcyBkZWZpbmVkIGFuZCBub3QgbnVsbC5cbiAqL1xuZ29vZy5pc0RlZkFuZE5vdE51bGwgPSBmdW5jdGlvbih2YWwpIHtcbiAgLy8gTm90ZSB0aGF0IHVuZGVmaW5lZCA9PSBudWxsLlxuICByZXR1cm4gdmFsICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgYW4gYXJyYXlcbiAqIEBwYXJhbSB7Kn0gdmFsIFZhcmlhYmxlIHRvIHRlc3QuXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHZhcmlhYmxlIGlzIGFuIGFycmF5LlxuICovXG5nb29nLmlzQXJyYXkgPSBmdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIGdvb2cudHlwZU9mKHZhbCkgPT0gJ2FycmF5Jztcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCBsb29rcyBsaWtlIGFuIGFycmF5LiBUbyBxdWFsaWZ5IGFzIGFycmF5IGxpa2VcbiAqIHRoZSB2YWx1ZSBuZWVkcyB0byBiZSBlaXRoZXIgYSBOb2RlTGlzdCBvciBhbiBvYmplY3Qgd2l0aCBhIE51bWJlciBsZW5ndGhcbiAqIHByb3BlcnR5LlxuICogQHBhcmFtIHsqfSB2YWwgVmFyaWFibGUgdG8gdGVzdC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdmFyaWFibGUgaXMgYW4gYXJyYXkuXG4gKi9cbmdvb2cuaXNBcnJheUxpa2UgPSBmdW5jdGlvbih2YWwpIHtcbiAgdmFyIHR5cGUgPSBnb29nLnR5cGVPZih2YWwpO1xuICByZXR1cm4gdHlwZSA9PSAnYXJyYXknIHx8IHR5cGUgPT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbC5sZW5ndGggPT0gJ251bWJlcic7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3QgbG9va3MgbGlrZSBhIERhdGUuIFRvIHF1YWxpZnkgYXMgRGF0ZS1saWtlXG4gKiB0aGUgdmFsdWUgbmVlZHMgdG8gYmUgYW4gb2JqZWN0IGFuZCBoYXZlIGEgZ2V0RnVsbFllYXIoKSBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gdmFsIFZhcmlhYmxlIHRvIHRlc3QuXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHZhcmlhYmxlIGlzIGEgbGlrZSBhIERhdGUuXG4gKi9cbmdvb2cuaXNEYXRlTGlrZSA9IGZ1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gZ29vZy5pc09iamVjdCh2YWwpICYmIHR5cGVvZiB2YWwuZ2V0RnVsbFllYXIgPT0gJ2Z1bmN0aW9uJztcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBhIHN0cmluZ1xuICogQHBhcmFtIHsqfSB2YWwgVmFyaWFibGUgdG8gdGVzdC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdmFyaWFibGUgaXMgYSBzdHJpbmcuXG4gKi9cbmdvb2cuaXNTdHJpbmcgPSBmdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gJ3N0cmluZyc7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgYSBib29sZWFuXG4gKiBAcGFyYW0geyp9IHZhbCBWYXJpYWJsZSB0byB0ZXN0LlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB2YXJpYWJsZSBpcyBib29sZWFuLlxuICovXG5nb29nLmlzQm9vbGVhbiA9IGZ1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PSAnYm9vbGVhbic7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgYSBudW1iZXJcbiAqIEBwYXJhbSB7Kn0gdmFsIFZhcmlhYmxlIHRvIHRlc3QuXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHZhcmlhYmxlIGlzIGEgbnVtYmVyLlxuICovXG5nb29nLmlzTnVtYmVyID0gZnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09ICdudW1iZXInO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGlzIGEgZnVuY3Rpb25cbiAqIEBwYXJhbSB7Kn0gdmFsIFZhcmlhYmxlIHRvIHRlc3QuXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHZhcmlhYmxlIGlzIGEgZnVuY3Rpb24uXG4gKi9cbmdvb2cuaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gZ29vZy50eXBlT2YodmFsKSA9PSAnZnVuY3Rpb24nO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGlzIGFuIG9iamVjdC4gIFRoaXMgaW5jbHVkZXMgYXJyYXlzXG4gKiBhbmQgZnVuY3Rpb25zLlxuICogQHBhcmFtIHsqfSB2YWwgVmFyaWFibGUgdG8gdGVzdC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdmFyaWFibGUgaXMgYW4gb2JqZWN0LlxuICovXG5nb29nLmlzT2JqZWN0ID0gZnVuY3Rpb24odmFsKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbDtcbiAgcmV0dXJuIHR5cGUgPT0gJ29iamVjdCcgJiYgdmFsICE9IG51bGwgfHwgdHlwZSA9PSAnZnVuY3Rpb24nO1xuICAvLyByZXR1cm4gT2JqZWN0KHZhbCkgPT09IHZhbCBhbHNvIHdvcmtzLCBidXQgaXMgc2xvd2VyLCBlc3BlY2lhbGx5IGlmIHZhbCBpc1xuICAvLyBub3QgYW4gb2JqZWN0LlxufTtcblxuXG4vKipcbiAqIEdldHMgYSB1bmlxdWUgSUQgZm9yIGFuIG9iamVjdC4gVGhpcyBtdXRhdGVzIHRoZSBvYmplY3Qgc28gdGhhdCBmdXJ0aGVyXG4gKiBjYWxscyB3aXRoIHRoZSBzYW1lIG9iamVjdCBhcyBhIHBhcmFtZXRlciByZXR1cm5zIHRoZSBzYW1lIHZhbHVlLiBUaGUgdW5pcXVlXG4gKiBJRCBpcyBndWFyYW50ZWVkIHRvIGJlIHVuaXF1ZSBhY3Jvc3MgdGhlIGN1cnJlbnQgc2Vzc2lvbiBhbW9uZ3N0IG9iamVjdHMgdGhhdFxuICogYXJlIHBhc3NlZCBpbnRvIHtAY29kZSBnZXRVaWR9LiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGUgSUQgaXMgdW5pcXVlXG4gKiBvciBjb25zaXN0ZW50IGFjcm9zcyBzZXNzaW9ucy4gSXQgaXMgdW5zYWZlIHRvIGdlbmVyYXRlIHVuaXF1ZSBJRCBmb3JcbiAqIGZ1bmN0aW9uIHByb3RvdHlwZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIGdldCB0aGUgdW5pcXVlIElEIGZvci5cbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHVuaXF1ZSBJRCBmb3IgdGhlIG9iamVjdC5cbiAqL1xuZ29vZy5nZXRVaWQgPSBmdW5jdGlvbihvYmopIHtcbiAgLy8gVE9ETyhhcnYpOiBNYWtlIHRoZSB0eXBlIHN0cmljdGVyLCBkbyBub3QgYWNjZXB0IG51bGwuXG5cbiAgLy8gSW4gT3BlcmEgd2luZG93Lmhhc093blByb3BlcnR5IGV4aXN0cyBidXQgYWx3YXlzIHJldHVybnMgZmFsc2Ugc28gd2UgYXZvaWRcbiAgLy8gdXNpbmcgaXQuIEFzIGEgY29uc2VxdWVuY2UgdGhlIHVuaXF1ZSBJRCBnZW5lcmF0ZWQgZm9yIEJhc2VDbGFzcy5wcm90b3R5cGVcbiAgLy8gYW5kIFN1YkNsYXNzLnByb3RvdHlwZSB3aWxsIGJlIHRoZSBzYW1lLlxuICByZXR1cm4gb2JqW2dvb2cuVUlEX1BST1BFUlRZX10gfHxcbiAgICAgIChvYmpbZ29vZy5VSURfUFJPUEVSVFlfXSA9ICsrZ29vZy51aWRDb3VudGVyXyk7XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgdW5pcXVlIElEIGZyb20gYW4gb2JqZWN0LiBUaGlzIGlzIHVzZWZ1bCBpZiB0aGUgb2JqZWN0IHdhc1xuICogcHJldmlvdXNseSBtdXRhdGVkIHVzaW5nIHtAY29kZSBnb29nLmdldFVpZH0gaW4gd2hpY2ggY2FzZSB0aGUgbXV0YXRpb24gaXNcbiAqIHVuZG9uZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byByZW1vdmUgdGhlIHVuaXF1ZSBJRCBmaWVsZCBmcm9tLlxuICovXG5nb29nLnJlbW92ZVVpZCA9IGZ1bmN0aW9uKG9iaikge1xuICAvLyBUT0RPKGFydik6IE1ha2UgdGhlIHR5cGUgc3RyaWN0ZXIsIGRvIG5vdCBhY2NlcHQgbnVsbC5cblxuICAvLyBET00gbm9kZXMgaW4gSUUgYXJlIG5vdCBpbnN0YW5jZSBvZiBPYmplY3QgYW5kIHRocm93cyBleGNlcHRpb25cbiAgLy8gZm9yIGRlbGV0ZS4gSW5zdGVhZCB3ZSB0cnkgdG8gdXNlIHJlbW92ZUF0dHJpYnV0ZVxuICBpZiAoJ3JlbW92ZUF0dHJpYnV0ZScgaW4gb2JqKSB7XG4gICAgb2JqLnJlbW92ZUF0dHJpYnV0ZShnb29nLlVJRF9QUk9QRVJUWV8pO1xuICB9XG4gIC8qKiBAcHJlc2VydmVUcnkgKi9cbiAgdHJ5IHtcbiAgICBkZWxldGUgb2JqW2dvb2cuVUlEX1BST1BFUlRZX107XG4gIH0gY2F0Y2ggKGV4KSB7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBOYW1lIGZvciB1bmlxdWUgSUQgcHJvcGVydHkuIEluaXRpYWxpemVkIGluIGEgd2F5IHRvIGhlbHAgYXZvaWQgY29sbGlzaW9uc1xuICogd2l0aCBvdGhlciBjbG9zdXJlIGphdmFzY3JpcHQgb24gdGhlIHNhbWUgcGFnZS5cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5nb29nLlVJRF9QUk9QRVJUWV8gPSAnY2xvc3VyZV91aWRfJyArXG4gICAgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMjE0NzQ4MzY0OCkudG9TdHJpbmcoMzYpO1xuXG5cbi8qKlxuICogQ291bnRlciBmb3IgVUlELlxuICogQHR5cGUge251bWJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbmdvb2cudWlkQ291bnRlcl8gPSAwO1xuXG5cbi8qKlxuICogQWRkcyBhIGhhc2ggY29kZSBmaWVsZCB0byBhbiBvYmplY3QuIFRoZSBoYXNoIGNvZGUgaXMgdW5pcXVlIGZvciB0aGVcbiAqIGdpdmVuIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBnZXQgdGhlIGhhc2ggY29kZSBmb3IuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBoYXNoIGNvZGUgZm9yIHRoZSBvYmplY3QuXG4gKiBAZGVwcmVjYXRlZCBVc2UgZ29vZy5nZXRVaWQgaW5zdGVhZC5cbiAqL1xuZ29vZy5nZXRIYXNoQ29kZSA9IGdvb2cuZ2V0VWlkO1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgaGFzaCBjb2RlIGZpZWxkIGZyb20gYW4gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIHJlbW92ZSB0aGUgZmllbGQgZnJvbS5cbiAqIEBkZXByZWNhdGVkIFVzZSBnb29nLnJlbW92ZVVpZCBpbnN0ZWFkLlxuICovXG5nb29nLnJlbW92ZUhhc2hDb2RlID0gZ29vZy5yZW1vdmVVaWQ7XG5cblxuLyoqXG4gKiBDbG9uZXMgYSB2YWx1ZS4gVGhlIGlucHV0IG1heSBiZSBhbiBPYmplY3QsIEFycmF5LCBvciBiYXNpYyB0eXBlLiBPYmplY3RzIGFuZFxuICogYXJyYXlzIHdpbGwgYmUgY2xvbmVkIHJlY3Vyc2l2ZWx5LlxuICpcbiAqIFdBUk5JTkdTOlxuICogPGNvZGU+Z29vZy5jbG9uZU9iamVjdDwvY29kZT4gZG9lcyBub3QgZGV0ZWN0IHJlZmVyZW5jZSBsb29wcy4gT2JqZWN0cyB0aGF0XG4gKiByZWZlciB0byB0aGVtc2VsdmVzIHdpbGwgY2F1c2UgaW5maW5pdGUgcmVjdXJzaW9uLlxuICpcbiAqIDxjb2RlPmdvb2cuY2xvbmVPYmplY3Q8L2NvZGU+IGlzIHVuYXdhcmUgb2YgdW5pcXVlIGlkZW50aWZpZXJzLCBhbmQgY29waWVzXG4gKiBVSURzIGNyZWF0ZWQgYnkgPGNvZGU+Z2V0VWlkPC9jb2RlPiBpbnRvIGNsb25lZCByZXN1bHRzLlxuICpcbiAqIEBwYXJhbSB7Kn0gb2JqIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAqIEByZXR1cm4geyp9IEEgY2xvbmUgb2YgdGhlIGlucHV0IHZhbHVlLlxuICogQGRlcHJlY2F0ZWQgZ29vZy5jbG9uZU9iamVjdCBpcyB1bnNhZmUuIFByZWZlciB0aGUgZ29vZy5vYmplY3QgbWV0aG9kcy5cbiAqL1xuZ29vZy5jbG9uZU9iamVjdCA9IGZ1bmN0aW9uKG9iaikge1xuICB2YXIgdHlwZSA9IGdvb2cudHlwZU9mKG9iaik7XG4gIGlmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2FycmF5Jykge1xuICAgIGlmIChvYmouY2xvbmUpIHtcbiAgICAgIHJldHVybiBvYmouY2xvbmUoKTtcbiAgICB9XG4gICAgdmFyIGNsb25lID0gdHlwZSA9PSAnYXJyYXknID8gW10gOiB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBjbG9uZVtrZXldID0gZ29vZy5jbG9uZU9iamVjdChvYmpba2V5XSk7XG4gICAgfVxuICAgIHJldHVybiBjbG9uZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG5cbi8qKlxuICogRm9yd2FyZCBkZWNsYXJhdGlvbiBmb3IgdGhlIGNsb25lIG1ldGhvZC4gVGhpcyBpcyBuZWNlc3NhcnkgdW50aWwgdGhlXG4gKiBjb21waWxlciBjYW4gYmV0dGVyIHN1cHBvcnQgZHVjay10eXBpbmcgY29uc3RydWN0cyBhcyB1c2VkIGluXG4gKiBnb29nLmNsb25lT2JqZWN0LlxuICpcbiAqIFRPRE8oYnJlbm5lbWFuKTogUmVtb3ZlIG9uY2UgdGhlIEpTQ29tcGlsZXIgY2FuIGluZmVyIHRoYXQgdGhlIGNoZWNrIGZvclxuICogcHJvdG8uY2xvbmUgaXMgc2FmZSBpbiBnb29nLmNsb25lT2JqZWN0LlxuICpcbiAqIEB0eXBlIHtGdW5jdGlvbn1cbiAqL1xuT2JqZWN0LnByb3RvdHlwZS5jbG9uZTtcblxuXG4vKipcbiAqIEEgbmF0aXZlIGltcGxlbWVudGF0aW9uIG9mIGdvb2cuYmluZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEEgZnVuY3Rpb24gdG8gcGFydGlhbGx5IGFwcGx5LlxuICogQHBhcmFtIHtPYmplY3R8dW5kZWZpbmVkfSBzZWxmT2JqIFNwZWNpZmllcyB0aGUgb2JqZWN0IHdoaWNoIHx0aGlzfCBzaG91bGRcbiAqICAgICBwb2ludCB0byB3aGVuIHRoZSBmdW5jdGlvbiBpcyBydW4uXG4gKiBAcGFyYW0gey4uLip9IHZhcl9hcmdzIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRoYXQgYXJlIHBhcnRpYWxseVxuICogICAgIGFwcGxpZWQgdG8gdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybiB7IUZ1bmN0aW9ufSBBIHBhcnRpYWxseS1hcHBsaWVkIGZvcm0gb2YgdGhlIGZ1bmN0aW9uIGJpbmQoKSB3YXNcbiAqICAgICBpbnZva2VkIGFzIGEgbWV0aG9kIG9mLlxuICogQHByaXZhdGVcbiAqIEBzdXBwcmVzcyB7ZGVwcmVjYXRlZH0gVGhlIGNvbXBpbGVyIHRoaW5rcyB0aGF0IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG4gKiAgICAgaXMgZGVwcmVjYXRlZCBiZWNhdXNlIHNvbWUgcGVvcGxlIGhhdmUgZGVjbGFyZWQgYSBwdXJlLUpTIHZlcnNpb24uXG4gKiAgICAgT25seSB0aGUgcHVyZS1KUyB2ZXJzaW9uIGlzIHRydWx5IGRlcHJlY2F0ZWQuXG4gKi9cbmdvb2cuYmluZE5hdGl2ZV8gPSBmdW5jdGlvbihmbiwgc2VsZk9iaiwgdmFyX2FyZ3MpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IUZ1bmN0aW9ufSAqLyAoZm4uY2FsbC5hcHBseShmbi5iaW5kLCBhcmd1bWVudHMpKTtcbn07XG5cblxuLyoqXG4gKiBBIHB1cmUtSlMgaW1wbGVtZW50YXRpb24gb2YgZ29vZy5iaW5kLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQSBmdW5jdGlvbiB0byBwYXJ0aWFsbHkgYXBwbHkuXG4gKiBAcGFyYW0ge09iamVjdHx1bmRlZmluZWR9IHNlbGZPYmogU3BlY2lmaWVzIHRoZSBvYmplY3Qgd2hpY2ggfHRoaXN8IHNob3VsZFxuICogICAgIHBvaW50IHRvIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIHJ1bi5cbiAqIEBwYXJhbSB7Li4uKn0gdmFyX2FyZ3MgQWRkaXRpb25hbCBhcmd1bWVudHMgdGhhdCBhcmUgcGFydGlhbGx5XG4gKiAgICAgYXBwbGllZCB0byB0aGUgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHshRnVuY3Rpb259IEEgcGFydGlhbGx5LWFwcGxpZWQgZm9ybSBvZiB0aGUgZnVuY3Rpb24gYmluZCgpIHdhc1xuICogICAgIGludm9rZWQgYXMgYSBtZXRob2Qgb2YuXG4gKiBAcHJpdmF0ZVxuICovXG5nb29nLmJpbmRKc18gPSBmdW5jdGlvbihmbiwgc2VsZk9iaiwgdmFyX2FyZ3MpIHtcbiAgaWYgKCFmbikge1xuICAgIHRocm93IG5ldyBFcnJvcigpO1xuICB9XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgLy8gUHJlcGVuZCB0aGUgYm91bmQgYXJndW1lbnRzIHRvIHRoZSBjdXJyZW50IGFyZ3VtZW50cy5cbiAgICAgIHZhciBuZXdBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KG5ld0FyZ3MsIGJvdW5kQXJncyk7XG4gICAgICByZXR1cm4gZm4uYXBwbHkoc2VsZk9iaiwgbmV3QXJncyk7XG4gICAgfTtcblxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmbi5hcHBseShzZWxmT2JqLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cbn07XG5cblxuLyoqXG4gKiBQYXJ0aWFsbHkgYXBwbGllcyB0aGlzIGZ1bmN0aW9uIHRvIGEgcGFydGljdWxhciAndGhpcyBvYmplY3QnIGFuZCB6ZXJvIG9yXG4gKiBtb3JlIGFyZ3VtZW50cy4gVGhlIHJlc3VsdCBpcyBhIG5ldyBmdW5jdGlvbiB3aXRoIHNvbWUgYXJndW1lbnRzIG9mIHRoZSBmaXJzdFxuICogZnVuY3Rpb24gcHJlLWZpbGxlZCBhbmQgdGhlIHZhbHVlIG9mIHx0aGlzfCAncHJlLXNwZWNpZmllZCcuPGJyPjxicj5cbiAqXG4gKiBSZW1haW5pbmcgYXJndW1lbnRzIHNwZWNpZmllZCBhdCBjYWxsLXRpbWUgYXJlIGFwcGVuZGVkIHRvIHRoZSBwcmUtXG4gKiBzcGVjaWZpZWQgb25lcy48YnI+PGJyPlxuICpcbiAqIEFsc28gc2VlOiB7QGxpbmsgI3BhcnRpYWx9Ljxicj48YnI+XG4gKlxuICogVXNhZ2U6XG4gKiA8cHJlPnZhciBiYXJNZXRoQm91bmQgPSBiaW5kKG15RnVuY3Rpb24sIG15T2JqLCAnYXJnMScsICdhcmcyJyk7XG4gKiBiYXJNZXRoQm91bmQoJ2FyZzMnLCAnYXJnNCcpOzwvcHJlPlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEEgZnVuY3Rpb24gdG8gcGFydGlhbGx5IGFwcGx5LlxuICogQHBhcmFtIHtPYmplY3R8dW5kZWZpbmVkfSBzZWxmT2JqIFNwZWNpZmllcyB0aGUgb2JqZWN0IHdoaWNoIHx0aGlzfCBzaG91bGRcbiAqICAgICBwb2ludCB0byB3aGVuIHRoZSBmdW5jdGlvbiBpcyBydW4uXG4gKiBAcGFyYW0gey4uLip9IHZhcl9hcmdzIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRoYXQgYXJlIHBhcnRpYWxseVxuICogICAgIGFwcGxpZWQgdG8gdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybiB7IUZ1bmN0aW9ufSBBIHBhcnRpYWxseS1hcHBsaWVkIGZvcm0gb2YgdGhlIGZ1bmN0aW9uIGJpbmQoKSB3YXNcbiAqICAgICBpbnZva2VkIGFzIGEgbWV0aG9kIG9mLlxuICogQHN1cHByZXNzIHtkZXByZWNhdGVkfSBTZWUgYWJvdmUuXG4gKi9cbmdvb2cuYmluZCA9IGZ1bmN0aW9uKGZuLCBzZWxmT2JqLCB2YXJfYXJncykge1xuICAvLyBUT0RPKG5pY2tzYW50b3MpOiBuYXJyb3cgdGhlIHR5cGUgc2lnbmF0dXJlLlxuICBpZiAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgJiZcbiAgICAgIC8vIE5PVEUobmlja3NhbnRvcyk6IFNvbWVib2R5IHB1bGxlZCBiYXNlLmpzIGludG8gdGhlIGRlZmF1bHRcbiAgICAgIC8vIENocm9tZSBleHRlbnNpb24gZW52aXJvbm1lbnQuIFRoaXMgbWVhbnMgdGhhdCBmb3IgQ2hyb21lIGV4dGVuc2lvbnMsXG4gICAgICAvLyB0aGV5IGdldCB0aGUgaW1wbGVtZW50YXRpb24gb2YgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgdGhhdFxuICAgICAgLy8gY2FsbHMgZ29vZy5iaW5kIGluc3RlYWQgb2YgdGhlIG5hdGl2ZSBvbmUuIEV2ZW4gd29yc2UsIHdlIGRvbid0IHdhbnRcbiAgICAgIC8vIHRvIGludHJvZHVjZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbiBnb29nLmJpbmQgYW5kXG4gICAgICAvLyBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCwgc28gd2UgaGF2ZSB0byBoYWNrIHRoaXMgdG8gbWFrZSBzdXJlIGl0XG4gICAgICAvLyB3b3JrcyBjb3JyZWN0bHkuXG4gICAgICBGdW5jdGlvbi5wcm90b3R5cGUuYmluZC50b1N0cmluZygpLmluZGV4T2YoJ25hdGl2ZSBjb2RlJykgIT0gLTEpIHtcbiAgICBnb29nLmJpbmQgPSBnb29nLmJpbmROYXRpdmVfO1xuICB9IGVsc2Uge1xuICAgIGdvb2cuYmluZCA9IGdvb2cuYmluZEpzXztcbiAgfVxuICByZXR1cm4gZ29vZy5iaW5kLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59O1xuXG5cbi8qKlxuICogTGlrZSBiaW5kKCksIGV4Y2VwdCB0aGF0IGEgJ3RoaXMgb2JqZWN0JyBpcyBub3QgcmVxdWlyZWQuIFVzZWZ1bCB3aGVuIHRoZVxuICogdGFyZ2V0IGZ1bmN0aW9uIGlzIGFscmVhZHkgYm91bmQuXG4gKlxuICogVXNhZ2U6XG4gKiB2YXIgZyA9IHBhcnRpYWwoZiwgYXJnMSwgYXJnMik7XG4gKiBnKGFyZzMsIGFyZzQpO1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEEgZnVuY3Rpb24gdG8gcGFydGlhbGx5IGFwcGx5LlxuICogQHBhcmFtIHsuLi4qfSB2YXJfYXJncyBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0aGF0IGFyZSBwYXJ0aWFsbHlcbiAqICAgICBhcHBsaWVkIHRvIGZuLlxuICogQHJldHVybiB7IUZ1bmN0aW9ufSBBIHBhcnRpYWxseS1hcHBsaWVkIGZvcm0gb2YgdGhlIGZ1bmN0aW9uIGJpbmQoKSB3YXNcbiAqICAgICBpbnZva2VkIGFzIGEgbWV0aG9kIG9mLlxuICovXG5nb29nLnBhcnRpYWwgPSBmdW5jdGlvbihmbiwgdmFyX2FyZ3MpIHtcbiAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgLy8gUHJlcGVuZCB0aGUgYm91bmQgYXJndW1lbnRzIHRvIHRoZSBjdXJyZW50IGFyZ3VtZW50cy5cbiAgICB2YXIgbmV3QXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgbmV3QXJncy51bnNoaWZ0LmFwcGx5KG5ld0FyZ3MsIGFyZ3MpO1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBuZXdBcmdzKTtcbiAgfTtcbn07XG5cblxuLyoqXG4gKiBDb3BpZXMgYWxsIHRoZSBtZW1iZXJzIG9mIGEgc291cmNlIG9iamVjdCB0byBhIHRhcmdldCBvYmplY3QuIFRoaXMgbWV0aG9kXG4gKiBkb2VzIG5vdCB3b3JrIG9uIGFsbCBicm93c2VycyBmb3IgYWxsIG9iamVjdHMgdGhhdCBjb250YWluIGtleXMgc3VjaCBhc1xuICogdG9TdHJpbmcgb3IgaGFzT3duUHJvcGVydHkuIFVzZSBnb29nLm9iamVjdC5leHRlbmQgZm9yIHRoaXMgcHVycG9zZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXQgVGFyZ2V0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBTb3VyY2UuXG4gKi9cbmdvb2cubWl4aW4gPSBmdW5jdGlvbih0YXJnZXQsIHNvdXJjZSkge1xuICBmb3IgKHZhciB4IGluIHNvdXJjZSkge1xuICAgIHRhcmdldFt4XSA9IHNvdXJjZVt4XTtcbiAgfVxuXG4gIC8vIEZvciBJRTcgb3IgbG93ZXIsIHRoZSBmb3ItaW4tbG9vcCBkb2VzIG5vdCBjb250YWluIGFueSBwcm9wZXJ0aWVzIHRoYXQgYXJlXG4gIC8vIG5vdCBlbnVtZXJhYmxlIG9uIHRoZSBwcm90b3R5cGUgb2JqZWN0IChmb3IgZXhhbXBsZSwgaXNQcm90b3R5cGVPZiBmcm9tXG4gIC8vIE9iamVjdC5wcm90b3R5cGUpIGJ1dCBhbHNvIGl0IHdpbGwgbm90IGluY2x1ZGUgJ3JlcGxhY2UnIG9uIG9iamVjdHMgdGhhdFxuICAvLyBleHRlbmQgU3RyaW5nIGFuZCBjaGFuZ2UgJ3JlcGxhY2UnIChub3QgdGhhdCBpdCBpcyBjb21tb24gZm9yIGFueW9uZSB0b1xuICAvLyBleHRlbmQgYW55dGhpbmcgZXhjZXB0IE9iamVjdCkuXG59O1xuXG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfSBBbiBpbnRlZ2VyIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kc1xuICogICAgIGJldHdlZW4gbWlkbmlnaHQsIEphbnVhcnkgMSwgMTk3MCBhbmQgdGhlIGN1cnJlbnQgdGltZS5cbiAqL1xuZ29vZy5ub3cgPSBEYXRlLm5vdyB8fCAoZnVuY3Rpb24oKSB7XG4gIC8vIFVuYXJ5IHBsdXMgb3BlcmF0b3IgY29udmVydHMgaXRzIG9wZXJhbmQgdG8gYSBudW1iZXIgd2hpY2ggaW4gdGhlIGNhc2Ugb2ZcbiAgLy8gYSBkYXRlIGlzIGRvbmUgYnkgY2FsbGluZyBnZXRUaW1lKCkuXG4gIHJldHVybiArbmV3IERhdGUoKTtcbn0pO1xuXG5cbi8qKlxuICogRXZhbHMgamF2YXNjcmlwdCBpbiB0aGUgZ2xvYmFsIHNjb3BlLiAgSW4gSUUgdGhpcyB1c2VzIGV4ZWNTY3JpcHQsIG90aGVyXG4gKiBicm93c2VycyB1c2UgZ29vZy5nbG9iYWwuZXZhbC4gSWYgZ29vZy5nbG9iYWwuZXZhbCBkb2VzIG5vdCBldmFsdWF0ZSBpbiB0aGVcbiAqIGdsb2JhbCBzY29wZSAoZm9yIGV4YW1wbGUsIGluIFNhZmFyaSksIGFwcGVuZHMgYSBzY3JpcHQgdGFnIGluc3RlYWQuXG4gKiBUaHJvd3MgYW4gZXhjZXB0aW9uIGlmIG5laXRoZXIgZXhlY1NjcmlwdCBvciBldmFsIGlzIGRlZmluZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gc2NyaXB0IEphdmFTY3JpcHQgc3RyaW5nLlxuICovXG5nb29nLmdsb2JhbEV2YWwgPSBmdW5jdGlvbihzY3JpcHQpIHtcbiAgaWYgKGdvb2cuZ2xvYmFsLmV4ZWNTY3JpcHQpIHtcbiAgICBnb29nLmdsb2JhbC5leGVjU2NyaXB0KHNjcmlwdCwgJ0phdmFTY3JpcHQnKTtcbiAgfSBlbHNlIGlmIChnb29nLmdsb2JhbC5ldmFsKSB7XG4gICAgLy8gVGVzdCB0byBzZWUgaWYgZXZhbCB3b3Jrc1xuICAgIGlmIChnb29nLmV2YWxXb3Jrc0Zvckdsb2JhbHNfID09IG51bGwpIHtcbiAgICAgIGdvb2cuZ2xvYmFsLmV2YWwoJ3ZhciBfZXRfID0gMTsnKTtcbiAgICAgIGlmICh0eXBlb2YgZ29vZy5nbG9iYWxbJ19ldF8nXSAhPSAndW5kZWZpbmVkJykge1xuICAgICAgICBkZWxldGUgZ29vZy5nbG9iYWxbJ19ldF8nXTtcbiAgICAgICAgZ29vZy5ldmFsV29ya3NGb3JHbG9iYWxzXyA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnb29nLmV2YWxXb3Jrc0Zvckdsb2JhbHNfID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGdvb2cuZXZhbFdvcmtzRm9yR2xvYmFsc18pIHtcbiAgICAgIGdvb2cuZ2xvYmFsLmV2YWwoc2NyaXB0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGRvYyA9IGdvb2cuZ2xvYmFsLmRvY3VtZW50O1xuICAgICAgdmFyIHNjcmlwdEVsdCA9IGRvYy5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgIHNjcmlwdEVsdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gICAgICBzY3JpcHRFbHQuZGVmZXIgPSBmYWxzZTtcbiAgICAgIC8vIE5vdGUodXNlcik6IGNhbid0IHVzZSAuaW5uZXJIVE1MIHNpbmNlIFwidCgnPHRlc3Q+JylcIiB3aWxsIGZhaWwgYW5kXG4gICAgICAvLyAudGV4dCBkb2Vzbid0IHdvcmsgaW4gU2FmYXJpIDIuICBUaGVyZWZvcmUgd2UgYXBwZW5kIGEgdGV4dCBub2RlLlxuICAgICAgc2NyaXB0RWx0LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZShzY3JpcHQpKTtcbiAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdEVsdCk7XG4gICAgICBkb2MuYm9keS5yZW1vdmVDaGlsZChzY3JpcHRFbHQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBFcnJvcignZ29vZy5nbG9iYWxFdmFsIG5vdCBhdmFpbGFibGUnKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB3ZSBjYW4gY2FsbCAnZXZhbCcgZGlyZWN0bHkgdG8gZXZhbCBjb2RlIGluIHRoZVxuICogZ2xvYmFsIHNjb3BlLiBTZXQgdG8gYSBCb29sZWFuIGJ5IHRoZSBmaXJzdCBjYWxsIHRvIGdvb2cuZ2xvYmFsRXZhbCAod2hpY2hcbiAqIGVtcGlyaWNhbGx5IHRlc3RzIHdoZXRoZXIgZXZhbCB3b3JrcyBmb3IgZ2xvYmFscykuIEBzZWUgZ29vZy5nbG9iYWxFdmFsXG4gKiBAdHlwZSB7P2Jvb2xlYW59XG4gKiBAcHJpdmF0ZVxuICovXG5nb29nLmV2YWxXb3Jrc0Zvckdsb2JhbHNfID0gbnVsbDtcblxuXG4vKipcbiAqIE9wdGlvbmFsIG1hcCBvZiBDU1MgY2xhc3MgbmFtZXMgdG8gb2JmdXNjYXRlZCBuYW1lcyB1c2VkIHdpdGhcbiAqIGdvb2cuZ2V0Q3NzTmFtZSgpLlxuICogQHR5cGUge09iamVjdHx1bmRlZmluZWR9XG4gKiBAcHJpdmF0ZVxuICogQHNlZSBnb29nLnNldENzc05hbWVNYXBwaW5nXG4gKi9cbmdvb2cuY3NzTmFtZU1hcHBpbmdfO1xuXG5cbi8qKlxuICogT3B0aW9uYWwgb2JmdXNjYXRpb24gc3R5bGUgZm9yIENTUyBjbGFzcyBuYW1lcy4gU2hvdWxkIGJlIHNldCB0byBlaXRoZXJcbiAqICdCWV9XSE9MRScgb3IgJ0JZX1BBUlQnIGlmIGRlZmluZWQuXG4gKiBAdHlwZSB7c3RyaW5nfHVuZGVmaW5lZH1cbiAqIEBwcml2YXRlXG4gKiBAc2VlIGdvb2cuc2V0Q3NzTmFtZU1hcHBpbmdcbiAqL1xuZ29vZy5jc3NOYW1lTWFwcGluZ1N0eWxlXztcblxuXG4vKipcbiAqIEhhbmRsZXMgc3RyaW5ncyB0aGF0IGFyZSBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIENTUyBjbGFzcyBuYW1lcy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHdvcmtzIGluIHRhbmRlbSB3aXRoIEBzZWUgZ29vZy5zZXRDc3NOYW1lTWFwcGluZy5cbiAqXG4gKiBXaXRob3V0IGFueSBtYXBwaW5nIHNldCwgdGhlIGFyZ3VtZW50cyBhcmUgc2ltcGxlIGpvaW5lZCB3aXRoIGFcbiAqIGh5cGhlbiBhbmQgcGFzc2VkIHRocm91Z2ggdW5hbHRlcmVkLlxuICpcbiAqIFdoZW4gdGhlcmUgaXMgYSBtYXBwaW5nLCB0aGVyZSBhcmUgdHdvIHBvc3NpYmxlIHN0eWxlcyBpbiB3aGljaFxuICogdGhlc2UgbWFwcGluZ3MgYXJlIHVzZWQuIEluIHRoZSBCWV9QQVJUIHN0eWxlLCBlYWNoIHBhcnQgKGkuZS4gaW5cbiAqIGJldHdlZW4gaHlwaGVucykgb2YgdGhlIHBhc3NlZCBpbiBjc3MgbmFtZSBpcyByZXdyaXR0ZW4gYWNjb3JkaW5nXG4gKiB0byB0aGUgbWFwLiBJbiB0aGUgQllfV0hPTEUgc3R5bGUsIHRoZSBmdWxsIGNzcyBuYW1lIGlzIGxvb2tlZCB1cCBpblxuICogdGhlIG1hcCBkaXJlY3RseS4gSWYgYSByZXdyaXRlIGlzIG5vdCBzcGVjaWZpZWQgYnkgdGhlIG1hcCwgdGhlXG4gKiBjb21waWxlciB3aWxsIG91dHB1dCBhIHdhcm5pbmcuXG4gKlxuICogV2hlbiB0aGUgbWFwcGluZyBpcyBwYXNzZWQgdG8gdGhlIGNvbXBpbGVyLCBpdCB3aWxsIHJlcGxhY2UgY2FsbHNcbiAqIHRvIGdvb2cuZ2V0Q3NzTmFtZSB3aXRoIHRoZSBzdHJpbmdzIGZyb20gdGhlIG1hcHBpbmcsIGUuZy5cbiAqICAgICB2YXIgeCA9IGdvb2cuZ2V0Q3NzTmFtZSgnZm9vJyk7XG4gKiAgICAgdmFyIHkgPSBnb29nLmdldENzc05hbWUodGhpcy5iYXNlQ2xhc3MsICdhY3RpdmUnKTtcbiAqICBiZWNvbWVzOlxuICogICAgIHZhciB4PSAnZm9vJztcbiAqICAgICB2YXIgeSA9IHRoaXMuYmFzZUNsYXNzICsgJy1hY3RpdmUnO1xuICpcbiAqIElmIG9uZSBhcmd1bWVudCBpcyBwYXNzZWQgaXQgd2lsbCBiZSBwcm9jZXNzZWQsIGlmIHR3byBhcmUgcGFzc2VkXG4gKiBvbmx5IHRoZSBtb2RpZmllciB3aWxsIGJlIHByb2Nlc3NlZCwgYXMgaXQgaXMgYXNzdW1lZCB0aGUgZmlyc3RcbiAqIGFyZ3VtZW50IHdhcyBnZW5lcmF0ZWQgYXMgYSByZXN1bHQgb2YgY2FsbGluZyBnb29nLmdldENzc05hbWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSBUaGUgY2xhc3MgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0X21vZGlmaWVyIEEgbW9kaWZpZXIgdG8gYmUgYXBwZW5kZWQgdG8gdGhlIGNsYXNzIG5hbWUuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjbGFzcyBuYW1lIG9yIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBjbGFzcyBuYW1lIGFuZFxuICogICAgIHRoZSBtb2RpZmllci5cbiAqL1xuZ29vZy5nZXRDc3NOYW1lID0gZnVuY3Rpb24oY2xhc3NOYW1lLCBvcHRfbW9kaWZpZXIpIHtcbiAgdmFyIGdldE1hcHBpbmcgPSBmdW5jdGlvbihjc3NOYW1lKSB7XG4gICAgcmV0dXJuIGdvb2cuY3NzTmFtZU1hcHBpbmdfW2Nzc05hbWVdIHx8IGNzc05hbWU7XG4gIH07XG5cbiAgdmFyIHJlbmFtZUJ5UGFydHMgPSBmdW5jdGlvbihjc3NOYW1lKSB7XG4gICAgLy8gUmVtYXAgYWxsIHRoZSBwYXJ0cyBpbmRpdmlkdWFsbHkuXG4gICAgdmFyIHBhcnRzID0gY3NzTmFtZS5zcGxpdCgnLScpO1xuICAgIHZhciBtYXBwZWQgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBtYXBwZWQucHVzaChnZXRNYXBwaW5nKHBhcnRzW2ldKSk7XG4gICAgfVxuICAgIHJldHVybiBtYXBwZWQuam9pbignLScpO1xuICB9O1xuXG4gIHZhciByZW5hbWU7XG4gIGlmIChnb29nLmNzc05hbWVNYXBwaW5nXykge1xuICAgIHJlbmFtZSA9IGdvb2cuY3NzTmFtZU1hcHBpbmdTdHlsZV8gPT0gJ0JZX1dIT0xFJyA/XG4gICAgICAgIGdldE1hcHBpbmcgOiByZW5hbWVCeVBhcnRzO1xuICB9IGVsc2Uge1xuICAgIHJlbmFtZSA9IGZ1bmN0aW9uKGEpIHtcbiAgICAgIHJldHVybiBhO1xuICAgIH07XG4gIH1cblxuICBpZiAob3B0X21vZGlmaWVyKSB7XG4gICAgcmV0dXJuIGNsYXNzTmFtZSArICctJyArIHJlbmFtZShvcHRfbW9kaWZpZXIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiByZW5hbWUoY2xhc3NOYW1lKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIFNldHMgdGhlIG1hcCB0byBjaGVjayB3aGVuIHJldHVybmluZyBhIHZhbHVlIGZyb20gZ29vZy5nZXRDc3NOYW1lKCkuIEV4YW1wbGU6XG4gKiA8cHJlPlxuICogZ29vZy5zZXRDc3NOYW1lTWFwcGluZyh7XG4gKiAgIFwiZ29vZ1wiOiBcImFcIixcbiAqICAgXCJkaXNhYmxlZFwiOiBcImJcIixcbiAqIH0pO1xuICpcbiAqIHZhciB4ID0gZ29vZy5nZXRDc3NOYW1lKCdnb29nJyk7XG4gKiAvLyBUaGUgZm9sbG93aW5nIGV2YWx1YXRlcyB0bzogXCJhIGEtYlwiLlxuICogZ29vZy5nZXRDc3NOYW1lKCdnb29nJykgKyAnICcgKyBnb29nLmdldENzc05hbWUoeCwgJ2Rpc2FibGVkJylcbiAqIDwvcHJlPlxuICogV2hlbiBkZWNsYXJlZCBhcyBhIG1hcCBvZiBzdHJpbmcgbGl0ZXJhbHMgdG8gc3RyaW5nIGxpdGVyYWxzLCB0aGUgSlNDb21waWxlclxuICogd2lsbCByZXBsYWNlIGFsbCBjYWxscyB0byBnb29nLmdldENzc05hbWUoKSB1c2luZyB0aGUgc3VwcGxpZWQgbWFwIGlmIHRoZVxuICogLS1jbG9zdXJlX3Bhc3MgZmxhZyBpcyBzZXQuXG4gKlxuICogQHBhcmFtIHshT2JqZWN0fSBtYXBwaW5nIEEgbWFwIG9mIHN0cmluZ3MgdG8gc3RyaW5ncyB3aGVyZSBrZXlzIGFyZSBwb3NzaWJsZVxuICogICAgIGFyZ3VtZW50cyB0byBnb29nLmdldENzc05hbWUoKSBhbmQgdmFsdWVzIGFyZSB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXNcbiAqICAgICB0aGF0IHNob3VsZCBiZSByZXR1cm5lZC5cbiAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0X3N0eWxlIFRoZSBzdHlsZSBvZiBjc3MgbmFtZSBtYXBwaW5nLiBUaGVyZSBhcmUgdHdvIHZhbGlkXG4gKiAgICAgb3B0aW9uczogJ0JZX1BBUlQnLCBhbmQgJ0JZX1dIT0xFJy5cbiAqIEBzZWUgZ29vZy5nZXRDc3NOYW1lIGZvciBhIGRlc2NyaXB0aW9uLlxuICovXG5nb29nLnNldENzc05hbWVNYXBwaW5nID0gZnVuY3Rpb24obWFwcGluZywgb3B0X3N0eWxlKSB7XG4gIGdvb2cuY3NzTmFtZU1hcHBpbmdfID0gbWFwcGluZztcbiAgZ29vZy5jc3NOYW1lTWFwcGluZ1N0eWxlXyA9IG9wdF9zdHlsZTtcbn07XG5cblxuLyoqXG4gKiBUbyB1c2UgQ1NTIHJlbmFtaW5nIGluIGNvbXBpbGVkIG1vZGUsIG9uZSBvZiB0aGUgaW5wdXQgZmlsZXMgc2hvdWxkIGhhdmUgYVxuICogY2FsbCB0byBnb29nLnNldENzc05hbWVNYXBwaW5nKCkgd2l0aCBhbiBvYmplY3QgbGl0ZXJhbCB0aGF0IHRoZSBKU0NvbXBpbGVyXG4gKiBjYW4gZXh0cmFjdCBhbmQgdXNlIHRvIHJlcGxhY2UgYWxsIGNhbGxzIHRvIGdvb2cuZ2V0Q3NzTmFtZSgpLiBJbiB1bmNvbXBpbGVkXG4gKiBtb2RlLCBKYXZhU2NyaXB0IGNvZGUgc2hvdWxkIGJlIGxvYWRlZCBiZWZvcmUgdGhpcyBiYXNlLmpzIGZpbGUgdGhhdCBkZWNsYXJlc1xuICogYSBnbG9iYWwgdmFyaWFibGUsIENMT1NVUkVfQ1NTX05BTUVfTUFQUElORywgd2hpY2ggaXMgdXNlZCBiZWxvdy4gVGhpcyBpc1xuICogdG8gZW5zdXJlIHRoYXQgdGhlIG1hcHBpbmcgaXMgbG9hZGVkIGJlZm9yZSBhbnkgY2FsbHMgdG8gZ29vZy5nZXRDc3NOYW1lKClcbiAqIGFyZSBtYWRlIGluIHVuY29tcGlsZWQgbW9kZS5cbiAqXG4gKiBBIGhvb2sgZm9yIG92ZXJyaWRpbmcgdGhlIENTUyBuYW1lIG1hcHBpbmcuXG4gKiBAdHlwZSB7T2JqZWN0fHVuZGVmaW5lZH1cbiAqL1xuZ29vZy5nbG9iYWwuQ0xPU1VSRV9DU1NfTkFNRV9NQVBQSU5HO1xuXG5cbmlmICghQ09NUElMRUQgJiYgZ29vZy5nbG9iYWwuQ0xPU1VSRV9DU1NfTkFNRV9NQVBQSU5HKSB7XG4gIC8vIFRoaXMgZG9lcyBub3QgY2FsbCBnb29nLnNldENzc05hbWVNYXBwaW5nKCkgYmVjYXVzZSB0aGUgSlNDb21waWxlclxuICAvLyByZXF1aXJlcyB0aGF0IGdvb2cuc2V0Q3NzTmFtZU1hcHBpbmcoKSBiZSBjYWxsZWQgd2l0aCBhbiBvYmplY3QgbGl0ZXJhbC5cbiAgZ29vZy5jc3NOYW1lTWFwcGluZ18gPSBnb29nLmdsb2JhbC5DTE9TVVJFX0NTU19OQU1FX01BUFBJTkc7XG59XG5cblxuLyoqXG4gKiBBYnN0cmFjdCBpbXBsZW1lbnRhdGlvbiBvZiBnb29nLmdldE1zZyBmb3IgdXNlIHdpdGggbG9jYWxpemVkIG1lc3NhZ2VzLlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciBUcmFuc2xhdGFibGUgc3RyaW5nLCBwbGFjZXMgaG9sZGVycyBpbiB0aGUgZm9ybSB7JGZvb30uXG4gKiBAcGFyYW0ge09iamVjdD19IG9wdF92YWx1ZXMgTWFwIG9mIHBsYWNlIGhvbGRlciBuYW1lIHRvIHZhbHVlLlxuICogQHJldHVybiB7c3RyaW5nfSBtZXNzYWdlIHdpdGggcGxhY2Vob2xkZXJzIGZpbGxlZC5cbiAqL1xuZ29vZy5nZXRNc2cgPSBmdW5jdGlvbihzdHIsIG9wdF92YWx1ZXMpIHtcbiAgdmFyIHZhbHVlcyA9IG9wdF92YWx1ZXMgfHwge307XG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZXMpIHtcbiAgICB2YXIgdmFsdWUgPSAoJycgKyB2YWx1ZXNba2V5XSkucmVwbGFjZSgvXFwkL2csICckJCQkJyk7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFxcXHtcXFxcJCcgKyBrZXkgKyAnXFxcXH0nLCAnZ2knKSwgdmFsdWUpO1xuICB9XG4gIHJldHVybiBzdHI7XG59O1xuXG5cbi8qKlxuICogRXhwb3NlcyBhbiB1bm9iZnVzY2F0ZWQgZ2xvYmFsIG5hbWVzcGFjZSBwYXRoIGZvciB0aGUgZ2l2ZW4gb2JqZWN0LlxuICogTm90ZSB0aGF0IGZpZWxkcyBvZiB0aGUgZXhwb3J0ZWQgb2JqZWN0ICp3aWxsKiBiZSBvYmZ1c2NhdGVkLFxuICogdW5sZXNzIHRoZXkgYXJlIGV4cG9ydGVkIGluIHR1cm4gdmlhIHRoaXMgZnVuY3Rpb24gb3JcbiAqIGdvb2cuZXhwb3J0UHJvcGVydHlcbiAqXG4gKiA8cD5BbHNvIGhhbmR5IGZvciBtYWtpbmcgcHVibGljIGl0ZW1zIHRoYXQgYXJlIGRlZmluZWQgaW4gYW5vbnltb3VzXG4gKiBjbG9zdXJlcy5cbiAqXG4gKiBleC4gZ29vZy5leHBvcnRTeW1ib2woJ3B1YmxpYy5wYXRoLkZvbycsIEZvbyk7XG4gKlxuICogZXguIGdvb2cuZXhwb3J0U3ltYm9sKCdwdWJsaWMucGF0aC5Gb28uc3RhdGljRnVuY3Rpb24nLFxuICogICAgICAgICAgICAgICAgICAgICAgIEZvby5zdGF0aWNGdW5jdGlvbik7XG4gKiAgICAgcHVibGljLnBhdGguRm9vLnN0YXRpY0Z1bmN0aW9uKCk7XG4gKlxuICogZXguIGdvb2cuZXhwb3J0U3ltYm9sKCdwdWJsaWMucGF0aC5Gb28ucHJvdG90eXBlLm15TWV0aG9kJyxcbiAqICAgICAgICAgICAgICAgICAgICAgICBGb28ucHJvdG90eXBlLm15TWV0aG9kKTtcbiAqICAgICBuZXcgcHVibGljLnBhdGguRm9vKCkubXlNZXRob2QoKTtcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHVibGljUGF0aCBVbm9iZnVzY2F0ZWQgbmFtZSB0byBleHBvcnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBPYmplY3QgdGhlIG5hbWUgc2hvdWxkIHBvaW50IHRvLlxuICogQHBhcmFtIHtPYmplY3Q9fSBvcHRfb2JqZWN0VG9FeHBvcnRUbyBUaGUgb2JqZWN0IHRvIGFkZCB0aGUgcGF0aCB0bzsgZGVmYXVsdFxuICogICAgIGlzIHxnb29nLmdsb2JhbHwuXG4gKi9cbmdvb2cuZXhwb3J0U3ltYm9sID0gZnVuY3Rpb24ocHVibGljUGF0aCwgb2JqZWN0LCBvcHRfb2JqZWN0VG9FeHBvcnRUbykge1xuICBnb29nLmV4cG9ydFBhdGhfKHB1YmxpY1BhdGgsIG9iamVjdCwgb3B0X29iamVjdFRvRXhwb3J0VG8pO1xufTtcblxuXG4vKipcbiAqIEV4cG9ydHMgYSBwcm9wZXJ0eSB1bm9iZnVzY2F0ZWQgaW50byB0aGUgb2JqZWN0J3MgbmFtZXNwYWNlLlxuICogZXguIGdvb2cuZXhwb3J0UHJvcGVydHkoRm9vLCAnc3RhdGljRnVuY3Rpb24nLCBGb28uc3RhdGljRnVuY3Rpb24pO1xuICogZXguIGdvb2cuZXhwb3J0UHJvcGVydHkoRm9vLnByb3RvdHlwZSwgJ215TWV0aG9kJywgRm9vLnByb3RvdHlwZS5teU1ldGhvZCk7XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IE9iamVjdCB3aG9zZSBzdGF0aWMgcHJvcGVydHkgaXMgYmVpbmcgZXhwb3J0ZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gcHVibGljTmFtZSBVbm9iZnVzY2F0ZWQgbmFtZSB0byBleHBvcnQuXG4gKiBAcGFyYW0geyp9IHN5bWJvbCBPYmplY3QgdGhlIG5hbWUgc2hvdWxkIHBvaW50IHRvLlxuICovXG5nb29nLmV4cG9ydFByb3BlcnR5ID0gZnVuY3Rpb24ob2JqZWN0LCBwdWJsaWNOYW1lLCBzeW1ib2wpIHtcbiAgb2JqZWN0W3B1YmxpY05hbWVdID0gc3ltYm9sO1xufTtcblxuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlci5cbiAqXG4gKiBVc2FnZTpcbiAqIDxwcmU+XG4gKiBmdW5jdGlvbiBQYXJlbnRDbGFzcyhhLCBiKSB7IH1cbiAqIFBhcmVudENsYXNzLnByb3RvdHlwZS5mb28gPSBmdW5jdGlvbihhKSB7IH1cbiAqXG4gKiBmdW5jdGlvbiBDaGlsZENsYXNzKGEsIGIsIGMpIHtcbiAqICAgZ29vZy5iYXNlKHRoaXMsIGEsIGIpO1xuICogfVxuICogZ29vZy5pbmhlcml0cyhDaGlsZENsYXNzLCBQYXJlbnRDbGFzcyk7XG4gKlxuICogdmFyIGNoaWxkID0gbmV3IENoaWxkQ2xhc3MoJ2EnLCAnYicsICdzZWUnKTtcbiAqIGNoaWxkLmZvbygpOyAvLyB3b3Jrc1xuICogPC9wcmU+XG4gKlxuICogSW4gYWRkaXRpb24sIGEgc3VwZXJjbGFzcycgaW1wbGVtZW50YXRpb24gb2YgYSBtZXRob2QgY2FuIGJlIGludm9rZWRcbiAqIGFzIGZvbGxvd3M6XG4gKlxuICogPHByZT5cbiAqIENoaWxkQ2xhc3MucHJvdG90eXBlLmZvbyA9IGZ1bmN0aW9uKGEpIHtcbiAqICAgQ2hpbGRDbGFzcy5zdXBlckNsYXNzXy5mb28uY2FsbCh0aGlzLCBhKTtcbiAqICAgLy8gb3RoZXIgY29kZVxuICogfTtcbiAqIDwvcHJlPlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNoaWxkQ3RvciBDaGlsZCBjbGFzcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcmVudEN0b3IgUGFyZW50IGNsYXNzLlxuICovXG5nb29nLmluaGVyaXRzID0gZnVuY3Rpb24oY2hpbGRDdG9yLCBwYXJlbnRDdG9yKSB7XG4gIC8qKiBAY29uc3RydWN0b3IgKi9cbiAgZnVuY3Rpb24gdGVtcEN0b3IoKSB7fTtcbiAgdGVtcEN0b3IucHJvdG90eXBlID0gcGFyZW50Q3Rvci5wcm90b3R5cGU7XG4gIGNoaWxkQ3Rvci5zdXBlckNsYXNzXyA9IHBhcmVudEN0b3IucHJvdG90eXBlO1xuICBjaGlsZEN0b3IucHJvdG90eXBlID0gbmV3IHRlbXBDdG9yKCk7XG4gIGNoaWxkQ3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjaGlsZEN0b3I7XG59O1xuXG5cbi8qKlxuICogQ2FsbCB1cCB0byB0aGUgc3VwZXJjbGFzcy5cbiAqXG4gKiBJZiB0aGlzIGlzIGNhbGxlZCBmcm9tIGEgY29uc3RydWN0b3IsIHRoZW4gdGhpcyBjYWxscyB0aGUgc3VwZXJjbGFzc1xuICogY29udHJ1Y3RvciB3aXRoIGFyZ3VtZW50cyAxLU4uXG4gKlxuICogSWYgdGhpcyBpcyBjYWxsZWQgZnJvbSBhIHByb3RvdHlwZSBtZXRob2QsIHRoZW4geW91IG11c3QgcGFzc1xuICogdGhlIG5hbWUgb2YgdGhlIG1ldGhvZCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIHRoaXMgZnVuY3Rpb24uIElmXG4gKiB5b3UgZG8gbm90LCB5b3Ugd2lsbCBnZXQgYSBydW50aW1lIGVycm9yLiBUaGlzIGNhbGxzIHRoZSBzdXBlcmNsYXNzJ1xuICogbWV0aG9kIHdpdGggYXJndW1lbnRzIDItTi5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIG9ubHkgd29ya3MgaWYgeW91IHVzZSBnb29nLmluaGVyaXRzIHRvIGV4cHJlc3NcbiAqIGluaGVyaXRhbmNlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB5b3VyIGNsYXNzZXMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBpcyBhIGNvbXBpbGVyIHByaW1pdGl2ZS4gQXQgY29tcGlsZS10aW1lLCB0aGVcbiAqIGNvbXBpbGVyIHdpbGwgZG8gbWFjcm8gZXhwYW5zaW9uIHRvIHJlbW92ZSBhIGxvdCBvZlxuICogdGhlIGV4dHJhIG92ZXJoZWFkIHRoYXQgdGhpcyBmdW5jdGlvbiBpbnRyb2R1Y2VzLiBUaGUgY29tcGlsZXJcbiAqIHdpbGwgYWxzbyBlbmZvcmNlIGEgbG90IG9mIHRoZSBhc3N1bXB0aW9ucyB0aGF0IHRoaXMgZnVuY3Rpb25cbiAqIG1ha2VzLCBhbmQgdHJlYXQgaXQgYXMgYSBjb21waWxlciBlcnJvciBpZiB5b3UgYnJlYWsgdGhlbS5cbiAqXG4gKiBAcGFyYW0geyFPYmplY3R9IG1lIFNob3VsZCBhbHdheXMgYmUgXCJ0aGlzXCIuXG4gKiBAcGFyYW0geyo9fSBvcHRfbWV0aG9kTmFtZSBUaGUgbWV0aG9kIG5hbWUgaWYgY2FsbGluZyBhIHN1cGVyIG1ldGhvZC5cbiAqIEBwYXJhbSB7Li4uKn0gdmFyX2FyZ3MgVGhlIHJlc3Qgb2YgdGhlIGFyZ3VtZW50cy5cbiAqIEByZXR1cm4geyp9IFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHN1cGVyY2xhc3MgbWV0aG9kLlxuICovXG5nb29nLmJhc2UgPSBmdW5jdGlvbihtZSwgb3B0X21ldGhvZE5hbWUsIHZhcl9hcmdzKSB7XG4gIHZhciBjYWxsZXIgPSBhcmd1bWVudHMuY2FsbGVlLmNhbGxlcjtcbiAgaWYgKGNhbGxlci5zdXBlckNsYXNzXykge1xuICAgIC8vIFRoaXMgaXMgYSBjb25zdHJ1Y3Rvci4gQ2FsbCB0aGUgc3VwZXJjbGFzcyBjb25zdHJ1Y3Rvci5cbiAgICByZXR1cm4gY2FsbGVyLnN1cGVyQ2xhc3NfLmNvbnN0cnVjdG9yLmFwcGx5KFxuICAgICAgICBtZSwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG4gIH1cblxuICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gIHZhciBmb3VuZENhbGxlciA9IGZhbHNlO1xuICBmb3IgKHZhciBjdG9yID0gbWUuY29uc3RydWN0b3I7XG4gICAgICAgY3RvcjsgY3RvciA9IGN0b3Iuc3VwZXJDbGFzc18gJiYgY3Rvci5zdXBlckNsYXNzXy5jb25zdHJ1Y3Rvcikge1xuICAgIGlmIChjdG9yLnByb3RvdHlwZVtvcHRfbWV0aG9kTmFtZV0gPT09IGNhbGxlcikge1xuICAgICAgZm91bmRDYWxsZXIgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoZm91bmRDYWxsZXIpIHtcbiAgICAgIHJldHVybiBjdG9yLnByb3RvdHlwZVtvcHRfbWV0aG9kTmFtZV0uYXBwbHkobWUsIGFyZ3MpO1xuICAgIH1cbiAgfVxuXG4gIC8vIElmIHdlIGRpZCBub3QgZmluZCB0aGUgY2FsbGVyIGluIHRoZSBwcm90b3R5cGUgY2hhaW4sXG4gIC8vIHRoZW4gb25lIG9mIHR3byB0aGluZ3MgaGFwcGVuZWQ6XG4gIC8vIDEpIFRoZSBjYWxsZXIgaXMgYW4gaW5zdGFuY2UgbWV0aG9kLlxuICAvLyAyKSBUaGlzIG1ldGhvZCB3YXMgbm90IGNhbGxlZCBieSB0aGUgcmlnaHQgY2FsbGVyLlxuICBpZiAobWVbb3B0X21ldGhvZE5hbWVdID09PSBjYWxsZXIpIHtcbiAgICByZXR1cm4gbWUuY29uc3RydWN0b3IucHJvdG90eXBlW29wdF9tZXRob2ROYW1lXS5hcHBseShtZSwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdnb29nLmJhc2UgY2FsbGVkIGZyb20gYSBtZXRob2Qgb2Ygb25lIG5hbWUgJyArXG4gICAgICAgICd0byBhIG1ldGhvZCBvZiBhIGRpZmZlcmVudCBuYW1lJyk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBBbGxvdyBmb3IgYWxpYXNpbmcgd2l0aGluIHNjb3BlIGZ1bmN0aW9ucy4gIFRoaXMgZnVuY3Rpb24gZXhpc3RzIGZvclxuICogdW5jb21waWxlZCBjb2RlIC0gaW4gY29tcGlsZWQgY29kZSB0aGUgY2FsbHMgd2lsbCBiZSBpbmxpbmVkIGFuZCB0aGVcbiAqIGFsaWFzZXMgYXBwbGllZC4gIEluIHVuY29tcGlsZWQgY29kZSB0aGUgZnVuY3Rpb24gaXMgc2ltcGx5IHJ1biBzaW5jZSB0aGVcbiAqIGFsaWFzZXMgYXMgd3JpdHRlbiBhcmUgdmFsaWQgSmF2YVNjcmlwdC5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gZm4gRnVuY3Rpb24gdG8gY2FsbC4gIFRoaXMgZnVuY3Rpb24gY2FuIGNvbnRhaW4gYWxpYXNlc1xuICogICAgIHRvIG5hbWVzcGFjZXMgKGUuZy4gXCJ2YXIgZG9tID0gZ29vZy5kb21cIikgb3IgY2xhc3Nlc1xuICogICAgKGUuZy4gXCJ2YXIgVGltZXIgPSBnb29nLlRpbWVyXCIpLlxuICovXG5nb29nLnNjb3BlID0gZnVuY3Rpb24oZm4pIHtcbiAgZm4uY2FsbChnb29nLmdsb2JhbCk7XG59O1xuXG5cbiIsIi8qKlxuICogZGVmaW5lc1xuICovXG5cbmdvb2cucHJvdmlkZSgnVVNFX1RZUEVEQVJSQVknKTtcblxuLy8gU2FmYXJpIOOBjCB0eXBlb2YgVWludDhBcnJheSA9PT0gJ29iamVjdCcg44Gr44Gq44KL44Gf44KB44CBXG4vLyDmnKrlrprnvqnjgYvlkKbjgYvjgacgVHlwZWQgQXJyYXkg44Gu5L2/55So44KS5rG65a6a44GZ44KLXG5cbi8qKiBAY29uc3Qge2Jvb2xlYW59IHVzZSB0eXBlZCBhcnJheSBmbGFnLiAqL1xudmFyIFVTRV9UWVBFREFSUkFZID1cbiAgKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJykgJiZcbiAgKHR5cGVvZiBVaW50MTZBcnJheSAhPT0gJ3VuZGVmaW5lZCcpICYmXG4gICh0eXBlb2YgVWludDMyQXJyYXkgIT09ICd1bmRlZmluZWQnKSAmJlxuICAodHlwZW9mIERhdGFWaWV3ICE9PSAndW5kZWZpbmVkJyk7XG4iLCJnb29nLnByb3ZpZGUoJ1psaWIuSHVmZm1hbicpO1xuXG5nb29nLnJlcXVpcmUoJ1VTRV9UWVBFREFSUkFZJyk7XG5cbmdvb2cuc2NvcGUoZnVuY3Rpb24oKSB7XG5cbi8qKlxuICogYnVpbGQgaHVmZm1hbiB0YWJsZSBmcm9tIGxlbmd0aCBsaXN0LlxuICogQHBhcmFtIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBsZW5ndGhzIGxlbmd0aCBsaXN0LlxuICogQHJldHVybiB7IUFycmF5fSBodWZmbWFuIHRhYmxlLlxuICovXG5abGliLkh1ZmZtYW4uYnVpbGRIdWZmbWFuVGFibGUgPSBmdW5jdGlvbihsZW5ndGhzKSB7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBsZW5ndGggbGlzdCBzaXplLiAqL1xuICB2YXIgbGlzdFNpemUgPSBsZW5ndGhzLmxlbmd0aDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IG1heCBjb2RlIGxlbmd0aCBmb3IgdGFibGUgc2l6ZS4gKi9cbiAgdmFyIG1heENvZGVMZW5ndGggPSAwO1xuICAvKiogQHR5cGUge251bWJlcn0gbWluIGNvZGUgbGVuZ3RoIGZvciB0YWJsZSBzaXplLiAqL1xuICB2YXIgbWluQ29kZUxlbmd0aCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IHRhYmxlIHNpemUuICovXG4gIHZhciBzaXplO1xuICAvKiogQHR5cGUgeyEoQXJyYXl8VWludDhBcnJheSl9IGh1ZmZtYW4gY29kZSB0YWJsZS4gKi9cbiAgdmFyIHRhYmxlO1xuICAvKiogQHR5cGUge251bWJlcn0gYml0IGxlbmd0aC4gKi9cbiAgdmFyIGJpdExlbmd0aDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGh1ZmZtYW4gY29kZS4gKi9cbiAgdmFyIGNvZGU7XG4gIC8qKlxuICAgKiDjgrXjgqTjgrrjgYwgMl5tYXhsZW5ndGgg5YCL44Gu44OG44O844OW44Or44KS5Z+L44KB44KL44Gf44KB44Gu44K544Kt44OD44OX6ZW3LlxuICAgKiBAdHlwZSB7bnVtYmVyfSBza2lwIGxlbmd0aCBmb3IgdGFibGUgZmlsbGluZy5cbiAgICovXG4gIHZhciBza2lwO1xuICAvKiogQHR5cGUge251bWJlcn0gcmV2ZXJzZWQgY29kZS4gKi9cbiAgdmFyIHJldmVyc2VkO1xuICAvKiogQHR5cGUge251bWJlcn0gcmV2ZXJzZSB0ZW1wLiAqL1xuICB2YXIgcnRlbXA7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBsb29wIGNvdW50ZXIuICovXG4gIHZhciBpO1xuICAvKiogQHR5cGUge251bWJlcn0gbG9vcCBsaW1pdC4gKi9cbiAgdmFyIGlsO1xuICAvKiogQHR5cGUge251bWJlcn0gbG9vcCBjb3VudGVyLiAqL1xuICB2YXIgajtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IHRhYmxlIHZhbHVlLiAqL1xuICB2YXIgdmFsdWU7XG5cbiAgLy8gTWF0aC5tYXgg44Gv6YGF44GE44Gu44Gn5pyA6ZW344Gu5YCk44GvIGZvci1sb29wIOOBp+WPluW+l+OBmeOCi1xuICBmb3IgKGkgPSAwLCBpbCA9IGxpc3RTaXplOyBpIDwgaWw7ICsraSkge1xuICAgIGlmIChsZW5ndGhzW2ldID4gbWF4Q29kZUxlbmd0aCkge1xuICAgICAgbWF4Q29kZUxlbmd0aCA9IGxlbmd0aHNbaV07XG4gICAgfVxuICAgIGlmIChsZW5ndGhzW2ldIDwgbWluQ29kZUxlbmd0aCkge1xuICAgICAgbWluQ29kZUxlbmd0aCA9IGxlbmd0aHNbaV07XG4gICAgfVxuICB9XG5cbiAgc2l6ZSA9IDEgPDwgbWF4Q29kZUxlbmd0aDtcbiAgdGFibGUgPSBuZXcgKFVTRV9UWVBFREFSUkFZID8gVWludDMyQXJyYXkgOiBBcnJheSkoc2l6ZSk7XG5cbiAgLy8g44OT44OD44OI6ZW344Gu55+t44GE6aCG44GL44KJ44OP44OV44Oe44Oz56ym5Y+344KS5Ymy44KK5b2T44Gm44KLXG4gIGZvciAoYml0TGVuZ3RoID0gMSwgY29kZSA9IDAsIHNraXAgPSAyOyBiaXRMZW5ndGggPD0gbWF4Q29kZUxlbmd0aDspIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkge1xuICAgICAgaWYgKGxlbmd0aHNbaV0gPT09IGJpdExlbmd0aCkge1xuICAgICAgICAvLyDjg5Pjg4Pjg4jjgqrjg7zjg4Djg7zjgYzpgIbjgavjgarjgovjgZ/jgoHjg5Pjg4Pjg4jplbfliIbkuKbjgbPjgpLlj43ou6LjgZnjgotcbiAgICAgICAgZm9yIChyZXZlcnNlZCA9IDAsIHJ0ZW1wID0gY29kZSwgaiA9IDA7IGogPCBiaXRMZW5ndGg7ICsraikge1xuICAgICAgICAgIHJldmVyc2VkID0gKHJldmVyc2VkIDw8IDEpIHwgKHJ0ZW1wICYgMSk7XG4gICAgICAgICAgcnRlbXAgPj49IDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDmnIDlpKfjg5Pjg4Pjg4jplbfjgpLjgoLjgajjgavjg4bjg7zjg5bjg6vjgpLkvZzjgovjgZ/jgoHjgIFcbiAgICAgICAgLy8g5pyA5aSn44OT44OD44OI6ZW35Lul5aSW44Gn44GvIDAgLyAxIOOBqeOBoeOCieOBp+OCguiJr+OBhOeuh+aJgOOBjOOBp+OBjeOCi1xuICAgICAgICAvLyDjgZ3jga7jganjgaHjgonjgafjgoLoia/jgYTloLTmiYDjga/lkIzjgZjlgKTjgafln4vjgoHjgovjgZPjgajjgadcbiAgICAgICAgLy8g5pys5p2l44Gu44OT44OD44OI6ZW35Lul5LiK44Gu44OT44OD44OI5pWw5Y+W5b6X44GX44Gm44KC5ZWP6aGM44GM6LW344GT44KJ44Gq44GE44KI44GG44Gr44GZ44KLXG4gICAgICAgIHZhbHVlID0gKGJpdExlbmd0aCA8PCAxNikgfCBpO1xuICAgICAgICBmb3IgKGogPSByZXZlcnNlZDsgaiA8IHNpemU7IGogKz0gc2tpcCkge1xuICAgICAgICAgIHRhYmxlW2pdID0gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICArK2NvZGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8g5qyh44Gu44OT44OD44OI6ZW344G4XG4gICAgKytiaXRMZW5ndGg7XG4gICAgY29kZSA8PD0gMTtcbiAgICBza2lwIDw8PSAxO1xuICB9XG5cbiAgcmV0dXJuIFt0YWJsZSwgbWF4Q29kZUxlbmd0aCwgbWluQ29kZUxlbmd0aF07XG59O1xuXG5cbi8vIGVuZCBvZiBzY29wZVxufSk7XG5cbi8qIHZpbTpzZXQgZXhwYW5kdGFiIHRzPTIgc3c9MiB0dz04MDogKi9cbiIsImdvb2cucHJvdmlkZSgnWmxpYi5SYXdJbmZsYXRlU3RyZWFtJyk7XG5cbmdvb2cucmVxdWlyZSgnVVNFX1RZUEVEQVJSQVknKTtcbmdvb2cucmVxdWlyZSgnWmxpYi5IdWZmbWFuJyk7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIEBkZWZpbmUge251bWJlcn0gYnVmZmVyIGJsb2NrIHNpemUuICovXG52YXIgWkxJQl9TVFJFQU1fUkFXX0lORkxBVEVfQlVGRkVSX1NJWkUgPSAweDgwMDA7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZ29vZy5zY29wZShmdW5jdGlvbigpIHtcblxudmFyIGJ1aWxkSHVmZm1hblRhYmxlID0gWmxpYi5IdWZmbWFuLmJ1aWxkSHVmZm1hblRhYmxlO1xuXG4vKipcbiAqIEBwYXJhbSB7IShVaW50OEFycmF5fEFycmF5LjxudW1iZXI+KX0gaW5wdXQgaW5wdXQgYnVmZmVyLlxuICogQHBhcmFtIHtudW1iZXJ9IGlwIGlucHV0IGJ1ZmZlciBwb2ludGVyLlxuICogQHBhcmFtIHtudW1iZXI9fSBvcHRfYnVmZmVyc2l6ZSBidWZmZXIgYmxvY2sgc2l6ZS5cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5abGliLlJhd0luZmxhdGVTdHJlYW0gPSBmdW5jdGlvbihpbnB1dCwgaXAsIG9wdF9idWZmZXJzaXplKSB7XG4gIC8qKiBAdHlwZSB7IShBcnJheXxVaW50OEFycmF5KX0gaW5mbGF0ZWQgYnVmZmVyICovXG4gIHRoaXMuYnVmZmVyO1xuICAvKiogQHR5cGUgeyFBcnJheS48KEFycmF5fFVpbnQ4QXJyYXkpPn0gKi9cbiAgdGhpcy5ibG9ja3MgPSBbXTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGJsb2NrIHNpemUuICovXG4gIHRoaXMuYnVmZmVyU2l6ZSA9XG4gICAgb3B0X2J1ZmZlcnNpemUgPyBvcHRfYnVmZmVyc2l6ZSA6IFpMSUJfU1RSRUFNX1JBV19JTkZMQVRFX0JVRkZFUl9TSVpFO1xuICAvKiogQHR5cGUgeyFudW1iZXJ9IHRvdGFsIG91dHB1dCBidWZmZXIgcG9pbnRlci4gKi9cbiAgdGhpcy50b3RhbHBvcyA9IDA7XG4gIC8qKiBAdHlwZSB7IW51bWJlcn0gaW5wdXQgYnVmZmVyIHBvaW50ZXIuICovXG4gIHRoaXMuaXAgPSBpcCA9PT0gdm9pZCAwID8gMCA6IGlwO1xuICAvKiogQHR5cGUgeyFudW1iZXJ9IGJpdCBzdHJlYW0gcmVhZGVyIGJ1ZmZlci4gKi9cbiAgdGhpcy5iaXRzYnVmID0gMDtcbiAgLyoqIEB0eXBlIHshbnVtYmVyfSBiaXQgc3RyZWFtIHJlYWRlciBidWZmZXIgc2l6ZS4gKi9cbiAgdGhpcy5iaXRzYnVmbGVuID0gMDtcbiAgLyoqIEB0eXBlIHshKEFycmF5fFVpbnQ4QXJyYXkpfSBpbnB1dCBidWZmZXIuICovXG4gIHRoaXMuaW5wdXQgPSBVU0VfVFlQRURBUlJBWSA/IG5ldyBVaW50OEFycmF5KGlucHV0KSA6IGlucHV0O1xuICAvKiogQHR5cGUgeyEoVWludDhBcnJheXxBcnJheSl9IG91dHB1dCBidWZmZXIuICovXG4gIHRoaXMub3V0cHV0ID0gbmV3IChVU0VfVFlQRURBUlJBWSA/IFVpbnQ4QXJyYXkgOiBBcnJheSkodGhpcy5idWZmZXJTaXplKTtcbiAgLyoqIEB0eXBlIHshbnVtYmVyfSBvdXRwdXQgYnVmZmVyIHBvaW50ZXIuICovXG4gIHRoaXMub3AgPSAwO1xuICAvKiogQHR5cGUge2Jvb2xlYW59IGlzIGZpbmFsIGJsb2NrIGZsYWcuICovXG4gIHRoaXMuYmZpbmFsID0gZmFsc2U7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSB1bmNvbXByZXNzZWQgYmxvY2sgbGVuZ3RoLiAqL1xuICB0aGlzLmJsb2NrTGVuZ3RoO1xuICAvKiogQHR5cGUge2Jvb2xlYW59IHJlc2l6ZSBmbGFnIGZvciBtZW1vcnkgc2l6ZSBvcHRpbWl6YXRpb24uICovXG4gIHRoaXMucmVzaXplID0gZmFsc2U7XG4gIC8qKiBAdHlwZSB7QXJyYXl9ICovXG4gIHRoaXMubGl0bGVuVGFibGU7XG4gIC8qKiBAdHlwZSB7QXJyYXl9ICovXG4gIHRoaXMuZGlzdFRhYmxlO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdGhpcy5zcCA9IDA7IC8vIHN0cmVhbSBwb2ludGVyXG4gIC8qKiBAdHlwZSB7WmxpYi5SYXdJbmZsYXRlU3RyZWFtLlN0YXR1c30gKi9cbiAgdGhpcy5zdGF0dXMgPSBabGliLlJhd0luZmxhdGVTdHJlYW0uU3RhdHVzLklOSVRJQUxJWkVEO1xuICAvKiogQHR5cGUge251bWJlcn0gcHJldmlvdXMgUkxFIHZhbHVlICovXG4gIHRoaXMucHJldjtcblxuICAvL1xuICAvLyBiYWNrdXBcbiAgLy9cbiAgLyoqIEB0eXBlIHshbnVtYmVyfSAqL1xuICB0aGlzLmlwXztcbiAgLyoqIEB0eXBlIHshbnVtYmVyfSAqL1xuICB0aGlzLmJpdHNidWZsZW5fO1xuICAvKiogQHR5cGUgeyFudW1iZXJ9ICovXG4gIHRoaXMuYml0c2J1Zl87XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cblpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5CbG9ja1R5cGUgPSB7XG4gIFVOQ09NUFJFU1NFRDogMCxcbiAgRklYRUQ6IDEsXG4gIERZTkFNSUM6IDJcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuWmxpYi5SYXdJbmZsYXRlU3RyZWFtLlN0YXR1cyA9IHtcbiAgSU5JVElBTElaRUQ6IDAsXG4gIEJMT0NLX0hFQURFUl9TVEFSVDogMSxcbiAgQkxPQ0tfSEVBREVSX0VORDogMixcbiAgQkxPQ0tfQk9EWV9TVEFSVDogMyxcbiAgQkxPQ0tfQk9EWV9FTkQ6IDQsXG4gIERFQ09ERV9CTE9DS19TVEFSVDogNSxcbiAgREVDT0RFX0JMT0NLX0VORDogNlxufTtcblxuLyoqXG4gKiBkZWNvbXByZXNzLlxuICogQHJldHVybiB7IShVaW50OEFycmF5fEFycmF5KX0gaW5mbGF0ZWQgYnVmZmVyLlxuICovXG5abGliLlJhd0luZmxhdGVTdHJlYW0ucHJvdG90eXBlLmRlY29tcHJlc3MgPSBmdW5jdGlvbihuZXdJbnB1dCwgaXApIHtcbiAgLyoqIEB0eXBlIHtib29sZWFufSAqL1xuICB2YXIgc3RvcCA9IGZhbHNlO1xuXG4gIGlmIChuZXdJbnB1dCAhPT0gdm9pZCAwKSB7XG4gICAgdGhpcy5pbnB1dCA9IG5ld0lucHV0O1xuICB9XG5cbiAgaWYgKGlwICE9PSB2b2lkIDApIHtcbiAgICB0aGlzLmlwID0gaXA7XG4gIH1cblxuICAvLyBkZWNvbXByZXNzXG4gIHdoaWxlICghc3RvcCkge1xuICAgIHN3aXRjaCAodGhpcy5zdGF0dXMpIHtcbiAgICAgIC8vIGJsb2NrIGhlYWRlclxuICAgICAgY2FzZSBabGliLlJhd0luZmxhdGVTdHJlYW0uU3RhdHVzLklOSVRJQUxJWkVEOlxuICAgICAgY2FzZSBabGliLlJhd0luZmxhdGVTdHJlYW0uU3RhdHVzLkJMT0NLX0hFQURFUl9TVEFSVDpcbiAgICAgICAgaWYgKHRoaXMucmVhZEJsb2NrSGVhZGVyKCkgPCAwKSB7XG4gICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyBibG9jayBib2R5XG4gICAgICBjYXNlIFpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5TdGF0dXMuQkxPQ0tfSEVBREVSX0VORDogLyogRkFMTFRIUk9VR0ggKi9cbiAgICAgIGNhc2UgWmxpYi5SYXdJbmZsYXRlU3RyZWFtLlN0YXR1cy5CTE9DS19CT0RZX1NUQVJUOlxuICAgICAgICBzd2l0Y2godGhpcy5jdXJyZW50QmxvY2tUeXBlKSB7XG4gICAgICAgICAgY2FzZSBabGliLlJhd0luZmxhdGVTdHJlYW0uQmxvY2tUeXBlLlVOQ09NUFJFU1NFRDpcbiAgICAgICAgICAgIGlmICh0aGlzLnJlYWRVbmNvbXByZXNzZWRCbG9ja0hlYWRlcigpIDwgMCkge1xuICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgWmxpYi5SYXdJbmZsYXRlU3RyZWFtLkJsb2NrVHlwZS5GSVhFRDpcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcnNlRml4ZWRIdWZmbWFuQmxvY2soKSA8IDApIHtcbiAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5CbG9ja1R5cGUuRFlOQU1JQzpcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcnNlRHluYW1pY0h1ZmZtYW5CbG9jaygpIDwgMCkge1xuICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gZGVjb2RlIGRhdGFcbiAgICAgIGNhc2UgWmxpYi5SYXdJbmZsYXRlU3RyZWFtLlN0YXR1cy5CTE9DS19CT0RZX0VORDpcbiAgICAgIGNhc2UgWmxpYi5SYXdJbmZsYXRlU3RyZWFtLlN0YXR1cy5ERUNPREVfQkxPQ0tfU1RBUlQ6XG4gICAgICAgIHN3aXRjaCh0aGlzLmN1cnJlbnRCbG9ja1R5cGUpIHtcbiAgICAgICAgICBjYXNlIFpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5CbG9ja1R5cGUuVU5DT01QUkVTU0VEOlxuICAgICAgICAgICAgaWYgKHRoaXMucGFyc2VVbmNvbXByZXNzZWRCbG9jaygpIDwgMCkge1xuICAgICAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgWmxpYi5SYXdJbmZsYXRlU3RyZWFtLkJsb2NrVHlwZS5GSVhFRDogLyogRkFMTFRIUk9VR0ggKi9cbiAgICAgICAgICBjYXNlIFpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5CbG9ja1R5cGUuRFlOQU1JQzpcbiAgICAgICAgICAgIGlmICh0aGlzLmRlY29kZUh1ZmZtYW4oKSA8IDApIHtcbiAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgWmxpYi5SYXdJbmZsYXRlU3RyZWFtLlN0YXR1cy5ERUNPREVfQkxPQ0tfRU5EOlxuICAgICAgICBpZiAodGhpcy5iZmluYWwpIHtcbiAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0YXR1cyA9IFpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5TdGF0dXMuSU5JVElBTElaRUQ7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXMuY29uY2F0QnVmZmVyKCk7XG59O1xuXG4vKipcbiAqIEBjb25zdFxuICogQHR5cGUge251bWJlcn0gbWF4IGJhY2t3YXJkIGxlbmd0aCBmb3IgTFo3Ny5cbiAqL1xuWmxpYi5SYXdJbmZsYXRlU3RyZWFtLk1heEJhY2t3YXJkTGVuZ3RoID0gMzI3Njg7XG5cbi8qKlxuICogQGNvbnN0XG4gKiBAdHlwZSB7bnVtYmVyfSBtYXggY29weSBsZW5ndGggZm9yIExaNzcuXG4gKi9cblpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5NYXhDb3B5TGVuZ3RoID0gMjU4O1xuXG4vKipcbiAqIGh1ZmZtYW4gb3JkZXJcbiAqIEBjb25zdFxuICogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9XG4gKi9cblpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5PcmRlciA9IChmdW5jdGlvbih0YWJsZSkge1xuICByZXR1cm4gVVNFX1RZUEVEQVJSQVkgPyBuZXcgVWludDE2QXJyYXkodGFibGUpIDogdGFibGU7XG59KShbMTYsIDE3LCAxOCwgMCwgOCwgNywgOSwgNiwgMTAsIDUsIDExLCA0LCAxMiwgMywgMTMsIDIsIDE0LCAxLCAxNV0pO1xuXG4vKipcbiAqIGh1ZmZtYW4gbGVuZ3RoIGNvZGUgdGFibGUuXG4gKiBAY29uc3RcbiAqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQxNkFycmF5KX1cbiAqL1xuWmxpYi5SYXdJbmZsYXRlU3RyZWFtLkxlbmd0aENvZGVUYWJsZSA9IChmdW5jdGlvbih0YWJsZSkge1xuICByZXR1cm4gVVNFX1RZUEVEQVJSQVkgPyBuZXcgVWludDE2QXJyYXkodGFibGUpIDogdGFibGU7XG59KShbXG4gIDB4MDAwMywgMHgwMDA0LCAweDAwMDUsIDB4MDAwNiwgMHgwMDA3LCAweDAwMDgsIDB4MDAwOSwgMHgwMDBhLCAweDAwMGIsXG4gIDB4MDAwZCwgMHgwMDBmLCAweDAwMTEsIDB4MDAxMywgMHgwMDE3LCAweDAwMWIsIDB4MDAxZiwgMHgwMDIzLCAweDAwMmIsXG4gIDB4MDAzMywgMHgwMDNiLCAweDAwNDMsIDB4MDA1MywgMHgwMDYzLCAweDAwNzMsIDB4MDA4MywgMHgwMGEzLCAweDAwYzMsXG4gIDB4MDBlMywgMHgwMTAyLCAweDAxMDIsIDB4MDEwMlxuXSk7XG5cbi8qKlxuICogaHVmZm1hbiBsZW5ndGggZXh0cmEtYml0cyB0YWJsZS5cbiAqIEBjb25zdFxuICogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9XG4gKi9cblpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5MZW5ndGhFeHRyYVRhYmxlID0gKGZ1bmN0aW9uKHRhYmxlKSB7XG4gIHJldHVybiBVU0VfVFlQRURBUlJBWSA/IG5ldyBVaW50OEFycmF5KHRhYmxlKSA6IHRhYmxlO1xufSkoW1xuICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAyLCAyLCAyLCAyLCAzLCAzLCAzLCAzLCA0LCA0LCA0LCA0LCA1LCA1LFxuICA1LCA1LCAwLCAwLCAwXG5dKTtcblxuLyoqXG4gKiBodWZmbWFuIGRpc3QgY29kZSB0YWJsZS5cbiAqIEBjb25zdFxuICogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDE2QXJyYXkpfVxuICovXG5abGliLlJhd0luZmxhdGVTdHJlYW0uRGlzdENvZGVUYWJsZSA9IChmdW5jdGlvbih0YWJsZSkge1xuICByZXR1cm4gVVNFX1RZUEVEQVJSQVkgPyBuZXcgVWludDE2QXJyYXkodGFibGUpIDogdGFibGU7XG59KShbXG4gIDB4MDAwMSwgMHgwMDAyLCAweDAwMDMsIDB4MDAwNCwgMHgwMDA1LCAweDAwMDcsIDB4MDAwOSwgMHgwMDBkLCAweDAwMTEsXG4gIDB4MDAxOSwgMHgwMDIxLCAweDAwMzEsIDB4MDA0MSwgMHgwMDYxLCAweDAwODEsIDB4MDBjMSwgMHgwMTAxLCAweDAxODEsXG4gIDB4MDIwMSwgMHgwMzAxLCAweDA0MDEsIDB4MDYwMSwgMHgwODAxLCAweDBjMDEsIDB4MTAwMSwgMHgxODAxLCAweDIwMDEsXG4gIDB4MzAwMSwgMHg0MDAxLCAweDYwMDFcbl0pO1xuXG4vKipcbiAqIGh1ZmZtYW4gZGlzdCBleHRyYS1iaXRzIHRhYmxlLlxuICogQGNvbnN0XG4gKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX1cbiAqL1xuWmxpYi5SYXdJbmZsYXRlU3RyZWFtLkRpc3RFeHRyYVRhYmxlID0gKGZ1bmN0aW9uKHRhYmxlKSB7XG4gIHJldHVybiBVU0VfVFlQRURBUlJBWSA/IG5ldyBVaW50OEFycmF5KHRhYmxlKSA6IHRhYmxlO1xufSkoW1xuICAwLCAwLCAwLCAwLCAxLCAxLCAyLCAyLCAzLCAzLCA0LCA0LCA1LCA1LCA2LCA2LCA3LCA3LCA4LCA4LCA5LCA5LCAxMCwgMTAsIDExLFxuICAxMSwgMTIsIDEyLCAxMywgMTNcbl0pO1xuXG4vKipcbiAqIGZpeGVkIGh1ZmZtYW4gbGVuZ3RoIGNvZGUgdGFibGVcbiAqIEBjb25zdFxuICogQHR5cGUgeyFBcnJheX1cbiAqL1xuWmxpYi5SYXdJbmZsYXRlU3RyZWFtLkZpeGVkTGl0ZXJhbExlbmd0aFRhYmxlID0gKGZ1bmN0aW9uKHRhYmxlKSB7XG4gIHJldHVybiB0YWJsZTtcbn0pKChmdW5jdGlvbigpIHtcbiAgdmFyIGxlbmd0aHMgPSBuZXcgKFVTRV9UWVBFREFSUkFZID8gVWludDhBcnJheSA6IEFycmF5KSgyODgpO1xuICB2YXIgaSwgaWw7XG5cbiAgZm9yIChpID0gMCwgaWwgPSBsZW5ndGhzLmxlbmd0aDsgaSA8IGlsOyArK2kpIHtcbiAgICBsZW5ndGhzW2ldID1cbiAgICAgIChpIDw9IDE0MykgPyA4IDpcbiAgICAgIChpIDw9IDI1NSkgPyA5IDpcbiAgICAgIChpIDw9IDI3OSkgPyA3IDpcbiAgICAgIDg7XG4gIH1cblxuICByZXR1cm4gYnVpbGRIdWZmbWFuVGFibGUobGVuZ3Rocyk7XG59KSgpKTtcblxuLyoqXG4gKiBmaXhlZCBodWZmbWFuIGRpc3RhbmNlIGNvZGUgdGFibGVcbiAqIEBjb25zdFxuICogQHR5cGUgeyFBcnJheX1cbiAqL1xuWmxpYi5SYXdJbmZsYXRlU3RyZWFtLkZpeGVkRGlzdGFuY2VUYWJsZSA9IChmdW5jdGlvbih0YWJsZSkge1xuICByZXR1cm4gdGFibGU7XG59KSgoZnVuY3Rpb24oKSB7XG4gIHZhciBsZW5ndGhzID0gbmV3IChVU0VfVFlQRURBUlJBWSA/IFVpbnQ4QXJyYXkgOiBBcnJheSkoMzApO1xuICB2YXIgaSwgaWw7XG5cbiAgZm9yIChpID0gMCwgaWwgPSBsZW5ndGhzLmxlbmd0aDsgaSA8IGlsOyArK2kpIHtcbiAgICBsZW5ndGhzW2ldID0gNTtcbiAgfVxuXG4gIHJldHVybiBidWlsZEh1ZmZtYW5UYWJsZShsZW5ndGhzKTtcbn0pKCkpO1xuXG4vKipcbiAqIHBhcnNlIGRlZmxhdGVkIGJsb2NrLlxuICovXG5abGliLlJhd0luZmxhdGVTdHJlYW0ucHJvdG90eXBlLnJlYWRCbG9ja0hlYWRlciA9IGZ1bmN0aW9uKCkge1xuICAvKiogQHR5cGUge251bWJlcn0gaGVhZGVyICovXG4gIHZhciBoZHI7XG5cbiAgdGhpcy5zdGF0dXMgPSBabGliLlJhd0luZmxhdGVTdHJlYW0uU3RhdHVzLkJMT0NLX0hFQURFUl9TVEFSVDtcblxuICB0aGlzLnNhdmVfKCk7XG4gIGlmICgoaGRyID0gdGhpcy5yZWFkQml0cygzKSkgPCAwKSB7XG4gICAgdGhpcy5yZXN0b3JlXygpO1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8vIEJGSU5BTFxuICBpZiAoaGRyICYgMHgxKSB7XG4gICAgdGhpcy5iZmluYWwgPSB0cnVlO1xuICB9XG5cbiAgLy8gQlRZUEVcbiAgaGRyID4+Pj0gMTtcbiAgc3dpdGNoIChoZHIpIHtcbiAgICBjYXNlIDA6IC8vIHVuY29tcHJlc3NlZFxuICAgICAgdGhpcy5jdXJyZW50QmxvY2tUeXBlID0gWmxpYi5SYXdJbmZsYXRlU3RyZWFtLkJsb2NrVHlwZS5VTkNPTVBSRVNTRUQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDE6IC8vIGZpeGVkIGh1ZmZtYW5cbiAgICAgIHRoaXMuY3VycmVudEJsb2NrVHlwZSA9IFpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5CbG9ja1R5cGUuRklYRUQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDI6IC8vIGR5bmFtaWMgaHVmZm1hblxuICAgICAgdGhpcy5jdXJyZW50QmxvY2tUeXBlID0gWmxpYi5SYXdJbmZsYXRlU3RyZWFtLkJsb2NrVHlwZS5EWU5BTUlDO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDogLy8gcmVzZXJ2ZWQgb3Igb3RoZXJcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBCVFlQRTogJyArIGhkcik7XG4gIH1cblxuICB0aGlzLnN0YXR1cyA9IFpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5TdGF0dXMuQkxPQ0tfSEVBREVSX0VORDtcbn07XG5cbi8qKlxuICogcmVhZCBpbmZsYXRlIGJpdHNcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGggYml0cyBsZW5ndGguXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHJlYWQgYml0cy5cbiAqL1xuWmxpYi5SYXdJbmZsYXRlU3RyZWFtLnByb3RvdHlwZS5yZWFkQml0cyA9IGZ1bmN0aW9uKGxlbmd0aCkge1xuICB2YXIgYml0c2J1ZiA9IHRoaXMuYml0c2J1ZjtcbiAgdmFyIGJpdHNidWZsZW4gPSB0aGlzLmJpdHNidWZsZW47XG4gIHZhciBpbnB1dCA9IHRoaXMuaW5wdXQ7XG4gIHZhciBpcCA9IHRoaXMuaXA7XG5cbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGlucHV0IGFuZCBvdXRwdXQgYnl0ZS4gKi9cbiAgdmFyIG9jdGV0O1xuXG4gIC8vIG5vdCBlbm91Z2ggYnVmZmVyXG4gIHdoaWxlIChiaXRzYnVmbGVuIDwgbGVuZ3RoKSB7XG4gICAgLy8gaW5wdXQgYnl0ZVxuICAgIGlmIChpbnB1dC5sZW5ndGggPD0gaXApIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgb2N0ZXQgPSBpbnB1dFtpcCsrXTtcblxuICAgIC8vIGNvbmNhdCBvY3RldFxuICAgIGJpdHNidWYgfD0gb2N0ZXQgPDwgYml0c2J1ZmxlbjtcbiAgICBiaXRzYnVmbGVuICs9IDg7XG4gIH1cblxuICAvLyBvdXRwdXQgYnl0ZVxuICBvY3RldCA9IGJpdHNidWYgJiAvKiBNQVNLICovICgoMSA8PCBsZW5ndGgpIC0gMSk7XG4gIGJpdHNidWYgPj4+PSBsZW5ndGg7XG4gIGJpdHNidWZsZW4gLT0gbGVuZ3RoO1xuXG4gIHRoaXMuYml0c2J1ZiA9IGJpdHNidWY7XG4gIHRoaXMuYml0c2J1ZmxlbiA9IGJpdHNidWZsZW47XG4gIHRoaXMuaXAgPSBpcDtcblxuICByZXR1cm4gb2N0ZXQ7XG59O1xuXG4vKipcbiAqIHJlYWQgaHVmZm1hbiBjb2RlIHVzaW5nIHRhYmxlXG4gKiBAcGFyYW0ge0FycmF5fSB0YWJsZSBodWZmbWFuIGNvZGUgdGFibGUuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IGh1ZmZtYW4gY29kZS5cbiAqL1xuWmxpYi5SYXdJbmZsYXRlU3RyZWFtLnByb3RvdHlwZS5yZWFkQ29kZUJ5VGFibGUgPSBmdW5jdGlvbih0YWJsZSkge1xuICB2YXIgYml0c2J1ZiA9IHRoaXMuYml0c2J1ZjtcbiAgdmFyIGJpdHNidWZsZW4gPSB0aGlzLmJpdHNidWZsZW47XG4gIHZhciBpbnB1dCA9IHRoaXMuaW5wdXQ7XG4gIHZhciBpcCA9IHRoaXMuaXA7XG5cbiAgLyoqIEB0eXBlIHshKEFycmF5fFVpbnQ4QXJyYXkpfSBodWZmbWFuIGNvZGUgdGFibGUgKi9cbiAgdmFyIGNvZGVUYWJsZSA9IHRhYmxlWzBdO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIG1heENvZGVMZW5ndGggPSB0YWJsZVsxXTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGlucHV0IGJ5dGUgKi9cbiAgdmFyIG9jdGV0O1xuICAvKiogQHR5cGUge251bWJlcn0gY29kZSBsZW5ndGggJiBjb2RlICgxNmJpdCwgMTZiaXQpICovXG4gIHZhciBjb2RlV2l0aExlbmd0aDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGNvZGUgYml0cyBsZW5ndGggKi9cbiAgdmFyIGNvZGVMZW5ndGg7XG5cbiAgLy8gbm90IGVub3VnaCBidWZmZXJcbiAgd2hpbGUgKGJpdHNidWZsZW4gPCBtYXhDb2RlTGVuZ3RoKSB7XG4gICAgaWYgKGlucHV0Lmxlbmd0aCA8PSBpcCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBvY3RldCA9IGlucHV0W2lwKytdO1xuICAgIGJpdHNidWYgfD0gb2N0ZXQgPDwgYml0c2J1ZmxlbjtcbiAgICBiaXRzYnVmbGVuICs9IDg7XG4gIH1cblxuICAvLyByZWFkIG1heCBsZW5ndGhcbiAgY29kZVdpdGhMZW5ndGggPSBjb2RlVGFibGVbYml0c2J1ZiAmICgoMSA8PCBtYXhDb2RlTGVuZ3RoKSAtIDEpXTtcbiAgY29kZUxlbmd0aCA9IGNvZGVXaXRoTGVuZ3RoID4+PiAxNjtcblxuICB0aGlzLmJpdHNidWYgPSBiaXRzYnVmID4+IGNvZGVMZW5ndGg7XG4gIHRoaXMuYml0c2J1ZmxlbiA9IGJpdHNidWZsZW4gLSBjb2RlTGVuZ3RoO1xuICB0aGlzLmlwID0gaXA7XG5cbiAgcmV0dXJuIGNvZGVXaXRoTGVuZ3RoICYgMHhmZmZmO1xufTtcblxuLyoqXG4gKiByZWFkIHVuY29tcHJlc3NlZCBibG9jayBoZWFkZXJcbiAqL1xuWmxpYi5SYXdJbmZsYXRlU3RyZWFtLnByb3RvdHlwZS5yZWFkVW5jb21wcmVzc2VkQmxvY2tIZWFkZXIgPSBmdW5jdGlvbigpIHtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGJsb2NrIGxlbmd0aCAqL1xuICB2YXIgbGVuO1xuICAvKiogQHR5cGUge251bWJlcn0gbnVtYmVyIGZvciBjaGVjayBibG9jayBsZW5ndGggKi9cbiAgdmFyIG5sZW47XG5cbiAgdmFyIGlucHV0ID0gdGhpcy5pbnB1dDtcbiAgdmFyIGlwID0gdGhpcy5pcDtcblxuICB0aGlzLnN0YXR1cyA9IFpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5TdGF0dXMuQkxPQ0tfQk9EWV9TVEFSVDtcblxuICBpZiAoaXAgKyA0ID49IGlucHV0Lmxlbmd0aCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIGxlbiA9IGlucHV0W2lwKytdIHwgKGlucHV0W2lwKytdIDw8IDgpO1xuICBubGVuID0gaW5wdXRbaXArK10gfCAoaW5wdXRbaXArK10gPDwgOCk7XG5cbiAgLy8gY2hlY2sgbGVuICYgbmxlblxuICBpZiAobGVuID09PSB+bmxlbikge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB1bmNvbXByZXNzZWQgYmxvY2sgaGVhZGVyOiBsZW5ndGggdmVyaWZ5Jyk7XG4gIH1cblxuICAvLyBza2lwIGJ1ZmZlcmVkIGhlYWRlciBiaXRzXG4gIHRoaXMuYml0c2J1ZiA9IDA7XG4gIHRoaXMuYml0c2J1ZmxlbiA9IDA7XG5cbiAgdGhpcy5pcCA9IGlwO1xuICB0aGlzLmJsb2NrTGVuZ3RoID0gbGVuO1xuICB0aGlzLnN0YXR1cyA9IFpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5TdGF0dXMuQkxPQ0tfQk9EWV9FTkQ7XG59XG5cbi8qKlxuICogcGFyc2UgdW5jb21wcmVzc2VkIGJsb2NrLlxuICovXG5abGliLlJhd0luZmxhdGVTdHJlYW0ucHJvdG90eXBlLnBhcnNlVW5jb21wcmVzc2VkQmxvY2sgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGlucHV0ID0gdGhpcy5pbnB1dDtcbiAgdmFyIGlwID0gdGhpcy5pcDtcbiAgdmFyIG91dHB1dCA9IHRoaXMub3V0cHV0O1xuICB2YXIgb3AgPSB0aGlzLm9wO1xuICB2YXIgbGVuID0gdGhpcy5ibG9ja0xlbmd0aDtcblxuICB0aGlzLnN0YXR1cyA9IFpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5TdGF0dXMuREVDT0RFX0JMT0NLX1NUQVJUO1xuXG4gIC8vIGNvcHlcbiAgLy8gWFhYOiDjgajjgorjgYLjgYjjgZrntKDnm7TjgavjgrPjg5Tjg7xcbiAgd2hpbGUgKGxlbi0tKSB7XG4gICAgaWYgKG9wID09PSBvdXRwdXQubGVuZ3RoKSB7XG4gICAgICBvdXRwdXQgPSB0aGlzLmV4cGFuZEJ1ZmZlcih7Zml4UmF0aW86IDJ9KTtcbiAgICB9XG5cbiAgICAvLyBub3QgZW5vdWdoIGlucHV0IGJ1ZmZlclxuICAgIGlmIChpcCA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaXAgPSBpcDtcbiAgICAgIHRoaXMub3AgPSBvcDtcbiAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSBsZW4gKyAxOyAvLyDjgrPjg5Tjg7zjgZfjgabjgarjgYTjga7jgafmiLvjgZlcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICBvdXRwdXRbb3ArK10gPSBpbnB1dFtpcCsrXTtcbiAgfVxuXG4gIGlmIChsZW4gPCAwKSB7XG4gICAgdGhpcy5zdGF0dXMgPSBabGliLlJhd0luZmxhdGVTdHJlYW0uU3RhdHVzLkRFQ09ERV9CTE9DS19FTkQ7XG4gIH1cblxuICB0aGlzLmlwID0gaXA7XG4gIHRoaXMub3AgPSBvcDtcblxuICByZXR1cm4gMDtcbn07XG5cbi8qKlxuICogcGFyc2UgZml4ZWQgaHVmZm1hbiBibG9jay5cbiAqL1xuWmxpYi5SYXdJbmZsYXRlU3RyZWFtLnByb3RvdHlwZS5wYXJzZUZpeGVkSHVmZm1hbkJsb2NrID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuc3RhdHVzID0gWmxpYi5SYXdJbmZsYXRlU3RyZWFtLlN0YXR1cy5CTE9DS19CT0RZX1NUQVJUO1xuXG4gIHRoaXMubGl0bGVuVGFibGUgPSBabGliLlJhd0luZmxhdGVTdHJlYW0uRml4ZWRMaXRlcmFsTGVuZ3RoVGFibGU7XG4gIHRoaXMuZGlzdFRhYmxlID0gWmxpYi5SYXdJbmZsYXRlU3RyZWFtLkZpeGVkRGlzdGFuY2VUYWJsZTtcblxuICB0aGlzLnN0YXR1cyA9IFpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5TdGF0dXMuQkxPQ0tfQk9EWV9FTkQ7XG5cbiAgcmV0dXJuIDA7XG59O1xuXG4vKipcbiAqIOOCquODluOCuOOCp+OCr+ODiOOBruOCs+ODs+ODhuOCreOCueODiOOCkuWIpeOBruODl+ODreODkeODhuOCo+OBq+mAgOmBv+OBmeOCiy5cbiAqIEBwcml2YXRlXG4gKi9cblpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5wcm90b3R5cGUuc2F2ZV8gPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5pcF8gPSB0aGlzLmlwO1xuICB0aGlzLmJpdHNidWZsZW5fID0gdGhpcy5iaXRzYnVmbGVuO1xuICB0aGlzLmJpdHNidWZfID0gdGhpcy5iaXRzYnVmO1xufTtcblxuLyoqXG4gKiDliKXjga7jg5fjg63jg5Hjg4bjgqPjgavpgIDpgb/jgZfjgZ/jgrPjg7Pjg4bjgq3jgrnjg4jjgpLlvqnlhYPjgZnjgosuXG4gKiBAcHJpdmF0ZVxuICovXG5abGliLlJhd0luZmxhdGVTdHJlYW0ucHJvdG90eXBlLnJlc3RvcmVfID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuaXAgPSB0aGlzLmlwXztcbiAgdGhpcy5iaXRzYnVmbGVuID0gdGhpcy5iaXRzYnVmbGVuXztcbiAgdGhpcy5iaXRzYnVmID0gdGhpcy5iaXRzYnVmXztcbn07XG5cbi8qKlxuICogcGFyc2UgZHluYW1pYyBodWZmbWFuIGJsb2NrLlxuICovXG5abGliLlJhd0luZmxhdGVTdHJlYW0ucHJvdG90eXBlLnBhcnNlRHluYW1pY0h1ZmZtYW5CbG9jayA9IGZ1bmN0aW9uKCkge1xuICAvKiogQHR5cGUge251bWJlcn0gbnVtYmVyIG9mIGxpdGVyYWwgYW5kIGxlbmd0aCBjb2Rlcy4gKi9cbiAgdmFyIGhsaXQ7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBudW1iZXIgb2YgZGlzdGFuY2UgY29kZXMuICovXG4gIHZhciBoZGlzdDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IG51bWJlciBvZiBjb2RlIGxlbmd0aHMuICovXG4gIHZhciBoY2xlbjtcbiAgLyoqIEB0eXBlIHshKFVpbnQ4QXJyYXl8QXJyYXkpfSBjb2RlIGxlbmd0aHMuICovXG4gIHZhciBjb2RlTGVuZ3RocyA9XG4gICAgbmV3IChVU0VfVFlQRURBUlJBWSA/IFVpbnQ4QXJyYXkgOiBBcnJheSkoWmxpYi5SYXdJbmZsYXRlU3RyZWFtLk9yZGVyLmxlbmd0aCk7XG4gIC8qKiBAdHlwZSB7IUFycmF5fSBjb2RlIGxlbmd0aHMgdGFibGUuICovXG4gIHZhciBjb2RlTGVuZ3Roc1RhYmxlO1xuICAvKiogQHR5cGUgeyEoVWludDMyQXJyYXl8QXJyYXkpfSBsaXRlcmFsIGFuZCBsZW5ndGggY29kZSBsZW5ndGhzLiAqL1xuICB2YXIgbGl0bGVuTGVuZ3RocztcbiAgLyoqIEB0eXBlIHshKFVpbnQzMkFycmF5fEFycmF5KX0gZGlzdGFuY2UgY29kZSBsZW5ndGhzLiAqL1xuICB2YXIgZGlzdExlbmd0aHM7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBsb29wIGNvdW50ZXIuICovXG4gIHZhciBpID0gMDtcblxuICB0aGlzLnN0YXR1cyA9IFpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5TdGF0dXMuQkxPQ0tfQk9EWV9TVEFSVDtcblxuICB0aGlzLnNhdmVfKCk7XG4gIGhsaXQgPSB0aGlzLnJlYWRCaXRzKDUpICsgMjU3O1xuICBoZGlzdCA9IHRoaXMucmVhZEJpdHMoNSkgKyAxO1xuICBoY2xlbiA9IHRoaXMucmVhZEJpdHMoNCkgKyA0O1xuICBpZiAoaGxpdCA8IDAgfHwgaGRpc3QgPCAwIHx8IGhjbGVuIDwgMCkge1xuICAgIHRoaXMucmVzdG9yZV8oKTtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICB0cnkge1xuICAgIHBhcnNlRHluYW1pY0h1ZmZtYW5CbG9ja0ltcGwuY2FsbCh0aGlzKTtcbiAgfSBjYXRjaChlKSB7XG4gICAgdGhpcy5yZXN0b3JlXygpO1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlRHluYW1pY0h1ZmZtYW5CbG9ja0ltcGwoKSB7XG4gICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gICAgdmFyIGJpdHM7XG5cbiAgICAvLyBkZWNvZGUgY29kZSBsZW5ndGhzXG4gICAgZm9yIChpID0gMDsgaSA8IGhjbGVuOyArK2kpIHtcbiAgICAgIGlmICgoYml0cyA9IHRoaXMucmVhZEJpdHMoMykpIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBlbm91Z2ggaW5wdXQnKTtcbiAgICAgIH1cbiAgICAgIGNvZGVMZW5ndGhzW1psaWIuUmF3SW5mbGF0ZVN0cmVhbS5PcmRlcltpXV0gPSBiaXRzO1xuICAgIH1cbiAgICBjb2RlTGVuZ3Roc1RhYmxlID0gYnVpbGRIdWZmbWFuVGFibGUoY29kZUxlbmd0aHMpO1xuXG4gICAgLy8gZGVjb2RlIGZ1bmN0aW9uXG4gICAgZnVuY3Rpb24gZGVjb2RlKG51bSwgdGFibGUsIGxlbmd0aHMpIHtcbiAgICAgIHZhciBjb2RlO1xuICAgICAgdmFyIHByZXYgPSB0aGlzLnByZXY7XG4gICAgICB2YXIgcmVwZWF0O1xuICAgICAgdmFyIGk7XG4gICAgICB2YXIgYml0cztcblxuICAgICAgZm9yIChpID0gMDsgaSA8IG51bTspIHtcbiAgICAgICAgY29kZSA9IHRoaXMucmVhZENvZGVCeVRhYmxlKHRhYmxlKTtcbiAgICAgICAgaWYgKGNvZGUgPCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdub3QgZW5vdWdoIGlucHV0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgIGlmICgoYml0cyA9IHRoaXMucmVhZEJpdHMoMikpIDwgMCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBlbm91Z2ggaW5wdXQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcGVhdCA9IDMgKyBiaXRzO1xuICAgICAgICAgICAgd2hpbGUgKHJlcGVhdC0tKSB7IGxlbmd0aHNbaSsrXSA9IHByZXY7IH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgICBpZiAoKGJpdHMgPSB0aGlzLnJlYWRCaXRzKDMpKSA8IDApIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdub3QgZW5vdWdoIGlucHV0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXBlYXQgPSAzICsgYml0cztcbiAgICAgICAgICAgIHdoaWxlIChyZXBlYXQtLSkgeyBsZW5ndGhzW2krK10gPSAwOyB9XG4gICAgICAgICAgICBwcmV2ID0gMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICBpZiAoKGJpdHMgPSB0aGlzLnJlYWRCaXRzKDcpKSA8IDApIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdub3QgZW5vdWdoIGlucHV0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXBlYXQgPSAxMSArIGJpdHM7XG4gICAgICAgICAgICB3aGlsZSAocmVwZWF0LS0pIHsgbGVuZ3Roc1tpKytdID0gMDsgfVxuICAgICAgICAgICAgcHJldiA9IDA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgbGVuZ3Roc1tpKytdID0gY29kZTtcbiAgICAgICAgICAgIHByZXYgPSBjb2RlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5wcmV2ID0gcHJldjtcblxuICAgICAgcmV0dXJuIGxlbmd0aHM7XG4gICAgfVxuXG4gICAgLy8gbGl0ZXJhbCBhbmQgbGVuZ3RoIGNvZGVcbiAgICBsaXRsZW5MZW5ndGhzID0gbmV3IChVU0VfVFlQRURBUlJBWSA/IFVpbnQ4QXJyYXkgOiBBcnJheSkoaGxpdCk7XG5cbiAgICAvLyBkaXN0YW5jZSBjb2RlXG4gICAgZGlzdExlbmd0aHMgPSBuZXcgKFVTRV9UWVBFREFSUkFZID8gVWludDhBcnJheSA6IEFycmF5KShoZGlzdCk7XG5cbiAgICB0aGlzLnByZXYgPSAwO1xuICAgIHRoaXMubGl0bGVuVGFibGUgPSBidWlsZEh1ZmZtYW5UYWJsZShkZWNvZGUuY2FsbCh0aGlzLCBobGl0LCBjb2RlTGVuZ3Roc1RhYmxlLCBsaXRsZW5MZW5ndGhzKSk7XG4gICAgdGhpcy5kaXN0VGFibGUgPSBidWlsZEh1ZmZtYW5UYWJsZShkZWNvZGUuY2FsbCh0aGlzLCBoZGlzdCwgY29kZUxlbmd0aHNUYWJsZSwgZGlzdExlbmd0aHMpKTtcbiAgfVxuXG4gIHRoaXMuc3RhdHVzID0gWmxpYi5SYXdJbmZsYXRlU3RyZWFtLlN0YXR1cy5CTE9DS19CT0RZX0VORDtcblxuICByZXR1cm4gMDtcbn07XG5cbi8qKlxuICogZGVjb2RlIGh1ZmZtYW4gY29kZSAoZHluYW1pYylcbiAqIEByZXR1cm4geyhudW1iZXJ8dW5kZWZpbmVkKX0gLTEgaXMgZXJyb3IuXG4gKi9cblpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5wcm90b3R5cGUuZGVjb2RlSHVmZm1hbiA9IGZ1bmN0aW9uKCkge1xuICB2YXIgb3V0cHV0ID0gdGhpcy5vdXRwdXQ7XG4gIHZhciBvcCA9IHRoaXMub3A7XG5cbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGh1ZmZtYW4gY29kZS4gKi9cbiAgdmFyIGNvZGU7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSB0YWJsZSBpbmRleC4gKi9cbiAgdmFyIHRpO1xuICAvKiogQHR5cGUge251bWJlcn0gaHVmZm1hbiBjb2RlIGRpc3RpbmF0aW9uLiAqL1xuICB2YXIgY29kZURpc3Q7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBodWZmbWFuIGNvZGUgbGVuZ3RoLiAqL1xuICB2YXIgY29kZUxlbmd0aDtcblxuICB2YXIgbGl0bGVuID0gdGhpcy5saXRsZW5UYWJsZTtcbiAgdmFyIGRpc3QgPSB0aGlzLmRpc3RUYWJsZTtcblxuICB2YXIgb2xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG4gIHZhciBiaXRzO1xuXG4gIHRoaXMuc3RhdHVzID0gWmxpYi5SYXdJbmZsYXRlU3RyZWFtLlN0YXR1cy5ERUNPREVfQkxPQ0tfU1RBUlQ7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICB0aGlzLnNhdmVfKCk7XG5cbiAgICBjb2RlID0gdGhpcy5yZWFkQ29kZUJ5VGFibGUobGl0bGVuKTtcbiAgICBpZiAoY29kZSA8IDApIHtcbiAgICAgIHRoaXMub3AgPSBvcDtcbiAgICAgIHRoaXMucmVzdG9yZV8oKTtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gMjU2KSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBsaXRlcmFsXG4gICAgaWYgKGNvZGUgPCAyNTYpIHtcbiAgICAgIGlmIChvcCA9PT0gb2xlbmd0aCkge1xuICAgICAgICBvdXRwdXQgPSB0aGlzLmV4cGFuZEJ1ZmZlcigpO1xuICAgICAgICBvbGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIG91dHB1dFtvcCsrXSA9IGNvZGU7XG5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGxlbmd0aCBjb2RlXG4gICAgdGkgPSBjb2RlIC0gMjU3O1xuICAgIGNvZGVMZW5ndGggPSBabGliLlJhd0luZmxhdGVTdHJlYW0uTGVuZ3RoQ29kZVRhYmxlW3RpXTtcbiAgICBpZiAoWmxpYi5SYXdJbmZsYXRlU3RyZWFtLkxlbmd0aEV4dHJhVGFibGVbdGldID4gMCkge1xuICAgICAgYml0cyA9IHRoaXMucmVhZEJpdHMoWmxpYi5SYXdJbmZsYXRlU3RyZWFtLkxlbmd0aEV4dHJhVGFibGVbdGldKTtcbiAgICAgIGlmIChiaXRzIDwgMCkge1xuICAgICAgICB0aGlzLm9wID0gb3A7XG4gICAgICAgIHRoaXMucmVzdG9yZV8oKTtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgY29kZUxlbmd0aCArPSBiaXRzO1xuICAgIH1cblxuICAgIC8vIGRpc3QgY29kZVxuICAgIGNvZGUgPSB0aGlzLnJlYWRDb2RlQnlUYWJsZShkaXN0KTtcbiAgICBpZiAoY29kZSA8IDApIHtcbiAgICAgIHRoaXMub3AgPSBvcDtcbiAgICAgIHRoaXMucmVzdG9yZV8oKTtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgY29kZURpc3QgPSBabGliLlJhd0luZmxhdGVTdHJlYW0uRGlzdENvZGVUYWJsZVtjb2RlXTtcbiAgICBpZiAoWmxpYi5SYXdJbmZsYXRlU3RyZWFtLkRpc3RFeHRyYVRhYmxlW2NvZGVdID4gMCkge1xuICAgICAgYml0cyA9IHRoaXMucmVhZEJpdHMoWmxpYi5SYXdJbmZsYXRlU3RyZWFtLkRpc3RFeHRyYVRhYmxlW2NvZGVdKTtcbiAgICAgIGlmIChiaXRzIDwgMCkge1xuICAgICAgICB0aGlzLm9wID0gb3A7XG4gICAgICAgIHRoaXMucmVzdG9yZV8oKTtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgY29kZURpc3QgKz0gYml0cztcbiAgICB9XG5cbiAgICAvLyBsejc3IGRlY29kZVxuICAgIGlmIChvcCArIGNvZGVMZW5ndGggPj0gb2xlbmd0aCkge1xuICAgICAgb3V0cHV0ID0gdGhpcy5leHBhbmRCdWZmZXIoKTtcbiAgICAgIG9sZW5ndGggPSBvdXRwdXQubGVuZ3RoO1xuICAgIH1cblxuICAgIHdoaWxlIChjb2RlTGVuZ3RoLS0pIHtcbiAgICAgIG91dHB1dFtvcF0gPSBvdXRwdXRbKG9wKyspIC0gY29kZURpc3RdO1xuICAgIH1cblxuICAgIC8vIGJyZWFrXG4gICAgaWYgKHRoaXMuaXAgPT09IHRoaXMuaW5wdXQubGVuZ3RoKSB7XG4gICAgICB0aGlzLm9wID0gb3A7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICB9XG5cbiAgd2hpbGUgKHRoaXMuYml0c2J1ZmxlbiA+PSA4KSB7XG4gICAgdGhpcy5iaXRzYnVmbGVuIC09IDg7XG4gICAgdGhpcy5pcC0tO1xuICB9XG5cbiAgdGhpcy5vcCA9IG9wO1xuICB0aGlzLnN0YXR1cyA9IFpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5TdGF0dXMuREVDT0RFX0JMT0NLX0VORDtcbn07XG5cbi8qKlxuICogZXhwYW5kIG91dHB1dCBidWZmZXIuIChkeW5hbWljKVxuICogQHBhcmFtIHtPYmplY3Q9fSBvcHRfcGFyYW0gb3B0aW9uIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJuIHshKEFycmF5fFVpbnQ4QXJyYXkpfSBvdXRwdXQgYnVmZmVyIHBvaW50ZXIuXG4gKi9cblpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5wcm90b3R5cGUuZXhwYW5kQnVmZmVyID0gZnVuY3Rpb24ob3B0X3BhcmFtKSB7XG4gIC8qKiBAdHlwZSB7IShBcnJheXxVaW50OEFycmF5KX0gc3RvcmUgYnVmZmVyLiAqL1xuICB2YXIgYnVmZmVyO1xuICAvKiogQHR5cGUge251bWJlcn0gZXhwYW50aW9uIHJhdGlvLiAqL1xuICB2YXIgcmF0aW8gPSAodGhpcy5pbnB1dC5sZW5ndGggLyB0aGlzLmlwICsgMSkgfCAwO1xuICAvKiogQHR5cGUge251bWJlcn0gbWF4aW11bSBudW1iZXIgb2YgaHVmZm1hbiBjb2RlLiAqL1xuICB2YXIgbWF4SHVmZkNvZGU7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBuZXcgb3V0cHV0IGJ1ZmZlciBzaXplLiAqL1xuICB2YXIgbmV3U2l6ZTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IG1heCBpbmZsYXRlIHNpemUuICovXG4gIHZhciBtYXhJbmZsYXRlU2l6ZTtcblxuICB2YXIgaW5wdXQgPSB0aGlzLmlucHV0O1xuICB2YXIgb3V0cHV0ID0gdGhpcy5vdXRwdXQ7XG5cbiAgaWYgKG9wdF9wYXJhbSkge1xuICAgIGlmICh0eXBlb2Ygb3B0X3BhcmFtLmZpeFJhdGlvID09PSAnbnVtYmVyJykge1xuICAgICAgcmF0aW8gPSBvcHRfcGFyYW0uZml4UmF0aW87XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0X3BhcmFtLmFkZFJhdGlvID09PSAnbnVtYmVyJykge1xuICAgICAgcmF0aW8gKz0gb3B0X3BhcmFtLmFkZFJhdGlvO1xuICAgIH1cbiAgfVxuXG4gIC8vIGNhbGN1bGF0ZSBuZXcgYnVmZmVyIHNpemVcbiAgaWYgKHJhdGlvIDwgMikge1xuICAgIG1heEh1ZmZDb2RlID1cbiAgICAgIChpbnB1dC5sZW5ndGggLSB0aGlzLmlwKSAvIHRoaXMubGl0bGVuVGFibGVbMl07XG4gICAgbWF4SW5mbGF0ZVNpemUgPSAobWF4SHVmZkNvZGUgLyAyICogMjU4KSB8IDA7XG4gICAgbmV3U2l6ZSA9IG1heEluZmxhdGVTaXplIDwgb3V0cHV0Lmxlbmd0aCA/XG4gICAgICBvdXRwdXQubGVuZ3RoICsgbWF4SW5mbGF0ZVNpemUgOlxuICAgICAgb3V0cHV0Lmxlbmd0aCA8PCAxO1xuICB9IGVsc2Uge1xuICAgIG5ld1NpemUgPSBvdXRwdXQubGVuZ3RoICogcmF0aW87XG4gIH1cblxuICAvLyBidWZmZXIgZXhwYW50aW9uXG4gIGlmIChVU0VfVFlQRURBUlJBWSkge1xuICAgIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KG5ld1NpemUpO1xuICAgIGJ1ZmZlci5zZXQob3V0cHV0KTtcbiAgfSBlbHNlIHtcbiAgICBidWZmZXIgPSBvdXRwdXQ7XG4gIH1cblxuICB0aGlzLm91dHB1dCA9IGJ1ZmZlcjtcblxuICByZXR1cm4gdGhpcy5vdXRwdXQ7XG59O1xuXG4vKipcbiAqIGNvbmNhdCBvdXRwdXQgYnVmZmVyLiAoZHluYW1pYylcbiAqIEByZXR1cm4geyEoQXJyYXl8VWludDhBcnJheSl9IG91dHB1dCBidWZmZXIuXG4gKi9cblpsaWIuUmF3SW5mbGF0ZVN0cmVhbS5wcm90b3R5cGUuY29uY2F0QnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gIC8qKiBAdHlwZSB7IShBcnJheXxVaW50OEFycmF5KX0gb3V0cHV0IGJ1ZmZlci4gKi9cbiAgdmFyIGJ1ZmZlcjtcblxuICB2YXIgcmVzaXplID0gdGhpcy5yZXNpemU7XG5cbiAgdmFyIG9wID0gdGhpcy5vcDtcblxuICBpZiAocmVzaXplKSB7XG4gICAgaWYgKFVTRV9UWVBFREFSUkFZKSB7XG4gICAgICBidWZmZXIgPSBuZXcgVWludDhBcnJheShvcCk7XG4gICAgICBidWZmZXIuc2V0KHRoaXMub3V0cHV0LnN1YmFycmF5KHRoaXMuc3AsIG9wKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1ZmZlciA9IHRoaXMub3V0cHV0LnNsaWNlKHRoaXMuc3AsIG9wKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYnVmZmVyID1cbiAgICAgIFVTRV9UWVBFREFSUkFZID8gdGhpcy5vdXRwdXQuc3ViYXJyYXkodGhpcy5zcCwgb3ApIDogdGhpcy5vdXRwdXQuc2xpY2UodGhpcy5zcCwgb3ApO1xuICB9XG5cblxuICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcbiAgdGhpcy5zcCA9IG9wO1xuXG4gIHJldHVybiB0aGlzLmJ1ZmZlcjtcbn07XG5cbi8qKlxuICogQHJldHVybiB7IShBcnJheXxVaW50OEFycmF5KX0gY3VycmVudCBvdXRwdXQgYnVmZmVyLlxuICovXG5abGliLlJhd0luZmxhdGVTdHJlYW0ucHJvdG90eXBlLmdldEJ5dGVzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBVU0VfVFlQRURBUlJBWSA/XG4gICAgdGhpcy5vdXRwdXQuc3ViYXJyYXkoMCwgdGhpcy5vcCkgOiB0aGlzLm91dHB1dC5zbGljZSgwLCB0aGlzLm9wKTtcbn07XG5cbi8vIGVuZCBvZiBzY29wZVxufSk7XG5cbi8qIHZpbTpzZXQgZXhwYW5kdGFiIHRzPTIgc3c9MiB0dz04MDogKi9cbiIsImdvb2cucHJvdmlkZSgnWmxpYi5JbmZsYXRlU3RyZWFtJyk7XG5cbmdvb2cucmVxdWlyZSgnVVNFX1RZUEVEQVJSQVknKTtcbmdvb2cucmVxdWlyZSgnWmxpYicpO1xuLy9nb29nLnJlcXVpcmUoJ1psaWIuQWRsZXIzMicpO1xuZ29vZy5yZXF1aXJlKCdabGliLlJhd0luZmxhdGVTdHJlYW0nKTtcblxuZ29vZy5zY29wZShmdW5jdGlvbigpIHtcblxuLyoqXG4gKiBAcGFyYW0geyEoVWludDhBcnJheXxBcnJheSl9IGlucHV0IGRlZmxhdGVkIGJ1ZmZlci5cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5abGliLkluZmxhdGVTdHJlYW0gPSBmdW5jdGlvbihpbnB1dCkge1xuICAvKiogQHR5cGUgeyEoVWludDhBcnJheXxBcnJheSl9ICovXG4gIHRoaXMuaW5wdXQgPSBpbnB1dCA9PT0gdm9pZCAwID8gbmV3IChVU0VfVFlQRURBUlJBWSA/IFVpbnQ4QXJyYXkgOiBBcnJheSkoKSA6IGlucHV0O1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdGhpcy5pcCA9IDA7XG4gIC8qKiBAdHlwZSB7WmxpYi5SYXdJbmZsYXRlU3RyZWFtfSAqL1xuICB0aGlzLnJhd2luZmxhdGUgPSBuZXcgWmxpYi5SYXdJbmZsYXRlU3RyZWFtKHRoaXMuaW5wdXQsIHRoaXMuaXApO1xuICAvKiogQHR5cGUge1psaWIuQ29tcHJlc3Npb25NZXRob2R9ICovXG4gIHRoaXMubWV0aG9kO1xuICAvKiogQHR5cGUgeyEoQXJyYXl8VWludDhBcnJheSl9ICovXG4gIHRoaXMub3V0cHV0ID0gdGhpcy5yYXdpbmZsYXRlLm91dHB1dDtcbn07XG5cbi8qKlxuICogZGVjb21wcmVzcy5cbiAqIEByZXR1cm4geyEoVWludDhBcnJheXxBcnJheSl9IGluZmxhdGVkIGJ1ZmZlci5cbiAqL1xuWmxpYi5JbmZsYXRlU3RyZWFtLnByb3RvdHlwZS5kZWNvbXByZXNzID0gZnVuY3Rpb24oaW5wdXQpIHtcbiAgLyoqIEB0eXBlIHshKFVpbnQ4QXJyYXl8QXJyYXkpfSBpbmZsYXRlZCBidWZmZXIuICovXG4gIHZhciBidWZmZXI7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBhZGxlci0zMiBjaGVja3N1bSAqL1xuICB2YXIgYWRsZXIzMjtcblxuICAvLyDmlrDjgZfjgYTlhaXlipvjgpLlhaXlipvjg5Djg4Pjg5XjgqHjgavntZDlkIjjgZnjgotcbiAgLy8gWFhYIEFycmF5LCBVaW50OEFycmF5IOOBruODgeOCp+ODg+OCr+OCkuihjOOBhuOBi+eiuuiqjeOBmeOCi1xuICBpZiAoaW5wdXQgIT09IHZvaWQgMCkge1xuICAgIGlmIChVU0VfVFlQRURBUlJBWSkge1xuICAgICAgdmFyIHRtcCA9IG5ldyBVaW50OEFycmF5KHRoaXMuaW5wdXQubGVuZ3RoICsgaW5wdXQubGVuZ3RoKTtcbiAgICAgIHRtcC5zZXQodGhpcy5pbnB1dCwgMCk7XG4gICAgICB0bXAuc2V0KGlucHV0LCB0aGlzLmlucHV0Lmxlbmd0aCk7XG4gICAgICB0aGlzLmlucHV0ID0gdG1wO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlucHV0ID0gdGhpcy5pbnB1dC5jb25jYXQoaW5wdXQpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLm1ldGhvZCA9PT0gdm9pZCAwKSB7XG4gICAgaWYodGhpcy5yZWFkSGVhZGVyKCkgPCAwKSB7XG4gICAgICByZXR1cm4gbmV3IChVU0VfVFlQRURBUlJBWSA/IFVpbnQ4QXJyYXkgOiBBcnJheSkoKTtcbiAgICB9XG4gIH1cblxuICBidWZmZXIgPSB0aGlzLnJhd2luZmxhdGUuZGVjb21wcmVzcyh0aGlzLmlucHV0LCB0aGlzLmlwKTtcbiAgaWYgKHRoaXMucmF3aW5mbGF0ZS5pcCAhPT0gMCkge1xuICAgIHRoaXMuaW5wdXQgPSBVU0VfVFlQRURBUlJBWSA/XG4gICAgICB0aGlzLmlucHV0LnN1YmFycmF5KHRoaXMucmF3aW5mbGF0ZS5pcCkgOlxuICAgICAgdGhpcy5pbnB1dC5zbGljZSh0aGlzLnJhd2luZmxhdGUuaXApO1xuICAgIHRoaXMuaXAgPSAwO1xuICB9XG5cbiAgLy8gdmVyaWZ5IGFkbGVyLTMyXG4gIC8qXG4gIGlmICh0aGlzLnZlcmlmeSkge1xuICAgIGFkbGVyMzIgPVxuICAgICAgaW5wdXRbdGhpcy5pcCsrXSA8PCAyNCB8IGlucHV0W3RoaXMuaXArK10gPDwgMTYgfFxuICAgICAgaW5wdXRbdGhpcy5pcCsrXSA8PCA4IHwgaW5wdXRbdGhpcy5pcCsrXTtcblxuICAgIGlmIChhZGxlcjMyICE9PSBabGliLkFkbGVyMzIoYnVmZmVyKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGFkbGVyLTMyIGNoZWNrc3VtJyk7XG4gICAgfVxuICB9XG4gICovXG5cbiAgcmV0dXJuIGJ1ZmZlcjtcbn07XG5cbi8qKlxuICogQHJldHVybiB7IShVaW50OEFycmF5fEFycmF5KX0gY3VycmVudCBvdXRwdXQgYnVmZmVyLlxuICovXG5abGliLkluZmxhdGVTdHJlYW0ucHJvdG90eXBlLmdldEJ5dGVzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnJhd2luZmxhdGUuZ2V0Qnl0ZXMoKTtcbn07XG5cblpsaWIuSW5mbGF0ZVN0cmVhbS5wcm90b3R5cGUucmVhZEhlYWRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaXAgPSB0aGlzLmlwO1xuICB2YXIgaW5wdXQgPSB0aGlzLmlucHV0O1xuXG4gIC8vIENvbXByZXNzaW9uIE1ldGhvZCBhbmQgRmxhZ3NcbiAgdmFyIGNtZiA9IGlucHV0W2lwKytdO1xuICB2YXIgZmxnID0gaW5wdXRbaXArK107XG5cbiAgaWYgKGNtZiA9PT0gdm9pZCAwIHx8IGZsZyA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLy8gY29tcHJlc3Npb24gbWV0aG9kXG4gIHN3aXRjaCAoY21mICYgMHgwZikge1xuICAgIGNhc2UgWmxpYi5Db21wcmVzc2lvbk1ldGhvZC5ERUZMQVRFOlxuICAgICAgdGhpcy5tZXRob2QgPSBabGliLkNvbXByZXNzaW9uTWV0aG9kLkRFRkxBVEU7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bnN1cHBvcnRlZCBjb21wcmVzc2lvbiBtZXRob2QnKTtcbiAgfVxuXG4gIC8vIGZjaGVja1xuICBpZiAoKChjbWYgPDwgOCkgKyBmbGcpICUgMzEgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgZmNoZWNrIGZsYWc6JyArICgoY21mIDw8IDgpICsgZmxnKSAlIDMxKTtcbiAgfVxuXG4gIC8vIGZkaWN0IChub3Qgc3VwcG9ydGVkKVxuICBpZiAoZmxnICYgMHgyMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignZmRpY3QgZmxhZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gIH1cblxuICB0aGlzLmlwID0gaXA7XG59O1xuXG4vLyBlbmQgb2Ygc2NvcGVcbn0pO1xuXG4vKiB2aW06c2V0IGV4cGFuZHRhYiB0cz0yIHN3PTIgdHc9ODA6ICovXG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgWmxpYiBuYW1lc3BhY2UuIFpsaWIg44Gu5LuV5qeY44Gr5rqW5oug44GX44Gf5Zyn57iu44GvIFpsaWIuRGVmbGF0ZSDjgaflrp/oo4VcbiAqIOOBleOCjOOBpuOBhOOCiy4g44GT44KM44GvIEluZmxhdGUg44Go44Gu5YWx5a2Y44KS6ICD5oWu44GX44Gm44GE44KL54K6LlxuICovXG5cbmdvb2cucHJvdmlkZSgnWmxpYicpO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmdvb2cuc2NvcGUoZnVuY3Rpb24oKSB7XG5cbi8qKlxuICogQ29tcHJlc3Npb24gTWV0aG9kXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5abGliLkNvbXByZXNzaW9uTWV0aG9kID0ge1xuICBERUZMQVRFOiA4LFxuICBSRVNFUlZFRDogMTVcbn07XG5cbi8vIGVuZCBvZiBzY29wZVxufSk7XG5cbi8qIHZpbTpzZXQgZXhwYW5kdGFiIHRzPTIgc3c9MiB0dz04MDogKi9cbiIsImdvb2cucmVxdWlyZSgnWmxpYi5JbmZsYXRlU3RyZWFtJyk7XG5cbmdvb2cuZXhwb3J0U3ltYm9sKCdabGliLkluZmxhdGVTdHJlYW0nLCBabGliLkluZmxhdGVTdHJlYW0pO1xuZ29vZy5leHBvcnRTeW1ib2woXG4gICdabGliLkluZmxhdGVTdHJlYW0ucHJvdG90eXBlLmRlY29tcHJlc3MnLFxuICBabGliLkluZmxhdGVTdHJlYW0ucHJvdG90eXBlLmRlY29tcHJlc3Ncbik7XG5nb29nLmV4cG9ydFN5bWJvbChcbiAgJ1psaWIuSW5mbGF0ZVN0cmVhbS5wcm90b3R5cGUuZ2V0Qnl0ZXMnLFxuICBabGliLkluZmxhdGVTdHJlYW0ucHJvdG90eXBlLmdldEJ5dGVzXG4pOyJdfQ== \ No newline at end of file diff --git a/bin/inflate_stream.min.js b/bin/inflate_stream.min.js index 851c7ab..5689138 100644 --- a/bin/inflate_stream.min.js +++ b/bin/inflate_stream.min.js @@ -10,4 +10,4 @@ g[M[k]]=d}f=v(g);l=new (u?Uint8Array:Array)(b);h=new (u?Uint8Array:Array)(c);thi function K(a){var d=a.c,b=a.b,c,e,g,f,l=a.k,h=a.n,k=d.length,n;for(a.status=5;;){C(a);c=Z(a,l);if(0>c)return a.b=b,E(a),-1;if(256===c)break;if(256>c)b===k&&(d=J(a),k=d.length),d[b++]=c;else{e=c-257;f=aa[e];if(0n)return a.b=b,E(a),-1;f+=n}c=Z(a,h);if(0>c)return a.b=b,E(a),-1;g=ba[c];if(0n)return a.b=b,E(a),-1;g+=n}b+f>=k&&(d=J(a),k=d.length);for(;f--;)d[b]=d[b++-g];if(a.a===a.input.length)return a.b=b,-1}}for(;8<=a.d;)a.d-=8,a.a--;a.b=b;a.status=6} function J(a,d){var b,c=a.input.length/a.a+1|0,e,g,f,l=a.input,h=a.c;d&&("number"===typeof d.o&&(c=d.o),"number"===typeof d.q&&(c+=d.q));2>c?(e=(l.length-a.a)/a.k[2],f=258*(e/2)|0,g=fe}if(c)return new (u?Uint8Array:Array);d=this.f.i(this.input,this.a);0!==this.f.a&&(this.input=u?this.input.subarray(this.f.a):this.input.slice(this.f.a),this.a=0);return d};$.prototype.j=function(){return this.f.j()};t("Zlib.InflateStream",$);t("Zlib.InflateStream.prototype.decompress",$.prototype.i);t("Zlib.InflateStream.prototype.getBytes",$.prototype.j);}).call(this); //@ sourceMappingURL=inflate_stream.min.js.map +this.a=g;e=m}c=0>e}if(c)return new (u?Uint8Array:Array);d=this.f.i(this.input,this.a);0!==this.f.a&&(this.input=u?this.input.subarray(this.f.a):this.input.slice(this.f.a),this.a=0);return d};$.prototype.j=function(){return this.f.j()};t("Zlib.InflateStream",$);t("Zlib.InflateStream.prototype.decompress",$.prototype.i);t("Zlib.InflateStream.prototype.getBytes",$.prototype.j);}).call(this); diff --git a/bin/inflate_stream.min.js.map b/bin/inflate_stream.min.js.map deleted file mode 100644 index b8b0765..0000000 --- a/bin/inflate_stream.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"./inflate_stream.min.js", -"lineCount":13, -"mappings":"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", -"sources":["../closure-primitives/base.js","../define/typedarray/hybrid.js","../src/huffman.js","../src/rawinflate_stream.js","../src/inflate_stream.js","../src/zlib.js","../export/inflate_stream.js"], -"names":["goog.global","goog.exportPath_","name","opt_object","parts","split","cur","execScript","part","length","shift","JSCompiler_alias_VOID","USE_TYPEDARRAY","Uint8Array","Uint16Array","Uint32Array","DataView","Zlib.Huffman.buildHuffmanTable","lengths","listSize","maxCodeLength","minCodeLength","Number","POSITIVE_INFINITY","size","table","bitLength","code","skip","reversed","rtemp","i","j","value","Array","Zlib.RawInflateStream","input","ip","opt_buffersize","blocks","bufferSize","ZLIB_STREAM_RAW_INFLATE_BUFFER_SIZE","totalpos","bitsbuflen","bitsbuf","output","op","resize","bfinal","sp","status","Zlib.RawInflateStream.Status.INITIALIZED","INITIALIZED","prototype","decompress","Zlib.RawInflateStream.prototype.decompress","newInput","stop","BLOCK_HEADER_START","hdr","readBlockHeader","save_","readBits","restore_","JSCompiler_alias_TRUE","currentBlockType","UNCOMPRESSED","FIXED","DYNAMIC","Error","BLOCK_HEADER_END","BLOCK_BODY_START","len","nlen","readUncompressedBlockHeader","blockLength","BLOCK_BODY_END","parseFixedHuffmanBlock","litlenTable","Zlib.RawInflateStream.FixedLiteralLengthTable","distTable","Zlib.RawInflateStream.FixedDistanceTable","parseDynamicHuffmanBlock","DECODE_BLOCK_START","parseUncompressedBlock","expandBuffer","DECODE_BLOCK_END","decodeHuffman","buffer","concatBuffer","set","subarray","slice","Zlib.RawInflateStream.Order","Zlib.RawInflateStream.LengthCodeTable","Zlib.RawInflateStream.LengthExtraTable","Zlib.RawInflateStream.DistCodeTable","Zlib.RawInflateStream.DistExtraTable","il","Zlib.RawInflateStream.prototype.readBits","octet","Zlib.RawInflateStream.prototype.readCodeByTable","codeTable","codeWithLength","codeLength","Zlib.RawInflateStream.prototype.save_","ip_","bitsbuflen_","bitsbuf_","Zlib.RawInflateStream.prototype.restore_","Zlib.RawInflateStream.prototype.parseDynamicHuffmanBlock","parseDynamicHuffmanBlockImpl","decode","num","prev","repeat","bits","readCodeByTable","hclen","codeLengths","codeLengthsTable","litlenLengths","hlit","distLengths","hdist","call","Zlib.RawInflateStream.Order.length","e","Zlib.RawInflateStream.prototype.decodeHuffman","ti","codeDist","litlen","dist","olength","Zlib.RawInflateStream.prototype.expandBuffer","opt_param","ratio","maxHuffCode","newSize","maxInflateSize","fixRatio","addRatio","getBytes","Zlib.RawInflateStream.prototype.getBytes","Zlib.InflateStream","rawinflate","Zlib.InflateStream.prototype.decompress","tmp","concat","cmf","flg","DEFLATE","method","Zlib.InflateStream.prototype.getBytes","publicPath"] -} diff --git a/bin/node-zlib.dev.js b/bin/node-zlib.dev.js new file mode 100644 index 0000000..76f8859 --- /dev/null +++ b/bin/node-zlib.dev.js @@ -0,0 +1,54 @@ +/** @license zlib.js 2012 - imaya [ https://github.com/imaya/zlib.js ] The MIT License */(function() {'use strict';function q(b){throw b;}var t=void 0,v=!0;var A="undefined"!==typeof Uint8Array&&"undefined"!==typeof Uint16Array&&"undefined"!==typeof Uint32Array&&"undefined"!==typeof DataView;function E(b,a){this.index="number"===typeof a?a:0;this.m=0;this.buffer=b instanceof(A?Uint8Array:Array)?b:new (A?Uint8Array:Array)(32768);2*this.buffer.length<=this.index&&q(Error("invalid index"));this.buffer.length<=this.index&&this.f()}E.prototype.f=function(){var b=this.buffer,a,c=b.length,d=new (A?Uint8Array:Array)(c<<1);if(A)d.set(b);else for(a=0;a>>8&255]<<16|G[b>>>16&255]<<8|G[b>>>24&255])>>32-a:G[b]>>8-a);if(8>a+f)g=g<>a-k-1&1,8===++f&&(f=0,d[e++]=G[g],g=0,e===d.length&&(d=this.f()));d[e]=g;this.buffer=d;this.m=f;this.index=e};E.prototype.finish=function(){var b=this.buffer,a=this.index,c;0J;++J){for(var N=J,Q=N,ba=7,N=N>>>1;N;N>>>=1)Q<<=1,Q|=N&1,--ba;aa[J]=(Q<>>0}var G=aa;function R(b,a,c){var d,e="number"===typeof a?a:a=0,f="number"===typeof c?c:b.length;d=-1;for(e=f&7;e--;++a)d=d>>>8^S[(d^b[a])&255];for(e=f>>3;e--;a+=8)d=d>>>8^S[(d^b[a])&255],d=d>>>8^S[(d^b[a+1])&255],d=d>>>8^S[(d^b[a+2])&255],d=d>>>8^S[(d^b[a+3])&255],d=d>>>8^S[(d^b[a+4])&255],d=d>>>8^S[(d^b[a+5])&255],d=d>>>8^S[(d^b[a+6])&255],d=d>>>8^S[(d^b[a+7])&255];return(d^4294967295)>>>0} +var ga=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759, +2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977, +2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755, +2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956, +3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270, +936918E3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117],S=A?new Uint32Array(ga):ga;function ha(){};function ia(b){this.buffer=new (A?Uint16Array:Array)(2*b);this.length=0}ia.prototype.getParent=function(b){return 2*((b-2)/4|0)};ia.prototype.push=function(b,a){var c,d,e=this.buffer,f;c=this.length;e[this.length++]=a;for(e[this.length++]=b;0e[d])f=e[c],e[c]=e[d],e[d]=f,f=e[c+1],e[c+1]=e[d+1],e[d+1]=f,c=d;else break;return this.length}; +ia.prototype.pop=function(){var b,a,c=this.buffer,d,e,f;a=c[0];b=c[1];this.length-=2;c[0]=c[this.length];c[1]=c[this.length+1];for(f=0;;){e=2*f+2;if(e>=this.length)break;e+2c[e]&&(e+=2);if(c[e]>c[f])d=c[f],c[f]=c[e],c[e]=d,d=c[f+1],c[f+1]=c[e+1],c[e+1]=d;else break;f=e}return{index:b,value:a,length:this.length}};function ja(b){var a=b.length,c=0,d=Number.POSITIVE_INFINITY,e,f,g,k,h,l,s,p,m,n;for(p=0;pc&&(c=b[p]),b[p]>=1;n=g<<16|p;for(m=l;mT;T++)switch(v){case 143>=T:pa.push([T+48,8]);break;case 255>=T:pa.push([T-144+400,9]);break;case 279>=T:pa.push([T-256+0,7]);break;case 287>=T:pa.push([T-280+192,8]);break;default:q("invalid literal: "+T)} +ma.prototype.h=function(){var b,a,c,d,e=this.input;switch(this.k){case 0:c=0;for(d=e.length;c>>8&255;m[n++]=l&255;m[n++]=l>>>8&255;if(A)m.set(f,n),n+=f.length,m=m.subarray(0,n);else{s=0;for(p=f.length;sz)for(;0< +z--;)H[F++]=0,L[0]++;else for(;0z?z:138,C>z-3&&C=C?(H[F++]=17,H[F++]=C-3,L[17]++):(H[F++]=18,H[F++]=C-11,L[18]++),z-=C;else if(H[F++]=I[w],L[I[w]]++,z--,3>z)for(;0z?z:6,C>z-3&&CB;B++)sa[B]=ka[qb[B]];for(W=19;4=a:return[265,a-11,1];case 14>=a:return[266,a-13,1];case 16>=a:return[267,a-15,1];case 18>=a:return[268,a-17,1];case 22>=a:return[269,a-19,2];case 26>=a:return[270,a-23,2];case 30>=a:return[271,a-27,2];case 34>=a:return[272, +a-31,2];case 42>=a:return[273,a-35,3];case 50>=a:return[274,a-43,3];case 58>=a:return[275,a-51,3];case 66>=a:return[276,a-59,3];case 82>=a:return[277,a-67,4];case 98>=a:return[278,a-83,4];case 114>=a:return[279,a-99,4];case 130>=a:return[280,a-115,4];case 162>=a:return[281,a-131,5];case 194>=a:return[282,a-163,5];case 226>=a:return[283,a-195,5];case 257>=a:return[284,a-227,5];case 258===a:return[285,a-258,0];default:q("invalid length: "+a)}}var a=[],c,d;for(c=3;258>=c;c++)d=b(c),a[c]=d[2]<<24|d[1]<< +16|d[0];return a}(),xa=A?new Uint32Array(wa):wa; +function qa(b,a){function c(a,c){var b=a.O,d=[],f=0,e;e=xa[a.length];d[f++]=e&65535;d[f++]=e>>16&255;d[f++]=e>>24;var g;switch(v){case 1===b:g=[0,b-1,0];break;case 2===b:g=[1,b-2,0];break;case 3===b:g=[2,b-3,0];break;case 4===b:g=[3,b-4,0];break;case 6>=b:g=[4,b-5,1];break;case 8>=b:g=[5,b-7,1];break;case 12>=b:g=[6,b-9,2];break;case 16>=b:g=[7,b-13,2];break;case 24>=b:g=[8,b-17,3];break;case 32>=b:g=[9,b-25,3];break;case 48>=b:g=[10,b-33,4];break;case 64>=b:g=[11,b-49,4];break;case 96>=b:g=[12,b- +65,5];break;case 128>=b:g=[13,b-97,5];break;case 192>=b:g=[14,b-129,6];break;case 256>=b:g=[15,b-193,6];break;case 384>=b:g=[16,b-257,7];break;case 512>=b:g=[17,b-385,7];break;case 768>=b:g=[18,b-513,8];break;case 1024>=b:g=[19,b-769,8];break;case 1536>=b:g=[20,b-1025,9];break;case 2048>=b:g=[21,b-1537,9];break;case 3072>=b:g=[22,b-2049,10];break;case 4096>=b:g=[23,b-3073,10];break;case 6144>=b:g=[24,b-4097,11];break;case 8192>=b:g=[25,b-6145,11];break;case 12288>=b:g=[26,b-8193,12];break;case 16384>= +b:g=[27,b-12289,12];break;case 24576>=b:g=[28,b-16385,13];break;case 32768>=b:g=[29,b-24577,13];break;default:q("invalid distance")}e=g;d[f++]=e[0];d[f++]=e[1];d[f++]=e[2];var h,k;h=0;for(k=d.length;h=f;)u[f++]=0;for(f=0;29>=f;)x[f++]=0}u[256]=1;d=0;for(e=a.length;d=e){p&&c(p,-1);f=0;for(g=e-d;fg&&a+gf&&(e=d,f=g);if(258===g)break}return new ua(f,a-e)} +function ra(b,a){var c=b.length,d=new ia(572),e=new (A?Uint8Array:Array)(c),f,g,k,h,l;if(!A)for(h=0;h2*e[n-1]+f[n]&&(e[n]=2*e[n-1]+f[n]),k[n]=Array(e[n]),h[n]=Array(e[n]);for(m=0;mb[m]?(k[n][r]=u,h[n][r]=a,x+=2):(k[n][r]=b[m],h[n][r]=m,++m);l[n]=0;1===f[n]&&d(n)}return g} +function ta(b){var a=new (A?Uint16Array:Array)(b.length),c=[],d=[],e=0,f,g,k,h;f=0;for(g=b.length;f>>=1}return a};function Aa(b,a){this.input=b;this.b=this.c=0;this.g={};a&&(a.flags&&(this.g=a.flags),"string"===typeof a.filename&&(this.filename=a.filename),"string"===typeof a.comment&&(this.w=a.comment),a.deflateOptions&&(this.l=a.deflateOptions));this.l||(this.l={})} +Aa.prototype.h=function(){var b,a,c,d,e,f,g,k,h=new (A?Uint8Array:Array)(32768),l=0,s=this.input,p=this.c,m=this.filename,n=this.w;h[l++]=31;h[l++]=139;h[l++]=8;b=0;this.g.fname&&(b|=Ba);this.g.fcomment&&(b|=Ca);this.g.fhcrc&&(b|=Da);h[l++]=b;a=(Date.now?Date.now():+new Date)/1E3|0;h[l++]=a&255;h[l++]=a>>>8&255;h[l++]=a>>>16&255;h[l++]=a>>>24&255;h[l++]=0;h[l++]=Sa;if(this.g.fname!==t){g=0;for(k=m.length;g>>8&255),h[l++]=f&255;h[l++]=0}if(this.g.comment){g= +0;for(k=n.length;g>>8&255),h[l++]=f&255;h[l++]=0}this.g.fhcrc&&(c=R(h,0,l)&65535,h[l++]=c&255,h[l++]=c>>>8&255);this.l.outputBuffer=h;this.l.outputIndex=l;e=new ma(s,this.l);h=e.h();l=e.b;A&&(l+8>h.buffer.byteLength?(this.a=new Uint8Array(l+8),this.a.set(new Uint8Array(h.buffer)),h=this.a):h=new Uint8Array(h.buffer));d=R(s,t,t);h[l++]=d&255;h[l++]=d>>>8&255;h[l++]=d>>>16&255;h[l++]=d>>>24&255;k=s.length;h[l++]=k&255;h[l++]=k>>>8&255;h[l++]=k>>>16&255;h[l++]= +k>>>24&255;this.c=p;A&&l>>=1;switch(b){case 0:var a=this.input,c=this.c,d=this.a,e=this.b,f=a.length,g=t,k=t,h=d.length,l=t;this.e=this.j=0;c+1>=f&&q(Error("invalid uncompressed block header: LEN"));g=a[c++]|a[c++]<<8;c+1>=f&&q(Error("invalid uncompressed block header: NLEN"));k=a[c++]|a[c++]<<8;g===~k&&q(Error("invalid uncompressed block header: length verify"));c+g>a.length&&q(Error("input buffer is broken"));switch(this.q){case Ua:for(;e+g>d.length;){l= +h-e;g-=l;if(A)d.set(a.subarray(c,c+l),e),e+=l,c+=l;else for(;l--;)d[e++]=a[c++];this.b=e;d=this.f();e=this.b}break;case Ta:for(;e+g>d.length;)d=this.f({B:2});break;default:q(Error("invalid inflate mode"))}if(A)d.set(a.subarray(c,c+g),e),e+=g,c+=g;else for(;g--;)d[e++]=a[c++];this.c=c;this.b=e;this.a=d;break;case 1:this.r(Va,Wa);break;case 2:Xa(this);break;default:q(Error("unknown BTYPE: "+b))}}return this.z()}; +var Ya=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],Za=A?new Uint16Array(Ya):Ya,$a=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258],ab=A?new Uint16Array($a):$a,bb=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0],cb=A?new Uint8Array(bb):bb,db=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],eb=A?new Uint16Array(db):db,fb=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10, +10,11,11,12,12,13,13],gb=A?new Uint8Array(fb):fb,hb=new (A?Uint8Array:Array)(288),$,ib;$=0;for(ib=hb.length;$=$?8:255>=$?9:279>=$?7:8;var Va=ja(hb),jb=new (A?Uint8Array:Array)(30),kb,lb;kb=0;for(lb=jb.length;kb=g&&q(Error("input buffer is broken")),c|=e[f++]<>>a;b.e=d-a;b.c=f;return k} +function mb(b,a){for(var c=b.j,d=b.e,e=b.input,f=b.c,g=e.length,k=a[0],h=a[1],l,s;d=g);)c|=e[f++]<>>16;b.j=c>>s;b.e=d-s;b.c=f;return l&65535} +function Xa(b){function a(a,b,c){var d,e=this.I,f,g;for(g=0;gf)d>=e&&(this.b=d,c=this.f(),d=this.b),c[d++]=f;else{g=f-257;h=ab[g];0=e&&(this.b=d,c=this.f(),d=this.b);for(;h--;)c[d]=c[d++-k]}for(;8<=this.e;)this.e-=8,this.c--;this.b=d}; +Y.prototype.R=function(b,a){var c=this.a,d=this.b;this.A=b;for(var e=c.length,f,g,k,h;256!==(f=mb(this,b));)if(256>f)d>=e&&(c=this.f(),e=c.length),c[d++]=f;else{g=f-257;h=ab[g];0e&&(c=this.f(),e=c.length);for(;h--;)c[d]=c[d++-k]}for(;8<=this.e;)this.e-=8,this.c--;this.b=d}; +Y.prototype.f=function(){var b=new (A?Uint8Array:Array)(this.b-32768),a=this.b-32768,c,d,e=this.a;if(A)b.set(e.subarray(32768,b.length));else{c=0;for(d=b.length;cc;++c)e[c]=e[a+c];this.b=32768;return e}; +Y.prototype.T=function(b){var a,c=this.input.length/this.c+1|0,d,e,f,g=this.input,k=this.a;b&&("number"===typeof b.B&&(c=b.B),"number"===typeof b.N&&(c+=b.N));2>c?(d=(g.length-this.c)/this.A[2],f=258*(d/2)|0,e=fa&&(this.a.length=a),b=this.a);return this.buffer=b};function nb(b){this.input=b;this.c=0;this.G=[];this.S=!1} +nb.prototype.i=function(){for(var b=this.input.length;this.c>>0;R(e,t,t)!==s&&q(Error("invalid CRC-32 checksum: 0x"+R(e,t,t).toString(16)+" / 0x"+ +s.toString(16)));a.$=c=(p[m++]|p[m++]<<8|p[m++]<<16|p[m++]<<24)>>>0;(e.length&4294967295)!==c&&q(Error("invalid input size: "+(e.length&4294967295)+" / "+c));this.G.push(a);this.c=m}this.S=v;var n=this.G,r,u,x=0,O=0,y;r=0;for(u=n.length;r>>0;b=a}for(var e=1,f=0,g=b.length,k,h=0;0>>0};function pb(b,a){var c,d;this.input=b;this.c=0;if(a||!(a={}))a.index&&(this.c=a.index),a.verify&&(this.W=a.verify);c=b[this.c++];d=b[this.c++];switch(c&15){case rb:this.method=rb;break;default:q(Error("unsupported compression method"))}0!==((c<<8)+d)%31&&q(Error("invalid fcheck flag:"+((c<<8)+d)%31));d&32&&q(Error("fdict flag is not supported"));this.K=new Y(b,{index:this.c,bufferSize:a.bufferSize,bufferType:a.bufferType,resize:a.resize})} +pb.prototype.i=function(){var b=this.input,a,c;a=this.K.i();this.c=this.K.c;this.W&&(c=(b[this.c++]<<24|b[this.c++]<<16|b[this.c++]<<8|b[this.c++])>>>0,c!==ob(a)&&q(Error("invalid adler-32 checksum")));return a};var rb=8;function sb(b,a){this.input=b;this.a=new (A?Uint8Array:Array)(32768);this.k=tb.t;var c={},d;if((a||!(a={}))&&"number"===typeof a.compressionType)this.k=a.compressionType;for(d in a)c[d]=a[d];c.outputBuffer=this.a;this.J=new ma(this.input,c)}var tb=oa; +sb.prototype.h=function(){var b,a,c,d,e,f,g,k=0;g=this.a;b=rb;switch(b){case rb:a=Math.LOG2E*Math.log(32768)-8;break;default:q(Error("invalid compression method"))}c=a<<4|b;g[k++]=c;switch(b){case rb:switch(this.k){case tb.NONE:e=0;break;case tb.M:e=1;break;case tb.t:e=2;break;default:q(Error("unsupported compression type"))}break;default:q(Error("invalid compression method"))}d=e<<6|0;g[k++]=d|31-(256*c+d)%31;f=ob(this.input);this.J.b=k;g=this.J.h();k=g.length;A&&(g=new Uint8Array(g.buffer),g.length<= +k+4&&(this.a=new Uint8Array(g.length+4),this.a.set(g),g=this.a),g=g.subarray(0,k+4));g[k++]=f>>24&255;g[k++]=f>>16&255;g[k++]=f>>8&255;g[k++]=f&255;return g};exports.deflate=ub;exports.deflateSync=vb;exports.inflate=wb;exports.inflateSync=xb;exports.gzip=yb;exports.gzipSync=zb;exports.gunzip=Ab;exports.gunzipSync=Bb;function ub(b,a,c){process.nextTick(function(){var d,e;try{e=vb(b,c)}catch(f){d=f}a(d,e)})}function vb(b,a){var c;c=(new sb(b)).h();a||(a={});return a.H?c:Cb(c)}function wb(b,a,c){process.nextTick(function(){var d,e;try{e=xb(b,c)}catch(f){d=f}a(d,e)})} +function xb(b,a){var c;b.subarray=b.slice;c=(new pb(b)).i();a||(a={});return a.noBuffer?c:Cb(c)}function yb(b,a,c){process.nextTick(function(){var d,e;try{e=zb(b,c)}catch(f){d=f}a(d,e)})}function zb(b,a){var c;b.subarray=b.slice;c=(new Aa(b)).h();a||(a={});return a.H?c:Cb(c)}function Ab(b,a,c){process.nextTick(function(){var d,e;try{e=Bb(b,c)}catch(f){d=f}a(d,e)})}function Bb(b,a){var c;b.subarray=b.slice;c=(new nb(b)).i();a||(a={});return a.H?c:Cb(c)} +function Cb(b){var a=new Buffer(b.length),c,d;c=0;for(d=b.length;c>24&255;g[k++]=f>>16&255;g[k++]=f>>8&255;g[k++]=f&255;return g};exports.deflate=ub;exports.deflateSync=vb;exports.inflate=wb;exports.inflateSync=xb;exports.gzip=yb;exports.gzipSync=zb;exports.gunzip=Ab;exports.gunzipSync=Bb;function ub(b,a,c){process.nextTick(function(){var d,e;try{e=vb(b,c)}catch(f){d=f}a(d,e)})}function vb(b,a){var c;c=(new sb(b)).h();a||(a={});return a.H?c:Cb(c)}function wb(b,a,c){process.nextTick(function(){var d,e;try{e=xb(b,c)}catch(f){d=f}a(d,e)})} function xb(b,a){var c;b.subarray=b.slice;c=(new pb(b)).i();a||(a={});return a.noBuffer?c:Cb(c)}function yb(b,a,c){process.nextTick(function(){var d,e;try{e=zb(b,c)}catch(f){d=f}a(d,e)})}function zb(b,a){var c;b.subarray=b.slice;c=(new Aa(b)).h();a||(a={});return a.H?c:Cb(c)}function Ab(b,a,c){process.nextTick(function(){var d,e;try{e=Bb(b,c)}catch(f){d=f}a(d,e)})}function Bb(b,a){var c;b.subarray=b.slice;c=(new nb(b)).i();a||(a={});return a.H?c:Cb(c)} -function Cb(b){var a=new Buffer(b.length),c,d;c=0;for(d=b.length;c>>8&255]<<16|L[e>>>16&255]<<8|L[e>>>24&255])>>32-d:L[e]>>8-d);if(8>d+b)k=k<>d-m-1&1,8===++b&&(b=0,f[a++]=L[k],k=0,a===f.length&&(f=ca(this)));f[a]=k;this.buffer=f;this.d=b;this.index=a};K.prototype.finish=function(){var e=this.buffer,d=this.index,c;0M;++M){for(var R=M,S=R,ha=7,R=R>>>1;R;R>>>=1)S<<=1,S|=R&1,--ha;ga[M]=(S<>>0}var L=ga;function ja(e){this.buffer=new (C?Uint16Array:Array)(2*e);this.length=0}ja.prototype.getParent=function(e){return 2*((e-2)/4|0)};ja.prototype.push=function(e,d){var c,f,a=this.buffer,b;c=this.length;a[this.length++]=d;for(a[this.length++]=e;0a[f])b=a[c],a[c]=a[f],a[f]=b,b=a[c+1],a[c+1]=a[f+1],a[f+1]=b,c=f;else break;return this.length}; +ja.prototype.pop=function(){var e,d,c=this.buffer,f,a,b;d=c[0];e=c[1];this.length-=2;c[0]=c[this.length];c[1]=c[this.length+1];for(b=0;;){a=2*b+2;if(a>=this.length)break;a+2c[a]&&(a+=2);if(c[a]>c[b])f=c[b],c[b]=c[a],c[a]=f,f=c[b+1],c[b+1]=c[a+1],c[a+1]=f;else break;b=a}return{index:e,value:d,length:this.length}};function ka(e,d){this.e=ma;this.f=0;this.input=C&&e instanceof Array?new Uint8Array(e):e;this.c=0;d&&(d.lazy&&(this.f=d.lazy),"number"===typeof d.compressionType&&(this.e=d.compressionType),d.outputBuffer&&(this.b=C&&d.outputBuffer instanceof Array?new Uint8Array(d.outputBuffer):d.outputBuffer),"number"===typeof d.outputIndex&&(this.c=d.outputIndex));this.b||(this.b=new (C?Uint8Array:Array)(32768))}var ma=2,T=[],U; +for(U=0;288>U;U++)switch(u){case 143>=U:T.push([U+48,8]);break;case 255>=U:T.push([U-144+400,9]);break;case 279>=U:T.push([U-256+0,7]);break;case 287>=U:T.push([U-280+192,8]);break;default:throw"invalid literal: "+U;} +ka.prototype.h=function(){var e,d,c,f,a=this.input;switch(this.e){case 0:c=0;for(f=a.length;c>>8&255;l[h++]=p&255;l[h++]=p>>>8&255;if(C)l.set(b,h),h+=b.length,l=l.subarray(0,h);else{v=0;for(x=b.length;vs)for(;0s?s:138,A>s-3&&A=A?(E[D++]=17,E[D++]=A-3,H[17]++):(E[D++]=18,E[D++]=A-11,H[18]++),s-=A;else if(E[D++]=F[r],H[F[r]]++,s--,3>s)for(;0s?s:6,A>s-3&&Ay;y++)ia[y]=ea[Ia[y]];for(P=19;4=a:return[265,a-11,1];case 14>=a:return[266,a-13,1];case 16>=a:return[267,a-15,1];case 18>=a:return[268,a-17,1];case 22>=a:return[269,a-19,2];case 26>=a:return[270,a-23,2];case 30>=a:return[271,a-27,2];case 34>=a:return[272, +a-31,2];case 42>=a:return[273,a-35,3];case 50>=a:return[274,a-43,3];case 58>=a:return[275,a-51,3];case 66>=a:return[276,a-59,3];case 82>=a:return[277,a-67,4];case 98>=a:return[278,a-83,4];case 114>=a:return[279,a-99,4];case 130>=a:return[280,a-115,4];case 162>=a:return[281,a-131,5];case 194>=a:return[282,a-163,5];case 226>=a:return[283,a-195,5];case 257>=a:return[284,a-227,5];case 258===a:return[285,a-258,0];default:throw"invalid length: "+a;}}var d=[],c,f;for(c=3;258>=c;c++)f=e(c),d[c]=f[2]<<24| +f[1]<<16|f[0];return d}(),Ga=C?new Uint32Array(Fa):Fa; +function na(e,d){function c(a,c){var b=a.g,d=[],f=0,e;e=Ga[a.length];d[f++]=e&65535;d[f++]=e>>16&255;d[f++]=e>>24;var g;switch(u){case 1===b:g=[0,b-1,0];break;case 2===b:g=[1,b-2,0];break;case 3===b:g=[2,b-3,0];break;case 4===b:g=[3,b-4,0];break;case 6>=b:g=[4,b-5,1];break;case 8>=b:g=[5,b-7,1];break;case 12>=b:g=[6,b-9,2];break;case 16>=b:g=[7,b-13,2];break;case 24>=b:g=[8,b-17,3];break;case 32>=b:g=[9,b-25,3];break;case 48>=b:g=[10,b-33,4];break;case 64>=b:g=[11,b-49,4];break;case 96>=b:g=[12,b- +65,5];break;case 128>=b:g=[13,b-97,5];break;case 192>=b:g=[14,b-129,6];break;case 256>=b:g=[15,b-193,6];break;case 384>=b:g=[16,b-257,7];break;case 512>=b:g=[17,b-385,7];break;case 768>=b:g=[18,b-513,8];break;case 1024>=b:g=[19,b-769,8];break;case 1536>=b:g=[20,b-1025,9];break;case 2048>=b:g=[21,b-1537,9];break;case 3072>=b:g=[22,b-2049,10];break;case 4096>=b:g=[23,b-3073,10];break;case 6144>=b:g=[24,b-4097,11];break;case 8192>=b:g=[25,b-6145,11];break;case 12288>=b:g=[26,b-8193,12];break;case 16384>= +b:g=[27,b-12289,12];break;case 24576>=b:g=[28,b-16385,13];break;case 32768>=b:g=[29,b-24577,13];break;default:throw"invalid distance";}e=g;d[f++]=e[0];d[f++]=e[1];d[f++]=e[2];var k,m;k=0;for(m=d.length;k=b;)t[b++]=0;for(b=0;29>=b;)w[b++]=0}t[256]=1;f=0;for(a=d.length;f=a){x&&c(x,-1);b=0;for(k=a-f;bk&&d+kb&&(a=f,b=k);if(258===k)break}return new qa(b,d-a)} +function oa(e,d){var c=e.length,f=new ja(572),a=new (C?Uint8Array:Array)(c),b,k,m,g,p;if(!C)for(g=0;g2*a[h-1]+b[h]&&(a[h]=2*a[h-1]+b[h]),m[h]=Array(a[h]),g[h]=Array(a[h]);for(l=0;le[l]?(m[h][q]=t,g[h][q]=d,w+=2):(m[h][q]=e[l],g[h][q]=l,++l);p[h]=0;1===b[h]&&f(h)}return k} +function pa(e){var d=new (C?Uint16Array:Array)(e.length),c=[],f=[],a=0,b,k,m,g;b=0;for(k=e.length;b>>=1}return d};ba("Zlib.RawDeflate",ka);ba("Zlib.RawDeflate.prototype.compress",ka.prototype.h);var Ka={NONE:0,FIXED:1,DYNAMIC:ma},V,La,$,Ma;if(Object.keys)V=Object.keys(Ka);else for(La in V=[],$=0,Ka)V[$++]=La;$=0;for(Ma=V.length;$2*a[h-1]+b[h]&&(a[h]=2*a[h-1]+b[h]),m[h]=Array(a[h]),g[h]=Array(a[h]);for(l=0;le[l]?(m[h][q]=t,g[h][q]=d,w+=2):(m[h][q]=e[l],g[h][q]=l,++l);p[h]=0;1===b[h]&&f(h)}return k} -function pa(e){var d=new (C?Uint16Array:Array)(e.length),c=[],f=[],a=0,b,k,m,g;b=0;for(k=e.length;b>>=1}return d};ba("Zlib.RawDeflate",ka);ba("Zlib.RawDeflate.prototype.compress",ka.prototype.h);var Ka={NONE:0,FIXED:1,DYNAMIC:ma},V,La,$,Ma;if(Object.keys)V=Object.keys(Ka);else for(La in V=[],$=0,Ka)V[$++]=La;$=0;for(Ma=V.length;$>>=1}return d};ba("Zlib.RawDeflate",ka);ba("Zlib.RawDeflate.prototype.compress",ka.prototype.h);var Ka={NONE:0,FIXED:1,DYNAMIC:ma},V,La,$,Ma;if(Object.keys)V=Object.keys(Ka);else for(La in V=[],$=0,Ka)V[$++]=La;$=0;for(Ma=V.length;$a&&(a=b[n]),b[n]>=1;J=g<<16|n;for(s=m;s>>=1;switch(b){case 0:var e=this.input,a=this.d,c=this.b,d=this.a,f=e.length,g=void 0,h=void 0,k=c.length,m=void 0;this.c=this.f=0;if(a+1>=f)throw Error("invalid uncompressed block header: LEN");g=e[a++]|e[a++]<<8;if(a+1>=f)throw Error("invalid uncompressed block header: NLEN");h=e[a++]|e[a++]<<8;if(g===~h)throw Error("invalid uncompressed block header: length verify");if(a+g>e.length)throw Error("input buffer is broken");switch(this.i){case w:for(;d+ +g>c.length;){m=k-d;g-=m;if(q)c.set(e.subarray(a,a+m),d),d+=m,a+=m;else for(;m--;)c[d++]=e[a++];this.a=d;c=this.e();d=this.a}break;case v:for(;d+g>c.length;)c=this.e({o:2});break;default:throw Error("invalid inflate mode");}if(q)c.set(e.subarray(a,a+g),d),d+=g,a+=g;else for(;g--;)c[d++]=e[a++];this.d=a;this.a=d;this.b=c;break;case 1:this.j(y,z);break;case 2:A(this);break;default:throw Error("unknown BTYPE: "+b);}}return this.m()}; +var B=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],C=q?new Uint16Array(B):B,D=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258],E=q?new Uint16Array(D):D,F=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0],G=q?new Uint8Array(F):F,H=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],I=q?new Uint16Array(H):H,K=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13, +13],L=q?new Uint8Array(K):K,M=new (q?Uint8Array:Array)(288),N,O;N=0;for(O=M.length;N=N?8:255>=N?9:279>=N?7:8;var y=t(M),P=new (q?Uint8Array:Array)(30),Q,R;Q=0;for(R=P.length;Q=g)throw Error("input buffer is broken");a|=d[f++]<>>e;b.c=c-e;b.d=f;return h} +function S(b,e){for(var a=b.f,c=b.c,d=b.input,f=b.d,g=d.length,h=e[0],k=e[1],m,r;c=g);)a|=d[f++]<>>16;b.f=a>>r;b.c=c-r;b.d=f;return m&65535} +function A(b){function e(a,b,c){var e,d=this.p,f,g;for(g=0;gf)c>=d&&(this.a=c,a=this.e(),c=this.a),a[c++]=f;else{g=f-257;k=E[g];0=d&&(this.a=c,a=this.e(),c=this.a);for(;k--;)a[c]=a[c++-h]}for(;8<=this.c;)this.c-=8,this.d--;this.a=c}; +u.prototype.t=function(b,e){var a=this.b,c=this.a;this.n=b;for(var d=a.length,f,g,h,k;256!==(f=S(this,b));)if(256>f)c>=d&&(a=this.e(),d=a.length),a[c++]=f;else{g=f-257;k=E[g];0d&&(a=this.e(),d=a.length);for(;k--;)a[c]=a[c++-h]}for(;8<=this.c;)this.c-=8,this.d--;this.a=c}; +u.prototype.e=function(){var b=new (q?Uint8Array:Array)(this.a-32768),e=this.a-32768,a,c,d=this.b;if(q)b.set(d.subarray(32768,b.length));else{a=0;for(c=b.length;aa;++a)d[a]=d[e+a];this.a=32768;return d}; +u.prototype.v=function(b){var e,a=this.input.length/this.d+1|0,c,d,f,g=this.input,h=this.b;b&&("number"===typeof b.o&&(a=b.o),"number"===typeof b.r&&(a+=b.r));2>a?(c=(g.length-this.d)/this.n[2],f=258*(c/2)|0,d=fe&&(this.b.length=e),b=this.b);return this.buffer=b};p("Zlib.RawInflate",u);p("Zlib.RawInflate.prototype.decompress",u.prototype.u);var T={ADAPTIVE:v,BLOCK:w},U,V,W,X;if(Object.keys)U=Object.keys(T);else for(V in U=[],W=0,T)U[W++]=V;W=0;for(X=U.length;Wa;++a)d[a]=d[e+a];this.a=32768;return d}; u.prototype.v=function(b){var e,a=this.input.length/this.d+1|0,c,d,f,g=this.input,h=this.b;b&&("number"===typeof b.o&&(a=b.o),"number"===typeof b.r&&(a+=b.r));2>a?(c=(g.length-this.d)/this.n[2],f=258*(c/2)|0,d=fe&&(this.b.length=e),b=this.b);return this.buffer=b};p("Zlib.RawInflate",u);p("Zlib.RawInflate.prototype.decompress",u.prototype.u);var T={ADAPTIVE:v,BLOCK:w},U,V,W,X;if(Object.keys)U=Object.keys(T);else for(V in U=[],W=0,T)U[W++]=V;W=0;for(X=U.length;We&&(this.b.length=e),b=this.b);return this.buffer=b};p("Zlib.RawInflate",u);p("Zlib.RawInflate.prototype.decompress",u.prototype.u);var T={ADAPTIVE:v,BLOCK:w},U,V,W,X;if(Object.keys)U=Object.keys(T);else for(V in U=[],W=0,T)U[W++]=V;W=0;for(X=U.length;Wx;++x)for(var y=x,ba=7,y=y>>>1;y;y>>>=1)--ba;var z=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759, +2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977, +2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755, +2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956, +3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270, +936918E3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117],B=w?new Uint32Array(z):z;function C(a){var b=a.length,c=0,d=Number.POSITIVE_INFINITY,f,h,k,e,g,l,p,s,r,A;for(s=0;sc&&(c=a[s]),a[s]>=1;A=k<<16|s;for(r=l;rE;E++)switch(!0){case 143>=E:D.push([E+48,8]);break;case 255>=E:D.push([E-144+400,9]);break;case 279>=E:D.push([E-256+0,7]);break;case 287>=E:D.push([E-280+192,8]);break;default:m("invalid literal: "+E)} +var ca=function(){function a(a){switch(!0){case 3===a:return[257,a-3,0];case 4===a:return[258,a-4,0];case 5===a:return[259,a-5,0];case 6===a:return[260,a-6,0];case 7===a:return[261,a-7,0];case 8===a:return[262,a-8,0];case 9===a:return[263,a-9,0];case 10===a:return[264,a-10,0];case 12>=a:return[265,a-11,1];case 14>=a:return[266,a-13,1];case 16>=a:return[267,a-15,1];case 18>=a:return[268,a-17,1];case 22>=a:return[269,a-19,2];case 26>=a:return[270,a-23,2];case 30>=a:return[271,a-27,2];case 34>=a:return[272, +a-31,2];case 42>=a:return[273,a-35,3];case 50>=a:return[274,a-43,3];case 58>=a:return[275,a-51,3];case 66>=a:return[276,a-59,3];case 82>=a:return[277,a-67,4];case 98>=a:return[278,a-83,4];case 114>=a:return[279,a-99,4];case 130>=a:return[280,a-115,4];case 162>=a:return[281,a-131,5];case 194>=a:return[282,a-163,5];case 226>=a:return[283,a-195,5];case 257>=a:return[284,a-227,5];case 258===a:return[285,a-258,0];default:m("invalid length: "+a)}}var b=[],c,d;for(c=3;258>=c;c++)d=a(c),b[c]=d[2]<<24|d[1]<< +16|d[0];return b}();w&&new Uint32Array(ca);function F(a,b){this.l=[];this.m=32768;this.d=this.f=this.c=this.t=0;this.input=w?new Uint8Array(a):a;this.u=!1;this.n=G;this.L=!1;if(b||!(b={}))b.index&&(this.c=b.index),b.bufferSize&&(this.m=b.bufferSize),b.bufferType&&(this.n=b.bufferType),b.resize&&(this.L=b.resize);switch(this.n){case H:this.a=32768;this.b=new (w?Uint8Array:Array)(32768+this.m+258);break;case G:this.a=0;this.b=new (w?Uint8Array:Array)(this.m);this.e=this.X;this.B=this.S;this.q=this.W;break;default:m(Error("invalid inflate mode"))}} +var H=0,G=1; +F.prototype.r=function(){for(;!this.u;){var a=I(this,3);a&1&&(this.u=!0);a>>>=1;switch(a){case 0:var b=this.input,c=this.c,d=this.b,f=this.a,h=b.length,k=q,e=q,g=d.length,l=q;this.d=this.f=0;c+1>=h&&m(Error("invalid uncompressed block header: LEN"));k=b[c++]|b[c++]<<8;c+1>=h&&m(Error("invalid uncompressed block header: NLEN"));e=b[c++]|b[c++]<<8;k===~e&&m(Error("invalid uncompressed block header: length verify"));c+k>b.length&&m(Error("input buffer is broken"));switch(this.n){case H:for(;f+k>d.length;){l= +g-f;k-=l;if(w)d.set(b.subarray(c,c+l),f),f+=l,c+=l;else for(;l--;)d[f++]=b[c++];this.a=f;d=this.e();f=this.a}break;case G:for(;f+k>d.length;)d=this.e({H:2});break;default:m(Error("invalid inflate mode"))}if(w)d.set(b.subarray(c,c+k),f),f+=k,c+=k;else for(;k--;)d[f++]=b[c++];this.c=c;this.a=f;this.b=d;break;case 1:this.q(da,ea);break;case 2:fa(this);break;default:m(Error("unknown BTYPE: "+a))}}return this.B()}; +var J=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],K=w?new Uint16Array(J):J,L=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258],M=w?new Uint16Array(L):L,ga=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0],O=w?new Uint8Array(ga):ga,ha=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],ia=w?new Uint16Array(ha):ha,ja=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11, +12,12,13,13],P=w?new Uint8Array(ja):ja,Q=new (w?Uint8Array:Array)(288),R,la;R=0;for(la=Q.length;R=R?8:255>=R?9:279>=R?7:8;var da=C(Q),S=new (w?Uint8Array:Array)(30),T,ma;T=0;for(ma=S.length;T=k&&m(Error("input buffer is broken")),c|=f[h++]<>>b;a.d=d-b;a.c=h;return e} +function U(a,b){for(var c=a.f,d=a.d,f=a.input,h=a.c,k=f.length,e=b[0],g=b[1],l,p;d=k);)c|=f[h++]<>>16;a.f=c>>p;a.d=d-p;a.c=h;return l&65535} +function fa(a){function b(a,b,c){var d,e=this.K,f,g;for(g=0;gh)d>=f&&(this.a=d,c=this.e(),d=this.a),c[d++]=h;else{k=h-257;g=M[k];0=f&&(this.a=d,c=this.e(),d=this.a);for(;g--;)c[d]=c[d++-e]}for(;8<=this.d;)this.d-=8,this.c--;this.a=d}; +u.W=function(a,b){var c=this.b,d=this.a;this.C=a;for(var f=c.length,h,k,e,g;256!==(h=U(this,a));)if(256>h)d>=f&&(c=this.e(),f=c.length),c[d++]=h;else{k=h-257;g=M[k];0f&&(c=this.e(),f=c.length);for(;g--;)c[d]=c[d++-e]}for(;8<=this.d;)this.d-=8,this.c--;this.a=d}; +u.e=function(){var a=new (w?Uint8Array:Array)(this.a-32768),b=this.a-32768,c,d,f=this.b;if(w)a.set(f.subarray(32768,a.length));else{c=0;for(d=a.length;cc;++c)f[c]=f[b+c];this.a=32768;return f}; +u.X=function(a){var b,c=this.input.length/this.c+1|0,d,f,h,k=this.input,e=this.b;a&&("number"===typeof a.H&&(c=a.H),"number"===typeof a.Q&&(c+=a.Q));2>c?(d=(k.length-this.c)/this.C[2],h=258*(d/2)|0,f=hb&&(this.b.length=b),a=this.b);return this.buffer=a};function V(a){a=a||{};this.files=[];this.v=a.comment}V.prototype.M=function(a){this.j=a};V.prototype.s=function(a){var b=a[2]&65535|2;return b*(b^1)>>8&255};V.prototype.k=function(a,b){a[0]=(B[(a[0]^b)&255]^a[0]>>>8)>>>0;a[1]=(6681*(20173*(a[1]+(a[0]&255))>>>0)>>>0)+1>>>0;a[2]=(B[(a[2]^a[1]>>>24)&255]^a[2]>>>8)>>>0};V.prototype.U=function(a){var b=[305419896,591751049,878082192],c,d;w&&(b=new Uint32Array(b));c=0;for(d=a.length;c>>0;this.z=(a[b++]|a[b++]<<8|a[b++]<<16|a[b++]<<24)>>>0;this.J=(a[b++]|a[b++]<<8|a[b++]<<16|a[b++]<<24)>>>0;this.h=a[b++]|a[b++]<< +8;this.g=a[b++]|a[b++]<<8;this.F=a[b++]|a[b++]<<8;this.fa=a[b++]|a[b++]<<8;this.ha=a[b++]|a[b++]<<8;this.ga=a[b++]|a[b++]<<8|a[b++]<<16|a[b++]<<24;this.aa=(a[b++]|a[b++]<<8|a[b++]<<16|a[b++]<<24)>>>0;this.filename=String.fromCharCode.apply(null,w?a.subarray(b,b+=this.h):a.slice(b,b+=this.h));this.Y=w?a.subarray(b,b+=this.g):a.slice(b,b+=this.g);this.v=w?a.subarray(b,b+this.F):a.slice(b,b+this.F);this.length=b-this.offset};function pa(a,b){this.input=a;this.offset=b}var qa={O:1,da:8,ea:2048}; +pa.prototype.parse=function(){var a=this.input,b=this.offset;(a[b++]!==Y[0]||a[b++]!==Y[1]||a[b++]!==Y[2]||a[b++]!==Y[3])&&m(Error("invalid local file header signature"));this.$=a[b++]|a[b++]<<8;this.I=a[b++]|a[b++]<<8;this.A=a[b++]|a[b++]<<8;this.time=a[b++]|a[b++]<<8;this.V=a[b++]|a[b++]<<8;this.p=(a[b++]|a[b++]<<8|a[b++]<<16|a[b++]<<24)>>>0;this.z=(a[b++]|a[b++]<<8|a[b++]<<16|a[b++]<<24)>>>0;this.J=(a[b++]|a[b++]<<8|a[b++]<<16|a[b++]<<24)>>>0;this.h=a[b++]|a[b++]<<8;this.g=a[b++]|a[b++]<<8;this.filename= +String.fromCharCode.apply(null,w?a.subarray(b,b+=this.h):a.slice(b,b+=this.h));this.Y=w?a.subarray(b,b+=this.g):a.slice(b,b+=this.g);this.length=b-this.offset}; +function $(a){var b=[],c={},d,f,h,k;if(!a.i){if(a.o===q){var e=a.input,g;if(!a.D)a:{var l=a.input,p;for(p=l.length-12;0>>0;a.o=(e[g++]| +e[g++]<<8|e[g++]<<16|e[g++]<<24)>>>0;a.w=e[g++]|e[g++]<<8;a.v=w?e.subarray(g,g+a.w):e.slice(g,g+a.w)}d=a.o;h=0;for(k=a.ba;h>>8^B[(n^l[t])&255];for(N=ka>>3;N--;t+=8)n=n>>>8^B[(n^l[t])&255],n=n>>>8^B[(n^l[t+1])&255],n=n>>>8^B[(n^l[t+2])&255],n=n>>>8^B[(n^l[t+3])&255],n=n>>>8^B[(n^l[t+4])&255],n=n>>>8^B[(n^l[t+5])&255],n=n>>>8^B[(n^l[t+6])&255],n=n>>>8^B[(n^l[t+7])&255];p=(n^4294967295)>>>0;k.p!==p&&m(Error("wrong crc: file=0x"+ +k.p.toString(16)+", data=0x"+p.toString(16)))}return l};u.M=function(a){this.j=a};function ra(a,b,c){c^=a.s(b);a.k(b,c);return c}u.k=V.prototype.k;u.T=V.prototype.U;u.s=V.prototype.s;v("Zlib.Unzip",W);v("Zlib.Unzip.prototype.decompress",W.prototype.r);v("Zlib.Unzip.prototype.getFilenames",W.prototype.Z);v("Zlib.Unzip.prototype.setPassword",W.prototype.M);}).call(this); +//# sourceMappingURL=data:application/json;base64,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QURJO0FBQ21CMkosQ0FBQTlDLEVBQUFvRCxTQUFBLENBQStCLEVBQS9CLENBRG5CLENBRUosV0FGSSxDQUVVcEQsQ0FBQW9ELFNBQUEsQ0FBZSxFQUFmLENBRlYsQ0FEUixDQUZlLENBd0RqQixNQTlDT3pHLEVBaUN3RCxDQW1CakUyRixFQUFBeEUsRUFBQSxDQUFtQ3VGLFFBQVEsQ0FBQ3JGLENBQUQsQ0FBVyxDQUNwRCxJQUFBQSxFQUFBLENBQWdCQSxDQURvQyxDQVN4QnNGLFNBQVEsR0FBQSxDQUFSQSxDQUFRLENBQUNuRixDQUFELENBQU0vSCxDQUFOLENBQVMsQ0FDN0NBLENBQUEsRUFBSyxDQUFBNkgsRUFBQSxDQUF5REUsQ0FBekQsQ0FDTCxFQUFBRSxFQUFBLENBQTRERixDQUE1RCxDQUFrRS9ILENBQWxFLENBRUEsT0FBT0EsRUFKc0MsQ0FRL0NrTSxDQUFBakUsRUFBQSxDQUFrQ1YsQ0FBQXJFLFVBQUErRSxFQUNsQ2lFLEVBQUFVLEVBQUEsQ0FBMkNyRixDQUFBckUsVUFBQWlGLEVBQzNDK0QsRUFBQXJFLEVBQUEsQ0FBK0JOLENBQUFyRSxVQUFBMkUsRSxDQ25sQi9CaEosQ0FBQSxDQUFrQixZQUFsQixDQUFnQ3dKLENBQWhDLENBQ0F4SixFQUFBLENBQ0UsaUNBREYsQ0FFRXdKLENBQUFuRixVQUFBQyxFQUZGLENBSUF0RSxFQUFBLENBQ0UsbUNBREYsQ0FFRXdKLENBQUFuRixVQUFBaUosRUFGRixDQUlBdE4sRUFBQSxDQUNFLGtDQURGLENBRUV3SixDQUFBbkYsVUFBQXdFLEVBRkY7Iiwic291cmNlcyI6WyJjbG9zdXJlLXByaW1pdGl2ZXMvYmFzZS5qcyIsImRlZmluZS90eXBlZGFycmF5L2h5YnJpZC5qcyIsInNyYy9iaXRzdHJlYW0uanMiLCJzcmMvY3JjMzIuanMiLCJzcmMvaHVmZm1hbi5qcyIsInNyYy9yYXdkZWZsYXRlLmpzIiwic3JjL3Jhd2luZmxhdGUuanMiLCJzcmMvemlwLmpzIiwic3JjL3VuemlwLmpzIiwiZXhwb3J0L3VuemlwLmpzIl0sIm5hbWVzIjpbImdvb2cuZ2xvYmFsIiwiZ29vZy5leHBvcnRTeW1ib2wiLCJwdWJsaWNQYXRoIiwib2JqZWN0IiwicGFydHMiLCJzcGxpdCIsImN1ciIsImV4ZWNTY3JpcHQiLCJwYXJ0IiwibGVuZ3RoIiwic2hpZnQiLCJKU0NvbXBpbGVyX2FsaWFzX1ZPSUQiLCJVU0VfVFlQRURBUlJBWSIsIlVpbnQ4QXJyYXkiLCJVaW50MTZBcnJheSIsIlVpbnQzMkFycmF5IiwiRGF0YVZpZXciLCJBcnJheSIsImkiLCJzIiwibiIsIlpsaWIuQ1JDMzIuVGFibGVfIiwiWmxpYi5DUkMzMi5UYWJsZSIsIlpsaWIuSHVmZm1hbi5idWlsZEh1ZmZtYW5UYWJsZSIsImxlbmd0aHMiLCJsaXN0U2l6ZSIsIm1heENvZGVMZW5ndGgiLCJtaW5Db2RlTGVuZ3RoIiwiTnVtYmVyIiwiUE9TSVRJVkVfSU5GSU5JVFkiLCJzaXplIiwidGFibGUiLCJiaXRMZW5ndGgiLCJjb2RlIiwic2tpcCIsInJldmVyc2VkIiwicnRlbXAiLCJqIiwidmFsdWUiLCJwdXNoIiwiSlNDb21waWxlcl9hbGlhc19USFJPVyIsImMiLCJabGliLlJhd0luZmxhdGUiLCJpbnB1dCIsIm9wdF9wYXJhbXMiLCJibG9ja3MiLCJidWZmZXJTaXplIiwiWkxJQl9SQVdfSU5GTEFURV9CVUZGRVJfU0laRSIsImJpdHNidWZsZW4iLCJiaXRzYnVmIiwiaXAiLCJ0b3RhbHBvcyIsImJmaW5hbCIsImJ1ZmZlclR5cGUiLCJabGliLlJhd0luZmxhdGUuQnVmZmVyVHlwZS5BREFQVElWRSIsInJlc2l6ZSIsIlpsaWIuUmF3SW5mbGF0ZS5CdWZmZXJUeXBlLkJMT0NLIiwib3AiLCJabGliLlJhd0luZmxhdGUuTWF4QmFja3dhcmRMZW5ndGgiLCJvdXRwdXQiLCJabGliLlJhd0luZmxhdGUuTWF4Q29weUxlbmd0aCIsImV4cGFuZEJ1ZmZlciIsImV4cGFuZEJ1ZmZlckFkYXB0aXZlIiwiY29uY2F0QnVmZmVyIiwiY29uY2F0QnVmZmVyRHluYW1pYyIsImRlY29kZUh1ZmZtYW4iLCJkZWNvZGVIdWZmbWFuQWRhcHRpdmUiLCJFcnJvciIsIkJMT0NLIiwiQURBUFRJVkUiLCJwcm90b3R5cGUiLCJkZWNvbXByZXNzIiwiWmxpYi5SYXdJbmZsYXRlLnByb3RvdHlwZS5kZWNvbXByZXNzIiwiaGRyIiwicmVhZEJpdHMiLCJwYXJzZUJsb2NrIiwiaW5wdXRMZW5ndGgiLCJsZW4iLCJubGVuIiwib2xlbmd0aCIsInByZUNvcHkiLCJzZXQiLCJzdWJhcnJheSIsIlpsaWIuUmF3SW5mbGF0ZS5GaXhlZExpdGVyYWxMZW5ndGhUYWJsZSIsIlpsaWIuUmF3SW5mbGF0ZS5GaXhlZERpc3RhbmNlVGFibGUiLCJwYXJzZUR5bmFtaWNIdWZmbWFuQmxvY2siLCJabGliLlJhd0luZmxhdGUuT3JkZXIiLCJabGliLlJhd0luZmxhdGUuTGVuZ3RoQ29kZVRhYmxlIiwiWmxpYi5SYXdJbmZsYXRlLkxlbmd0aEV4dHJhVGFibGUiLCJabGliLlJhd0luZmxhdGUuRGlzdENvZGVUYWJsZSIsIlpsaWIuUmF3SW5mbGF0ZS5EaXN0RXh0cmFUYWJsZSIsImlsIiwiWmxpYi5SYXdJbmZsYXRlLnByb3RvdHlwZS5yZWFkQml0cyIsIm9jdGV0IiwiWmxpYi5SYXdJbmZsYXRlLnByb3RvdHlwZS5yZWFkQ29kZUJ5VGFibGUiLCJjb2RlVGFibGUiLCJjb2RlV2l0aExlbmd0aCIsImNvZGVMZW5ndGgiLCJabGliLlJhd0luZmxhdGUucHJvdG90eXBlLnBhcnNlRHluYW1pY0h1ZmZtYW5CbG9jayIsImRlY29kZSIsIm51bSIsInByZXYiLCJyZXBlYXQiLCJyZWFkQ29kZUJ5VGFibGUiLCJobGl0IiwiaGRpc3QiLCJoY2xlbiIsImNvZGVMZW5ndGhzIiwiWmxpYi5SYXdJbmZsYXRlLk9yZGVyLmxlbmd0aCIsImNvZGVMZW5ndGhzVGFibGUiLCJsaXRsZW5MZW5ndGhzIiwiZGlzdExlbmd0aHMiLCJjYWxsIiwiWmxpYiRSYXdJbmZsYXRlLnByb3RvdHlwZSIsIlpsaWIuUmF3SW5mbGF0ZS5wcm90b3R5cGUiLCJabGliLlJhd0luZmxhdGUucHJvdG90eXBlLmRlY29kZUh1ZmZtYW4iLCJsaXRsZW4iLCJkaXN0IiwiY3VycmVudExpdGxlblRhYmxlIiwidGkiLCJjb2RlRGlzdCIsIlpsaWIuUmF3SW5mbGF0ZS5wcm90b3R5cGUuZGVjb2RlSHVmZm1hbkFkYXB0aXZlIiwiWmxpYi5SYXdJbmZsYXRlLnByb3RvdHlwZS5leHBhbmRCdWZmZXIiLCJidWZmZXIiLCJiYWNrd2FyZCIsIlpsaWIuUmF3SW5mbGF0ZS5wcm90b3R5cGUuZXhwYW5kQnVmZmVyQWRhcHRpdmUiLCJvcHRfcGFyYW0iLCJyYXRpbyIsIm1heEh1ZmZDb2RlIiwibmV3U2l6ZSIsIm1heEluZmxhdGVTaXplIiwiZml4UmF0aW8iLCJhZGRSYXRpbyIsIlpsaWIuUmF3SW5mbGF0ZS5wcm90b3R5cGUuY29uY2F0QnVmZmVyIiwicG9zIiwiYmxvY2siLCJqbCIsInNsaWNlIiwiWmxpYi5SYXdJbmZsYXRlLnByb3RvdHlwZS5jb25jYXRCdWZmZXJEeW5hbWljIiwiWmxpYi5aaXAiLCJmaWxlcyIsImNvbW1lbnQiLCJzZXRQYXNzd29yZCIsIlpsaWIuWmlwLnByb3RvdHlwZS5zZXRQYXNzd29yZCIsInBhc3N3b3JkIiwiZ2V0Qnl0ZSIsIlpsaWIuWmlwLnByb3RvdHlwZS5nZXRCeXRlIiwia2V5IiwidG1wIiwidXBkYXRlS2V5cyIsIlpsaWIuWmlwLnByb3RvdHlwZS51cGRhdGVLZXlzIiwiY3JlYXRlRW5jcnlwdGlvbktleSIsIlpsaWIuWmlwLnByb3RvdHlwZS5jcmVhdGVFbmNyeXB0aW9uS2V5IiwiWmxpYi5VbnppcCIsInZlcmlmeSIsIlpsaWIuVW56aXAuQ29tcHJlc3Npb25NZXRob2QiLCJabGliLlppcC5Db21wcmVzc2lvbk1ldGhvZCIsIlNUT1JFIiwiREVGTEFURSIsIlpsaWIuVW56aXAuRmlsZUhlYWRlclNpZ25hdHVyZSIsIlpsaWIuWmlwLkZpbGVIZWFkZXJTaWduYXR1cmUiLCJabGliLlVuemlwLkxvY2FsRmlsZUhlYWRlclNpZ25hdHVyZSIsIlpsaWIuWmlwLkxvY2FsRmlsZUhlYWRlclNpZ25hdHVyZSIsIlpsaWIuVW56aXAuQ2VudHJhbERpcmVjdG9yeVNpZ25hdHVyZSIsIlpsaWIuWmlwLkNlbnRyYWxEaXJlY3RvcnlTaWduYXR1cmUiLCJabGliLlVuemlwLkZpbGVIZWFkZXIiLCJvZmZzZXQiLCJwYXJzZSIsIlpsaWIuVW56aXAuRmlsZUhlYWRlci5wcm90b3R5cGUucGFyc2UiLCJ2ZXJzaW9uIiwib3MiLCJuZWVkVmVyc2lvbiIsImZsYWdzIiwiY29tcHJlc3Npb24iLCJ0aW1lIiwiZGF0ZSIsImNyYzMyIiwiY29tcHJlc3NlZFNpemUiLCJwbGFpblNpemUiLCJmaWxlTmFtZUxlbmd0aCIsImV4dHJhRmllbGRMZW5ndGgiLCJmaWxlQ29tbWVudExlbmd0aCIsImRpc2tOdW1iZXJTdGFydCIsImludGVybmFsRmlsZUF0dHJpYnV0ZXMiLCJleHRlcm5hbEZpbGVBdHRyaWJ1dGVzIiwicmVsYXRpdmVPZmZzZXQiLCJmaWxlbmFtZSIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsImFwcGx5IiwiZXh0cmFGaWVsZCIsIlpsaWIuVW56aXAuTG9jYWxGaWxlSGVhZGVyIiwiWmxpYi5VbnppcC5Mb2NhbEZpbGVIZWFkZXIuRmxhZ3MiLCJabGliLlppcC5GbGFncyIsIkVOQ1JZUFQiLCJERVNDUklQVE9SIiwiVVRGOCIsIlpsaWIuVW56aXAuTG9jYWxGaWxlSGVhZGVyLnByb3RvdHlwZS5wYXJzZSIsIlpsaWIuVW56aXAucHJvdG90eXBlLnBhcnNlRmlsZUhlYWRlciIsImZpbGVsaXN0IiwiZmlsZXRhYmxlIiwiZmlsZUhlYWRlciIsImZpbGVIZWFkZXJMaXN0IiwiY2VudHJhbERpcmVjdG9yeU9mZnNldCIsInBhcnNlRW5kT2ZDZW50cmFsRGlyZWN0b3J5UmVjb3JkIiwiZW9jZHJPZmZzZXQiLCJudW1iZXJPZlRoaXNEaXNrIiwic3RhcnREaXNrIiwidG90YWxFbnRyaWVzVGhpc0Rpc2siLCJ0b3RhbEVudHJpZXMiLCJjZW50cmFsRGlyZWN0b3J5U2l6ZSIsImNvbW1lbnRMZW5ndGgiLCJmaWxlbmFtZVRvSW5kZXgiLCJabGliJFVuemlwLnByb3RvdHlwZSIsIlpsaWIuVW56aXAucHJvdG90eXBlIiwiZ2V0RmlsZW5hbWVzIiwiWmxpYi5VbnppcC5wcm90b3R5cGUuZ2V0RmlsZW5hbWVzIiwiZmlsZW5hbWVMaXN0IiwicGFyc2VGaWxlSGVhZGVyIiwiWmxpYi5VbnppcC5wcm90b3R5cGUuZGVjb21wcmVzcyIsImluZGV4IiwiZ2V0RmlsZURhdGEiLCJsb2NhbEZpbGVIZWFkZXIiLCJabGliLlVuemlwLkxvY2FsRmlsZUhlYWRlci5GbGFncy5FTkNSWVBUIiwiY3JlYXRlRGVjcnlwdGlvbktleSIsIlpsaWIuVW56aXAuQ29tcHJlc3Npb25NZXRob2QuU1RPUkUiLCJabGliLlVuemlwLkNvbXByZXNzaW9uTWV0aG9kLkRFRkxBVEUiLCJjcmMiLCJ0b1N0cmluZyIsIlpsaWIuVW56aXAucHJvdG90eXBlLnNldFBhc3N3b3JkIiwiWmxpYi5VbnppcC5wcm90b3R5cGUuZGVjb2RlIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDA2IFRoZSBDbG9zdXJlIExpYnJhcnkgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4vL1xuLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbi8vXG4vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTLUlTXCIgQkFTSVMsXG4vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbi8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXcgQm9vdHN0cmFwIGZvciB0aGUgR29vZ2xlIEpTIExpYnJhcnkgKENsb3N1cmUpLlxuICpcbiAqIEluIHVuY29tcGlsZWQgbW9kZSBiYXNlLmpzIHdpbGwgd3JpdGUgb3V0IENsb3N1cmUncyBkZXBzIGZpbGUsIHVubGVzcyB0aGVcbiAqIGdsb2JhbCA8Y29kZT5DTE9TVVJFX05PX0RFUFM8L2NvZGU+IGlzIHNldCB0byB0cnVlLiAgVGhpcyBhbGxvd3MgcHJvamVjdHMgdG9cbiAqIGluY2x1ZGUgdGhlaXIgb3duIGRlcHMgZmlsZShzKSBmcm9tIGRpZmZlcmVudCBsb2NhdGlvbnMuXG4gKlxuICovXG5cblxuLyoqXG4gKiBAZGVmaW5lIHtib29sZWFufSBPdmVycmlkZGVuIHRvIHRydWUgYnkgdGhlIGNvbXBpbGVyIHdoZW4gLS1jbG9zdXJlX3Bhc3NcbiAqICAgICBvciAtLW1hcmtfYXNfY29tcGlsZWQgaXMgc3BlY2lmaWVkLlxuICovXG52YXIgQ09NUElMRUQgPSBmYWxzZTtcblxuXG4vKipcbiAqIEJhc2UgbmFtZXNwYWNlIGZvciB0aGUgQ2xvc3VyZSBsaWJyYXJ5LiAgQ2hlY2tzIHRvIHNlZSBnb29nIGlzXG4gKiBhbHJlYWR5IGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgc2NvcGUgYmVmb3JlIGFzc2lnbmluZyB0byBwcmV2ZW50XG4gKiBjbG9iYmVyaW5nIGlmIGJhc2UuanMgaXMgbG9hZGVkIG1vcmUgdGhhbiBvbmNlLlxuICpcbiAqIEBjb25zdFxuICovXG52YXIgZ29vZyA9IGdvb2cgfHwge307IC8vIElkZW50aWZpZXMgdGhpcyBmaWxlIGFzIHRoZSBDbG9zdXJlIGJhc2UuXG5cblxuLyoqXG4gKiBSZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBjb250ZXh0LiAgSW4gbW9zdCBjYXNlcyB0aGlzIHdpbGwgYmUgJ3dpbmRvdycuXG4gKi9cbmdvb2cuZ2xvYmFsID0gdGhpcztcblxuXG4vKipcbiAqIEBkZWZpbmUge2Jvb2xlYW59IERFQlVHIGlzIHByb3ZpZGVkIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCBkZWJ1Z2dpbmcgY29kZVxuICogdGhhdCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGluIGEgcHJvZHVjdGlvbiBqc19iaW5hcnkgY2FuIGJlIGVhc2lseSBzdHJpcHBlZFxuICogYnkgc3BlY2lmeWluZyAtLWRlZmluZSBnb29nLkRFQlVHPWZhbHNlIHRvIHRoZSBKU0NvbXBpbGVyLiBGb3IgZXhhbXBsZSwgbW9zdFxuICogdG9TdHJpbmcoKSBtZXRob2RzIHNob3VsZCBiZSBkZWNsYXJlZCBpbnNpZGUgYW4gXCJpZiAoZ29vZy5ERUJVRylcIiBjb25kaXRpb25hbFxuICogYmVjYXVzZSB0aGV5IGFyZSBnZW5lcmFsbHkgdXNlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIGFuZCBpdCBpcyBkaWZmaWN1bHRcbiAqIGZvciB0aGUgSlNDb21waWxlciB0byBzdGF0aWNhbGx5IGRldGVybWluZSB3aGV0aGVyIHRoZXkgYXJlIHVzZWQuXG4gKi9cbmdvb2cuREVCVUcgPSB0cnVlO1xuXG5cbi8qKlxuICogQGRlZmluZSB7c3RyaW5nfSBMT0NBTEUgZGVmaW5lcyB0aGUgbG9jYWxlIGJlaW5nIHVzZWQgZm9yIGNvbXBpbGF0aW9uLiBJdCBpc1xuICogdXNlZCB0byBzZWxlY3QgbG9jYWxlIHNwZWNpZmljIGRhdGEgdG8gYmUgY29tcGlsZWQgaW4ganMgYmluYXJ5LiBCVUlMRCBydWxlXG4gKiBjYW4gc3BlY2lmeSB0aGlzIHZhbHVlIGJ5IFwiLS1kZWZpbmUgZ29vZy5MT0NBTEU9PGxvY2FsZV9uYW1lPlwiIGFzIEpTQ29tcGlsZXJcbiAqIG9wdGlvbi5cbiAqXG4gKiBUYWtlIGludG8gYWNjb3VudCB0aGF0IHRoZSBsb2NhbGUgY29kZSBmb3JtYXQgaXMgaW1wb3J0YW50LiBZb3Ugc2hvdWxkIHVzZVxuICogdGhlIGNhbm9uaWNhbCBVbmljb2RlIGZvcm1hdCB3aXRoIGh5cGhlbiBhcyBhIGRlbGltaXRlci4gTGFuZ3VhZ2UgbXVzdCBiZVxuICogbG93ZXJjYXNlLCBMYW5ndWFnZSBTY3JpcHQgLSBDYXBpdGFsaXplZCwgUmVnaW9uIC0gVVBQRVJDQVNFLlxuICogVGhlcmUgYXJlIGZldyBleGFtcGxlczogcHQtQlIsIGVuLCBlbi1VUywgc3ItTGF0aW4tQk8sIHpoLUhhbnMtQ04uXG4gKlxuICogU2VlIG1vcmUgaW5mbyBhYm91dCBsb2NhbGUgY29kZXMgaGVyZTpcbiAqIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1LyNVbmljb2RlX0xhbmd1YWdlX2FuZF9Mb2NhbGVfSWRlbnRpZmllcnNcbiAqXG4gKiBGb3IgbGFuZ3VhZ2UgY29kZXMgeW91IHNob3VsZCB1c2UgdmFsdWVzIGRlZmluZWQgYnkgSVNPIDY5My0xLiBTZWUgaXQgaGVyZVxuICogaHR0cDovL3d3dy53My5vcmcvV0FJL0VSL0lHL2VydC9pc282MzkuaHRtLiBUaGVyZSBpcyBvbmx5IG9uZSBleGNlcHRpb24gZnJvbVxuICogdGhpcyBydWxlOiB0aGUgSGVicmV3IGxhbmd1YWdlLiBGb3IgbGVnYWN5IHJlYXNvbnMgdGhlIG9sZCBjb2RlIChpdykgc2hvdWxkXG4gKiBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIG5ldyBjb2RlIChoZSksIHNlZSBodHRwOi8vd2lraS9NYWluL0lJSVN5bm9ueW1zLlxuICovXG5nb29nLkxPQ0FMRSA9ICdlbic7ICAvLyBkZWZhdWx0IHRvIGVuXG5cblxuLyoqXG4gKiBDcmVhdGVzIG9iamVjdCBzdHVicyBmb3IgYSBuYW1lc3BhY2UuICBUaGUgcHJlc2VuY2Ugb2Ygb25lIG9yIG1vcmVcbiAqIGdvb2cucHJvdmlkZSgpIGNhbGxzIGluZGljYXRlIHRoYXQgdGhlIGZpbGUgZGVmaW5lcyB0aGUgZ2l2ZW5cbiAqIG9iamVjdHMvbmFtZXNwYWNlcy4gIEJ1aWxkIHRvb2xzIGFsc28gc2NhbiBmb3IgcHJvdmlkZS9yZXF1aXJlIHN0YXRlbWVudHNcbiAqIHRvIGRpc2Nlcm4gZGVwZW5kZW5jaWVzLCBidWlsZCBkZXBlbmRlbmN5IGZpbGVzIChzZWUgZGVwcy5qcyksIGV0Yy5cbiAqIEBzZWUgZ29vZy5yZXF1aXJlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lc3BhY2UgcHJvdmlkZWQgYnkgdGhpcyBmaWxlIGluIHRoZSBmb3JtXG4gKiAgICAgXCJnb29nLnBhY2thZ2UucGFydFwiLlxuICovXG5nb29nLnByb3ZpZGUgPSBmdW5jdGlvbihuYW1lKSB7XG4gIGlmICghQ09NUElMRUQpIHtcbiAgICAvLyBFbnN1cmUgdGhhdCB0aGUgc2FtZSBuYW1lc3BhY2UgaXNuJ3QgcHJvdmlkZWQgdHdpY2UuIFRoaXMgaXMgaW50ZW5kZWRcbiAgICAvLyB0byB0ZWFjaCBuZXcgZGV2ZWxvcGVycyB0aGF0ICdnb29nLnByb3ZpZGUnIGlzIGVmZmVjdGl2ZWx5IGEgdmFyaWFibGVcbiAgICAvLyBkZWNsYXJhdGlvbi4gQW5kIHdoZW4gSlNDb21waWxlciB0cmFuc2Zvcm1zIGdvb2cucHJvdmlkZSBpbnRvIGEgcmVhbFxuICAgIC8vIHZhcmlhYmxlIGRlY2xhcmF0aW9uLCB0aGUgY29tcGlsZWQgSlMgc2hvdWxkIHdvcmsgdGhlIHNhbWUgYXMgdGhlIHJhd1xuICAgIC8vIEpTLS1ldmVuIHdoZW4gdGhlIHJhdyBKUyB1c2VzIGdvb2cucHJvdmlkZSBpbmNvcnJlY3RseS5cbiAgICBpZiAoZ29vZy5pc1Byb3ZpZGVkXyhuYW1lKSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ05hbWVzcGFjZSBcIicgKyBuYW1lICsgJ1wiIGFscmVhZHkgZGVjbGFyZWQuJyk7XG4gICAgfVxuICAgIGRlbGV0ZSBnb29nLmltcGxpY2l0TmFtZXNwYWNlc19bbmFtZV07XG5cbiAgICB2YXIgbmFtZXNwYWNlID0gbmFtZTtcbiAgICB3aGlsZSAoKG5hbWVzcGFjZSA9IG5hbWVzcGFjZS5zdWJzdHJpbmcoMCwgbmFtZXNwYWNlLmxhc3RJbmRleE9mKCcuJykpKSkge1xuICAgICAgaWYgKGdvb2cuZ2V0T2JqZWN0QnlOYW1lKG5hbWVzcGFjZSkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBnb29nLmltcGxpY2l0TmFtZXNwYWNlc19bbmFtZXNwYWNlXSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgZ29vZy5leHBvcnRQYXRoXyhuYW1lKTtcbn07XG5cblxuLyoqXG4gKiBNYXJrcyB0aGF0IHRoZSBjdXJyZW50IGZpbGUgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdGVzdGluZywgYW5kIG5ldmVyIGZvclxuICogbGl2ZSBjb2RlIGluIHByb2R1Y3Rpb24uXG4gKiBAcGFyYW0ge3N0cmluZz19IG9wdF9tZXNzYWdlIE9wdGlvbmFsIG1lc3NhZ2UgdG8gYWRkIHRvIHRoZSBlcnJvciB0aGF0J3NcbiAqICAgICByYWlzZWQgd2hlbiB1c2VkIGluIHByb2R1Y3Rpb24gY29kZS5cbiAqL1xuZ29vZy5zZXRUZXN0T25seSA9IGZ1bmN0aW9uKG9wdF9tZXNzYWdlKSB7XG4gIGlmIChDT01QSUxFRCAmJiAhZ29vZy5ERUJVRykge1xuICAgIG9wdF9tZXNzYWdlID0gb3B0X21lc3NhZ2UgfHwgJyc7XG4gICAgdGhyb3cgRXJyb3IoJ0ltcG9ydGluZyB0ZXN0LW9ubHkgY29kZSBpbnRvIG5vbi1kZWJ1ZyBlbnZpcm9ubWVudCcgK1xuICAgICAgICAgICAgICAgIG9wdF9tZXNzYWdlID8gJzogJyArIG9wdF9tZXNzYWdlIDogJy4nKTtcbiAgfVxufTtcblxuXG5pZiAoIUNPTVBJTEVEKSB7XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBnaXZlbiBuYW1lIGhhcyBiZWVuIGdvb2cucHJvdmlkZWQuIFRoaXMgd2lsbCByZXR1cm4gZmFsc2UgZm9yXG4gICAqIG5hbWVzIHRoYXQgYXJlIGF2YWlsYWJsZSBvbmx5IGFzIGltcGxpY2l0IG5hbWVzcGFjZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIG9iamVjdCB0byBsb29rIGZvci5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgbmFtZSBoYXMgYmVlbiBwcm92aWRlZC5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdvb2cuaXNQcm92aWRlZF8gPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuICFnb29nLmltcGxpY2l0TmFtZXNwYWNlc19bbmFtZV0gJiYgISFnb29nLmdldE9iamVjdEJ5TmFtZShuYW1lKTtcbiAgfTtcblxuICAvKipcbiAgICogTmFtZXNwYWNlcyBpbXBsaWNpdGx5IGRlZmluZWQgYnkgZ29vZy5wcm92aWRlLiBGb3IgZXhhbXBsZSxcbiAgICogZ29vZy5wcm92aWRlKCdnb29nLmV2ZW50cy5FdmVudCcpIGltcGxpY2l0bHkgZGVjbGFyZXNcbiAgICogdGhhdCAnZ29vZycgYW5kICdnb29nLmV2ZW50cycgbXVzdCBiZSBuYW1lc3BhY2VzLlxuICAgKlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ29vZy5pbXBsaWNpdE5hbWVzcGFjZXNfID0ge307XG59XG5cblxuLyoqXG4gKiBCdWlsZHMgYW4gb2JqZWN0IHN0cnVjdHVyZSBmb3IgdGhlIHByb3ZpZGVkIG5hbWVzcGFjZSBwYXRoLFxuICogZW5zdXJpbmcgdGhhdCBuYW1lcyB0aGF0IGFscmVhZHkgZXhpc3QgYXJlIG5vdCBvdmVyd3JpdHRlbi4gRm9yXG4gKiBleGFtcGxlOlxuICogXCJhLmIuY1wiIC0+IGEgPSB7fTthLmI9e307YS5iLmM9e307XG4gKiBVc2VkIGJ5IGdvb2cucHJvdmlkZSBhbmQgZ29vZy5leHBvcnRTeW1ib2wuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBuYW1lIG9mIHRoZSBvYmplY3QgdGhhdCB0aGlzIGZpbGUgZGVmaW5lcy5cbiAqIEBwYXJhbSB7Kj19IG9wdF9vYmplY3QgdGhlIG9iamVjdCB0byBleHBvc2UgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aC5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0X29iamVjdFRvRXhwb3J0VG8gVGhlIG9iamVjdCB0byBhZGQgdGhlIHBhdGggdG87IGRlZmF1bHRcbiAqICAgICBpcyB8Z29vZy5nbG9iYWx8LlxuICogQHByaXZhdGVcbiAqL1xuZ29vZy5leHBvcnRQYXRoXyA9IGZ1bmN0aW9uKG5hbWUsIG9wdF9vYmplY3QsIG9wdF9vYmplY3RUb0V4cG9ydFRvKSB7XG4gIHZhciBwYXJ0cyA9IG5hbWUuc3BsaXQoJy4nKTtcbiAgdmFyIGN1ciA9IG9wdF9vYmplY3RUb0V4cG9ydFRvIHx8IGdvb2cuZ2xvYmFsO1xuXG4gIC8vIEludGVybmV0IEV4cGxvcmVyIGV4aGliaXRzIHN0cmFuZ2UgYmVoYXZpb3Igd2hlbiB0aHJvd2luZyBlcnJvcnMgZnJvbVxuICAvLyBtZXRob2RzIGV4dGVybmVkIGluIHRoaXMgbWFubmVyLiAgU2VlIHRoZSB0ZXN0RXhwb3J0U3ltYm9sRXhjZXB0aW9ucyBpblxuICAvLyBiYXNlX3Rlc3QuaHRtbCBmb3IgYW4gZXhhbXBsZS5cbiAgaWYgKCEocGFydHNbMF0gaW4gY3VyKSAmJiBjdXIuZXhlY1NjcmlwdCkge1xuICAgIGN1ci5leGVjU2NyaXB0KCd2YXIgJyArIHBhcnRzWzBdKTtcbiAgfVxuXG4gIC8vIENlcnRhaW4gYnJvd3NlcnMgY2Fubm90IHBhcnNlIGNvZGUgaW4gdGhlIGZvcm0gZm9yKChhIGluIGIpOyBjOyk7XG4gIC8vIFRoaXMgcGF0dGVybiBpcyBwcm9kdWNlZCBieSB0aGUgSlNDb21waWxlciB3aGVuIGl0IGNvbGxhcHNlcyB0aGVcbiAgLy8gc3RhdGVtZW50IGFib3ZlIGludG8gdGhlIGNvbmRpdGlvbmFsIGxvb3AgYmVsb3cuIFRvIHByZXZlbnQgdGhpcyBmcm9tXG4gIC8vIGhhcHBlbmluZywgdXNlIGEgZm9yLWxvb3AgYW5kIHJlc2VydmUgdGhlIGluaXQgbG9naWMgYXMgYmVsb3cuXG5cbiAgLy8gUGFyZW50aGVzZXMgYWRkZWQgdG8gZWxpbWluYXRlIHN0cmljdCBKUyB3YXJuaW5nIGluIEZpcmVmb3guXG4gIGZvciAodmFyIHBhcnQ7IHBhcnRzLmxlbmd0aCAmJiAocGFydCA9IHBhcnRzLnNoaWZ0KCkpOykge1xuICAgIGlmICghcGFydHMubGVuZ3RoICYmIGdvb2cuaXNEZWYob3B0X29iamVjdCkpIHtcbiAgICAgIC8vIGxhc3QgcGFydCBhbmQgd2UgaGF2ZSBhbiBvYmplY3Q7IHVzZSBpdFxuICAgICAgY3VyW3BhcnRdID0gb3B0X29iamVjdDtcbiAgICB9IGVsc2UgaWYgKGN1cltwYXJ0XSkge1xuICAgICAgY3VyID0gY3VyW3BhcnRdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXIgPSBjdXJbcGFydF0gPSB7fTtcbiAgICB9XG4gIH1cbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCBiYXNlZCBvbiBpdHMgZnVsbHkgcXVhbGlmaWVkIGV4dGVybmFsIG5hbWUuICBJZiB5b3UgYXJlXG4gKiB1c2luZyBhIGNvbXBpbGF0aW9uIHBhc3MgdGhhdCByZW5hbWVzIHByb3BlcnR5IG5hbWVzIGJld2FyZSB0aGF0IHVzaW5nIHRoaXNcbiAqIGZ1bmN0aW9uIHdpbGwgbm90IGZpbmQgcmVuYW1lZCBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZS5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0X29iaiBUaGUgb2JqZWN0IHdpdGhpbiB3aGljaCB0byBsb29rOyBkZWZhdWx0IGlzXG4gKiAgICAgfGdvb2cuZ2xvYmFsfC5cbiAqIEByZXR1cm4gez99IFRoZSB2YWx1ZSAob2JqZWN0IG9yIHByaW1pdGl2ZSkgb3IsIGlmIG5vdCBmb3VuZCwgbnVsbC5cbiAqL1xuZ29vZy5nZXRPYmplY3RCeU5hbWUgPSBmdW5jdGlvbihuYW1lLCBvcHRfb2JqKSB7XG4gIHZhciBwYXJ0cyA9IG5hbWUuc3BsaXQoJy4nKTtcbiAgdmFyIGN1ciA9IG9wdF9vYmogfHwgZ29vZy5nbG9iYWw7XG4gIGZvciAodmFyIHBhcnQ7IHBhcnQgPSBwYXJ0cy5zaGlmdCgpOyApIHtcbiAgICBpZiAoZ29vZy5pc0RlZkFuZE5vdE51bGwoY3VyW3BhcnRdKSkge1xuICAgICAgY3VyID0gY3VyW3BhcnRdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGN1cjtcbn07XG5cblxuLyoqXG4gKiBHbG9iYWxpemVzIGEgd2hvbGUgbmFtZXNwYWNlLCBzdWNoIGFzIGdvb2cgb3IgZ29vZy5sYW5nLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG5hbWVzcGFjZSB0byBnbG9iYWxpemUuXG4gKiBAcGFyYW0ge09iamVjdD19IG9wdF9nbG9iYWwgVGhlIG9iamVjdCB0byBhZGQgdGhlIHByb3BlcnRpZXMgdG8uXG4gKiBAZGVwcmVjYXRlZCBQcm9wZXJ0aWVzIG1heSBiZSBleHBsaWNpdGx5IGV4cG9ydGVkIHRvIHRoZSBnbG9iYWwgc2NvcGUsIGJ1dFxuICogICAgIHRoaXMgc2hvdWxkIG5vIGxvbmdlciBiZSBkb25lIGluIGJ1bGsuXG4gKi9cbmdvb2cuZ2xvYmFsaXplID0gZnVuY3Rpb24ob2JqLCBvcHRfZ2xvYmFsKSB7XG4gIHZhciBnbG9iYWwgPSBvcHRfZ2xvYmFsIHx8IGdvb2cuZ2xvYmFsO1xuICBmb3IgKHZhciB4IGluIG9iaikge1xuICAgIGdsb2JhbFt4XSA9IG9ialt4XTtcbiAgfVxufTtcblxuXG4vKipcbiAqIEFkZHMgYSBkZXBlbmRlbmN5IGZyb20gYSBmaWxlIHRvIHRoZSBmaWxlcyBpdCByZXF1aXJlcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxQYXRoIFRoZSBwYXRoIHRvIHRoZSBqcyBmaWxlLlxuICogQHBhcmFtIHtBcnJheX0gcHJvdmlkZXMgQW4gYXJyYXkgb2Ygc3RyaW5ncyB3aXRoIHRoZSBuYW1lcyBvZiB0aGUgb2JqZWN0c1xuICogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBmaWxlIHByb3ZpZGVzLlxuICogQHBhcmFtIHtBcnJheX0gcmVxdWlyZXMgQW4gYXJyYXkgb2Ygc3RyaW5ncyB3aXRoIHRoZSBuYW1lcyBvZiB0aGUgb2JqZWN0c1xuICogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBmaWxlIHJlcXVpcmVzLlxuICovXG5nb29nLmFkZERlcGVuZGVuY3kgPSBmdW5jdGlvbihyZWxQYXRoLCBwcm92aWRlcywgcmVxdWlyZXMpIHtcbiAgaWYgKCFDT01QSUxFRCkge1xuICAgIHZhciBwcm92aWRlLCByZXF1aXJlO1xuICAgIHZhciBwYXRoID0gcmVsUGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgdmFyIGRlcHMgPSBnb29nLmRlcGVuZGVuY2llc187XG4gICAgZm9yICh2YXIgaSA9IDA7IHByb3ZpZGUgPSBwcm92aWRlc1tpXTsgaSsrKSB7XG4gICAgICBkZXBzLm5hbWVUb1BhdGhbcHJvdmlkZV0gPSBwYXRoO1xuICAgICAgaWYgKCEocGF0aCBpbiBkZXBzLnBhdGhUb05hbWVzKSkge1xuICAgICAgICBkZXBzLnBhdGhUb05hbWVzW3BhdGhdID0ge307XG4gICAgICB9XG4gICAgICBkZXBzLnBhdGhUb05hbWVzW3BhdGhdW3Byb3ZpZGVdID0gdHJ1ZTtcbiAgICB9XG4gICAgZm9yICh2YXIgaiA9IDA7IHJlcXVpcmUgPSByZXF1aXJlc1tqXTsgaisrKSB7XG4gICAgICBpZiAoIShwYXRoIGluIGRlcHMucmVxdWlyZXMpKSB7XG4gICAgICAgIGRlcHMucmVxdWlyZXNbcGF0aF0gPSB7fTtcbiAgICAgIH1cbiAgICAgIGRlcHMucmVxdWlyZXNbcGF0aF1bcmVxdWlyZV0gPSB0cnVlO1xuICAgIH1cbiAgfVxufTtcblxuXG5cblxuLy8gTk9URShubmF6ZSk6IFRoZSBkZWJ1ZyBET00gbG9hZGVyIHdhcyBpbmNsdWRlZCBpbiBiYXNlLmpzIGFzIGFuIG9yaWduYWxcbi8vIHdheSB0byBkbyBcImRlYnVnLW1vZGVcIiBkZXZlbG9wbWVudC4gIFRoZSBkZXBlbmRlbmN5IHN5c3RlbSBjYW4gc29tZXRpbWVzXG4vLyBiZSBjb25mdXNpbmcsIGFzIGNhbiB0aGUgZGVidWcgRE9NIGxvYWRlcidzIGFzeW5jcm9ub3VzIG5hdHVyZS5cbi8vXG4vLyBXaXRoIHRoZSBET00gbG9hZGVyLCBhIGNhbGwgdG8gZ29vZy5yZXF1aXJlKCkgaXMgbm90IGJsb2NraW5nIC0tIHRoZVxuLy8gc2NyaXB0IHdpbGwgbm90IGxvYWQgdW50aWwgc29tZSBwb2ludCBhZnRlciB0aGUgY3VycmVudCBzY3JpcHQuICBJZiBhXG4vLyBuYW1lc3BhY2UgaXMgbmVlZGVkIGF0IHJ1bnRpbWUsIGl0IG5lZWRzIHRvIGJlIGRlZmluZWQgaW4gYSBwcmV2aW91c1xuLy8gc2NyaXB0LCBvciBsb2FkZWQgdmlhIHJlcXVpcmUoKSB3aXRoIGl0cyByZWdpc3RlcmVkIGRlcGVuZGVuY2llcy5cbi8vIFVzZXItZGVmaW5lZCBuYW1lc3BhY2VzIG1heSBuZWVkIHRoZWlyIG93biBkZXBzIGZpbGUuICBTZWUgaHR0cDovL2dvL2pzX2RlcHMsXG4vLyBodHRwOi8vZ28vZ2VuanNkZXBzLCBvciwgZXh0ZXJuYWxseSwgRGVwc1dyaXRlci5cbi8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vY2xvc3VyZS9saWJyYXJ5L2RvY3MvZGVwc3dyaXRlci5odG1sXG4vL1xuLy8gQmVjYXVzZSBvZiBsZWdhY3kgY2xpZW50cywgdGhlIERPTSBsb2FkZXIgY2FuJ3QgYmUgZWFzaWx5IHJlbW92ZWQgZnJvbVxuLy8gYmFzZS5qcy4gIFdvcmsgaXMgYmVpbmcgZG9uZSB0byBtYWtlIGl0IGRpc2FibGVhYmxlIG9yIHJlcGxhY2VhYmxlIGZvclxuLy8gZGlmZmVyZW50IGVudmlyb25tZW50cyAoRE9NLWxlc3MgSmF2YVNjcmlwdCBpbnRlcnByZXRlcnMgbGlrZSBSaGlubyBvciBWOCxcbi8vIGZvciBleGFtcGxlKS4gU2VlIGJvb3RzdHJhcC8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5cblxuLyoqXG4gKiBAZGVmaW5lIHtib29sZWFufSBXaGV0aGVyIHRvIGVuYWJsZSB0aGUgZGVidWcgbG9hZGVyLlxuICpcbiAqIElmIGVuYWJsZWQsIGEgY2FsbCB0byBnb29nLnJlcXVpcmUoKSB3aWxsIGF0dGVtcHQgdG8gbG9hZCB0aGUgbmFtZXNwYWNlIGJ5XG4gKiBhcHBlbmRpbmcgYSBzY3JpcHQgdGFnIHRvIHRoZSBET00gKGlmIHRoZSBuYW1lc3BhY2UgaGFzIGJlZW4gcmVnaXN0ZXJlZCkuXG4gKlxuICogSWYgZGlzYWJsZWQsIGdvb2cucmVxdWlyZSgpIHdpbGwgc2ltcGx5IGFzc2VydCB0aGF0IHRoZSBuYW1lc3BhY2UgaGFzIGJlZW5cbiAqIHByb3ZpZGVkIChhbmQgZGVwZW5kIG9uIHRoZSBmYWN0IHRoYXQgc29tZSBvdXRzaWRlIHRvb2wgY29ycmVjdGx5IG9yZGVyZWRcbiAqIHRoZSBzY3JpcHQpLlxuICovXG5nb29nLkVOQUJMRV9ERUJVR19MT0FERVIgPSB0cnVlO1xuXG5cbi8qKlxuICogSW1wbGVtZW50cyBhIHN5c3RlbSBmb3IgdGhlIGR5bmFtaWMgcmVzb2x1dGlvbiBvZiBkZXBlbmRlbmNpZXNcbiAqIHRoYXQgd29ya3MgaW4gcGFyYWxsZWwgd2l0aCB0aGUgQlVJTEQgc3lzdGVtLiBOb3RlIHRoYXQgYWxsIGNhbGxzXG4gKiB0byBnb29nLnJlcXVpcmUgd2lsbCBiZSBzdHJpcHBlZCBieSB0aGUgSlNDb21waWxlciB3aGVuIHRoZVxuICogLS1jbG9zdXJlX3Bhc3Mgb3B0aW9uIGlzIHVzZWQuXG4gKiBAc2VlIGdvb2cucHJvdmlkZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZXNwYWNlIHRvIGluY2x1ZGUgKGFzIHdhcyBnaXZlbiBpbiBnb29nLnByb3ZpZGUoKSlcbiAqICAgICBpbiB0aGUgZm9ybSBcImdvb2cucGFja2FnZS5wYXJ0XCIuXG4gKi9cbmdvb2cucmVxdWlyZSA9IGZ1bmN0aW9uKG5hbWUpIHtcblxuICAvLyBpZiB0aGUgb2JqZWN0IGFscmVhZHkgZXhpc3RzIHdlIGRvIG5vdCBuZWVkIGRvIGRvIGFueXRoaW5nXG4gIC8vIFRPRE8oYXJ2KTogSWYgd2Ugc3RhcnQgdG8gc3VwcG9ydCByZXF1aXJlIGJhc2VkIG9uIGZpbGUgbmFtZSB0aGlzIGhhc1xuICAvLyAgICAgICAgICAgIHRvIGNoYW5nZVxuICAvLyBUT0RPKGFydik6IElmIHdlIGFsbG93IGdvb2cuZm9vLiogdGhpcyBoYXMgdG8gY2hhbmdlXG4gIC8vIFRPRE8oYXJ2KTogSWYgd2UgaW1wbGVtZW50IGR5bmFtaWMgbG9hZCBhZnRlciBwYWdlIGxvYWQgd2Ugc2hvdWxkIHByb2JhYmx5XG4gIC8vICAgICAgICAgICAgbm90IHJlbW92ZSB0aGlzIGNvZGUgZm9yIHRoZSBjb21waWxlZCBvdXRwdXRcbiAgaWYgKCFDT01QSUxFRCkge1xuICAgIGlmIChnb29nLmlzUHJvdmlkZWRfKG5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGdvb2cuRU5BQkxFX0RFQlVHX0xPQURFUikge1xuICAgICAgdmFyIHBhdGggPSBnb29nLmdldFBhdGhGcm9tRGVwc18obmFtZSk7XG4gICAgICBpZiAocGF0aCkge1xuICAgICAgICBnb29nLmluY2x1ZGVkX1twYXRoXSA9IHRydWU7XG4gICAgICAgIGdvb2cud3JpdGVTY3JpcHRzXygpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGVycm9yTWVzc2FnZSA9ICdnb29nLnJlcXVpcmUgY291bGQgbm90IGZpbmQ6ICcgKyBuYW1lO1xuICAgIGlmIChnb29nLmdsb2JhbC5jb25zb2xlKSB7XG4gICAgICBnb29nLmdsb2JhbC5jb25zb2xlWydlcnJvciddKGVycm9yTWVzc2FnZSk7XG4gICAgfVxuXG5cbiAgICAgIHRocm93IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cbiAgfVxufTtcblxuXG4vKipcbiAqIFBhdGggZm9yIGluY2x1ZGVkIHNjcmlwdHNcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmdvb2cuYmFzZVBhdGggPSAnJztcblxuXG4vKipcbiAqIEEgaG9vayBmb3Igb3ZlcnJpZGluZyB0aGUgYmFzZSBwYXRoLlxuICogQHR5cGUge3N0cmluZ3x1bmRlZmluZWR9XG4gKi9cbmdvb2cuZ2xvYmFsLkNMT1NVUkVfQkFTRV9QQVRIO1xuXG5cbi8qKlxuICogV2hldGhlciB0byB3cml0ZSBvdXQgQ2xvc3VyZSdzIGRlcHMgZmlsZS4gQnkgZGVmYXVsdCxcbiAqIHRoZSBkZXBzIGFyZSB3cml0dGVuLlxuICogQHR5cGUge2Jvb2xlYW58dW5kZWZpbmVkfVxuICovXG5nb29nLmdsb2JhbC5DTE9TVVJFX05PX0RFUFM7XG5cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRvIGltcG9ydCBhIHNpbmdsZSBzY3JpcHQuIFRoaXMgaXMgbWVhbnQgdG8gYmUgb3ZlcnJpZGRlbiB3aGVuXG4gKiBDbG9zdXJlIGlzIGJlaW5nIHJ1biBpbiBub24tSFRNTCBjb250ZXh0cywgc3VjaCBhcyB3ZWIgd29ya2Vycy4gSXQncyBkZWZpbmVkXG4gKiBpbiB0aGUgZ2xvYmFsIHNjb3BlIHNvIHRoYXQgaXQgY2FuIGJlIHNldCBiZWZvcmUgYmFzZS5qcyBpcyBsb2FkZWQsIHdoaWNoXG4gKiBhbGxvd3MgZGVwcy5qcyB0byBiZSBpbXBvcnRlZCBwcm9wZXJseS5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gaXMgcGFzc2VkIHRoZSBzY3JpcHQgc291cmNlLCB3aGljaCBpcyBhIHJlbGF0aXZlIFVSSS4gSXQgc2hvdWxkXG4gKiByZXR1cm4gdHJ1ZSBpZiB0aGUgc2NyaXB0IHdhcyBpbXBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5nb29nLmdsb2JhbC5DTE9TVVJFX0lNUE9SVF9TQ1JJUFQ7XG5cblxuLyoqXG4gKiBOdWxsIGZ1bmN0aW9uIHVzZWQgZm9yIGRlZmF1bHQgdmFsdWVzIG9mIGNhbGxiYWNrcywgZXRjLlxuICogQHJldHVybiB7dm9pZH0gTm90aGluZy5cbiAqL1xuZ29vZy5udWxsRnVuY3Rpb24gPSBmdW5jdGlvbigpIHt9O1xuXG5cbi8qKlxuICogVGhlIGlkZW50aXR5IGZ1bmN0aW9uLiBSZXR1cm5zIGl0cyBmaXJzdCBhcmd1bWVudC5cbiAqXG4gKiBAcGFyYW0geyo9fSBvcHRfcmV0dXJuVmFsdWUgVGhlIHNpbmdsZSB2YWx1ZSB0aGF0IHdpbGwgYmUgcmV0dXJuZWQuXG4gKiBAcGFyYW0gey4uLip9IHZhcl9hcmdzIE9wdGlvbmFsIHRyYWlsaW5nIGFyZ3VtZW50cy4gVGhlc2UgYXJlIGlnbm9yZWQuXG4gKiBAcmV0dXJuIHs/fSBUaGUgZmlyc3QgYXJndW1lbnQuIFdlIGNhbid0IGtub3cgdGhlIHR5cGUgLS0ganVzdCBwYXNzIGl0IGFsb25nXG4gKiAgICAgIHdpdGhvdXQgdHlwZS5cbiAqIEBkZXByZWNhdGVkIFVzZSBnb29nLmZ1bmN0aW9ucy5pZGVudGl0eSBpbnN0ZWFkLlxuICovXG5nb29nLmlkZW50aXR5RnVuY3Rpb24gPSBmdW5jdGlvbihvcHRfcmV0dXJuVmFsdWUsIHZhcl9hcmdzKSB7XG4gIHJldHVybiBvcHRfcmV0dXJuVmFsdWU7XG59O1xuXG5cbi8qKlxuICogV2hlbiBkZWZpbmluZyBhIGNsYXNzIEZvbyB3aXRoIGFuIGFic3RyYWN0IG1ldGhvZCBiYXIoKSwgeW91IGNhbiBkbzpcbiAqXG4gKiBGb28ucHJvdG90eXBlLmJhciA9IGdvb2cuYWJzdHJhY3RNZXRob2RcbiAqXG4gKiBOb3cgaWYgYSBzdWJjbGFzcyBvZiBGb28gZmFpbHMgdG8gb3ZlcnJpZGUgYmFyKCksIGFuIGVycm9yXG4gKiB3aWxsIGJlIHRocm93biB3aGVuIGJhcigpIGlzIGludm9rZWQuXG4gKlxuICogTm90ZTogVGhpcyBkb2VzIG5vdCB0YWtlIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBvdmVycmlkZSBhc1xuICogYW4gYXJndW1lbnQgYmVjYXVzZSB0aGF0IHdvdWxkIG1ha2UgaXQgbW9yZSBkaWZmaWN1bHQgdG8gb2JmdXNjYXRlXG4gKiBvdXIgSmF2YVNjcmlwdCBjb2RlLlxuICpcbiAqIEB0eXBlIHshRnVuY3Rpb259XG4gKiBAdGhyb3dzIHtFcnJvcn0gd2hlbiBpbnZva2VkIHRvIGluZGljYXRlIHRoZSBtZXRob2Qgc2hvdWxkIGJlXG4gKiAgIG92ZXJyaWRkZW4uXG4gKi9cbmdvb2cuYWJzdHJhY3RNZXRob2QgPSBmdW5jdGlvbigpIHtcbiAgdGhyb3cgRXJyb3IoJ3VuaW1wbGVtZW50ZWQgYWJzdHJhY3QgbWV0aG9kJyk7XG59O1xuXG5cbi8qKlxuICogQWRkcyBhIHtAY29kZSBnZXRJbnN0YW5jZX0gc3RhdGljIG1ldGhvZCB0aGF0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgaW5zdGFuY2VcbiAqIG9iamVjdC5cbiAqIEBwYXJhbSB7IUZ1bmN0aW9ufSBjdG9yIFRoZSBjb25zdHJ1Y3RvciBmb3IgdGhlIGNsYXNzIHRvIGFkZCB0aGUgc3RhdGljXG4gKiAgICAgbWV0aG9kIHRvLlxuICovXG5nb29nLmFkZFNpbmdsZXRvbkdldHRlciA9IGZ1bmN0aW9uKGN0b3IpIHtcbiAgY3Rvci5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChjdG9yLmluc3RhbmNlXykge1xuICAgICAgcmV0dXJuIGN0b3IuaW5zdGFuY2VfO1xuICAgIH1cbiAgICBpZiAoZ29vZy5ERUJVRykge1xuICAgICAgLy8gTk9URTogSlNDb21waWxlciBjYW4ndCBvcHRpbWl6ZSBhd2F5IEFycmF5I3B1c2guXG4gICAgICBnb29nLmluc3RhbnRpYXRlZFNpbmdsZXRvbnNfW2dvb2cuaW5zdGFudGlhdGVkU2luZ2xldG9uc18ubGVuZ3RoXSA9IGN0b3I7XG4gICAgfVxuICAgIHJldHVybiBjdG9yLmluc3RhbmNlXyA9IG5ldyBjdG9yO1xuICB9O1xufTtcblxuXG4vKipcbiAqIEFsbCBzaW5nbGV0b24gY2xhc3NlcyB0aGF0IGhhdmUgYmVlbiBpbnN0YW50aWF0ZWQsIGZvciB0ZXN0aW5nLiBEb24ndCByZWFkXG4gKiBpdCBkaXJlY3RseSwgdXNlIHRoZSB7QGNvZGUgZ29vZy50ZXN0aW5nLnNpbmdsZXRvbn0gbW9kdWxlLiBUaGUgY29tcGlsZXJcbiAqIHJlbW92ZXMgdGhpcyB2YXJpYWJsZSBpZiB1bnVzZWQuXG4gKiBAdHlwZSB7IUFycmF5LjwhRnVuY3Rpb24+fVxuICogQHByaXZhdGVcbiAqL1xuZ29vZy5pbnN0YW50aWF0ZWRTaW5nbGV0b25zXyA9IFtdO1xuXG5cbmlmICghQ09NUElMRUQgJiYgZ29vZy5FTkFCTEVfREVCVUdfTE9BREVSKSB7XG4gIC8qKlxuICAgKiBPYmplY3QgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHVybHMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBhZGRlZC4gVGhpc1xuICAgKiByZWNvcmQgYWxsb3dzIHRoZSBwcmV2ZW50aW9uIG9mIGNpcmN1bGFyIGRlcGVuZGVuY2llcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdvb2cuaW5jbHVkZWRfID0ge307XG5cblxuICAvKipcbiAgICogVGhpcyBvYmplY3QgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIGRlcGVuZGVuY2llcyBhbmQgb3RoZXIgZGF0YSB0aGF0IGlzXG4gICAqIHVzZWQgZm9yIGxvYWRpbmcgc2NyaXB0c1xuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgZ29vZy5kZXBlbmRlbmNpZXNfID0ge1xuICAgIHBhdGhUb05hbWVzOiB7fSwgLy8gMSB0byBtYW55XG4gICAgbmFtZVRvUGF0aDoge30sIC8vIDEgdG8gMVxuICAgIHJlcXVpcmVzOiB7fSwgLy8gMSB0byBtYW55XG4gICAgLy8gdXNlZCB3aGVuIHJlc29sdmluZyBkZXBlbmRlbmNpZXMgdG8gcHJldmVudCB1cyBmcm9tXG4gICAgLy8gdmlzaXRpbmcgdGhlIGZpbGUgdHdpY2VcbiAgICB2aXNpdGVkOiB7fSxcbiAgICB3cml0dGVuOiB7fSAvLyB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygc2NyaXB0IGZpbGVzIHdlIGhhdmUgd3JpdHRlblxuICB9O1xuXG5cbiAgLyoqXG4gICAqIFRyaWVzIHRvIGRldGVjdCB3aGV0aGVyIGlzIGluIHRoZSBjb250ZXh0IG9mIGFuIEhUTUwgZG9jdW1lbnQuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgaXQgbG9va3MgbGlrZSBIVE1MIGRvY3VtZW50LlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ29vZy5pbkh0bWxEb2N1bWVudF8gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZG9jID0gZ29vZy5nbG9iYWwuZG9jdW1lbnQ7XG4gICAgcmV0dXJuIHR5cGVvZiBkb2MgIT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgJ3dyaXRlJyBpbiBkb2M7ICAvLyBYVUxEb2N1bWVudCBtaXNzZXMgd3JpdGUuXG4gIH07XG5cblxuICAvKipcbiAgICogVHJpZXMgdG8gZGV0ZWN0IHRoZSBiYXNlIHBhdGggb2YgdGhlIGJhc2UuanMgc2NyaXB0IHRoYXQgYm9vdHN0cmFwcyBDbG9zdXJlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnb29nLmZpbmRCYXNlUGF0aF8gPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoZ29vZy5nbG9iYWwuQ0xPU1VSRV9CQVNFX1BBVEgpIHtcbiAgICAgIGdvb2cuYmFzZVBhdGggPSBnb29nLmdsb2JhbC5DTE9TVVJFX0JBU0VfUEFUSDtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKCFnb29nLmluSHRtbERvY3VtZW50XygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBkb2MgPSBnb29nLmdsb2JhbC5kb2N1bWVudDtcbiAgICB2YXIgc2NyaXB0cyA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0Jyk7XG4gICAgLy8gU2VhcmNoIGJhY2t3YXJkcyBzaW5jZSB0aGUgY3VycmVudCBzY3JpcHQgaXMgaW4gYWxtb3N0IGFsbCBjYXNlcyB0aGUgb25lXG4gICAgLy8gdGhhdCBoYXMgYmFzZS5qcy5cbiAgICBmb3IgKHZhciBpID0gc2NyaXB0cy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdmFyIHNyYyA9IHNjcmlwdHNbaV0uc3JjO1xuICAgICAgdmFyIHFtYXJrID0gc3JjLmxhc3RJbmRleE9mKCc/Jyk7XG4gICAgICB2YXIgbCA9IHFtYXJrID09IC0xID8gc3JjLmxlbmd0aCA6IHFtYXJrO1xuICAgICAgaWYgKHNyYy5zdWJzdHIobCAtIDcsIDcpID09ICdiYXNlLmpzJykge1xuICAgICAgICBnb29nLmJhc2VQYXRoID0gc3JjLnN1YnN0cigwLCBsIC0gNyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cblxuICAvKipcbiAgICogSW1wb3J0cyBhIHNjcmlwdCBpZiwgYW5kIG9ubHkgaWYsIHRoYXQgc2NyaXB0IGhhc24ndCBhbHJlYWR5IGJlZW4gaW1wb3J0ZWQuXG4gICAqIChNdXN0IGJlIGNhbGxlZCBhdCBleGVjdXRpb24gdGltZSlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNyYyBTY3JpcHQgc291cmNlLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ29vZy5pbXBvcnRTY3JpcHRfID0gZnVuY3Rpb24oc3JjKSB7XG4gICAgdmFyIGltcG9ydFNjcmlwdCA9IGdvb2cuZ2xvYmFsLkNMT1NVUkVfSU1QT1JUX1NDUklQVCB8fFxuICAgICAgICBnb29nLndyaXRlU2NyaXB0VGFnXztcbiAgICBpZiAoIWdvb2cuZGVwZW5kZW5jaWVzXy53cml0dGVuW3NyY10gJiYgaW1wb3J0U2NyaXB0KHNyYykpIHtcbiAgICAgIGdvb2cuZGVwZW5kZW5jaWVzXy53cml0dGVuW3NyY10gPSB0cnVlO1xuICAgIH1cbiAgfTtcblxuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaW1wb3J0IGZ1bmN0aW9uLiBXcml0ZXMgYSBzY3JpcHQgdGFnIHRvXG4gICAqIGltcG9ydCB0aGUgc2NyaXB0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3JjIFRoZSBzY3JpcHQgc291cmNlLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBzY3JpcHQgd2FzIGltcG9ydGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnb29nLndyaXRlU2NyaXB0VGFnXyA9IGZ1bmN0aW9uKHNyYykge1xuICAgIGlmIChnb29nLmluSHRtbERvY3VtZW50XygpKSB7XG4gICAgICB2YXIgZG9jID0gZ29vZy5nbG9iYWwuZG9jdW1lbnQ7XG4gICAgICBkb2Mud3JpdGUoXG4gICAgICAgICAgJzxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiIHNyYz1cIicgKyBzcmMgKyAnXCI+PC8nICsgJ3NjcmlwdD4nKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xuXG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGRlcGVuZGVuY2llcyBiYXNlZCBvbiB0aGUgZGVwZW5kZW5jaWVzIGFkZGVkIHVzaW5nIGFkZERlcGVuZGVuY3lcbiAgICogYW5kIGNhbGxzIGltcG9ydFNjcmlwdF8gaW4gdGhlIGNvcnJlY3Qgb3JkZXIuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBnb29nLndyaXRlU2NyaXB0c18gPSBmdW5jdGlvbigpIHtcbiAgICAvLyB0aGUgc2NyaXB0cyB3ZSBuZWVkIHRvIHdyaXRlIHRoaXMgdGltZVxuICAgIHZhciBzY3JpcHRzID0gW107XG4gICAgdmFyIHNlZW5TY3JpcHQgPSB7fTtcbiAgICB2YXIgZGVwcyA9IGdvb2cuZGVwZW5kZW5jaWVzXztcblxuICAgIGZ1bmN0aW9uIHZpc2l0Tm9kZShwYXRoKSB7XG4gICAgICBpZiAocGF0aCBpbiBkZXBzLndyaXR0ZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyB3ZSBoYXZlIGFscmVhZHkgdmlzaXRlZCB0aGlzIG9uZS4gV2UgY2FuIGdldCBoZXJlIGlmIHdlIGhhdmUgY3ljbGljXG4gICAgICAvLyBkZXBlbmRlbmNpZXNcbiAgICAgIGlmIChwYXRoIGluIGRlcHMudmlzaXRlZCkge1xuICAgICAgICBpZiAoIShwYXRoIGluIHNlZW5TY3JpcHQpKSB7XG4gICAgICAgICAgc2VlblNjcmlwdFtwYXRoXSA9IHRydWU7XG4gICAgICAgICAgc2NyaXB0cy5wdXNoKHBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGVwcy52aXNpdGVkW3BhdGhdID0gdHJ1ZTtcblxuICAgICAgaWYgKHBhdGggaW4gZGVwcy5yZXF1aXJlcykge1xuICAgICAgICBmb3IgKHZhciByZXF1aXJlTmFtZSBpbiBkZXBzLnJlcXVpcmVzW3BhdGhdKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIHJlcXVpcmVkIG5hbWUgaXMgZGVmaW5lZCwgd2UgYXNzdW1lIHRoYXQgaXQgd2FzIGFscmVhZHlcbiAgICAgICAgICAvLyBib290c3RyYXBwZWQgYnkgb3RoZXIgbWVhbnMuXG4gICAgICAgICAgaWYgKCFnb29nLmlzUHJvdmlkZWRfKHJlcXVpcmVOYW1lKSkge1xuICAgICAgICAgICAgaWYgKHJlcXVpcmVOYW1lIGluIGRlcHMubmFtZVRvUGF0aCkge1xuICAgICAgICAgICAgICB2aXNpdE5vZGUoZGVwcy5uYW1lVG9QYXRoW3JlcXVpcmVOYW1lXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvcignVW5kZWZpbmVkIG5hbWVUb1BhdGggZm9yICcgKyByZXF1aXJlTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghKHBhdGggaW4gc2VlblNjcmlwdCkpIHtcbiAgICAgICAgc2VlblNjcmlwdFtwYXRoXSA9IHRydWU7XG4gICAgICAgIHNjcmlwdHMucHVzaChwYXRoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBwYXRoIGluIGdvb2cuaW5jbHVkZWRfKSB7XG4gICAgICBpZiAoIWRlcHMud3JpdHRlbltwYXRoXSkge1xuICAgICAgICB2aXNpdE5vZGUocGF0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoc2NyaXB0c1tpXSkge1xuICAgICAgICBnb29nLmltcG9ydFNjcmlwdF8oZ29vZy5iYXNlUGF0aCArIHNjcmlwdHNbaV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ1VuZGVmaW5lZCBzY3JpcHQgaW5wdXQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cblxuICAvKipcbiAgICogTG9va3MgYXQgdGhlIGRlcGVuZGVuY3kgcnVsZXMgYW5kIHRyaWVzIHRvIGRldGVybWluZSB0aGUgc2NyaXB0IGZpbGUgdGhhdFxuICAgKiBmdWxmaWxscyBhIHBhcnRpY3VsYXIgcnVsZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJ1bGUgSW4gdGhlIGZvcm0gZ29vZy5uYW1lc3BhY2UuQ2xhc3Mgb3IgcHJvamVjdC5zY3JpcHQuXG4gICAqIEByZXR1cm4gez9zdHJpbmd9IFVybCBjb3JyZXNwb25kaW5nIHRvIHRoZSBydWxlLCBvciBudWxsLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ29vZy5nZXRQYXRoRnJvbURlcHNfID0gZnVuY3Rpb24ocnVsZSkge1xuICAgIGlmIChydWxlIGluIGdvb2cuZGVwZW5kZW5jaWVzXy5uYW1lVG9QYXRoKSB7XG4gICAgICByZXR1cm4gZ29vZy5kZXBlbmRlbmNpZXNfLm5hbWVUb1BhdGhbcnVsZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICBnb29nLmZpbmRCYXNlUGF0aF8oKTtcblxuICAvLyBBbGxvdyBwcm9qZWN0cyB0byBtYW5hZ2UgdGhlIGRlcHMgZmlsZXMgdGhlbXNlbHZlcy5cbiAgaWYgKCFnb29nLmdsb2JhbC5DTE9TVVJFX05PX0RFUFMpIHtcbiAgICBnb29nLmltcG9ydFNjcmlwdF8oZ29vZy5iYXNlUGF0aCArICdkZXBzLmpzJyk7XG4gIH1cbn1cblxuXG5cbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBMYW5ndWFnZSBFbmhhbmNlbWVudHNcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblxuLyoqXG4gKiBUaGlzIGlzIGEgXCJmaXhlZFwiIHZlcnNpb24gb2YgdGhlIHR5cGVvZiBvcGVyYXRvci4gIEl0IGRpZmZlcnMgZnJvbSB0aGUgdHlwZW9mXG4gKiBvcGVyYXRvciBpbiBzdWNoIGEgd2F5IHRoYXQgbnVsbCByZXR1cm5zICdudWxsJyBhbmQgYXJyYXlzIHJldHVybiAnYXJyYXknLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZ2V0IHRoZSB0eXBlIG9mLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgdHlwZS5cbiAqL1xuZ29vZy50eXBlT2YgPSBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIgcyA9IHR5cGVvZiB2YWx1ZTtcbiAgaWYgKHMgPT0gJ29iamVjdCcpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIC8vIENoZWNrIHRoZXNlIGZpcnN0LCBzbyB3ZSBjYW4gYXZvaWQgY2FsbGluZyBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIGlmXG4gICAgICAvLyBwb3NzaWJsZS5cbiAgICAgIC8vXG4gICAgICAvLyBJRSBpbXByb3Blcmx5IG1hcnNoYWxzIHR5ZXBvZiBhY3Jvc3MgZXhlY3V0aW9uIGNvbnRleHRzLCBidXQgYVxuICAgICAgLy8gY3Jvc3MtY29udGV4dCBvYmplY3Qgd2lsbCBzdGlsbCByZXR1cm4gZmFsc2UgZm9yIFwiaW5zdGFuY2VvZiBPYmplY3RcIi5cbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgIHJldHVybiAnYXJyYXknO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICByZXR1cm4gcztcbiAgICAgIH1cblxuICAgICAgLy8gSEFDSzogSW4gb3JkZXIgdG8gdXNlIGFuIE9iamVjdCBwcm90b3R5cGUgbWV0aG9kIG9uIHRoZSBhcmJpdHJhcnlcbiAgICAgIC8vICAgdmFsdWUsIHRoZSBjb21waWxlciByZXF1aXJlcyB0aGUgdmFsdWUgYmUgY2FzdCB0byB0eXBlIE9iamVjdCxcbiAgICAgIC8vICAgZXZlbiB0aG91Z2ggdGhlIEVDTUEgc3BlYyBleHBsaWNpdGx5IGFsbG93cyBpdC5cbiAgICAgIHZhciBjbGFzc05hbWUgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoXG4gICAgICAgICAgLyoqIEB0eXBlIHtPYmplY3R9ICovICh2YWx1ZSkpO1xuICAgICAgLy8gSW4gRmlyZWZveCAzLjYsIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGlmcmFtZSB3aW5kb3cgb2JqZWN0cycgbGVuZ3RoXG4gICAgICAvLyBwcm9wZXJ0eSB0aHJvd3MgYW4gTlNfRVJST1JfRkFJTFVSRSwgc28gd2UgbmVlZCB0byBzcGVjaWFsLWNhc2UgaXRcbiAgICAgIC8vIGhlcmUuXG4gICAgICBpZiAoY2xhc3NOYW1lID09ICdbb2JqZWN0IFdpbmRvd10nKSB7XG4gICAgICAgIHJldHVybiAnb2JqZWN0JztcbiAgICAgIH1cblxuICAgICAgLy8gV2UgY2Fubm90IGFsd2F5cyB1c2UgY29uc3RydWN0b3IgPT0gQXJyYXkgb3IgaW5zdGFuY2VvZiBBcnJheSBiZWNhdXNlXG4gICAgICAvLyBkaWZmZXJlbnQgZnJhbWVzIGhhdmUgZGlmZmVyZW50IEFycmF5IG9iamVjdHMuIEluIElFNiwgaWYgdGhlIGlmcmFtZVxuICAgICAgLy8gd2hlcmUgdGhlIGFycmF5IHdhcyBjcmVhdGVkIGlzIGRlc3Ryb3llZCwgdGhlIGFycmF5IGxvc2VzIGl0c1xuICAgICAgLy8gcHJvdG90eXBlLiBUaGVuIGRlcmVmZXJlbmNpbmcgdmFsLnNwbGljZSBoZXJlIHRocm93cyBhbiBleGNlcHRpb24sIHNvXG4gICAgICAvLyB3ZSBjYW4ndCB1c2UgZ29vZy5pc0Z1bmN0aW9uLiBDYWxsaW5nIHR5cGVvZiBkaXJlY3RseSByZXR1cm5zICd1bmtub3duJ1xuICAgICAgLy8gc28gdGhhdCB3aWxsIHdvcmsuIEluIHRoaXMgY2FzZSwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBmYWxzZSBhbmRcbiAgICAgIC8vIG1vc3QgYXJyYXkgZnVuY3Rpb25zIHdpbGwgc3RpbGwgd29yayBiZWNhdXNlIHRoZSBhcnJheSBpcyBzdGlsbFxuICAgICAgLy8gYXJyYXktbGlrZSAoc3VwcG9ydHMgbGVuZ3RoIGFuZCBbXSkgZXZlbiB0aG91Z2ggaXQgaGFzIGxvc3QgaXRzXG4gICAgICAvLyBwcm90b3R5cGUuXG4gICAgICAvLyBNYXJrIE1pbGxlciBub3RpY2VkIHRoYXQgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ1xuICAgICAgLy8gYWxsb3dzIGFjY2VzcyB0byB0aGUgdW5mb3JnZWFibGUgW1tDbGFzc11dIHByb3BlcnR5LlxuICAgICAgLy8gIDE1LjIuNC4yIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgKCApXG4gICAgICAvLyAgV2hlbiB0aGUgdG9TdHJpbmcgbWV0aG9kIGlzIGNhbGxlZCwgdGhlIGZvbGxvd2luZyBzdGVwcyBhcmUgdGFrZW46XG4gICAgICAvLyAgICAgIDEuIEdldCB0aGUgW1tDbGFzc11dIHByb3BlcnR5IG9mIHRoaXMgb2JqZWN0LlxuICAgICAgLy8gICAgICAyLiBDb21wdXRlIGEgc3RyaW5nIHZhbHVlIGJ5IGNvbmNhdGVuYXRpbmcgdGhlIHRocmVlIHN0cmluZ3NcbiAgICAgIC8vICAgICAgICAgXCJbb2JqZWN0IFwiLCBSZXN1bHQoMSksIGFuZCBcIl1cIi5cbiAgICAgIC8vICAgICAgMy4gUmV0dXJuIFJlc3VsdCgyKS5cbiAgICAgIC8vIGFuZCB0aGlzIGJlaGF2aW9yIHN1cnZpdmVzIHRoZSBkZXN0cnVjdGlvbiBvZiB0aGUgZXhlY3V0aW9uIGNvbnRleHQuXG4gICAgICBpZiAoKGNsYXNzTmFtZSA9PSAnW29iamVjdCBBcnJheV0nIHx8XG4gICAgICAgICAgIC8vIEluIElFIGFsbCBub24gdmFsdWUgdHlwZXMgYXJlIHdyYXBwZWQgYXMgb2JqZWN0cyBhY3Jvc3Mgd2luZG93XG4gICAgICAgICAgIC8vIGJvdW5kYXJpZXMgKG5vdCBpZnJhbWUgdGhvdWdoKSBzbyB3ZSBoYXZlIHRvIGRvIG9iamVjdCBkZXRlY3Rpb25cbiAgICAgICAgICAgLy8gZm9yIHRoaXMgZWRnZSBjYXNlXG4gICAgICAgICAgIHR5cGVvZiB2YWx1ZS5sZW5ndGggPT0gJ251bWJlcicgJiZcbiAgICAgICAgICAgdHlwZW9mIHZhbHVlLnNwbGljZSAhPSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICB0eXBlb2YgdmFsdWUucHJvcGVydHlJc0VudW1lcmFibGUgIT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIXZhbHVlLnByb3BlcnR5SXNFbnVtZXJhYmxlKCdzcGxpY2UnKVxuXG4gICAgICAgICAgKSkge1xuICAgICAgICByZXR1cm4gJ2FycmF5JztcbiAgICAgIH1cbiAgICAgIC8vIEhBQ0s6IFRoZXJlIGlzIHN0aWxsIGFuIGFycmF5IGNhc2UgdGhhdCBmYWlscy5cbiAgICAgIC8vICAgICBmdW5jdGlvbiBBcnJheUltcG9zdG9yKCkge31cbiAgICAgIC8vICAgICBBcnJheUltcG9zdG9yLnByb3RvdHlwZSA9IFtdO1xuICAgICAgLy8gICAgIHZhciBpbXBvc3RvciA9IG5ldyBBcnJheUltcG9zdG9yO1xuICAgICAgLy8gdGhpcyBjYW4gYmUgZml4ZWQgYnkgZ2V0dGluZyByaWQgb2YgdGhlIGZhc3QgcGF0aFxuICAgICAgLy8gKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpIGFuZCBzb2xlbHkgcmVseWluZyBvblxuICAgICAgLy8gKHZhbHVlICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcudmFsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEFycmF5XScpXG4gICAgICAvLyBidXQgdGhhdCB3b3VsZCByZXF1aXJlIG1hbnkgbW9yZSBmdW5jdGlvbiBjYWxscyBhbmQgaXMgbm90IHdhcnJhbnRlZFxuICAgICAgLy8gdW5sZXNzIGNsb3N1cmUgY29kZSBpcyByZWNlaXZpbmcgb2JqZWN0cyBmcm9tIHVudHJ1c3RlZCBzb3VyY2VzLlxuXG4gICAgICAvLyBJRSBpbiBjcm9zcy13aW5kb3cgY2FsbHMgZG9lcyBub3QgY29ycmVjdGx5IG1hcnNoYWwgdGhlIGZ1bmN0aW9uIHR5cGVcbiAgICAgIC8vIChpdCBhcHBlYXJzIGp1c3QgYXMgYW4gb2JqZWN0KSBzbyB3ZSBjYW5ub3QgdXNlIGp1c3QgdHlwZW9mIHZhbCA9PVxuICAgICAgLy8gJ2Z1bmN0aW9uJy4gSG93ZXZlciwgaWYgdGhlIG9iamVjdCBoYXMgYSBjYWxsIHByb3BlcnR5LCBpdCBpcyBhXG4gICAgICAvLyBmdW5jdGlvbi5cbiAgICAgIGlmICgoY2xhc3NOYW1lID09ICdbb2JqZWN0IEZ1bmN0aW9uXScgfHxcbiAgICAgICAgICB0eXBlb2YgdmFsdWUuY2FsbCAhPSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgIHR5cGVvZiB2YWx1ZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSAhPSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICF2YWx1ZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgnY2FsbCcpKSkge1xuICAgICAgICByZXR1cm4gJ2Z1bmN0aW9uJztcbiAgICAgIH1cblxuXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuXG4gIH0gZWxzZSBpZiAocyA9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZS5jYWxsID09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gSW4gU2FmYXJpIHR5cGVvZiBub2RlTGlzdCByZXR1cm5zICdmdW5jdGlvbicsIGFuZCBvbiBGaXJlZm94XG4gICAgLy8gdHlwZW9mIGJlaGF2ZXMgc2ltaWxhcmx5IGZvciBIVE1Me0FwcGxldCxFbWJlZCxPYmplY3R9RWxlbWVudHNcbiAgICAvLyBhbmQgUmVnRXhwcy4gIFdlIHdvdWxkIGxpa2UgdG8gcmV0dXJuIG9iamVjdCBmb3IgdGhvc2UgYW5kIHdlIGNhblxuICAgIC8vIGRldGVjdCBhbiBpbnZhbGlkIGZ1bmN0aW9uIGJ5IG1ha2luZyBzdXJlIHRoYXQgdGhlIGZ1bmN0aW9uXG4gICAgLy8gb2JqZWN0IGhhcyBhIGNhbGwgbWV0aG9kLlxuICAgIHJldHVybiAnb2JqZWN0JztcbiAgfVxuICByZXR1cm4gcztcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBub3QgfHVuZGVmaW5lZHwuXG4gKiBXQVJOSU5HOiBEbyBub3QgdXNlIHRoaXMgdG8gdGVzdCBpZiBhbiBvYmplY3QgaGFzIGEgcHJvcGVydHkuIFVzZSB0aGUgaW5cbiAqIG9wZXJhdG9yIGluc3RlYWQuICBBZGRpdGlvbmFsbHksIHRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBnbG9iYWxcbiAqIHVuZGVmaW5lZCB2YXJpYWJsZSBoYXMgbm90IGJlZW4gcmVkZWZpbmVkLlxuICogQHBhcmFtIHsqfSB2YWwgVmFyaWFibGUgdG8gdGVzdC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdmFyaWFibGUgaXMgZGVmaW5lZC5cbiAqL1xuZ29vZy5pc0RlZiA9IGZ1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSB1bmRlZmluZWQ7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgfG51bGx8XG4gKiBAcGFyYW0geyp9IHZhbCBWYXJpYWJsZSB0byB0ZXN0LlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB2YXJpYWJsZSBpcyBudWxsLlxuICovXG5nb29nLmlzTnVsbCA9IGZ1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gdmFsID09PSBudWxsO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGlzIGRlZmluZWQgYW5kIG5vdCBudWxsXG4gKiBAcGFyYW0geyp9IHZhbCBWYXJpYWJsZSB0byB0ZXN0LlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB2YXJpYWJsZSBpcyBkZWZpbmVkIGFuZCBub3QgbnVsbC5cbiAqL1xuZ29vZy5pc0RlZkFuZE5vdE51bGwgPSBmdW5jdGlvbih2YWwpIHtcbiAgLy8gTm90ZSB0aGF0IHVuZGVmaW5lZCA9PSBudWxsLlxuICByZXR1cm4gdmFsICE9IG51bGw7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgYW4gYXJyYXlcbiAqIEBwYXJhbSB7Kn0gdmFsIFZhcmlhYmxlIHRvIHRlc3QuXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHZhcmlhYmxlIGlzIGFuIGFycmF5LlxuICovXG5nb29nLmlzQXJyYXkgPSBmdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIGdvb2cudHlwZU9mKHZhbCkgPT0gJ2FycmF5Jztcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCBsb29rcyBsaWtlIGFuIGFycmF5LiBUbyBxdWFsaWZ5IGFzIGFycmF5IGxpa2VcbiAqIHRoZSB2YWx1ZSBuZWVkcyB0byBiZSBlaXRoZXIgYSBOb2RlTGlzdCBvciBhbiBvYmplY3Qgd2l0aCBhIE51bWJlciBsZW5ndGhcbiAqIHByb3BlcnR5LlxuICogQHBhcmFtIHsqfSB2YWwgVmFyaWFibGUgdG8gdGVzdC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdmFyaWFibGUgaXMgYW4gYXJyYXkuXG4gKi9cbmdvb2cuaXNBcnJheUxpa2UgPSBmdW5jdGlvbih2YWwpIHtcbiAgdmFyIHR5cGUgPSBnb29nLnR5cGVPZih2YWwpO1xuICByZXR1cm4gdHlwZSA9PSAnYXJyYXknIHx8IHR5cGUgPT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbC5sZW5ndGggPT0gJ251bWJlcic7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3QgbG9va3MgbGlrZSBhIERhdGUuIFRvIHF1YWxpZnkgYXMgRGF0ZS1saWtlXG4gKiB0aGUgdmFsdWUgbmVlZHMgdG8gYmUgYW4gb2JqZWN0IGFuZCBoYXZlIGEgZ2V0RnVsbFllYXIoKSBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gdmFsIFZhcmlhYmxlIHRvIHRlc3QuXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHZhcmlhYmxlIGlzIGEgbGlrZSBhIERhdGUuXG4gKi9cbmdvb2cuaXNEYXRlTGlrZSA9IGZ1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gZ29vZy5pc09iamVjdCh2YWwpICYmIHR5cGVvZiB2YWwuZ2V0RnVsbFllYXIgPT0gJ2Z1bmN0aW9uJztcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBhIHN0cmluZ1xuICogQHBhcmFtIHsqfSB2YWwgVmFyaWFibGUgdG8gdGVzdC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdmFyaWFibGUgaXMgYSBzdHJpbmcuXG4gKi9cbmdvb2cuaXNTdHJpbmcgPSBmdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gJ3N0cmluZyc7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgYSBib29sZWFuXG4gKiBAcGFyYW0geyp9IHZhbCBWYXJpYWJsZSB0byB0ZXN0LlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB2YXJpYWJsZSBpcyBib29sZWFuLlxuICovXG5nb29nLmlzQm9vbGVhbiA9IGZ1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PSAnYm9vbGVhbic7XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgYSBudW1iZXJcbiAqIEBwYXJhbSB7Kn0gdmFsIFZhcmlhYmxlIHRvIHRlc3QuXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHZhcmlhYmxlIGlzIGEgbnVtYmVyLlxuICovXG5nb29nLmlzTnVtYmVyID0gZnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09ICdudW1iZXInO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGlzIGEgZnVuY3Rpb25cbiAqIEBwYXJhbSB7Kn0gdmFsIFZhcmlhYmxlIHRvIHRlc3QuXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIHZhcmlhYmxlIGlzIGEgZnVuY3Rpb24uXG4gKi9cbmdvb2cuaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gZ29vZy50eXBlT2YodmFsKSA9PSAnZnVuY3Rpb24nO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGlzIGFuIG9iamVjdC4gIFRoaXMgaW5jbHVkZXMgYXJyYXlzXG4gKiBhbmQgZnVuY3Rpb25zLlxuICogQHBhcmFtIHsqfSB2YWwgVmFyaWFibGUgdG8gdGVzdC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdmFyaWFibGUgaXMgYW4gb2JqZWN0LlxuICovXG5nb29nLmlzT2JqZWN0ID0gZnVuY3Rpb24odmFsKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbDtcbiAgcmV0dXJuIHR5cGUgPT0gJ29iamVjdCcgJiYgdmFsICE9IG51bGwgfHwgdHlwZSA9PSAnZnVuY3Rpb24nO1xuICAvLyByZXR1cm4gT2JqZWN0KHZhbCkgPT09IHZhbCBhbHNvIHdvcmtzLCBidXQgaXMgc2xvd2VyLCBlc3BlY2lhbGx5IGlmIHZhbCBpc1xuICAvLyBub3QgYW4gb2JqZWN0LlxufTtcblxuXG4vKipcbiAqIEdldHMgYSB1bmlxdWUgSUQgZm9yIGFuIG9iamVjdC4gVGhpcyBtdXRhdGVzIHRoZSBvYmplY3Qgc28gdGhhdCBmdXJ0aGVyXG4gKiBjYWxscyB3aXRoIHRoZSBzYW1lIG9iamVjdCBhcyBhIHBhcmFtZXRlciByZXR1cm5zIHRoZSBzYW1lIHZhbHVlLiBUaGUgdW5pcXVlXG4gKiBJRCBpcyBndWFyYW50ZWVkIHRvIGJlIHVuaXF1ZSBhY3Jvc3MgdGhlIGN1cnJlbnQgc2Vzc2lvbiBhbW9uZ3N0IG9iamVjdHMgdGhhdFxuICogYXJlIHBhc3NlZCBpbnRvIHtAY29kZSBnZXRVaWR9LiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGUgSUQgaXMgdW5pcXVlXG4gKiBvciBjb25zaXN0ZW50IGFjcm9zcyBzZXNzaW9ucy4gSXQgaXMgdW5zYWZlIHRvIGdlbmVyYXRlIHVuaXF1ZSBJRCBmb3JcbiAqIGZ1bmN0aW9uIHByb3RvdHlwZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIGdldCB0aGUgdW5pcXVlIElEIGZvci5cbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIHVuaXF1ZSBJRCBmb3IgdGhlIG9iamVjdC5cbiAqL1xuZ29vZy5nZXRVaWQgPSBmdW5jdGlvbihvYmopIHtcbiAgLy8gVE9ETyhhcnYpOiBNYWtlIHRoZSB0eXBlIHN0cmljdGVyLCBkbyBub3QgYWNjZXB0IG51bGwuXG5cbiAgLy8gSW4gT3BlcmEgd2luZG93Lmhhc093blByb3BlcnR5IGV4aXN0cyBidXQgYWx3YXlzIHJldHVybnMgZmFsc2Ugc28gd2UgYXZvaWRcbiAgLy8gdXNpbmcgaXQuIEFzIGEgY29uc2VxdWVuY2UgdGhlIHVuaXF1ZSBJRCBnZW5lcmF0ZWQgZm9yIEJhc2VDbGFzcy5wcm90b3R5cGVcbiAgLy8gYW5kIFN1YkNsYXNzLnByb3RvdHlwZSB3aWxsIGJlIHRoZSBzYW1lLlxuICByZXR1cm4gb2JqW2dvb2cuVUlEX1BST1BFUlRZX10gfHxcbiAgICAgIChvYmpbZ29vZy5VSURfUFJPUEVSVFlfXSA9ICsrZ29vZy51aWRDb3VudGVyXyk7XG59O1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgdW5pcXVlIElEIGZyb20gYW4gb2JqZWN0LiBUaGlzIGlzIHVzZWZ1bCBpZiB0aGUgb2JqZWN0IHdhc1xuICogcHJldmlvdXNseSBtdXRhdGVkIHVzaW5nIHtAY29kZSBnb29nLmdldFVpZH0gaW4gd2hpY2ggY2FzZSB0aGUgbXV0YXRpb24gaXNcbiAqIHVuZG9uZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byByZW1vdmUgdGhlIHVuaXF1ZSBJRCBmaWVsZCBmcm9tLlxuICovXG5nb29nLnJlbW92ZVVpZCA9IGZ1bmN0aW9uKG9iaikge1xuICAvLyBUT0RPKGFydik6IE1ha2UgdGhlIHR5cGUgc3RyaWN0ZXIsIGRvIG5vdCBhY2NlcHQgbnVsbC5cblxuICAvLyBET00gbm9kZXMgaW4gSUUgYXJlIG5vdCBpbnN0YW5jZSBvZiBPYmplY3QgYW5kIHRocm93cyBleGNlcHRpb25cbiAgLy8gZm9yIGRlbGV0ZS4gSW5zdGVhZCB3ZSB0cnkgdG8gdXNlIHJlbW92ZUF0dHJpYnV0ZVxuICBpZiAoJ3JlbW92ZUF0dHJpYnV0ZScgaW4gb2JqKSB7XG4gICAgb2JqLnJlbW92ZUF0dHJpYnV0ZShnb29nLlVJRF9QUk9QRVJUWV8pO1xuICB9XG4gIC8qKiBAcHJlc2VydmVUcnkgKi9cbiAgdHJ5IHtcbiAgICBkZWxldGUgb2JqW2dvb2cuVUlEX1BST1BFUlRZX107XG4gIH0gY2F0Y2ggKGV4KSB7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBOYW1lIGZvciB1bmlxdWUgSUQgcHJvcGVydHkuIEluaXRpYWxpemVkIGluIGEgd2F5IHRvIGhlbHAgYXZvaWQgY29sbGlzaW9uc1xuICogd2l0aCBvdGhlciBjbG9zdXJlIGphdmFzY3JpcHQgb24gdGhlIHNhbWUgcGFnZS5cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5nb29nLlVJRF9QUk9QRVJUWV8gPSAnY2xvc3VyZV91aWRfJyArXG4gICAgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMjE0NzQ4MzY0OCkudG9TdHJpbmcoMzYpO1xuXG5cbi8qKlxuICogQ291bnRlciBmb3IgVUlELlxuICogQHR5cGUge251bWJlcn1cbiAqIEBwcml2YXRlXG4gKi9cbmdvb2cudWlkQ291bnRlcl8gPSAwO1xuXG5cbi8qKlxuICogQWRkcyBhIGhhc2ggY29kZSBmaWVsZCB0byBhbiBvYmplY3QuIFRoZSBoYXNoIGNvZGUgaXMgdW5pcXVlIGZvciB0aGVcbiAqIGdpdmVuIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBnZXQgdGhlIGhhc2ggY29kZSBmb3IuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBoYXNoIGNvZGUgZm9yIHRoZSBvYmplY3QuXG4gKiBAZGVwcmVjYXRlZCBVc2UgZ29vZy5nZXRVaWQgaW5zdGVhZC5cbiAqL1xuZ29vZy5nZXRIYXNoQ29kZSA9IGdvb2cuZ2V0VWlkO1xuXG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgaGFzaCBjb2RlIGZpZWxkIGZyb20gYW4gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIHJlbW92ZSB0aGUgZmllbGQgZnJvbS5cbiAqIEBkZXByZWNhdGVkIFVzZSBnb29nLnJlbW92ZVVpZCBpbnN0ZWFkLlxuICovXG5nb29nLnJlbW92ZUhhc2hDb2RlID0gZ29vZy5yZW1vdmVVaWQ7XG5cblxuLyoqXG4gKiBDbG9uZXMgYSB2YWx1ZS4gVGhlIGlucHV0IG1heSBiZSBhbiBPYmplY3QsIEFycmF5LCBvciBiYXNpYyB0eXBlLiBPYmplY3RzIGFuZFxuICogYXJyYXlzIHdpbGwgYmUgY2xvbmVkIHJlY3Vyc2l2ZWx5LlxuICpcbiAqIFdBUk5JTkdTOlxuICogPGNvZGU+Z29vZy5jbG9uZU9iamVjdDwvY29kZT4gZG9lcyBub3QgZGV0ZWN0IHJlZmVyZW5jZSBsb29wcy4gT2JqZWN0cyB0aGF0XG4gKiByZWZlciB0byB0aGVtc2VsdmVzIHdpbGwgY2F1c2UgaW5maW5pdGUgcmVjdXJzaW9uLlxuICpcbiAqIDxjb2RlPmdvb2cuY2xvbmVPYmplY3Q8L2NvZGU+IGlzIHVuYXdhcmUgb2YgdW5pcXVlIGlkZW50aWZpZXJzLCBhbmQgY29waWVzXG4gKiBVSURzIGNyZWF0ZWQgYnkgPGNvZGU+Z2V0VWlkPC9jb2RlPiBpbnRvIGNsb25lZCByZXN1bHRzLlxuICpcbiAqIEBwYXJhbSB7Kn0gb2JqIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAqIEByZXR1cm4geyp9IEEgY2xvbmUgb2YgdGhlIGlucHV0IHZhbHVlLlxuICogQGRlcHJlY2F0ZWQgZ29vZy5jbG9uZU9iamVjdCBpcyB1bnNhZmUuIFByZWZlciB0aGUgZ29vZy5vYmplY3QgbWV0aG9kcy5cbiAqL1xuZ29vZy5jbG9uZU9iamVjdCA9IGZ1bmN0aW9uKG9iaikge1xuICB2YXIgdHlwZSA9IGdvb2cudHlwZU9mKG9iaik7XG4gIGlmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2FycmF5Jykge1xuICAgIGlmIChvYmouY2xvbmUpIHtcbiAgICAgIHJldHVybiBvYmouY2xvbmUoKTtcbiAgICB9XG4gICAgdmFyIGNsb25lID0gdHlwZSA9PSAnYXJyYXknID8gW10gOiB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBjbG9uZVtrZXldID0gZ29vZy5jbG9uZU9iamVjdChvYmpba2V5XSk7XG4gICAgfVxuICAgIHJldHVybiBjbG9uZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG5cbi8qKlxuICogRm9yd2FyZCBkZWNsYXJhdGlvbiBmb3IgdGhlIGNsb25lIG1ldGhvZC4gVGhpcyBpcyBuZWNlc3NhcnkgdW50aWwgdGhlXG4gKiBjb21waWxlciBjYW4gYmV0dGVyIHN1cHBvcnQgZHVjay10eXBpbmcgY29uc3RydWN0cyBhcyB1c2VkIGluXG4gKiBnb29nLmNsb25lT2JqZWN0LlxuICpcbiAqIFRPRE8oYnJlbm5lbWFuKTogUmVtb3ZlIG9uY2UgdGhlIEpTQ29tcGlsZXIgY2FuIGluZmVyIHRoYXQgdGhlIGNoZWNrIGZvclxuICogcHJvdG8uY2xvbmUgaXMgc2FmZSBpbiBnb29nLmNsb25lT2JqZWN0LlxuICpcbiAqIEB0eXBlIHtGdW5jdGlvbn1cbiAqL1xuT2JqZWN0LnByb3RvdHlwZS5jbG9uZTtcblxuXG4vKipcbiAqIEEgbmF0aXZlIGltcGxlbWVudGF0aW9uIG9mIGdvb2cuYmluZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEEgZnVuY3Rpb24gdG8gcGFydGlhbGx5IGFwcGx5LlxuICogQHBhcmFtIHtPYmplY3R8dW5kZWZpbmVkfSBzZWxmT2JqIFNwZWNpZmllcyB0aGUgb2JqZWN0IHdoaWNoIHx0aGlzfCBzaG91bGRcbiAqICAgICBwb2ludCB0byB3aGVuIHRoZSBmdW5jdGlvbiBpcyBydW4uXG4gKiBAcGFyYW0gey4uLip9IHZhcl9hcmdzIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRoYXQgYXJlIHBhcnRpYWxseVxuICogICAgIGFwcGxpZWQgdG8gdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybiB7IUZ1bmN0aW9ufSBBIHBhcnRpYWxseS1hcHBsaWVkIGZvcm0gb2YgdGhlIGZ1bmN0aW9uIGJpbmQoKSB3YXNcbiAqICAgICBpbnZva2VkIGFzIGEgbWV0aG9kIG9mLlxuICogQHByaXZhdGVcbiAqIEBzdXBwcmVzcyB7ZGVwcmVjYXRlZH0gVGhlIGNvbXBpbGVyIHRoaW5rcyB0aGF0IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG4gKiAgICAgaXMgZGVwcmVjYXRlZCBiZWNhdXNlIHNvbWUgcGVvcGxlIGhhdmUgZGVjbGFyZWQgYSBwdXJlLUpTIHZlcnNpb24uXG4gKiAgICAgT25seSB0aGUgcHVyZS1KUyB2ZXJzaW9uIGlzIHRydWx5IGRlcHJlY2F0ZWQuXG4gKi9cbmdvb2cuYmluZE5hdGl2ZV8gPSBmdW5jdGlvbihmbiwgc2VsZk9iaiwgdmFyX2FyZ3MpIHtcbiAgcmV0dXJuIC8qKiBAdHlwZSB7IUZ1bmN0aW9ufSAqLyAoZm4uY2FsbC5hcHBseShmbi5iaW5kLCBhcmd1bWVudHMpKTtcbn07XG5cblxuLyoqXG4gKiBBIHB1cmUtSlMgaW1wbGVtZW50YXRpb24gb2YgZ29vZy5iaW5kLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gQSBmdW5jdGlvbiB0byBwYXJ0aWFsbHkgYXBwbHkuXG4gKiBAcGFyYW0ge09iamVjdHx1bmRlZmluZWR9IHNlbGZPYmogU3BlY2lmaWVzIHRoZSBvYmplY3Qgd2hpY2ggfHRoaXN8IHNob3VsZFxuICogICAgIHBvaW50IHRvIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIHJ1bi5cbiAqIEBwYXJhbSB7Li4uKn0gdmFyX2FyZ3MgQWRkaXRpb25hbCBhcmd1bWVudHMgdGhhdCBhcmUgcGFydGlhbGx5XG4gKiAgICAgYXBwbGllZCB0byB0aGUgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHshRnVuY3Rpb259IEEgcGFydGlhbGx5LWFwcGxpZWQgZm9ybSBvZiB0aGUgZnVuY3Rpb24gYmluZCgpIHdhc1xuICogICAgIGludm9rZWQgYXMgYSBtZXRob2Qgb2YuXG4gKiBAcHJpdmF0ZVxuICovXG5nb29nLmJpbmRKc18gPSBmdW5jdGlvbihmbiwgc2VsZk9iaiwgdmFyX2FyZ3MpIHtcbiAgaWYgKCFmbikge1xuICAgIHRocm93IG5ldyBFcnJvcigpO1xuICB9XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgLy8gUHJlcGVuZCB0aGUgYm91bmQgYXJndW1lbnRzIHRvIHRoZSBjdXJyZW50IGFyZ3VtZW50cy5cbiAgICAgIHZhciBuZXdBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KG5ld0FyZ3MsIGJvdW5kQXJncyk7XG4gICAgICByZXR1cm4gZm4uYXBwbHkoc2VsZk9iaiwgbmV3QXJncyk7XG4gICAgfTtcblxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmbi5hcHBseShzZWxmT2JqLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cbn07XG5cblxuLyoqXG4gKiBQYXJ0aWFsbHkgYXBwbGllcyB0aGlzIGZ1bmN0aW9uIHRvIGEgcGFydGljdWxhciAndGhpcyBvYmplY3QnIGFuZCB6ZXJvIG9yXG4gKiBtb3JlIGFyZ3VtZW50cy4gVGhlIHJlc3VsdCBpcyBhIG5ldyBmdW5jdGlvbiB3aXRoIHNvbWUgYXJndW1lbnRzIG9mIHRoZSBmaXJzdFxuICogZnVuY3Rpb24gcHJlLWZpbGxlZCBhbmQgdGhlIHZhbHVlIG9mIHx0aGlzfCAncHJlLXNwZWNpZmllZCcuPGJyPjxicj5cbiAqXG4gKiBSZW1haW5pbmcgYXJndW1lbnRzIHNwZWNpZmllZCBhdCBjYWxsLXRpbWUgYXJlIGFwcGVuZGVkIHRvIHRoZSBwcmUtXG4gKiBzcGVjaWZpZWQgb25lcy48YnI+PGJyPlxuICpcbiAqIEFsc28gc2VlOiB7QGxpbmsgI3BhcnRpYWx9Ljxicj48YnI+XG4gKlxuICogVXNhZ2U6XG4gKiA8cHJlPnZhciBiYXJNZXRoQm91bmQgPSBiaW5kKG15RnVuY3Rpb24sIG15T2JqLCAnYXJnMScsICdhcmcyJyk7XG4gKiBiYXJNZXRoQm91bmQoJ2FyZzMnLCAnYXJnNCcpOzwvcHJlPlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEEgZnVuY3Rpb24gdG8gcGFydGlhbGx5IGFwcGx5LlxuICogQHBhcmFtIHtPYmplY3R8dW5kZWZpbmVkfSBzZWxmT2JqIFNwZWNpZmllcyB0aGUgb2JqZWN0IHdoaWNoIHx0aGlzfCBzaG91bGRcbiAqICAgICBwb2ludCB0byB3aGVuIHRoZSBmdW5jdGlvbiBpcyBydW4uXG4gKiBAcGFyYW0gey4uLip9IHZhcl9hcmdzIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRoYXQgYXJlIHBhcnRpYWxseVxuICogICAgIGFwcGxpZWQgdG8gdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybiB7IUZ1bmN0aW9ufSBBIHBhcnRpYWxseS1hcHBsaWVkIGZvcm0gb2YgdGhlIGZ1bmN0aW9uIGJpbmQoKSB3YXNcbiAqICAgICBpbnZva2VkIGFzIGEgbWV0aG9kIG9mLlxuICogQHN1cHByZXNzIHtkZXByZWNhdGVkfSBTZWUgYWJvdmUuXG4gKi9cbmdvb2cuYmluZCA9IGZ1bmN0aW9uKGZuLCBzZWxmT2JqLCB2YXJfYXJncykge1xuICAvLyBUT0RPKG5pY2tzYW50b3MpOiBuYXJyb3cgdGhlIHR5cGUgc2lnbmF0dXJlLlxuICBpZiAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgJiZcbiAgICAgIC8vIE5PVEUobmlja3NhbnRvcyk6IFNvbWVib2R5IHB1bGxlZCBiYXNlLmpzIGludG8gdGhlIGRlZmF1bHRcbiAgICAgIC8vIENocm9tZSBleHRlbnNpb24gZW52aXJvbm1lbnQuIFRoaXMgbWVhbnMgdGhhdCBmb3IgQ2hyb21lIGV4dGVuc2lvbnMsXG4gICAgICAvLyB0aGV5IGdldCB0aGUgaW1wbGVtZW50YXRpb24gb2YgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgdGhhdFxuICAgICAgLy8gY2FsbHMgZ29vZy5iaW5kIGluc3RlYWQgb2YgdGhlIG5hdGl2ZSBvbmUuIEV2ZW4gd29yc2UsIHdlIGRvbid0IHdhbnRcbiAgICAgIC8vIHRvIGludHJvZHVjZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbiBnb29nLmJpbmQgYW5kXG4gICAgICAvLyBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCwgc28gd2UgaGF2ZSB0byBoYWNrIHRoaXMgdG8gbWFrZSBzdXJlIGl0XG4gICAgICAvLyB3b3JrcyBjb3JyZWN0bHkuXG4gICAgICBGdW5jdGlvbi5wcm90b3R5cGUuYmluZC50b1N0cmluZygpLmluZGV4T2YoJ25hdGl2ZSBjb2RlJykgIT0gLTEpIHtcbiAgICBnb29nLmJpbmQgPSBnb29nLmJpbmROYXRpdmVfO1xuICB9IGVsc2Uge1xuICAgIGdvb2cuYmluZCA9IGdvb2cuYmluZEpzXztcbiAgfVxuICByZXR1cm4gZ29vZy5iaW5kLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59O1xuXG5cbi8qKlxuICogTGlrZSBiaW5kKCksIGV4Y2VwdCB0aGF0IGEgJ3RoaXMgb2JqZWN0JyBpcyBub3QgcmVxdWlyZWQuIFVzZWZ1bCB3aGVuIHRoZVxuICogdGFyZ2V0IGZ1bmN0aW9uIGlzIGFscmVhZHkgYm91bmQuXG4gKlxuICogVXNhZ2U6XG4gKiB2YXIgZyA9IHBhcnRpYWwoZiwgYXJnMSwgYXJnMik7XG4gKiBnKGFyZzMsIGFyZzQpO1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEEgZnVuY3Rpb24gdG8gcGFydGlhbGx5IGFwcGx5LlxuICogQHBhcmFtIHsuLi4qfSB2YXJfYXJncyBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0aGF0IGFyZSBwYXJ0aWFsbHlcbiAqICAgICBhcHBsaWVkIHRvIGZuLlxuICogQHJldHVybiB7IUZ1bmN0aW9ufSBBIHBhcnRpYWxseS1hcHBsaWVkIGZvcm0gb2YgdGhlIGZ1bmN0aW9uIGJpbmQoKSB3YXNcbiAqICAgICBpbnZva2VkIGFzIGEgbWV0aG9kIG9mLlxuICovXG5nb29nLnBhcnRpYWwgPSBmdW5jdGlvbihmbiwgdmFyX2FyZ3MpIHtcbiAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgLy8gUHJlcGVuZCB0aGUgYm91bmQgYXJndW1lbnRzIHRvIHRoZSBjdXJyZW50IGFyZ3VtZW50cy5cbiAgICB2YXIgbmV3QXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgbmV3QXJncy51bnNoaWZ0LmFwcGx5KG5ld0FyZ3MsIGFyZ3MpO1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBuZXdBcmdzKTtcbiAgfTtcbn07XG5cblxuLyoqXG4gKiBDb3BpZXMgYWxsIHRoZSBtZW1iZXJzIG9mIGEgc291cmNlIG9iamVjdCB0byBhIHRhcmdldCBvYmplY3QuIFRoaXMgbWV0aG9kXG4gKiBkb2VzIG5vdCB3b3JrIG9uIGFsbCBicm93c2VycyBmb3IgYWxsIG9iamVjdHMgdGhhdCBjb250YWluIGtleXMgc3VjaCBhc1xuICogdG9TdHJpbmcgb3IgaGFzT3duUHJvcGVydHkuIFVzZSBnb29nLm9iamVjdC5leHRlbmQgZm9yIHRoaXMgcHVycG9zZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXQgVGFyZ2V0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBTb3VyY2UuXG4gKi9cbmdvb2cubWl4aW4gPSBmdW5jdGlvbih0YXJnZXQsIHNvdXJjZSkge1xuICBmb3IgKHZhciB4IGluIHNvdXJjZSkge1xuICAgIHRhcmdldFt4XSA9IHNvdXJjZVt4XTtcbiAgfVxuXG4gIC8vIEZvciBJRTcgb3IgbG93ZXIsIHRoZSBmb3ItaW4tbG9vcCBkb2VzIG5vdCBjb250YWluIGFueSBwcm9wZXJ0aWVzIHRoYXQgYXJlXG4gIC8vIG5vdCBlbnVtZXJhYmxlIG9uIHRoZSBwcm90b3R5cGUgb2JqZWN0IChmb3IgZXhhbXBsZSwgaXNQcm90b3R5cGVPZiBmcm9tXG4gIC8vIE9iamVjdC5wcm90b3R5cGUpIGJ1dCBhbHNvIGl0IHdpbGwgbm90IGluY2x1ZGUgJ3JlcGxhY2UnIG9uIG9iamVjdHMgdGhhdFxuICAvLyBleHRlbmQgU3RyaW5nIGFuZCBjaGFuZ2UgJ3JlcGxhY2UnIChub3QgdGhhdCBpdCBpcyBjb21tb24gZm9yIGFueW9uZSB0b1xuICAvLyBleHRlbmQgYW55dGhpbmcgZXhjZXB0IE9iamVjdCkuXG59O1xuXG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfSBBbiBpbnRlZ2VyIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kc1xuICogICAgIGJldHdlZW4gbWlkbmlnaHQsIEphbnVhcnkgMSwgMTk3MCBhbmQgdGhlIGN1cnJlbnQgdGltZS5cbiAqL1xuZ29vZy5ub3cgPSBEYXRlLm5vdyB8fCAoZnVuY3Rpb24oKSB7XG4gIC8vIFVuYXJ5IHBsdXMgb3BlcmF0b3IgY29udmVydHMgaXRzIG9wZXJhbmQgdG8gYSBudW1iZXIgd2hpY2ggaW4gdGhlIGNhc2Ugb2ZcbiAgLy8gYSBkYXRlIGlzIGRvbmUgYnkgY2FsbGluZyBnZXRUaW1lKCkuXG4gIHJldHVybiArbmV3IERhdGUoKTtcbn0pO1xuXG5cbi8qKlxuICogRXZhbHMgamF2YXNjcmlwdCBpbiB0aGUgZ2xvYmFsIHNjb3BlLiAgSW4gSUUgdGhpcyB1c2VzIGV4ZWNTY3JpcHQsIG90aGVyXG4gKiBicm93c2VycyB1c2UgZ29vZy5nbG9iYWwuZXZhbC4gSWYgZ29vZy5nbG9iYWwuZXZhbCBkb2VzIG5vdCBldmFsdWF0ZSBpbiB0aGVcbiAqIGdsb2JhbCBzY29wZSAoZm9yIGV4YW1wbGUsIGluIFNhZmFyaSksIGFwcGVuZHMgYSBzY3JpcHQgdGFnIGluc3RlYWQuXG4gKiBUaHJvd3MgYW4gZXhjZXB0aW9uIGlmIG5laXRoZXIgZXhlY1NjcmlwdCBvciBldmFsIGlzIGRlZmluZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gc2NyaXB0IEphdmFTY3JpcHQgc3RyaW5nLlxuICovXG5nb29nLmdsb2JhbEV2YWwgPSBmdW5jdGlvbihzY3JpcHQpIHtcbiAgaWYgKGdvb2cuZ2xvYmFsLmV4ZWNTY3JpcHQpIHtcbiAgICBnb29nLmdsb2JhbC5leGVjU2NyaXB0KHNjcmlwdCwgJ0phdmFTY3JpcHQnKTtcbiAgfSBlbHNlIGlmIChnb29nLmdsb2JhbC5ldmFsKSB7XG4gICAgLy8gVGVzdCB0byBzZWUgaWYgZXZhbCB3b3Jrc1xuICAgIGlmIChnb29nLmV2YWxXb3Jrc0Zvckdsb2JhbHNfID09IG51bGwpIHtcbiAgICAgIGdvb2cuZ2xvYmFsLmV2YWwoJ3ZhciBfZXRfID0gMTsnKTtcbiAgICAgIGlmICh0eXBlb2YgZ29vZy5nbG9iYWxbJ19ldF8nXSAhPSAndW5kZWZpbmVkJykge1xuICAgICAgICBkZWxldGUgZ29vZy5nbG9iYWxbJ19ldF8nXTtcbiAgICAgICAgZ29vZy5ldmFsV29ya3NGb3JHbG9iYWxzXyA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnb29nLmV2YWxXb3Jrc0Zvckdsb2JhbHNfID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGdvb2cuZXZhbFdvcmtzRm9yR2xvYmFsc18pIHtcbiAgICAgIGdvb2cuZ2xvYmFsLmV2YWwoc2NyaXB0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGRvYyA9IGdvb2cuZ2xvYmFsLmRvY3VtZW50O1xuICAgICAgdmFyIHNjcmlwdEVsdCA9IGRvYy5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgIHNjcmlwdEVsdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gICAgICBzY3JpcHRFbHQuZGVmZXIgPSBmYWxzZTtcbiAgICAgIC8vIE5vdGUodXNlcik6IGNhbid0IHVzZSAuaW5uZXJIVE1MIHNpbmNlIFwidCgnPHRlc3Q+JylcIiB3aWxsIGZhaWwgYW5kXG4gICAgICAvLyAudGV4dCBkb2Vzbid0IHdvcmsgaW4gU2FmYXJpIDIuICBUaGVyZWZvcmUgd2UgYXBwZW5kIGEgdGV4dCBub2RlLlxuICAgICAgc2NyaXB0RWx0LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVUZXh0Tm9kZShzY3JpcHQpKTtcbiAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdEVsdCk7XG4gICAgICBkb2MuYm9keS5yZW1vdmVDaGlsZChzY3JpcHRFbHQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBFcnJvcignZ29vZy5nbG9iYWxFdmFsIG5vdCBhdmFpbGFibGUnKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB3ZSBjYW4gY2FsbCAnZXZhbCcgZGlyZWN0bHkgdG8gZXZhbCBjb2RlIGluIHRoZVxuICogZ2xvYmFsIHNjb3BlLiBTZXQgdG8gYSBCb29sZWFuIGJ5IHRoZSBmaXJzdCBjYWxsIHRvIGdvb2cuZ2xvYmFsRXZhbCAod2hpY2hcbiAqIGVtcGlyaWNhbGx5IHRlc3RzIHdoZXRoZXIgZXZhbCB3b3JrcyBmb3IgZ2xvYmFscykuIEBzZWUgZ29vZy5nbG9iYWxFdmFsXG4gKiBAdHlwZSB7P2Jvb2xlYW59XG4gKiBAcHJpdmF0ZVxuICovXG5nb29nLmV2YWxXb3Jrc0Zvckdsb2JhbHNfID0gbnVsbDtcblxuXG4vKipcbiAqIE9wdGlvbmFsIG1hcCBvZiBDU1MgY2xhc3MgbmFtZXMgdG8gb2JmdXNjYXRlZCBuYW1lcyB1c2VkIHdpdGhcbiAqIGdvb2cuZ2V0Q3NzTmFtZSgpLlxuICogQHR5cGUge09iamVjdHx1bmRlZmluZWR9XG4gKiBAcHJpdmF0ZVxuICogQHNlZSBnb29nLnNldENzc05hbWVNYXBwaW5nXG4gKi9cbmdvb2cuY3NzTmFtZU1hcHBpbmdfO1xuXG5cbi8qKlxuICogT3B0aW9uYWwgb2JmdXNjYXRpb24gc3R5bGUgZm9yIENTUyBjbGFzcyBuYW1lcy4gU2hvdWxkIGJlIHNldCB0byBlaXRoZXJcbiAqICdCWV9XSE9MRScgb3IgJ0JZX1BBUlQnIGlmIGRlZmluZWQuXG4gKiBAdHlwZSB7c3RyaW5nfHVuZGVmaW5lZH1cbiAqIEBwcml2YXRlXG4gKiBAc2VlIGdvb2cuc2V0Q3NzTmFtZU1hcHBpbmdcbiAqL1xuZ29vZy5jc3NOYW1lTWFwcGluZ1N0eWxlXztcblxuXG4vKipcbiAqIEhhbmRsZXMgc3RyaW5ncyB0aGF0IGFyZSBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIENTUyBjbGFzcyBuYW1lcy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHdvcmtzIGluIHRhbmRlbSB3aXRoIEBzZWUgZ29vZy5zZXRDc3NOYW1lTWFwcGluZy5cbiAqXG4gKiBXaXRob3V0IGFueSBtYXBwaW5nIHNldCwgdGhlIGFyZ3VtZW50cyBhcmUgc2ltcGxlIGpvaW5lZCB3aXRoIGFcbiAqIGh5cGhlbiBhbmQgcGFzc2VkIHRocm91Z2ggdW5hbHRlcmVkLlxuICpcbiAqIFdoZW4gdGhlcmUgaXMgYSBtYXBwaW5nLCB0aGVyZSBhcmUgdHdvIHBvc3NpYmxlIHN0eWxlcyBpbiB3aGljaFxuICogdGhlc2UgbWFwcGluZ3MgYXJlIHVzZWQuIEluIHRoZSBCWV9QQVJUIHN0eWxlLCBlYWNoIHBhcnQgKGkuZS4gaW5cbiAqIGJldHdlZW4gaHlwaGVucykgb2YgdGhlIHBhc3NlZCBpbiBjc3MgbmFtZSBpcyByZXdyaXR0ZW4gYWNjb3JkaW5nXG4gKiB0byB0aGUgbWFwLiBJbiB0aGUgQllfV0hPTEUgc3R5bGUsIHRoZSBmdWxsIGNzcyBuYW1lIGlzIGxvb2tlZCB1cCBpblxuICogdGhlIG1hcCBkaXJlY3RseS4gSWYgYSByZXdyaXRlIGlzIG5vdCBzcGVjaWZpZWQgYnkgdGhlIG1hcCwgdGhlXG4gKiBjb21waWxlciB3aWxsIG91dHB1dCBhIHdhcm5pbmcuXG4gKlxuICogV2hlbiB0aGUgbWFwcGluZyBpcyBwYXNzZWQgdG8gdGhlIGNvbXBpbGVyLCBpdCB3aWxsIHJlcGxhY2UgY2FsbHNcbiAqIHRvIGdvb2cuZ2V0Q3NzTmFtZSB3aXRoIHRoZSBzdHJpbmdzIGZyb20gdGhlIG1hcHBpbmcsIGUuZy5cbiAqICAgICB2YXIgeCA9IGdvb2cuZ2V0Q3NzTmFtZSgnZm9vJyk7XG4gKiAgICAgdmFyIHkgPSBnb29nLmdldENzc05hbWUodGhpcy5iYXNlQ2xhc3MsICdhY3RpdmUnKTtcbiAqICBiZWNvbWVzOlxuICogICAgIHZhciB4PSAnZm9vJztcbiAqICAgICB2YXIgeSA9IHRoaXMuYmFzZUNsYXNzICsgJy1hY3RpdmUnO1xuICpcbiAqIElmIG9uZSBhcmd1bWVudCBpcyBwYXNzZWQgaXQgd2lsbCBiZSBwcm9jZXNzZWQsIGlmIHR3byBhcmUgcGFzc2VkXG4gKiBvbmx5IHRoZSBtb2RpZmllciB3aWxsIGJlIHByb2Nlc3NlZCwgYXMgaXQgaXMgYXNzdW1lZCB0aGUgZmlyc3RcbiAqIGFyZ3VtZW50IHdhcyBnZW5lcmF0ZWQgYXMgYSByZXN1bHQgb2YgY2FsbGluZyBnb29nLmdldENzc05hbWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSBUaGUgY2xhc3MgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0X21vZGlmaWVyIEEgbW9kaWZpZXIgdG8gYmUgYXBwZW5kZWQgdG8gdGhlIGNsYXNzIG5hbWUuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjbGFzcyBuYW1lIG9yIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBjbGFzcyBuYW1lIGFuZFxuICogICAgIHRoZSBtb2RpZmllci5cbiAqL1xuZ29vZy5nZXRDc3NOYW1lID0gZnVuY3Rpb24oY2xhc3NOYW1lLCBvcHRfbW9kaWZpZXIpIHtcbiAgdmFyIGdldE1hcHBpbmcgPSBmdW5jdGlvbihjc3NOYW1lKSB7XG4gICAgcmV0dXJuIGdvb2cuY3NzTmFtZU1hcHBpbmdfW2Nzc05hbWVdIHx8IGNzc05hbWU7XG4gIH07XG5cbiAgdmFyIHJlbmFtZUJ5UGFydHMgPSBmdW5jdGlvbihjc3NOYW1lKSB7XG4gICAgLy8gUmVtYXAgYWxsIHRoZSBwYXJ0cyBpbmRpdmlkdWFsbHkuXG4gICAgdmFyIHBhcnRzID0gY3NzTmFtZS5zcGxpdCgnLScpO1xuICAgIHZhciBtYXBwZWQgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBtYXBwZWQucHVzaChnZXRNYXBwaW5nKHBhcnRzW2ldKSk7XG4gICAgfVxuICAgIHJldHVybiBtYXBwZWQuam9pbignLScpO1xuICB9O1xuXG4gIHZhciByZW5hbWU7XG4gIGlmIChnb29nLmNzc05hbWVNYXBwaW5nXykge1xuICAgIHJlbmFtZSA9IGdvb2cuY3NzTmFtZU1hcHBpbmdTdHlsZV8gPT0gJ0JZX1dIT0xFJyA/XG4gICAgICAgIGdldE1hcHBpbmcgOiByZW5hbWVCeVBhcnRzO1xuICB9IGVsc2Uge1xuICAgIHJlbmFtZSA9IGZ1bmN0aW9uKGEpIHtcbiAgICAgIHJldHVybiBhO1xuICAgIH07XG4gIH1cblxuICBpZiAob3B0X21vZGlmaWVyKSB7XG4gICAgcmV0dXJuIGNsYXNzTmFtZSArICctJyArIHJlbmFtZShvcHRfbW9kaWZpZXIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiByZW5hbWUoY2xhc3NOYW1lKTtcbiAgfVxufTtcblxuXG4vKipcbiAqIFNldHMgdGhlIG1hcCB0byBjaGVjayB3aGVuIHJldHVybmluZyBhIHZhbHVlIGZyb20gZ29vZy5nZXRDc3NOYW1lKCkuIEV4YW1wbGU6XG4gKiA8cHJlPlxuICogZ29vZy5zZXRDc3NOYW1lTWFwcGluZyh7XG4gKiAgIFwiZ29vZ1wiOiBcImFcIixcbiAqICAgXCJkaXNhYmxlZFwiOiBcImJcIixcbiAqIH0pO1xuICpcbiAqIHZhciB4ID0gZ29vZy5nZXRDc3NOYW1lKCdnb29nJyk7XG4gKiAvLyBUaGUgZm9sbG93aW5nIGV2YWx1YXRlcyB0bzogXCJhIGEtYlwiLlxuICogZ29vZy5nZXRDc3NOYW1lKCdnb29nJykgKyAnICcgKyBnb29nLmdldENzc05hbWUoeCwgJ2Rpc2FibGVkJylcbiAqIDwvcHJlPlxuICogV2hlbiBkZWNsYXJlZCBhcyBhIG1hcCBvZiBzdHJpbmcgbGl0ZXJhbHMgdG8gc3RyaW5nIGxpdGVyYWxzLCB0aGUgSlNDb21waWxlclxuICogd2lsbCByZXBsYWNlIGFsbCBjYWxscyB0byBnb29nLmdldENzc05hbWUoKSB1c2luZyB0aGUgc3VwcGxpZWQgbWFwIGlmIHRoZVxuICogLS1jbG9zdXJlX3Bhc3MgZmxhZyBpcyBzZXQuXG4gKlxuICogQHBhcmFtIHshT2JqZWN0fSBtYXBwaW5nIEEgbWFwIG9mIHN0cmluZ3MgdG8gc3RyaW5ncyB3aGVyZSBrZXlzIGFyZSBwb3NzaWJsZVxuICogICAgIGFyZ3VtZW50cyB0byBnb29nLmdldENzc05hbWUoKSBhbmQgdmFsdWVzIGFyZSB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXNcbiAqICAgICB0aGF0IHNob3VsZCBiZSByZXR1cm5lZC5cbiAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0X3N0eWxlIFRoZSBzdHlsZSBvZiBjc3MgbmFtZSBtYXBwaW5nLiBUaGVyZSBhcmUgdHdvIHZhbGlkXG4gKiAgICAgb3B0aW9uczogJ0JZX1BBUlQnLCBhbmQgJ0JZX1dIT0xFJy5cbiAqIEBzZWUgZ29vZy5nZXRDc3NOYW1lIGZvciBhIGRlc2NyaXB0aW9uLlxuICovXG5nb29nLnNldENzc05hbWVNYXBwaW5nID0gZnVuY3Rpb24obWFwcGluZywgb3B0X3N0eWxlKSB7XG4gIGdvb2cuY3NzTmFtZU1hcHBpbmdfID0gbWFwcGluZztcbiAgZ29vZy5jc3NOYW1lTWFwcGluZ1N0eWxlXyA9IG9wdF9zdHlsZTtcbn07XG5cblxuLyoqXG4gKiBUbyB1c2UgQ1NTIHJlbmFtaW5nIGluIGNvbXBpbGVkIG1vZGUsIG9uZSBvZiB0aGUgaW5wdXQgZmlsZXMgc2hvdWxkIGhhdmUgYVxuICogY2FsbCB0byBnb29nLnNldENzc05hbWVNYXBwaW5nKCkgd2l0aCBhbiBvYmplY3QgbGl0ZXJhbCB0aGF0IHRoZSBKU0NvbXBpbGVyXG4gKiBjYW4gZXh0cmFjdCBhbmQgdXNlIHRvIHJlcGxhY2UgYWxsIGNhbGxzIHRvIGdvb2cuZ2V0Q3NzTmFtZSgpLiBJbiB1bmNvbXBpbGVkXG4gKiBtb2RlLCBKYXZhU2NyaXB0IGNvZGUgc2hvdWxkIGJlIGxvYWRlZCBiZWZvcmUgdGhpcyBiYXNlLmpzIGZpbGUgdGhhdCBkZWNsYXJlc1xuICogYSBnbG9iYWwgdmFyaWFibGUsIENMT1NVUkVfQ1NTX05BTUVfTUFQUElORywgd2hpY2ggaXMgdXNlZCBiZWxvdy4gVGhpcyBpc1xuICogdG8gZW5zdXJlIHRoYXQgdGhlIG1hcHBpbmcgaXMgbG9hZGVkIGJlZm9yZSBhbnkgY2FsbHMgdG8gZ29vZy5nZXRDc3NOYW1lKClcbiAqIGFyZSBtYWRlIGluIHVuY29tcGlsZWQgbW9kZS5cbiAqXG4gKiBBIGhvb2sgZm9yIG92ZXJyaWRpbmcgdGhlIENTUyBuYW1lIG1hcHBpbmcuXG4gKiBAdHlwZSB7T2JqZWN0fHVuZGVmaW5lZH1cbiAqL1xuZ29vZy5nbG9iYWwuQ0xPU1VSRV9DU1NfTkFNRV9NQVBQSU5HO1xuXG5cbmlmICghQ09NUElMRUQgJiYgZ29vZy5nbG9iYWwuQ0xPU1VSRV9DU1NfTkFNRV9NQVBQSU5HKSB7XG4gIC8vIFRoaXMgZG9lcyBub3QgY2FsbCBnb29nLnNldENzc05hbWVNYXBwaW5nKCkgYmVjYXVzZSB0aGUgSlNDb21waWxlclxuICAvLyByZXF1aXJlcyB0aGF0IGdvb2cuc2V0Q3NzTmFtZU1hcHBpbmcoKSBiZSBjYWxsZWQgd2l0aCBhbiBvYmplY3QgbGl0ZXJhbC5cbiAgZ29vZy5jc3NOYW1lTWFwcGluZ18gPSBnb29nLmdsb2JhbC5DTE9TVVJFX0NTU19OQU1FX01BUFBJTkc7XG59XG5cblxuLyoqXG4gKiBBYnN0cmFjdCBpbXBsZW1lbnRhdGlvbiBvZiBnb29nLmdldE1zZyBmb3IgdXNlIHdpdGggbG9jYWxpemVkIG1lc3NhZ2VzLlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciBUcmFuc2xhdGFibGUgc3RyaW5nLCBwbGFjZXMgaG9sZGVycyBpbiB0aGUgZm9ybSB7JGZvb30uXG4gKiBAcGFyYW0ge09iamVjdD19IG9wdF92YWx1ZXMgTWFwIG9mIHBsYWNlIGhvbGRlciBuYW1lIHRvIHZhbHVlLlxuICogQHJldHVybiB7c3RyaW5nfSBtZXNzYWdlIHdpdGggcGxhY2Vob2xkZXJzIGZpbGxlZC5cbiAqL1xuZ29vZy5nZXRNc2cgPSBmdW5jdGlvbihzdHIsIG9wdF92YWx1ZXMpIHtcbiAgdmFyIHZhbHVlcyA9IG9wdF92YWx1ZXMgfHwge307XG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZXMpIHtcbiAgICB2YXIgdmFsdWUgPSAoJycgKyB2YWx1ZXNba2V5XSkucmVwbGFjZSgvXFwkL2csICckJCQkJyk7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFxcXHtcXFxcJCcgKyBrZXkgKyAnXFxcXH0nLCAnZ2knKSwgdmFsdWUpO1xuICB9XG4gIHJldHVybiBzdHI7XG59O1xuXG5cbi8qKlxuICogRXhwb3NlcyBhbiB1bm9iZnVzY2F0ZWQgZ2xvYmFsIG5hbWVzcGFjZSBwYXRoIGZvciB0aGUgZ2l2ZW4gb2JqZWN0LlxuICogTm90ZSB0aGF0IGZpZWxkcyBvZiB0aGUgZXhwb3J0ZWQgb2JqZWN0ICp3aWxsKiBiZSBvYmZ1c2NhdGVkLFxuICogdW5sZXNzIHRoZXkgYXJlIGV4cG9ydGVkIGluIHR1cm4gdmlhIHRoaXMgZnVuY3Rpb24gb3JcbiAqIGdvb2cuZXhwb3J0UHJvcGVydHlcbiAqXG4gKiA8cD5BbHNvIGhhbmR5IGZvciBtYWtpbmcgcHVibGljIGl0ZW1zIHRoYXQgYXJlIGRlZmluZWQgaW4gYW5vbnltb3VzXG4gKiBjbG9zdXJlcy5cbiAqXG4gKiBleC4gZ29vZy5leHBvcnRTeW1ib2woJ3B1YmxpYy5wYXRoLkZvbycsIEZvbyk7XG4gKlxuICogZXguIGdvb2cuZXhwb3J0U3ltYm9sKCdwdWJsaWMucGF0aC5Gb28uc3RhdGljRnVuY3Rpb24nLFxuICogICAgICAgICAgICAgICAgICAgICAgIEZvby5zdGF0aWNGdW5jdGlvbik7XG4gKiAgICAgcHVibGljLnBhdGguRm9vLnN0YXRpY0Z1bmN0aW9uKCk7XG4gKlxuICogZXguIGdvb2cuZXhwb3J0U3ltYm9sKCdwdWJsaWMucGF0aC5Gb28ucHJvdG90eXBlLm15TWV0aG9kJyxcbiAqICAgICAgICAgICAgICAgICAgICAgICBGb28ucHJvdG90eXBlLm15TWV0aG9kKTtcbiAqICAgICBuZXcgcHVibGljLnBhdGguRm9vKCkubXlNZXRob2QoKTtcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHVibGljUGF0aCBVbm9iZnVzY2F0ZWQgbmFtZSB0byBleHBvcnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBPYmplY3QgdGhlIG5hbWUgc2hvdWxkIHBvaW50IHRvLlxuICogQHBhcmFtIHtPYmplY3Q9fSBvcHRfb2JqZWN0VG9FeHBvcnRUbyBUaGUgb2JqZWN0IHRvIGFkZCB0aGUgcGF0aCB0bzsgZGVmYXVsdFxuICogICAgIGlzIHxnb29nLmdsb2JhbHwuXG4gKi9cbmdvb2cuZXhwb3J0U3ltYm9sID0gZnVuY3Rpb24ocHVibGljUGF0aCwgb2JqZWN0LCBvcHRfb2JqZWN0VG9FeHBvcnRUbykge1xuICBnb29nLmV4cG9ydFBhdGhfKHB1YmxpY1BhdGgsIG9iamVjdCwgb3B0X29iamVjdFRvRXhwb3J0VG8pO1xufTtcblxuXG4vKipcbiAqIEV4cG9ydHMgYSBwcm9wZXJ0eSB1bm9iZnVzY2F0ZWQgaW50byB0aGUgb2JqZWN0J3MgbmFtZXNwYWNlLlxuICogZXguIGdvb2cuZXhwb3J0UHJvcGVydHkoRm9vLCAnc3RhdGljRnVuY3Rpb24nLCBGb28uc3RhdGljRnVuY3Rpb24pO1xuICogZXguIGdvb2cuZXhwb3J0UHJvcGVydHkoRm9vLnByb3RvdHlwZSwgJ215TWV0aG9kJywgRm9vLnByb3RvdHlwZS5teU1ldGhvZCk7XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IE9iamVjdCB3aG9zZSBzdGF0aWMgcHJvcGVydHkgaXMgYmVpbmcgZXhwb3J0ZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gcHVibGljTmFtZSBVbm9iZnVzY2F0ZWQgbmFtZSB0byBleHBvcnQuXG4gKiBAcGFyYW0geyp9IHN5bWJvbCBPYmplY3QgdGhlIG5hbWUgc2hvdWxkIHBvaW50IHRvLlxuICovXG5nb29nLmV4cG9ydFByb3BlcnR5ID0gZnVuY3Rpb24ob2JqZWN0LCBwdWJsaWNOYW1lLCBzeW1ib2wpIHtcbiAgb2JqZWN0W3B1YmxpY05hbWVdID0gc3ltYm9sO1xufTtcblxuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlci5cbiAqXG4gKiBVc2FnZTpcbiAqIDxwcmU+XG4gKiBmdW5jdGlvbiBQYXJlbnRDbGFzcyhhLCBiKSB7IH1cbiAqIFBhcmVudENsYXNzLnByb3RvdHlwZS5mb28gPSBmdW5jdGlvbihhKSB7IH1cbiAqXG4gKiBmdW5jdGlvbiBDaGlsZENsYXNzKGEsIGIsIGMpIHtcbiAqICAgZ29vZy5iYXNlKHRoaXMsIGEsIGIpO1xuICogfVxuICogZ29vZy5pbmhlcml0cyhDaGlsZENsYXNzLCBQYXJlbnRDbGFzcyk7XG4gKlxuICogdmFyIGNoaWxkID0gbmV3IENoaWxkQ2xhc3MoJ2EnLCAnYicsICdzZWUnKTtcbiAqIGNoaWxkLmZvbygpOyAvLyB3b3Jrc1xuICogPC9wcmU+XG4gKlxuICogSW4gYWRkaXRpb24sIGEgc3VwZXJjbGFzcycgaW1wbGVtZW50YXRpb24gb2YgYSBtZXRob2QgY2FuIGJlIGludm9rZWRcbiAqIGFzIGZvbGxvd3M6XG4gKlxuICogPHByZT5cbiAqIENoaWxkQ2xhc3MucHJvdG90eXBlLmZvbyA9IGZ1bmN0aW9uKGEpIHtcbiAqICAgQ2hpbGRDbGFzcy5zdXBlckNsYXNzXy5mb28uY2FsbCh0aGlzLCBhKTtcbiAqICAgLy8gb3RoZXIgY29kZVxuICogfTtcbiAqIDwvcHJlPlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNoaWxkQ3RvciBDaGlsZCBjbGFzcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcmVudEN0b3IgUGFyZW50IGNsYXNzLlxuICovXG5nb29nLmluaGVyaXRzID0gZnVuY3Rpb24oY2hpbGRDdG9yLCBwYXJlbnRDdG9yKSB7XG4gIC8qKiBAY29uc3RydWN0b3IgKi9cbiAgZnVuY3Rpb24gdGVtcEN0b3IoKSB7fTtcbiAgdGVtcEN0b3IucHJvdG90eXBlID0gcGFyZW50Q3Rvci5wcm90b3R5cGU7XG4gIGNoaWxkQ3Rvci5zdXBlckNsYXNzXyA9IHBhcmVudEN0b3IucHJvdG90eXBlO1xuICBjaGlsZEN0b3IucHJvdG90eXBlID0gbmV3IHRlbXBDdG9yKCk7XG4gIGNoaWxkQ3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjaGlsZEN0b3I7XG59O1xuXG5cbi8qKlxuICogQ2FsbCB1cCB0byB0aGUgc3VwZXJjbGFzcy5cbiAqXG4gKiBJZiB0aGlzIGlzIGNhbGxlZCBmcm9tIGEgY29uc3RydWN0b3IsIHRoZW4gdGhpcyBjYWxscyB0aGUgc3VwZXJjbGFzc1xuICogY29udHJ1Y3RvciB3aXRoIGFyZ3VtZW50cyAxLU4uXG4gKlxuICogSWYgdGhpcyBpcyBjYWxsZWQgZnJvbSBhIHByb3RvdHlwZSBtZXRob2QsIHRoZW4geW91IG11c3QgcGFzc1xuICogdGhlIG5hbWUgb2YgdGhlIG1ldGhvZCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIHRoaXMgZnVuY3Rpb24uIElmXG4gKiB5b3UgZG8gbm90LCB5b3Ugd2lsbCBnZXQgYSBydW50aW1lIGVycm9yLiBUaGlzIGNhbGxzIHRoZSBzdXBlcmNsYXNzJ1xuICogbWV0aG9kIHdpdGggYXJndW1lbnRzIDItTi5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIG9ubHkgd29ya3MgaWYgeW91IHVzZSBnb29nLmluaGVyaXRzIHRvIGV4cHJlc3NcbiAqIGluaGVyaXRhbmNlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB5b3VyIGNsYXNzZXMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBpcyBhIGNvbXBpbGVyIHByaW1pdGl2ZS4gQXQgY29tcGlsZS10aW1lLCB0aGVcbiAqIGNvbXBpbGVyIHdpbGwgZG8gbWFjcm8gZXhwYW5zaW9uIHRvIHJlbW92ZSBhIGxvdCBvZlxuICogdGhlIGV4dHJhIG92ZXJoZWFkIHRoYXQgdGhpcyBmdW5jdGlvbiBpbnRyb2R1Y2VzLiBUaGUgY29tcGlsZXJcbiAqIHdpbGwgYWxzbyBlbmZvcmNlIGEgbG90IG9mIHRoZSBhc3N1bXB0aW9ucyB0aGF0IHRoaXMgZnVuY3Rpb25cbiAqIG1ha2VzLCBhbmQgdHJlYXQgaXQgYXMgYSBjb21waWxlciBlcnJvciBpZiB5b3UgYnJlYWsgdGhlbS5cbiAqXG4gKiBAcGFyYW0geyFPYmplY3R9IG1lIFNob3VsZCBhbHdheXMgYmUgXCJ0aGlzXCIuXG4gKiBAcGFyYW0geyo9fSBvcHRfbWV0aG9kTmFtZSBUaGUgbWV0aG9kIG5hbWUgaWYgY2FsbGluZyBhIHN1cGVyIG1ldGhvZC5cbiAqIEBwYXJhbSB7Li4uKn0gdmFyX2FyZ3MgVGhlIHJlc3Qgb2YgdGhlIGFyZ3VtZW50cy5cbiAqIEByZXR1cm4geyp9IFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHN1cGVyY2xhc3MgbWV0aG9kLlxuICovXG5nb29nLmJhc2UgPSBmdW5jdGlvbihtZSwgb3B0X21ldGhvZE5hbWUsIHZhcl9hcmdzKSB7XG4gIHZhciBjYWxsZXIgPSBhcmd1bWVudHMuY2FsbGVlLmNhbGxlcjtcbiAgaWYgKGNhbGxlci5zdXBlckNsYXNzXykge1xuICAgIC8vIFRoaXMgaXMgYSBjb25zdHJ1Y3Rvci4gQ2FsbCB0aGUgc3VwZXJjbGFzcyBjb25zdHJ1Y3Rvci5cbiAgICByZXR1cm4gY2FsbGVyLnN1cGVyQ2xhc3NfLmNvbnN0cnVjdG9yLmFwcGx5KFxuICAgICAgICBtZSwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG4gIH1cblxuICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7XG4gIHZhciBmb3VuZENhbGxlciA9IGZhbHNlO1xuICBmb3IgKHZhciBjdG9yID0gbWUuY29uc3RydWN0b3I7XG4gICAgICAgY3RvcjsgY3RvciA9IGN0b3Iuc3VwZXJDbGFzc18gJiYgY3Rvci5zdXBlckNsYXNzXy5jb25zdHJ1Y3Rvcikge1xuICAgIGlmIChjdG9yLnByb3RvdHlwZVtvcHRfbWV0aG9kTmFtZV0gPT09IGNhbGxlcikge1xuICAgICAgZm91bmRDYWxsZXIgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoZm91bmRDYWxsZXIpIHtcbiAgICAgIHJldHVybiBjdG9yLnByb3RvdHlwZVtvcHRfbWV0aG9kTmFtZV0uYXBwbHkobWUsIGFyZ3MpO1xuICAgIH1cbiAgfVxuXG4gIC8vIElmIHdlIGRpZCBub3QgZmluZCB0aGUgY2FsbGVyIGluIHRoZSBwcm90b3R5cGUgY2hhaW4sXG4gIC8vIHRoZW4gb25lIG9mIHR3byB0aGluZ3MgaGFwcGVuZWQ6XG4gIC8vIDEpIFRoZSBjYWxsZXIgaXMgYW4gaW5zdGFuY2UgbWV0aG9kLlxuICAvLyAyKSBUaGlzIG1ldGhvZCB3YXMgbm90IGNhbGxlZCBieSB0aGUgcmlnaHQgY2FsbGVyLlxuICBpZiAobWVbb3B0X21ldGhvZE5hbWVdID09PSBjYWxsZXIpIHtcbiAgICByZXR1cm4gbWUuY29uc3RydWN0b3IucHJvdG90eXBlW29wdF9tZXRob2ROYW1lXS5hcHBseShtZSwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdnb29nLmJhc2UgY2FsbGVkIGZyb20gYSBtZXRob2Qgb2Ygb25lIG5hbWUgJyArXG4gICAgICAgICd0byBhIG1ldGhvZCBvZiBhIGRpZmZlcmVudCBuYW1lJyk7XG4gIH1cbn07XG5cblxuLyoqXG4gKiBBbGxvdyBmb3IgYWxpYXNpbmcgd2l0aGluIHNjb3BlIGZ1bmN0aW9ucy4gIFRoaXMgZnVuY3Rpb24gZXhpc3RzIGZvclxuICogdW5jb21waWxlZCBjb2RlIC0gaW4gY29tcGlsZWQgY29kZSB0aGUgY2FsbHMgd2lsbCBiZSBpbmxpbmVkIGFuZCB0aGVcbiAqIGFsaWFzZXMgYXBwbGllZC4gIEluIHVuY29tcGlsZWQgY29kZSB0aGUgZnVuY3Rpb24gaXMgc2ltcGx5IHJ1biBzaW5jZSB0aGVcbiAqIGFsaWFzZXMgYXMgd3JpdHRlbiBhcmUgdmFsaWQgSmF2YVNjcmlwdC5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gZm4gRnVuY3Rpb24gdG8gY2FsbC4gIFRoaXMgZnVuY3Rpb24gY2FuIGNvbnRhaW4gYWxpYXNlc1xuICogICAgIHRvIG5hbWVzcGFjZXMgKGUuZy4gXCJ2YXIgZG9tID0gZ29vZy5kb21cIikgb3IgY2xhc3Nlc1xuICogICAgKGUuZy4gXCJ2YXIgVGltZXIgPSBnb29nLlRpbWVyXCIpLlxuICovXG5nb29nLnNjb3BlID0gZnVuY3Rpb24oZm4pIHtcbiAgZm4uY2FsbChnb29nLmdsb2JhbCk7XG59O1xuXG5cbiIsIi8qKlxuICogZGVmaW5lc1xuICovXG5cbmdvb2cucHJvdmlkZSgnVVNFX1RZUEVEQVJSQVknKTtcblxuLy8gU2FmYXJpIOOBjCB0eXBlb2YgVWludDhBcnJheSA9PT0gJ29iamVjdCcg44Gr44Gq44KL44Gf44KB44CBXG4vLyDmnKrlrprnvqnjgYvlkKbjgYvjgacgVHlwZWQgQXJyYXkg44Gu5L2/55So44KS5rG65a6a44GZ44KLXG5cbi8qKiBAY29uc3Qge2Jvb2xlYW59IHVzZSB0eXBlZCBhcnJheSBmbGFnLiAqL1xudmFyIFVTRV9UWVBFREFSUkFZID1cbiAgKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJykgJiZcbiAgKHR5cGVvZiBVaW50MTZBcnJheSAhPT0gJ3VuZGVmaW5lZCcpICYmXG4gICh0eXBlb2YgVWludDMyQXJyYXkgIT09ICd1bmRlZmluZWQnKSAmJlxuICAodHlwZW9mIERhdGFWaWV3ICE9PSAndW5kZWZpbmVkJyk7XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgYml0IOWNmOS9jeOBp+OBruabuOOBjei+vOOBv+Wun+ijhS5cbiAqL1xuZ29vZy5wcm92aWRlKCdabGliLkJpdFN0cmVhbScpO1xuXG5nb29nLnJlcXVpcmUoJ1VTRV9UWVBFREFSUkFZJyk7XG5cbmdvb2cuc2NvcGUoZnVuY3Rpb24oKSB7XG5cbi8qKlxuICog44OT44OD44OI44K544OI44Oq44O844OgXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7IShBcnJheXxVaW50OEFycmF5KT19IGJ1ZmZlciBvdXRwdXQgYnVmZmVyLlxuICogQHBhcmFtIHtudW1iZXI9fSBidWZmZXJQb3NpdGlvbiBzdGFydCBidWZmZXIgcG9pbnRlci5cbiAqL1xuWmxpYi5CaXRTdHJlYW0gPSBmdW5jdGlvbihidWZmZXIsIGJ1ZmZlclBvc2l0aW9uKSB7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBidWZmZXIgaW5kZXguICovXG4gIHRoaXMuaW5kZXggPSB0eXBlb2YgYnVmZmVyUG9zaXRpb24gPT09ICdudW1iZXInID8gYnVmZmVyUG9zaXRpb24gOiAwO1xuICAvKiogQHR5cGUge251bWJlcn0gYml0IGluZGV4LiAqL1xuICB0aGlzLmJpdGluZGV4ID0gMDtcbiAgLyoqIEB0eXBlIHshKEFycmF5fFVpbnQ4QXJyYXkpfSBiaXQtc3RyZWFtIG91dHB1dCBidWZmZXIuICovXG4gIHRoaXMuYnVmZmVyID0gYnVmZmVyIGluc3RhbmNlb2YgKFVTRV9UWVBFREFSUkFZID8gVWludDhBcnJheSA6IEFycmF5KSA/XG4gICAgYnVmZmVyIDpcbiAgICBuZXcgKFVTRV9UWVBFREFSUkFZID8gVWludDhBcnJheSA6IEFycmF5KShabGliLkJpdFN0cmVhbS5EZWZhdWx0QmxvY2tTaXplKTtcblxuICAvLyDlhaXlipvjgZXjgozjgZ8gaW5kZXgg44GM6Laz44KK44Gq44GL44Gj44Gf44KJ5ouh5by144GZ44KL44GM44CB5YCN44Gr44GX44Gm44KC44OA44Oh44Gq44KJ5LiN5q2j44Go44GZ44KLXG4gIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggKiAyIDw9IHRoaXMuaW5kZXgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGluZGV4XCIpO1xuICB9IGVsc2UgaWYgKHRoaXMuYnVmZmVyLmxlbmd0aCA8PSB0aGlzLmluZGV4KSB7XG4gICAgdGhpcy5leHBhbmRCdWZmZXIoKTtcbiAgfVxufTtcblxuLyoqXG4gKiDjg4fjg5Xjgqnjg6vjg4jjg5bjg63jg4Pjgq/jgrXjgqTjgrouXG4gKiBAY29uc3RcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblpsaWIuQml0U3RyZWFtLkRlZmF1bHRCbG9ja1NpemUgPSAweDgwMDA7XG5cbi8qKlxuICogZXhwYW5kIGJ1ZmZlci5cbiAqIEByZXR1cm4geyEoQXJyYXl8VWludDhBcnJheSl9IG5ldyBidWZmZXIuXG4gKi9cblpsaWIuQml0U3RyZWFtLnByb3RvdHlwZS5leHBhbmRCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgLyoqIEB0eXBlIHshKEFycmF5fFVpbnQ4QXJyYXkpfSBvbGQgYnVmZmVyLiAqL1xuICB2YXIgb2xkYnVmID0gdGhpcy5idWZmZXI7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBsb29wIGNvdW50ZXIuICovXG4gIHZhciBpO1xuICAvKiogQHR5cGUge251bWJlcn0gbG9vcCBsaW1pdGVyLiAqL1xuICB2YXIgaWwgPSBvbGRidWYubGVuZ3RoO1xuICAvKiogQHR5cGUgeyEoQXJyYXl8VWludDhBcnJheSl9IG5ldyBidWZmZXIuICovXG4gIHZhciBidWZmZXIgPVxuICAgIG5ldyAoVVNFX1RZUEVEQVJSQVkgPyBVaW50OEFycmF5IDogQXJyYXkpKGlsIDw8IDEpO1xuXG4gIC8vIGNvcHkgYnVmZmVyXG4gIGlmIChVU0VfVFlQRURBUlJBWSkge1xuICAgIGJ1ZmZlci5zZXQob2xkYnVmKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBYWFg6IGxvb3AgdW5yb2xsaW5nXG4gICAgZm9yIChpID0gMDsgaSA8IGlsOyArK2kpIHtcbiAgICAgIGJ1ZmZlcltpXSA9IG9sZGJ1ZltpXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKHRoaXMuYnVmZmVyID0gYnVmZmVyKTtcbn07XG5cblxuLyoqXG4gKiDmlbDlgKTjgpLjg5Pjg4Pjg4jjgafmjIflrprjgZfjgZ/mlbDjgaDjgZHmm7jjgY3ovrzjgoAuXG4gKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyIOabuOOBjei+vOOCgOaVsOWApC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBuIOabuOOBjei+vOOCgOODk+ODg+ODiOaVsC5cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHJldmVyc2Ug6YCG6aCG44Gr5pu444GN6L6844KA44Gq44KJ44GwIHRydWUuXG4gKi9cblpsaWIuQml0U3RyZWFtLnByb3RvdHlwZS53cml0ZUJpdHMgPSBmdW5jdGlvbihudW1iZXIsIG4sIHJldmVyc2UpIHtcbiAgdmFyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyO1xuICB2YXIgaW5kZXggPSB0aGlzLmluZGV4O1xuICB2YXIgYml0aW5kZXggPSB0aGlzLmJpdGluZGV4O1xuXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBjdXJyZW50IG9jdGV0LiAqL1xuICB2YXIgY3VycmVudCA9IGJ1ZmZlcltpbmRleF07XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBsb29wIGNvdW50ZXIuICovXG4gIHZhciBpO1xuXG4gIC8qKlxuICAgKiAzMi1iaXQg5pW05pWw44Gu44OT44OD44OI6aCG44KS6YCG44Gr44GZ44KLXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBuIDMyLWJpdCBpbnRlZ2VyLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IHJldmVyc2VkIDMyLWJpdCBpbnRlZ2VyLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gcmV2MzJfKG4pIHtcbiAgICByZXR1cm4gKFpsaWIuQml0U3RyZWFtLlJldmVyc2VUYWJsZVtuICYgMHhGRl0gPDwgMjQpIHxcbiAgICAgIChabGliLkJpdFN0cmVhbS5SZXZlcnNlVGFibGVbbiA+Pj4gOCAmIDB4RkZdIDw8IDE2KSB8XG4gICAgICAoWmxpYi5CaXRTdHJlYW0uUmV2ZXJzZVRhYmxlW24gPj4+IDE2ICYgMHhGRl0gPDwgOCkgfFxuICAgICAgWmxpYi5CaXRTdHJlYW0uUmV2ZXJzZVRhYmxlW24gPj4+IDI0ICYgMHhGRl07XG4gIH1cblxuICBpZiAocmV2ZXJzZSAmJiBuID4gMSkge1xuICAgIG51bWJlciA9IG4gPiA4ID9cbiAgICAgIHJldjMyXyhudW1iZXIpID4+ICgzMiAtIG4pIDpcbiAgICAgIFpsaWIuQml0U3RyZWFtLlJldmVyc2VUYWJsZVtudW1iZXJdID4+ICg4IC0gbik7XG4gIH1cblxuICAvLyBCeXRlIOWig+eVjOOCkui2heOBiOOBquOBhOOBqOOBjVxuICBpZiAobiArIGJpdGluZGV4IDwgOCkge1xuICAgIGN1cnJlbnQgPSAoY3VycmVudCA8PCBuKSB8IG51bWJlcjtcbiAgICBiaXRpbmRleCArPSBuO1xuICAvLyBCeXRlIOWig+eVjOOCkui2heOBiOOCi+OBqOOBjVxuICB9IGVsc2Uge1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGN1cnJlbnQgPSAoY3VycmVudCA8PCAxKSB8ICgobnVtYmVyID4+IG4gLSBpIC0gMSkgJiAxKTtcblxuICAgICAgLy8gbmV4dCBieXRlXG4gICAgICBpZiAoKytiaXRpbmRleCA9PT0gOCkge1xuICAgICAgICBiaXRpbmRleCA9IDA7XG4gICAgICAgIGJ1ZmZlcltpbmRleCsrXSA9IFpsaWIuQml0U3RyZWFtLlJldmVyc2VUYWJsZVtjdXJyZW50XTtcbiAgICAgICAgY3VycmVudCA9IDA7XG5cbiAgICAgICAgLy8gZXhwYW5kXG4gICAgICAgIGlmIChpbmRleCA9PT0gYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgIGJ1ZmZlciA9IHRoaXMuZXhwYW5kQnVmZmVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgYnVmZmVyW2luZGV4XSA9IGN1cnJlbnQ7XG5cbiAgdGhpcy5idWZmZXIgPSBidWZmZXI7XG4gIHRoaXMuYml0aW5kZXggPSBiaXRpbmRleDtcbiAgdGhpcy5pbmRleCA9IGluZGV4O1xufTtcblxuXG4vKipcbiAqIOOCueODiOODquODvOODoOOBrue1guerr+WHpueQhuOCkuihjOOBhlxuICogQHJldHVybiB7IShBcnJheXxVaW50OEFycmF5KX0g57WC56uv5Yem55CG5b6M44Gu44OQ44OD44OV44Kh44KSIGJ5dGUgYXJyYXkg44Gn6L+U44GZLlxuICovXG5abGliLkJpdFN0cmVhbS5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24oKSB7XG4gIHZhciBidWZmZXIgPSB0aGlzLmJ1ZmZlcjtcbiAgdmFyIGluZGV4ID0gdGhpcy5pbmRleDtcblxuICAvKiogQHR5cGUgeyEoQXJyYXl8VWludDhBcnJheSl9IG91dHB1dCBidWZmZXIuICovXG4gIHZhciBvdXRwdXQ7XG5cbiAgLy8gYml0aW5kZXgg44GMIDAg44Gu5pmC44Gv5L2Z5YiG44GrIGluZGV4IOOBjOmAsuOCk+OBp+OBhOOCi+eKtuaFi1xuICBpZiAodGhpcy5iaXRpbmRleCA+IDApIHtcbiAgICBidWZmZXJbaW5kZXhdIDw8PSA4IC0gdGhpcy5iaXRpbmRleDtcbiAgICBidWZmZXJbaW5kZXhdID0gWmxpYi5CaXRTdHJlYW0uUmV2ZXJzZVRhYmxlW2J1ZmZlcltpbmRleF1dO1xuICAgIGluZGV4Kys7XG4gIH1cblxuICAvLyBhcnJheSB0cnVuY2F0aW9uXG4gIGlmIChVU0VfVFlQRURBUlJBWSkge1xuICAgIG91dHB1dCA9IGJ1ZmZlci5zdWJhcnJheSgwLCBpbmRleCk7XG4gIH0gZWxzZSB7XG4gICAgYnVmZmVyLmxlbmd0aCA9IGluZGV4O1xuICAgIG91dHB1dCA9IGJ1ZmZlcjtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG4vKipcbiAqIDAtMjU1IOOBruODk+ODg+ODiOmghuOCkuWPjei7ouOBl+OBn+ODhuODvOODluODq1xuICogQGNvbnN0XG4gKiBAdHlwZSB7IShVaW50OEFycmF5fEFycmF5LjxudW1iZXI+KX1cbiAqL1xuWmxpYi5CaXRTdHJlYW0uUmV2ZXJzZVRhYmxlID0gKGZ1bmN0aW9uKHRhYmxlKSB7XG4gIHJldHVybiB0YWJsZTtcbn0pKChmdW5jdGlvbigpIHtcbiAgLyoqIEB0eXBlIHshKEFycmF5fFVpbnQ4QXJyYXkpfSByZXZlcnNlIHRhYmxlLiAqL1xuICB2YXIgdGFibGUgPSBuZXcgKFVTRV9UWVBFREFSUkFZID8gVWludDhBcnJheSA6IEFycmF5KSgyNTYpO1xuICAvKiogQHR5cGUge251bWJlcn0gbG9vcCBjb3VudGVyLiAqL1xuICB2YXIgaTtcblxuICAvLyBnZW5lcmF0ZVxuICBmb3IgKGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgICB0YWJsZVtpXSA9IChmdW5jdGlvbihuKSB7XG4gICAgICB2YXIgciA9IG47XG4gICAgICB2YXIgcyA9IDc7XG5cbiAgICAgIGZvciAobiA+Pj49IDE7IG47IG4gPj4+PSAxKSB7XG4gICAgICAgIHIgPDw9IDE7XG4gICAgICAgIHIgfD0gbiAmIDE7XG4gICAgICAgIC0tcztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChyIDw8IHMgJiAweGZmKSA+Pj4gMDtcbiAgICB9KShpKTtcbiAgfVxuXG4gIHJldHVybiB0YWJsZTtcbn0pKCkpO1xuXG5cbi8vIGVuZCBvZiBzY29wZVxufSk7XG5cbi8qIHZpbTpzZXQgZXhwYW5kdGFiIHRzPTIgc3c9MiB0dz04MDogKi9cbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBDUkMzMiDlrp/oo4UuXG4gKi9cbmdvb2cucHJvdmlkZSgnWmxpYi5DUkMzMicpO1xuXG5nb29nLnJlcXVpcmUoJ1VTRV9UWVBFREFSUkFZJyk7XG5cbi8qKiBAZGVmaW5lIHtib29sZWFufSAqL1xudmFyIFpMSUJfQ1JDMzJfQ09NUEFDVCA9IGZhbHNlO1xuXG5nb29nLnNjb3BlKGZ1bmN0aW9uKCkge1xuXG4vKipcbiAqIENSQzMyIOODj+ODg+OCt+ODpeWApOOCkuWPluW+l1xuICogQHBhcmFtIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBkYXRhIGRhdGEgYnl0ZSBhcnJheS5cbiAqIEBwYXJhbSB7bnVtYmVyPX0gcG9zIGRhdGEgcG9zaXRpb24uXG4gKiBAcGFyYW0ge251bWJlcj19IGxlbmd0aCBkYXRhIGxlbmd0aC5cbiAqIEByZXR1cm4ge251bWJlcn0gQ1JDMzIuXG4gKi9cblpsaWIuQ1JDMzIuY2FsYyA9IGZ1bmN0aW9uKGRhdGEsIHBvcywgbGVuZ3RoKSB7XG4gIHJldHVybiBabGliLkNSQzMyLnVwZGF0ZShkYXRhLCAwLCBwb3MsIGxlbmd0aCk7XG59O1xuXG4vKipcbiAqIENSQzMy44OP44OD44K344Ol5YCk44KS5pu05pawXG4gKiBAcGFyYW0geyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IGRhdGEgZGF0YSBieXRlIGFycmF5LlxuICogQHBhcmFtIHtudW1iZXJ9IGNyYyBDUkMzMi5cbiAqIEBwYXJhbSB7bnVtYmVyPX0gcG9zIGRhdGEgcG9zaXRpb24uXG4gKiBAcGFyYW0ge251bWJlcj19IGxlbmd0aCBkYXRhIGxlbmd0aC5cbiAqIEByZXR1cm4ge251bWJlcn0gQ1JDMzIuXG4gKi9cblpsaWIuQ1JDMzIudXBkYXRlID0gZnVuY3Rpb24oZGF0YSwgY3JjLCBwb3MsIGxlbmd0aCkge1xuICB2YXIgdGFibGUgPSBabGliLkNSQzMyLlRhYmxlO1xuICB2YXIgaSA9ICh0eXBlb2YgcG9zID09PSAnbnVtYmVyJykgPyBwb3MgOiAocG9zID0gMCk7XG4gIHZhciBpbCA9ICh0eXBlb2YgbGVuZ3RoID09PSAnbnVtYmVyJykgPyBsZW5ndGggOiBkYXRhLmxlbmd0aDtcblxuICBjcmMgXj0gMHhmZmZmZmZmZjtcblxuICAvLyBsb29wIHVucm9sbGluZyBmb3IgcGVyZm9ybWFuY2VcbiAgZm9yIChpID0gaWwgJiA3OyBpLS07ICsrcG9zKSB7XG4gICAgY3JjID0gKGNyYyA+Pj4gOCkgXiB0YWJsZVsoY3JjIF4gZGF0YVtwb3NdKSAmIDB4ZmZdO1xuICB9XG4gIGZvciAoaSA9IGlsID4+IDM7IGktLTsgcG9zICs9IDgpIHtcbiAgICBjcmMgPSAoY3JjID4+PiA4KSBeIHRhYmxlWyhjcmMgXiBkYXRhW3BvcyAgICBdKSAmIDB4ZmZdO1xuICAgIGNyYyA9IChjcmMgPj4+IDgpIF4gdGFibGVbKGNyYyBeIGRhdGFbcG9zICsgMV0pICYgMHhmZl07XG4gICAgY3JjID0gKGNyYyA+Pj4gOCkgXiB0YWJsZVsoY3JjIF4gZGF0YVtwb3MgKyAyXSkgJiAweGZmXTtcbiAgICBjcmMgPSAoY3JjID4+PiA4KSBeIHRhYmxlWyhjcmMgXiBkYXRhW3BvcyArIDNdKSAmIDB4ZmZdO1xuICAgIGNyYyA9IChjcmMgPj4+IDgpIF4gdGFibGVbKGNyYyBeIGRhdGFbcG9zICsgNF0pICYgMHhmZl07XG4gICAgY3JjID0gKGNyYyA+Pj4gOCkgXiB0YWJsZVsoY3JjIF4gZGF0YVtwb3MgKyA1XSkgJiAweGZmXTtcbiAgICBjcmMgPSAoY3JjID4+PiA4KSBeIHRhYmxlWyhjcmMgXiBkYXRhW3BvcyArIDZdKSAmIDB4ZmZdO1xuICAgIGNyYyA9IChjcmMgPj4+IDgpIF4gdGFibGVbKGNyYyBeIGRhdGFbcG9zICsgN10pICYgMHhmZl07XG4gIH1cblxuICByZXR1cm4gKGNyYyBeIDB4ZmZmZmZmZmYpID4+PiAwO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gbnVtXG4gKiBAcGFyYW0ge251bWJlcn0gY3JjXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5abGliLkNSQzMyLnNpbmdsZSA9IGZ1bmN0aW9uKG51bSwgY3JjKSB7XG4gIHJldHVybiAoWmxpYi5DUkMzMi5UYWJsZVsobnVtIF4gY3JjKSAmIDB4ZmZdIF4gKG51bSA+Pj4gOCkpID4+PiAwO1xufTtcblxuLyoqXG4gKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59XG4gKiBAY29uc3RcbiAqIEBwcml2YXRlXG4gKi9cblpsaWIuQ1JDMzIuVGFibGVfID0gW1xuICAweDAwMDAwMDAwLCAweDc3MDczMDk2LCAweGVlMGU2MTJjLCAweDk5MDk1MWJhLCAweDA3NmRjNDE5LCAweDcwNmFmNDhmLFxuICAweGU5NjNhNTM1LCAweDllNjQ5NWEzLCAweDBlZGI4ODMyLCAweDc5ZGNiOGE0LCAweGUwZDVlOTFlLCAweDk3ZDJkOTg4LFxuICAweDA5YjY0YzJiLCAweDdlYjE3Y2JkLCAweGU3YjgyZDA3LCAweDkwYmYxZDkxLCAweDFkYjcxMDY0LCAweDZhYjAyMGYyLFxuICAweGYzYjk3MTQ4LCAweDg0YmU0MWRlLCAweDFhZGFkNDdkLCAweDZkZGRlNGViLCAweGY0ZDRiNTUxLCAweDgzZDM4NWM3LFxuICAweDEzNmM5ODU2LCAweDY0NmJhOGMwLCAweGZkNjJmOTdhLCAweDhhNjVjOWVjLCAweDE0MDE1YzRmLCAweDYzMDY2Y2Q5LFxuICAweGZhMGYzZDYzLCAweDhkMDgwZGY1LCAweDNiNmUyMGM4LCAweDRjNjkxMDVlLCAweGQ1NjA0MWU0LCAweGEyNjc3MTcyLFxuICAweDNjMDNlNGQxLCAweDRiMDRkNDQ3LCAweGQyMGQ4NWZkLCAweGE1MGFiNTZiLCAweDM1YjVhOGZhLCAweDQyYjI5ODZjLFxuICAweGRiYmJjOWQ2LCAweGFjYmNmOTQwLCAweDMyZDg2Y2UzLCAweDQ1ZGY1Yzc1LCAweGRjZDYwZGNmLCAweGFiZDEzZDU5LFxuICAweDI2ZDkzMGFjLCAweDUxZGUwMDNhLCAweGM4ZDc1MTgwLCAweGJmZDA2MTE2LCAweDIxYjRmNGI1LCAweDU2YjNjNDIzLFxuICAweGNmYmE5NTk5LCAweGI4YmRhNTBmLCAweDI4MDJiODllLCAweDVmMDU4ODA4LCAweGM2MGNkOWIyLCAweGIxMGJlOTI0LFxuICAweDJmNmY3Yzg3LCAweDU4Njg0YzExLCAweGMxNjExZGFiLCAweGI2NjYyZDNkLCAweDc2ZGM0MTkwLCAweDAxZGI3MTA2LFxuICAweDk4ZDIyMGJjLCAweGVmZDUxMDJhLCAweDcxYjE4NTg5LCAweDA2YjZiNTFmLCAweDlmYmZlNGE1LCAweGU4YjhkNDMzLFxuICAweDc4MDdjOWEyLCAweDBmMDBmOTM0LCAweDk2MDlhODhlLCAweGUxMGU5ODE4LCAweDdmNmEwZGJiLCAweDA4NmQzZDJkLFxuICAweDkxNjQ2Yzk3LCAweGU2NjM1YzAxLCAweDZiNmI1MWY0LCAweDFjNmM2MTYyLCAweDg1NjUzMGQ4LCAweGYyNjIwMDRlLFxuICAweDZjMDY5NWVkLCAweDFiMDFhNTdiLCAweDgyMDhmNGMxLCAweGY1MGZjNDU3LCAweDY1YjBkOWM2LCAweDEyYjdlOTUwLFxuICAweDhiYmViOGVhLCAweGZjYjk4ODdjLCAweDYyZGQxZGRmLCAweDE1ZGEyZDQ5LCAweDhjZDM3Y2YzLCAweGZiZDQ0YzY1LFxuICAweDRkYjI2MTU4LCAweDNhYjU1MWNlLCAweGEzYmMwMDc0LCAweGQ0YmIzMGUyLCAweDRhZGZhNTQxLCAweDNkZDg5NWQ3LFxuICAweGE0ZDFjNDZkLCAweGQzZDZmNGZiLCAweDQzNjllOTZhLCAweDM0NmVkOWZjLCAweGFkNjc4ODQ2LCAweGRhNjBiOGQwLFxuICAweDQ0MDQyZDczLCAweDMzMDMxZGU1LCAweGFhMGE0YzVmLCAweGRkMGQ3Y2M5LCAweDUwMDU3MTNjLCAweDI3MDI0MWFhLFxuICAweGJlMGIxMDEwLCAweGM5MGMyMDg2LCAweDU3NjhiNTI1LCAweDIwNmY4NWIzLCAweGI5NjZkNDA5LCAweGNlNjFlNDlmLFxuICAweDVlZGVmOTBlLCAweDI5ZDljOTk4LCAweGIwZDA5ODIyLCAweGM3ZDdhOGI0LCAweDU5YjMzZDE3LCAweDJlYjQwZDgxLFxuICAweGI3YmQ1YzNiLCAweGMwYmE2Y2FkLCAweGVkYjg4MzIwLCAweDlhYmZiM2I2LCAweDAzYjZlMjBjLCAweDc0YjFkMjlhLFxuICAweGVhZDU0NzM5LCAweDlkZDI3N2FmLCAweDA0ZGIyNjE1LCAweDczZGMxNjgzLCAweGUzNjMwYjEyLCAweDk0NjQzYjg0LFxuICAweDBkNmQ2YTNlLCAweDdhNmE1YWE4LCAweGU0MGVjZjBiLCAweDkzMDlmZjlkLCAweDBhMDBhZTI3LCAweDdkMDc5ZWIxLFxuICAweGYwMGY5MzQ0LCAweDg3MDhhM2QyLCAweDFlMDFmMjY4LCAweDY5MDZjMmZlLCAweGY3NjI1NzVkLCAweDgwNjU2N2NiLFxuICAweDE5NmMzNjcxLCAweDZlNmIwNmU3LCAweGZlZDQxYjc2LCAweDg5ZDMyYmUwLCAweDEwZGE3YTVhLCAweDY3ZGQ0YWNjLFxuICAweGY5YjlkZjZmLCAweDhlYmVlZmY5LCAweDE3YjdiZTQzLCAweDYwYjA4ZWQ1LCAweGQ2ZDZhM2U4LCAweGExZDE5MzdlLFxuICAweDM4ZDhjMmM0LCAweDRmZGZmMjUyLCAweGQxYmI2N2YxLCAweGE2YmM1NzY3LCAweDNmYjUwNmRkLCAweDQ4YjIzNjRiLFxuICAweGQ4MGQyYmRhLCAweGFmMGExYjRjLCAweDM2MDM0YWY2LCAweDQxMDQ3YTYwLCAweGRmNjBlZmMzLCAweGE4NjdkZjU1LFxuICAweDMxNmU4ZWVmLCAweDQ2NjliZTc5LCAweGNiNjFiMzhjLCAweGJjNjY4MzFhLCAweDI1NmZkMmEwLCAweDUyNjhlMjM2LFxuICAweGNjMGM3Nzk1LCAweGJiMGI0NzAzLCAweDIyMDIxNmI5LCAweDU1MDUyNjJmLCAweGM1YmEzYmJlLCAweGIyYmQwYjI4LFxuICAweDJiYjQ1YTkyLCAweDVjYjM2YTA0LCAweGMyZDdmZmE3LCAweGI1ZDBjZjMxLCAweDJjZDk5ZThiLCAweDViZGVhZTFkLFxuICAweDliNjRjMmIwLCAweGVjNjNmMjI2LCAweDc1NmFhMzljLCAweDAyNmQ5MzBhLCAweDljMDkwNmE5LCAweGViMGUzNjNmLFxuICAweDcyMDc2Nzg1LCAweDA1MDA1NzEzLCAweDk1YmY0YTgyLCAweGUyYjg3YTE0LCAweDdiYjEyYmFlLCAweDBjYjYxYjM4LFxuICAweDkyZDI4ZTliLCAweGU1ZDViZTBkLCAweDdjZGNlZmI3LCAweDBiZGJkZjIxLCAweDg2ZDNkMmQ0LCAweGYxZDRlMjQyLFxuICAweDY4ZGRiM2Y4LCAweDFmZGE4MzZlLCAweDgxYmUxNmNkLCAweGY2YjkyNjViLCAweDZmYjA3N2UxLCAweDE4Yjc0Nzc3LFxuICAweDg4MDg1YWU2LCAweGZmMGY2YTcwLCAweDY2MDYzYmNhLCAweDExMDEwYjVjLCAweDhmNjU5ZWZmLCAweGY4NjJhZTY5LFxuICAweDYxNmJmZmQzLCAweDE2NmNjZjQ1LCAweGEwMGFlMjc4LCAweGQ3MGRkMmVlLCAweDRlMDQ4MzU0LCAweDM5MDNiM2MyLFxuICAweGE3NjcyNjYxLCAweGQwNjAxNmY3LCAweDQ5Njk0NzRkLCAweDNlNmU3N2RiLCAweGFlZDE2YTRhLCAweGQ5ZDY1YWRjLFxuICAweDQwZGYwYjY2LCAweDM3ZDgzYmYwLCAweGE5YmNhZTUzLCAweGRlYmI5ZWM1LCAweDQ3YjJjZjdmLCAweDMwYjVmZmU5LFxuICAweGJkYmRmMjFjLCAweGNhYmFjMjhhLCAweDUzYjM5MzMwLCAweDI0YjRhM2E2LCAweGJhZDAzNjA1LCAweGNkZDcwNjkzLFxuICAweDU0ZGU1NzI5LCAweDIzZDk2N2JmLCAweGIzNjY3YTJlLCAweGM0NjE0YWI4LCAweDVkNjgxYjAyLCAweDJhNmYyYjk0LFxuICAweGI0MGJiZTM3LCAweGMzMGM4ZWExLCAweDVhMDVkZjFiLCAweDJkMDJlZjhkXG5dO1xuXG4vKipcbiAqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQzMkFycmF5KX0gQ1JDLTMyIFRhYmxlLlxuICogQGNvbnN0XG4gKi9cblpsaWIuQ1JDMzIuVGFibGUgPSBaTElCX0NSQzMyX0NPTVBBQ1QgPyAoZnVuY3Rpb24oKSB7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50MzJBcnJheSl9ICovXG4gIHZhciB0YWJsZSA9IG5ldyAoVVNFX1RZUEVEQVJSQVkgPyBVaW50MzJBcnJheSA6IEFycmF5KSgyNTYpO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGM7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgaTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBqO1xuXG4gIGZvciAoaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgIGMgPSBpO1xuICAgIGZvciAoaiA9IDA7IGogPCA4OyArK2opIHtcbiAgICAgIGMgPSAoYyAmIDEpID8gKDB4ZWRCODgzMjAgXiAoYyA+Pj4gMSkpIDogKGMgPj4+IDEpO1xuICAgIH1cbiAgICB0YWJsZVtpXSA9IGMgPj4+IDA7XG4gIH1cblxuICByZXR1cm4gdGFibGU7XG59KSgpIDogVVNFX1RZUEVEQVJSQVkgPyBuZXcgVWludDMyQXJyYXkoWmxpYi5DUkMzMi5UYWJsZV8pIDogWmxpYi5DUkMzMi5UYWJsZV87XG5cbn0pO1xuIiwiZ29vZy5wcm92aWRlKCdabGliLkh1ZmZtYW4nKTtcblxuZ29vZy5yZXF1aXJlKCdVU0VfVFlQRURBUlJBWScpO1xuXG5nb29nLnNjb3BlKGZ1bmN0aW9uKCkge1xuXG4vKipcbiAqIGJ1aWxkIGh1ZmZtYW4gdGFibGUgZnJvbSBsZW5ndGggbGlzdC5cbiAqIEBwYXJhbSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gbGVuZ3RocyBsZW5ndGggbGlzdC5cbiAqIEByZXR1cm4geyFBcnJheX0gaHVmZm1hbiB0YWJsZS5cbiAqL1xuWmxpYi5IdWZmbWFuLmJ1aWxkSHVmZm1hblRhYmxlID0gZnVuY3Rpb24obGVuZ3Rocykge1xuICAvKiogQHR5cGUge251bWJlcn0gbGVuZ3RoIGxpc3Qgc2l6ZS4gKi9cbiAgdmFyIGxpc3RTaXplID0gbGVuZ3Rocy5sZW5ndGg7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBtYXggY29kZSBsZW5ndGggZm9yIHRhYmxlIHNpemUuICovXG4gIHZhciBtYXhDb2RlTGVuZ3RoID0gMDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IG1pbiBjb2RlIGxlbmd0aCBmb3IgdGFibGUgc2l6ZS4gKi9cbiAgdmFyIG1pbkNvZGVMZW5ndGggPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSB0YWJsZSBzaXplLiAqL1xuICB2YXIgc2l6ZTtcbiAgLyoqIEB0eXBlIHshKEFycmF5fFVpbnQ4QXJyYXkpfSBodWZmbWFuIGNvZGUgdGFibGUuICovXG4gIHZhciB0YWJsZTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGJpdCBsZW5ndGguICovXG4gIHZhciBiaXRMZW5ndGg7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBodWZmbWFuIGNvZGUuICovXG4gIHZhciBjb2RlO1xuICAvKipcbiAgICog44K144Kk44K644GMIDJebWF4bGVuZ3RoIOWAi+OBruODhuODvOODluODq+OCkuWfi+OCgeOCi+OBn+OCgeOBruOCueOCreODg+ODl+mVty5cbiAgICogQHR5cGUge251bWJlcn0gc2tpcCBsZW5ndGggZm9yIHRhYmxlIGZpbGxpbmcuXG4gICAqL1xuICB2YXIgc2tpcDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IHJldmVyc2VkIGNvZGUuICovXG4gIHZhciByZXZlcnNlZDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IHJldmVyc2UgdGVtcC4gKi9cbiAgdmFyIHJ0ZW1wO1xuICAvKiogQHR5cGUge251bWJlcn0gbG9vcCBjb3VudGVyLiAqL1xuICB2YXIgaTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGxvb3AgbGltaXQuICovXG4gIHZhciBpbDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGxvb3AgY291bnRlci4gKi9cbiAgdmFyIGo7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSB0YWJsZSB2YWx1ZS4gKi9cbiAgdmFyIHZhbHVlO1xuXG4gIC8vIE1hdGgubWF4IOOBr+mBheOBhOOBruOBp+acgOmVt+OBruWApOOBryBmb3ItbG9vcCDjgaflj5blvpfjgZnjgotcbiAgZm9yIChpID0gMCwgaWwgPSBsaXN0U2l6ZTsgaSA8IGlsOyArK2kpIHtcbiAgICBpZiAobGVuZ3Roc1tpXSA+IG1heENvZGVMZW5ndGgpIHtcbiAgICAgIG1heENvZGVMZW5ndGggPSBsZW5ndGhzW2ldO1xuICAgIH1cbiAgICBpZiAobGVuZ3Roc1tpXSA8IG1pbkNvZGVMZW5ndGgpIHtcbiAgICAgIG1pbkNvZGVMZW5ndGggPSBsZW5ndGhzW2ldO1xuICAgIH1cbiAgfVxuXG4gIHNpemUgPSAxIDw8IG1heENvZGVMZW5ndGg7XG4gIHRhYmxlID0gbmV3IChVU0VfVFlQRURBUlJBWSA/IFVpbnQzMkFycmF5IDogQXJyYXkpKHNpemUpO1xuXG4gIC8vIOODk+ODg+ODiOmVt+OBruefreOBhOmghuOBi+OCieODj+ODleODnuODs+espuWPt+OCkuWJsuOCiuW9k+OBpuOCi1xuICBmb3IgKGJpdExlbmd0aCA9IDEsIGNvZGUgPSAwLCBza2lwID0gMjsgYml0TGVuZ3RoIDw9IG1heENvZGVMZW5ndGg7KSB7XG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHtcbiAgICAgIGlmIChsZW5ndGhzW2ldID09PSBiaXRMZW5ndGgpIHtcbiAgICAgICAgLy8g44OT44OD44OI44Kq44O844OA44O844GM6YCG44Gr44Gq44KL44Gf44KB44OT44OD44OI6ZW35YiG5Lim44Gz44KS5Y+N6Lui44GZ44KLXG4gICAgICAgIGZvciAocmV2ZXJzZWQgPSAwLCBydGVtcCA9IGNvZGUsIGogPSAwOyBqIDwgYml0TGVuZ3RoOyArK2opIHtcbiAgICAgICAgICByZXZlcnNlZCA9IChyZXZlcnNlZCA8PCAxKSB8IChydGVtcCAmIDEpO1xuICAgICAgICAgIHJ0ZW1wID4+PSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g5pyA5aSn44OT44OD44OI6ZW344KS44KC44Go44Gr44OG44O844OW44Or44KS5L2c44KL44Gf44KB44CBXG4gICAgICAgIC8vIOacgOWkp+ODk+ODg+ODiOmVt+S7peWkluOBp+OBryAwIC8gMSDjganjgaHjgonjgafjgoLoia/jgYTnrofmiYDjgYzjgafjgY3jgotcbiAgICAgICAgLy8g44Gd44Gu44Gp44Gh44KJ44Gn44KC6Imv44GE5aC05omA44Gv5ZCM44GY5YCk44Gn5Z+L44KB44KL44GT44Go44GnXG4gICAgICAgIC8vIOacrOadpeOBruODk+ODg+ODiOmVt+S7peS4iuOBruODk+ODg+ODiOaVsOWPluW+l+OBl+OBpuOCguWVj+mhjOOBjOi1t+OBk+OCieOBquOBhOOCiOOBhuOBq+OBmeOCi1xuICAgICAgICB2YWx1ZSA9IChiaXRMZW5ndGggPDwgMTYpIHwgaTtcbiAgICAgICAgZm9yIChqID0gcmV2ZXJzZWQ7IGogPCBzaXplOyBqICs9IHNraXApIHtcbiAgICAgICAgICB0YWJsZVtqXSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgKytjb2RlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIOasoeOBruODk+ODg+ODiOmVt+OBuFxuICAgICsrYml0TGVuZ3RoO1xuICAgIGNvZGUgPDw9IDE7XG4gICAgc2tpcCA8PD0gMTtcbiAgfVxuXG4gIHJldHVybiBbdGFibGUsIG1heENvZGVMZW5ndGgsIG1pbkNvZGVMZW5ndGhdO1xufTtcblxuXG4vLyBlbmQgb2Ygc2NvcGVcbn0pO1xuXG4vKiB2aW06c2V0IGV4cGFuZHRhYiB0cz0yIHN3PTIgdHc9ODA6ICovXG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgRGVmbGF0ZSAoUkZDMTk1MSkg56ym5Y+35YyW44Ki44Or44K044Oq44K644Og5a6f6KOFLlxuICovXG5cbmdvb2cucHJvdmlkZSgnWmxpYi5SYXdEZWZsYXRlJyk7XG5cbmdvb2cucmVxdWlyZSgnVVNFX1RZUEVEQVJSQVknKTtcbmdvb2cucmVxdWlyZSgnWmxpYi5CaXRTdHJlYW0nKTtcbmdvb2cucmVxdWlyZSgnWmxpYi5IZWFwJyk7XG5cbmdvb2cuc2NvcGUoZnVuY3Rpb24oKSB7XG5cbi8qKlxuICogUmF3IERlZmxhdGUg5a6f6KOFXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0geyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IGlucHV0IOespuWPt+WMluOBmeOCi+WvvuixoeOBruODkOODg+ODleOCoS5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0X3BhcmFtcyBvcHRpb24gcGFyYW1ldGVycy5cbiAqXG4gKiB0eXBlZCBhcnJheSDjgYzkvb/nlKjlj6/og73jgarjgajjgY3jgIFvdXRwdXRCdWZmZXIg44GMIEFycmF5IOOBr+iHquWLleeahOOBqyBVaW50OEFycmF5IOOBq1xuICog5aSJ5o+b44GV44KM44G+44GZLlxuICog5Yil44Gu44Kq44OW44K444Kn44Kv44OI44Gr44Gq44KL44Gf44KB5Ye65Yqb44OQ44OD44OV44Kh44KS5Y+C54Wn44GX44Gm44GE44KL5aSJ5pWw44Gq44Gp44GvXG4gKiDmm7TmlrDjgZnjgovlv4XopoHjgYzjgYLjgorjgb7jgZkuXG4gKi9cblpsaWIuUmF3RGVmbGF0ZSA9IGZ1bmN0aW9uKGlucHV0LCBvcHRfcGFyYW1zKSB7XG4gIC8qKiBAdHlwZSB7WmxpYi5SYXdEZWZsYXRlLkNvbXByZXNzaW9uVHlwZX0gKi9cbiAgdGhpcy5jb21wcmVzc2lvblR5cGUgPSBabGliLlJhd0RlZmxhdGUuQ29tcHJlc3Npb25UeXBlLkRZTkFNSUM7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB0aGlzLmxhenkgPSAwO1xuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDMyQXJyYXkpfSAqL1xuICB0aGlzLmZyZXFzTGl0TGVuO1xuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDMyQXJyYXkpfSAqL1xuICB0aGlzLmZyZXFzRGlzdDtcbiAgLyoqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSAqL1xuICB0aGlzLmlucHV0ID1cbiAgICAoVVNFX1RZUEVEQVJSQVkgJiYgaW5wdXQgaW5zdGFuY2VvZiBBcnJheSkgPyBuZXcgVWludDhBcnJheShpbnB1dCkgOiBpbnB1dDtcbiAgLyoqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBvdXRwdXQgb3V0cHV0IGJ1ZmZlci4gKi9cbiAgdGhpcy5vdXRwdXQ7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBwb3Mgb3V0cHV0IGJ1ZmZlciBwb3NpdGlvbi4gKi9cbiAgdGhpcy5vcCA9IDA7XG5cbiAgLy8gb3B0aW9uIHBhcmFtZXRlcnNcbiAgaWYgKG9wdF9wYXJhbXMpIHtcbiAgICBpZiAob3B0X3BhcmFtc1snbGF6eSddKSB7XG4gICAgICB0aGlzLmxhenkgPSBvcHRfcGFyYW1zWydsYXp5J107XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0X3BhcmFtc1snY29tcHJlc3Npb25UeXBlJ10gPT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLmNvbXByZXNzaW9uVHlwZSA9IG9wdF9wYXJhbXNbJ2NvbXByZXNzaW9uVHlwZSddO1xuICAgIH1cbiAgICBpZiAob3B0X3BhcmFtc1snb3V0cHV0QnVmZmVyJ10pIHtcbiAgICAgIHRoaXMub3V0cHV0ID1cbiAgICAgICAgKFVTRV9UWVBFREFSUkFZICYmIG9wdF9wYXJhbXNbJ291dHB1dEJ1ZmZlciddIGluc3RhbmNlb2YgQXJyYXkpID9cbiAgICAgICAgbmV3IFVpbnQ4QXJyYXkob3B0X3BhcmFtc1snb3V0cHV0QnVmZmVyJ10pIDogb3B0X3BhcmFtc1snb3V0cHV0QnVmZmVyJ107XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0X3BhcmFtc1snb3V0cHV0SW5kZXgnXSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRoaXMub3AgPSBvcHRfcGFyYW1zWydvdXRwdXRJbmRleCddO1xuICAgIH1cbiAgfVxuXG4gIGlmICghdGhpcy5vdXRwdXQpIHtcbiAgICB0aGlzLm91dHB1dCA9IG5ldyAoVVNFX1RZUEVEQVJSQVkgPyBVaW50OEFycmF5IDogQXJyYXkpKDB4ODAwMCk7XG4gIH1cbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuWmxpYi5SYXdEZWZsYXRlLkNvbXByZXNzaW9uVHlwZSA9IHtcbiAgTk9ORTogMCxcbiAgRklYRUQ6IDEsXG4gIERZTkFNSUM6IDIsXG4gIFJFU0VSVkVEOiAzXG59O1xuXG5cbi8qKlxuICogTFo3NyDjga7mnIDlsI/jg57jg4Pjg4HplbdcbiAqIEBjb25zdFxuICogQHR5cGUge251bWJlcn1cbiAqL1xuWmxpYi5SYXdEZWZsYXRlLkx6NzdNaW5MZW5ndGggPSAzO1xuXG4vKipcbiAqIExaNzcg44Gu5pyA5aSn44Oe44OD44OB6ZW3XG4gKiBAY29uc3RcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblpsaWIuUmF3RGVmbGF0ZS5Mejc3TWF4TGVuZ3RoID0gMjU4O1xuXG4vKipcbiAqIExaNzcg44Gu44Km44Kj44Oz44OJ44Km44K144Kk44K6XG4gKiBAY29uc3RcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cblpsaWIuUmF3RGVmbGF0ZS5XaW5kb3dTaXplID0gMHg4MDAwO1xuXG4vKipcbiAqIOacgOmVt+OBruespuWPt+mVt1xuICogQGNvbnN0XG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5abGliLlJhd0RlZmxhdGUuTWF4Q29kZUxlbmd0aCA9IDE2O1xuXG4vKipcbiAqIOODj+ODleODnuODs+espuWPt+OBruacgOWkp+aVsOWApFxuICogQGNvbnN0XG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5abGliLlJhd0RlZmxhdGUuSFVGTUFYID0gMjg2O1xuXG4vKipcbiAqIOWbuuWumuODj+ODleODnuODs+espuWPt+OBruespuWPt+WMluODhuODvOODluODq1xuICogQGNvbnN0XG4gKiBAdHlwZSB7QXJyYXkuPEFycmF5LjxudW1iZXIsIG51bWJlcj4+fVxuICovXG5abGliLlJhd0RlZmxhdGUuRml4ZWRIdWZmbWFuVGFibGUgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB0YWJsZSA9IFtdLCBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCAyODg7IGkrKykge1xuICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgY2FzZSAoaSA8PSAxNDMpOiB0YWJsZS5wdXNoKFtpICAgICAgICsgMHgwMzAsIDhdKTsgYnJlYWs7XG4gICAgICBjYXNlIChpIDw9IDI1NSk6IHRhYmxlLnB1c2goW2kgLSAxNDQgKyAweDE5MCwgOV0pOyBicmVhaztcbiAgICAgIGNhc2UgKGkgPD0gMjc5KTogdGFibGUucHVzaChbaSAtIDI1NiArIDB4MDAwLCA3XSk7IGJyZWFrO1xuICAgICAgY2FzZSAoaSA8PSAyODcpOiB0YWJsZS5wdXNoKFtpIC0gMjgwICsgMHgwQzAsIDhdKTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyAnaW52YWxpZCBsaXRlcmFsOiAnICsgaTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFibGU7XG59KSgpO1xuXG4vKipcbiAqIERFRkxBVEUg44OW44Ot44OD44Kv44Gu5L2c5oiQXG4gKiBAcmV0dXJuIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSDlnKfnuK7muIjjgb8gYnl0ZSBhcnJheS5cbiAqL1xuWmxpYi5SYXdEZWZsYXRlLnByb3RvdHlwZS5jb21wcmVzcyA9IGZ1bmN0aW9uKCkge1xuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9ICovXG4gIHZhciBibG9ja0FycmF5O1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIHBvc2l0aW9uO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGxlbmd0aDtcblxuICB2YXIgaW5wdXQgPSB0aGlzLmlucHV0O1xuXG4gIC8vIGNvbXByZXNzaW9uXG4gIHN3aXRjaCAodGhpcy5jb21wcmVzc2lvblR5cGUpIHtcbiAgICBjYXNlIFpsaWIuUmF3RGVmbGF0ZS5Db21wcmVzc2lvblR5cGUuTk9ORTpcbiAgICAgIC8vIGVhY2ggNjU1MzUtQnl0ZSAobGVuZ3RoIGhlYWRlcjogMTYtYml0KVxuICAgICAgZm9yIChwb3NpdGlvbiA9IDAsIGxlbmd0aCA9IGlucHV0Lmxlbmd0aDsgcG9zaXRpb24gPCBsZW5ndGg7KSB7XG4gICAgICAgIGJsb2NrQXJyYXkgPSBVU0VfVFlQRURBUlJBWSA/XG4gICAgICAgICAgaW5wdXQuc3ViYXJyYXkocG9zaXRpb24sIHBvc2l0aW9uICsgMHhmZmZmKSA6XG4gICAgICAgICAgaW5wdXQuc2xpY2UocG9zaXRpb24sIHBvc2l0aW9uICsgMHhmZmZmKTtcbiAgICAgICAgcG9zaXRpb24gKz0gYmxvY2tBcnJheS5sZW5ndGg7XG4gICAgICAgIHRoaXMubWFrZU5vY29tcHJlc3NCbG9jayhibG9ja0FycmF5LCAocG9zaXRpb24gPT09IGxlbmd0aCkpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBabGliLlJhd0RlZmxhdGUuQ29tcHJlc3Npb25UeXBlLkZJWEVEOlxuICAgICAgdGhpcy5vdXRwdXQgPSB0aGlzLm1ha2VGaXhlZEh1ZmZtYW5CbG9jayhpbnB1dCwgdHJ1ZSk7XG4gICAgICB0aGlzLm9wID0gdGhpcy5vdXRwdXQubGVuZ3RoO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBabGliLlJhd0RlZmxhdGUuQ29tcHJlc3Npb25UeXBlLkRZTkFNSUM6XG4gICAgICB0aGlzLm91dHB1dCA9IHRoaXMubWFrZUR5bmFtaWNIdWZmbWFuQmxvY2soaW5wdXQsIHRydWUpO1xuICAgICAgdGhpcy5vcCA9IHRoaXMub3V0cHV0Lmxlbmd0aDtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyAnaW52YWxpZCBjb21wcmVzc2lvbiB0eXBlJztcbiAgfVxuXG4gIHJldHVybiB0aGlzLm91dHB1dDtcbn07XG5cbi8qKlxuICog6Z2e5Zyn57iu44OW44Ot44OD44Kv44Gu5L2c5oiQXG4gKiBAcGFyYW0geyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IGJsb2NrQXJyYXkg44OW44Ot44OD44Kv44OH44O844K/IGJ5dGUgYXJyYXkuXG4gKiBAcGFyYW0geyFib29sZWFufSBpc0ZpbmFsQmxvY2sg5pyA5b6M44Gu44OW44Ot44OD44Kv44Gq44KJ44GwdHJ1ZS5cbiAqIEByZXR1cm4geyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IOmdnuWcp+e4ruODluODreODg+OCryBieXRlIGFycmF5LlxuICovXG5abGliLlJhd0RlZmxhdGUucHJvdG90eXBlLm1ha2VOb2NvbXByZXNzQmxvY2sgPVxuZnVuY3Rpb24oYmxvY2tBcnJheSwgaXNGaW5hbEJsb2NrKSB7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgYmZpbmFsO1xuICAvKiogQHR5cGUge1psaWIuUmF3RGVmbGF0ZS5Db21wcmVzc2lvblR5cGV9ICovXG4gIHZhciBidHlwZTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBsZW47XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgbmxlbjtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBpO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGlsO1xuXG4gIHZhciBvdXRwdXQgPSB0aGlzLm91dHB1dDtcbiAgdmFyIG9wID0gdGhpcy5vcDtcblxuICAvLyBleHBhbmQgYnVmZmVyXG4gIGlmIChVU0VfVFlQRURBUlJBWSkge1xuICAgIG91dHB1dCA9IG5ldyBVaW50OEFycmF5KHRoaXMub3V0cHV0LmJ1ZmZlcik7XG4gICAgd2hpbGUgKG91dHB1dC5sZW5ndGggPD0gb3AgKyBibG9ja0FycmF5Lmxlbmd0aCArIDUpIHtcbiAgICAgIG91dHB1dCA9IG5ldyBVaW50OEFycmF5KG91dHB1dC5sZW5ndGggPDwgMSk7XG4gICAgfVxuICAgIG91dHB1dC5zZXQodGhpcy5vdXRwdXQpO1xuICB9XG5cbiAgLy8gaGVhZGVyXG4gIGJmaW5hbCA9IGlzRmluYWxCbG9jayA/IDEgOiAwO1xuICBidHlwZSA9IFpsaWIuUmF3RGVmbGF0ZS5Db21wcmVzc2lvblR5cGUuTk9ORTtcbiAgb3V0cHV0W29wKytdID0gKGJmaW5hbCkgfCAoYnR5cGUgPDwgMSk7XG5cbiAgLy8gbGVuZ3RoXG4gIGxlbiA9IGJsb2NrQXJyYXkubGVuZ3RoO1xuICBubGVuID0gKH5sZW4gKyAweDEwMDAwKSAmIDB4ZmZmZjtcbiAgb3V0cHV0W29wKytdID0gICAgICAgICAgbGVuICYgMHhmZjtcbiAgb3V0cHV0W29wKytdID0gIChsZW4gPj4+IDgpICYgMHhmZjtcbiAgb3V0cHV0W29wKytdID0gICAgICAgICBubGVuICYgMHhmZjtcbiAgb3V0cHV0W29wKytdID0gKG5sZW4gPj4+IDgpICYgMHhmZjtcblxuICAvLyBjb3B5IGJ1ZmZlclxuICBpZiAoVVNFX1RZUEVEQVJSQVkpIHtcbiAgICAgb3V0cHV0LnNldChibG9ja0FycmF5LCBvcCk7XG4gICAgIG9wICs9IGJsb2NrQXJyYXkubGVuZ3RoO1xuICAgICBvdXRwdXQgPSBvdXRwdXQuc3ViYXJyYXkoMCwgb3ApO1xuICB9IGVsc2Uge1xuICAgIGZvciAoaSA9IDAsIGlsID0gYmxvY2tBcnJheS5sZW5ndGg7IGkgPCBpbDsgKytpKSB7XG4gICAgICBvdXRwdXRbb3ArK10gPSBibG9ja0FycmF5W2ldO1xuICAgIH1cbiAgICBvdXRwdXQubGVuZ3RoID0gb3A7XG4gIH1cblxuICB0aGlzLm9wID0gb3A7XG4gIHRoaXMub3V0cHV0ID0gb3V0cHV0O1xuXG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG4vKipcbiAqIOWbuuWumuODj+ODleODnuODs+ODluODreODg+OCr+OBruS9nOaIkFxuICogQHBhcmFtIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBibG9ja0FycmF5IOODluODreODg+OCr+ODh+ODvOOCvyBieXRlIGFycmF5LlxuICogQHBhcmFtIHshYm9vbGVhbn0gaXNGaW5hbEJsb2NrIOacgOW+jOOBruODluODreODg+OCr+OBquOCieOBsHRydWUuXG4gKiBAcmV0dXJuIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSDlm7rlrprjg4/jg5Xjg57jg7PnrKblj7fljJbjg5bjg63jg4Pjgq8gYnl0ZSBhcnJheS5cbiAqL1xuWmxpYi5SYXdEZWZsYXRlLnByb3RvdHlwZS5tYWtlRml4ZWRIdWZmbWFuQmxvY2sgPVxuZnVuY3Rpb24oYmxvY2tBcnJheSwgaXNGaW5hbEJsb2NrKSB7XG4gIC8qKiBAdHlwZSB7WmxpYi5CaXRTdHJlYW19ICovXG4gIHZhciBzdHJlYW0gPSBuZXcgWmxpYi5CaXRTdHJlYW0oVVNFX1RZUEVEQVJSQVkgP1xuICAgIG5ldyBVaW50OEFycmF5KHRoaXMub3V0cHV0LmJ1ZmZlcikgOiB0aGlzLm91dHB1dCwgdGhpcy5vcCk7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgYmZpbmFsO1xuICAvKiogQHR5cGUge1psaWIuUmF3RGVmbGF0ZS5Db21wcmVzc2lvblR5cGV9ICovXG4gIHZhciBidHlwZTtcbiAgLyoqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQxNkFycmF5KX0gKi9cbiAgdmFyIGRhdGE7XG5cbiAgLy8gaGVhZGVyXG4gIGJmaW5hbCA9IGlzRmluYWxCbG9jayA/IDEgOiAwO1xuICBidHlwZSA9IFpsaWIuUmF3RGVmbGF0ZS5Db21wcmVzc2lvblR5cGUuRklYRUQ7XG5cbiAgc3RyZWFtLndyaXRlQml0cyhiZmluYWwsIDEsIHRydWUpO1xuICBzdHJlYW0ud3JpdGVCaXRzKGJ0eXBlLCAyLCB0cnVlKTtcblxuICBkYXRhID0gdGhpcy5sejc3KGJsb2NrQXJyYXkpO1xuICB0aGlzLmZpeGVkSHVmZm1hbihkYXRhLCBzdHJlYW0pO1xuXG4gIHJldHVybiBzdHJlYW0uZmluaXNoKCk7XG59O1xuXG4vKipcbiAqIOWLleeahOODj+ODleODnuODs+ODluODreODg+OCr+OBruS9nOaIkFxuICogQHBhcmFtIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBibG9ja0FycmF5IOODluODreODg+OCr+ODh+ODvOOCvyBieXRlIGFycmF5LlxuICogQHBhcmFtIHshYm9vbGVhbn0gaXNGaW5hbEJsb2NrIOacgOW+jOOBruODluODreODg+OCr+OBquOCieOBsHRydWUuXG4gKiBAcmV0dXJuIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSDli5XnmoTjg4/jg5Xjg57jg7PnrKblj7fjg5bjg63jg4Pjgq8gYnl0ZSBhcnJheS5cbiAqL1xuWmxpYi5SYXdEZWZsYXRlLnByb3RvdHlwZS5tYWtlRHluYW1pY0h1ZmZtYW5CbG9jayA9XG5mdW5jdGlvbihibG9ja0FycmF5LCBpc0ZpbmFsQmxvY2spIHtcbiAgLyoqIEB0eXBlIHtabGliLkJpdFN0cmVhbX0gKi9cbiAgdmFyIHN0cmVhbSA9IG5ldyBabGliLkJpdFN0cmVhbShVU0VfVFlQRURBUlJBWSA/XG4gICAgbmV3IFVpbnQ4QXJyYXkodGhpcy5vdXRwdXQuYnVmZmVyKSA6IHRoaXMub3V0cHV0LCB0aGlzLm9wKTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBiZmluYWw7XG4gIC8qKiBAdHlwZSB7WmxpYi5SYXdEZWZsYXRlLkNvbXByZXNzaW9uVHlwZX0gKi9cbiAgdmFyIGJ0eXBlO1xuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDE2QXJyYXkpfSAqL1xuICB2YXIgZGF0YTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBobGl0O1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGhkaXN0O1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGhjbGVuO1xuICAvKiogQGNvbnN0IEB0eXBlIHtBcnJheS48bnVtYmVyPn0gKi9cbiAgdmFyIGhjbGVuT3JkZXIgPVxuICAgICAgICBbMTYsIDE3LCAxOCwgMCwgOCwgNywgOSwgNiwgMTAsIDUsIDExLCA0LCAxMiwgMywgMTMsIDIsIDE0LCAxLCAxNV07XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gKi9cbiAgdmFyIGxpdExlbkxlbmd0aHM7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50MTZBcnJheSl9ICovXG4gIHZhciBsaXRMZW5Db2RlcztcbiAgLyoqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSAqL1xuICB2YXIgZGlzdExlbmd0aHM7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50MTZBcnJheSl9ICovXG4gIHZhciBkaXN0Q29kZXM7XG4gIC8qKiBAdHlwZSB7e1xuICAgKiAgIGNvZGVzOiAhKEFycmF5LjxudW1iZXI+fFVpbnQzMkFycmF5KSxcbiAgICogICBmcmVxczogIShBcnJheS48bnVtYmVyPnxVaW50MzJBcnJheSlcbiAgICogfX0gKi9cbiAgdmFyIHRyZWVTeW1ib2xzO1xuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9ICovXG4gIHZhciB0cmVlTGVuZ3RocztcbiAgLyoqIEB0eXBlIHtBcnJheX0gKi9cbiAgdmFyIHRyYW5zTGVuZ3RocyA9IG5ldyBBcnJheSgxOSk7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50MTZBcnJheSl9ICovXG4gIHZhciB0cmVlQ29kZXM7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgY29kZTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBiaXRsZW47XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgaTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBpbDtcblxuICAvLyBoZWFkZXJcbiAgYmZpbmFsID0gaXNGaW5hbEJsb2NrID8gMSA6IDA7XG4gIGJ0eXBlID0gWmxpYi5SYXdEZWZsYXRlLkNvbXByZXNzaW9uVHlwZS5EWU5BTUlDO1xuXG4gIHN0cmVhbS53cml0ZUJpdHMoYmZpbmFsLCAxLCB0cnVlKTtcbiAgc3RyZWFtLndyaXRlQml0cyhidHlwZSwgMiwgdHJ1ZSk7XG5cbiAgZGF0YSA9IHRoaXMubHo3NyhibG9ja0FycmF5KTtcblxuICAvLyDjg6rjg4bjg6njg6vjg7vplbfjgZUsIOi3nembouOBruODj+ODleODnuODs+espuWPt+OBqOespuWPt+mVt+OBrueul+WHulxuICBsaXRMZW5MZW5ndGhzID0gdGhpcy5nZXRMZW5ndGhzXyh0aGlzLmZyZXFzTGl0TGVuLCAxNSk7XG4gIGxpdExlbkNvZGVzID0gdGhpcy5nZXRDb2Rlc0Zyb21MZW5ndGhzXyhsaXRMZW5MZW5ndGhzKTtcbiAgZGlzdExlbmd0aHMgPSB0aGlzLmdldExlbmd0aHNfKHRoaXMuZnJlcXNEaXN0LCA3KTtcbiAgZGlzdENvZGVzID0gdGhpcy5nZXRDb2Rlc0Zyb21MZW5ndGhzXyhkaXN0TGVuZ3Rocyk7XG5cbiAgLy8gSExJVCwgSERJU1Qg44Gu5rG65a6aXG4gIGZvciAoaGxpdCA9IDI4NjsgaGxpdCA+IDI1NyAmJiBsaXRMZW5MZW5ndGhzW2hsaXQgLSAxXSA9PT0gMDsgaGxpdC0tKSB7fVxuICBmb3IgKGhkaXN0ID0gMzA7IGhkaXN0ID4gMSAmJiBkaXN0TGVuZ3Roc1toZGlzdCAtIDFdID09PSAwOyBoZGlzdC0tKSB7fVxuXG4gIC8vIEhDTEVOXG4gIHRyZWVTeW1ib2xzID1cbiAgICB0aGlzLmdldFRyZWVTeW1ib2xzXyhobGl0LCBsaXRMZW5MZW5ndGhzLCBoZGlzdCwgZGlzdExlbmd0aHMpO1xuICB0cmVlTGVuZ3RocyA9IHRoaXMuZ2V0TGVuZ3Roc18odHJlZVN5bWJvbHMuZnJlcXMsIDcpO1xuICBmb3IgKGkgPSAwOyBpIDwgMTk7IGkrKykge1xuICAgIHRyYW5zTGVuZ3Roc1tpXSA9IHRyZWVMZW5ndGhzW2hjbGVuT3JkZXJbaV1dO1xuICB9XG4gIGZvciAoaGNsZW4gPSAxOTsgaGNsZW4gPiA0ICYmIHRyYW5zTGVuZ3Roc1toY2xlbiAtIDFdID09PSAwOyBoY2xlbi0tKSB7fVxuXG4gIHRyZWVDb2RlcyA9IHRoaXMuZ2V0Q29kZXNGcm9tTGVuZ3Roc18odHJlZUxlbmd0aHMpO1xuXG4gIC8vIOWHuuWKm1xuICBzdHJlYW0ud3JpdGVCaXRzKGhsaXQgLSAyNTcsIDUsIHRydWUpO1xuICBzdHJlYW0ud3JpdGVCaXRzKGhkaXN0IC0gMSwgNSwgdHJ1ZSk7XG4gIHN0cmVhbS53cml0ZUJpdHMoaGNsZW4gLSA0LCA0LCB0cnVlKTtcbiAgZm9yIChpID0gMDsgaSA8IGhjbGVuOyBpKyspIHtcbiAgICBzdHJlYW0ud3JpdGVCaXRzKHRyYW5zTGVuZ3Roc1tpXSwgMywgdHJ1ZSk7XG4gIH1cblxuICAvLyDjg4Tjg6rjg7zjga7lh7rliptcbiAgZm9yIChpID0gMCwgaWwgPSB0cmVlU3ltYm9scy5jb2Rlcy5sZW5ndGg7IGkgPCBpbDsgaSsrKSB7XG4gICAgY29kZSA9IHRyZWVTeW1ib2xzLmNvZGVzW2ldO1xuXG4gICAgc3RyZWFtLndyaXRlQml0cyh0cmVlQ29kZXNbY29kZV0sIHRyZWVMZW5ndGhzW2NvZGVdLCB0cnVlKTtcblxuICAgIC8vIGV4dHJhIGJpdHNcbiAgICBpZiAoY29kZSA+PSAxNikge1xuICAgICAgaSsrO1xuICAgICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICAgIGNhc2UgMTY6IGJpdGxlbiA9IDI7IGJyZWFrO1xuICAgICAgICBjYXNlIDE3OiBiaXRsZW4gPSAzOyBicmVhaztcbiAgICAgICAgY2FzZSAxODogYml0bGVuID0gNzsgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgJ2ludmFsaWQgY29kZTogJyArIGNvZGU7XG4gICAgICB9XG5cbiAgICAgIHN0cmVhbS53cml0ZUJpdHModHJlZVN5bWJvbHMuY29kZXNbaV0sIGJpdGxlbiwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5keW5hbWljSHVmZm1hbihcbiAgICBkYXRhLFxuICAgIFtsaXRMZW5Db2RlcywgbGl0TGVuTGVuZ3Roc10sXG4gICAgW2Rpc3RDb2RlcywgZGlzdExlbmd0aHNdLFxuICAgIHN0cmVhbVxuICApO1xuXG4gIHJldHVybiBzdHJlYW0uZmluaXNoKCk7XG59O1xuXG5cbi8qKlxuICog5YuV55qE44OP44OV44Oe44Oz56ym5Y+35YyWKOOCq+OCueOCv+ODoOODj+ODleODnuODs+ODhuODvOODluODqylcbiAqIEBwYXJhbSB7IShBcnJheS48bnVtYmVyPnxVaW50MTZBcnJheSl9IGRhdGFBcnJheSBMWjc3IOespuWPt+WMlua4iOOBvyBieXRlIGFycmF5LlxuICogQHBhcmFtIHshWmxpYi5CaXRTdHJlYW19IHN0cmVhbSDmm7jjgY3ovrzjgb/nlKjjg5Pjg4Pjg4jjgrnjg4jjg6rjg7zjg6AuXG4gKiBAcmV0dXJuIHshWmxpYi5CaXRTdHJlYW19IOODj+ODleODnuODs+espuWPt+WMlua4iOOBv+ODk+ODg+ODiOOCueODiOODquODvOODoOOCquODluOCuOOCp+OCr+ODiC5cbiAqL1xuWmxpYi5SYXdEZWZsYXRlLnByb3RvdHlwZS5keW5hbWljSHVmZm1hbiA9XG5mdW5jdGlvbihkYXRhQXJyYXksIGxpdExlbiwgZGlzdCwgc3RyZWFtKSB7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgaW5kZXg7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgbGVuZ3RoO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGxpdGVyYWw7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgY29kZTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBsaXRMZW5Db2RlcztcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBsaXRMZW5MZW5ndGhzO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGRpc3RDb2RlcztcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBkaXN0TGVuZ3RocztcblxuICBsaXRMZW5Db2RlcyA9IGxpdExlblswXTtcbiAgbGl0TGVuTGVuZ3RocyA9IGxpdExlblsxXTtcbiAgZGlzdENvZGVzID0gZGlzdFswXTtcbiAgZGlzdExlbmd0aHMgPSBkaXN0WzFdO1xuXG4gIC8vIOespuWPt+OCkiBCaXRTdHJlYW0g44Gr5pu444GN6L6844KT44Gn44GE44GPXG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBkYXRhQXJyYXkubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkge1xuICAgIGxpdGVyYWwgPSBkYXRhQXJyYXlbaW5kZXhdO1xuXG4gICAgLy8gbGl0ZXJhbCBvciBsZW5ndGhcbiAgICBzdHJlYW0ud3JpdGVCaXRzKGxpdExlbkNvZGVzW2xpdGVyYWxdLCBsaXRMZW5MZW5ndGhzW2xpdGVyYWxdLCB0cnVlKTtcblxuICAgIC8vIOmVt+OBleODu+i3nembouespuWPt1xuICAgIGlmIChsaXRlcmFsID4gMjU2KSB7XG4gICAgICAvLyBsZW5ndGggZXh0cmFcbiAgICAgIHN0cmVhbS53cml0ZUJpdHMoZGF0YUFycmF5WysraW5kZXhdLCBkYXRhQXJyYXlbKytpbmRleF0sIHRydWUpO1xuICAgICAgLy8gZGlzdGFuY2VcbiAgICAgIGNvZGUgPSBkYXRhQXJyYXlbKytpbmRleF07XG4gICAgICBzdHJlYW0ud3JpdGVCaXRzKGRpc3RDb2Rlc1tjb2RlXSwgZGlzdExlbmd0aHNbY29kZV0sIHRydWUpO1xuICAgICAgLy8gZGlzdGFuY2UgZXh0cmFcbiAgICAgIHN0cmVhbS53cml0ZUJpdHMoZGF0YUFycmF5WysraW5kZXhdLCBkYXRhQXJyYXlbKytpbmRleF0sIHRydWUpO1xuICAgIC8vIOe1guerr1xuICAgIH0gZWxzZSBpZiAobGl0ZXJhbCA9PT0gMjU2KSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RyZWFtO1xufTtcblxuLyoqXG4gKiDlm7rlrprjg4/jg5Xjg57jg7PnrKblj7fljJZcbiAqIEBwYXJhbSB7IShBcnJheS48bnVtYmVyPnxVaW50MTZBcnJheSl9IGRhdGFBcnJheSBMWjc3IOespuWPt+WMlua4iOOBvyBieXRlIGFycmF5LlxuICogQHBhcmFtIHshWmxpYi5CaXRTdHJlYW19IHN0cmVhbSDmm7jjgY3ovrzjgb/nlKjjg5Pjg4Pjg4jjgrnjg4jjg6rjg7zjg6AuXG4gKiBAcmV0dXJuIHshWmxpYi5CaXRTdHJlYW19IOODj+ODleODnuODs+espuWPt+WMlua4iOOBv+ODk+ODg+ODiOOCueODiOODquODvOODoOOCquODluOCuOOCp+OCr+ODiC5cbiAqL1xuWmxpYi5SYXdEZWZsYXRlLnByb3RvdHlwZS5maXhlZEh1ZmZtYW4gPSBmdW5jdGlvbihkYXRhQXJyYXksIHN0cmVhbSkge1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGluZGV4O1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGxlbmd0aDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBsaXRlcmFsO1xuXG4gIC8vIOespuWPt+OCkiBCaXRTdHJlYW0g44Gr5pu444GN6L6844KT44Gn44GE44GPXG4gIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBkYXRhQXJyYXkubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgIGxpdGVyYWwgPSBkYXRhQXJyYXlbaW5kZXhdO1xuXG4gICAgLy8g56ym5Y+344Gu5pu444GN6L6844G/XG4gICAgWmxpYi5CaXRTdHJlYW0ucHJvdG90eXBlLndyaXRlQml0cy5hcHBseShcbiAgICAgIHN0cmVhbSxcbiAgICAgIFpsaWIuUmF3RGVmbGF0ZS5GaXhlZEh1ZmZtYW5UYWJsZVtsaXRlcmFsXVxuICAgICk7XG5cbiAgICAvLyDplbfjgZXjg7vot53pm6LnrKblj7dcbiAgICBpZiAobGl0ZXJhbCA+IDB4MTAwKSB7XG4gICAgICAvLyBsZW5ndGggZXh0cmFcbiAgICAgIHN0cmVhbS53cml0ZUJpdHMoZGF0YUFycmF5WysraW5kZXhdLCBkYXRhQXJyYXlbKytpbmRleF0sIHRydWUpO1xuICAgICAgLy8gZGlzdGFuY2VcbiAgICAgIHN0cmVhbS53cml0ZUJpdHMoZGF0YUFycmF5WysraW5kZXhdLCA1KTtcbiAgICAgIC8vIGRpc3RhbmNlIGV4dHJhXG4gICAgICBzdHJlYW0ud3JpdGVCaXRzKGRhdGFBcnJheVsrK2luZGV4XSwgZGF0YUFycmF5WysraW5kZXhdLCB0cnVlKTtcbiAgICAvLyDntYLnq69cbiAgICB9IGVsc2UgaWYgKGxpdGVyYWwgPT09IDB4MTAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RyZWFtO1xufTtcblxuLyoqXG4gKiDjg57jg4Pjg4Hmg4XloLFcbiAqIEBwYXJhbSB7IW51bWJlcn0gbGVuZ3RoIOODnuODg+ODgeOBl+OBn+mVt+OBlS5cbiAqIEBwYXJhbSB7IW51bWJlcn0gYmFja3dhcmREaXN0YW5jZSDjg57jg4Pjg4HkvY3nva7jgajjga7ot53pm6IuXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuWmxpYi5SYXdEZWZsYXRlLkx6NzdNYXRjaCA9IGZ1bmN0aW9uKGxlbmd0aCwgYmFja3dhcmREaXN0YW5jZSkge1xuICAvKiogQHR5cGUge251bWJlcn0gbWF0Y2ggbGVuZ3RoLiAqL1xuICB0aGlzLmxlbmd0aCA9IGxlbmd0aDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGJhY2t3YXJkIGRpc3RhbmNlLiAqL1xuICB0aGlzLmJhY2t3YXJkRGlzdGFuY2UgPSBiYWNrd2FyZERpc3RhbmNlO1xufTtcblxuLyoqXG4gKiDplbfjgZXnrKblj7fjg4bjg7zjg5bjg6suXG4gKiBb44Kz44O844OJLCDmi6HlvLXjg5Pjg4Pjg4gsIOaLoeW8teODk+ODg+ODiOmVt10g44Gu6YWN5YiX44Go44Gq44Gj44Gm44GE44KLLlxuICogQGNvbnN0XG4gKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50MzJBcnJheSl9XG4gKi9cblpsaWIuUmF3RGVmbGF0ZS5Mejc3TWF0Y2guTGVuZ3RoQ29kZVRhYmxlID0gKGZ1bmN0aW9uKHRhYmxlKSB7XG4gIHJldHVybiBVU0VfVFlQRURBUlJBWSA/IG5ldyBVaW50MzJBcnJheSh0YWJsZSkgOiB0YWJsZTtcbn0pKChmdW5jdGlvbigpIHtcbiAgLyoqIEB0eXBlIHshQXJyYXl9ICovXG4gIHZhciB0YWJsZSA9IFtdO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGk7XG4gIC8qKiBAdHlwZSB7IUFycmF5LjxudW1iZXI+fSAqL1xuICB2YXIgYztcblxuICBmb3IgKGkgPSAzOyBpIDw9IDI1ODsgaSsrKSB7XG4gICAgYyA9IGNvZGUoaSk7XG4gICAgdGFibGVbaV0gPSAoY1syXSA8PCAyNCkgfCAoY1sxXSA8PCAxNikgfCBjWzBdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGggbHo3NyBsZW5ndGguXG4gICAqIEByZXR1cm4geyFBcnJheS48bnVtYmVyPn0gbHo3NyBjb2Rlcy5cbiAgICovXG4gIGZ1bmN0aW9uIGNvZGUobGVuZ3RoKSB7XG4gICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICBjYXNlIChsZW5ndGggPT09IDMpOiByZXR1cm4gWzI1NywgbGVuZ3RoIC0gMywgMF07IGJyZWFrO1xuICAgICAgY2FzZSAobGVuZ3RoID09PSA0KTogcmV0dXJuIFsyNTgsIGxlbmd0aCAtIDQsIDBdOyBicmVhaztcbiAgICAgIGNhc2UgKGxlbmd0aCA9PT0gNSk6IHJldHVybiBbMjU5LCBsZW5ndGggLSA1LCAwXTsgYnJlYWs7XG4gICAgICBjYXNlIChsZW5ndGggPT09IDYpOiByZXR1cm4gWzI2MCwgbGVuZ3RoIC0gNiwgMF07IGJyZWFrO1xuICAgICAgY2FzZSAobGVuZ3RoID09PSA3KTogcmV0dXJuIFsyNjEsIGxlbmd0aCAtIDcsIDBdOyBicmVhaztcbiAgICAgIGNhc2UgKGxlbmd0aCA9PT0gOCk6IHJldHVybiBbMjYyLCBsZW5ndGggLSA4LCAwXTsgYnJlYWs7XG4gICAgICBjYXNlIChsZW5ndGggPT09IDkpOiByZXR1cm4gWzI2MywgbGVuZ3RoIC0gOSwgMF07IGJyZWFrO1xuICAgICAgY2FzZSAobGVuZ3RoID09PSAxMCk6IHJldHVybiBbMjY0LCBsZW5ndGggLSAxMCwgMF07IGJyZWFrO1xuICAgICAgY2FzZSAobGVuZ3RoIDw9IDEyKTogcmV0dXJuIFsyNjUsIGxlbmd0aCAtIDExLCAxXTsgYnJlYWs7XG4gICAgICBjYXNlIChsZW5ndGggPD0gMTQpOiByZXR1cm4gWzI2NiwgbGVuZ3RoIC0gMTMsIDFdOyBicmVhaztcbiAgICAgIGNhc2UgKGxlbmd0aCA8PSAxNik6IHJldHVybiBbMjY3LCBsZW5ndGggLSAxNSwgMV07IGJyZWFrO1xuICAgICAgY2FzZSAobGVuZ3RoIDw9IDE4KTogcmV0dXJuIFsyNjgsIGxlbmd0aCAtIDE3LCAxXTsgYnJlYWs7XG4gICAgICBjYXNlIChsZW5ndGggPD0gMjIpOiByZXR1cm4gWzI2OSwgbGVuZ3RoIC0gMTksIDJdOyBicmVhaztcbiAgICAgIGNhc2UgKGxlbmd0aCA8PSAyNik6IHJldHVybiBbMjcwLCBsZW5ndGggLSAyMywgMl07IGJyZWFrO1xuICAgICAgY2FzZSAobGVuZ3RoIDw9IDMwKTogcmV0dXJuIFsyNzEsIGxlbmd0aCAtIDI3LCAyXTsgYnJlYWs7XG4gICAgICBjYXNlIChsZW5ndGggPD0gMzQpOiByZXR1cm4gWzI3MiwgbGVuZ3RoIC0gMzEsIDJdOyBicmVhaztcbiAgICAgIGNhc2UgKGxlbmd0aCA8PSA0Mik6IHJldHVybiBbMjczLCBsZW5ndGggLSAzNSwgM107IGJyZWFrO1xuICAgICAgY2FzZSAobGVuZ3RoIDw9IDUwKTogcmV0dXJuIFsyNzQsIGxlbmd0aCAtIDQzLCAzXTsgYnJlYWs7XG4gICAgICBjYXNlIChsZW5ndGggPD0gNTgpOiByZXR1cm4gWzI3NSwgbGVuZ3RoIC0gNTEsIDNdOyBicmVhaztcbiAgICAgIGNhc2UgKGxlbmd0aCA8PSA2Nik6IHJldHVybiBbMjc2LCBsZW5ndGggLSA1OSwgM107IGJyZWFrO1xuICAgICAgY2FzZSAobGVuZ3RoIDw9IDgyKTogcmV0dXJuIFsyNzcsIGxlbmd0aCAtIDY3LCA0XTsgYnJlYWs7XG4gICAgICBjYXNlIChsZW5ndGggPD0gOTgpOiByZXR1cm4gWzI3OCwgbGVuZ3RoIC0gODMsIDRdOyBicmVhaztcbiAgICAgIGNhc2UgKGxlbmd0aCA8PSAxMTQpOiByZXR1cm4gWzI3OSwgbGVuZ3RoIC0gOTksIDRdOyBicmVhaztcbiAgICAgIGNhc2UgKGxlbmd0aCA8PSAxMzApOiByZXR1cm4gWzI4MCwgbGVuZ3RoIC0gMTE1LCA0XTsgYnJlYWs7XG4gICAgICBjYXNlIChsZW5ndGggPD0gMTYyKTogcmV0dXJuIFsyODEsIGxlbmd0aCAtIDEzMSwgNV07IGJyZWFrO1xuICAgICAgY2FzZSAobGVuZ3RoIDw9IDE5NCk6IHJldHVybiBbMjgyLCBsZW5ndGggLSAxNjMsIDVdOyBicmVhaztcbiAgICAgIGNhc2UgKGxlbmd0aCA8PSAyMjYpOiByZXR1cm4gWzI4MywgbGVuZ3RoIC0gMTk1LCA1XTsgYnJlYWs7XG4gICAgICBjYXNlIChsZW5ndGggPD0gMjU3KTogcmV0dXJuIFsyODQsIGxlbmd0aCAtIDIyNywgNV07IGJyZWFrO1xuICAgICAgY2FzZSAobGVuZ3RoID09PSAyNTgpOiByZXR1cm4gWzI4NSwgbGVuZ3RoIC0gMjU4LCAwXTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiB0aHJvdyAnaW52YWxpZCBsZW5ndGg6ICcgKyBsZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhYmxlO1xufSkoKSk7XG5cbi8qKlxuICog6Led6Zui56ym5Y+344OG44O844OW44OrXG4gKiBAcGFyYW0geyFudW1iZXJ9IGRpc3Qg6Led6ZuiLlxuICogQHJldHVybiB7IUFycmF5LjxudW1iZXI+fSDjgrPjg7zjg4njgIHmi6HlvLXjg5Pjg4Pjg4jjgIHmi6HlvLXjg5Pjg4Pjg4jplbfjga7phY3liJcuXG4gKiBAcHJpdmF0ZVxuICovXG5abGliLlJhd0RlZmxhdGUuTHo3N01hdGNoLnByb3RvdHlwZS5nZXREaXN0YW5jZUNvZGVfID0gZnVuY3Rpb24oZGlzdCkge1xuICAvKiogQHR5cGUgeyFBcnJheS48bnVtYmVyPn0gZGlzdGFuY2UgY29kZSB0YWJsZS4gKi9cbiAgdmFyIHI7XG5cbiAgc3dpdGNoICh0cnVlKSB7XG4gICAgY2FzZSAoZGlzdCA9PT0gMSk6IHIgPSBbMCwgZGlzdCAtIDEsIDBdOyBicmVhaztcbiAgICBjYXNlIChkaXN0ID09PSAyKTogciA9IFsxLCBkaXN0IC0gMiwgMF07IGJyZWFrO1xuICAgIGNhc2UgKGRpc3QgPT09IDMpOiByID0gWzIsIGRpc3QgLSAzLCAwXTsgYnJlYWs7XG4gICAgY2FzZSAoZGlzdCA9PT0gNCk6IHIgPSBbMywgZGlzdCAtIDQsIDBdOyBicmVhaztcbiAgICBjYXNlIChkaXN0IDw9IDYpOiByID0gWzQsIGRpc3QgLSA1LCAxXTsgYnJlYWs7XG4gICAgY2FzZSAoZGlzdCA8PSA4KTogciA9IFs1LCBkaXN0IC0gNywgMV07IGJyZWFrO1xuICAgIGNhc2UgKGRpc3QgPD0gMTIpOiByID0gWzYsIGRpc3QgLSA5LCAyXTsgYnJlYWs7XG4gICAgY2FzZSAoZGlzdCA8PSAxNik6IHIgPSBbNywgZGlzdCAtIDEzLCAyXTsgYnJlYWs7XG4gICAgY2FzZSAoZGlzdCA8PSAyNCk6IHIgPSBbOCwgZGlzdCAtIDE3LCAzXTsgYnJlYWs7XG4gICAgY2FzZSAoZGlzdCA8PSAzMik6IHIgPSBbOSwgZGlzdCAtIDI1LCAzXTsgYnJlYWs7XG4gICAgY2FzZSAoZGlzdCA8PSA0OCk6IHIgPSBbMTAsIGRpc3QgLSAzMywgNF07IGJyZWFrO1xuICAgIGNhc2UgKGRpc3QgPD0gNjQpOiByID0gWzExLCBkaXN0IC0gNDksIDRdOyBicmVhaztcbiAgICBjYXNlIChkaXN0IDw9IDk2KTogciA9IFsxMiwgZGlzdCAtIDY1LCA1XTsgYnJlYWs7XG4gICAgY2FzZSAoZGlzdCA8PSAxMjgpOiByID0gWzEzLCBkaXN0IC0gOTcsIDVdOyBicmVhaztcbiAgICBjYXNlIChkaXN0IDw9IDE5Mik6IHIgPSBbMTQsIGRpc3QgLSAxMjksIDZdOyBicmVhaztcbiAgICBjYXNlIChkaXN0IDw9IDI1Nik6IHIgPSBbMTUsIGRpc3QgLSAxOTMsIDZdOyBicmVhaztcbiAgICBjYXNlIChkaXN0IDw9IDM4NCk6IHIgPSBbMTYsIGRpc3QgLSAyNTcsIDddOyBicmVhaztcbiAgICBjYXNlIChkaXN0IDw9IDUxMik6IHIgPSBbMTcsIGRpc3QgLSAzODUsIDddOyBicmVhaztcbiAgICBjYXNlIChkaXN0IDw9IDc2OCk6IHIgPSBbMTgsIGRpc3QgLSA1MTMsIDhdOyBicmVhaztcbiAgICBjYXNlIChkaXN0IDw9IDEwMjQpOiByID0gWzE5LCBkaXN0IC0gNzY5LCA4XTsgYnJlYWs7XG4gICAgY2FzZSAoZGlzdCA8PSAxNTM2KTogciA9IFsyMCwgZGlzdCAtIDEwMjUsIDldOyBicmVhaztcbiAgICBjYXNlIChkaXN0IDw9IDIwNDgpOiByID0gWzIxLCBkaXN0IC0gMTUzNywgOV07IGJyZWFrO1xuICAgIGNhc2UgKGRpc3QgPD0gMzA3Mik6IHIgPSBbMjIsIGRpc3QgLSAyMDQ5LCAxMF07IGJyZWFrO1xuICAgIGNhc2UgKGRpc3QgPD0gNDA5Nik6IHIgPSBbMjMsIGRpc3QgLSAzMDczLCAxMF07IGJyZWFrO1xuICAgIGNhc2UgKGRpc3QgPD0gNjE0NCk6IHIgPSBbMjQsIGRpc3QgLSA0MDk3LCAxMV07IGJyZWFrO1xuICAgIGNhc2UgKGRpc3QgPD0gODE5Mik6IHIgPSBbMjUsIGRpc3QgLSA2MTQ1LCAxMV07IGJyZWFrO1xuICAgIGNhc2UgKGRpc3QgPD0gMTIyODgpOiByID0gWzI2LCBkaXN0IC0gODE5MywgMTJdOyBicmVhaztcbiAgICBjYXNlIChkaXN0IDw9IDE2Mzg0KTogciA9IFsyNywgZGlzdCAtIDEyMjg5LCAxMl07IGJyZWFrO1xuICAgIGNhc2UgKGRpc3QgPD0gMjQ1NzYpOiByID0gWzI4LCBkaXN0IC0gMTYzODUsIDEzXTsgYnJlYWs7XG4gICAgY2FzZSAoZGlzdCA8PSAzMjc2OCk6IHIgPSBbMjksIGRpc3QgLSAyNDU3NywgMTNdOyBicmVhaztcbiAgICBkZWZhdWx0OiB0aHJvdyAnaW52YWxpZCBkaXN0YW5jZSc7XG4gIH1cblxuICByZXR1cm4gcjtcbn07XG5cbi8qKlxuICog44Oe44OD44OB5oOF5aCx44KSIExaNzcg56ym5Y+35YyW6YWN5YiX44Gn6L+U44GZLlxuICog44Gq44GK44CB44GT44GT44Gn44Gv5Lul5LiL44Gu5YaF6YOo5LuV5qeY44Gn56ym5Y+35YyW44GX44Gm44GE44KLXG4gKiBbIENPREUsIEVYVFJBLUJJVC1MRU4sIEVYVFJBLCBDT0RFLCBFWFRSQS1CSVQtTEVOLCBFWFRSQSBdXG4gKiBAcmV0dXJuIHshQXJyYXkuPG51bWJlcj59IExaNzcg56ym5Y+35YyWIGJ5dGUgYXJyYXkuXG4gKi9cblpsaWIuUmF3RGVmbGF0ZS5Mejc3TWF0Y2gucHJvdG90eXBlLnRvTHo3N0FycmF5ID0gZnVuY3Rpb24oKSB7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgZGlzdCA9IHRoaXMuYmFja3dhcmREaXN0YW5jZTtcbiAgLyoqIEB0eXBlIHtBcnJheX0gKi9cbiAgdmFyIGNvZGVBcnJheSA9IFtdO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIHBvcyA9IDA7XG4gIC8qKiBAdHlwZSB7IUFycmF5LjxudW1iZXI+fSAqL1xuICB2YXIgY29kZTtcblxuICAvLyBsZW5ndGhcbiAgY29kZSA9IFpsaWIuUmF3RGVmbGF0ZS5Mejc3TWF0Y2guTGVuZ3RoQ29kZVRhYmxlW2xlbmd0aF07XG4gIGNvZGVBcnJheVtwb3MrK10gPSBjb2RlICYgMHhmZmZmO1xuICBjb2RlQXJyYXlbcG9zKytdID0gKGNvZGUgPj4gMTYpICYgMHhmZjtcbiAgY29kZUFycmF5W3BvcysrXSA9IGNvZGUgPj4gMjQ7XG5cbiAgLy8gZGlzdGFuY2VcbiAgY29kZSA9IHRoaXMuZ2V0RGlzdGFuY2VDb2RlXyhkaXN0KTtcbiAgY29kZUFycmF5W3BvcysrXSA9IGNvZGVbMF07XG4gIGNvZGVBcnJheVtwb3MrK10gPSBjb2RlWzFdO1xuICBjb2RlQXJyYXlbcG9zKytdID0gY29kZVsyXTtcblxuICByZXR1cm4gY29kZUFycmF5O1xufTtcblxuLyoqXG4gKiBMWjc3IOWun+ijhVxuICogQHBhcmFtIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBkYXRhQXJyYXkgTFo3NyDnrKblj7fljJbjgZnjgovjg5DjgqTjg4jphY3liJcuXG4gKiBAcmV0dXJuIHshKEFycmF5LjxudW1iZXI+fFVpbnQxNkFycmF5KX0gTFo3NyDnrKblj7fljJbjgZfjgZ/phY3liJcuXG4gKi9cblpsaWIuUmF3RGVmbGF0ZS5wcm90b3R5cGUubHo3NyA9IGZ1bmN0aW9uKGRhdGFBcnJheSkge1xuICAvKiogQHR5cGUge251bWJlcn0gaW5wdXQgcG9zaXRpb24gKi9cbiAgdmFyIHBvc2l0aW9uO1xuICAvKiogQHR5cGUge251bWJlcn0gaW5wdXQgbGVuZ3RoICovXG4gIHZhciBsZW5ndGg7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBsb29wIGNvdW50ZXIgKi9cbiAgdmFyIGk7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBsb29wIGxpbWl0ZXIgKi9cbiAgdmFyIGlsO1xuICAvKiogQHR5cGUge251bWJlcn0gY2hhaW5lZC1oYXNoLXRhYmxlIGtleSAqL1xuICB2YXIgbWF0Y2hLZXk7XG4gIC8qKiBAdHlwZSB7T2JqZWN0LjxudW1iZXIsIEFycmF5LjxudW1iZXI+Pn0gY2hhaW5lZC1oYXNoLXRhYmxlICovXG4gIHZhciB0YWJsZSA9IHt9O1xuICAvKiogQGNvbnN0IEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciB3aW5kb3dTaXplID0gWmxpYi5SYXdEZWZsYXRlLldpbmRvd1NpemU7XG4gIC8qKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59IG1hdGNoIGxpc3QgKi9cbiAgdmFyIG1hdGNoTGlzdDtcbiAgLyoqIEB0eXBlIHtabGliLlJhd0RlZmxhdGUuTHo3N01hdGNofSBsb25nZXN0IG1hdGNoICovXG4gIHZhciBsb25nZXN0TWF0Y2g7XG4gIC8qKiBAdHlwZSB7WmxpYi5SYXdEZWZsYXRlLkx6NzdNYXRjaH0gcHJldmlvdXMgbG9uZ2VzdCBtYXRjaCAqL1xuICB2YXIgcHJldk1hdGNoO1xuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDE2QXJyYXkpfSBsejc3IGJ1ZmZlciAqL1xuICB2YXIgbHo3N2J1ZiA9IFVTRV9UWVBFREFSUkFZID9cbiAgICBuZXcgVWludDE2QXJyYXkoZGF0YUFycmF5Lmxlbmd0aCAqIDIpIDogW107XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBsejc3IG91dHB1dCBidWZmZXIgcG9pbnRlciAqL1xuICB2YXIgcG9zID0gMDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGx6Nzcgc2tpcCBsZW5ndGggKi9cbiAgdmFyIHNraXBMZW5ndGggPSAwO1xuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDMyQXJyYXkpfSAqL1xuICB2YXIgZnJlcXNMaXRMZW4gPSBuZXcgKFVTRV9UWVBFREFSUkFZID8gVWludDMyQXJyYXkgOiBBcnJheSkoMjg2KTtcbiAgLyoqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQzMkFycmF5KX0gKi9cbiAgdmFyIGZyZXFzRGlzdCA9IG5ldyAoVVNFX1RZUEVEQVJSQVkgPyBVaW50MzJBcnJheSA6IEFycmF5KSgzMCk7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgbGF6eSA9IHRoaXMubGF6eTtcbiAgLyoqIEB0eXBlIHsqfSB0ZW1wb3JhcnkgdmFyaWFibGUgKi9cbiAgdmFyIHRtcDtcblxuICAvLyDliJ3mnJ/ljJZcbiAgaWYgKCFVU0VfVFlQRURBUlJBWSkge1xuICAgIGZvciAoaSA9IDA7IGkgPD0gMjg1OykgeyBmcmVxc0xpdExlbltpKytdID0gMDsgfVxuICAgIGZvciAoaSA9IDA7IGkgPD0gMjk7KSB7IGZyZXFzRGlzdFtpKytdID0gMDsgfVxuICB9XG4gIGZyZXFzTGl0TGVuWzI1Nl0gPSAxOyAvLyBFT0Ig44Gu5pyA5L2O5Ye654++5Zue5pWw44GvIDFcblxuICAvKipcbiAgICog44Oe44OD44OB44OH44O844K/44Gu5pu444GN6L6844G/XG4gICAqIEBwYXJhbSB7WmxpYi5SYXdEZWZsYXRlLkx6NzdNYXRjaH0gbWF0Y2ggTFo3NyBNYXRjaCBkYXRhLlxuICAgKiBAcGFyYW0geyFudW1iZXJ9IG9mZnNldCDjgrnjgq3jg4Pjg5fplovlp4vkvY3nva4o55u45a++5oyH5a6aKS5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGZ1bmN0aW9uIHdyaXRlTWF0Y2gobWF0Y2gsIG9mZnNldCkge1xuICAgIC8qKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59ICovXG4gICAgdmFyIGx6NzdBcnJheSA9IG1hdGNoLnRvTHo3N0FycmF5KCk7XG4gICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gICAgdmFyIGk7XG4gICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gICAgdmFyIGlsO1xuXG4gICAgZm9yIChpID0gMCwgaWwgPSBsejc3QXJyYXkubGVuZ3RoOyBpIDwgaWw7ICsraSkge1xuICAgICAgbHo3N2J1Zltwb3MrK10gPSBsejc3QXJyYXlbaV07XG4gICAgfVxuICAgIGZyZXFzTGl0TGVuW2x6NzdBcnJheVswXV0rKztcbiAgICBmcmVxc0Rpc3RbbHo3N0FycmF5WzNdXSsrO1xuICAgIHNraXBMZW5ndGggPSBtYXRjaC5sZW5ndGggKyBvZmZzZXQgLSAxO1xuICAgIHByZXZNYXRjaCA9IG51bGw7XG4gIH1cblxuICAvLyBMWjc3IOespuWPt+WMllxuICBmb3IgKHBvc2l0aW9uID0gMCwgbGVuZ3RoID0gZGF0YUFycmF5Lmxlbmd0aDsgcG9zaXRpb24gPCBsZW5ndGg7ICsrcG9zaXRpb24pIHtcbiAgICAvLyDjg4/jg4Pjgrfjg6Xjgq3jg7zjga7kvZzmiJBcbiAgICBmb3IgKG1hdGNoS2V5ID0gMCwgaSA9IDAsIGlsID0gWmxpYi5SYXdEZWZsYXRlLkx6NzdNaW5MZW5ndGg7IGkgPCBpbDsgKytpKSB7XG4gICAgICBpZiAocG9zaXRpb24gKyBpID09PSBsZW5ndGgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBtYXRjaEtleSA9IChtYXRjaEtleSA8PCA4KSB8IGRhdGFBcnJheVtwb3NpdGlvbiArIGldO1xuICAgIH1cblxuICAgIC8vIOODhuODvOODluODq+OBjOacquWumue+qeOBoOOBo+OBn+OCieS9nOaIkOOBmeOCi1xuICAgIGlmICh0YWJsZVttYXRjaEtleV0gPT09IHZvaWQgMCkgeyB0YWJsZVttYXRjaEtleV0gPSBbXTsgfVxuICAgIG1hdGNoTGlzdCA9IHRhYmxlW21hdGNoS2V5XTtcblxuICAgIC8vIHNraXBcbiAgICBpZiAoc2tpcExlbmd0aC0tID4gMCkge1xuICAgICAgbWF0Y2hMaXN0LnB1c2gocG9zaXRpb24pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8g44Oe44OD44OB44OG44O844OW44Or44Gu5pu05pawICjmnIDlpKfmiLvjgorot53pm6LjgpLotoXjgYjjgabjgYTjgovjgoLjga7jgpLliYrpmaTjgZnjgospXG4gICAgd2hpbGUgKG1hdGNoTGlzdC5sZW5ndGggPiAwICYmIHBvc2l0aW9uIC0gbWF0Y2hMaXN0WzBdID4gd2luZG93U2l6ZSkge1xuICAgICAgbWF0Y2hMaXN0LnNoaWZ0KCk7XG4gICAgfVxuXG4gICAgLy8g44OH44O844K/5pyr5bC+44Gn44Oe44OD44OB44GX44KI44GG44GM44Gq44GE5aC05ZCI44Gv44Gd44Gu44G+44G+5rWB44GX44GT44KAXG4gICAgaWYgKHBvc2l0aW9uICsgWmxpYi5SYXdEZWZsYXRlLkx6NzdNaW5MZW5ndGggPj0gbGVuZ3RoKSB7XG4gICAgICBpZiAocHJldk1hdGNoKSB7XG4gICAgICAgIHdyaXRlTWF0Y2gocHJldk1hdGNoLCAtMSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoaSA9IDAsIGlsID0gbGVuZ3RoIC0gcG9zaXRpb247IGkgPCBpbDsgKytpKSB7XG4gICAgICAgIHRtcCA9IGRhdGFBcnJheVtwb3NpdGlvbiArIGldO1xuICAgICAgICBsejc3YnVmW3BvcysrXSA9IHRtcDtcbiAgICAgICAgKytmcmVxc0xpdExlblt0bXBdO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8g44Oe44OD44OB5YCZ6KOc44GL44KJ5pyA6ZW344Gu44KC44Gu44KS5o6i44GZXG4gICAgaWYgKG1hdGNoTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICBsb25nZXN0TWF0Y2ggPSB0aGlzLnNlYXJjaExvbmdlc3RNYXRjaF8oZGF0YUFycmF5LCBwb3NpdGlvbiwgbWF0Y2hMaXN0KTtcblxuICAgICAgaWYgKHByZXZNYXRjaCkge1xuICAgICAgICAvLyDnj77lnKjjga7jg57jg4Pjg4Hjga7mlrnjgYzliY3lm57jga7jg57jg4Pjg4HjgojjgorjgoLplbfjgYRcbiAgICAgICAgaWYgKHByZXZNYXRjaC5sZW5ndGggPCBsb25nZXN0TWF0Y2gubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gd3JpdGUgcHJldmlvdXMgbGl0ZXJhbFxuICAgICAgICAgIHRtcCA9IGRhdGFBcnJheVtwb3NpdGlvbiAtIDFdO1xuICAgICAgICAgIGx6NzdidWZbcG9zKytdID0gdG1wO1xuICAgICAgICAgICsrZnJlcXNMaXRMZW5bdG1wXTtcblxuICAgICAgICAgIC8vIHdyaXRlIGN1cnJlbnQgbWF0Y2hcbiAgICAgICAgICB3cml0ZU1hdGNoKGxvbmdlc3RNYXRjaCwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gd3JpdGUgcHJldmlvdXMgbWF0Y2hcbiAgICAgICAgICB3cml0ZU1hdGNoKHByZXZNYXRjaCwgLTEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGxvbmdlc3RNYXRjaC5sZW5ndGggPCBsYXp5KSB7XG4gICAgICAgIHByZXZNYXRjaCA9IGxvbmdlc3RNYXRjaDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyaXRlTWF0Y2gobG9uZ2VzdE1hdGNoLCAwKTtcbiAgICAgIH1cbiAgICAvLyDliY3lm57jg57jg4Pjg4HjgZfjgabjgYTjgabku4rlm57jg57jg4Pjg4HjgYzjgarjgYvjgaPjgZ/jgonliY3lm57jga7jgpLmjqHnlKhcbiAgICB9IGVsc2UgaWYgKHByZXZNYXRjaCkge1xuICAgICAgd3JpdGVNYXRjaChwcmV2TWF0Y2gsIC0xKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdG1wID0gZGF0YUFycmF5W3Bvc2l0aW9uXTtcbiAgICAgIGx6NzdidWZbcG9zKytdID0gdG1wO1xuICAgICAgKytmcmVxc0xpdExlblt0bXBdO1xuICAgIH1cblxuICAgIG1hdGNoTGlzdC5wdXNoKHBvc2l0aW9uKTsgLy8g44Oe44OD44OB44OG44O844OW44Or44Gr54++5Zyo44Gu5L2N572u44KS5L+d5a2YXG4gIH1cblxuICAvLyDntYLnq6/lh6bnkIZcbiAgbHo3N2J1Zltwb3MrK10gPSAyNTY7XG4gIGZyZXFzTGl0TGVuWzI1Nl0rKztcbiAgdGhpcy5mcmVxc0xpdExlbiA9IGZyZXFzTGl0TGVuO1xuICB0aGlzLmZyZXFzRGlzdCA9IGZyZXFzRGlzdDtcblxuICByZXR1cm4gLyoqIEB0eXBlIHshKFVpbnQxNkFycmF5fEFycmF5LjxudW1iZXI+KX0gKi8gKFxuICAgIFVTRV9UWVBFREFSUkFZID8gIGx6NzdidWYuc3ViYXJyYXkoMCwgcG9zKSA6IGx6NzdidWZcbiAgKTtcbn07XG5cbi8qKlxuICog44Oe44OD44OB44GX44Gf5YCZ6KOc44Gu5Lit44GL44KJ5pyA6ZW35LiA6Ie044KS5o6i44GZXG4gKiBAcGFyYW0geyFPYmplY3R9IGRhdGEgcGxhaW4gZGF0YSBieXRlIGFycmF5LlxuICogQHBhcmFtIHshbnVtYmVyfSBwb3NpdGlvbiBwbGFpbiBkYXRhIGJ5dGUgYXJyYXkgcG9zaXRpb24uXG4gKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gbWF0Y2hMaXN0IOWAmeijnOOBqOOBquOCi+S9jee9ruOBrumFjeWIly5cbiAqIEByZXR1cm4geyFabGliLlJhd0RlZmxhdGUuTHo3N01hdGNofSDmnIDplbfjgYvjgaTmnIDnn63ot53pm6Ljga7jg57jg4Pjg4Hjgqrjg5bjgrjjgqfjgq/jg4guXG4gKiBAcHJpdmF0ZVxuICovXG5abGliLlJhd0RlZmxhdGUucHJvdG90eXBlLnNlYXJjaExvbmdlc3RNYXRjaF8gPVxuZnVuY3Rpb24oZGF0YSwgcG9zaXRpb24sIG1hdGNoTGlzdCkge1xuICB2YXIgbWF0Y2gsXG4gICAgICBjdXJyZW50TWF0Y2gsXG4gICAgICBtYXRjaE1heCA9IDAsIG1hdGNoTGVuZ3RoLFxuICAgICAgaSwgaiwgbCwgZGwgPSBkYXRhLmxlbmd0aDtcblxuICAvLyDlgJnoo5zjgpLlvozjgo3jgYvjgokgMSDjgaTjgZrjgaTntZ7jgorovrzjgpPjgafjgobjgY9cbiAgcGVybWF0Y2g6XG4gIGZvciAoaSA9IDAsIGwgPSBtYXRjaExpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgbWF0Y2ggPSBtYXRjaExpc3RbbCAtIGkgLSAxXTtcbiAgICBtYXRjaExlbmd0aCA9IFpsaWIuUmF3RGVmbGF0ZS5Mejc3TWluTGVuZ3RoO1xuXG4gICAgLy8g5YmN5Zue44G+44Gn44Gu5pyA6ZW35LiA6Ie044KS5pyr5bC+44GL44KJ5LiA6Ie05qSc57Si44GZ44KLXG4gICAgaWYgKG1hdGNoTWF4ID4gWmxpYi5SYXdEZWZsYXRlLkx6NzdNaW5MZW5ndGgpIHtcbiAgICAgIGZvciAoaiA9IG1hdGNoTWF4OyBqID4gWmxpYi5SYXdEZWZsYXRlLkx6NzdNaW5MZW5ndGg7IGotLSkge1xuICAgICAgICBpZiAoZGF0YVttYXRjaCArIGogLSAxXSAhPT0gZGF0YVtwb3NpdGlvbiArIGogLSAxXSkge1xuICAgICAgICAgIGNvbnRpbnVlIHBlcm1hdGNoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBtYXRjaExlbmd0aCA9IG1hdGNoTWF4O1xuICAgIH1cblxuICAgIC8vIOacgOmVt+S4gOiHtOaOoue0olxuICAgIHdoaWxlIChtYXRjaExlbmd0aCA8IFpsaWIuUmF3RGVmbGF0ZS5Mejc3TWF4TGVuZ3RoICYmXG4gICAgICAgICAgIHBvc2l0aW9uICsgbWF0Y2hMZW5ndGggPCBkbCAmJlxuICAgICAgICAgICBkYXRhW21hdGNoICsgbWF0Y2hMZW5ndGhdID09PSBkYXRhW3Bvc2l0aW9uICsgbWF0Y2hMZW5ndGhdKSB7XG4gICAgICArK21hdGNoTGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIOODnuODg+ODgemVt+OBjOWQjOOBmOWgtOWQiOOBr+W+jOaWueOCkuWEquWFiFxuICAgIGlmIChtYXRjaExlbmd0aCA+IG1hdGNoTWF4KSB7XG4gICAgICBjdXJyZW50TWF0Y2ggPSBtYXRjaDtcbiAgICAgIG1hdGNoTWF4ID0gbWF0Y2hMZW5ndGg7XG4gICAgfVxuXG4gICAgLy8g5pyA6ZW344GM56K65a6a44GX44Gf44KJ5b6M44Gu5Yem55CG44Gv55yB55WlXG4gICAgaWYgKG1hdGNoTGVuZ3RoID09PSBabGliLlJhd0RlZmxhdGUuTHo3N01heExlbmd0aCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBabGliLlJhd0RlZmxhdGUuTHo3N01hdGNoKG1hdGNoTWF4LCBwb3NpdGlvbiAtIGN1cnJlbnRNYXRjaCk7XG59O1xuXG4vKipcbiAqIFRyZWUtVHJhbnNtaXQgU3ltYm9scyDjga7nrpflh7pcbiAqIHJlZmVyZW5jZTogUHVUVFkgRGVmbGF0ZSBpbXBsZW1lbnRhdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IGhsaXQgSExJVC5cbiAqIEBwYXJhbSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gbGl0bGVuTGVuZ3RocyDjg6rjg4bjg6njg6vjgajplbfjgZXnrKblj7fjga7nrKblj7fplbfphY3liJcuXG4gKiBAcGFyYW0ge251bWJlcn0gaGRpc3QgSERJU1QuXG4gKiBAcGFyYW0geyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IGRpc3RMZW5ndGhzIOi3nembouespuWPt+OBruespuWPt+mVt+mFjeWIly5cbiAqIEByZXR1cm4ge3tcbiAqICAgY29kZXM6ICEoQXJyYXkuPG51bWJlcj58VWludDMyQXJyYXkpLFxuICogICBmcmVxczogIShBcnJheS48bnVtYmVyPnxVaW50MzJBcnJheSlcbiAqIH19IFRyZWUtVHJhbnNtaXQgU3ltYm9scy5cbiAqL1xuWmxpYi5SYXdEZWZsYXRlLnByb3RvdHlwZS5nZXRUcmVlU3ltYm9sc18gPVxuZnVuY3Rpb24oaGxpdCwgbGl0bGVuTGVuZ3RocywgaGRpc3QsIGRpc3RMZW5ndGhzKSB7XG4gIHZhciBzcmMgPSBuZXcgKFVTRV9UWVBFREFSUkFZID8gVWludDMyQXJyYXkgOiBBcnJheSkoaGxpdCArIGhkaXN0KSxcbiAgICAgIGksIGosIHJ1bkxlbmd0aCwgbCxcbiAgICAgIHJlc3VsdCA9IG5ldyAoVVNFX1RZUEVEQVJSQVkgPyBVaW50MzJBcnJheSA6IEFycmF5KSgyODYgKyAzMCksXG4gICAgICBuUmVzdWx0LFxuICAgICAgcnB0LFxuICAgICAgZnJlcXMgPSBuZXcgKFVTRV9UWVBFREFSUkFZID8gVWludDhBcnJheSA6IEFycmF5KSgxOSk7XG5cbiAgaiA9IDA7XG4gIGZvciAoaSA9IDA7IGkgPCBobGl0OyBpKyspIHtcbiAgICBzcmNbaisrXSA9IGxpdGxlbkxlbmd0aHNbaV07XG4gIH1cbiAgZm9yIChpID0gMDsgaSA8IGhkaXN0OyBpKyspIHtcbiAgICBzcmNbaisrXSA9IGRpc3RMZW5ndGhzW2ldO1xuICB9XG5cbiAgLy8g5Yid5pyf5YyWXG4gIGlmICghVVNFX1RZUEVEQVJSQVkpIHtcbiAgICBmb3IgKGkgPSAwLCBsID0gZnJlcXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICBmcmVxc1tpXSA9IDA7XG4gICAgfVxuICB9XG5cbiAgLy8g56ym5Y+35YyWXG4gIG5SZXN1bHQgPSAwO1xuICBmb3IgKGkgPSAwLCBsID0gc3JjLmxlbmd0aDsgaSA8IGw7IGkgKz0gaikge1xuICAgIC8vIFJ1biBMZW5ndGggRW5jb2RpbmdcbiAgICBmb3IgKGogPSAxOyBpICsgaiA8IGwgJiYgc3JjW2kgKyBqXSA9PT0gc3JjW2ldOyArK2opIHt9XG5cbiAgICBydW5MZW5ndGggPSBqO1xuXG4gICAgaWYgKHNyY1tpXSA9PT0gMCkge1xuICAgICAgLy8gMCDjga7nubDjgorov5TjgZfjgYwgMyDlm57mnKrmuoDjgarjgonjgbDjgZ3jga7jgb7jgb5cbiAgICAgIGlmIChydW5MZW5ndGggPCAzKSB7XG4gICAgICAgIHdoaWxlIChydW5MZW5ndGgtLSA+IDApIHtcbiAgICAgICAgICByZXN1bHRbblJlc3VsdCsrXSA9IDA7XG4gICAgICAgICAgZnJlcXNbMF0rKztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2hpbGUgKHJ1bkxlbmd0aCA+IDApIHtcbiAgICAgICAgICAvLyDnubDjgorov5TjgZfjga/mnIDlpKcgMTM4IOOBvuOBp+OBquOBruOBp+WIh+OCiuipsOOCgeOCi1xuICAgICAgICAgIHJwdCA9IChydW5MZW5ndGggPCAxMzggPyBydW5MZW5ndGggOiAxMzgpO1xuXG4gICAgICAgICAgaWYgKHJwdCA+IHJ1bkxlbmd0aCAtIDMgJiYgcnB0IDwgcnVuTGVuZ3RoKSB7XG4gICAgICAgICAgICBycHQgPSBydW5MZW5ndGggLSAzO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDMtMTAg5ZueIC0+IDE3XG4gICAgICAgICAgaWYgKHJwdCA8PSAxMCkge1xuICAgICAgICAgICAgcmVzdWx0W25SZXN1bHQrK10gPSAxNztcbiAgICAgICAgICAgIHJlc3VsdFtuUmVzdWx0KytdID0gcnB0IC0gMztcbiAgICAgICAgICAgIGZyZXFzWzE3XSsrO1xuICAgICAgICAgIC8vIDExLTEzOCDlm54gLT4gMThcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0W25SZXN1bHQrK10gPSAxODtcbiAgICAgICAgICAgIHJlc3VsdFtuUmVzdWx0KytdID0gcnB0IC0gMTE7XG4gICAgICAgICAgICBmcmVxc1sxOF0rKztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBydW5MZW5ndGggLT0gcnB0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtuUmVzdWx0KytdID0gc3JjW2ldO1xuICAgICAgZnJlcXNbc3JjW2ldXSsrO1xuICAgICAgcnVuTGVuZ3RoLS07XG5cbiAgICAgIC8vIOe5sOOCiui/lOOBl+WbnuaVsOOBjDPlm57mnKrmuoDjgarjgonjgbDjg6njg7Pjg6zjg7PjgrDjgrnnrKblj7fjga/opoHjgonjgarjgYRcbiAgICAgIGlmIChydW5MZW5ndGggPCAzKSB7XG4gICAgICAgIHdoaWxlIChydW5MZW5ndGgtLSA+IDApIHtcbiAgICAgICAgICByZXN1bHRbblJlc3VsdCsrXSA9IHNyY1tpXTtcbiAgICAgICAgICBmcmVxc1tzcmNbaV1dKys7XG4gICAgICAgIH1cbiAgICAgIC8vIDMg5Zue5Lul5LiK44Gq44KJ44Gw44Op44Oz44Os44Oz44Kw44K556ym5Y+35YyWXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aGlsZSAocnVuTGVuZ3RoID4gMCkge1xuICAgICAgICAgIC8vIHJ1bkxlbmd0aOOCkiAzLTYg44Gn5YiG5YmyXG4gICAgICAgICAgcnB0ID0gKHJ1bkxlbmd0aCA8IDYgPyBydW5MZW5ndGggOiA2KTtcblxuICAgICAgICAgIGlmIChycHQgPiBydW5MZW5ndGggLSAzICYmIHJwdCA8IHJ1bkxlbmd0aCkge1xuICAgICAgICAgICAgcnB0ID0gcnVuTGVuZ3RoIC0gMztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXN1bHRbblJlc3VsdCsrXSA9IDE2O1xuICAgICAgICAgIHJlc3VsdFtuUmVzdWx0KytdID0gcnB0IC0gMztcbiAgICAgICAgICBmcmVxc1sxNl0rKztcblxuICAgICAgICAgIHJ1bkxlbmd0aCAtPSBycHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNvZGVzOlxuICAgICAgVVNFX1RZUEVEQVJSQVkgPyByZXN1bHQuc3ViYXJyYXkoMCwgblJlc3VsdCkgOiByZXN1bHQuc2xpY2UoMCwgblJlc3VsdCksXG4gICAgZnJlcXM6IGZyZXFzXG4gIH07XG59O1xuXG4vKipcbiAqIOODj+ODleODnuODs+espuWPt+OBrumVt+OBleOCkuWPluW+l+OBmeOCi1xuICogQHBhcmFtIHshKEFycmF5LjxudW1iZXI+fFVpbnQzMkFycmF5KX0gZnJlcXMg5Ye654++44Kr44Km44Oz44OILlxuICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IOespuWPt+mVt+OBruWItumZkC5cbiAqIEByZXR1cm4geyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IOespuWPt+mVt+mFjeWIly5cbiAqIEBwcml2YXRlXG4gKi9cblpsaWIuUmF3RGVmbGF0ZS5wcm90b3R5cGUuZ2V0TGVuZ3Roc18gPSBmdW5jdGlvbihmcmVxcywgbGltaXQpIHtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBuU3ltYm9scyA9IGZyZXFzLmxlbmd0aDtcbiAgLyoqIEB0eXBlIHtabGliLkhlYXB9ICovXG4gIHZhciBoZWFwID0gbmV3IFpsaWIuSGVhcCgyICogWmxpYi5SYXdEZWZsYXRlLkhVRk1BWCk7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gKi9cbiAgdmFyIGxlbmd0aCA9IG5ldyAoVVNFX1RZUEVEQVJSQVkgPyBVaW50OEFycmF5IDogQXJyYXkpKG5TeW1ib2xzKTtcbiAgLyoqIEB0eXBlIHtBcnJheX0gKi9cbiAgdmFyIG5vZGVzO1xuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9ICovXG4gIHZhciB2YWx1ZXM7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gKi9cbiAgdmFyIGNvZGVMZW5ndGg7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgaTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBpbDtcblxuICAvLyDphY3liJfjga7liJ3mnJ/ljJZcbiAgaWYgKCFVU0VfVFlQRURBUlJBWSkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBuU3ltYm9sczsgaSsrKSB7XG4gICAgICBsZW5ndGhbaV0gPSAwO1xuICAgIH1cbiAgfVxuXG4gIC8vIOODkuODvOODl+OBruani+eviVxuICBmb3IgKGkgPSAwOyBpIDwgblN5bWJvbHM7ICsraSkge1xuICAgIGlmIChmcmVxc1tpXSA+IDApIHtcbiAgICAgIGhlYXAucHVzaChpLCBmcmVxc1tpXSk7XG4gICAgfVxuICB9XG4gIG5vZGVzID0gbmV3IEFycmF5KGhlYXAubGVuZ3RoIC8gMik7XG4gIHZhbHVlcyA9IG5ldyAoVVNFX1RZUEVEQVJSQVkgPyBVaW50MzJBcnJheSA6IEFycmF5KShoZWFwLmxlbmd0aCAvIDIpO1xuXG4gIC8vIOmdniAwIOOBruimgee0oOOBjOS4gOOBpOOBoOOBkeOBoOOBo+OBn+WgtOWQiOOBr+OAgeOBneOBruOCt+ODs+ODnOODq+OBq+espuWPt+mVtyAxIOOCkuWJsuOCiuW9k+OBpuOBpue1guS6hlxuICBpZiAobm9kZXMubGVuZ3RoID09PSAxKSB7XG4gICAgbGVuZ3RoW2hlYXAucG9wKCkuaW5kZXhdID0gMTtcbiAgICByZXR1cm4gbGVuZ3RoO1xuICB9XG5cbiAgLy8gUmV2ZXJzZSBQYWNrYWdlIE1lcmdlIEFsZ29yaXRobSDjgavjgojjgosgQ2Fub25pY2FsIEh1ZmZtYW4gQ29kZSDjga7nrKblj7fplbfmsbrlrppcbiAgZm9yIChpID0gMCwgaWwgPSBoZWFwLmxlbmd0aCAvIDI7IGkgPCBpbDsgKytpKSB7XG4gICAgbm9kZXNbaV0gPSBoZWFwLnBvcCgpO1xuICAgIHZhbHVlc1tpXSA9IG5vZGVzW2ldLnZhbHVlO1xuICB9XG4gIGNvZGVMZW5ndGggPSB0aGlzLnJldmVyc2VQYWNrYWdlTWVyZ2VfKHZhbHVlcywgdmFsdWVzLmxlbmd0aCwgbGltaXQpO1xuXG4gIGZvciAoaSA9IDAsIGlsID0gbm9kZXMubGVuZ3RoOyBpIDwgaWw7ICsraSkge1xuICAgIGxlbmd0aFtub2Rlc1tpXS5pbmRleF0gPSBjb2RlTGVuZ3RoW2ldO1xuICB9XG5cbiAgcmV0dXJuIGxlbmd0aDtcbn07XG5cbi8qKlxuICogUmV2ZXJzZSBQYWNrYWdlIE1lcmdlIEFsZ29yaXRobS5cbiAqIEBwYXJhbSB7IShBcnJheS48bnVtYmVyPnxVaW50MzJBcnJheSl9IGZyZXFzIHNvcnRlZCBwcm9iYWJpbGl0eS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzeW1ib2xzIG51bWJlciBvZiBzeW1ib2xzLlxuICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IGNvZGUgbGVuZ3RoIGxpbWl0LlxuICogQHJldHVybiB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gY29kZSBsZW5ndGhzLlxuICovXG5abGliLlJhd0RlZmxhdGUucHJvdG90eXBlLnJldmVyc2VQYWNrYWdlTWVyZ2VfID0gZnVuY3Rpb24oZnJlcXMsIHN5bWJvbHMsIGxpbWl0KSB7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50MTZBcnJheSl9ICovXG4gIHZhciBtaW5pbXVtQ29zdCA9IG5ldyAoVVNFX1RZUEVEQVJSQVkgPyBVaW50MTZBcnJheSA6IEFycmF5KShsaW1pdCk7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gKi9cbiAgdmFyIGZsYWcgPSBuZXcgKFVTRV9UWVBFREFSUkFZID8gVWludDhBcnJheSA6IEFycmF5KShsaW1pdCk7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gKi9cbiAgdmFyIGNvZGVMZW5ndGggPSBuZXcgKFVTRV9UWVBFREFSUkFZID8gVWludDhBcnJheSA6IEFycmF5KShzeW1ib2xzKTtcbiAgLyoqIEB0eXBlIHtBcnJheX0gKi9cbiAgdmFyIHZhbHVlID0gbmV3IEFycmF5KGxpbWl0KTtcbiAgLyoqIEB0eXBlIHtBcnJheX0gKi9cbiAgdmFyIHR5cGUgID0gbmV3IEFycmF5KGxpbWl0KTtcbiAgLyoqIEB0eXBlIHtBcnJheS48bnVtYmVyPn0gKi9cbiAgdmFyIGN1cnJlbnRQb3NpdGlvbiA9IG5ldyBBcnJheShsaW1pdCk7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgZXhjZXNzID0gKDEgPDwgbGltaXQpIC0gc3ltYm9scztcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBoYWxmID0gKDEgPDwgKGxpbWl0IC0gMSkpO1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGk7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgajtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciB0O1xuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIHdlaWdodDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBuZXh0O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0galxuICAgKi9cbiAgZnVuY3Rpb24gdGFrZVBhY2thZ2Uoaikge1xuICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgIHZhciB4ID0gdHlwZVtqXVtjdXJyZW50UG9zaXRpb25bal1dO1xuXG4gICAgaWYgKHggPT09IHN5bWJvbHMpIHtcbiAgICAgIHRha2VQYWNrYWdlKGorMSk7XG4gICAgICB0YWtlUGFja2FnZShqKzEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAtLWNvZGVMZW5ndGhbeF07XG4gICAgfVxuXG4gICAgKytjdXJyZW50UG9zaXRpb25bal07XG4gIH1cblxuICBtaW5pbXVtQ29zdFtsaW1pdC0xXSA9IHN5bWJvbHM7XG5cbiAgZm9yIChqID0gMDsgaiA8IGxpbWl0OyArK2opIHtcbiAgICBpZiAoZXhjZXNzIDwgaGFsZikge1xuICAgICAgZmxhZ1tqXSA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZsYWdbal0gPSAxO1xuICAgICAgZXhjZXNzIC09IGhhbGY7XG4gICAgfVxuICAgIGV4Y2VzcyA8PD0gMTtcbiAgICBtaW5pbXVtQ29zdFtsaW1pdC0yLWpdID0gKG1pbmltdW1Db3N0W2xpbWl0LTEtal0gLyAyIHwgMCkgKyBzeW1ib2xzO1xuICB9XG4gIG1pbmltdW1Db3N0WzBdID0gZmxhZ1swXTtcblxuICB2YWx1ZVswXSA9IG5ldyBBcnJheShtaW5pbXVtQ29zdFswXSk7XG4gIHR5cGVbMF0gID0gbmV3IEFycmF5KG1pbmltdW1Db3N0WzBdKTtcbiAgZm9yIChqID0gMTsgaiA8IGxpbWl0OyArK2opIHtcbiAgICBpZiAobWluaW11bUNvc3Rbal0gPiAyICogbWluaW11bUNvc3Rbai0xXSArIGZsYWdbal0pIHtcbiAgICAgIG1pbmltdW1Db3N0W2pdID0gMiAqIG1pbmltdW1Db3N0W2otMV0gKyBmbGFnW2pdO1xuICAgIH1cbiAgICB2YWx1ZVtqXSA9IG5ldyBBcnJheShtaW5pbXVtQ29zdFtqXSk7XG4gICAgdHlwZVtqXSAgPSBuZXcgQXJyYXkobWluaW11bUNvc3Rbal0pO1xuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IHN5bWJvbHM7ICsraSkge1xuICAgIGNvZGVMZW5ndGhbaV0gPSBsaW1pdDtcbiAgfVxuXG4gIGZvciAodCA9IDA7IHQgPCBtaW5pbXVtQ29zdFtsaW1pdC0xXTsgKyt0KSB7XG4gICAgdmFsdWVbbGltaXQtMV1bdF0gPSBmcmVxc1t0XTtcbiAgICB0eXBlW2xpbWl0LTFdW3RdICA9IHQ7XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgbGltaXQ7ICsraSkge1xuICAgIGN1cnJlbnRQb3NpdGlvbltpXSA9IDA7XG4gIH1cbiAgaWYgKGZsYWdbbGltaXQtMV0gPT09IDEpIHtcbiAgICAtLWNvZGVMZW5ndGhbMF07XG4gICAgKytjdXJyZW50UG9zaXRpb25bbGltaXQtMV07XG4gIH1cblxuICBmb3IgKGogPSBsaW1pdC0yOyBqID49IDA7IC0taikge1xuICAgIGkgPSAwO1xuICAgIHdlaWdodCA9IDA7XG4gICAgbmV4dCA9IGN1cnJlbnRQb3NpdGlvbltqKzFdO1xuXG4gICAgZm9yICh0ID0gMDsgdCA8IG1pbmltdW1Db3N0W2pdOyB0KyspIHtcbiAgICAgIHdlaWdodCA9IHZhbHVlW2orMV1bbmV4dF0gKyB2YWx1ZVtqKzFdW25leHQrMV07XG5cbiAgICAgIGlmICh3ZWlnaHQgPiBmcmVxc1tpXSkge1xuICAgICAgICB2YWx1ZVtqXVt0XSA9IHdlaWdodDtcbiAgICAgICAgdHlwZVtqXVt0XSA9IHN5bWJvbHM7XG4gICAgICAgIG5leHQgKz0gMjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlW2pdW3RdID0gZnJlcXNbaV07XG4gICAgICAgIHR5cGVbal1bdF0gPSBpO1xuICAgICAgICArK2k7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY3VycmVudFBvc2l0aW9uW2pdID0gMDtcbiAgICBpZiAoZmxhZ1tqXSA9PT0gMSkge1xuICAgICAgdGFrZVBhY2thZ2Uoaik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvZGVMZW5ndGg7XG59O1xuXG4vKipcbiAqIOespuWPt+mVt+mFjeWIl+OBi+OCieODj+ODleODnuODs+espuWPt+OCkuWPluW+l+OBmeOCi1xuICogcmVmZXJlbmNlOiBQdVRUWSBEZWZsYXRlIGltcGxlbWVudGF0aW9uXG4gKiBAcGFyYW0geyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IGxlbmd0aHMg56ym5Y+36ZW36YWN5YiXLlxuICogQHJldHVybiB7IShBcnJheS48bnVtYmVyPnxVaW50MTZBcnJheSl9IOODj+ODleODnuODs+espuWPt+mFjeWIly5cbiAqIEBwcml2YXRlXG4gKi9cblpsaWIuUmF3RGVmbGF0ZS5wcm90b3R5cGUuZ2V0Q29kZXNGcm9tTGVuZ3Roc18gPSBmdW5jdGlvbihsZW5ndGhzKSB7XG4gIHZhciBjb2RlcyA9IG5ldyAoVVNFX1RZUEVEQVJSQVkgPyBVaW50MTZBcnJheSA6IEFycmF5KShsZW5ndGhzLmxlbmd0aCksXG4gICAgICBjb3VudCA9IFtdLFxuICAgICAgc3RhcnRDb2RlID0gW10sXG4gICAgICBjb2RlID0gMCwgaSwgaWwsIGosIG07XG5cbiAgLy8gQ291bnQgdGhlIGNvZGVzIG9mIGVhY2ggbGVuZ3RoLlxuICBmb3IgKGkgPSAwLCBpbCA9IGxlbmd0aHMubGVuZ3RoOyBpIDwgaWw7IGkrKykge1xuICAgIGNvdW50W2xlbmd0aHNbaV1dID0gKGNvdW50W2xlbmd0aHNbaV1dIHwgMCkgKyAxO1xuICB9XG5cbiAgLy8gRGV0ZXJtaW5lIHRoZSBzdGFydGluZyBjb2RlIGZvciBlYWNoIGxlbmd0aCBibG9jay5cbiAgZm9yIChpID0gMSwgaWwgPSBabGliLlJhd0RlZmxhdGUuTWF4Q29kZUxlbmd0aDsgaSA8PSBpbDsgaSsrKSB7XG4gICAgc3RhcnRDb2RlW2ldID0gY29kZTtcbiAgICBjb2RlICs9IGNvdW50W2ldIHwgMDtcbiAgICBjb2RlIDw8PSAxO1xuICB9XG5cbiAgLy8gRGV0ZXJtaW5lIHRoZSBjb2RlIGZvciBlYWNoIHN5bWJvbC4gTWlycm9yZWQsIG9mIGNvdXJzZS5cbiAgZm9yIChpID0gMCwgaWwgPSBsZW5ndGhzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHtcbiAgICBjb2RlID0gc3RhcnRDb2RlW2xlbmd0aHNbaV1dO1xuICAgIHN0YXJ0Q29kZVtsZW5ndGhzW2ldXSArPSAxO1xuICAgIGNvZGVzW2ldID0gMDtcblxuICAgIGZvciAoaiA9IDAsIG0gPSBsZW5ndGhzW2ldOyBqIDwgbTsgaisrKSB7XG4gICAgICBjb2Rlc1tpXSA9IChjb2Rlc1tpXSA8PCAxKSB8IChjb2RlICYgMSk7XG4gICAgICBjb2RlID4+Pj0gMTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29kZXM7XG59O1xuXG4vLyBlbmQgb2Ygc2NvcGVcbn0pO1xuXG4vKiB2aW06c2V0IGV4cGFuZHRhYiB0cz0yIHN3PTIgdHc9ODA6ICovXG4iLCJnb29nLnByb3ZpZGUoJ1psaWIuUmF3SW5mbGF0ZScpO1xuXG5nb29nLnJlcXVpcmUoJ1VTRV9UWVBFREFSUkFZJyk7XG5nb29nLnJlcXVpcmUoJ1psaWIuSHVmZm1hbicpO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBAZGVmaW5lIHtudW1iZXJ9IGJ1ZmZlciBibG9jayBzaXplLiAqL1xudmFyIFpMSUJfUkFXX0lORkxBVEVfQlVGRkVSX1NJWkUgPSAweDgwMDA7IC8vIFsgMHg4MDAwID49IFpMSUJfQlVGRkVSX0JMT0NLX1NJWkUgXVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmdvb2cuc2NvcGUoZnVuY3Rpb24oKSB7XG5cbnZhciBidWlsZEh1ZmZtYW5UYWJsZSA9IFpsaWIuSHVmZm1hbi5idWlsZEh1ZmZtYW5UYWJsZTtcblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7IShVaW50OEFycmF5fEFycmF5LjxudW1iZXI+KX0gaW5wdXQgaW5wdXQgYnVmZmVyLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdF9wYXJhbXMgb3B0aW9uIHBhcmFtZXRlci5cbiAqXG4gKiBvcHRfcGFyYW1zIOOBr+S7peS4i+OBruODl+ODreODkeODhuOCo+OCkuaMh+WumuOBmeOCi+S6i+OBjOOBp+OBjeOBvuOBmeOAglxuICogICAtIGluZGV4OiBpbnB1dCBidWZmZXIg44GuIGRlZmxhdGUg44Kz44Oz44OG44OK44Gu6ZaL5aeL5L2N572uLlxuICogICAtIGJsb2NrU2l6ZTog44OQ44OD44OV44Kh44Gu44OW44Ot44OD44Kv44K144Kk44K6LlxuICogICAtIGJ1ZmZlclR5cGU6IFpsaWIuUmF3SW5mbGF0ZS5CdWZmZXJUeXBlIOOBruWApOOBq+OCiOOBo+OBpuODkOODg+ODleOCoeOBrueuoeeQhuaWueazleOCkuaMh+WumuOBmeOCiy5cbiAqICAgLSByZXNpemU6IOeiuuS/neOBl+OBn+ODkOODg+ODleOCoeOBjOWun+mam+OBruWkp+OBjeOBleOCiOOCiuWkp+OBjeOBi+OBo+OBn+WgtOWQiOOBq+WIh+OCiuipsOOCgeOCiy5cbiAqL1xuWmxpYi5SYXdJbmZsYXRlID0gZnVuY3Rpb24oaW5wdXQsIG9wdF9wYXJhbXMpIHtcbiAgLyoqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBpbmZsYXRlZCBidWZmZXIgKi9cbiAgdGhpcy5idWZmZXI7XG4gIC8qKiBAdHlwZSB7IUFycmF5LjwoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSk+fSAqL1xuICB0aGlzLmJsb2NrcyA9IFtdO1xuICAvKiogQHR5cGUge251bWJlcn0gYmxvY2sgc2l6ZS4gKi9cbiAgdGhpcy5idWZmZXJTaXplID0gWkxJQl9SQVdfSU5GTEFURV9CVUZGRVJfU0laRTtcbiAgLyoqIEB0eXBlIHshbnVtYmVyfSB0b3RhbCBvdXRwdXQgYnVmZmVyIHBvaW50ZXIuICovXG4gIHRoaXMudG90YWxwb3MgPSAwO1xuICAvKiogQHR5cGUgeyFudW1iZXJ9IGlucHV0IGJ1ZmZlciBwb2ludGVyLiAqL1xuICB0aGlzLmlwID0gMDtcbiAgLyoqIEB0eXBlIHshbnVtYmVyfSBiaXQgc3RyZWFtIHJlYWRlciBidWZmZXIuICovXG4gIHRoaXMuYml0c2J1ZiA9IDA7XG4gIC8qKiBAdHlwZSB7IW51bWJlcn0gYml0IHN0cmVhbSByZWFkZXIgYnVmZmVyIHNpemUuICovXG4gIHRoaXMuYml0c2J1ZmxlbiA9IDA7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gaW5wdXQgYnVmZmVyLiAqL1xuICB0aGlzLmlucHV0ID0gVVNFX1RZUEVEQVJSQVkgPyBuZXcgVWludDhBcnJheShpbnB1dCkgOiBpbnB1dDtcbiAgLyoqIEB0eXBlIHshKFVpbnQ4QXJyYXl8QXJyYXkuPG51bWJlcj4pfSBvdXRwdXQgYnVmZmVyLiAqL1xuICB0aGlzLm91dHB1dDtcbiAgLyoqIEB0eXBlIHshbnVtYmVyfSBvdXRwdXQgYnVmZmVyIHBvaW50ZXIuICovXG4gIHRoaXMub3A7XG4gIC8qKiBAdHlwZSB7Ym9vbGVhbn0gaXMgZmluYWwgYmxvY2sgZmxhZy4gKi9cbiAgdGhpcy5iZmluYWwgPSBmYWxzZTtcbiAgLyoqIEB0eXBlIHtabGliLlJhd0luZmxhdGUuQnVmZmVyVHlwZX0gYnVmZmVyIG1hbmFnZW1lbnQuICovXG4gIHRoaXMuYnVmZmVyVHlwZSA9IFpsaWIuUmF3SW5mbGF0ZS5CdWZmZXJUeXBlLkFEQVBUSVZFO1xuICAvKiogQHR5cGUge2Jvb2xlYW59IHJlc2l6ZSBmbGFnIGZvciBtZW1vcnkgc2l6ZSBvcHRpbWl6YXRpb24uICovXG4gIHRoaXMucmVzaXplID0gZmFsc2U7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBwcmV2aW91cyBSTEUgdmFsdWUgKi9cbiAgdGhpcy5wcmV2O1xuXG4gIC8vIG9wdGlvbiBwYXJhbWV0ZXJzXG4gIGlmIChvcHRfcGFyYW1zIHx8ICEob3B0X3BhcmFtcyA9IHt9KSkge1xuICAgIGlmIChvcHRfcGFyYW1zWydpbmRleCddKSB7XG4gICAgICB0aGlzLmlwID0gb3B0X3BhcmFtc1snaW5kZXgnXTtcbiAgICB9XG4gICAgaWYgKG9wdF9wYXJhbXNbJ2J1ZmZlclNpemUnXSkge1xuICAgICAgdGhpcy5idWZmZXJTaXplID0gb3B0X3BhcmFtc1snYnVmZmVyU2l6ZSddO1xuICAgIH1cbiAgICBpZiAob3B0X3BhcmFtc1snYnVmZmVyVHlwZSddKSB7XG4gICAgICB0aGlzLmJ1ZmZlclR5cGUgPSBvcHRfcGFyYW1zWydidWZmZXJUeXBlJ107XG4gICAgfVxuICAgIGlmIChvcHRfcGFyYW1zWydyZXNpemUnXSkge1xuICAgICAgdGhpcy5yZXNpemUgPSBvcHRfcGFyYW1zWydyZXNpemUnXTtcbiAgICB9XG4gIH1cblxuICAvLyBpbml0aWFsaXplXG4gIHN3aXRjaCAodGhpcy5idWZmZXJUeXBlKSB7XG4gICAgY2FzZSBabGliLlJhd0luZmxhdGUuQnVmZmVyVHlwZS5CTE9DSzpcbiAgICAgIHRoaXMub3AgPSBabGliLlJhd0luZmxhdGUuTWF4QmFja3dhcmRMZW5ndGg7XG4gICAgICB0aGlzLm91dHB1dCA9XG4gICAgICAgIG5ldyAoVVNFX1RZUEVEQVJSQVkgPyBVaW50OEFycmF5IDogQXJyYXkpKFxuICAgICAgICAgIFpsaWIuUmF3SW5mbGF0ZS5NYXhCYWNrd2FyZExlbmd0aCArXG4gICAgICAgICAgdGhpcy5idWZmZXJTaXplICtcbiAgICAgICAgICBabGliLlJhd0luZmxhdGUuTWF4Q29weUxlbmd0aFxuICAgICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBabGliLlJhd0luZmxhdGUuQnVmZmVyVHlwZS5BREFQVElWRTpcbiAgICAgIHRoaXMub3AgPSAwO1xuICAgICAgdGhpcy5vdXRwdXQgPSBuZXcgKFVTRV9UWVBFREFSUkFZID8gVWludDhBcnJheSA6IEFycmF5KSh0aGlzLmJ1ZmZlclNpemUpO1xuICAgICAgdGhpcy5leHBhbmRCdWZmZXIgPSB0aGlzLmV4cGFuZEJ1ZmZlckFkYXB0aXZlO1xuICAgICAgdGhpcy5jb25jYXRCdWZmZXIgPSB0aGlzLmNvbmNhdEJ1ZmZlckR5bmFtaWM7XG4gICAgICB0aGlzLmRlY29kZUh1ZmZtYW4gPSB0aGlzLmRlY29kZUh1ZmZtYW5BZGFwdGl2ZTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaW5mbGF0ZSBtb2RlJyk7XG4gIH1cbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuWmxpYi5SYXdJbmZsYXRlLkJ1ZmZlclR5cGUgPSB7XG4gIEJMT0NLOiAwLFxuICBBREFQVElWRTogMVxufTtcblxuLyoqXG4gKiBkZWNvbXByZXNzLlxuICogQHJldHVybiB7IShVaW50OEFycmF5fEFycmF5LjxudW1iZXI+KX0gaW5mbGF0ZWQgYnVmZmVyLlxuICovXG5abGliLlJhd0luZmxhdGUucHJvdG90eXBlLmRlY29tcHJlc3MgPSBmdW5jdGlvbigpIHtcbiAgd2hpbGUgKCF0aGlzLmJmaW5hbCkge1xuICAgIHRoaXMucGFyc2VCbG9jaygpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuY29uY2F0QnVmZmVyKCk7XG59O1xuXG4vKipcbiAqIEBjb25zdFxuICogQHR5cGUge251bWJlcn0gbWF4IGJhY2t3YXJkIGxlbmd0aCBmb3IgTFo3Ny5cbiAqL1xuWmxpYi5SYXdJbmZsYXRlLk1heEJhY2t3YXJkTGVuZ3RoID0gMzI3Njg7XG5cbi8qKlxuICogQGNvbnN0XG4gKiBAdHlwZSB7bnVtYmVyfSBtYXggY29weSBsZW5ndGggZm9yIExaNzcuXG4gKi9cblpsaWIuUmF3SW5mbGF0ZS5NYXhDb3B5TGVuZ3RoID0gMjU4O1xuXG4vKipcbiAqIGh1ZmZtYW4gb3JkZXJcbiAqIEBjb25zdFxuICogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9XG4gKi9cblpsaWIuUmF3SW5mbGF0ZS5PcmRlciA9IChmdW5jdGlvbih0YWJsZSkge1xuICByZXR1cm4gVVNFX1RZUEVEQVJSQVkgPyBuZXcgVWludDE2QXJyYXkodGFibGUpIDogdGFibGU7XG59KShbMTYsIDE3LCAxOCwgMCwgOCwgNywgOSwgNiwgMTAsIDUsIDExLCA0LCAxMiwgMywgMTMsIDIsIDE0LCAxLCAxNV0pO1xuXG4vKipcbiAqIGh1ZmZtYW4gbGVuZ3RoIGNvZGUgdGFibGUuXG4gKiBAY29uc3RcbiAqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQxNkFycmF5KX1cbiAqL1xuWmxpYi5SYXdJbmZsYXRlLkxlbmd0aENvZGVUYWJsZSA9IChmdW5jdGlvbih0YWJsZSkge1xuICByZXR1cm4gVVNFX1RZUEVEQVJSQVkgPyBuZXcgVWludDE2QXJyYXkodGFibGUpIDogdGFibGU7XG59KShbXG4gIDB4MDAwMywgMHgwMDA0LCAweDAwMDUsIDB4MDAwNiwgMHgwMDA3LCAweDAwMDgsIDB4MDAwOSwgMHgwMDBhLCAweDAwMGIsXG4gIDB4MDAwZCwgMHgwMDBmLCAweDAwMTEsIDB4MDAxMywgMHgwMDE3LCAweDAwMWIsIDB4MDAxZiwgMHgwMDIzLCAweDAwMmIsXG4gIDB4MDAzMywgMHgwMDNiLCAweDAwNDMsIDB4MDA1MywgMHgwMDYzLCAweDAwNzMsIDB4MDA4MywgMHgwMGEzLCAweDAwYzMsXG4gIDB4MDBlMywgMHgwMTAyLCAweDAxMDIsIDB4MDEwMlxuXSk7XG5cbi8qKlxuICogaHVmZm1hbiBsZW5ndGggZXh0cmEtYml0cyB0YWJsZS5cbiAqIEBjb25zdFxuICogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9XG4gKi9cblpsaWIuUmF3SW5mbGF0ZS5MZW5ndGhFeHRyYVRhYmxlID0gKGZ1bmN0aW9uKHRhYmxlKSB7XG4gIHJldHVybiBVU0VfVFlQRURBUlJBWSA/IG5ldyBVaW50OEFycmF5KHRhYmxlKSA6IHRhYmxlO1xufSkoW1xuICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAyLCAyLCAyLCAyLCAzLCAzLCAzLCAzLCA0LCA0LCA0LCA0LCA1LCA1LFxuICA1LCA1LCAwLCAwLCAwXG5dKTtcblxuLyoqXG4gKiBodWZmbWFuIGRpc3QgY29kZSB0YWJsZS5cbiAqIEBjb25zdFxuICogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDE2QXJyYXkpfVxuICovXG5abGliLlJhd0luZmxhdGUuRGlzdENvZGVUYWJsZSA9IChmdW5jdGlvbih0YWJsZSkge1xuICByZXR1cm4gVVNFX1RZUEVEQVJSQVkgPyBuZXcgVWludDE2QXJyYXkodGFibGUpIDogdGFibGU7XG59KShbXG4gIDB4MDAwMSwgMHgwMDAyLCAweDAwMDMsIDB4MDAwNCwgMHgwMDA1LCAweDAwMDcsIDB4MDAwOSwgMHgwMDBkLCAweDAwMTEsXG4gIDB4MDAxOSwgMHgwMDIxLCAweDAwMzEsIDB4MDA0MSwgMHgwMDYxLCAweDAwODEsIDB4MDBjMSwgMHgwMTAxLCAweDAxODEsXG4gIDB4MDIwMSwgMHgwMzAxLCAweDA0MDEsIDB4MDYwMSwgMHgwODAxLCAweDBjMDEsIDB4MTAwMSwgMHgxODAxLCAweDIwMDEsXG4gIDB4MzAwMSwgMHg0MDAxLCAweDYwMDFcbl0pO1xuXG4vKipcbiAqIGh1ZmZtYW4gZGlzdCBleHRyYS1iaXRzIHRhYmxlLlxuICogQGNvbnN0XG4gKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX1cbiAqL1xuWmxpYi5SYXdJbmZsYXRlLkRpc3RFeHRyYVRhYmxlID0gKGZ1bmN0aW9uKHRhYmxlKSB7XG4gIHJldHVybiBVU0VfVFlQRURBUlJBWSA/IG5ldyBVaW50OEFycmF5KHRhYmxlKSA6IHRhYmxlO1xufSkoW1xuICAwLCAwLCAwLCAwLCAxLCAxLCAyLCAyLCAzLCAzLCA0LCA0LCA1LCA1LCA2LCA2LCA3LCA3LCA4LCA4LCA5LCA5LCAxMCwgMTAsIDExLFxuICAxMSwgMTIsIDEyLCAxMywgMTNcbl0pO1xuXG4vKipcbiAqIGZpeGVkIGh1ZmZtYW4gbGVuZ3RoIGNvZGUgdGFibGVcbiAqIEBjb25zdFxuICogQHR5cGUgeyFBcnJheX1cbiAqL1xuWmxpYi5SYXdJbmZsYXRlLkZpeGVkTGl0ZXJhbExlbmd0aFRhYmxlID0gKGZ1bmN0aW9uKHRhYmxlKSB7XG4gIHJldHVybiB0YWJsZTtcbn0pKChmdW5jdGlvbigpIHtcbiAgdmFyIGxlbmd0aHMgPSBuZXcgKFVTRV9UWVBFREFSUkFZID8gVWludDhBcnJheSA6IEFycmF5KSgyODgpO1xuICB2YXIgaSwgaWw7XG5cbiAgZm9yIChpID0gMCwgaWwgPSBsZW5ndGhzLmxlbmd0aDsgaSA8IGlsOyArK2kpIHtcbiAgICBsZW5ndGhzW2ldID1cbiAgICAgIChpIDw9IDE0MykgPyA4IDpcbiAgICAgIChpIDw9IDI1NSkgPyA5IDpcbiAgICAgIChpIDw9IDI3OSkgPyA3IDpcbiAgICAgIDg7XG4gIH1cblxuICByZXR1cm4gYnVpbGRIdWZmbWFuVGFibGUobGVuZ3Rocyk7XG59KSgpKTtcblxuLyoqXG4gKiBmaXhlZCBodWZmbWFuIGRpc3RhbmNlIGNvZGUgdGFibGVcbiAqIEBjb25zdFxuICogQHR5cGUgeyFBcnJheX1cbiAqL1xuWmxpYi5SYXdJbmZsYXRlLkZpeGVkRGlzdGFuY2VUYWJsZSA9IChmdW5jdGlvbih0YWJsZSkge1xuICByZXR1cm4gdGFibGU7XG59KSgoZnVuY3Rpb24oKSB7XG4gIHZhciBsZW5ndGhzID0gbmV3IChVU0VfVFlQRURBUlJBWSA/IFVpbnQ4QXJyYXkgOiBBcnJheSkoMzApO1xuICB2YXIgaSwgaWw7XG5cbiAgZm9yIChpID0gMCwgaWwgPSBsZW5ndGhzLmxlbmd0aDsgaSA8IGlsOyArK2kpIHtcbiAgICBsZW5ndGhzW2ldID0gNTtcbiAgfVxuXG4gIHJldHVybiBidWlsZEh1ZmZtYW5UYWJsZShsZW5ndGhzKTtcbn0pKCkpO1xuXG4vKipcbiAqIHBhcnNlIGRlZmxhdGVkIGJsb2NrLlxuICovXG5abGliLlJhd0luZmxhdGUucHJvdG90eXBlLnBhcnNlQmxvY2sgPSBmdW5jdGlvbigpIHtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGhlYWRlciAqL1xuICB2YXIgaGRyID0gdGhpcy5yZWFkQml0cygzKTtcblxuICAvLyBCRklOQUxcbiAgaWYgKGhkciAmIDB4MSkge1xuICAgIHRoaXMuYmZpbmFsID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIEJUWVBFXG4gIGhkciA+Pj49IDE7XG4gIHN3aXRjaCAoaGRyKSB7XG4gICAgLy8gdW5jb21wcmVzc2VkXG4gICAgY2FzZSAwOlxuICAgICAgdGhpcy5wYXJzZVVuY29tcHJlc3NlZEJsb2NrKCk7XG4gICAgICBicmVhaztcbiAgICAvLyBmaXhlZCBodWZmbWFuXG4gICAgY2FzZSAxOlxuICAgICAgdGhpcy5wYXJzZUZpeGVkSHVmZm1hbkJsb2NrKCk7XG4gICAgICBicmVhaztcbiAgICAvLyBkeW5hbWljIGh1ZmZtYW5cbiAgICBjYXNlIDI6XG4gICAgICB0aGlzLnBhcnNlRHluYW1pY0h1ZmZtYW5CbG9jaygpO1xuICAgICAgYnJlYWs7XG4gICAgLy8gcmVzZXJ2ZWQgb3Igb3RoZXJcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIEJUWVBFOiAnICsgaGRyKTtcbiAgfVxufTtcblxuLyoqXG4gKiByZWFkIGluZmxhdGUgYml0c1xuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCBiaXRzIGxlbmd0aC5cbiAqIEByZXR1cm4ge251bWJlcn0gcmVhZCBiaXRzLlxuICovXG5abGliLlJhd0luZmxhdGUucHJvdG90eXBlLnJlYWRCaXRzID0gZnVuY3Rpb24obGVuZ3RoKSB7XG4gIHZhciBiaXRzYnVmID0gdGhpcy5iaXRzYnVmO1xuICB2YXIgYml0c2J1ZmxlbiA9IHRoaXMuYml0c2J1ZmxlbjtcbiAgdmFyIGlucHV0ID0gdGhpcy5pbnB1dDtcbiAgdmFyIGlwID0gdGhpcy5pcDtcblxuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgdmFyIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAvKiogQHR5cGUge251bWJlcn0gaW5wdXQgYW5kIG91dHB1dCBieXRlLiAqL1xuICB2YXIgb2N0ZXQ7XG5cbiAgLy8gbm90IGVub3VnaCBidWZmZXJcbiAgd2hpbGUgKGJpdHNidWZsZW4gPCBsZW5ndGgpIHtcbiAgICAvLyBpbnB1dCBieXRlXG4gICAgaWYgKGlwID49IGlucHV0TGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lucHV0IGJ1ZmZlciBpcyBicm9rZW4nKTtcbiAgICB9XG5cbiAgICAvLyBjb25jYXQgb2N0ZXRcbiAgICBiaXRzYnVmIHw9IGlucHV0W2lwKytdIDw8IGJpdHNidWZsZW47XG4gICAgYml0c2J1ZmxlbiArPSA4O1xuICB9XG5cbiAgLy8gb3V0cHV0IGJ5dGVcbiAgb2N0ZXQgPSBiaXRzYnVmICYgLyogTUFTSyAqLyAoKDEgPDwgbGVuZ3RoKSAtIDEpO1xuICBiaXRzYnVmID4+Pj0gbGVuZ3RoO1xuICBiaXRzYnVmbGVuIC09IGxlbmd0aDtcblxuICB0aGlzLmJpdHNidWYgPSBiaXRzYnVmO1xuICB0aGlzLmJpdHNidWZsZW4gPSBiaXRzYnVmbGVuO1xuICB0aGlzLmlwID0gaXA7XG5cbiAgcmV0dXJuIG9jdGV0O1xufTtcblxuLyoqXG4gKiByZWFkIGh1ZmZtYW4gY29kZSB1c2luZyB0YWJsZVxuICogQHBhcmFtIHtBcnJheX0gdGFibGUgaHVmZm1hbiBjb2RlIHRhYmxlLlxuICogQHJldHVybiB7bnVtYmVyfSBodWZmbWFuIGNvZGUuXG4gKi9cblpsaWIuUmF3SW5mbGF0ZS5wcm90b3R5cGUucmVhZENvZGVCeVRhYmxlID0gZnVuY3Rpb24odGFibGUpIHtcbiAgdmFyIGJpdHNidWYgPSB0aGlzLmJpdHNidWY7XG4gIHZhciBiaXRzYnVmbGVuID0gdGhpcy5iaXRzYnVmbGVuO1xuICB2YXIgaW5wdXQgPSB0aGlzLmlucHV0O1xuICB2YXIgaXAgPSB0aGlzLmlwO1xuXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gaHVmZm1hbiBjb2RlIHRhYmxlICovXG4gIHZhciBjb2RlVGFibGUgPSB0YWJsZVswXTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIHZhciBtYXhDb2RlTGVuZ3RoID0gdGFibGVbMV07XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBjb2RlIGxlbmd0aCAmIGNvZGUgKDE2Yml0LCAxNmJpdCkgKi9cbiAgdmFyIGNvZGVXaXRoTGVuZ3RoO1xuICAvKiogQHR5cGUge251bWJlcn0gY29kZSBiaXRzIGxlbmd0aCAqL1xuICB2YXIgY29kZUxlbmd0aDtcblxuICAvLyBub3QgZW5vdWdoIGJ1ZmZlclxuICB3aGlsZSAoYml0c2J1ZmxlbiA8IG1heENvZGVMZW5ndGgpIHtcbiAgICBpZiAoaXAgPj0gaW5wdXRMZW5ndGgpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBiaXRzYnVmIHw9IGlucHV0W2lwKytdIDw8IGJpdHNidWZsZW47XG4gICAgYml0c2J1ZmxlbiArPSA4O1xuICB9XG5cbiAgLy8gcmVhZCBtYXggbGVuZ3RoXG4gIGNvZGVXaXRoTGVuZ3RoID0gY29kZVRhYmxlW2JpdHNidWYgJiAoKDEgPDwgbWF4Q29kZUxlbmd0aCkgLSAxKV07XG4gIGNvZGVMZW5ndGggPSBjb2RlV2l0aExlbmd0aCA+Pj4gMTY7XG5cbiAgdGhpcy5iaXRzYnVmID0gYml0c2J1ZiA+PiBjb2RlTGVuZ3RoO1xuICB0aGlzLmJpdHNidWZsZW4gPSBiaXRzYnVmbGVuIC0gY29kZUxlbmd0aDtcbiAgdGhpcy5pcCA9IGlwO1xuXG4gIHJldHVybiBjb2RlV2l0aExlbmd0aCAmIDB4ZmZmZjtcbn07XG5cbi8qKlxuICogcGFyc2UgdW5jb21wcmVzc2VkIGJsb2NrLlxuICovXG5abGliLlJhd0luZmxhdGUucHJvdG90eXBlLnBhcnNlVW5jb21wcmVzc2VkQmxvY2sgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGlucHV0ID0gdGhpcy5pbnB1dDtcbiAgdmFyIGlwID0gdGhpcy5pcDtcbiAgdmFyIG91dHB1dCA9IHRoaXMub3V0cHV0O1xuICB2YXIgb3AgPSB0aGlzLm9wO1xuXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICB2YXIgaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBibG9jayBsZW5ndGggKi9cbiAgdmFyIGxlbjtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IG51bWJlciBmb3IgY2hlY2sgYmxvY2sgbGVuZ3RoICovXG4gIHZhciBubGVuO1xuICAvKiogQHR5cGUge251bWJlcn0gb3V0cHV0IGJ1ZmZlciBsZW5ndGggKi9cbiAgdmFyIG9sZW5ndGggPSBvdXRwdXQubGVuZ3RoO1xuICAvKiogQHR5cGUge251bWJlcn0gY29weSBjb3VudGVyICovXG4gIHZhciBwcmVDb3B5O1xuXG4gIC8vIHNraXAgYnVmZmVyZWQgaGVhZGVyIGJpdHNcbiAgdGhpcy5iaXRzYnVmID0gMDtcbiAgdGhpcy5iaXRzYnVmbGVuID0gMDtcblxuICAvLyBsZW5cbiAgaWYgKGlwICsgMSA+PSBpbnB1dExlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB1bmNvbXByZXNzZWQgYmxvY2sgaGVhZGVyOiBMRU4nKTtcbiAgfVxuICBsZW4gPSBpbnB1dFtpcCsrXSB8IChpbnB1dFtpcCsrXSA8PCA4KTtcblxuICAvLyBubGVuXG4gIGlmIChpcCArIDEgPj0gaW5wdXRMZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgdW5jb21wcmVzc2VkIGJsb2NrIGhlYWRlcjogTkxFTicpO1xuICB9XG4gIG5sZW4gPSBpbnB1dFtpcCsrXSB8IChpbnB1dFtpcCsrXSA8PCA4KTtcblxuICAvLyBjaGVjayBsZW4gJiBubGVuXG4gIGlmIChsZW4gPT09IH5ubGVuKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHVuY29tcHJlc3NlZCBibG9jayBoZWFkZXI6IGxlbmd0aCB2ZXJpZnknKTtcbiAgfVxuXG4gIC8vIGNoZWNrIHNpemVcbiAgaWYgKGlwICsgbGVuID4gaW5wdXQubGVuZ3RoKSB7IHRocm93IG5ldyBFcnJvcignaW5wdXQgYnVmZmVyIGlzIGJyb2tlbicpOyB9XG5cbiAgLy8gZXhwYW5kIGJ1ZmZlclxuICBzd2l0Y2ggKHRoaXMuYnVmZmVyVHlwZSkge1xuICAgIGNhc2UgWmxpYi5SYXdJbmZsYXRlLkJ1ZmZlclR5cGUuQkxPQ0s6XG4gICAgICAvLyBwcmUgY29weVxuICAgICAgd2hpbGUgKG9wICsgbGVuID4gb3V0cHV0Lmxlbmd0aCkge1xuICAgICAgICBwcmVDb3B5ID0gb2xlbmd0aCAtIG9wO1xuICAgICAgICBsZW4gLT0gcHJlQ29weTtcbiAgICAgICAgaWYgKFVTRV9UWVBFREFSUkFZKSB7XG4gICAgICAgICAgb3V0cHV0LnNldChpbnB1dC5zdWJhcnJheShpcCwgaXAgKyBwcmVDb3B5KSwgb3ApO1xuICAgICAgICAgIG9wICs9IHByZUNvcHk7XG4gICAgICAgICAgaXAgKz0gcHJlQ29weTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aGlsZSAocHJlQ29weS0tKSB7XG4gICAgICAgICAgICBvdXRwdXRbb3ArK10gPSBpbnB1dFtpcCsrXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcCA9IG9wO1xuICAgICAgICBvdXRwdXQgPSB0aGlzLmV4cGFuZEJ1ZmZlcigpO1xuICAgICAgICBvcCA9IHRoaXMub3A7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIFpsaWIuUmF3SW5mbGF0ZS5CdWZmZXJUeXBlLkFEQVBUSVZFOlxuICAgICAgd2hpbGUgKG9wICsgbGVuID4gb3V0cHV0Lmxlbmd0aCkge1xuICAgICAgICBvdXRwdXQgPSB0aGlzLmV4cGFuZEJ1ZmZlcih7Zml4UmF0aW86IDJ9KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaW5mbGF0ZSBtb2RlJyk7XG4gIH1cblxuICAvLyBjb3B5XG4gIGlmIChVU0VfVFlQRURBUlJBWSkge1xuICAgIG91dHB1dC5zZXQoaW5wdXQuc3ViYXJyYXkoaXAsIGlwICsgbGVuKSwgb3ApO1xuICAgIG9wICs9IGxlbjtcbiAgICBpcCArPSBsZW47XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKGxlbi0tKSB7XG4gICAgICBvdXRwdXRbb3ArK10gPSBpbnB1dFtpcCsrXTtcbiAgICB9XG4gIH1cblxuICB0aGlzLmlwID0gaXA7XG4gIHRoaXMub3AgPSBvcDtcbiAgdGhpcy5vdXRwdXQgPSBvdXRwdXQ7XG59O1xuXG4vKipcbiAqIHBhcnNlIGZpeGVkIGh1ZmZtYW4gYmxvY2suXG4gKi9cblpsaWIuUmF3SW5mbGF0ZS5wcm90b3R5cGUucGFyc2VGaXhlZEh1ZmZtYW5CbG9jayA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmRlY29kZUh1ZmZtYW4oXG4gICAgWmxpYi5SYXdJbmZsYXRlLkZpeGVkTGl0ZXJhbExlbmd0aFRhYmxlLFxuICAgIFpsaWIuUmF3SW5mbGF0ZS5GaXhlZERpc3RhbmNlVGFibGVcbiAgKTtcbn07XG5cbi8qKlxuICogcGFyc2UgZHluYW1pYyBodWZmbWFuIGJsb2NrLlxuICovXG5abGliLlJhd0luZmxhdGUucHJvdG90eXBlLnBhcnNlRHluYW1pY0h1ZmZtYW5CbG9jayA9IGZ1bmN0aW9uKCkge1xuICAvKiogQHR5cGUge251bWJlcn0gbnVtYmVyIG9mIGxpdGVyYWwgYW5kIGxlbmd0aCBjb2Rlcy4gKi9cbiAgdmFyIGhsaXQgPSB0aGlzLnJlYWRCaXRzKDUpICsgMjU3O1xuICAvKiogQHR5cGUge251bWJlcn0gbnVtYmVyIG9mIGRpc3RhbmNlIGNvZGVzLiAqL1xuICB2YXIgaGRpc3QgPSB0aGlzLnJlYWRCaXRzKDUpICsgMTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IG51bWJlciBvZiBjb2RlIGxlbmd0aHMuICovXG4gIHZhciBoY2xlbiA9IHRoaXMucmVhZEJpdHMoNCkgKyA0O1xuICAvKiogQHR5cGUgeyEoVWludDhBcnJheXxBcnJheS48bnVtYmVyPil9IGNvZGUgbGVuZ3Rocy4gKi9cbiAgdmFyIGNvZGVMZW5ndGhzID1cbiAgICBuZXcgKFVTRV9UWVBFREFSUkFZID8gVWludDhBcnJheSA6IEFycmF5KShabGliLlJhd0luZmxhdGUuT3JkZXIubGVuZ3RoKTtcbiAgLyoqIEB0eXBlIHshQXJyYXl9IGNvZGUgbGVuZ3RocyB0YWJsZS4gKi9cbiAgdmFyIGNvZGVMZW5ndGhzVGFibGU7XG4gIC8qKiBAdHlwZSB7IShVaW50OEFycmF5fEFycmF5LjxudW1iZXI+KX0gbGl0ZXJhbCBhbmQgbGVuZ3RoIGNvZGUgbGVuZ3Rocy4gKi9cbiAgdmFyIGxpdGxlbkxlbmd0aHM7XG4gIC8qKiBAdHlwZSB7IShVaW50OEFycmF5fEFycmF5LjxudW1iZXI+KX0gZGlzdGFuY2UgY29kZSBsZW5ndGhzLiAqL1xuICB2YXIgZGlzdExlbmd0aHM7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBsb29wIGNvdW50ZXIuICovXG4gIHZhciBpO1xuXG4gIC8vIGRlY29kZSBjb2RlIGxlbmd0aHNcbiAgZm9yIChpID0gMDsgaSA8IGhjbGVuOyArK2kpIHtcbiAgICBjb2RlTGVuZ3Roc1tabGliLlJhd0luZmxhdGUuT3JkZXJbaV1dID0gdGhpcy5yZWFkQml0cygzKTtcbiAgfVxuICBpZiAoIVVTRV9UWVBFREFSUkFZKSB7XG4gICAgZm9yIChpID0gaGNsZW4sIGhjbGVuID0gY29kZUxlbmd0aHMubGVuZ3RoOyBpIDwgaGNsZW47ICsraSkge1xuICAgICAgY29kZUxlbmd0aHNbWmxpYi5SYXdJbmZsYXRlLk9yZGVyW2ldXSA9IDA7XG4gICAgfVxuICB9XG4gIGNvZGVMZW5ndGhzVGFibGUgPSBidWlsZEh1ZmZtYW5UYWJsZShjb2RlTGVuZ3Rocyk7XG5cbiAgLyoqXG4gICAqIGRlY29kZSBmdW5jdGlvblxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtIG51bWJlciBvZiBsZW5ndGhzLlxuICAgKiBAcGFyYW0geyFBcnJheX0gdGFibGUgY29kZSBsZW5ndGhzIHRhYmxlLlxuICAgKiBAcGFyYW0geyEoVWludDhBcnJheXxBcnJheS48bnVtYmVyPil9IGxlbmd0aHMgY29kZSBsZW5ndGhzIGJ1ZmZlci5cbiAgICogQHJldHVybiB7IShVaW50OEFycmF5fEFycmF5LjxudW1iZXI+KX0gY29kZSBsZW5ndGhzIGJ1ZmZlci5cbiAgICovXG4gIGZ1bmN0aW9uIGRlY29kZShudW0sIHRhYmxlLCBsZW5ndGhzKSB7XG4gICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gICAgdmFyIGNvZGU7XG4gICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gICAgdmFyIHByZXYgPSB0aGlzLnByZXY7XG4gICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gICAgdmFyIHJlcGVhdDtcbiAgICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBudW07KSB7XG4gICAgICBjb2RlID0gdGhpcy5yZWFkQ29kZUJ5VGFibGUodGFibGUpO1xuICAgICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgcmVwZWF0ID0gMyArIHRoaXMucmVhZEJpdHMoMik7XG4gICAgICAgICAgd2hpbGUgKHJlcGVhdC0tKSB7IGxlbmd0aHNbaSsrXSA9IHByZXY7IH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICByZXBlYXQgPSAzICsgdGhpcy5yZWFkQml0cygzKTtcbiAgICAgICAgICB3aGlsZSAocmVwZWF0LS0pIHsgbGVuZ3Roc1tpKytdID0gMDsgfVxuICAgICAgICAgIHByZXYgPSAwO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgIHJlcGVhdCA9IDExICsgdGhpcy5yZWFkQml0cyg3KTtcbiAgICAgICAgICB3aGlsZSAocmVwZWF0LS0pIHsgbGVuZ3Roc1tpKytdID0gMDsgfVxuICAgICAgICAgIHByZXYgPSAwO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGxlbmd0aHNbaSsrXSA9IGNvZGU7XG4gICAgICAgICAgcHJldiA9IGNvZGU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wcmV2ID0gcHJldjtcblxuICAgIHJldHVybiBsZW5ndGhzO1xuICB9XG5cbiAgLy8gbGl0ZXJhbCBhbmQgbGVuZ3RoIGNvZGVcbiAgbGl0bGVuTGVuZ3RocyA9IG5ldyAoVVNFX1RZUEVEQVJSQVkgPyBVaW50OEFycmF5IDogQXJyYXkpKGhsaXQpO1xuXG4gIC8vIGRpc3RhbmNlIGNvZGVcbiAgZGlzdExlbmd0aHMgPSBuZXcgKFVTRV9UWVBFREFSUkFZID8gVWludDhBcnJheSA6IEFycmF5KShoZGlzdCk7XG5cbiAgdGhpcy5wcmV2ID0gMDtcbiAgdGhpcy5kZWNvZGVIdWZmbWFuKFxuICAgIGJ1aWxkSHVmZm1hblRhYmxlKGRlY29kZS5jYWxsKHRoaXMsIGhsaXQsIGNvZGVMZW5ndGhzVGFibGUsIGxpdGxlbkxlbmd0aHMpKSxcbiAgICBidWlsZEh1ZmZtYW5UYWJsZShkZWNvZGUuY2FsbCh0aGlzLCBoZGlzdCwgY29kZUxlbmd0aHNUYWJsZSwgZGlzdExlbmd0aHMpKVxuICApO1xufTtcblxuLyoqXG4gKiBkZWNvZGUgaHVmZm1hbiBjb2RlXG4gKiBAcGFyYW0geyFBcnJheX0gbGl0bGVuIGxpdGVyYWwgYW5kIGxlbmd0aCBjb2RlIHRhYmxlLlxuICogQHBhcmFtIHshQXJyYXl9IGRpc3QgZGlzdGluYXRpb24gY29kZSB0YWJsZS5cbiAqL1xuWmxpYi5SYXdJbmZsYXRlLnByb3RvdHlwZS5kZWNvZGVIdWZmbWFuID0gZnVuY3Rpb24obGl0bGVuLCBkaXN0KSB7XG4gIHZhciBvdXRwdXQgPSB0aGlzLm91dHB1dDtcbiAgdmFyIG9wID0gdGhpcy5vcDtcblxuICB0aGlzLmN1cnJlbnRMaXRsZW5UYWJsZSA9IGxpdGxlbjtcblxuICAvKiogQHR5cGUge251bWJlcn0gb3V0cHV0IHBvc2l0aW9uIGxpbWl0LiAqL1xuICB2YXIgb2xlbmd0aCA9IG91dHB1dC5sZW5ndGggLSBabGliLlJhd0luZmxhdGUuTWF4Q29weUxlbmd0aDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGh1ZmZtYW4gY29kZS4gKi9cbiAgdmFyIGNvZGU7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSB0YWJsZSBpbmRleC4gKi9cbiAgdmFyIHRpO1xuICAvKiogQHR5cGUge251bWJlcn0gaHVmZm1hbiBjb2RlIGRpc3RpbmF0aW9uLiAqL1xuICB2YXIgY29kZURpc3Q7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBodWZmbWFuIGNvZGUgbGVuZ3RoLiAqL1xuICB2YXIgY29kZUxlbmd0aDtcblxuICB3aGlsZSAoKGNvZGUgPSB0aGlzLnJlYWRDb2RlQnlUYWJsZShsaXRsZW4pKSAhPT0gMjU2KSB7XG4gICAgLy8gbGl0ZXJhbFxuICAgIGlmIChjb2RlIDwgMjU2KSB7XG4gICAgICBpZiAob3AgPj0gb2xlbmd0aCkge1xuICAgICAgICB0aGlzLm9wID0gb3A7XG4gICAgICAgIG91dHB1dCA9IHRoaXMuZXhwYW5kQnVmZmVyKCk7XG4gICAgICAgIG9wID0gdGhpcy5vcDtcbiAgICAgIH1cbiAgICAgIG91dHB1dFtvcCsrXSA9IGNvZGU7XG5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGxlbmd0aCBjb2RlXG4gICAgdGkgPSBjb2RlIC0gMjU3O1xuICAgIGNvZGVMZW5ndGggPSBabGliLlJhd0luZmxhdGUuTGVuZ3RoQ29kZVRhYmxlW3RpXTtcbiAgICBpZiAoWmxpYi5SYXdJbmZsYXRlLkxlbmd0aEV4dHJhVGFibGVbdGldID4gMCkge1xuICAgICAgY29kZUxlbmd0aCArPSB0aGlzLnJlYWRCaXRzKFpsaWIuUmF3SW5mbGF0ZS5MZW5ndGhFeHRyYVRhYmxlW3RpXSk7XG4gICAgfVxuXG4gICAgLy8gZGlzdCBjb2RlXG4gICAgY29kZSA9IHRoaXMucmVhZENvZGVCeVRhYmxlKGRpc3QpO1xuICAgIGNvZGVEaXN0ID0gWmxpYi5SYXdJbmZsYXRlLkRpc3RDb2RlVGFibGVbY29kZV07XG4gICAgaWYgKFpsaWIuUmF3SW5mbGF0ZS5EaXN0RXh0cmFUYWJsZVtjb2RlXSA+IDApIHtcbiAgICAgIGNvZGVEaXN0ICs9IHRoaXMucmVhZEJpdHMoWmxpYi5SYXdJbmZsYXRlLkRpc3RFeHRyYVRhYmxlW2NvZGVdKTtcbiAgICB9XG5cbiAgICAvLyBsejc3IGRlY29kZVxuICAgIGlmIChvcCA+PSBvbGVuZ3RoKSB7XG4gICAgICB0aGlzLm9wID0gb3A7XG4gICAgICBvdXRwdXQgPSB0aGlzLmV4cGFuZEJ1ZmZlcigpO1xuICAgICAgb3AgPSB0aGlzLm9wO1xuICAgIH1cbiAgICB3aGlsZSAoY29kZUxlbmd0aC0tKSB7XG4gICAgICBvdXRwdXRbb3BdID0gb3V0cHV0WyhvcCsrKSAtIGNvZGVEaXN0XTtcbiAgICB9XG4gIH1cblxuICB3aGlsZSAodGhpcy5iaXRzYnVmbGVuID49IDgpIHtcbiAgICB0aGlzLmJpdHNidWZsZW4gLT0gODtcbiAgICB0aGlzLmlwLS07XG4gIH1cbiAgdGhpcy5vcCA9IG9wO1xufTtcblxuLyoqXG4gKiBkZWNvZGUgaHVmZm1hbiBjb2RlIChhZGFwdGl2ZSlcbiAqIEBwYXJhbSB7IUFycmF5fSBsaXRsZW4gbGl0ZXJhbCBhbmQgbGVuZ3RoIGNvZGUgdGFibGUuXG4gKiBAcGFyYW0geyFBcnJheX0gZGlzdCBkaXN0aW5hdGlvbiBjb2RlIHRhYmxlLlxuICovXG5abGliLlJhd0luZmxhdGUucHJvdG90eXBlLmRlY29kZUh1ZmZtYW5BZGFwdGl2ZSA9IGZ1bmN0aW9uKGxpdGxlbiwgZGlzdCkge1xuICB2YXIgb3V0cHV0ID0gdGhpcy5vdXRwdXQ7XG4gIHZhciBvcCA9IHRoaXMub3A7XG5cbiAgdGhpcy5jdXJyZW50TGl0bGVuVGFibGUgPSBsaXRsZW47XG5cbiAgLyoqIEB0eXBlIHtudW1iZXJ9IG91dHB1dCBwb3NpdGlvbiBsaW1pdC4gKi9cbiAgdmFyIG9sZW5ndGggPSBvdXRwdXQubGVuZ3RoO1xuICAvKiogQHR5cGUge251bWJlcn0gaHVmZm1hbiBjb2RlLiAqL1xuICB2YXIgY29kZTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IHRhYmxlIGluZGV4LiAqL1xuICB2YXIgdGk7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBodWZmbWFuIGNvZGUgZGlzdGluYXRpb24uICovXG4gIHZhciBjb2RlRGlzdDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGh1ZmZtYW4gY29kZSBsZW5ndGguICovXG4gIHZhciBjb2RlTGVuZ3RoO1xuXG4gIHdoaWxlICgoY29kZSA9IHRoaXMucmVhZENvZGVCeVRhYmxlKGxpdGxlbikpICE9PSAyNTYpIHtcbiAgICAvLyBsaXRlcmFsXG4gICAgaWYgKGNvZGUgPCAyNTYpIHtcbiAgICAgIGlmIChvcCA+PSBvbGVuZ3RoKSB7XG4gICAgICAgIG91dHB1dCA9IHRoaXMuZXhwYW5kQnVmZmVyKCk7XG4gICAgICAgIG9sZW5ndGggPSBvdXRwdXQubGVuZ3RoO1xuICAgICAgfVxuICAgICAgb3V0cHV0W29wKytdID0gY29kZTtcblxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gbGVuZ3RoIGNvZGVcbiAgICB0aSA9IGNvZGUgLSAyNTc7XG4gICAgY29kZUxlbmd0aCA9IFpsaWIuUmF3SW5mbGF0ZS5MZW5ndGhDb2RlVGFibGVbdGldO1xuICAgIGlmIChabGliLlJhd0luZmxhdGUuTGVuZ3RoRXh0cmFUYWJsZVt0aV0gPiAwKSB7XG4gICAgICBjb2RlTGVuZ3RoICs9IHRoaXMucmVhZEJpdHMoWmxpYi5SYXdJbmZsYXRlLkxlbmd0aEV4dHJhVGFibGVbdGldKTtcbiAgICB9XG5cbiAgICAvLyBkaXN0IGNvZGVcbiAgICBjb2RlID0gdGhpcy5yZWFkQ29kZUJ5VGFibGUoZGlzdCk7XG4gICAgY29kZURpc3QgPSBabGliLlJhd0luZmxhdGUuRGlzdENvZGVUYWJsZVtjb2RlXTtcbiAgICBpZiAoWmxpYi5SYXdJbmZsYXRlLkRpc3RFeHRyYVRhYmxlW2NvZGVdID4gMCkge1xuICAgICAgY29kZURpc3QgKz0gdGhpcy5yZWFkQml0cyhabGliLlJhd0luZmxhdGUuRGlzdEV4dHJhVGFibGVbY29kZV0pO1xuICAgIH1cblxuICAgIC8vIGx6NzcgZGVjb2RlXG4gICAgaWYgKG9wICsgY29kZUxlbmd0aCA+IG9sZW5ndGgpIHtcbiAgICAgIG91dHB1dCA9IHRoaXMuZXhwYW5kQnVmZmVyKCk7XG4gICAgICBvbGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcbiAgICB9XG4gICAgd2hpbGUgKGNvZGVMZW5ndGgtLSkge1xuICAgICAgb3V0cHV0W29wXSA9IG91dHB1dFsob3ArKykgLSBjb2RlRGlzdF07XG4gICAgfVxuICB9XG5cbiAgd2hpbGUgKHRoaXMuYml0c2J1ZmxlbiA+PSA4KSB7XG4gICAgdGhpcy5iaXRzYnVmbGVuIC09IDg7XG4gICAgdGhpcy5pcC0tO1xuICB9XG4gIHRoaXMub3AgPSBvcDtcbn07XG5cbi8qKlxuICogZXhwYW5kIG91dHB1dCBidWZmZXIuXG4gKiBAcGFyYW0ge09iamVjdD19IG9wdF9wYXJhbSBvcHRpb24gcGFyYW1ldGVycy5cbiAqIEByZXR1cm4geyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IG91dHB1dCBidWZmZXIuXG4gKi9cblpsaWIuUmF3SW5mbGF0ZS5wcm90b3R5cGUuZXhwYW5kQnVmZmVyID0gZnVuY3Rpb24ob3B0X3BhcmFtKSB7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gc3RvcmUgYnVmZmVyLiAqL1xuICB2YXIgYnVmZmVyID1cbiAgICBuZXcgKFVTRV9UWVBFREFSUkFZID8gVWludDhBcnJheSA6IEFycmF5KShcbiAgICAgICAgdGhpcy5vcCAtIFpsaWIuUmF3SW5mbGF0ZS5NYXhCYWNrd2FyZExlbmd0aFxuICAgICk7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBiYWNrd2FyZCBiYXNlIHBvaW50ICovXG4gIHZhciBiYWNrd2FyZCA9IHRoaXMub3AgLSBabGliLlJhd0luZmxhdGUuTWF4QmFja3dhcmRMZW5ndGg7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBjb3B5IGluZGV4LiAqL1xuICB2YXIgaTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGNvcHkgbGltaXQgKi9cbiAgdmFyIGlsO1xuXG4gIHZhciBvdXRwdXQgPSB0aGlzLm91dHB1dDtcblxuICAvLyBjb3B5IHRvIG91dHB1dCBidWZmZXJcbiAgaWYgKFVTRV9UWVBFREFSUkFZKSB7XG4gICAgYnVmZmVyLnNldChvdXRwdXQuc3ViYXJyYXkoWmxpYi5SYXdJbmZsYXRlLk1heEJhY2t3YXJkTGVuZ3RoLCBidWZmZXIubGVuZ3RoKSk7XG4gIH0gZWxzZSB7XG4gICAgZm9yIChpID0gMCwgaWwgPSBidWZmZXIubGVuZ3RoOyBpIDwgaWw7ICsraSkge1xuICAgICAgYnVmZmVyW2ldID0gb3V0cHV0W2kgKyBabGliLlJhd0luZmxhdGUuTWF4QmFja3dhcmRMZW5ndGhdO1xuICAgIH1cbiAgfVxuXG4gIHRoaXMuYmxvY2tzLnB1c2goYnVmZmVyKTtcbiAgdGhpcy50b3RhbHBvcyArPSBidWZmZXIubGVuZ3RoO1xuXG4gIC8vIGNvcHkgdG8gYmFja3dhcmQgYnVmZmVyXG4gIGlmIChVU0VfVFlQRURBUlJBWSkge1xuICAgIG91dHB1dC5zZXQoXG4gICAgICBvdXRwdXQuc3ViYXJyYXkoYmFja3dhcmQsIGJhY2t3YXJkICsgWmxpYi5SYXdJbmZsYXRlLk1heEJhY2t3YXJkTGVuZ3RoKVxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgZm9yIChpID0gMDsgaSA8IFpsaWIuUmF3SW5mbGF0ZS5NYXhCYWNrd2FyZExlbmd0aDsgKytpKSB7XG4gICAgICBvdXRwdXRbaV0gPSBvdXRwdXRbYmFja3dhcmQgKyBpXTtcbiAgICB9XG4gIH1cblxuICB0aGlzLm9wID0gWmxpYi5SYXdJbmZsYXRlLk1heEJhY2t3YXJkTGVuZ3RoO1xuXG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG4vKipcbiAqIGV4cGFuZCBvdXRwdXQgYnVmZmVyLiAoYWRhcHRpdmUpXG4gKiBAcGFyYW0ge09iamVjdD19IG9wdF9wYXJhbSBvcHRpb24gcGFyYW1ldGVycy5cbiAqIEByZXR1cm4geyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IG91dHB1dCBidWZmZXIgcG9pbnRlci5cbiAqL1xuWmxpYi5SYXdJbmZsYXRlLnByb3RvdHlwZS5leHBhbmRCdWZmZXJBZGFwdGl2ZSA9IGZ1bmN0aW9uKG9wdF9wYXJhbSkge1xuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IHN0b3JlIGJ1ZmZlci4gKi9cbiAgdmFyIGJ1ZmZlcjtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGV4cGFudGlvbiByYXRpby4gKi9cbiAgdmFyIHJhdGlvID0gKHRoaXMuaW5wdXQubGVuZ3RoIC8gdGhpcy5pcCArIDEpIHwgMDtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IG1heGltdW0gbnVtYmVyIG9mIGh1ZmZtYW4gY29kZS4gKi9cbiAgdmFyIG1heEh1ZmZDb2RlO1xuICAvKiogQHR5cGUge251bWJlcn0gbmV3IG91dHB1dCBidWZmZXIgc2l6ZS4gKi9cbiAgdmFyIG5ld1NpemU7XG4gIC8qKiBAdHlwZSB7bnVtYmVyfSBtYXggaW5mbGF0ZSBzaXplLiAqL1xuICB2YXIgbWF4SW5mbGF0ZVNpemU7XG5cbiAgdmFyIGlucHV0ID0gdGhpcy5pbnB1dDtcbiAgdmFyIG91dHB1dCA9IHRoaXMub3V0cHV0O1xuXG4gIGlmIChvcHRfcGFyYW0pIHtcbiAgICBpZiAodHlwZW9mIG9wdF9wYXJhbS5maXhSYXRpbyA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJhdGlvID0gb3B0X3BhcmFtLmZpeFJhdGlvO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdF9wYXJhbS5hZGRSYXRpbyA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJhdGlvICs9IG9wdF9wYXJhbS5hZGRSYXRpbztcbiAgICB9XG4gIH1cblxuICAvLyBjYWxjdWxhdGUgbmV3IGJ1ZmZlciBzaXplXG4gIGlmIChyYXRpbyA8IDIpIHtcbiAgICBtYXhIdWZmQ29kZSA9XG4gICAgICAoaW5wdXQubGVuZ3RoIC0gdGhpcy5pcCkgLyB0aGlzLmN1cnJlbnRMaXRsZW5UYWJsZVsyXTtcbiAgICBtYXhJbmZsYXRlU2l6ZSA9IChtYXhIdWZmQ29kZSAvIDIgKiAyNTgpIHwgMDtcbiAgICBuZXdTaXplID0gbWF4SW5mbGF0ZVNpemUgPCBvdXRwdXQubGVuZ3RoID9cbiAgICAgIG91dHB1dC5sZW5ndGggKyBtYXhJbmZsYXRlU2l6ZSA6XG4gICAgICBvdXRwdXQubGVuZ3RoIDw8IDE7XG4gIH0gZWxzZSB7XG4gICAgbmV3U2l6ZSA9IG91dHB1dC5sZW5ndGggKiByYXRpbztcbiAgfVxuXG4gIC8vIGJ1ZmZlciBleHBhbnRpb25cbiAgaWYgKFVTRV9UWVBFREFSUkFZKSB7XG4gICAgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkobmV3U2l6ZSk7XG4gICAgYnVmZmVyLnNldChvdXRwdXQpO1xuICB9IGVsc2Uge1xuICAgIGJ1ZmZlciA9IG91dHB1dDtcbiAgfVxuXG4gIHRoaXMub3V0cHV0ID0gYnVmZmVyO1xuXG4gIHJldHVybiB0aGlzLm91dHB1dDtcbn07XG5cbi8qKlxuICogY29uY2F0IG91dHB1dCBidWZmZXIuXG4gKiBAcmV0dXJuIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBvdXRwdXQgYnVmZmVyLlxuICovXG5abGliLlJhd0luZmxhdGUucHJvdG90eXBlLmNvbmNhdEJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAvKiogQHR5cGUge251bWJlcn0gYnVmZmVyIHBvaW50ZXIuICovXG4gIHZhciBwb3MgPSAwO1xuICAvKiogQHR5cGUge251bWJlcn0gYnVmZmVyIHBvaW50ZXIuICovXG4gIHZhciBsaW1pdCA9IHRoaXMudG90YWxwb3MgKyAodGhpcy5vcCAtIFpsaWIuUmF3SW5mbGF0ZS5NYXhCYWNrd2FyZExlbmd0aCk7XG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gb3V0cHV0IGJsb2NrIGFycmF5LiAqL1xuICB2YXIgb3V0cHV0ID0gdGhpcy5vdXRwdXQ7XG4gIC8qKiBAdHlwZSB7IUFycmF5fSBibG9ja3MgYXJyYXkuICovXG4gIHZhciBibG9ja3MgPSB0aGlzLmJsb2NrcztcbiAgLyoqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBvdXRwdXQgYmxvY2sgYXJyYXkuICovXG4gIHZhciBibG9jaztcbiAgLyoqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBvdXRwdXQgYnVmZmVyLiAqL1xuICB2YXIgYnVmZmVyID0gbmV3IChVU0VfVFlQRURBUlJBWSA/IFVpbnQ4QXJyYXkgOiBBcnJheSkobGltaXQpO1xuICAvKiogQHR5cGUge251bWJlcn0gbG9vcCBjb3VudGVyLiAqL1xuICB2YXIgaTtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGxvb3AgbGltaXRlci4gKi9cbiAgdmFyIGlsO1xuICAvKiogQHR5cGUge251bWJlcn0gbG9vcCBjb3VudGVyLiAqL1xuICB2YXIgajtcbiAgLyoqIEB0eXBlIHtudW1iZXJ9IGxvb3AgbGltaXRlci4gKi9cbiAgdmFyIGpsO1xuXG4gIC8vIHNpbmdsZSBidWZmZXJcbiAgaWYgKGJsb2Nrcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gVVNFX1RZUEVEQVJSQVkgP1xuICAgICAgdGhpcy5vdXRwdXQuc3ViYXJyYXkoWmxpYi5SYXdJbmZsYXRlLk1heEJhY2t3YXJkTGVuZ3RoLCB0aGlzLm9wKSA6XG4gICAgICB0aGlzLm91dHB1dC5zbGljZShabGliLlJhd0luZmxhdGUuTWF4QmFja3dhcmRMZW5ndGgsIHRoaXMub3ApO1xuICB9XG5cbiAgLy8gY29weSB0byBidWZmZXJcbiAgZm9yIChpID0gMCwgaWwgPSBibG9ja3MubGVuZ3RoOyBpIDwgaWw7ICsraSkge1xuICAgIGJsb2NrID0gYmxvY2tzW2ldO1xuICAgIGZvciAoaiA9IDAsIGpsID0gYmxvY2subGVuZ3RoOyBqIDwgamw7ICsraikge1xuICAgICAgYnVmZmVyW3BvcysrXSA9IGJsb2NrW2pdO1xuICAgIH1cbiAgfVxuXG4gIC8vIGN1cnJlbnQgYnVmZmVyXG4gIGZvciAoaSA9IFpsaWIuUmF3SW5mbGF0ZS5NYXhCYWNrd2FyZExlbmd0aCwgaWwgPSB0aGlzLm9wOyBpIDwgaWw7ICsraSkge1xuICAgIGJ1ZmZlcltwb3MrK10gPSBvdXRwdXRbaV07XG4gIH1cblxuICB0aGlzLmJsb2NrcyA9IFtdO1xuICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcblxuICByZXR1cm4gdGhpcy5idWZmZXI7XG59O1xuXG4vKipcbiAqIGNvbmNhdCBvdXRwdXQgYnVmZmVyLiAoZHluYW1pYylcbiAqIEByZXR1cm4geyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IG91dHB1dCBidWZmZXIuXG4gKi9cblpsaWIuUmF3SW5mbGF0ZS5wcm90b3R5cGUuY29uY2F0QnVmZmVyRHluYW1pYyA9IGZ1bmN0aW9uKCkge1xuICAvKiogQHR5cGUge0FycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXl9IG91dHB1dCBidWZmZXIuICovXG4gIHZhciBidWZmZXI7XG4gIHZhciBvcCA9IHRoaXMub3A7XG5cbiAgaWYgKFVTRV9UWVBFREFSUkFZKSB7XG4gICAgaWYgKHRoaXMucmVzaXplKSB7XG4gICAgICBidWZmZXIgPSBuZXcgVWludDhBcnJheShvcCk7XG4gICAgICBidWZmZXIuc2V0KHRoaXMub3V0cHV0LnN1YmFycmF5KDAsIG9wKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1ZmZlciA9IHRoaXMub3V0cHV0LnN1YmFycmF5KDAsIG9wKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHRoaXMub3V0cHV0Lmxlbmd0aCA+IG9wKSB7XG4gICAgICB0aGlzLm91dHB1dC5sZW5ndGggPSBvcDtcbiAgICB9XG4gICAgYnVmZmVyID0gdGhpcy5vdXRwdXQ7XG4gIH1cblxuICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcblxuICByZXR1cm4gdGhpcy5idWZmZXI7XG59O1xuXG4vLyBlbmQgb2Ygc2NvcGVcbn0pO1xuXG4vKiB2aW06c2V0IGV4cGFuZHRhYiB0cz0yIHN3PTIgdHc9ODA6ICovXG4iLCJnb29nLnByb3ZpZGUoJ1psaWIuWmlwJyk7XHJcblxyXG5nb29nLnJlcXVpcmUoJ1VTRV9UWVBFREFSUkFZJyk7XHJcbmdvb2cucmVxdWlyZSgnWmxpYi5SYXdEZWZsYXRlJyk7XHJcbmdvb2cucmVxdWlyZSgnWmxpYi5DUkMzMicpO1xyXG5cclxuZ29vZy5zY29wZShmdW5jdGlvbigpIHtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge09iamVjdD19IG9wdF9wYXJhbXMgb3B0aW9ucy5cclxuICogQGNvbnN0cnVjdG9yXHJcbiAqL1xyXG5abGliLlppcCA9IGZ1bmN0aW9uKG9wdF9wYXJhbXMpIHtcclxuICBvcHRfcGFyYW1zID0gb3B0X3BhcmFtcyB8fCB7fTtcclxuICAvKiogQHR5cGUge0FycmF5Ljx7XHJcbiAgICogICBidWZmZXI6ICEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSksXHJcbiAgICogICBvcHRpb246IE9iamVjdCxcclxuICAgKiAgIGNvbXByZXNzZWQ6IGJvb2xlYW4sXHJcbiAgICogICBlbmNyeXB0ZWQ6IGJvb2xlYW4sXHJcbiAgICogICBzaXplOiBudW1iZXIsXHJcbiAgICogICBjcmMzMjogbnVtYmVyXHJcbiAgICogfT59ICovXHJcbiAgdGhpcy5maWxlcyA9IFtdO1xyXG4gIC8qKiBAdHlwZSB7KEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSAqL1xyXG4gIHRoaXMuY29tbWVudCA9IG9wdF9wYXJhbXNbJ2NvbW1lbnQnXTtcclxuICAvKiogQHR5cGUgeyhBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gKi9cclxuICB0aGlzLnBhc3N3b3JkO1xyXG59O1xyXG5cclxuXHJcbi8qKlxyXG4gKiBAZW51bSB7bnVtYmVyfVxyXG4gKi9cclxuWmxpYi5aaXAuQ29tcHJlc3Npb25NZXRob2QgPSB7XHJcbiAgU1RPUkU6IDAsXHJcbiAgREVGTEFURTogOFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBlbnVtIHtudW1iZXJ9XHJcbiAqL1xyXG5abGliLlppcC5PcGVyYXRpbmdTeXN0ZW0gPSB7XHJcbiAgTVNET1M6IDAsXHJcbiAgVU5JWDogMyxcclxuICBNQUNJTlRPU0g6IDdcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZW51bSB7bnVtYmVyfVxyXG4gKi9cclxuWmxpYi5aaXAuRmxhZ3MgPSB7XHJcbiAgRU5DUllQVDogICAgMHgwMDAxLFxyXG4gIERFU0NSSVBUT1I6IDB4MDAwOCxcclxuICBVVEY4OiAgICAgICAweDA4MDBcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59XHJcbiAqIEBjb25zdFxyXG4gKi9cclxuWmxpYi5aaXAuRmlsZUhlYWRlclNpZ25hdHVyZSA9IFsweDUwLCAweDRiLCAweDAxLCAweDAyXTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7QXJyYXkuPG51bWJlcj59XHJcbiAqIEBjb25zdFxyXG4gKi9cclxuWmxpYi5aaXAuTG9jYWxGaWxlSGVhZGVyU2lnbmF0dXJlID0gWzB4NTAsIDB4NGIsIDB4MDMsIDB4MDRdO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHtBcnJheS48bnVtYmVyPn1cclxuICogQGNvbnN0XHJcbiAqL1xyXG5abGliLlppcC5DZW50cmFsRGlyZWN0b3J5U2lnbmF0dXJlID0gWzB4NTAsIDB4NGIsIDB4MDUsIDB4MDZdO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj58VWludDhBcnJheX0gaW5wdXRcclxuICogQHBhcmFtIHtPYmplY3Q9fSBvcHRfcGFyYW1zIG9wdGlvbnMuXHJcbiAqL1xyXG5abGliLlppcC5wcm90b3R5cGUuYWRkRmlsZSA9IGZ1bmN0aW9uKGlucHV0LCBvcHRfcGFyYW1zKSB7XHJcbiAgb3B0X3BhcmFtcyA9IG9wdF9wYXJhbXMgfHwge307XHJcbiAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXHJcbiAgdmFyIGZpbGVuYW1lID0gJycgfHwgb3B0X3BhcmFtc1snZmlsZW5hbWUnXTtcclxuICAvKiogQHR5cGUge2Jvb2xlYW59ICovXHJcbiAgdmFyIGNvbXByZXNzZWQ7XHJcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXHJcbiAgdmFyIHNpemUgPSBpbnB1dC5sZW5ndGg7XHJcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXHJcbiAgdmFyIGNyYzMyID0gMDtcclxuXHJcbiAgaWYgKFVTRV9UWVBFREFSUkFZICYmIGlucHV0IGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgIGlucHV0ID0gbmV3IFVpbnQ4QXJyYXkoaW5wdXQpO1xyXG4gIH1cclxuXHJcbiAgLy8gZGVmYXVsdFxyXG4gIGlmICh0eXBlb2Ygb3B0X3BhcmFtc1snY29tcHJlc3Npb25NZXRob2QnXSAhPT0gJ251bWJlcicpIHtcclxuICAgIG9wdF9wYXJhbXNbJ2NvbXByZXNzaW9uTWV0aG9kJ10gPSBabGliLlppcC5Db21wcmVzc2lvbk1ldGhvZC5ERUZMQVRFO1xyXG4gIH1cclxuXHJcbiAgLy8g44Gd44Gu5aC044Gn5Zyn57iu44GZ44KL5aC05ZCIXHJcbiAgaWYgKG9wdF9wYXJhbXNbJ2NvbXByZXNzJ10pIHtcclxuICAgIHN3aXRjaCAob3B0X3BhcmFtc1snY29tcHJlc3Npb25NZXRob2QnXSkge1xyXG4gICAgICBjYXNlIFpsaWIuWmlwLkNvbXByZXNzaW9uTWV0aG9kLlNUT1JFOlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFpsaWIuWmlwLkNvbXByZXNzaW9uTWV0aG9kLkRFRkxBVEU6XHJcbiAgICAgICAgY3JjMzIgPSBabGliLkNSQzMyLmNhbGMoaW5wdXQpO1xyXG4gICAgICAgIGlucHV0ID0gdGhpcy5kZWZsYXRlV2l0aE9wdGlvbihpbnB1dCwgb3B0X3BhcmFtcyk7XHJcbiAgICAgICAgY29tcHJlc3NlZCA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZDonICsgb3B0X3BhcmFtc1snY29tcHJlc3Npb25NZXRob2QnXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0aGlzLmZpbGVzLnB1c2goe1xyXG4gICAgYnVmZmVyOiBpbnB1dCxcclxuICAgIG9wdGlvbjogb3B0X3BhcmFtcyxcclxuICAgIGNvbXByZXNzZWQ6IGNvbXByZXNzZWQsXHJcbiAgICBlbmNyeXB0ZWQ6IGZhbHNlLFxyXG4gICAgc2l6ZTogc2l6ZSxcclxuICAgIGNyYzMyOiBjcmMzMlxyXG4gIH0pO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7KEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBwYXNzd29yZFxyXG4gKi9cclxuWmxpYi5aaXAucHJvdG90eXBlLnNldFBhc3N3b3JkID0gZnVuY3Rpb24ocGFzc3dvcmQpIHtcclxuICB0aGlzLnBhc3N3b3JkID0gcGFzc3dvcmQ7XHJcbn07XHJcblxyXG5abGliLlppcC5wcm90b3R5cGUuY29tcHJlc3MgPSBmdW5jdGlvbigpIHtcclxuICAvKiogQHR5cGUge0FycmF5Ljx7XHJcbiAgICogICBidWZmZXI6ICEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSksXHJcbiAgICogICBvcHRpb246IE9iamVjdCxcclxuICAgKiAgIGNvbXByZXNzZWQ6IGJvb2xlYW4sXHJcbiAgICogICBlbmNyeXB0ZWQ6IGJvb2xlYW4sXHJcbiAgICogICBzaXplOiBudW1iZXIsXHJcbiAgICogICBjcmMzMjogbnVtYmVyXHJcbiAgICogfT59ICovXHJcbiAgdmFyIGZpbGVzID0gdGhpcy5maWxlcztcclxuICAvKiogQHR5cGUge3tcclxuICAgKiAgIGJ1ZmZlcjogIShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KSxcclxuICAgKiAgIG9wdGlvbjogT2JqZWN0LFxyXG4gICAqICAgY29tcHJlc3NlZDogYm9vbGVhbixcclxuICAgKiAgIGVuY3J5cHRlZDogYm9vbGVhbixcclxuICAgKiAgIHNpemU6IG51bWJlcixcclxuICAgKiAgIGNyYzMyOiBudW1iZXJcclxuICAgKiB9fSAqL1xyXG4gIHZhciBmaWxlO1xyXG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gKi9cclxuICB2YXIgb3V0cHV0O1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHZhciBvcDE7XHJcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXHJcbiAgdmFyIG9wMjtcclxuICAvKiogQHR5cGUge251bWJlcn0gKi9cclxuICB2YXIgb3AzO1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHZhciBsb2NhbEZpbGVTaXplID0gMDtcclxuICAvKiogQHR5cGUge251bWJlcn0gKi9cclxuICB2YXIgY2VudHJhbERpcmVjdG9yeVNpemUgPSAwO1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHZhciBlbmRPZkNlbnRyYWxEaXJlY3RvcnlTaXplO1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHZhciBvZmZzZXQ7XHJcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXHJcbiAgdmFyIG5lZWRWZXJzaW9uO1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHZhciBmbGFncztcclxuICAvKiogQHR5cGUge1psaWIuWmlwLkNvbXByZXNzaW9uTWV0aG9kfSAqL1xyXG4gIHZhciBjb21wcmVzc2lvbk1ldGhvZDtcclxuICAvKiogQHR5cGUge0RhdGV9ICovXHJcbiAgdmFyIGRhdGU7XHJcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXHJcbiAgdmFyIGNyYzMyO1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHZhciBzaXplO1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHZhciBwbGFpblNpemU7XHJcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXHJcbiAgdmFyIGZpbGVuYW1lTGVuZ3RoO1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHZhciBleHRyYUZpZWxkTGVuZ3RoO1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHZhciBjb21tZW50TGVuZ3RoO1xyXG4gIC8qKiBAdHlwZSB7KEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSAqL1xyXG4gIHZhciBmaWxlbmFtZTtcclxuICAvKiogQHR5cGUgeyhBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gKi9cclxuICB2YXIgZXh0cmFGaWVsZDtcclxuICAvKiogQHR5cGUgeyhBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gKi9cclxuICB2YXIgY29tbWVudDtcclxuICAvKiogQHR5cGUgeyhBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gKi9cclxuICB2YXIgYnVmZmVyO1xyXG4gIC8qKiBAdHlwZSB7Kn0gKi9cclxuICB2YXIgdG1wO1xyXG4gIC8qKiBAdHlwZSB7QXJyYXkuPG51bWJlcj58VWludDMyQXJyYXl8T2JqZWN0fSAqL1xyXG4gIHZhciBrZXk7XHJcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXHJcbiAgdmFyIGk7XHJcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXHJcbiAgdmFyIGlsO1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHZhciBqO1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHZhciBqbDtcclxuXHJcbiAgLy8g44OV44Kh44Kk44Or44Gu5Zyn57iuXHJcbiAgZm9yIChpID0gMCwgaWwgPSBmaWxlcy5sZW5ndGg7IGkgPCBpbDsgKytpKSB7XHJcbiAgICBmaWxlID0gZmlsZXNbaV07XHJcbiAgICBmaWxlbmFtZUxlbmd0aCA9XHJcbiAgICAgIChmaWxlLm9wdGlvblsnZmlsZW5hbWUnXSkgPyBmaWxlLm9wdGlvblsnZmlsZW5hbWUnXS5sZW5ndGggOiAwO1xyXG4gICAgZXh0cmFGaWVsZExlbmd0aCA9XHJcbiAgICAgIChmaWxlLm9wdGlvblsnZXh0cmFGaWVsZCddKSA/IGZpbGUub3B0aW9uWydleHRyYUZpZWxkJ10ubGVuZ3RoIDogMDtcclxuICAgIGNvbW1lbnRMZW5ndGggPVxyXG4gICAgICAoZmlsZS5vcHRpb25bJ2NvbW1lbnQnXSkgPyBmaWxlLm9wdGlvblsnY29tbWVudCddLmxlbmd0aCA6IDA7XHJcblxyXG4gICAgLy8g5Zyn57iu44GV44KM44Gm44GE44Gq44GL44Gj44Gf44KJ5Zyn57iuXHJcbiAgICBpZiAoIWZpbGUuY29tcHJlc3NlZCkge1xyXG4gICAgICAvLyDlnKfnuK7liY3jgasgQ1JDMzIg44Gu6KiI566X44KS44GX44Gm44GK44GPXHJcbiAgICAgIGZpbGUuY3JjMzIgPSBabGliLkNSQzMyLmNhbGMoZmlsZS5idWZmZXIpO1xyXG5cclxuICAgICAgc3dpdGNoIChmaWxlLm9wdGlvblsnY29tcHJlc3Npb25NZXRob2QnXSkge1xyXG4gICAgICAgIGNhc2UgWmxpYi5aaXAuQ29tcHJlc3Npb25NZXRob2QuU1RPUkU6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFpsaWIuWmlwLkNvbXByZXNzaW9uTWV0aG9kLkRFRkxBVEU6XHJcbiAgICAgICAgICBmaWxlLmJ1ZmZlciA9IHRoaXMuZGVmbGF0ZVdpdGhPcHRpb24oZmlsZS5idWZmZXIsIGZpbGUub3B0aW9uKTtcclxuICAgICAgICAgIGZpbGUuY29tcHJlc3NlZCA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZDonICsgZmlsZS5vcHRpb25bJ2NvbXByZXNzaW9uTWV0aG9kJ10pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZW5jcnlwdGlvblxyXG4gICAgaWYgKGZpbGUub3B0aW9uWydwYXNzd29yZCddICE9PSB2b2lkIDB8fCB0aGlzLnBhc3N3b3JkICE9PSB2b2lkIDApIHtcclxuICAgICAgLy8gaW5pdCBlbmNyeXB0aW9uXHJcbiAgICAgIGtleSA9IHRoaXMuY3JlYXRlRW5jcnlwdGlvbktleShmaWxlLm9wdGlvblsncGFzc3dvcmQnXSB8fCB0aGlzLnBhc3N3b3JkKTtcclxuXHJcbiAgICAgIC8vIGFkZCBoZWFkZXJcclxuICAgICAgYnVmZmVyID0gZmlsZS5idWZmZXI7XHJcbiAgICAgIGlmIChVU0VfVFlQRURBUlJBWSkge1xyXG4gICAgICAgIHRtcCA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlci5sZW5ndGggKyAxMik7XHJcbiAgICAgICAgdG1wLnNldChidWZmZXIsIDEyKTtcclxuICAgICAgICBidWZmZXIgPSB0bXA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYnVmZmVyLnVuc2hpZnQoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvciAoaiA9IDA7IGogPCAxMjsgKytqKSB7XHJcbiAgICAgICAgYnVmZmVyW2pdID0gdGhpcy5lbmNvZGUoXHJcbiAgICAgICAgICBrZXksXHJcbiAgICAgICAgICBpID09PSAxMSA/IChmaWxlLmNyYzMyICYgMHhmZikgOiAoTWF0aC5yYW5kb20oKSAqIDI1NiB8IDApXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gZGF0YSBlbmNyeXB0aW9uXHJcbiAgICAgIGZvciAoamwgPSBidWZmZXIubGVuZ3RoOyBqIDwgamw7ICsraikge1xyXG4gICAgICAgIGJ1ZmZlcltqXSA9IHRoaXMuZW5jb2RlKGtleSwgYnVmZmVyW2pdKTtcclxuICAgICAgfVxyXG4gICAgICBmaWxlLmJ1ZmZlciA9IGJ1ZmZlcjtcclxuICAgIH1cclxuXHJcbiAgICAvLyDlv4XopoHjg5Djg4Pjg5XjgqHjgrXjgqTjgrrjga7oqIjnrpdcclxuICAgIGxvY2FsRmlsZVNpemUgKz1cclxuICAgICAgLy8gbG9jYWwgZmlsZSBoZWFkZXJcclxuICAgICAgMzAgKyBmaWxlbmFtZUxlbmd0aCArXHJcbiAgICAgIC8vIGZpbGUgZGF0YVxyXG4gICAgICBmaWxlLmJ1ZmZlci5sZW5ndGg7XHJcblxyXG4gICAgY2VudHJhbERpcmVjdG9yeVNpemUgKz1cclxuICAgICAgLy8gZmlsZSBoZWFkZXJcclxuICAgICAgNDYgKyBmaWxlbmFtZUxlbmd0aCArIGNvbW1lbnRMZW5ndGg7XHJcbiAgfVxyXG5cclxuICAvLyBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnlcclxuICBlbmRPZkNlbnRyYWxEaXJlY3RvcnlTaXplID0gNDYgKyAodGhpcy5jb21tZW50ID8gdGhpcy5jb21tZW50Lmxlbmd0aCA6IDApO1xyXG4gIG91dHB1dCA9IG5ldyAoVVNFX1RZUEVEQVJSQVkgPyBVaW50OEFycmF5IDogQXJyYXkpKFxyXG4gICAgbG9jYWxGaWxlU2l6ZSArIGNlbnRyYWxEaXJlY3RvcnlTaXplICsgZW5kT2ZDZW50cmFsRGlyZWN0b3J5U2l6ZVxyXG4gICk7XHJcbiAgb3AxID0gMDtcclxuICBvcDIgPSBsb2NhbEZpbGVTaXplO1xyXG4gIG9wMyA9IG9wMiArIGNlbnRyYWxEaXJlY3RvcnlTaXplO1xyXG5cclxuICAvLyDjg5XjgqHjgqTjg6vjga7lnKfnuK5cclxuICBmb3IgKGkgPSAwLCBpbCA9IGZpbGVzLmxlbmd0aDsgaSA8IGlsOyArK2kpIHtcclxuICAgIGZpbGUgPSBmaWxlc1tpXTtcclxuICAgIGZpbGVuYW1lTGVuZ3RoID1cclxuICAgICAgZmlsZS5vcHRpb25bJ2ZpbGVuYW1lJ10gPyBmaWxlLm9wdGlvblsnZmlsZW5hbWUnXS5sZW5ndGggOiAgMDtcclxuICAgIGV4dHJhRmllbGRMZW5ndGggPSAwOyAvLyBUT0RPXHJcbiAgICBjb21tZW50TGVuZ3RoID1cclxuICAgICAgZmlsZS5vcHRpb25bJ2NvbW1lbnQnXSA/IGZpbGUub3B0aW9uWydjb21tZW50J10ubGVuZ3RoIDogMDtcclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIGxvY2FsIGZpbGUgaGVhZGVyICYgZmlsZSBoZWFkZXJcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG9mZnNldCA9IG9wMTtcclxuXHJcbiAgICAvLyBzaWduYXR1cmVcclxuICAgIC8vIGxvY2FsIGZpbGUgaGVhZGVyXHJcbiAgICBvdXRwdXRbb3AxKytdID0gWmxpYi5aaXAuTG9jYWxGaWxlSGVhZGVyU2lnbmF0dXJlWzBdO1xyXG4gICAgb3V0cHV0W29wMSsrXSA9IFpsaWIuWmlwLkxvY2FsRmlsZUhlYWRlclNpZ25hdHVyZVsxXTtcclxuICAgIG91dHB1dFtvcDErK10gPSBabGliLlppcC5Mb2NhbEZpbGVIZWFkZXJTaWduYXR1cmVbMl07XHJcbiAgICBvdXRwdXRbb3AxKytdID0gWmxpYi5aaXAuTG9jYWxGaWxlSGVhZGVyU2lnbmF0dXJlWzNdO1xyXG4gICAgLy8gZmlsZSBoZWFkZXJcclxuICAgIG91dHB1dFtvcDIrK10gPSBabGliLlppcC5GaWxlSGVhZGVyU2lnbmF0dXJlWzBdO1xyXG4gICAgb3V0cHV0W29wMisrXSA9IFpsaWIuWmlwLkZpbGVIZWFkZXJTaWduYXR1cmVbMV07XHJcbiAgICBvdXRwdXRbb3AyKytdID0gWmxpYi5aaXAuRmlsZUhlYWRlclNpZ25hdHVyZVsyXTtcclxuICAgIG91dHB1dFtvcDIrK10gPSBabGliLlppcC5GaWxlSGVhZGVyU2lnbmF0dXJlWzNdO1xyXG5cclxuICAgIC8vIGNvbXByZXNzb3IgaW5mb1xyXG4gICAgbmVlZFZlcnNpb24gPSAyMDtcclxuICAgIG91dHB1dFtvcDIrK10gPSBuZWVkVmVyc2lvbiAmIDB4ZmY7XHJcbiAgICBvdXRwdXRbb3AyKytdID1cclxuICAgICAgLyoqIEB0eXBlIHtabGliLlppcC5PcGVyYXRpbmdTeXN0ZW19ICovXHJcbiAgICAgIChmaWxlLm9wdGlvblsnb3MnXSkgfHxcclxuICAgICAgWmxpYi5aaXAuT3BlcmF0aW5nU3lzdGVtLk1TRE9TO1xyXG5cclxuICAgIC8vIG5lZWQgdmVyc2lvblxyXG4gICAgb3V0cHV0W29wMSsrXSA9IG91dHB1dFtvcDIrK10gPSAgbmVlZFZlcnNpb24gICAgICAgJiAweGZmO1xyXG4gICAgb3V0cHV0W29wMSsrXSA9IG91dHB1dFtvcDIrK10gPSAobmVlZFZlcnNpb24gPj4gOCkgJiAweGZmO1xyXG5cclxuICAgIC8vIGdlbmVyYWwgcHVycG9zZSBiaXQgZmxhZ1xyXG4gICAgZmxhZ3MgPSAwO1xyXG4gICAgaWYgKGZpbGUub3B0aW9uWydwYXNzd29yZCddIHx8IHRoaXMucGFzc3dvcmQpIHtcclxuICAgICAgZmxhZ3MgfD0gWmxpYi5aaXAuRmxhZ3MuRU5DUllQVDtcclxuICAgIH1cclxuICAgIG91dHB1dFtvcDErK10gPSBvdXRwdXRbb3AyKytdID0gIGZsYWdzICAgICAgICYgMHhmZjtcclxuICAgIG91dHB1dFtvcDErK10gPSBvdXRwdXRbb3AyKytdID0gKGZsYWdzID4+IDgpICYgMHhmZjtcclxuXHJcbiAgICAvLyBjb21wcmVzc2lvbiBtZXRob2RcclxuICAgIGNvbXByZXNzaW9uTWV0aG9kID1cclxuICAgICAgLyoqIEB0eXBlIHtabGliLlppcC5Db21wcmVzc2lvbk1ldGhvZH0gKi9cclxuICAgICAgKGZpbGUub3B0aW9uWydjb21wcmVzc2lvbk1ldGhvZCddKTtcclxuICAgIG91dHB1dFtvcDErK10gPSBvdXRwdXRbb3AyKytdID0gIGNvbXByZXNzaW9uTWV0aG9kICAgICAgICYgMHhmZjtcclxuICAgIG91dHB1dFtvcDErK10gPSBvdXRwdXRbb3AyKytdID0gKGNvbXByZXNzaW9uTWV0aG9kID4+IDgpICYgMHhmZjtcclxuXHJcbiAgICAvLyBkYXRlXHJcbiAgICBkYXRlID0gLyoqIEB0eXBlIHsoRGF0ZXx1bmRlZmluZWQpfSAqLyhmaWxlLm9wdGlvblsnZGF0ZSddKSB8fCBuZXcgRGF0ZSgpO1xyXG4gICAgb3V0cHV0W29wMSsrXSA9IG91dHB1dFtvcDIrK10gPVxyXG4gICAgICAoKGRhdGUuZ2V0TWludXRlcygpICYgMHg3KSA8PCA1KSB8XHJcbiAgICAgIChkYXRlLmdldFNlY29uZHMoKSAvIDIgfCAwKTtcclxuICAgIG91dHB1dFtvcDErK10gPSBvdXRwdXRbb3AyKytdID1cclxuICAgICAgKGRhdGUuZ2V0SG91cnMoKSAgIDw8IDMpIHxcclxuICAgICAgKGRhdGUuZ2V0TWludXRlcygpID4+IDMpO1xyXG4gICAgLy9cclxuICAgIG91dHB1dFtvcDErK10gPSBvdXRwdXRbb3AyKytdID1cclxuICAgICAgKChkYXRlLmdldE1vbnRoKCkgKyAxICYgMHg3KSA8PCA1KSB8XHJcbiAgICAgIChkYXRlLmdldERhdGUoKSk7XHJcbiAgICBvdXRwdXRbb3AxKytdID0gb3V0cHV0W29wMisrXSA9XHJcbiAgICAgICgoZGF0ZS5nZXRGdWxsWWVhcigpIC0gMTk4MCAmIDB4N2YpIDw8IDEpIHxcclxuICAgICAgKGRhdGUuZ2V0TW9udGgoKSArIDEgPj4gMyk7XHJcblxyXG4gICAgLy8gQ1JDLTMyXHJcbiAgICBjcmMzMiA9IGZpbGUuY3JjMzI7XHJcbiAgICBvdXRwdXRbb3AxKytdID0gb3V0cHV0W29wMisrXSA9ICBjcmMzMiAgICAgICAgJiAweGZmO1xyXG4gICAgb3V0cHV0W29wMSsrXSA9IG91dHB1dFtvcDIrK10gPSAoY3JjMzIgPj4gIDgpICYgMHhmZjtcclxuICAgIG91dHB1dFtvcDErK10gPSBvdXRwdXRbb3AyKytdID0gKGNyYzMyID4+IDE2KSAmIDB4ZmY7XHJcbiAgICBvdXRwdXRbb3AxKytdID0gb3V0cHV0W29wMisrXSA9IChjcmMzMiA+PiAyNCkgJiAweGZmO1xyXG5cclxuICAgIC8vIGNvbXByZXNzZWQgc2l6ZVxyXG4gICAgc2l6ZSA9IGZpbGUuYnVmZmVyLmxlbmd0aDtcclxuICAgIG91dHB1dFtvcDErK10gPSBvdXRwdXRbb3AyKytdID0gIHNpemUgICAgICAgICYgMHhmZjtcclxuICAgIG91dHB1dFtvcDErK10gPSBvdXRwdXRbb3AyKytdID0gKHNpemUgPj4gIDgpICYgMHhmZjtcclxuICAgIG91dHB1dFtvcDErK10gPSBvdXRwdXRbb3AyKytdID0gKHNpemUgPj4gMTYpICYgMHhmZjtcclxuICAgIG91dHB1dFtvcDErK10gPSBvdXRwdXRbb3AyKytdID0gKHNpemUgPj4gMjQpICYgMHhmZjtcclxuXHJcbiAgICAvLyB1bmNvbXByZXNzZWQgc2l6ZVxyXG4gICAgcGxhaW5TaXplID0gZmlsZS5zaXplO1xyXG4gICAgb3V0cHV0W29wMSsrXSA9IG91dHB1dFtvcDIrK10gPSAgcGxhaW5TaXplICAgICAgICAmIDB4ZmY7XHJcbiAgICBvdXRwdXRbb3AxKytdID0gb3V0cHV0W29wMisrXSA9IChwbGFpblNpemUgPj4gIDgpICYgMHhmZjtcclxuICAgIG91dHB1dFtvcDErK10gPSBvdXRwdXRbb3AyKytdID0gKHBsYWluU2l6ZSA+PiAxNikgJiAweGZmO1xyXG4gICAgb3V0cHV0W29wMSsrXSA9IG91dHB1dFtvcDIrK10gPSAocGxhaW5TaXplID4+IDI0KSAmIDB4ZmY7XHJcblxyXG4gICAgLy8gZmlsZW5hbWUgbGVuZ3RoXHJcbiAgICBvdXRwdXRbb3AxKytdID0gb3V0cHV0W29wMisrXSA9ICBmaWxlbmFtZUxlbmd0aCAgICAgICAmIDB4ZmY7XHJcbiAgICBvdXRwdXRbb3AxKytdID0gb3V0cHV0W29wMisrXSA9IChmaWxlbmFtZUxlbmd0aCA+PiA4KSAmIDB4ZmY7XHJcblxyXG4gICAgLy8gZXh0cmEgZmllbGQgbGVuZ3RoXHJcbiAgICBvdXRwdXRbb3AxKytdID0gb3V0cHV0W29wMisrXSA9ICBleHRyYUZpZWxkTGVuZ3RoICAgICAgICYgMHhmZjtcclxuICAgIG91dHB1dFtvcDErK10gPSBvdXRwdXRbb3AyKytdID0gKGV4dHJhRmllbGRMZW5ndGggPj4gOCkgJiAweGZmO1xyXG5cclxuICAgIC8vIGZpbGUgY29tbWVudCBsZW5ndGhcclxuICAgIG91dHB1dFtvcDIrK10gPSAgY29tbWVudExlbmd0aCAgICAgICAmIDB4ZmY7XHJcbiAgICBvdXRwdXRbb3AyKytdID0gKGNvbW1lbnRMZW5ndGggPj4gOCkgJiAweGZmO1xyXG5cclxuICAgIC8vIGRpc2sgbnVtYmVyIHN0YXJ0XHJcbiAgICBvdXRwdXRbb3AyKytdID0gMDtcclxuICAgIG91dHB1dFtvcDIrK10gPSAwO1xyXG5cclxuICAgIC8vIGludGVybmFsIGZpbGUgYXR0cmlidXRlc1xyXG4gICAgb3V0cHV0W29wMisrXSA9IDA7XHJcbiAgICBvdXRwdXRbb3AyKytdID0gMDtcclxuXHJcbiAgICAvLyBleHRlcm5hbCBmaWxlIGF0dHJpYnV0ZXNcclxuICAgIG91dHB1dFtvcDIrK10gPSAwO1xyXG4gICAgb3V0cHV0W29wMisrXSA9IDA7XHJcbiAgICBvdXRwdXRbb3AyKytdID0gMDtcclxuICAgIG91dHB1dFtvcDIrK10gPSAwO1xyXG5cclxuICAgIC8vIHJlbGF0aXZlIG9mZnNldCBvZiBsb2NhbCBoZWFkZXJcclxuICAgIG91dHB1dFtvcDIrK10gPSAgb2Zmc2V0ICAgICAgICAmIDB4ZmY7XHJcbiAgICBvdXRwdXRbb3AyKytdID0gKG9mZnNldCA+PiAgOCkgJiAweGZmO1xyXG4gICAgb3V0cHV0W29wMisrXSA9IChvZmZzZXQgPj4gMTYpICYgMHhmZjtcclxuICAgIG91dHB1dFtvcDIrK10gPSAob2Zmc2V0ID4+IDI0KSAmIDB4ZmY7XHJcblxyXG4gICAgLy8gZmlsZW5hbWVcclxuICAgIGZpbGVuYW1lID0gZmlsZS5vcHRpb25bJ2ZpbGVuYW1lJ107XHJcbiAgICBpZiAoZmlsZW5hbWUpIHtcclxuICAgICAgaWYgKFVTRV9UWVBFREFSUkFZKSB7XHJcbiAgICAgICAgb3V0cHV0LnNldChmaWxlbmFtZSwgb3AxKTtcclxuICAgICAgICBvdXRwdXQuc2V0KGZpbGVuYW1lLCBvcDIpO1xyXG4gICAgICAgIG9wMSArPSBmaWxlbmFtZUxlbmd0aDtcclxuICAgICAgICBvcDIgKz0gZmlsZW5hbWVMZW5ndGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGZpbGVuYW1lTGVuZ3RoOyArK2opIHtcclxuICAgICAgICAgIG91dHB1dFtvcDErK10gPSBvdXRwdXRbb3AyKytdID0gZmlsZW5hbWVbal07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXh0cmEgZmllbGRcclxuICAgIGV4dHJhRmllbGQgPSBmaWxlLm9wdGlvblsnZXh0cmFGaWVsZCddO1xyXG4gICAgaWYgKGV4dHJhRmllbGQpIHtcclxuICAgICAgaWYgKFVTRV9UWVBFREFSUkFZKSB7XHJcbiAgICAgICAgb3V0cHV0LnNldChleHRyYUZpZWxkLCBvcDEpO1xyXG4gICAgICAgIG91dHB1dC5zZXQoZXh0cmFGaWVsZCwgb3AyKTtcclxuICAgICAgICBvcDEgKz0gZXh0cmFGaWVsZExlbmd0aDtcclxuICAgICAgICBvcDIgKz0gZXh0cmFGaWVsZExlbmd0aDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmb3IgKGogPSAwOyBqIDwgY29tbWVudExlbmd0aDsgKytqKSB7XHJcbiAgICAgICAgICBvdXRwdXRbb3AxKytdID0gb3V0cHV0W29wMisrXSA9IGV4dHJhRmllbGRbal07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY29tbWVudFxyXG4gICAgY29tbWVudCA9IGZpbGUub3B0aW9uWydjb21tZW50J107XHJcbiAgICBpZiAoY29tbWVudCkge1xyXG4gICAgICBpZiAoVVNFX1RZUEVEQVJSQVkpIHtcclxuICAgICAgICBvdXRwdXQuc2V0KGNvbW1lbnQsIG9wMik7XHJcbiAgICAgICAgb3AyICs9IGNvbW1lbnRMZW5ndGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvbW1lbnRMZW5ndGg7ICsraikge1xyXG4gICAgICAgICAgb3V0cHV0W29wMisrXSA9IGNvbW1lbnRbal07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBmaWxlIGRhdGFcclxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGlmIChVU0VfVFlQRURBUlJBWSkge1xyXG4gICAgICBvdXRwdXQuc2V0KGZpbGUuYnVmZmVyLCBvcDEpO1xyXG4gICAgICBvcDEgKz0gZmlsZS5idWZmZXIubGVuZ3RoO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZm9yIChqID0gMCwgamwgPSBmaWxlLmJ1ZmZlci5sZW5ndGg7IGogPCBqbDsgKytqKSB7XHJcbiAgICAgICAgb3V0cHV0W29wMSsrXSA9IGZpbGUuYnVmZmVyW2pdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnlcclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLy8gc2lnbmF0dXJlXHJcbiAgb3V0cHV0W29wMysrXSA9IFpsaWIuWmlwLkNlbnRyYWxEaXJlY3RvcnlTaWduYXR1cmVbMF07XHJcbiAgb3V0cHV0W29wMysrXSA9IFpsaWIuWmlwLkNlbnRyYWxEaXJlY3RvcnlTaWduYXR1cmVbMV07XHJcbiAgb3V0cHV0W29wMysrXSA9IFpsaWIuWmlwLkNlbnRyYWxEaXJlY3RvcnlTaWduYXR1cmVbMl07XHJcbiAgb3V0cHV0W29wMysrXSA9IFpsaWIuWmlwLkNlbnRyYWxEaXJlY3RvcnlTaWduYXR1cmVbM107XHJcblxyXG4gIC8vIG51bWJlciBvZiB0aGlzIGRpc2tcclxuICBvdXRwdXRbb3AzKytdID0gMDtcclxuICBvdXRwdXRbb3AzKytdID0gMDtcclxuXHJcbiAgLy8gbnVtYmVyIG9mIHRoZSBkaXNrIHdpdGggdGhlIHN0YXJ0IG9mIHRoZSBjZW50cmFsIGRpcmVjdG9yeVxyXG4gIG91dHB1dFtvcDMrK10gPSAwO1xyXG4gIG91dHB1dFtvcDMrK10gPSAwO1xyXG5cclxuICAvLyB0b3RhbCBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgY2VudHJhbCBkaXJlY3Rvcnkgb24gdGhpcyBkaXNrXHJcbiAgb3V0cHV0W29wMysrXSA9ICBpbCAgICAgICAmIDB4ZmY7XHJcbiAgb3V0cHV0W29wMysrXSA9IChpbCA+PiA4KSAmIDB4ZmY7XHJcblxyXG4gIC8vIHRvdGFsIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBjZW50cmFsIGRpcmVjdG9yeVxyXG4gIG91dHB1dFtvcDMrK10gPSAgaWwgICAgICAgJiAweGZmO1xyXG4gIG91dHB1dFtvcDMrK10gPSAoaWwgPj4gOCkgJiAweGZmO1xyXG5cclxuICAvLyBzaXplIG9mIHRoZSBjZW50cmFsIGRpcmVjdG9yeVxyXG4gIG91dHB1dFtvcDMrK10gPSAgY2VudHJhbERpcmVjdG9yeVNpemUgICAgICAgICYgMHhmZjtcclxuICBvdXRwdXRbb3AzKytdID0gKGNlbnRyYWxEaXJlY3RvcnlTaXplID4+ICA4KSAmIDB4ZmY7XHJcbiAgb3V0cHV0W29wMysrXSA9IChjZW50cmFsRGlyZWN0b3J5U2l6ZSA+PiAxNikgJiAweGZmO1xyXG4gIG91dHB1dFtvcDMrK10gPSAoY2VudHJhbERpcmVjdG9yeVNpemUgPj4gMjQpICYgMHhmZjtcclxuXHJcbiAgLy8gb2Zmc2V0IG9mIHN0YXJ0IG9mIGNlbnRyYWwgZGlyZWN0b3J5IHdpdGggcmVzcGVjdCB0byB0aGUgc3RhcnRpbmcgZGlzayBudW1iZXJcclxuICBvdXRwdXRbb3AzKytdID0gIGxvY2FsRmlsZVNpemUgICAgICAgICYgMHhmZjtcclxuICBvdXRwdXRbb3AzKytdID0gKGxvY2FsRmlsZVNpemUgPj4gIDgpICYgMHhmZjtcclxuICBvdXRwdXRbb3AzKytdID0gKGxvY2FsRmlsZVNpemUgPj4gMTYpICYgMHhmZjtcclxuICBvdXRwdXRbb3AzKytdID0gKGxvY2FsRmlsZVNpemUgPj4gMjQpICYgMHhmZjtcclxuXHJcbiAgLy8gLlpJUCBmaWxlIGNvbW1lbnQgbGVuZ3RoXHJcbiAgY29tbWVudExlbmd0aCA9IHRoaXMuY29tbWVudCA/IHRoaXMuY29tbWVudC5sZW5ndGggOiAwO1xyXG4gIG91dHB1dFtvcDMrK10gPSAgY29tbWVudExlbmd0aCAgICAgICAmIDB4ZmY7XHJcbiAgb3V0cHV0W29wMysrXSA9IChjb21tZW50TGVuZ3RoID4+IDgpICYgMHhmZjtcclxuXHJcbiAgLy8gLlpJUCBmaWxlIGNvbW1lbnRcclxuICBpZiAodGhpcy5jb21tZW50KSB7XHJcbiAgICBpZiAoVVNFX1RZUEVEQVJSQVkpIHtcclxuICAgICAgb3V0cHV0LnNldCh0aGlzLmNvbW1lbnQsIG9wMyk7XHJcbiAgICAgIG9wMyArPSBjb21tZW50TGVuZ3RoO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZm9yIChqID0gMCwgamwgPSBjb21tZW50TGVuZ3RoOyBqIDwgamw7ICsraikge1xyXG4gICAgICAgIG91dHB1dFtvcDMrK10gPSB0aGlzLmNvbW1lbnRbal07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBvdXRwdXQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBpbnB1dFxyXG4gKiBAcGFyYW0ge09iamVjdD19IG9wdF9wYXJhbXMgb3B0aW9ucy5cclxuICogQHJldHVybiB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX1cclxuICovXHJcblpsaWIuWmlwLnByb3RvdHlwZS5kZWZsYXRlV2l0aE9wdGlvbiA9IGZ1bmN0aW9uKGlucHV0LCBvcHRfcGFyYW1zKSB7XHJcbiAgLyoqIEB0eXBlIHtabGliLlJhd0RlZmxhdGV9ICovXHJcbiAgdmFyIGRlZmxhdG9yID0gbmV3IFpsaWIuUmF3RGVmbGF0ZShpbnB1dCwgb3B0X3BhcmFtc1snZGVmbGF0ZU9wdGlvbiddKTtcclxuXHJcbiAgcmV0dXJuIGRlZmxhdG9yLmNvbXByZXNzKCk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtIHsoQXJyYXkuPG51bWJlcj58VWludDMyQXJyYXkpfSBrZXlcclxuICogQHJldHVybiB7bnVtYmVyfVxyXG4gKi9cclxuWmxpYi5aaXAucHJvdG90eXBlLmdldEJ5dGUgPSBmdW5jdGlvbihrZXkpIHtcclxuICAvKiogQHR5cGUge251bWJlcn0gKi9cclxuICB2YXIgdG1wID0gKChrZXlbMl0gJiAweGZmZmYpIHwgMik7XHJcblxyXG4gIHJldHVybiAoKHRtcCAqICh0bXAgXiAxKSkgPj4gOCkgJiAweGZmO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7KEFycmF5LjxudW1iZXI+fFVpbnQzMkFycmF5fE9iamVjdCl9IGtleVxyXG4gKiBAcGFyYW0ge251bWJlcn0gblxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5abGliLlppcC5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24oa2V5LCBuKSB7XHJcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXHJcbiAgdmFyIHRtcCA9IHRoaXMuZ2V0Qnl0ZSgvKiogQHR5cGUgeyhBcnJheS48bnVtYmVyPnxVaW50MzJBcnJheSl9ICovKGtleSkpO1xyXG5cclxuICB0aGlzLnVwZGF0ZUtleXMoLyoqIEB0eXBlIHsoQXJyYXkuPG51bWJlcj58VWludDMyQXJyYXkpfSAqLyhrZXkpLCBuKTtcclxuXHJcbiAgcmV0dXJuIHRtcCBeIG47XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtIHsoQXJyYXkuPG51bWJlcj58VWludDMyQXJyYXkpfSBrZXlcclxuICogQHBhcmFtIHtudW1iZXJ9IG5cclxuICovXHJcblpsaWIuWmlwLnByb3RvdHlwZS51cGRhdGVLZXlzID0gZnVuY3Rpb24oa2V5LCBuKSB7XHJcbiAga2V5WzBdID0gWmxpYi5DUkMzMi5zaW5nbGUoa2V5WzBdLCBuKTtcclxuICBrZXlbMV0gPVxyXG4gICAgKCgoKChrZXlbMV0gKyAoa2V5WzBdICYgMHhmZikpICogMjAxNzMgPj4+IDApICogNjY4MSkgPj4+IDApICsgMSkgPj4+IDA7XHJcbiAga2V5WzJdID0gWmxpYi5DUkMzMi5zaW5nbGUoa2V5WzJdLCBrZXlbMV0gPj4+IDI0KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0geyhBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gcGFzc3dvcmRcclxuICogQHJldHVybiB7IShBcnJheS48bnVtYmVyPnxVaW50MzJBcnJheXxPYmplY3QpfVxyXG4gKi9cclxuWmxpYi5aaXAucHJvdG90eXBlLmNyZWF0ZUVuY3J5cHRpb25LZXkgPSBmdW5jdGlvbihwYXNzd29yZCkge1xyXG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50MzJBcnJheSl9ICovXHJcbiAgdmFyIGtleSA9IFszMDU0MTk4OTYsIDU5MTc1MTA0OSwgODc4MDgyMTkyXTtcclxuICAvKiogQHR5cGUge251bWJlcn0gKi9cclxuICB2YXIgaTtcclxuICAvKiogQHR5cGUge251bWJlcn0gKi9cclxuICB2YXIgaWw7XHJcblxyXG4gIGlmIChVU0VfVFlQRURBUlJBWSkge1xyXG4gICAga2V5ID0gbmV3IFVpbnQzMkFycmF5KGtleSk7XHJcbiAgfVxyXG5cclxuICBmb3IgKGkgPSAwLCBpbCA9IHBhc3N3b3JkLmxlbmd0aDsgaSA8IGlsOyArK2kpIHtcclxuICAgIHRoaXMudXBkYXRlS2V5cyhrZXksIHBhc3N3b3JkW2ldICYgMHhmZik7XHJcbiAgfVxyXG5cclxuICByZXR1cm4ga2V5O1xyXG59O1xyXG5cclxufSk7IiwiZ29vZy5wcm92aWRlKCdabGliLlVuemlwJyk7XHJcblxyXG5nb29nLnJlcXVpcmUoJ1VTRV9UWVBFREFSUkFZJyk7XHJcbmdvb2cucmVxdWlyZSgnWmxpYi5SYXdJbmZsYXRlJyk7XHJcbmdvb2cucmVxdWlyZSgnWmxpYi5DUkMzMicpO1xyXG5nb29nLnJlcXVpcmUoJ1psaWIuWmlwJyk7XHJcblxyXG5nb29nLnNjb3BlKGZ1bmN0aW9uKCkge1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gaW5wdXQgaW5wdXQgYnVmZmVyLlxyXG4gKiBAcGFyYW0ge09iamVjdD19IG9wdF9wYXJhbXMgb3B0aW9ucy5cclxuICogQGNvbnN0cnVjdG9yXHJcbiAqL1xyXG5abGliLlVuemlwID0gZnVuY3Rpb24oaW5wdXQsIG9wdF9wYXJhbXMpIHtcclxuICBvcHRfcGFyYW1zID0gb3B0X3BhcmFtcyB8fCB7fTtcclxuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9ICovXHJcbiAgdGhpcy5pbnB1dCA9XHJcbiAgICAoVVNFX1RZUEVEQVJSQVkgJiYgKGlucHV0IGluc3RhbmNlb2YgQXJyYXkpKSA/XHJcbiAgICBuZXcgVWludDhBcnJheShpbnB1dCkgOiBpbnB1dDtcclxuICAvKiogQHR5cGUge251bWJlcn0gKi9cclxuICB0aGlzLmlwID0gMDtcclxuICAvKiogQHR5cGUge251bWJlcn0gKi9cclxuICB0aGlzLmVvY2RyT2Zmc2V0O1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHRoaXMubnVtYmVyT2ZUaGlzRGlzaztcclxuICAvKiogQHR5cGUge251bWJlcn0gKi9cclxuICB0aGlzLnN0YXJ0RGlzaztcclxuICAvKiogQHR5cGUge251bWJlcn0gKi9cclxuICB0aGlzLnRvdGFsRW50cmllc1RoaXNEaXNrO1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHRoaXMudG90YWxFbnRyaWVzO1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHRoaXMuY2VudHJhbERpcmVjdG9yeVNpemU7XHJcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXHJcbiAgdGhpcy5jZW50cmFsRGlyZWN0b3J5T2Zmc2V0O1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHRoaXMuY29tbWVudExlbmd0aDtcclxuICAvKiogQHR5cGUgeyhBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gKi9cclxuICB0aGlzLmNvbW1lbnQ7XHJcbiAgLyoqIEB0eXBlIHtBcnJheS48WmxpYi5VbnppcC5GaWxlSGVhZGVyPn0gKi9cclxuICB0aGlzLmZpbGVIZWFkZXJMaXN0O1xyXG4gIC8qKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsIG51bWJlcj59ICovXHJcbiAgdGhpcy5maWxlbmFtZVRvSW5kZXg7XHJcbiAgLyoqIEB0eXBlIHtib29sZWFufSAqL1xyXG4gIHRoaXMudmVyaWZ5ID0gb3B0X3BhcmFtc1sndmVyaWZ5J10gfHwgZmFsc2U7XHJcbiAgLyoqIEB0eXBlIHsoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9ICovXHJcbiAgdGhpcy5wYXNzd29yZCA9IG9wdF9wYXJhbXNbJ3Bhc3N3b3JkJ107XHJcbn07XHJcblxyXG5abGliLlVuemlwLkNvbXByZXNzaW9uTWV0aG9kID0gWmxpYi5aaXAuQ29tcHJlc3Npb25NZXRob2Q7XHJcblxyXG4vKipcclxuICogQHR5cGUge0FycmF5LjxudW1iZXI+fVxyXG4gKiBAY29uc3RcclxuICovXHJcblpsaWIuVW56aXAuRmlsZUhlYWRlclNpZ25hdHVyZSA9IFpsaWIuWmlwLkZpbGVIZWFkZXJTaWduYXR1cmU7XHJcblxyXG4vKipcclxuICogQHR5cGUge0FycmF5LjxudW1iZXI+fVxyXG4gKiBAY29uc3RcclxuICovXHJcblpsaWIuVW56aXAuTG9jYWxGaWxlSGVhZGVyU2lnbmF0dXJlID0gWmxpYi5aaXAuTG9jYWxGaWxlSGVhZGVyU2lnbmF0dXJlO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHtBcnJheS48bnVtYmVyPn1cclxuICogQGNvbnN0XHJcbiAqL1xyXG5abGliLlVuemlwLkNlbnRyYWxEaXJlY3RvcnlTaWduYXR1cmUgPSBabGliLlppcC5DZW50cmFsRGlyZWN0b3J5U2lnbmF0dXJlO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gaW5wdXQgaW5wdXQgYnVmZmVyLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaXAgaW5wdXQgcG9zaXRpb24uXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKi9cclxuWmxpYi5VbnppcC5GaWxlSGVhZGVyID0gZnVuY3Rpb24oaW5wdXQsIGlwKSB7XHJcbiAgLyoqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSAqL1xyXG4gIHRoaXMuaW5wdXQgPSBpbnB1dDtcclxuICAvKiogQHR5cGUge251bWJlcn0gKi9cclxuICB0aGlzLm9mZnNldCA9IGlwO1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHRoaXMubGVuZ3RoO1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHRoaXMudmVyc2lvbjtcclxuICAvKiogQHR5cGUge251bWJlcn0gKi9cclxuICB0aGlzLm9zO1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHRoaXMubmVlZFZlcnNpb247XHJcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXHJcbiAgdGhpcy5mbGFncztcclxuICAvKiogQHR5cGUge251bWJlcn0gKi9cclxuICB0aGlzLmNvbXByZXNzaW9uO1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHRoaXMudGltZTtcclxuICAvKiogQHR5cGUge251bWJlcn0gKi9cclxuICB0aGlzLmRhdGU7XHJcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXHJcbiAgdGhpcy5jcmMzMjtcclxuICAvKiogQHR5cGUge251bWJlcn0gKi9cclxuICB0aGlzLmNvbXByZXNzZWRTaXplO1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHRoaXMucGxhaW5TaXplO1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHRoaXMuZmlsZU5hbWVMZW5ndGg7XHJcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXHJcbiAgdGhpcy5leHRyYUZpZWxkTGVuZ3RoO1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHRoaXMuZmlsZUNvbW1lbnRMZW5ndGg7XHJcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXHJcbiAgdGhpcy5kaXNrTnVtYmVyU3RhcnQ7XHJcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXHJcbiAgdGhpcy5pbnRlcm5hbEZpbGVBdHRyaWJ1dGVzO1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcztcclxuICAvKiogQHR5cGUge251bWJlcn0gKi9cclxuICB0aGlzLnJlbGF0aXZlT2Zmc2V0O1xyXG4gIC8qKiBAdHlwZSB7c3RyaW5nfSAqL1xyXG4gIHRoaXMuZmlsZW5hbWU7XHJcbiAgLyoqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSAqL1xyXG4gIHRoaXMuZXh0cmFGaWVsZDtcclxuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9ICovXHJcbiAgdGhpcy5jb21tZW50O1xyXG59O1xyXG5cclxuWmxpYi5VbnppcC5GaWxlSGVhZGVyLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKCkge1xyXG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gKi9cclxuICB2YXIgaW5wdXQgPSB0aGlzLmlucHV0O1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHZhciBpcCA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAvLyBjZW50cmFsIGZpbGUgaGVhZGVyIHNpZ25hdHVyZVxyXG4gIGlmIChpbnB1dFtpcCsrXSAhPT0gWmxpYi5VbnppcC5GaWxlSGVhZGVyU2lnbmF0dXJlWzBdIHx8XHJcbiAgICAgIGlucHV0W2lwKytdICE9PSBabGliLlVuemlwLkZpbGVIZWFkZXJTaWduYXR1cmVbMV0gfHxcclxuICAgICAgaW5wdXRbaXArK10gIT09IFpsaWIuVW56aXAuRmlsZUhlYWRlclNpZ25hdHVyZVsyXSB8fFxyXG4gICAgICBpbnB1dFtpcCsrXSAhPT0gWmxpYi5VbnppcC5GaWxlSGVhZGVyU2lnbmF0dXJlWzNdKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgZmlsZSBoZWFkZXIgc2lnbmF0dXJlJyk7XHJcbiAgfVxyXG5cclxuICAvLyB2ZXJzaW9uIG1hZGUgYnlcclxuICB0aGlzLnZlcnNpb24gPSBpbnB1dFtpcCsrXTtcclxuICB0aGlzLm9zID0gaW5wdXRbaXArK107XHJcblxyXG4gIC8vIHZlcnNpb24gbmVlZGVkIHRvIGV4dHJhY3RcclxuICB0aGlzLm5lZWRWZXJzaW9uID0gaW5wdXRbaXArK10gfCAoaW5wdXRbaXArK10gPDwgOCk7XHJcblxyXG4gIC8vIGdlbmVyYWwgcHVycG9zZSBiaXQgZmxhZ1xyXG4gIHRoaXMuZmxhZ3MgPSBpbnB1dFtpcCsrXSB8IChpbnB1dFtpcCsrXSA8PCA4KTtcclxuXHJcbiAgLy8gY29tcHJlc3Npb24gbWV0aG9kXHJcbiAgdGhpcy5jb21wcmVzc2lvbiA9IGlucHV0W2lwKytdIHwgKGlucHV0W2lwKytdIDw8IDgpO1xyXG5cclxuICAvLyBsYXN0IG1vZCBmaWxlIHRpbWVcclxuICB0aGlzLnRpbWUgPSBpbnB1dFtpcCsrXSB8IChpbnB1dFtpcCsrXSA8PCA4KTtcclxuXHJcbiAgLy9sYXN0IG1vZCBmaWxlIGRhdGVcclxuICB0aGlzLmRhdGUgPSBpbnB1dFtpcCsrXSB8IChpbnB1dFtpcCsrXSA8PCA4KTtcclxuXHJcbiAgLy8gY3JjLTMyXHJcbiAgdGhpcy5jcmMzMiA9IChcclxuICAgIChpbnB1dFtpcCsrXSAgICAgICkgfCAoaW5wdXRbaXArK10gPDwgIDgpIHxcclxuICAgIChpbnB1dFtpcCsrXSA8PCAxNikgfCAoaW5wdXRbaXArK10gPDwgMjQpXHJcbiAgKSA+Pj4gMDtcclxuXHJcbiAgLy8gY29tcHJlc3NlZCBzaXplXHJcbiAgdGhpcy5jb21wcmVzc2VkU2l6ZSA9IChcclxuICAgIChpbnB1dFtpcCsrXSAgICAgICkgfCAoaW5wdXRbaXArK10gPDwgIDgpIHxcclxuICAgIChpbnB1dFtpcCsrXSA8PCAxNikgfCAoaW5wdXRbaXArK10gPDwgMjQpXHJcbiAgKSA+Pj4gMDtcclxuXHJcbiAgLy8gdW5jb21wcmVzc2VkIHNpemVcclxuICB0aGlzLnBsYWluU2l6ZSA9IChcclxuICAgIChpbnB1dFtpcCsrXSAgICAgICkgfCAoaW5wdXRbaXArK10gPDwgIDgpIHxcclxuICAgIChpbnB1dFtpcCsrXSA8PCAxNikgfCAoaW5wdXRbaXArK10gPDwgMjQpXHJcbiAgKSA+Pj4gMDtcclxuXHJcbiAgLy8gZmlsZSBuYW1lIGxlbmd0aFxyXG4gIHRoaXMuZmlsZU5hbWVMZW5ndGggPSBpbnB1dFtpcCsrXSB8IChpbnB1dFtpcCsrXSA8PCA4KTtcclxuXHJcbiAgLy8gZXh0cmEgZmllbGQgbGVuZ3RoXHJcbiAgdGhpcy5leHRyYUZpZWxkTGVuZ3RoID0gaW5wdXRbaXArK10gfCAoaW5wdXRbaXArK10gPDwgOCk7XHJcblxyXG4gIC8vIGZpbGUgY29tbWVudCBsZW5ndGhcclxuICB0aGlzLmZpbGVDb21tZW50TGVuZ3RoID0gaW5wdXRbaXArK10gfCAoaW5wdXRbaXArK10gPDwgOCk7XHJcblxyXG4gIC8vIGRpc2sgbnVtYmVyIHN0YXJ0XHJcbiAgdGhpcy5kaXNrTnVtYmVyU3RhcnQgPSBpbnB1dFtpcCsrXSB8IChpbnB1dFtpcCsrXSA8PCA4KTtcclxuXHJcbiAgLy8gaW50ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzXHJcbiAgdGhpcy5pbnRlcm5hbEZpbGVBdHRyaWJ1dGVzID0gaW5wdXRbaXArK10gfCAoaW5wdXRbaXArK10gPDwgOCk7XHJcblxyXG4gIC8vIGV4dGVybmFsIGZpbGUgYXR0cmlidXRlc1xyXG4gIHRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyA9XHJcbiAgICAoaW5wdXRbaXArK10gICAgICApIHwgKGlucHV0W2lwKytdIDw8ICA4KSB8XHJcbiAgICAoaW5wdXRbaXArK10gPDwgMTYpIHwgKGlucHV0W2lwKytdIDw8IDI0KTtcclxuXHJcbiAgLy8gcmVsYXRpdmUgb2Zmc2V0IG9mIGxvY2FsIGhlYWRlclxyXG4gIHRoaXMucmVsYXRpdmVPZmZzZXQgPSAoXHJcbiAgICAoaW5wdXRbaXArK10gICAgICApIHwgKGlucHV0W2lwKytdIDw8ICA4KSB8XHJcbiAgICAoaW5wdXRbaXArK10gPDwgMTYpIHwgKGlucHV0W2lwKytdIDw8IDI0KVxyXG4gICkgPj4+IDA7XHJcblxyXG4gIC8vIGZpbGUgbmFtZVxyXG4gIHRoaXMuZmlsZW5hbWUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIFVTRV9UWVBFREFSUkFZID9cclxuICAgIGlucHV0LnN1YmFycmF5KGlwLCBpcCArPSB0aGlzLmZpbGVOYW1lTGVuZ3RoKSA6XHJcbiAgICBpbnB1dC5zbGljZShpcCwgaXAgKz0gdGhpcy5maWxlTmFtZUxlbmd0aClcclxuICApO1xyXG5cclxuICAvLyBleHRyYSBmaWVsZFxyXG4gIHRoaXMuZXh0cmFGaWVsZCA9IFVTRV9UWVBFREFSUkFZID9cclxuICAgIGlucHV0LnN1YmFycmF5KGlwLCBpcCArPSB0aGlzLmV4dHJhRmllbGRMZW5ndGgpIDpcclxuICAgIGlucHV0LnNsaWNlKGlwLCBpcCArPSB0aGlzLmV4dHJhRmllbGRMZW5ndGgpO1xyXG5cclxuICAvLyBmaWxlIGNvbW1lbnRcclxuICB0aGlzLmNvbW1lbnQgPSBVU0VfVFlQRURBUlJBWSA/XHJcbiAgICBpbnB1dC5zdWJhcnJheShpcCwgaXAgKyB0aGlzLmZpbGVDb21tZW50TGVuZ3RoKSA6XHJcbiAgICBpbnB1dC5zbGljZShpcCwgaXAgKyB0aGlzLmZpbGVDb21tZW50TGVuZ3RoKTtcclxuXHJcbiAgdGhpcy5sZW5ndGggPSBpcCAtIHRoaXMub2Zmc2V0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gaW5wdXQgaW5wdXQgYnVmZmVyLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaXAgaW5wdXQgcG9zaXRpb24uXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKi9cclxuWmxpYi5VbnppcC5Mb2NhbEZpbGVIZWFkZXIgPSBmdW5jdGlvbihpbnB1dCwgaXApIHtcclxuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9ICovXHJcbiAgdGhpcy5pbnB1dCA9IGlucHV0O1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHRoaXMub2Zmc2V0ID0gaXA7XHJcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXHJcbiAgdGhpcy5sZW5ndGg7XHJcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXHJcbiAgdGhpcy5uZWVkVmVyc2lvbjtcclxuICAvKiogQHR5cGUge251bWJlcn0gKi9cclxuICB0aGlzLmZsYWdzO1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHRoaXMuY29tcHJlc3Npb247XHJcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXHJcbiAgdGhpcy50aW1lO1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHRoaXMuZGF0ZTtcclxuICAvKiogQHR5cGUge251bWJlcn0gKi9cclxuICB0aGlzLmNyYzMyO1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHRoaXMuY29tcHJlc3NlZFNpemU7XHJcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXHJcbiAgdGhpcy5wbGFpblNpemU7XHJcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXHJcbiAgdGhpcy5maWxlTmFtZUxlbmd0aDtcclxuICAvKiogQHR5cGUge251bWJlcn0gKi9cclxuICB0aGlzLmV4dHJhRmllbGRMZW5ndGg7XHJcbiAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXHJcbiAgdGhpcy5maWxlbmFtZTtcclxuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9ICovXHJcbiAgdGhpcy5leHRyYUZpZWxkO1xyXG59O1xyXG5cclxuWmxpYi5VbnppcC5Mb2NhbEZpbGVIZWFkZXIuRmxhZ3MgPSBabGliLlppcC5GbGFncztcclxuXHJcblpsaWIuVW56aXAuTG9jYWxGaWxlSGVhZGVyLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKCkge1xyXG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gKi9cclxuICB2YXIgaW5wdXQgPSB0aGlzLmlucHV0O1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHZhciBpcCA9IHRoaXMub2Zmc2V0O1xyXG5cclxuICAvLyBsb2NhbCBmaWxlIGhlYWRlciBzaWduYXR1cmVcclxuICBpZiAoaW5wdXRbaXArK10gIT09IFpsaWIuVW56aXAuTG9jYWxGaWxlSGVhZGVyU2lnbmF0dXJlWzBdIHx8XHJcbiAgICAgIGlucHV0W2lwKytdICE9PSBabGliLlVuemlwLkxvY2FsRmlsZUhlYWRlclNpZ25hdHVyZVsxXSB8fFxyXG4gICAgICBpbnB1dFtpcCsrXSAhPT0gWmxpYi5VbnppcC5Mb2NhbEZpbGVIZWFkZXJTaWduYXR1cmVbMl0gfHxcclxuICAgICAgaW5wdXRbaXArK10gIT09IFpsaWIuVW56aXAuTG9jYWxGaWxlSGVhZGVyU2lnbmF0dXJlWzNdKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgbG9jYWwgZmlsZSBoZWFkZXIgc2lnbmF0dXJlJyk7XHJcbiAgfVxyXG5cclxuICAvLyB2ZXJzaW9uIG5lZWRlZCB0byBleHRyYWN0XHJcbiAgdGhpcy5uZWVkVmVyc2lvbiA9IGlucHV0W2lwKytdIHwgKGlucHV0W2lwKytdIDw8IDgpO1xyXG5cclxuICAvLyBnZW5lcmFsIHB1cnBvc2UgYml0IGZsYWdcclxuICB0aGlzLmZsYWdzID0gaW5wdXRbaXArK10gfCAoaW5wdXRbaXArK10gPDwgOCk7XHJcblxyXG4gIC8vIGNvbXByZXNzaW9uIG1ldGhvZFxyXG4gIHRoaXMuY29tcHJlc3Npb24gPSBpbnB1dFtpcCsrXSB8IChpbnB1dFtpcCsrXSA8PCA4KTtcclxuXHJcbiAgLy8gbGFzdCBtb2QgZmlsZSB0aW1lXHJcbiAgdGhpcy50aW1lID0gaW5wdXRbaXArK10gfCAoaW5wdXRbaXArK10gPDwgOCk7XHJcblxyXG4gIC8vbGFzdCBtb2QgZmlsZSBkYXRlXHJcbiAgdGhpcy5kYXRlID0gaW5wdXRbaXArK10gfCAoaW5wdXRbaXArK10gPDwgOCk7XHJcblxyXG4gIC8vIGNyYy0zMlxyXG4gIHRoaXMuY3JjMzIgPSAoXHJcbiAgICAoaW5wdXRbaXArK10gICAgICApIHwgKGlucHV0W2lwKytdIDw8ICA4KSB8XHJcbiAgICAoaW5wdXRbaXArK10gPDwgMTYpIHwgKGlucHV0W2lwKytdIDw8IDI0KVxyXG4gICkgPj4+IDA7XHJcblxyXG4gIC8vIGNvbXByZXNzZWQgc2l6ZVxyXG4gIHRoaXMuY29tcHJlc3NlZFNpemUgPSAoXHJcbiAgICAoaW5wdXRbaXArK10gICAgICApIHwgKGlucHV0W2lwKytdIDw8ICA4KSB8XHJcbiAgICAoaW5wdXRbaXArK10gPDwgMTYpIHwgKGlucHV0W2lwKytdIDw8IDI0KVxyXG4gICkgPj4+IDA7XHJcblxyXG4gIC8vIHVuY29tcHJlc3NlZCBzaXplXHJcbiAgdGhpcy5wbGFpblNpemUgPSAoXHJcbiAgICAoaW5wdXRbaXArK10gICAgICApIHwgKGlucHV0W2lwKytdIDw8ICA4KSB8XHJcbiAgICAoaW5wdXRbaXArK10gPDwgMTYpIHwgKGlucHV0W2lwKytdIDw8IDI0KVxyXG4gICkgPj4+IDA7XHJcblxyXG4gIC8vIGZpbGUgbmFtZSBsZW5ndGhcclxuICB0aGlzLmZpbGVOYW1lTGVuZ3RoID0gaW5wdXRbaXArK10gfCAoaW5wdXRbaXArK10gPDwgOCk7XHJcblxyXG4gIC8vIGV4dHJhIGZpZWxkIGxlbmd0aFxyXG4gIHRoaXMuZXh0cmFGaWVsZExlbmd0aCA9IGlucHV0W2lwKytdIHwgKGlucHV0W2lwKytdIDw8IDgpO1xyXG5cclxuICAvLyBmaWxlIG5hbWVcclxuICB0aGlzLmZpbGVuYW1lID0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBVU0VfVFlQRURBUlJBWSA/XHJcbiAgICBpbnB1dC5zdWJhcnJheShpcCwgaXAgKz0gdGhpcy5maWxlTmFtZUxlbmd0aCkgOlxyXG4gICAgaW5wdXQuc2xpY2UoaXAsIGlwICs9IHRoaXMuZmlsZU5hbWVMZW5ndGgpXHJcbiAgKTtcclxuXHJcbiAgLy8gZXh0cmEgZmllbGRcclxuICB0aGlzLmV4dHJhRmllbGQgPSBVU0VfVFlQRURBUlJBWSA/XHJcbiAgICBpbnB1dC5zdWJhcnJheShpcCwgaXAgKz0gdGhpcy5leHRyYUZpZWxkTGVuZ3RoKSA6XHJcbiAgICBpbnB1dC5zbGljZShpcCwgaXAgKz0gdGhpcy5leHRyYUZpZWxkTGVuZ3RoKTtcclxuXHJcbiAgdGhpcy5sZW5ndGggPSBpcCAtIHRoaXMub2Zmc2V0O1xyXG59O1xyXG5cclxuXHJcblpsaWIuVW56aXAucHJvdG90eXBlLnNlYXJjaEVuZE9mQ2VudHJhbERpcmVjdG9yeVJlY29yZCA9IGZ1bmN0aW9uKCkge1xyXG4gIC8qKiBAdHlwZSB7IShBcnJheS48bnVtYmVyPnxVaW50OEFycmF5KX0gKi9cclxuICB2YXIgaW5wdXQgPSB0aGlzLmlucHV0O1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHZhciBpcDtcclxuXHJcbiAgZm9yIChpcCA9IGlucHV0Lmxlbmd0aCAtIDEyOyBpcCA+IDA7IC0taXApIHtcclxuICAgIGlmIChpbnB1dFtpcCAgXSA9PT0gWmxpYi5VbnppcC5DZW50cmFsRGlyZWN0b3J5U2lnbmF0dXJlWzBdICYmXHJcbiAgICAgICAgaW5wdXRbaXArMV0gPT09IFpsaWIuVW56aXAuQ2VudHJhbERpcmVjdG9yeVNpZ25hdHVyZVsxXSAmJlxyXG4gICAgICAgIGlucHV0W2lwKzJdID09PSBabGliLlVuemlwLkNlbnRyYWxEaXJlY3RvcnlTaWduYXR1cmVbMl0gJiZcclxuICAgICAgICBpbnB1dFtpcCszXSA9PT0gWmxpYi5VbnppcC5DZW50cmFsRGlyZWN0b3J5U2lnbmF0dXJlWzNdKSB7XHJcbiAgICAgIHRoaXMuZW9jZHJPZmZzZXQgPSBpcDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdGhyb3cgbmV3IEVycm9yKCdFbmQgb2YgQ2VudHJhbCBEaXJlY3RvcnkgUmVjb3JkIG5vdCBmb3VuZCcpO1xyXG59O1xyXG5cclxuWmxpYi5VbnppcC5wcm90b3R5cGUucGFyc2VFbmRPZkNlbnRyYWxEaXJlY3RvcnlSZWNvcmQgPSBmdW5jdGlvbigpIHtcclxuICAvKiogQHR5cGUgeyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9ICovXHJcbiAgdmFyIGlucHV0ID0gdGhpcy5pbnB1dDtcclxuICAvKiogQHR5cGUge251bWJlcn0gKi9cclxuICB2YXIgaXA7XHJcblxyXG4gIGlmICghdGhpcy5lb2Nkck9mZnNldCkge1xyXG4gICAgdGhpcy5zZWFyY2hFbmRPZkNlbnRyYWxEaXJlY3RvcnlSZWNvcmQoKTtcclxuICB9XHJcbiAgaXAgPSB0aGlzLmVvY2RyT2Zmc2V0O1xyXG5cclxuICAvLyBzaWduYXR1cmVcclxuICBpZiAoaW5wdXRbaXArK10gIT09IFpsaWIuVW56aXAuQ2VudHJhbERpcmVjdG9yeVNpZ25hdHVyZVswXSB8fFxyXG4gICAgICBpbnB1dFtpcCsrXSAhPT0gWmxpYi5VbnppcC5DZW50cmFsRGlyZWN0b3J5U2lnbmF0dXJlWzFdIHx8XHJcbiAgICAgIGlucHV0W2lwKytdICE9PSBabGliLlVuemlwLkNlbnRyYWxEaXJlY3RvcnlTaWduYXR1cmVbMl0gfHxcclxuICAgICAgaW5wdXRbaXArK10gIT09IFpsaWIuVW56aXAuQ2VudHJhbERpcmVjdG9yeVNpZ25hdHVyZVszXSkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHNpZ25hdHVyZScpO1xyXG4gIH1cclxuXHJcbiAgLy8gbnVtYmVyIG9mIHRoaXMgZGlza1xyXG4gIHRoaXMubnVtYmVyT2ZUaGlzRGlzayA9IGlucHV0W2lwKytdIHwgKGlucHV0W2lwKytdIDw8IDgpO1xyXG5cclxuICAvLyBudW1iZXIgb2YgdGhlIGRpc2sgd2l0aCB0aGUgc3RhcnQgb2YgdGhlIGNlbnRyYWwgZGlyZWN0b3J5XHJcbiAgdGhpcy5zdGFydERpc2sgPSBpbnB1dFtpcCsrXSB8IChpbnB1dFtpcCsrXSA8PCA4KTtcclxuXHJcbiAgLy8gdG90YWwgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGNlbnRyYWwgZGlyZWN0b3J5IG9uIHRoaXMgZGlza1xyXG4gIHRoaXMudG90YWxFbnRyaWVzVGhpc0Rpc2sgPSBpbnB1dFtpcCsrXSB8IChpbnB1dFtpcCsrXSA8PCA4KTtcclxuXHJcbiAgLy8gdG90YWwgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGNlbnRyYWwgZGlyZWN0b3J5XHJcbiAgdGhpcy50b3RhbEVudHJpZXMgPSBpbnB1dFtpcCsrXSB8IChpbnB1dFtpcCsrXSA8PCA4KTtcclxuXHJcbiAgLy8gc2l6ZSBvZiB0aGUgY2VudHJhbCBkaXJlY3RvcnlcclxuICB0aGlzLmNlbnRyYWxEaXJlY3RvcnlTaXplID0gKFxyXG4gICAgKGlucHV0W2lwKytdICAgICAgKSB8IChpbnB1dFtpcCsrXSA8PCAgOCkgfFxyXG4gICAgKGlucHV0W2lwKytdIDw8IDE2KSB8IChpbnB1dFtpcCsrXSA8PCAyNClcclxuICApID4+PiAwO1xyXG5cclxuICAvLyBvZmZzZXQgb2Ygc3RhcnQgb2YgY2VudHJhbCBkaXJlY3Rvcnkgd2l0aCByZXNwZWN0IHRvIHRoZSBzdGFydGluZyBkaXNrIG51bWJlclxyXG4gIHRoaXMuY2VudHJhbERpcmVjdG9yeU9mZnNldCA9IChcclxuICAgIChpbnB1dFtpcCsrXSAgICAgICkgfCAoaW5wdXRbaXArK10gPDwgIDgpIHxcclxuICAgIChpbnB1dFtpcCsrXSA8PCAxNikgfCAoaW5wdXRbaXArK10gPDwgMjQpXHJcbiAgKSA+Pj4gMDtcclxuXHJcbiAgLy8gLlpJUCBmaWxlIGNvbW1lbnQgbGVuZ3RoXHJcbiAgdGhpcy5jb21tZW50TGVuZ3RoID0gaW5wdXRbaXArK10gfCAoaW5wdXRbaXArK10gPDwgOCk7XHJcblxyXG4gIC8vIC5aSVAgZmlsZSBjb21tZW50XHJcbiAgdGhpcy5jb21tZW50ID0gVVNFX1RZUEVEQVJSQVkgP1xyXG4gICAgaW5wdXQuc3ViYXJyYXkoaXAsIGlwICsgdGhpcy5jb21tZW50TGVuZ3RoKSA6XHJcbiAgICBpbnB1dC5zbGljZShpcCwgaXAgKyB0aGlzLmNvbW1lbnRMZW5ndGgpO1xyXG59O1xyXG5cclxuWmxpYi5VbnppcC5wcm90b3R5cGUucGFyc2VGaWxlSGVhZGVyID0gZnVuY3Rpb24oKSB7XHJcbiAgLyoqIEB0eXBlIHtBcnJheS48WmxpYi5VbnppcC5GaWxlSGVhZGVyPn0gKi9cclxuICB2YXIgZmlsZWxpc3QgPSBbXTtcclxuICAvKiogQHR5cGUge09iamVjdC48c3RyaW5nLCBudW1iZXI+fSAqL1xyXG4gIHZhciBmaWxldGFibGUgPSB7fTtcclxuICAvKiogQHR5cGUge251bWJlcn0gKi9cclxuICB2YXIgaXA7XHJcbiAgLyoqIEB0eXBlIHtabGliLlVuemlwLkZpbGVIZWFkZXJ9ICovXHJcbiAgdmFyIGZpbGVIZWFkZXI7XHJcbiAgLyo6IEB0eXBlIHtudW1iZXJ9ICovXHJcbiAgdmFyIGk7XHJcbiAgLyo6IEB0eXBlIHtudW1iZXJ9ICovXHJcbiAgdmFyIGlsO1xyXG5cclxuICBpZiAodGhpcy5maWxlSGVhZGVyTGlzdCkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuY2VudHJhbERpcmVjdG9yeU9mZnNldCA9PT0gdm9pZCAwKSB7XHJcbiAgICB0aGlzLnBhcnNlRW5kT2ZDZW50cmFsRGlyZWN0b3J5UmVjb3JkKCk7XHJcbiAgfVxyXG4gIGlwID0gdGhpcy5jZW50cmFsRGlyZWN0b3J5T2Zmc2V0O1xyXG5cclxuICBmb3IgKGkgPSAwLCBpbCA9IHRoaXMudG90YWxFbnRyaWVzOyBpIDwgaWw7ICsraSkge1xyXG4gICAgZmlsZUhlYWRlciA9IG5ldyBabGliLlVuemlwLkZpbGVIZWFkZXIodGhpcy5pbnB1dCwgaXApO1xyXG4gICAgZmlsZUhlYWRlci5wYXJzZSgpO1xyXG4gICAgaXAgKz0gZmlsZUhlYWRlci5sZW5ndGg7XHJcbiAgICBmaWxlbGlzdFtpXSA9IGZpbGVIZWFkZXI7XHJcbiAgICBmaWxldGFibGVbZmlsZUhlYWRlci5maWxlbmFtZV0gPSBpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMuY2VudHJhbERpcmVjdG9yeVNpemUgPCBpcCAtIHRoaXMuY2VudHJhbERpcmVjdG9yeU9mZnNldCkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGZpbGUgaGVhZGVyIHNpemUnKTtcclxuICB9XHJcblxyXG4gIHRoaXMuZmlsZUhlYWRlckxpc3QgPSBmaWxlbGlzdDtcclxuICB0aGlzLmZpbGVuYW1lVG9JbmRleCA9IGZpbGV0YWJsZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggZmlsZSBoZWFkZXIgaW5kZXguXHJcbiAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0X3BhcmFtc1xyXG4gKiBAcmV0dXJuIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSBmaWxlIGRhdGEuXHJcbiAqL1xyXG5abGliLlVuemlwLnByb3RvdHlwZS5nZXRGaWxlRGF0YSA9IGZ1bmN0aW9uKGluZGV4LCBvcHRfcGFyYW1zKSB7XHJcbiAgb3B0X3BhcmFtcyA9IG9wdF9wYXJhbXMgfHwge307XHJcbiAgLyoqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSAqL1xyXG4gIHZhciBpbnB1dCA9IHRoaXMuaW5wdXQ7XHJcbiAgLyoqIEB0eXBlIHtBcnJheS48WmxpYi5VbnppcC5GaWxlSGVhZGVyPn0gKi9cclxuICB2YXIgZmlsZUhlYWRlckxpc3QgPSB0aGlzLmZpbGVIZWFkZXJMaXN0O1xyXG4gIC8qKiBAdHlwZSB7WmxpYi5VbnppcC5Mb2NhbEZpbGVIZWFkZXJ9ICovXHJcbiAgdmFyIGxvY2FsRmlsZUhlYWRlcjtcclxuICAvKiogQHR5cGUge251bWJlcn0gKi9cclxuICB2YXIgb2Zmc2V0O1xyXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xyXG4gIHZhciBsZW5ndGg7XHJcbiAgLyoqIEB0eXBlIHshKEFycmF5LjxudW1iZXI+fFVpbnQ4QXJyYXkpfSAqL1xyXG4gIHZhciBidWZmZXI7XHJcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXHJcbiAgdmFyIGNyYzMyO1xyXG4gIC8qKiBAdHlwZSB7QXJyYXkuPG51bWJlcj58VWludDMyQXJyYXl8T2JqZWN0fSAqL1xyXG4gIHZhciBrZXk7XHJcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXHJcbiAgdmFyIGk7XHJcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXHJcbiAgdmFyIGlsO1xyXG5cclxuICBpZiAoIWZpbGVIZWFkZXJMaXN0KSB7XHJcbiAgICB0aGlzLnBhcnNlRmlsZUhlYWRlcigpO1xyXG4gIH1cclxuXHJcbiAgaWYgKGZpbGVIZWFkZXJMaXN0W2luZGV4XSA9PT0gdm9pZCAwKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3dyb25nIGluZGV4Jyk7XHJcbiAgfVxyXG5cclxuICBvZmZzZXQgPSBmaWxlSGVhZGVyTGlzdFtpbmRleF0ucmVsYXRpdmVPZmZzZXQ7XHJcbiAgbG9jYWxGaWxlSGVhZGVyID0gbmV3IFpsaWIuVW56aXAuTG9jYWxGaWxlSGVhZGVyKHRoaXMuaW5wdXQsIG9mZnNldCk7XHJcbiAgbG9jYWxGaWxlSGVhZGVyLnBhcnNlKCk7XHJcbiAgb2Zmc2V0ICs9IGxvY2FsRmlsZUhlYWRlci5sZW5ndGg7XHJcbiAgbGVuZ3RoID0gbG9jYWxGaWxlSGVhZGVyLmNvbXByZXNzZWRTaXplO1xyXG5cclxuICAvLyBkZWNyeXB0aW9uXHJcbiAgaWYgKChsb2NhbEZpbGVIZWFkZXIuZmxhZ3MgJiBabGliLlVuemlwLkxvY2FsRmlsZUhlYWRlci5GbGFncy5FTkNSWVBUKSAhPT0gMCkge1xyXG4gICAgaWYgKCEob3B0X3BhcmFtc1sncGFzc3dvcmQnXSB8fCB0aGlzLnBhc3N3b3JkKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BsZWFzZSBzZXQgcGFzc3dvcmQnKTtcclxuICAgIH1cclxuICAgIGtleSA9ICB0aGlzLmNyZWF0ZURlY3J5cHRpb25LZXkob3B0X3BhcmFtc1sncGFzc3dvcmQnXSB8fCB0aGlzLnBhc3N3b3JkKTtcclxuXHJcbiAgICAvLyBlbmNyeXB0aW9uIGhlYWRlclxyXG4gICAgZm9yKGkgPSBvZmZzZXQsIGlsID0gb2Zmc2V0ICsgMTI7IGkgPCBpbDsgKytpKSB7XHJcbiAgICAgIHRoaXMuZGVjb2RlKGtleSwgaW5wdXRbaV0pO1xyXG4gICAgfVxyXG4gICAgb2Zmc2V0ICs9IDEyO1xyXG4gICAgbGVuZ3RoIC09IDEyO1xyXG5cclxuICAgIC8vIGRlY3J5cHRpb25cclxuICAgIGZvciAoaSA9IG9mZnNldCwgaWwgPSBvZmZzZXQgKyBsZW5ndGg7IGkgPCBpbDsgKytpKSB7XHJcbiAgICAgIGlucHV0W2ldID0gdGhpcy5kZWNvZGUoa2V5LCBpbnB1dFtpXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzd2l0Y2ggKGxvY2FsRmlsZUhlYWRlci5jb21wcmVzc2lvbikge1xyXG4gICAgY2FzZSBabGliLlVuemlwLkNvbXByZXNzaW9uTWV0aG9kLlNUT1JFOlxyXG4gICAgICBidWZmZXIgPSBVU0VfVFlQRURBUlJBWSA/XHJcbiAgICAgICAgdGhpcy5pbnB1dC5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbmd0aCkgOlxyXG4gICAgICAgIHRoaXMuaW5wdXQuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpO1xyXG4gICAgICBicmVhaztcclxuICAgIGNhc2UgWmxpYi5VbnppcC5Db21wcmVzc2lvbk1ldGhvZC5ERUZMQVRFOlxyXG4gICAgICBidWZmZXIgPSBuZXcgWmxpYi5SYXdJbmZsYXRlKHRoaXMuaW5wdXQsIHtcclxuICAgICAgICAnaW5kZXgnOiBvZmZzZXQsXHJcbiAgICAgICAgJ2J1ZmZlclNpemUnOiBsb2NhbEZpbGVIZWFkZXIucGxhaW5TaXplXHJcbiAgICAgIH0pLmRlY29tcHJlc3MoKTtcclxuICAgICAgYnJlYWs7XHJcbiAgICBkZWZhdWx0OlxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gY29tcHJlc3Npb24gdHlwZScpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHRoaXMudmVyaWZ5KSB7XHJcbiAgICBjcmMzMiA9IFpsaWIuQ1JDMzIuY2FsYyhidWZmZXIpO1xyXG4gICAgaWYgKGxvY2FsRmlsZUhlYWRlci5jcmMzMiAhPT0gY3JjMzIpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICd3cm9uZyBjcmM6IGZpbGU9MHgnICsgbG9jYWxGaWxlSGVhZGVyLmNyYzMyLnRvU3RyaW5nKDE2KSArXHJcbiAgICAgICAgJywgZGF0YT0weCcgKyBjcmMzMi50b1N0cmluZygxNilcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBidWZmZXI7XHJcbn07XHJcblxyXG4vKipcclxuICogQHJldHVybiB7QXJyYXkuPHN0cmluZz59XHJcbiAqL1xyXG5abGliLlVuemlwLnByb3RvdHlwZS5nZXRGaWxlbmFtZXMgPSBmdW5jdGlvbigpIHtcclxuICAvKiogQHR5cGUge0FycmF5LjxzdHJpbmc+fSAqL1xyXG4gIHZhciBmaWxlbmFtZUxpc3QgPSBbXTtcclxuICAvKiogQHR5cGUge251bWJlcn0gKi9cclxuICB2YXIgaTtcclxuICAvKiogQHR5cGUge251bWJlcn0gKi9cclxuICB2YXIgaWw7XHJcbiAgLyoqIEB0eXBlIHtBcnJheS48WmxpYi5VbnppcC5GaWxlSGVhZGVyPn0gKi9cclxuICB2YXIgZmlsZUhlYWRlckxpc3Q7XHJcblxyXG4gIGlmICghdGhpcy5maWxlSGVhZGVyTGlzdCkge1xyXG4gICAgdGhpcy5wYXJzZUZpbGVIZWFkZXIoKTtcclxuICB9XHJcbiAgZmlsZUhlYWRlckxpc3QgPSB0aGlzLmZpbGVIZWFkZXJMaXN0O1xyXG5cclxuICBmb3IgKGkgPSAwLCBpbCA9IGZpbGVIZWFkZXJMaXN0Lmxlbmd0aDsgaSA8IGlsOyArK2kpIHtcclxuICAgIGZpbGVuYW1lTGlzdFtpXSA9IGZpbGVIZWFkZXJMaXN0W2ldLmZpbGVuYW1lO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZpbGVuYW1lTGlzdDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgZXh0cmFjdCBmaWxlbmFtZS5cclxuICogQHBhcmFtIHtPYmplY3Q9fSBvcHRfcGFyYW1zXHJcbiAqIEByZXR1cm4geyEoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IGRlY29tcHJlc3NlZCBkYXRhLlxyXG4gKi9cclxuWmxpYi5VbnppcC5wcm90b3R5cGUuZGVjb21wcmVzcyA9IGZ1bmN0aW9uKGZpbGVuYW1lLCBvcHRfcGFyYW1zKSB7XHJcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXHJcbiAgdmFyIGluZGV4O1xyXG5cclxuICBpZiAoIXRoaXMuZmlsZW5hbWVUb0luZGV4KSB7XHJcbiAgICB0aGlzLnBhcnNlRmlsZUhlYWRlcigpO1xyXG4gIH1cclxuICBpbmRleCA9IHRoaXMuZmlsZW5hbWVUb0luZGV4W2ZpbGVuYW1lXTtcclxuXHJcbiAgaWYgKGluZGV4ID09PSB2b2lkIDApIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihmaWxlbmFtZSArICcgbm90IGZvdW5kJyk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdGhpcy5nZXRGaWxlRGF0YShpbmRleCwgb3B0X3BhcmFtcyk7XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtIHsoQXJyYXkuPG51bWJlcj58VWludDhBcnJheSl9IHBhc3N3b3JkXHJcbiAqL1xyXG5abGliLlVuemlwLnByb3RvdHlwZS5zZXRQYXNzd29yZCA9IGZ1bmN0aW9uKHBhc3N3b3JkKSB7XHJcbiAgdGhpcy5wYXNzd29yZCA9IHBhc3N3b3JkO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7KEFycmF5LjxudW1iZXI+fFVpbnQzMkFycmF5fE9iamVjdCl9IGtleVxyXG4gKiBAcGFyYW0ge251bWJlcn0gblxyXG4gKiBAcmV0dXJuIHtudW1iZXJ9XHJcbiAqL1xyXG5abGliLlVuemlwLnByb3RvdHlwZS5kZWNvZGUgPSBmdW5jdGlvbihrZXksIG4pIHtcclxuICBuIF49IHRoaXMuZ2V0Qnl0ZSgvKiogQHR5cGUgeyhBcnJheS48bnVtYmVyPnxVaW50MzJBcnJheSl9ICovKGtleSkpO1xyXG4gIHRoaXMudXBkYXRlS2V5cygvKiogQHR5cGUgeyhBcnJheS48bnVtYmVyPnxVaW50MzJBcnJheSl9ICovKGtleSksIG4pO1xyXG5cclxuICByZXR1cm4gbjtcclxufTtcclxuXHJcbi8vIGNvbW1vbiBtZXRob2RcclxuWmxpYi5VbnppcC5wcm90b3R5cGUudXBkYXRlS2V5cyA9IFpsaWIuWmlwLnByb3RvdHlwZS51cGRhdGVLZXlzO1xyXG5abGliLlVuemlwLnByb3RvdHlwZS5jcmVhdGVEZWNyeXB0aW9uS2V5ID0gWmxpYi5aaXAucHJvdG90eXBlLmNyZWF0ZUVuY3J5cHRpb25LZXk7XHJcblpsaWIuVW56aXAucHJvdG90eXBlLmdldEJ5dGUgPSBabGliLlppcC5wcm90b3R5cGUuZ2V0Qnl0ZTtcclxuXHJcbi8vIGVuZCBvZiBzY29wZVxyXG59KTtcclxuIiwiZ29vZy5yZXF1aXJlKCdabGliLlVuemlwJyk7XG5cbmdvb2cuZXhwb3J0U3ltYm9sKCdabGliLlVuemlwJywgWmxpYi5VbnppcCk7XG5nb29nLmV4cG9ydFN5bWJvbChcbiAgJ1psaWIuVW56aXAucHJvdG90eXBlLmRlY29tcHJlc3MnLFxuICBabGliLlVuemlwLnByb3RvdHlwZS5kZWNvbXByZXNzXG4pO1xuZ29vZy5leHBvcnRTeW1ib2woXG4gICdabGliLlVuemlwLnByb3RvdHlwZS5nZXRGaWxlbmFtZXMnLFxuICBabGliLlVuemlwLnByb3RvdHlwZS5nZXRGaWxlbmFtZXNcbik7XG5nb29nLmV4cG9ydFN5bWJvbChcbiAgJ1psaWIuVW56aXAucHJvdG90eXBlLnNldFBhc3N3b3JkJyxcbiAgWmxpYi5VbnppcC5wcm90b3R5cGUuc2V0UGFzc3dvcmRcbik7Il19 \ No newline at end of file diff --git a/bin/unzip.min.js b/bin/unzip.min.js index 8d19e36..1c1a364 100644 --- a/bin/unzip.min.js +++ b/bin/unzip.min.js @@ -28,4 +28,4 @@ function $(a){var b=[],c={},d,f,h,k;if(!a.i){if(a.o===q){var e=a.input,g;if(!a.D e[g++]<<8|e[g++]<<16|e[g++]<<24)>>>0;a.w=e[g++]|e[g++]<<8;a.v=w?e.subarray(g,g+a.w):e.slice(g,g+a.w)}d=a.o;h=0;for(k=a.ba;h>>8^B[(n^l[t])&255];for(N=ka>>3;N--;t+=8)n=n>>>8^B[(n^l[t])&255],n=n>>>8^B[(n^l[t+1])&255],n=n>>>8^B[(n^l[t+2])&255],n=n>>>8^B[(n^l[t+3])&255],n=n>>>8^B[(n^l[t+4])&255],n=n>>>8^B[(n^l[t+5])&255],n=n>>>8^B[(n^l[t+6])&255],n=n>>>8^B[(n^l[t+7])&255];p=(n^4294967295)>>>0;k.p!==p&&m(Error("wrong crc: file=0x"+ -k.p.toString(16)+", data=0x"+p.toString(16)))}return l};u.M=function(a){this.j=a};function ra(a,b,c){c^=a.s(b);a.k(b,c);return c}u.k=V.prototype.k;u.T=V.prototype.U;u.s=V.prototype.s;v("Zlib.Unzip",W);v("Zlib.Unzip.prototype.decompress",W.prototype.r);v("Zlib.Unzip.prototype.getFilenames",W.prototype.Z);v("Zlib.Unzip.prototype.setPassword",W.prototype.M);}).call(this); //@ sourceMappingURL=unzip.min.js.map +k.p.toString(16)+", data=0x"+p.toString(16)))}return l};u.M=function(a){this.j=a};function ra(a,b,c){c^=a.s(b);a.k(b,c);return c}u.k=V.prototype.k;u.T=V.prototype.U;u.s=V.prototype.s;v("Zlib.Unzip",W);v("Zlib.Unzip.prototype.decompress",W.prototype.r);v("Zlib.Unzip.prototype.getFilenames",W.prototype.Z);v("Zlib.Unzip.prototype.setPassword",W.prototype.M);}).call(this); diff --git a/bin/unzip.min.js.map b/bin/unzip.min.js.map deleted file mode 100644 index c9b90b4..0000000 --- a/bin/unzip.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"./unzip.min.js", -"lineCount":31, -"mappings":"A,mHAAA,oCAAA,CAAA,CA4CAA,GAAc,IA4yCMC,SAAQ,EAAA,CAACC,CAAD,CAAaC,CAAb,CAA2C,CAjrCrE,IAAIC,EAkrCaF,CAlrCLG,MAAA,CAAW,GAAX,CAAZ,CACIC,EAA8BN,EAK9B,GAAEI,CAAA,CAAM,CAAN,CAAF,EAAcE,EAAd,CAAJ,EAA0BA,CAAAC,WAA1B,EACED,CAAAC,WAAA,CAAe,MAAf,CAAwBH,CAAA,CAAM,CAAN,CAAxB,CASF,KAAK,IAAII,CAAT,CAAeJ,CAAAK,OAAf,GAAgCD,CAAhC,CAAuCJ,CAAAM,MAAA,EAAvC,EAAA,CACM,CAACN,CAAAK,OAAL,EAiqC2BN,CAjqC3B,GAyjBaQ,CAzjBb,CAEEL,CAAA,CAAIE,CAAJ,CAFF,CAiqC2BL,CAjqC3B,CAIEG,CAJF,CAGWA,CAAA,CAAIE,CAAJ,CAAJ,CACCF,CAAA,CAAIE,CAAJ,CADD,CAGCF,CAAA,CAAIE,CAAJ,CAHD,CAGa,EA0pC+C,C,CC90CvE,IAAII,EACqB,WADrBA,GACD,MAAOC,WADND,EAEsB,WAFtBA,GAED,MAAOE,YAFNF,EAGsB,WAHtBA,GAGD,MAAOG,YAHNH,EAImB,WAJnBA,GAID,MAAOI,S,CC8JI,KAAKJ,CAAA,CAAiBC,UAAjB,CAA8BI,KAAnC,EAA0C,GAA1C,CAEZ,KAAIC,CAGJ,KAAKA,CAAL,CAAS,CAAT,CAAgB,GAAhB,CAAYA,CAAZ,CAAqB,EAAEA,CAAvB,CAKI,IAOCA,IAAAA,EAAAA,CAAAA,CATGC,GAAI,CASPD,CAPIE,EAAAA,CAAAA,GAAO,CAAZ,CAAeA,CAAf,CAAkBA,CAAlB,IAAyB,CAAzB,CAGE,EAAED,E,CCnHV,IAAAE,EAAoB,CAClB,CADkB,CACN,UADM,CACM,UADN,CACkB,UADlB,CAC8B,SAD9B,CAC0C,UAD1C,CAElB,UAFkB,CAEN,UAFM,CAEM,SAFN,CAEkB,UAFlB,CAE8B,UAF9B,CAE0C,UAF1C,CAGlB,SAHkB,CAGN,UAHM,CAGM,UAHN,CAGkB,UAHlB,CAG8B,SAH9B,CAG0C,UAH1C,CAIlB,UAJkB,CAIN,UAJM,CAIM,SAJN,CAIkB,UAJlB,CAI8B,UAJ9B,CAI0C,UAJ1C,CAKlB,SALkB,CAKN,UALM,CAKM,UALN,CAKkB,UALlB,CAK8B,SAL9B,CAK0C,UAL1C,CAMlB,UANkB,CAMN,UANM,CAMM,SANN,CAMkB,UANlB,CAM8B,UAN9B,CAM0C,UAN1C,CAOlB,UAPkB,CAON,UAPM,CAOM,UAPN,CAOkB,UAPlB,CAO8B,SAP9B,CAO0C,UAP1C,CAQlB,UARkB,CAQN,UARM,CAQM,SARN,CAQkB,UARlB,CAQ8B,UAR9B;AAQ0C,UAR1C,CASlB,SATkB,CASN,UATM,CASM,UATN,CASkB,UATlB,CAS8B,SAT9B,CAS0C,UAT1C,CAUlB,UAVkB,CAUN,UAVM,CAUM,SAVN,CAUkB,UAVlB,CAU8B,UAV9B,CAU0C,UAV1C,CAWlB,SAXkB,CAWN,UAXM,CAWM,UAXN,CAWkB,UAXlB,CAW8B,UAX9B,CAW0C,QAX1C,CAYlB,UAZkB,CAYN,UAZM,CAYM,UAZN,CAYkB,SAZlB,CAY8B,UAZ9B,CAY0C,UAZ1C,CAalB,UAbkB,CAaN,SAbM,CAaM,UAbN,CAakB,UAblB,CAa8B,UAb9B,CAa0C,SAb1C,CAclB,UAdkB,CAcN,UAdM,CAcM,UAdN,CAckB,SAdlB,CAc8B,UAd9B,CAc0C,UAd1C,CAelB,UAfkB,CAeN,SAfM,CAeM,UAfN,CAekB,UAflB,CAe8B,UAf9B,CAe0C,SAf1C,CAgBlB,UAhBkB,CAgBN,UAhBM,CAgBM,UAhBN,CAgBkB,SAhBlB;AAgB8B,UAhB9B,CAgB0C,UAhB1C,CAiBlB,UAjBkB,CAiBN,SAjBM,CAiBM,UAjBN,CAiBkB,UAjBlB,CAiB8B,UAjB9B,CAiB0C,UAjB1C,CAkBlB,UAlBkB,CAkBN,UAlBM,CAkBM,UAlBN,CAkBkB,SAlBlB,CAkB8B,UAlB9B,CAkB0C,UAlB1C,CAmBlB,UAnBkB,CAmBN,SAnBM,CAmBM,UAnBN,CAmBkB,UAnBlB,CAmB8B,UAnB9B,CAmB0C,SAnB1C,CAoBlB,UApBkB,CAoBN,UApBM,CAoBM,UApBN,CAoBkB,SApBlB,CAoB8B,UApB9B,CAoB0C,UApB1C,CAqBlB,UArBkB,CAqBN,SArBM,CAqBM,UArBN,CAqBkB,UArBlB,CAqB8B,UArB9B,CAqB0C,SArB1C,CAsBlB,UAtBkB,CAsBN,UAtBM,CAsBM,UAtBN,CAsBkB,UAtBlB,CAsB8B,QAtB9B,CAsB0C,UAtB1C,CAuBlB,UAvBkB,CAuBN,UAvBM,CAuBM,QAvBN,CAuBkB,UAvBlB,CAuB8B,UAvB9B,CAuB0C,UAvB1C,CAwBlB,SAxBkB,CAwBN,UAxBM,CAwBM,UAxBN;AAwBkB,UAxBlB,CAwB8B,SAxB9B,CAwB0C,UAxB1C,CAyBlB,UAzBkB,CAyBN,UAzBM,CAyBM,SAzBN,CAyBkB,UAzBlB,CAyB8B,UAzB9B,CAyB0C,UAzB1C,CA0BlB,SA1BkB,CA0BN,UA1BM,CA0BM,UA1BN,CA0BkB,UA1BlB,CA0B8B,SA1B9B,CA0B0C,UA1B1C,CA2BlB,UA3BkB,CA2BN,UA3BM,CA2BM,SA3BN,CA2BkB,UA3BlB,CA2B8B,UA3B9B,CA2B0C,UA3B1C,CA4BlB,SA5BkB,CA4BN,UA5BM,CA4BM,UA5BN,CA4BkB,UA5BlB,CA4B8B,UA5B9B,CA4B0C,UA5B1C,CA6BlB,UA7BkB,CA6BN,UA7BM,CA6BM,SA7BN,CA6BkB,UA7BlB,CA6B8B,UA7B9B,CA6B0C,UA7B1C,CA8BlB,SA9BkB,CA8BN,UA9BM,CA8BM,UA9BN,CA8BkB,UA9BlB,CA8B8B,SA9B9B,CA8B0C,UA9B1C,CA+BlB,UA/BkB,CA+BN,UA/BM,CA+BM,SA/BN,CA+BkB,UA/BlB,CA+B8B,UA/B9B,CA+B0C,UA/B1C,CAgClB,SAhCkB,CAgCN,UAhCM;AAgCM,UAhCN,CAgCkB,UAhClB,CAgC8B,SAhC9B,CAgC0C,UAhC1C,CAiClB,UAjCkB,CAiCN,UAjCM,CAiCM,UAjCN,CAiCkB,QAjClB,CAiC8B,UAjC9B,CAiC0C,UAjC1C,CAkClB,UAlCkB,CAkCN,QAlCM,CAkCM,UAlCN,CAkCkB,UAlClB,CAkC8B,UAlC9B,CAkC0C,SAlC1C,CAmClB,UAnCkB,CAmCN,UAnCM,CAmCM,UAnCN,CAmCkB,SAnClB,CAmC8B,UAnC9B,CAmC0C,UAnC1C,CAoClB,UApCkB,CAoCN,SApCM,CAoCM,UApCN,CAoCkB,UApClB,CAoC8B,UApC9B,CAoC0C,SApC1C,CAqClB,UArCkB,CAqCN,UArCM,CAqCM,UArCN,CAqCkB,SArClB,CAqC8B,UArC9B,CAqC0C,UArC1C,CAsClB,UAtCkB,CAsCN,SAtCM,CAsCM,UAtCN,CAsCkB,UAtClB,CAsC8B,UAtC9B,CAsC0C,SAtC1C,CAuClB,UAvCkB,CAuCN,UAvCM,CAuCM,UAvCN,CAuCkB,UAvClB,CAuC8B,UAvC9B,CAuC0C,UAvC1C,CAwClB,UAxCkB;AAwCN,QAxCM,CAwCM,UAxCN,CAwCkB,UAxClB,CAwC8B,UAxC9B,CAwC0C,SAxC1C,CAyClB,UAzCkB,CAyCN,UAzCM,CAyCM,UAzCN,CAyCkB,SAzClB,CAyC8B,UAzC9B,CAyC0C,UAzC1C,CA0ClB,UA1CkB,CA0CN,SA1CM,CA0CM,UA1CN,CA0CkB,UA1ClB,CA0C8B,UA1C9B,CA0C0C,SA1C1C,CA2ClB,UA3CkB,CA2CN,UA3CM,CA2CM,UA3CN,CA2CkB,SA3ClB,CAApB,CAkDAC,EAmBOV,CAAA,CAAiB,IAAIG,WAAJ,CAAgBM,CAAhB,CAAjB,CAAsDA,C,CChI5BE,QAAQ,EAAA,CAACC,CAAD,CAAU,CAEjD,IAAIC,EAAWD,CAAAf,OAAf,CAEIiB,EAAgB,CAFpB,CAIIC,EAAgBC,MAAAC,kBAJpB,CAMIC,CANJ,CAQIC,CARJ,CAUIC,CAVJ,CAYIC,CAZJ,CAiBIC,CAjBJ,CAmBIC,CAnBJ,CAqBIC,CArBJ,CAuBIlB,CAvBJ,CA2BImB,CA3BJ,CA6BIC,CAGJ,KAAKpB,CAAL,CAAS,CAAT,CAA2BA,CAA3B,CAAiBO,CAAjB,CAAmC,EAAEP,CAArC,CACMM,CAAA,CAAQN,CAAR,CAGJ,CAHiBQ,CAGjB,GAFEA,CAEF,CAFkBF,CAAA,CAAQN,CAAR,CAElB,EAAIM,CAAA,CAAQN,CAAR,CAAJ,CAAiBS,CAAjB,GACEA,CADF,CACkBH,CAAA,CAAQN,CAAR,CADlB,CAKFY,EAAA,CAAO,CAAP,EAAYJ,CACZK,EAAA,CAAQ,KAAKnB,CAAA,CAAiBG,WAAjB,CAA+BE,KAApC,EAA2Ca,CAA3C,CAGHE,EAAA,CAAY,CAAGC,EAAf,CAAsB,CAA3B,KAA8BC,CAA9B,CAAqC,CAArC,CAAwCF,CAAxC,EAAqDN,CAArD,CAAA,CAAqE,CACnE,IAAKR,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBO,CAAhB,CAA0B,EAAEP,CAA5B,CACE,GAAIM,CAAA,CAAQN,CAAR,CAAJ,GAAmBc,CAAnB,CAA8B,CAEvBG,CAAA,CAAW,CAAGC,EAAd,CAAsBH,CAA3B,KAAiCI,CAAjC,CAAqC,CAArC,CAAwCA,CAAxC,CAA4CL,CAA5C,CAAuD,EAAEK,CAAzD,CACEF,CACA,CADYA,CACZ,EADwB,CACxB,CAD8BC,CAC9B,CADsC,CACtC,CAAAA,CAAA,GAAU,CAOZE,EAAA,CAASN,CAAT,EAAsB,EAAtB,CAA4Bd,CAC5B,KAAKmB,CAAL,CAASF,CAAT,CAAmBE,CAAnB,CAAuBP,CAAvB,CAA6BO,CAA7B,EAAkCH,CAAlC,CACEH,CAAA,CAAMM,CAAN,CAAA,CAAWC,CAGb,GAAEL,CAhB0B,CAqBhC,EAAED,CACFC,EAAA,GAAS,CACTC,EAAA,GAAS,CAzB0D,CA4BrE,MAAO,CAACH,CAAD,CAAQL,CAAR,CAAuBC,CAAvB,CA3E0C,C,CCwGH,IAC1CI,EAAQ,EADkC,CAC9Bb,CAEhB,KAAKA,CAAL,CAAS,CAAT,CAAgB,GAAhB,CAAYA,CAAZ,CAAqBA,CAAA,EAArB,CACE,OAAQ,CAAA,CAAR,EACE,KAAW,GAAX,EAAMA,CAAN,CAAiBa,CAAAQ,KAAA,CAAW,CAACrB,CAAD,CAAW,EAAX,CAAkB,CAAlB,CAAX,CAAkC,MACnD,MAAW,GAAX,EAAMA,CAAN,CAAiBa,CAAAQ,KAAA,CAAW,CAACrB,CAAD,CAAK,GAAL,CAAW,GAAX,CAAkB,CAAlB,CAAX,CAAkC,MACnD,MAAW,GAAX,EAAMA,CAAN,CAAiBa,CAAAQ,KAAA,CAAW,CAACrB,CAAD,CAAK,GAAL,CAAW,CAAX,CAAkB,CAAlB,CAAX,CAAkC,MACnD,MAAW,GAAX,EAAMA,CAAN,CAAiBa,CAAAQ,KAAA,CAAW,CAACrB,CAAD,CAAK,GAAL,CAAW,GAAX,CAAkB,CAAlB,CAAX,CAAkC,MACnD,SACEsB,CAAA,CAAM,mBAAN,CAA4BtB,CAA5B,CANJ;AAsYA,IAAA,GAAA,QAAQ,EAAG,CAiBbe,QAASA,EAAI,CAACxB,CAAD,CAAS,CACpB,OAAQ,CAAA,CAAR,EACE,KAAiB,CAAjB,GAAMA,CAAN,CAAqB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,CAAf,CAAkB,CAAlB,CAC5B,MAAiB,CAAjB,GAAMA,CAAN,CAAqB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,CAAf,CAAkB,CAAlB,CAC5B,MAAiB,CAAjB,GAAMA,CAAN,CAAqB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,CAAf,CAAkB,CAAlB,CAC5B,MAAiB,CAAjB,GAAMA,CAAN,CAAqB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,CAAf,CAAkB,CAAlB,CAC5B,MAAiB,CAAjB,GAAMA,CAAN,CAAqB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,CAAf,CAAkB,CAAlB,CAC5B,MAAiB,CAAjB,GAAMA,CAAN,CAAqB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,CAAf,CAAkB,CAAlB,CAC5B,MAAiB,CAAjB,GAAMA,CAAN,CAAqB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,CAAf,CAAkB,CAAlB,CAC5B,MAAiB,EAAjB,GAAMA,CAAN,CAAsB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,EAAf,CAAmB,CAAnB,CAC7B,MAAgB,EAAhB,EAAMA,CAAN,CAAqB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,EAAf,CAAmB,CAAnB,CAC5B,MAAgB,EAAhB,EAAMA,CAAN,CAAqB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,EAAf,CAAmB,CAAnB,CAC5B,MAAgB,EAAhB,EAAMA,CAAN,CAAqB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,EAAf,CAAmB,CAAnB,CAC5B,MAAgB,EAAhB,EAAMA,CAAN,CAAqB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,EAAf,CAAmB,CAAnB,CAC5B,MAAgB,EAAhB,EAAMA,CAAN,CAAqB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,EAAf,CAAmB,CAAnB,CAC5B,MAAgB,EAAhB,EAAMA,CAAN,CAAqB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,EAAf,CAAmB,CAAnB,CAC5B,MAAgB,EAAhB,EAAMA,CAAN,CAAqB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,EAAf,CAAmB,CAAnB,CAC5B,MAAgB,EAAhB,EAAMA,CAAN,CAAqB,MAAO,CAAC,GAAD;AAAMA,CAAN,CAAe,EAAf,CAAmB,CAAnB,CAC5B,MAAgB,EAAhB,EAAMA,CAAN,CAAqB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,EAAf,CAAmB,CAAnB,CAC5B,MAAgB,EAAhB,EAAMA,CAAN,CAAqB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,EAAf,CAAmB,CAAnB,CAC5B,MAAgB,EAAhB,EAAMA,CAAN,CAAqB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,EAAf,CAAmB,CAAnB,CAC5B,MAAgB,EAAhB,EAAMA,CAAN,CAAqB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,EAAf,CAAmB,CAAnB,CAC5B,MAAgB,EAAhB,EAAMA,CAAN,CAAqB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,EAAf,CAAmB,CAAnB,CAC5B,MAAgB,EAAhB,EAAMA,CAAN,CAAqB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,EAAf,CAAmB,CAAnB,CAC5B,MAAgB,GAAhB,EAAMA,CAAN,CAAsB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,EAAf,CAAmB,CAAnB,CAC7B,MAAgB,GAAhB,EAAMA,CAAN,CAAsB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,GAAf,CAAoB,CAApB,CAC7B,MAAgB,GAAhB,EAAMA,CAAN,CAAsB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,GAAf,CAAoB,CAApB,CAC7B,MAAgB,GAAhB,EAAMA,CAAN,CAAsB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,GAAf,CAAoB,CAApB,CAC7B,MAAgB,GAAhB,EAAMA,CAAN,CAAsB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,GAAf,CAAoB,CAApB,CAC7B,MAAgB,GAAhB,EAAMA,CAAN,CAAsB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,GAAf,CAAoB,CAApB,CAC7B,MAAiB,GAAjB,GAAMA,CAAN,CAAuB,MAAO,CAAC,GAAD,CAAMA,CAAN,CAAe,GAAf,CAAoB,CAApB,CAC9B,SAAS+B,CAAA,CAAM,kBAAN,CAA2B/B,CAA3B,CA9BX,CADoB,CAftB,IAAIsB,EAAQ,EAAZ,CAEIb,CAFJ,CAIIuB,CAEJ,KAAKvB,CAAL,CAAS,CAAT,CAAiB,GAAjB,EAAYA,CAAZ,CAAsBA,CAAA,EAAtB,CACEuB,CACA,CADIR,CAAA,CAAKf,CAAL,CACJ,CAAAa,CAAA,CAAMb,CAAN,CAAA,CAAYuB,CAAA,CAAE,CAAF,CAAZ,EAAoB,EAApB,CAA2BA,CAAA,CAAE,CAAF,CAA3B;AAAmC,EAAnC,CAAyCA,CAAA,CAAE,CAAF,CA0C3C,OAAOV,EApDM,CAAX,EADKnB,EAAA,EAAiB,IAAIG,WAAJ,CAAgBgB,EAAhB,C,CCjeRW,QAAQ,EAAA,CAACC,CAAD,CAAQC,CAAR,CAAoB,CAI5C,IAAAC,EAAA,CAAc,EAEd,KAAAC,EAAA,CAzBiCC,KAiCjC,KAAAC,EAAA,CAFA,IAAAC,EAEA,CAJA,IAAAC,EAIA,CANA,IAAAC,EAMA,CANgB,CAQhB,KAAAR,MAAA,CAAa/B,CAAA,CAAiB,IAAIC,UAAJ,CAAe8B,CAAf,CAAjB,CAAyCA,CAMtD,KAAAS,EAAA,CAAc,CAAA,CAEd,KAAAC,EAAA,CAAkBC,CAElB,KAAAC,EAAA,CAAc,CAAA,CAKd,IAAIX,CAAJ,EAAkB,EAAEA,CAAF,CAAe,EAAf,CAAlB,CACMA,CAAA,MASJ,GARE,IAAAM,EAQF,CARYN,CAAA,MAQZ,EANIA,CAAA,WAMJ,GALE,IAAAE,EAKF,CALoBF,CAAA,WAKpB,EAHIA,CAAA,WAGJ,GAFE,IAAAS,EAEF,CAFoBT,CAAA,WAEpB,EAAIA,CAAA,OAAJ,GACE,IAAAW,EADF,CACgBX,CAAA,OADhB,CAMF,QAAQ,IAAAS,EAAR,EACE,KAAKG,CAAL,CACE,IAAAC,EAAA,CA4C8BC,KA3C9B,KAAAC,EAAA,CACE,KAAK/C,CAAA,CAAiBC,UAAjB,CAA8BI,KAAnC,EA0C4ByC,KA1C5B,CAEE,IAAAZ,EAFF,CAgDwBc,GAhDxB,CAKF,MACF,MAAKN,CAAL,CACE,IAAAG,EAAA,CAAU,CACV,KAAAE,EAAA,CAAc,KAAK/C,CAAA,CAAiBC,UAAjB,CAA8BI,KAAnC,EAA0C,IAAA6B,EAA1C,CACd,KAAAe,EAAA,CAAoB,IAAAC,EACpB,KAAAC,EAAA,CAAoB,IAAAC,EACpB,KAAAC,EAAA,CAAqB,IAAAC,EACrB,MACF,SACE1B,CAAA,CAAU2B,KAAJ,CAAU,sBAAV,CAAN,CAlBJ,CA/C4C,CA3B9C;AAoGEC,IAAAA,EAAOA,CAAPA,CACAC,EAAUA,CAOZ3B;CAAA4B,UAAAC,EAAA,CAAuCC,QAAQ,EAAG,CAChD,IAAA,CAAO,CAAC,IAAApB,EAAR,CAAA,CAAqB,CA6HrB,IAAIqB,EAAMC,CAAA,CA5HRC,IA4HQ,CAAc,CAAd,CAGNF,EAAJ,CAAU,CAAV,GA/HEE,IAgIAvB,EADF,CACgB,CAAA,CADhB,CAKAqB,EAAA,IAAS,CACT,QAAQA,CAAR,EAEE,KAAK,CAAL,CAuGF,IAAI9B,EA9OFgC,IA8OUhC,MAAZ,CACIO,EA/OFyB,IA+OOzB,EADT,CAEIS,EAhPFgB,IAgPWhB,EAFb,CAGIF,EAjPFkB,IAiPOlB,EAHT,CAMImB,EAAcjC,CAAAlC,OANlB,CAQIoE,EAAAlE,CARJ,CAUImE,EAAAnE,CAVJ,CAYIoE,EAAUpB,CAAAlD,OAZd,CAcIuE,EAAArE,CA5PFgE,KAgQF3B,EAAA,CAhQE2B,IA+PF1B,EACA,CADe,CAIXC,EAAJ,CAAS,CAAT,EAAc0B,CAAd,EACEpC,CADF,CACY2B,KAAJ,CAAU,wCAAV,CADR,CAGAU,EAAA,CAAMlC,CAAA,CAAMO,CAAA,EAAN,CAAN,CAAqBP,CAAA,CAAMO,CAAA,EAAN,CAArB,EAAoC,CAGhCA,EAAJ,CAAS,CAAT,EAAc0B,CAAd,EACEpC,CADF,CACY2B,KAAJ,CAAU,yCAAV,CADR,CAGAW,EAAA,CAAOnC,CAAA,CAAMO,CAAA,EAAN,CAAP,CAAsBP,CAAA,CAAMO,CAAA,EAAN,CAAtB,EAAqC,CAGjC2B,EAAJ,GAAY,CAACC,CAAb,EACEtC,CADF,CACY2B,KAAJ,CAAU,kDAAV,CADR,CAKIjB,EAAJ,CAAS2B,CAAT,CAAelC,CAAAlC,OAAf,EAA+B+B,CAA/B,CAAyC2B,KAAJ,CAAU,wBAAV,CAArC,CAGA,QAvREQ,IAuRMtB,EAAR,EACE,KAAKG,CAAL,CAEE,IAAA,CAAOC,CAAP,CAAYoB,CAAZ,CAAkBlB,CAAAlD,OAAlB,CAAA,CAAiC,CAC/BuE,CAAA;AAAUD,CAAV,CAAoBtB,CACpBoB,EAAA,EAAOG,CACP,IAAIpE,CAAJ,CACE+C,CAAAsB,IAAA,CAAWtC,CAAAuC,SAAA,CAAehC,CAAf,CAAmBA,CAAnB,CAAwB8B,CAAxB,CAAX,CAA6CvB,CAA7C,CAEA,CADAA,CACA,EADMuB,CACN,CAAA9B,CAAA,EAAM8B,CAHR,KAKE,KAAA,CAAOA,CAAA,EAAP,CAAA,CACErB,CAAA,CAAOF,CAAA,EAAP,CAAA,CAAed,CAAA,CAAMO,CAAA,EAAN,CAnSvByB,KAsSIlB,EAAA,CAAUA,CACVE,EAAA,CAvSJgB,IAuSad,EAAA,EACTJ,EAAA,CAxSJkB,IAwSSlB,EAd0B,CAgBjC,KACF,MAAKH,CAAL,CACE,IAAA,CAAOG,CAAP,CAAYoB,CAAZ,CAAkBlB,CAAAlD,OAAlB,CAAA,CACEkD,CAAA,CA7SJgB,IA6Sad,EAAA,CAAkB,GAAW,CAAX,CAAlB,CAEX,MACF,SACErB,CAAA,CAAU2B,KAAJ,CAAU,sBAAV,CAAN,CA1BJ,CA8BA,GAAIvD,CAAJ,CACE+C,CAAAsB,IAAA,CAAWtC,CAAAuC,SAAA,CAAehC,CAAf,CAAmBA,CAAnB,CAAwB2B,CAAxB,CAAX,CAAyCpB,CAAzC,CAEA,CADAA,CACA,EADMoB,CACN,CAAA3B,CAAA,EAAM2B,CAHR,KAKE,KAAA,CAAOA,CAAA,EAAP,CAAA,CACElB,CAAA,CAAOF,CAAA,EAAP,CAAA,CAAed,CAAA,CAAMO,CAAA,EAAN,CA3TjByB,KA+TFzB,EAAA,CAAUA,CA/TRyB,KAgUFlB,EAAA,CAAUA,CAhURkB,KAiUFhB,EAAA,CAAcA,CAxLV,MAEF,MAAK,CAAL,CA3IAgB,IAwUFV,EAAA,CACEkB,EADF,CAEEC,EAFF,CA3LI,MAEF,MAAK,CAAL,CACEC,EAAA,CAhJFV,IAgJE,CACA,MAEF,SACEnC,CAAA,CAAU2B,KAAJ,CAAU,iBAAV,CAA8BM,CAA9B,CAAN,CAfJ,CAtIqB,CAIrB,MAAO,KAAAV,EAAA,EALyC,CA2B/C;IAAA,EAAA,CAAC,EAAD,CAAK,EAAL,CAAS,EAAT,CAAa,CAAb,CAAgB,CAAhB,CAAmB,CAAnB,CAAsB,CAAtB,CAAyB,CAAzB,CAA4B,EAA5B,CAAgC,CAAhC,CAAmC,EAAnC,CAAuC,CAAvC,CAA0C,EAA1C,CAA8C,CAA9C,CAAiD,EAAjD,CAAqD,CAArD,CAAwD,EAAxD,CAA4D,CAA5D,CAA+D,EAA/D,CAAA,CAFHuB,EACS1E,CAAA,CAAiB,IAAIE,WAAJ,CAAgBiB,CAAhB,CAAjB,CAA0CA,CAChD,CASA,EAAA,CACD,CADC,CACO,CADP,CACe,CADf,CACuB,CADvB,CAC+B,CAD/B,CACuC,CADvC,CAC+C,CAD/C,CACuD,EADvD,CAC+D,EAD/D,CAED,EAFC,CAEO,EAFP,CAEe,EAFf,CAEuB,EAFvB,CAE+B,EAF/B,CAEuC,EAFvC,CAE+C,EAF/C,CAEuD,EAFvD,CAE+D,EAF/D,CAGD,EAHC,CAGO,EAHP,CAGe,EAHf,CAGuB,EAHvB,CAG+B,EAH/B,CAGuC,GAHvC,CAG+C,GAH/C,CAGuD,GAHvD,CAG+D,GAH/D,CAID,GAJC,CAIO,GAJP,CAIe,GAJf,CAIuB,GAJvB,CATA,CAOHwD,EACS3E,CAAA,CAAiB,IAAIE,WAAJ,CAAgBiB,CAAhB,CAAjB,CAA0CA,CARhD,CAuBA,GAAA,CACD,CADC,CACE,CADF,CACK,CADL,CACQ,CADR,CACW,CADX,CACc,CADd,CACiB,CADjB,CACoB,CADpB,CACuB,CADvB,CAC0B,CAD1B,CAC6B,CAD7B,CACgC,CADhC,CACmC,CADnC,CACsC,CADtC,CACyC,CADzC,CAC4C,CAD5C,CAC+C,CAD/C,CACkD,CADlD,CACqD,CADrD,CACwD,CADxD,CAC2D,CAD3D,CAC8D,CAD9D,CACiE,CADjE,CACoE,CADpE,CACuE,CADvE,CAC0E,CAD1E,CAED,CAFC,CAEE,CAFF,CAEK,CAFL,CAEQ,CAFR,CAEW,CAFX,CAvBA,CAqBHyD,EACS5E,CAAA,CAAiB,IAAIC,UAAJ,CAAekB,EAAf,CAAjB,CAAyCA,EAtB/C,CAmCA,GAAA,CACD,CADC,CACO,CADP,CACe,CADf,CACuB,CADvB,CAC+B,CAD/B,CACuC,CADvC,CAC+C,CAD/C,CACuD,EADvD,CAC+D,EAD/D,CAED,EAFC,CAEO,EAFP,CAEe,EAFf,CAEuB,EAFvB,CAE+B,EAF/B,CAEuC,GAFvC,CAE+C,GAF/C,CAEuD,GAFvD,CAE+D,GAF/D,CAGD,GAHC,CAGO,GAHP,CAGe,IAHf,CAGuB,IAHvB,CAG+B,IAH/B,CAGuC,IAHvC,CAG+C,IAH/C,CAGuD,IAHvD,CAG+D,IAH/D,CAID,KAJC,CAIO,KAJP,CAIe,KAJf,CAnCA,CAiCH0D,GACS7E,CAAA,CAAiB,IAAIE,WAAJ,CAAgBiB,EAAhB,CAAjB,CAA0CA,EAlChD,CAiDA,GAAA,CACD,CADC,CACE,CADF,CACK,CADL,CACQ,CADR,CACW,CADX,CACc,CADd,CACiB,CADjB,CACoB,CADpB,CACuB,CADvB,CAC0B,CAD1B,CAC6B,CAD7B,CACgC,CADhC,CACmC,CADnC,CACsC,CADtC,CACyC,CADzC,CAC4C,CAD5C,CAC+C,CAD/C,CACkD,CADlD,CACqD,CADrD,CACwD,CADxD,CAC2D,CAD3D,CAC8D,CAD9D,CACiE,EADjE,CACqE,EADrE,CACyE,EADzE,CAED,EAFC;AAEG,EAFH,CAEO,EAFP,CAEW,EAFX,CAEe,EAFf,CAjDA,CA+CH2D,EACS9E,CAAA,CAAiB,IAAIC,UAAJ,CAAekB,EAAf,CAAjB,CAAyCA,EAhD/C,CA8DGP,EAAU,KAAKZ,CAAA,CAAiBC,UAAjB,CAA8BI,KAAnC,EAA0C,GAA1C,CA9Db,CA+DGC,CA/DH,CA+DMyE,EAEFzE,EAAA,CAAI,CAAT,KAAYyE,EAAZ,CAAiBnE,CAAAf,OAAjB,CAAiCS,CAAjC,CAAqCyE,EAArC,CAAyC,EAAEzE,CAA3C,CACEM,CAAA,CAAQN,CAAR,CAAA,CACQ,GAAL,EAAAA,CAAA,CAAY,CAAZ,CACK,GAAL,EAAAA,CAAA,CAAY,CAAZ,CACK,GAAL,EAAAA,CAAA,CAAY,CAAZ,CACD,CAXN,KAAAiE,GApLwB5D,CAkMfQ,CAAkBP,CAAlBO,CAdT,CAyBMP,EAAU,KAAKZ,CAAA,CAAiBC,UAAjB,CAA8BI,KAAnC,EAA0C,EAA1C,CAzBhB,CA0BMC,CA1BN,CA0BSyE,EAEFzE,EAAA,CAAI,CAAT,KAAYyE,EAAZ,CAAiBnE,CAAAf,OAAjB,CAAiCS,CAAjC,CAAqCyE,EAArC,CAAyC,EAAEzE,CAA3C,CACEM,CAAA,CAAQN,CAAR,CAAA,CAAa,CAPjB,KAAAkE,GA1MwB7D,CAoNfQ,CAAkBP,CAAlBO,CAyC4B6D,SAAQ,EAAA,CAARA,CAAQ,CAACnF,CAAD,CAAS,CAYpD,IAXA,IAAIwC,EAAU,CAAAA,EAAd,CACID,EAAa,CAAAA,EADjB,CAEIL,EAAQ,CAAAA,MAFZ,CAGIO,EAAK,CAAAA,EAHT,CAMI0B,EAAcjC,CAAAlC,OANlB,CAQIoF,CAGJ,CAAO7C,CAAP,CAAoBvC,CAApB,CAAA,CAEMyC,CAMJ,EANU0B,CAMV,EALEpC,CAKF,CALY2B,KAAJ,CAAU,wBAAV,CAKR,EADAlB,CACA,EADWN,CAAA,CAAMO,CAAA,EAAN,CACX,EAD0BF,CAC1B,CAAAA,CAAA,EAAc,CAIhB6C,EAAA,CAAQ5C,CAAR,EAA+B,CAA/B,EAAoCxC,CAApC,EAA8C,CAI9C,EAAAwC,EAAA,CAHAA,CAGA,GAHaxC,CAIb,EAAAuC,EAAA,CAHAA,CAGA,CAHcvC,CAId,EAAAyC,EAAA,CAAUA,CAEV,OAAO2C,EAhC6C;AAwCVC,QAAQ,EAAA,CAARA,CAAQ,CAAC/D,CAAD,CAAQ,CAkB1D,IAjBA,IAAIkB,EAAU,CAAAA,EAAd,CACID,EAAa,CAAAA,EADjB,CAEIL,EAAQ,CAAAA,MAFZ,CAGIO,EAAK,CAAAA,EAHT,CAMI0B,EAAcjC,CAAAlC,OANlB,CAQIsF,EAAYhE,CAAA,CAAM,CAAN,CARhB,CAUIL,EAAgBK,CAAA,CAAM,CAAN,CAVpB,CAYIiE,CAZJ,CAcIC,CAGJ,CAAOjD,CAAP,CAAoBtB,CAApB,EACM,EAAAwB,CAAA,EAAM0B,CAAN,CADN,CAAA,CAIE3B,CACA,EADWN,CAAA,CAAMO,CAAA,EAAN,CACX,EAD0BF,CAC1B,CAAAA,CAAA,EAAc,CAIhBgD,EAAA,CAAiBD,CAAA,CAAU9C,CAAV,EAAsB,CAAtB,EAA2BvB,CAA3B,EAA4C,CAA5C,CACjBuE,EAAA,CAAaD,CAAb,GAAgC,EAEhC,EAAA/C,EAAA,CAAeA,CAAf,EAA0BgD,CAC1B,EAAAjD,EAAA,CAAkBA,CAAlB,CAA+BiD,CAC/B,EAAA/C,EAAA,CAAUA,CAEV,OAAO8C,EAAP,CAAwB,KAlCkC;AA4IPE,QAAQ,GAAA,CAARA,CAAQ,CAAG,CAqC9DC,QAASA,EAAM,CAACC,CAAD,CAAMrE,CAAN,CAAaP,CAAb,CAAsB,CAEnC,IAAIS,CAAJ,CAEIoE,EAAO,IAAAA,EAFX,CAIIC,CAJJ,CAMIpF,CAEJ,KAAKA,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBkF,CAAhB,CAAA,CAEE,OADAnE,CACQA,CADDsE,CAAA,CAAAA,IAAA,CAAqBxE,CAArB,CACCE,CAAAA,CAAR,EACE,KAAK,EAAL,CAEE,IADAqE,CACA,CADS,CACT,CADa5B,CAAA,CAAAA,IAAA,CAAc,CAAd,CACb,CAAO4B,CAAA,EAAP,CAAA,CAAmB9E,CAAA,CAAQN,CAAA,EAAR,CAAA,CAAemF,CAClC,MACF,MAAK,EAAL,CAEE,IADAC,CACA,CADS,CACT,CADa5B,CAAA,CAAAA,IAAA,CAAc,CAAd,CACb,CAAO4B,CAAA,EAAP,CAAA,CAAmB9E,CAAA,CAAQN,CAAA,EAAR,CAAA,CAAe,CAClCmF,EAAA,CAAO,CACP,MACF,MAAK,EAAL,CAEE,IADAC,CACA,CADS,EACT,CADc5B,CAAA,CAAAA,IAAA,CAAc,CAAd,CACd,CAAO4B,CAAA,EAAP,CAAA,CAAmB9E,CAAA,CAAQN,CAAA,EAAR,CAAA,CAAe,CAClCmF,EAAA,CAAO,CACP,MACF,SAEEA,CAAA,CADA7E,CAAA,CAAQN,CAAA,EAAR,CACA,CADee,CAhBnB,CAsBF,IAAAoE,EAAA,CAAYA,CAEZ,OAAO7E,EApC4B,CAnCrC,IAAIgF,EAAO9B,CAAA,CAAAA,CAAA,CAAc,CAAd,CAAP8B,CAA0B,GAA9B,CAEIC,EAAQ/B,CAAA,CAAAA,CAAA,CAAc,CAAd,CAAR+B,CAA2B,CAF/B,CAIIC,EAAQhC,CAAA,CAAAA,CAAA,CAAc,CAAd,CAARgC,CAA2B,CAJ/B,CAMIC,EACF,KAAK/F,CAAA,CAAiBC,UAAjB,CAA8BI,KAAnC,EAA0C2F,CAAAnG,OAA1C,CAPF,CASIoG,CATJ,CAWIC,CAXJ,CAaIC,CAbJ,CAeI7F,CAGJ,KAAKA,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBwF,CAAhB,CAAuB,EAAExF,CAAzB,CACEyF,CAAA,CAAYrB,CAAA,CAAsBpE,CAAtB,CAAZ,CAAA,CAAwCwD,CAAA,CAAAA,CAAA,CAAc,CAAd,CAE1C,IAAI,CAAC9D,CAAL,CAAqB,CACdM,CAAA,CAAIwF,CAAT,KAAgBA,CAAhB,CAAwBC,CAAAlG,OAAxB,CAA4CS,CAA5C,CAAgDwF,CAAhD,CAAuD,EAAExF,CAAzD,CACEyF,CAAA,CAAYrB,CAAA,CAAsBpE,CAAtB,CAAZ,CAAA,CAAwC,CAFvB,CAKrB2F,CAAA,CA7csBtF,CA6cH,CAAkBoF,CAAlB,CAiDnBG,EAAA,CAAgB,KAAKlG,CAAA,CAAiBC,UAAjB,CAA8BI,KAAnC,EAA0CuF,CAA1C,CAGhBO,EAAA,CAAc,KAAKnG,CAAA,CAAiBC,UAAjB,CAA8BI,KAAnC,EAA0CwF,CAA1C,CAEd,EAAAJ,EAAA;AAAY,CACZ,EAAApC,EAAA,CApgBsB1C,CAqgBpB,CAAkB4E,CAAAa,KAAA,CAAY,CAAZ,CAAkBR,CAAlB,CAAwBK,CAAxB,CAA0CC,CAA1C,CAAlB,CADF,CApgBsBvF,CAsgBpB,CAAkB4E,CAAAa,KAAA,CAAY,CAAZ,CAAkBP,CAAlB,CAAyBI,CAAzB,CAA2CE,CAA3C,CAAlB,CAFF,CAnF8D,CA8FhE,CAAA,CA7hBA,CAAAE,UA6hBAC,EAAAjD,EAAA,CAA0CkD,QAAQ,CAACC,CAAD,CAASC,CAAT,CAAe,CAC/D,IAAI1D,EAAS,IAAAA,EAAb,CACIF,EAAK,IAAAA,EAET,KAAA6D,EAAA,CAA0BF,CAa1B,KAVA,IAAIrC,EAAUpB,CAAAlD,OAAVsE,CAta0BnB,GAsa9B,CAEI3B,CAFJ,CAIIsF,CAJJ,CAMIC,CANJ,CAQIvB,CAEJ,CAAiD,GAAjD,IAAQhE,CAAR,CAAesE,CAAA,CAAAA,IAAA,CAAqBa,CAArB,CAAf,EAAA,CAEE,GAAW,GAAX,CAAInF,CAAJ,CACMwB,CAKJ,EALUsB,CAKV,GAJE,IAAAtB,EAEA,CAFUA,CAEV,CADAE,CACA,CADS,IAAAE,EAAA,EACT,CAAAJ,CAAA,CAAK,IAAAA,EAEP,EAAAE,CAAA,CAAOF,CAAA,EAAP,CAAA,CAAexB,CANjB,KAAA,CAYAsF,CAAA,CAAKtF,CAAL,CAAY,GACZgE,EAAA,CAAaV,CAAA,CAAgCgC,CAAhC,CAC8B,EAA3C,CAAI/B,CAAA,CAAiC+B,CAAjC,CAAJ,GACEtB,CADF,EACgBvB,CAAA,CAAAA,IAAA,CAAcc,CAAA,CAAiC+B,CAAjC,CAAd,CADhB,CAKAtF,EAAA,CAAOsE,CAAA,CAAAA,IAAA,CAAqBc,CAArB,CACPG,EAAA,CAAW/B,EAAA,CAA8BxD,CAA9B,CACgC,EAA3C,CAAIyD,CAAA,CAA+BzD,CAA/B,CAAJ,GACEuF,CADF,EACc9C,CAAA,CAAAA,IAAA,CAAcgB,CAAA,CAA+BzD,CAA/B,CAAd,CADd,CAKIwB,EAAJ,EAAUsB,CAAV,GACE,IAAAtB,EAEA,CAFUA,CAEV,CADAE,CACA,CADS,IAAAE,EAAA,EACT,CAAAJ,CAAA,CAAK,IAAAA,EAHP,CAKA,KAAA,CAAOwC,CAAA,EAAP,CAAA,CACEtC,CAAA,CAAOF,CAAP,CAAA,CAAaE,CAAA,CAAQF,CAAA,EAAR,CAAgB+D,CAAhB,CAhCf,CAoCF,IAAA,CAA0B,CAA1B,EAAO,IAAAxE,EAAP,CAAA,CACE,IAAAA,EACA,EADmB,CACnB,CAAA,IAAAE,EAAA,EAEF,KAAAO,EAAA,CAAUA,CA3DqD,CAmEjEyD;CAAAhD,EAAA,CAAkDuD,QAAQ,CAACL,CAAD,CAASC,CAAT,CAAe,CACvE,IAAI1D,EAAS,IAAAA,EAAb,CACIF,EAAK,IAAAA,EAET,KAAA6D,EAAA,CAA0BF,CAa1B,KAVA,IAAIrC,EAAUpB,CAAAlD,OAAd,CAEIwB,CAFJ,CAIIsF,CAJJ,CAMIC,CANJ,CAQIvB,CAEJ,CAAiD,GAAjD,IAAQhE,CAAR,CAAesE,CAAA,CAAAA,IAAA,CAAqBa,CAArB,CAAf,EAAA,CAEE,GAAW,GAAX,CAAInF,CAAJ,CACMwB,CAIJ,EAJUsB,CAIV,GAHEpB,CACA,CADS,IAAAE,EAAA,EACT,CAAAkB,CAAA,CAAUpB,CAAAlD,OAEZ,EAAAkD,CAAA,CAAOF,CAAA,EAAP,CAAA,CAAexB,CALjB,KAAA,CAWAsF,CAAA,CAAKtF,CAAL,CAAY,GACZgE,EAAA,CAAaV,CAAA,CAAgCgC,CAAhC,CAC8B,EAA3C,CAAI/B,CAAA,CAAiC+B,CAAjC,CAAJ,GACEtB,CADF,EACgBvB,CAAA,CAAAA,IAAA,CAAcc,CAAA,CAAiC+B,CAAjC,CAAd,CADhB,CAKAtF,EAAA,CAAOsE,CAAA,CAAAA,IAAA,CAAqBc,CAArB,CACPG,EAAA,CAAW/B,EAAA,CAA8BxD,CAA9B,CACgC,EAA3C,CAAIyD,CAAA,CAA+BzD,CAA/B,CAAJ,GACEuF,CADF,EACc9C,CAAA,CAAAA,IAAA,CAAcgB,CAAA,CAA+BzD,CAA/B,CAAd,CADd,CAKIwB,EAAJ,CAASwC,CAAT,CAAsBlB,CAAtB,GACEpB,CACA,CADS,IAAAE,EAAA,EACT,CAAAkB,CAAA,CAAUpB,CAAAlD,OAFZ,CAIA,KAAA,CAAOwF,CAAA,EAAP,CAAA,CACEtC,CAAA,CAAOF,CAAP,CAAA,CAAaE,CAAA,CAAQF,CAAA,EAAR,CAAgB+D,CAAhB,CA9Bf,CAkCF,IAAA,CAA0B,CAA1B,EAAO,IAAAxE,EAAP,CAAA,CACE,IAAAA,EACA,EADmB,CACnB,CAAA,IAAAE,EAAA,EAEF,KAAAO,EAAA,CAAUA,CAzD6D,CAiEzEyD;CAAArD,EAAA,CAAyC6D,QAAQ,EAAY,CAE3D,IAAIC,EACF,KAAK/G,CAAA,CAAiBC,UAAjB,CAA8BI,KAAnC,EACI,IAAAwC,EADJ,CA5iBgCC,KA4iBhC,CADF,CAKIkE,EAAW,IAAAnE,EAAXmE,CAhjB8BlE,KA2iBlC,CAOIxC,CAPJ,CASIyE,CATJ,CAWIhC,EAAS,IAAAA,EAGb,IAAI/C,CAAJ,CACE+G,CAAA1C,IAAA,CAAWtB,CAAAuB,SAAA,CA1jBqBxB,KA0jBrB,CAAmDiE,CAAAlH,OAAnD,CAAX,CADF,KAEO,CACAS,CAAA,CAAI,CAAT,KAAYyE,CAAZ,CAAiBgC,CAAAlH,OAAjB,CAAgCS,CAAhC,CAAoCyE,CAApC,CAAwC,EAAEzE,CAA1C,CACEyG,CAAA,CAAOzG,CAAP,CAAA,CAAYyC,CAAA,CAAOzC,CAAP,CA7jBkBwC,KA6jBlB,CAFT,CAMP,IAAAb,EAAAN,KAAA,CAAiBoF,CAAjB,CACA,KAAAxE,EAAA,EAAiBwE,CAAAlH,OAGjB,IAAIG,CAAJ,CACE+C,CAAAsB,IAAA,CACEtB,CAAAuB,SAAA,CAAgB0C,CAAhB,CAA0BA,CAA1B,CAvkB8BlE,KAukB9B,CADF,CADF,KAKE,KAAKxC,CAAL,CAAS,CAAT,CA1kBgCwC,KA0kBhC,CAAYxC,CAAZ,CAAmD,EAAEA,CAArD,CACEyC,CAAA,CAAOzC,CAAP,CAAA,CAAYyC,CAAA,CAAOiE,CAAP,CAAkB1G,CAAlB,CAIhB,KAAAuC,EAAA,CA/kBkCC,KAilBlC,OAAOC,EAxCoD,CAgD7DuD;CAAApD,EAAA,CAAiD+D,QAAQ,CAACC,CAAD,CAAY,CAEnE,IAAIH,CAAJ,CAEII,EAAS,IAAApF,MAAAlC,OAATsH,CAA6B,IAAA7E,EAA7B6E,CAAuC,CAAvCA,CAA4C,CAFhD,CAIIC,CAJJ,CAMIC,CANJ,CAQIC,CARJ,CAUIvF,EAAQ,IAAAA,MAVZ,CAWIgB,EAAS,IAAAA,EAETmE,EAAJ,GACoC,QAGlC,GAHI,MAAOA,EAAAK,EAGX,GAFEJ,CAEF,CAFUD,CAAAK,EAEV,EAAkC,QAAlC,GAAI,MAAOL,EAAAM,EAAX,GACEL,CADF,EACWD,CAAAM,EADX,CAJF,CAUY,EAAZ,CAAIL,CAAJ,EACEC,CAGA,EAFGrF,CAAAlC,OAEH,CAFkB,IAAAyC,EAElB,EAF6B,IAAAoE,EAAA,CAAwB,CAAxB,CAE7B,CADAY,CACA,CADoC,GACpC,EADkBF,CAClB,CADgC,CAChC,EAD2C,CAC3C,CAAAC,CAAA,CAAUC,CAAA,CAAiBvE,CAAAlD,OAAjB,CACRkD,CAAAlD,OADQ,CACQyH,CADR,CAERvE,CAAAlD,OAFQ,EAES,CANrB,EAQEwH,CARF,CAQYtE,CAAAlD,OARZ,CAQ4BsH,CAIxBnH,EAAJ,EACE+G,CACA,CADS,IAAI9G,UAAJ,CAAeoH,CAAf,CACT,CAAAN,CAAA1C,IAAA,CAAWtB,CAAX,CAFF,EAIEgE,CAJF,CAIWhE,CAKX,OAFA,KAAAA,EAEA,CAFcgE,CA5CqD,CAqDrET;CAAAnD,EAAA,CAAyCsE,QAAQ,EAAG,CAElD,IAAIC,EAAM,CAAV,CAII3E,EAAS,IAAAA,EAJb,CAMId,EAAS,IAAAA,EANb,CAQI0F,CARJ,CAUIZ,EAAS,KAAK/G,CAAA,CAAiBC,UAAjB,CAA8BI,KAAnC,EARD,IAAAkC,EAQC,EARgB,IAAAM,EAQhB,CA1pBqBC,KA0pBrB,EAVb,CAYIxC,CAZJ,CAcIyE,CAdJ,CAgBItD,CAhBJ,CAkBImG,CAGJ,IAAsB,CAAtB,GAAI3F,CAAApC,OAAJ,CACE,MAAOG,EAAA,CACL,IAAA+C,EAAAuB,SAAA,CAvqB8BxB,KAuqB9B,CAAwD,IAAAD,EAAxD,CADK,CAEL,IAAAE,EAAA8E,MAAA,CAxqB8B/E,KAwqB9B,CAAqD,IAAAD,EAArD,CAICvC,EAAA,CAAI,CAAT,KAAYyE,CAAZ,CAAiB9C,CAAApC,OAAjB,CAAgCS,CAAhC,CAAoCyE,CAApC,CAAwC,EAAEzE,CAA1C,CAA6C,CAC3CqH,CAAA,CAAQ1F,CAAA,CAAO3B,CAAP,CACHmB,EAAA,CAAI,CAAT,KAAYmG,CAAZ,CAAiBD,CAAA9H,OAAjB,CAA+B4B,CAA/B,CAAmCmG,CAAnC,CAAuC,EAAEnG,CAAzC,CACEsF,CAAA,CAAOW,CAAA,EAAP,CAAA,CAAgBC,CAAA,CAAMlG,CAAN,CAHyB,CAQxCnB,CAAA,CAprB6BwC,KAorBlC,KAA4CiC,CAA5C,CAAiD,IAAAlC,EAAjD,CAA0DvC,CAA1D,CAA8DyE,CAA9D,CAAkE,EAAEzE,CAApE,CACEyG,CAAA,CAAOW,CAAA,EAAP,CAAA,CAAgB3E,CAAA,CAAOzC,CAAP,CAGlB,KAAA2B,EAAA,CAAc,EAGd,OAFA,KAAA8E,OAEA,CAFcA,CA3CoC,CAoDpDT;CAAAlD,EAAA,CAAgD0E,QAAQ,EAAG,CAEzD,IAAIf,CAAJ,CACIlE,EAAK,IAAAA,EAEL7C,EAAJ,CACM,IAAA2C,EAAJ,EACEoE,CACA,CADS,IAAI9G,UAAJ,CAAe4C,CAAf,CACT,CAAAkE,CAAA1C,IAAA,CAAW,IAAAtB,EAAAuB,SAAA,CAAqB,CAArB,CAAwBzB,CAAxB,CAAX,CAFF,EAIEkE,CAJF,CAIW,IAAAhE,EAAAuB,SAAA,CAAqB,CAArB,CAAwBzB,CAAxB,CALb,EAQM,IAAAE,EAAAlD,OAGJ,CAHyBgD,CAGzB,GAFE,IAAAE,EAAAlD,OAEF,CAFuBgD,CAEvB,EAAAkE,CAAA,CAAS,IAAAhE,EAXX,CAgBA,OAFA,KAAAgE,OAEA,CAFcA,CAnB2C,C,CC9yBhDgB,QAAQ,EAAA,CAAC/F,CAAD,CAAa,CAC9BA,CAAA,CAAaA,CAAb,EAA2B,EAS3B,KAAAgG,MAAA,CAAa,EAEb,KAAAC,EAAA,CAAejG,CAAA,QAZe,CAkHhC+F,CAAArE,UAAAwE,EAAA,CAAiCC,QAAQ,CAACC,CAAD,CAAW,CAClD,IAAAA,EAAA,CAAgBA,CADkC,CA2ZpDL,EAAArE,UAAA2E,EAAA,CAA6BC,QAAQ,CAACC,CAAD,CAAM,CAEzC,IAAIC,EAAQD,CAAA,CAAI,CAAJ,CAARC,CAAiB,KAAjBA,CAA2B,CAE/B,OAASA,EAAT,EAAgBA,CAAhB,CAAsB,CAAtB,GAA6B,CAA7B,CAAkC,GAJO,CAyB3CT,EAAArE,UAAA+E,EAAA,CAAgCC,QAAQ,CAACH,CAAD,CAAM/H,CAAN,CAAS,CAC/C+H,CAAA,CAAI,CAAJ,CAAA,EJrfQ7H,CAAA,EIqfmB6H,CAAA/C,CAAI,CAAJA,CJrfnB,CIqf2BhF,CJrf3B,EAA+B,GAA/B,CIqfR,CAA2B+H,CAAA/C,CAAI,CAAJA,CAA3B,GJrfwD,CIqfxD,IJrfgE,CIsfhE+C,EAAA,CAAI,CAAJ,CAAA,EACkD,IADlD,EACmC,KADnC,EACOA,CAAA,CAAI,CAAJ,CADP,EACiBA,CAAA,CAAI,CAAJ,CADjB,CAC0B,GAD1B,KAC6C,CAD7C,IAC4D,CAD5D,EACiE,CADjE,GACwE,CACxEA,EAAA,CAAI,CAAJ,CAAA,EJxfQ7H,CAAA,EIwfmB6H,CAAA/C,CAAI,CAAJA,CJxfnB,CIwf2B+C,CAAA,CAAI,CAAJ,CJxf3B,GIwfsC,EJxftC,EAA+B,GAA/B,CIwfR,CAA2BA,CAAA/C,CAAI,CAAJA,CAA3B,GJxfwD,CIwfxD,IJxfgE,CIofjB,CAWjDuC,EAAArE,UAAAiF,EAAA,CAAyCC,QAAQ,CAACR,CAAD,CAAW,CAE1D,IAAIG,EAAM,CAAC,SAAD,CAAY,SAAZ,CAAuB,SAAvB,CAAV,CAEIjI,CAFJ,CAIIyE,CAEA/E,EAAJ,GACEuI,CADF,CACQ,IAAIpI,WAAJ,CAAgBoI,CAAhB,CADR,CAIKjI,EAAA,CAAI,CAAT,KAAYyE,CAAZ,CAAiBqD,CAAAvI,OAAjB,CAAkCS,CAAlC,CAAsCyE,CAAtC,CAA0C,EAAEzE,CAA5C,CACE,IAAAmI,EAAA,CAAgBF,CAAhB,CAAqBH,CAAA,CAAS9H,CAAT,CAArB,CAAmC,GAAnC,CAGF,OAAOiI,EAhBmD,C,CC/iB/CM,QAAQ,EAAA,CAAC9G,CAAD,CAAQC,CAAR,CAAoB,CACvCA,CAAA,CAAaA,CAAb,EAA2B,EAE3B,KAAAD,MAAA,CACG/B,CAAA,EAAmB+B,CAAnB,WAAoC1B,MAApC,CACD,IAAIJ,UAAJ,CAAe8B,CAAf,CADC,CACuBA,CAE1B,KAAAO,EAAA,CAAU,CAwBV,KAAAwG,GAAA,CAAc9G,CAAA,OAAd,EAAsC,CAAA,CAEtC,KAAAoG,EAAA,CAAgBpG,CAAA,SAjCuB,CAoCzC,IAAA+G,GDjB6BC,GACpBC,CADoBD,GAElBE,CAFkBF,CCiB7B,CAMAG,EDI+BC,CAAC,EAADA,CAAO,EAAPA,CAAa,CAAbA,CAAmB,CAAnBA,CCV/B,CAYAC,EDIoCC,CAAC,EAADA,CAAO,EAAPA,CAAa,CAAbA,CAAmB,CAAnBA,CChBpC,CAkBAC,EDIqCC,CAAC,EAADA,CAAO,EAAPA,CAAa,CAAbA,CAAmB,CAAnBA,CCGbC,SAAQ,GAAA,CAAC1H,CAAD,CAAQO,CAAR,CAAY,CAE1C,IAAAP,MAAA,CAAaA,CAEb,KAAA2H,OAAA,CAAcpH,CAJ4B;AAiD5CmH,EAAA/F,UAAAiG,MAAA,CAAwCC,QAAQ,EAAG,CAEjD,IAAI7H,EAAQ,IAAAA,MAAZ,CAEIO,EAAK,IAAAoH,OAGT,EAAI3H,CAAA,CAAMO,CAAA,EAAN,CAAJ,GAAoB6G,CAAA,CAA+B,CAA/B,CAApB,EACIpH,CAAA,CAAMO,CAAA,EAAN,CADJ,GACoB6G,CAAA,CAA+B,CAA/B,CADpB,EAEIpH,CAAA,CAAMO,CAAA,EAAN,CAFJ,GAEoB6G,CAAA,CAA+B,CAA/B,CAFpB,EAGIpH,CAAA,CAAMO,CAAA,EAAN,CAHJ,GAGoB6G,CAAA,CAA+B,CAA/B,CAHpB,GAIEvH,CAJF,CAIY2B,KAAJ,CAAU,+BAAV,CAJR,CAQA,KAAAsG,QAAA,CAAe9H,CAAA,CAAMO,CAAA,EAAN,CACf,KAAAwH,GAAA,CAAU/H,CAAA,CAAMO,CAAA,EAAN,CAGV,KAAAyH,EAAA,CAAmBhI,CAAA,CAAMO,CAAA,EAAN,CAAnB,CAAkCP,CAAA,CAAMO,CAAA,EAAN,CAAlC,EAAiD,CAGjD,KAAA0H,EAAA,CAAajI,CAAA,CAAMO,CAAA,EAAN,CAAb,CAA4BP,CAAA,CAAMO,CAAA,EAAN,CAA5B,EAA2C,CAG3C,KAAA2H,EAAA,CAAmBlI,CAAA,CAAMO,CAAA,EAAN,CAAnB,CAAkCP,CAAA,CAAMO,CAAA,EAAN,CAAlC,EAAiD,CAGjD,KAAA4H,KAAA,CAAYnI,CAAA,CAAMO,CAAA,EAAN,CAAZ,CAA2BP,CAAA,CAAMO,CAAA,EAAN,CAA3B,EAA0C,CAG1C,KAAA6H,EAAA,CAAYpI,CAAA,CAAMO,CAAA,EAAN,CAAZ,CAA2BP,CAAA,CAAMO,CAAA,EAAN,CAA3B,EAA0C,CAG1C,KAAA8H,EAAA,EACGrI,CAAA,CAAMO,CAAA,EAAN,CADH,CACyBP,CAAA,CAAMO,CAAA,EAAN,CADzB,EACyC,CADzC,CAEGP,CAAA,CAAMO,CAAA,EAAN,CAFH,EAEkB,EAFlB,CAEyBP,CAAA,CAAMO,CAAA,EAAN,CAFzB,EAEwC,EAFxC,IAGM,CAGN,KAAA+H,EAAA,EACGtI,CAAA,CAAMO,CAAA,EAAN,CADH,CACyBP,CAAA,CAAMO,CAAA,EAAN,CADzB,EACyC,CADzC,CAEGP,CAAA,CAAMO,CAAA,EAAN,CAFH,EAEkB,EAFlB,CAEyBP,CAAA,CAAMO,CAAA,EAAN,CAFzB,EAEwC,EAFxC,IAGM,CAGN,KAAAgI,EAAA,EACGvI,CAAA,CAAMO,CAAA,EAAN,CADH,CACyBP,CAAA,CAAMO,CAAA,EAAN,CADzB,EACyC,CADzC,CAEGP,CAAA,CAAMO,CAAA,EAAN,CAFH,EAEkB,EAFlB,CAEyBP,CAAA,CAAMO,CAAA,EAAN,CAFzB,EAEwC,EAFxC,IAGM,CAGN,KAAAiI,EAAA,CAAsBxI,CAAA,CAAMO,CAAA,EAAN,CAAtB,CAAqCP,CAAA,CAAMO,CAAA,EAAN,CAArC;AAAoD,CAGpD,KAAAkI,EAAA,CAAwBzI,CAAA,CAAMO,CAAA,EAAN,CAAxB,CAAuCP,CAAA,CAAMO,CAAA,EAAN,CAAvC,EAAsD,CAGtD,KAAAmI,EAAA,CAAyB1I,CAAA,CAAMO,CAAA,EAAN,CAAzB,CAAwCP,CAAA,CAAMO,CAAA,EAAN,CAAxC,EAAuD,CAGvD,KAAAoI,GAAA,CAAuB3I,CAAA,CAAMO,CAAA,EAAN,CAAvB,CAAsCP,CAAA,CAAMO,CAAA,EAAN,CAAtC,EAAqD,CAGrD,KAAAqI,GAAA,CAA8B5I,CAAA,CAAMO,CAAA,EAAN,CAA9B,CAA6CP,CAAA,CAAMO,CAAA,EAAN,CAA7C,EAA4D,CAG5D,KAAAsI,GAAA,CACG7I,CAAA,CAAMO,CAAA,EAAN,CADH,CACyBP,CAAA,CAAMO,CAAA,EAAN,CADzB,EACyC,CADzC,CAEGP,CAAA,CAAMO,CAAA,EAAN,CAFH,EAEkB,EAFlB,CAEyBP,CAAA,CAAMO,CAAA,EAAN,CAFzB,EAEwC,EAGxC,KAAAuI,GAAA,EACG9I,CAAA,CAAMO,CAAA,EAAN,CADH,CACyBP,CAAA,CAAMO,CAAA,EAAN,CADzB,EACyC,CADzC,CAEGP,CAAA,CAAMO,CAAA,EAAN,CAFH,EAEkB,EAFlB,CAEyBP,CAAA,CAAMO,CAAA,EAAN,CAFzB,EAEwC,EAFxC,IAGM,CAGN,KAAAwI,SAAA,CAAgBC,MAAAC,aAAAC,MAAA,CAA0B,IAA1B,CAAgCjL,CAAA,CAC9C+B,CAAAuC,SAAA,CAAehC,CAAf,CAAmBA,CAAnB,EAAyB,IAAAiI,EAAzB,CAD8C,CAE9CxI,CAAA8F,MAAA,CAAYvF,CAAZ,CAAgBA,CAAhB,EAAsB,IAAAiI,EAAtB,CAFc,CAMhB,KAAAW,EAAA,CAAkBlL,CAAA,CAChB+B,CAAAuC,SAAA,CAAehC,CAAf,CAAmBA,CAAnB,EAAyB,IAAAkI,EAAzB,CADgB,CAEhBzI,CAAA8F,MAAA,CAAYvF,CAAZ,CAAgBA,CAAhB,EAAsB,IAAAkI,EAAtB,CAGF,KAAAvC,EAAA,CAAejI,CAAA,CACb+B,CAAAuC,SAAA,CAAehC,CAAf,CAAmBA,CAAnB,CAAwB,IAAAmI,EAAxB,CADa,CAEb1I,CAAA8F,MAAA,CAAYvF,CAAZ,CAAgBA,CAAhB,CAAqB,IAAAmI,EAArB,CAEF,KAAA5K,OAAA,CAAcyC,CAAd,CAAmB,IAAAoH,OA7F8B,CAqGtByB,SAAQ,GAAA,CAACpJ,CAAD,CAAQO,CAAR,CAAY,CAE/C,IAAAP,MAAA,CAAaA,CAEb,KAAA2H,OAAA,CAAcpH,CAJiC,CAiCjD,IAAA8I,GDhNiBC,GACHC,CADGD,IAEHE,CAFGF,IAGHG,IAHGH,CCkNjBF;EAAAzH,UAAAiG,MAAA,CAA6C8B,QAAQ,EAAG,CAEtD,IAAI1J,EAAQ,IAAAA,MAAZ,CAEIO,EAAK,IAAAoH,OAGT,EAAI3H,CAAA,CAAMO,CAAA,EAAN,CAAJ,GAAoB+G,CAAA,CAAoC,CAApC,CAApB,EACItH,CAAA,CAAMO,CAAA,EAAN,CADJ,GACoB+G,CAAA,CAAoC,CAApC,CADpB,EAEItH,CAAA,CAAMO,CAAA,EAAN,CAFJ,GAEoB+G,CAAA,CAAoC,CAApC,CAFpB,EAGItH,CAAA,CAAMO,CAAA,EAAN,CAHJ,GAGoB+G,CAAA,CAAoC,CAApC,CAHpB,GAIEzH,CAJF,CAIY2B,KAAJ,CAAU,qCAAV,CAJR,CAQA,KAAAwG,EAAA,CAAmBhI,CAAA,CAAMO,CAAA,EAAN,CAAnB,CAAkCP,CAAA,CAAMO,CAAA,EAAN,CAAlC,EAAiD,CAGjD,KAAA0H,EAAA,CAAajI,CAAA,CAAMO,CAAA,EAAN,CAAb,CAA4BP,CAAA,CAAMO,CAAA,EAAN,CAA5B,EAA2C,CAG3C,KAAA2H,EAAA,CAAmBlI,CAAA,CAAMO,CAAA,EAAN,CAAnB,CAAkCP,CAAA,CAAMO,CAAA,EAAN,CAAlC,EAAiD,CAGjD,KAAA4H,KAAA,CAAYnI,CAAA,CAAMO,CAAA,EAAN,CAAZ,CAA2BP,CAAA,CAAMO,CAAA,EAAN,CAA3B,EAA0C,CAG1C,KAAA6H,EAAA,CAAYpI,CAAA,CAAMO,CAAA,EAAN,CAAZ,CAA2BP,CAAA,CAAMO,CAAA,EAAN,CAA3B,EAA0C,CAG1C,KAAA8H,EAAA,EACGrI,CAAA,CAAMO,CAAA,EAAN,CADH,CACyBP,CAAA,CAAMO,CAAA,EAAN,CADzB,EACyC,CADzC,CAEGP,CAAA,CAAMO,CAAA,EAAN,CAFH,EAEkB,EAFlB,CAEyBP,CAAA,CAAMO,CAAA,EAAN,CAFzB,EAEwC,EAFxC,IAGM,CAGN,KAAA+H,EAAA,EACGtI,CAAA,CAAMO,CAAA,EAAN,CADH,CACyBP,CAAA,CAAMO,CAAA,EAAN,CADzB,EACyC,CADzC,CAEGP,CAAA,CAAMO,CAAA,EAAN,CAFH,EAEkB,EAFlB,CAEyBP,CAAA,CAAMO,CAAA,EAAN,CAFzB,EAEwC,EAFxC,IAGM,CAGN,KAAAgI,EAAA,EACGvI,CAAA,CAAMO,CAAA,EAAN,CADH,CACyBP,CAAA,CAAMO,CAAA,EAAN,CADzB,EACyC,CADzC,CAEGP,CAAA,CAAMO,CAAA,EAAN,CAFH,EAEkB,EAFlB,CAEyBP,CAAA,CAAMO,CAAA,EAAN,CAFzB,EAEwC,EAFxC,IAGM,CAGN,KAAAiI,EAAA,CAAsBxI,CAAA,CAAMO,CAAA,EAAN,CAAtB,CAAqCP,CAAA,CAAMO,CAAA,EAAN,CAArC,EAAoD,CAGpD,KAAAkI,EAAA,CAAwBzI,CAAA,CAAMO,CAAA,EAAN,CAAxB,CAAuCP,CAAA,CAAMO,CAAA,EAAN,CAAvC,EAAsD,CAGtD,KAAAwI,SAAA;AAAgBC,MAAAC,aAAAC,MAAA,CAA0B,IAA1B,CAAgCjL,CAAA,CAC9C+B,CAAAuC,SAAA,CAAehC,CAAf,CAAmBA,CAAnB,EAAyB,IAAAiI,EAAzB,CAD8C,CAE9CxI,CAAA8F,MAAA,CAAYvF,CAAZ,CAAgBA,CAAhB,EAAsB,IAAAiI,EAAtB,CAFc,CAMhB,KAAAW,EAAA,CAAkBlL,CAAA,CAChB+B,CAAAuC,SAAA,CAAehC,CAAf,CAAmBA,CAAnB,EAAyB,IAAAkI,EAAzB,CADgB,CAEhBzI,CAAA8F,MAAA,CAAYvF,CAAZ,CAAgBA,CAAhB,EAAsB,IAAAkI,EAAtB,CAEF,KAAA3K,OAAA,CAAcyC,CAAd,CAAmB,IAAAoH,OAhEmC,CA2IjBgC;QAAQ,EAAA,CAARA,CAAQ,CAAG,CAEhD,IAAIC,EAAW,EAAf,CAEIC,EAAY,EAFhB,CAIItJ,CAJJ,CAMIuJ,CANJ,CAQIvL,CARJ,CAUIyE,CAEJ,IAAI+G,CAAA,CAAAA,EAAJ,CAAA,CAIA,GAAI,CAAAC,EAAJ,GAAoChM,CAApC,CAAA,CApEA,IAAIgC,EAqEFiK,CArEUjK,MAAZ,CAEIO,CAEJ,IAAK2J,CAiEHD,CAjEGC,EAAL,CAzBkE,CAAA,CAAA,CAElE,IAAIlK,EAwFFiK,CAxFUjK,MAAZ,CAEIO,CAEJ,KAAKA,CAAL,CAAUP,CAAAlC,OAAV,CAAyB,EAAzB,CAAkC,CAAlC,CAA6ByC,CAA7B,CAAqC,EAAEA,CAAvC,CACE,GAAIP,CAAA,CAAMO,CAAN,CAAJ,GAAoBiH,CAAA,CAAqC,CAArC,CAApB,EACIxH,CAAA,CAAMO,CAAN,CAAS,CAAT,CADJ,GACoBiH,CAAA,CAAqC,CAArC,CADpB,EAEIxH,CAAA,CAAMO,CAAN,CAAS,CAAT,CAFJ,GAEoBiH,CAAA,CAAqC,CAArC,CAFpB,EAGIxH,CAAA,CAAMO,CAAN,CAAS,CAAT,CAHJ,GAGoBiH,CAAA,CAAqC,CAArC,CAHpB,CAG6D,CAgF7DyC,CA/EEC,EAAA,CAAmB3J,CACnB,OAAA,CAF2D,CAM/DV,CAAA,CAAU2B,KAAJ,CAAU,2CAAV,CAAN,CAhBkE,CA4BlEjB,CAAA,CA8DE0J,CA9DGC,EAGL,EAAIlK,CAAA,CAAMO,CAAA,EAAN,CAAJ,GAAoBiH,CAAA,CAAqC,CAArC,CAApB,EACIxH,CAAA,CAAMO,CAAA,EAAN,CADJ,GACoBiH,CAAA,CAAqC,CAArC,CADpB,EAEIxH,CAAA,CAAMO,CAAA,EAAN,CAFJ,GAEoBiH,CAAA,CAAqC,CAArC,CAFpB,EAGIxH,CAAA,CAAMO,CAAA,EAAN,CAHJ,GAGoBiH,CAAA,CAAqC,CAArC,CAHpB,GAIE3H,CAJF,CAIY2B,KAAJ,CAAU,mBAAV,CAJR,CA2DEyI,EAnDFE,GAAA,CAAwBnK,CAAA,CAAMO,CAAA,EAAN,CAAxB,CAAuCP,CAAA,CAAMO,CAAA,EAAN,CAAvC,EAAsD,CAmDpD0J,EAhDFG,GAAA,CAAiBpK,CAAA,CAAMO,CAAA,EAAN,CAAjB,CAAgCP,CAAA,CAAMO,CAAA,EAAN,CAAhC,EAA+C,CAgD7C0J,EA7CFI,GAAA,CAA4BrK,CAAA,CAAMO,CAAA,EAAN,CAA5B,CAA2CP,CAAA,CAAMO,CAAA,EAAN,CAA3C,EAA0D,CA6CxD0J,EA1CFK,GAAA,CAAoBtK,CAAA,CAAMO,CAAA,EAAN,CAApB,CAAmCP,CAAA,CAAMO,CAAA,EAAN,CAAnC,EAAkD,CA0ChD0J,EAvCFM,EAAA,EACGvK,CAAA,CAAMO,CAAA,EAAN,CADH,CACyBP,CAAA,CAAMO,CAAA,EAAN,CADzB,EACyC,CADzC,CAEGP,CAAA,CAAMO,CAAA,EAAN,CAFH,EAEkB,EAFlB,CAEyBP,CAAA,CAAMO,CAAA,EAAN,CAFzB,EAEwC,EAFxC,IAGM,CAoCJ0J,EAjCFD,EAAA,EACGhK,CAAA,CAAMO,CAAA,EAAN,CADH;AACyBP,CAAA,CAAMO,CAAA,EAAN,CADzB,EACyC,CADzC,CAEGP,CAAA,CAAMO,CAAA,EAAN,CAFH,EAEkB,EAFlB,CAEyBP,CAAA,CAAMO,CAAA,EAAN,CAFzB,EAEwC,EAFxC,IAGM,CA8BJ0J,EA3BFO,EAAA,CAAqBxK,CAAA,CAAMO,CAAA,EAAN,CAArB,CAAoCP,CAAA,CAAMO,CAAA,EAAN,CAApC,EAAmD,CA2BjD0J,EAxBF/D,EAAA,CAAejI,CAAA,CACb+B,CAAAuC,SAAA,CAAehC,CAAf,CAAmBA,CAAnB,CAuBA0J,CAvBwBO,EAAxB,CADa,CAEbxK,CAAA8F,MAAA,CAAYvF,CAAZ,CAAgBA,CAAhB,CAsBA0J,CAtBqBO,EAArB,CAqBF,CAGAjK,CAAA,CAAK,CAAAyJ,EAEAzL,EAAA,CAAI,CAAT,KAAYyE,CAAZ,CAAiB,CAAAsH,GAAjB,CAAoC/L,CAApC,CAAwCyE,CAAxC,CAA4C,EAAEzE,CAA9C,CACEuL,CAIA,CAJa,IAAIpC,EAAJ,CAA0B,CAAA1H,MAA1B,CAAsCO,CAAtC,CAIb,CAHAuJ,CAAAlC,MAAA,EAGA,CAFArH,CAEA,EAFMuJ,CAAAhM,OAEN,CADA8L,CAAA,CAASrL,CAAT,CACA,CADcuL,CACd,CAAAD,CAAA,CAAUC,CAAAf,SAAV,CAAA,CAAiCxK,CAG/B,EAAAgM,EAAJ,CAAgChK,CAAhC,CAAqC,CAAAyJ,EAArC,EACEnK,CADF,CACY2B,KAAJ,CAAU,0BAAV,CADR,CAIA,EAAAuI,EAAA,CAAsBH,CACtB,EAAAa,EAAA,CAAuBZ,CAtBvB,CAdgD,CAqIlD,CAAA,CAphBA,CAAAa,UAohBAC,EAAAC,EAAA,CAAoCC,QAAQ,EAAG,CAE7C,IAAIC,EAAe,EAAnB,CAEIvM,CAFJ,CAIIyE,CAJJ,CAMI+G,CAEC,KAAAA,EAAL,EACEgB,CAAA,CAAAA,IAAA,CAEFhB,EAAA,CAAiB,IAAAA,EAEZxL,EAAA,CAAI,CAAT,KAAYyE,CAAZ,CAAiB+G,CAAAjM,OAAjB,CAAwCS,CAAxC,CAA4CyE,CAA5C,CAAgD,EAAEzE,CAAlD,CACEuM,CAAA,CAAavM,CAAb,CAAA,CAAkBwL,CAAA,CAAexL,CAAf,CAAAwK,SAGpB,OAAO+B,EAnBsC,CA2B/CH;CAAA/I,EAAA,CAAkCoJ,QAAQ,CAACjC,CAAD,CAAW9I,CAAX,CAAuB,CAE/D,IAAIgL,CAEC,KAAAR,EAAL,EACEM,CAAA,CAAAA,IAAA,CAEFE,EAAA,CAAQ,IAAAR,EAAA,CAAqB1B,CAArB,CAEJkC,EAAJ,GAAcjN,CAAd,EACE6B,CADF,CACY2B,KAAJ,CAAUuH,CAAV,CAAqB,YAArB,CADR,CAI+B9I,KAAAA,CAhI/BA,EAAA,CAgI+BA,CAhI/B,EAA2B,EAE3B,KAAID,EA8HGkL,IA9HKlL,MAAZ,CAEI+J,EA4HGmB,IA5HcnB,EAFrB,CAIIoB,CAJJ,CAMIxD,CANJ,CAQI7J,CARJ,CAUIkH,CAVJ,CAYIqD,CAZJ,CAcI7B,CAdJ,CAgBIjI,CAhBJ,CAkBIyE,CAEC+G,EAAL,EACEgB,CAAA,CAyGKG,IAzGL,CAGEnB,EAAA,CAsGoBkB,CAtGpB,CAAJ,GAA8BjN,CAA9B,EACE6B,CADF,CACY2B,KAAJ,CAAU,aAAV,CADR,CAIAmG,EAAA,CAASoC,CAAA,CAkGekB,CAlGf,CAAAnC,GACTqC,EAAA,CAAkB,IAAI/B,EAAJ,CAiGX8B,IAjG0ClL,MAA/B,CAA2C2H,CAA3C,CAClBwD,EAAAvD,MAAA,EACAD,EAAA,EAAUwD,CAAArN,OACVA,EAAA,CAASqN,CAAA7C,EAGT,IAA2E,CAA3E,IAAK6C,CAAAlD,EAAL,CAA6BmD,EAAA7B,EAA7B,EAA8E,CACtE,CAAAtJ,CAAA,SAAN,EAAgCoG,CA0F3B6E,IA1F2B7E,EAAhC,EACExG,CADF,CACY2B,KAAJ,CAAU,qBAAV,CADR,CAGAgF,EAAA,CAuFK0E,IAvFEG,EAAA,CAAyBpL,CAAA,SAAzB,EAuFFiL,IAvFqD7E,EAAnD,CAGH9H,EAAA,CAAIoJ,CAAR,KAAgB3E,CAAhB,CAAqB2E,CAArB,CAA8B,EAA9B,CAAkCpJ,CAAlC,CAAsCyE,CAAtC,CAA0C,EAAEzE,CAA5C,CACEiF,EAAA,CAmFG0H,IAnFH,CAAY1E,CAAZ,CAAiBxG,CAAA,CAAMzB,CAAN,CAAjB,CAEFoJ,EAAA,EAAU,EACV7J,EAAA,EAAU,EAGLS,EAAA,CAAIoJ,CAAT,KAAiB3E,CAAjB,CAAsB2E,CAAtB,CAA+B7J,CAA/B,CAAuCS,CAAvC,CAA2CyE,CAA3C,CAA+C,EAAEzE,CAAjD,CACEyB,CAAA,CAAMzB,CAAN,CAAA,CAAWiF,EAAA,CA4ER0H,IA5EQ,CAAY1E,CAAZ,CAAiBxG,CAAA,CAAMzB,CAAN,CAAjB,CAf+D,CAmB9E,OAAQ4M,CAAAjD,EAAR,EACE,KAAKoD,EAAApE,EAAL,CACElC,CAAA,CAAS/G,CAAA,CAsENiN,IArEDlL,MAAAuC,SAAA,CAAoBoF,CAApB,CAA4BA,CAA5B,CAAqC7J,CAArC,CADO,CAsENoN,IApEDlL,MAAA8F,MAAA,CAAiB6B,CAAjB;AAAyBA,CAAzB,CAAkC7J,CAAlC,CACF,MACF,MAAKyN,EAAApE,EAAL,CACEnC,CAAA,CAASpD,CAAA,IAAI7B,CAAJ,CAiENmL,IAjE0BlL,MAApB,CAAgC,OAC9B2H,CAD8B,YAEzBwD,CAAA5C,EAFyB,CAAhC,CAAA3G,GAAA,EAIT,MACF,SACE/B,CAAA,CAAU2B,KAAJ,CAAU,0BAAV,CAAN,CAbJ,CAgBA,GAwDO0J,IAxDHnE,GAAJ,CAAiB,CLhfiBpB,IAAAA,EADH3H,CACG2H,CAAH,CAAGA,CAa9BpH,EAAoB,QAAf,GAAA,MAAOoH,EAAP,CAA2BA,CAA3B,CAAkCA,CAAlC,CAAwC,CAbfA,CAc9B3C,GKmesBgC,CLneuBlH,OAEjD0N,EAAA,CAAA,EAGA,KAAKjN,CAAL,CAASyE,EAAT,CAAc,CAAd,CAAiBzE,CAAA,EAAjB,CAAsB,EAAEoH,CAAxB,CACE6F,CAAA,CAAOA,CAAP,GAAe,CAAf,CARU7M,CAQU,EAAO6M,CAAP,CK6dIxG,CL7dS,CAAKW,CAAL,CAAb,EAA0B,GAA1B,CAEtB,KAAKpH,CAAL,CAASyE,EAAT,EAAe,CAAf,CAAkBzE,CAAA,EAAlB,CAAuBoH,CAAvB,EAA8B,CAA9B,CACE6F,CAOA,CAPOA,CAOP,GAPe,CAOf,CAlBU7M,CAWU,EAAO6M,CAAP,CK0dIxG,CL1dS,CAAKW,CAAL,CAAb,EAA8B,GAA9B,CAOpB,CANA6F,CAMA,CANOA,CAMP,GANe,CAMf,CAlBU7M,CAYU,EAAO6M,CAAP,CKydIxG,CLzdS,CAAKW,CAAL,CAAW,CAAX,CAAb,EAA8B,GAA9B,CAMpB,CALA6F,CAKA,CALOA,CAKP,GALe,CAKf,CAlBU7M,CAaU,EAAO6M,CAAP,CKwdIxG,CLxdS,CAAKW,CAAL,CAAW,CAAX,CAAb,EAA8B,GAA9B,CAKpB,CAJA6F,CAIA,CAJOA,CAIP,GAJe,CAIf,CAlBU7M,CAcU,EAAO6M,CAAP,CKudIxG,CLvdS,CAAKW,CAAL,CAAW,CAAX,CAAb,EAA8B,GAA9B,CAIpB,CAHA6F,CAGA,CAHOA,CAGP,GAHe,CAGf,CAlBU7M,CAeU,EAAO6M,CAAP,CKsdIxG,CLtdS,CAAKW,CAAL,CAAW,CAAX,CAAb,EAA8B,GAA9B,CAGpB,CAFA6F,CAEA,CAFOA,CAEP,GAFe,CAEf,CAlBU7M,CAgBU,EAAO6M,CAAP,CKqdIxG,CLrdS,CAAKW,CAAL,CAAW,CAAX,CAAb,EAA8B,GAA9B,CAEpB,CADA6F,CACA,CADOA,CACP,GADe,CACf,CAlBU7M,CAiBU,EAAO6M,CAAP,CKodIxG,CLpdS,CAAKW,CAAL,CAAW,CAAX,CAAb,EAA8B,GAA9B,CACpB,CAAA6F,CAAA,CAAOA,CAAP,GAAe,CAAf,CAlBU7M,CAkBU,EAAO6M,CAAP,CKmdIxG,CLndS,CAAKW,CAAL,CAAW,CAAX,CAAb,EAA8B,GAA9B,CA9BtB,EAAA,EAiCQ6F,CAjCR,CAiCc,UAjCd,IAiC8B,CKidxBL,EAAA9C,EAAJ,GAA8BA,CAA9B,EACExI,CADF,CACY2B,KAAJ,CACJ,oBADI;AACmB2J,CAAA9C,EAAAoD,SAAA,CAA+B,EAA/B,CADnB,CAEJ,WAFI,CAEUpD,CAAAoD,SAAA,CAAe,EAAf,CAFV,CADR,CAFe,CAwDjB,MA9COzG,EAiCwD,CAmBjE2F,EAAAxE,EAAA,CAAmCuF,QAAQ,CAACrF,CAAD,CAAW,CACpD,IAAAA,EAAA,CAAgBA,CADoC,CASxBsF,SAAQ,GAAA,CAARA,CAAQ,CAACnF,CAAD,CAAM/H,CAAN,CAAS,CAC7CA,CAAA,EAAK,CAAA6H,EAAA,CAAyDE,CAAzD,CACL,EAAAE,EAAA,CAA4DF,CAA5D,CAAkE/H,CAAlE,CAEA,OAAOA,EAJsC,CAQ/CkM,CAAAjE,EAAA,CAAkCV,CAAArE,UAAA+E,EAClCiE,EAAAU,EAAA,CAA2CrF,CAAArE,UAAAiF,EAC3C+D,EAAArE,EAAA,CAA+BN,CAAArE,UAAA2E,E,CCnlB/BhJ,CAAA,CAAkB,YAAlB,CAAgCwJ,CAAhC,CACAxJ,EAAA,CACE,iCADF,CAEEwJ,CAAAnF,UAAAC,EAFF,CAIAtE,EAAA,CACE,mCADF,CAEEwJ,CAAAnF,UAAAiJ,EAFF,CAIAtN,EAAA,CACE,kCADF,CAEEwJ,CAAAnF,UAAAwE,EAFF;", -"sources":["../closure-primitives/base.js","../define/typedarray/hybrid.js","../src/bitstream.js","../src/crc32.js","../src/huffman.js","../src/rawdeflate.js","../src/rawinflate.js","../src/zip.js","../src/unzip.js","../export/unzip.js"], -"names":["goog.global","goog.exportSymbol","publicPath","object","parts","split","cur","execScript","part","length","shift","JSCompiler_alias_VOID","USE_TYPEDARRAY","Uint8Array","Uint16Array","Uint32Array","DataView","Array","i","s","n","Zlib.CRC32.Table_","Zlib.CRC32.Table","Zlib.Huffman.buildHuffmanTable","lengths","listSize","maxCodeLength","minCodeLength","Number","POSITIVE_INFINITY","size","table","bitLength","code","skip","reversed","rtemp","j","value","push","JSCompiler_alias_THROW","c","Zlib.RawInflate","input","opt_params","blocks","bufferSize","ZLIB_RAW_INFLATE_BUFFER_SIZE","bitsbuflen","bitsbuf","ip","totalpos","bfinal","bufferType","Zlib.RawInflate.BufferType.ADAPTIVE","resize","Zlib.RawInflate.BufferType.BLOCK","op","Zlib.RawInflate.MaxBackwardLength","output","Zlib.RawInflate.MaxCopyLength","expandBuffer","expandBufferAdaptive","concatBuffer","concatBufferDynamic","decodeHuffman","decodeHuffmanAdaptive","Error","BLOCK","ADAPTIVE","prototype","decompress","Zlib.RawInflate.prototype.decompress","hdr","readBits","parseBlock","inputLength","len","nlen","olength","preCopy","set","subarray","Zlib.RawInflate.FixedLiteralLengthTable","Zlib.RawInflate.FixedDistanceTable","parseDynamicHuffmanBlock","Zlib.RawInflate.Order","Zlib.RawInflate.LengthCodeTable","Zlib.RawInflate.LengthExtraTable","Zlib.RawInflate.DistCodeTable","Zlib.RawInflate.DistExtraTable","il","Zlib.RawInflate.prototype.readBits","octet","Zlib.RawInflate.prototype.readCodeByTable","codeTable","codeWithLength","codeLength","Zlib.RawInflate.prototype.parseDynamicHuffmanBlock","decode","num","prev","repeat","readCodeByTable","hlit","hdist","hclen","codeLengths","Zlib.RawInflate.Order.length","codeLengthsTable","litlenLengths","distLengths","call","Zlib$RawInflate.prototype","Zlib.RawInflate.prototype","Zlib.RawInflate.prototype.decodeHuffman","litlen","dist","currentLitlenTable","ti","codeDist","Zlib.RawInflate.prototype.decodeHuffmanAdaptive","Zlib.RawInflate.prototype.expandBuffer","buffer","backward","Zlib.RawInflate.prototype.expandBufferAdaptive","opt_param","ratio","maxHuffCode","newSize","maxInflateSize","fixRatio","addRatio","Zlib.RawInflate.prototype.concatBuffer","pos","block","jl","slice","Zlib.RawInflate.prototype.concatBufferDynamic","Zlib.Zip","files","comment","setPassword","Zlib.Zip.prototype.setPassword","password","getByte","Zlib.Zip.prototype.getByte","key","tmp","updateKeys","Zlib.Zip.prototype.updateKeys","createEncryptionKey","Zlib.Zip.prototype.createEncryptionKey","Zlib.Unzip","verify","Zlib.Unzip.CompressionMethod","Zlib.Zip.CompressionMethod","STORE","DEFLATE","Zlib.Unzip.FileHeaderSignature","Zlib.Zip.FileHeaderSignature","Zlib.Unzip.LocalFileHeaderSignature","Zlib.Zip.LocalFileHeaderSignature","Zlib.Unzip.CentralDirectorySignature","Zlib.Zip.CentralDirectorySignature","Zlib.Unzip.FileHeader","offset","parse","Zlib.Unzip.FileHeader.prototype.parse","version","os","needVersion","flags","compression","time","date","crc32","compressedSize","plainSize","fileNameLength","extraFieldLength","fileCommentLength","diskNumberStart","internalFileAttributes","externalFileAttributes","relativeOffset","filename","String","fromCharCode","apply","extraField","Zlib.Unzip.LocalFileHeader","Zlib.Unzip.LocalFileHeader.Flags","Zlib.Zip.Flags","ENCRYPT","DESCRIPTOR","UTF8","Zlib.Unzip.LocalFileHeader.prototype.parse","Zlib.Unzip.prototype.parseFileHeader","filelist","filetable","fileHeader","fileHeaderList","centralDirectoryOffset","parseEndOfCentralDirectoryRecord","eocdrOffset","numberOfThisDisk","startDisk","totalEntriesThisDisk","totalEntries","centralDirectorySize","commentLength","filenameToIndex","Zlib$Unzip.prototype","Zlib.Unzip.prototype","getFilenames","Zlib.Unzip.prototype.getFilenames","filenameList","parseFileHeader","Zlib.Unzip.prototype.decompress","index","getFileData","localFileHeader","Zlib.Unzip.LocalFileHeader.Flags.ENCRYPT","createDecryptionKey","Zlib.Unzip.CompressionMethod.STORE","Zlib.Unzip.CompressionMethod.DEFLATE","crc","toString","Zlib.Unzip.prototype.setPassword","Zlib.Unzip.prototype.decode"] -} diff --git a/bin/zip.dev.min.js b/bin/zip.dev.min.js new file mode 100644 index 0000000..449cf52 --- /dev/null +++ b/bin/zip.dev.min.js @@ -0,0 +1,38 @@ +/** @license zlib.js 2012 - imaya [ https://github.com/imaya/zlib.js ] The MIT License */(function() {'use strict';var n=void 0,y=!0,aa=this;function G(e,b){var a=e.split("."),d=aa;!(a[0]in d)&&d.execScript&&d.execScript("var "+a[0]);for(var c;a.length&&(c=a.shift());)!a.length&&b!==n?d[c]=b:d=d[c]?d[c]:d[c]={}};var H="undefined"!==typeof Uint8Array&&"undefined"!==typeof Uint16Array&&"undefined"!==typeof Uint32Array&&"undefined"!==typeof DataView;function ba(e,b){this.index="number"===typeof b?b:0;this.f=0;this.buffer=e instanceof(H?Uint8Array:Array)?e:new (H?Uint8Array:Array)(32768);if(2*this.buffer.length<=this.index)throw Error("invalid index");this.buffer.length<=this.index&&ca(this)}function ca(e){var b=e.buffer,a,d=b.length,c=new (H?Uint8Array:Array)(d<<1);if(H)c.set(b);else for(a=0;a>>8&255]<<16|L[e>>>16&255]<<8|L[e>>>24&255])>>32-b:L[e]>>8-b);if(8>b+f)l=l<>b-p-1&1,8===++f&&(f=0,d[c++]=L[l],l=0,c===d.length&&(d=ca(this)));d[c]=l;this.buffer=d;this.f=f;this.index=c};ba.prototype.finish=function(){var e=this.buffer,b=this.index,a;0ha;++ha){for(var U=ha,ja=U,ka=7,U=U>>>1;U;U>>>=1)ja<<=1,ja|=U&1,--ka;da[ha]=(ja<>>0}var L=da;function la(e){var b=n,a,d="number"===typeof b?b:b=0,c=e.length;a=-1;for(d=c&7;d--;++b)a=a>>>8^V[(a^e[b])&255];for(d=c>>3;d--;b+=8)a=a>>>8^V[(a^e[b])&255],a=a>>>8^V[(a^e[b+1])&255],a=a>>>8^V[(a^e[b+2])&255],a=a>>>8^V[(a^e[b+3])&255],a=a>>>8^V[(a^e[b+4])&255],a=a>>>8^V[(a^e[b+5])&255],a=a>>>8^V[(a^e[b+6])&255],a=a>>>8^V[(a^e[b+7])&255];return(a^4294967295)>>>0} +var ma=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759, +2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977, +2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755, +2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956, +3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270, +936918E3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117],V=H?new Uint32Array(ma):ma;function na(e){this.buffer=new (H?Uint16Array:Array)(2*e);this.length=0}na.prototype.getParent=function(e){return 2*((e-2)/4|0)};na.prototype.push=function(e,b){var a,d,c=this.buffer,f;a=this.length;c[this.length++]=b;for(c[this.length++]=e;0c[d])f=c[a],c[a]=c[d],c[d]=f,f=c[a+1],c[a+1]=c[d+1],c[d+1]=f,a=d;else break;return this.length}; +na.prototype.pop=function(){var e,b,a=this.buffer,d,c,f;b=a[0];e=a[1];this.length-=2;a[0]=a[this.length];a[1]=a[this.length+1];for(f=0;;){c=2*f+2;if(c>=this.length)break;c+2a[c]&&(c+=2);if(a[c]>a[f])d=a[f],a[f]=a[c],a[c]=d,d=a[f+1],a[f+1]=a[c+1],a[c+1]=d;else break;f=c}return{index:e,value:b,length:this.length}};function pa(e,b){this.k=qa;this.l=0;this.input=H&&e instanceof Array?new Uint8Array(e):e;this.e=0;b&&(b.lazy&&(this.l=b.lazy),"number"===typeof b.compressionType&&(this.k=b.compressionType),b.outputBuffer&&(this.c=H&&b.outputBuffer instanceof Array?new Uint8Array(b.outputBuffer):b.outputBuffer),"number"===typeof b.outputIndex&&(this.e=b.outputIndex));this.c||(this.c=new (H?Uint8Array:Array)(32768))}var qa=2,sa=[],Y; +for(Y=0;288>Y;Y++)switch(y){case 143>=Y:sa.push([Y+48,8]);break;case 255>=Y:sa.push([Y-144+400,9]);break;case 279>=Y:sa.push([Y-256+0,7]);break;case 287>=Y:sa.push([Y-280+192,8]);break;default:throw"invalid literal: "+Y;} +pa.prototype.g=function(){var e,b,a,d,c=this.input;switch(this.k){case 0:a=0;for(d=c.length;a>>8&255;m[h++]=q&255;m[h++]=q>>>8&255;if(H)m.set(f,h),h+=f.length,m=m.subarray(0,h);else{w=0;for(u=f.length;wx)for(;0x?x:138,E>x-3&&E=E?(M[K++]=17,M[K++]=E-3,S[17]++):(M[K++]=18,M[K++]=E-11,S[18]++),x-=E;else if(M[K++]=P[v],S[P[v]]++,x--,3>x)for(;0x?x:6,E>x-3&&ED;D++)oa[D]=X[g[D]];for(C=19;4=a:return[265,a-11,1];case 14>=a:return[266,a-13,1];case 16>=a:return[267,a-15,1];case 18>=a:return[268,a-17,1];case 22>=a:return[269,a-19,2];case 26>=a:return[270,a-23,2];case 30>=a:return[271,a-27,2];case 34>=a:return[272, +a-31,2];case 42>=a:return[273,a-35,3];case 50>=a:return[274,a-43,3];case 58>=a:return[275,a-51,3];case 66>=a:return[276,a-59,3];case 82>=a:return[277,a-67,4];case 98>=a:return[278,a-83,4];case 114>=a:return[279,a-99,4];case 130>=a:return[280,a-115,4];case 162>=a:return[281,a-131,5];case 194>=a:return[282,a-163,5];case 226>=a:return[283,a-195,5];case 257>=a:return[284,a-227,5];case 258===a:return[285,a-258,0];default:throw"invalid length: "+a;}}var b=[],a,d;for(a=3;258>=a;a++)d=e(a),b[a]=d[2]<<24| +d[1]<<16|d[0];return b}(),Ja=H?new Uint32Array(xa):xa; +function ta(e,b){function a(a,c){var b=a.n,d=[],e=0,f;f=Ja[a.length];d[e++]=f&65535;d[e++]=f>>16&255;d[e++]=f>>24;var g;switch(y){case 1===b:g=[0,b-1,0];break;case 2===b:g=[1,b-2,0];break;case 3===b:g=[2,b-3,0];break;case 4===b:g=[3,b-4,0];break;case 6>=b:g=[4,b-5,1];break;case 8>=b:g=[5,b-7,1];break;case 12>=b:g=[6,b-9,2];break;case 16>=b:g=[7,b-13,2];break;case 24>=b:g=[8,b-17,3];break;case 32>=b:g=[9,b-25,3];break;case 48>=b:g=[10,b-33,4];break;case 64>=b:g=[11,b-49,4];break;case 96>=b:g=[12,b- +65,5];break;case 128>=b:g=[13,b-97,5];break;case 192>=b:g=[14,b-129,6];break;case 256>=b:g=[15,b-193,6];break;case 384>=b:g=[16,b-257,7];break;case 512>=b:g=[17,b-385,7];break;case 768>=b:g=[18,b-513,8];break;case 1024>=b:g=[19,b-769,8];break;case 1536>=b:g=[20,b-1025,9];break;case 2048>=b:g=[21,b-1537,9];break;case 3072>=b:g=[22,b-2049,10];break;case 4096>=b:g=[23,b-3073,10];break;case 6144>=b:g=[24,b-4097,11];break;case 8192>=b:g=[25,b-6145,11];break;case 12288>=b:g=[26,b-8193,12];break;case 16384>= +b:g=[27,b-12289,12];break;case 24576>=b:g=[28,b-16385,13];break;case 32768>=b:g=[29,b-24577,13];break;default:throw"invalid distance";}f=g;d[e++]=f[0];d[e++]=f[1];d[e++]=f[2];var k,l;k=0;for(l=d.length;k=f;)t[f++]=0;for(f=0;29>=f;)r[f++]=0}t[256]=1;d=0;for(c=b.length;d=c){u&&a(u,-1);f=0;for(l=c-d;fl&&b+lf&&(c=d,f=l);if(258===l)break}return new wa(f,b-c)} +function ua(e,b){var a=e.length,d=new na(572),c=new (H?Uint8Array:Array)(a),f,l,p,k,q;if(!H)for(k=0;k2*c[h-1]+f[h]&&(c[h]=2*c[h-1]+f[h]),p[h]=Array(c[h]),k[h]=Array(c[h]);for(m=0;me[m]?(p[h][s]=t,k[h][s]=b,r+=2):(p[h][s]=e[m],k[h][s]=m,++m);q[h]=0;1===f[h]&&d(h)}return l} +function va(e){var b=new (H?Uint16Array:Array)(e.length),a=[],d=[],c=0,f,l,p,k;f=0;for(l=e.length;f>>=1}return b};function $(e){e=e||{};this.files=[];this.d=e.comment}var Ma=[80,75,1,2],Na=[80,75,3,4],Oa=[80,75,5,6];$.prototype.m=function(e,b){b=b||{};var a,d=e.length,c=0;H&&e instanceof Array&&(e=new Uint8Array(e));"number"!==typeof b.compressionMethod&&(b.compressionMethod=8);if(b.compress)switch(b.compressionMethod){case 0:break;case 8:c=la(e);e=(new pa(e,b.deflateOption)).g();a=y;break;default:throw Error("unknown compression method:"+b.compressionMethod);}this.files.push({buffer:e,a:b,j:a,r:!1,size:d,h:c})}; +$.prototype.q=function(e){this.i=e}; +$.prototype.g=function(){var e=this.files,b,a,d,c,f,l=0,p=0,k,q,w,u,m,h,s,t,r,Q,z,A,F,I,N,B,C,g,J;B=0;for(C=e.length;Bg;++g)F[g]=Qa(N,11===B?b.h&255:256*Math.random()|0);for(J=F.length;g>8&255;w=b.a.compressionMethod;a[d++]=a[c++]=w&255;a[d++]=a[c++]=w>>8&255;u=b.a.date||new Date;a[d++]=a[c++]=(u.getMinutes()&7)<<5|u.getSeconds()/2|0;a[d++]=a[c++]=u.getHours()<<3|u.getMinutes()>>3;a[d++]=a[c++]=(u.getMonth()+1&7)<<5|u.getDate();a[d++]=a[c++]=(u.getFullYear()- +1980&127)<<1|u.getMonth()+1>>3;m=b.h;a[d++]=a[c++]=m&255;a[d++]=a[c++]=m>>8&255;a[d++]=a[c++]=m>>16&255;a[d++]=a[c++]=m>>24&255;h=b.buffer.length;a[d++]=a[c++]=h&255;a[d++]=a[c++]=h>>8&255;a[d++]=a[c++]=h>>16&255;a[d++]=a[c++]=h>>24&255;s=b.size;a[d++]=a[c++]=s&255;a[d++]=a[c++]=s>>8&255;a[d++]=a[c++]=s>>16&255;a[d++]=a[c++]=s>>24&255;a[d++]=a[c++]=t&255;a[d++]=a[c++]=t>>8&255;a[d++]=a[c++]=0;a[d++]=a[c++]=0;a[c++]=r&255;a[c++]=r>>8&255;a[c++]=0;a[c++]=0;a[c++]=0;a[c++]=0;a[c++]=0;a[c++]=0;a[c++]= +0;a[c++]=0;a[c++]=k&255;a[c++]=k>>8&255;a[c++]=k>>16&255;a[c++]=k>>24&255;if(Q=b.a.filename)if(H)a.set(Q,d),a.set(Q,c),d+=t,c+=t;else for(g=0;g>8&255;a[f++]=C&255;a[f++]=C>>8&255;a[f++]=p&255;a[f++]=p>>8&255;a[f++]=p>>16&255;a[f++]=p>>24&255;a[f++]=l&255;a[f++]=l>>8&255;a[f++]=l>>16&255;a[f++]=l>>24&255;r=this.d?this.d.length:0;a[f++]=r&255;a[f++]=r>>8&255;if(this.d)if(H)a.set(this.d,f);else{g=0;for(J=r;g>8&255;Pa(e,b);return a^b} +function Pa(e,b){e[0]=(V[(e[0]^b)&255]^e[0]>>>8)>>>0;e[1]=(6681*(20173*(e[1]+(e[0]&255))>>>0)>>>0)+1>>>0;e[2]=(V[(e[2]^e[1]>>>24)&255]^e[2]>>>8)>>>0};function Ra(e,b){var a,d,c,f;if(Object.keys)a=Object.keys(b);else for(d in a=[],c=0,b)a[c++]=d;c=0;for(f=a.length;c>3;m=b.h;a[d++]=a[c++]=m&255;a[d++]=a[c++]=m>>8&255;a[d++]=a[c++]=m>>16&255;a[d++]=a[c++]=m>>24&255;h=b.buffer.length;a[d++]=a[c++]=h&255;a[d++]=a[c++]=h>>8&255;a[d++]=a[c++]=h>>16&255;a[d++]=a[c++]=h>>24&255;s=b.size;a[d++]=a[c++]=s&255;a[d++]=a[c++]=s>>8&255;a[d++]=a[c++]=s>>16&255;a[d++]=a[c++]=s>>24&255;a[d++]=a[c++]=t&255;a[d++]=a[c++]=t>>8&255;a[d++]=a[c++]=0;a[d++]=a[c++]=0;a[c++]=r&255;a[c++]=r>>8&255;a[c++]=0;a[c++]=0;a[c++]=0;a[c++]=0;a[c++]=0;a[c++]=0;a[c++]= 0;a[c++]=0;a[c++]=k&255;a[c++]=k>>8&255;a[c++]=k>>16&255;a[c++]=k>>24&255;if(Q=b.a.filename)if(H)a.set(Q,d),a.set(Q,c),d+=t,c+=t;else for(g=0;g>8&255;a[f++]=C&255;a[f++]=C>>8&255;a[f++]=p&255;a[f++]=p>>8&255;a[f++]=p>>16&255;a[f++]=p>>24&255;a[f++]=l&255;a[f++]=l>>8&255;a[f++]=l>>16&255;a[f++]=l>>24&255;r=this.d?this.d.length:0;a[f++]=r&255;a[f++]=r>>8&255;if(this.d)if(H)a.set(this.d,f);else{g=0;for(J=r;g>8&255;Pa(e,b);return a^b} -function Pa(e,b){e[0]=(V[(e[0]^b)&255]^e[0]>>>8)>>>0;e[1]=(6681*(20173*(e[1]+(e[0]&255))>>>0)>>>0)+1>>>0;e[2]=(V[(e[2]^e[1]>>>24)&255]^e[2]>>>8)>>>0};function Ra(e,b){var a,d,c,f;if(Object.keys)a=Object.keys(b);else for(d in a=[],c=0,b)a[c++]=d;c=0;for(f=a.length;c>>8)>>>0;e[1]=(6681*(20173*(e[1]+(e[0]&255))>>>0)>>>0)+1>>>0;e[2]=(V[(e[2]^e[1]>>>24)&255]^e[2]>>>8)>>>0};function Ra(e,b){var a,d,c,f;if(Object.keys)a=Object.keys(b);else for(d in a=[],c=0,b)a[c++]=d;c=0;for(f=a.length;c>>8&255]<<16|N[d>>>16&255]<<8|N[d>>>24&255])>>32-a:N[d]>>8-a);if(8>a+f)g=g<>a-h-1&1,8===++f&&(f=0,e[b++]=N[g],g=0,b===e.length&&(e=this.f()));e[b]=g;this.buffer=e;this.i=f;this.index=b};H.prototype.finish=function(){var d=this.buffer,a=this.index,c;0O;++O){for(var P=O,Q=P,ga=7,P=P>>>1;P;P>>>=1)Q<<=1,Q|=P&1,--ga;fa[O]=(Q<>>0}var N=fa;function ha(d){this.buffer=new (F?Uint16Array:Array)(2*d);this.length=0}ha.prototype.getParent=function(d){return 2*((d-2)/4|0)};ha.prototype.push=function(d,a){var c,e,b=this.buffer,f;c=this.length;b[this.length++]=a;for(b[this.length++]=d;0b[e])f=b[c],b[c]=b[e],b[e]=f,f=b[c+1],b[c+1]=b[e+1],b[e+1]=f,c=e;else break;return this.length}; +ha.prototype.pop=function(){var d,a,c=this.buffer,e,b,f;a=c[0];d=c[1];this.length-=2;c[0]=c[this.length];c[1]=c[this.length+1];for(f=0;;){b=2*f+2;if(b>=this.length)break;b+2c[b]&&(b+=2);if(c[b]>c[f])e=c[f],c[f]=c[b],c[b]=e,e=c[f+1],c[f+1]=c[b+1],c[b+1]=e;else break;f=b}return{index:d,value:a,length:this.length}};function R(d){var a=d.length,c=0,e=Number.POSITIVE_INFINITY,b,f,g,h,k,n,q,r,p,m;for(r=0;rc&&(c=d[r]),d[r]>=1;m=g<<16|r;for(p=n;pS;S++)switch(x){case 143>=S:oa.push([S+48,8]);break;case 255>=S:oa.push([S-144+400,9]);break;case 279>=S:oa.push([S-256+0,7]);break;case 287>=S:oa.push([S-280+192,8]);break;default:l("invalid literal: "+S)} +ia.prototype.j=function(){var d,a,c,e,b=this.input;switch(this.h){case 0:c=0;for(e=b.length;c>>8&255;p[m++]=n&255;p[m++]=n>>>8&255;if(F)p.set(f,m),m+=f.length,p=p.subarray(0,m);else{q=0;for(r=f.length;qu)for(;0< +u--;)G[E++]=0,K[0]++;else for(;0u?u:138,B>u-3&&B=B?(G[E++]=17,G[E++]=B-3,K[17]++):(G[E++]=18,G[E++]=B-11,K[18]++),u-=B;else if(G[E++]=I[t],K[I[t]]++,u--,3>u)for(;0u?u:6,B>u-3&&Bz;z++)ra[z]=ka[gb[z]];for(W=19;4=b:return[265,b-11,1];case 14>=b:return[266,b-13,1];case 16>=b:return[267,b-15,1];case 18>=b:return[268,b-17,1];case 22>=b:return[269,b-19,2];case 26>=b:return[270,b-23,2];case 30>=b:return[271,b-27,2];case 34>=b:return[272, +b-31,2];case 42>=b:return[273,b-35,3];case 50>=b:return[274,b-43,3];case 58>=b:return[275,b-51,3];case 66>=b:return[276,b-59,3];case 82>=b:return[277,b-67,4];case 98>=b:return[278,b-83,4];case 114>=b:return[279,b-99,4];case 130>=b:return[280,b-115,4];case 162>=b:return[281,b-131,5];case 194>=b:return[282,b-163,5];case 226>=b:return[283,b-195,5];case 257>=b:return[284,b-227,5];case 258===b:return[285,b-258,0];default:l("invalid length: "+b)}}var a=[],c,e;for(c=3;258>=c;c++)e=d(c),a[c]=e[2]<<24|e[1]<< +16|e[0];return a}(),wa=F?new Uint32Array(va):va; +function pa(d,a){function c(b,c){var a=b.H,d=[],e=0,f;f=wa[b.length];d[e++]=f&65535;d[e++]=f>>16&255;d[e++]=f>>24;var g;switch(x){case 1===a:g=[0,a-1,0];break;case 2===a:g=[1,a-2,0];break;case 3===a:g=[2,a-3,0];break;case 4===a:g=[3,a-4,0];break;case 6>=a:g=[4,a-5,1];break;case 8>=a:g=[5,a-7,1];break;case 12>=a:g=[6,a-9,2];break;case 16>=a:g=[7,a-13,2];break;case 24>=a:g=[8,a-17,3];break;case 32>=a:g=[9,a-25,3];break;case 48>=a:g=[10,a-33,4];break;case 64>=a:g=[11,a-49,4];break;case 96>=a:g=[12,a- +65,5];break;case 128>=a:g=[13,a-97,5];break;case 192>=a:g=[14,a-129,6];break;case 256>=a:g=[15,a-193,6];break;case 384>=a:g=[16,a-257,7];break;case 512>=a:g=[17,a-385,7];break;case 768>=a:g=[18,a-513,8];break;case 1024>=a:g=[19,a-769,8];break;case 1536>=a:g=[20,a-1025,9];break;case 2048>=a:g=[21,a-1537,9];break;case 3072>=a:g=[22,a-2049,10];break;case 4096>=a:g=[23,a-3073,10];break;case 6144>=a:g=[24,a-4097,11];break;case 8192>=a:g=[25,a-6145,11];break;case 12288>=a:g=[26,a-8193,12];break;case 16384>= +a:g=[27,a-12289,12];break;case 24576>=a:g=[28,a-16385,13];break;case 32768>=a:g=[29,a-24577,13];break;default:l("invalid distance")}f=g;d[e++]=f[0];d[e++]=f[1];d[e++]=f[2];var h,k;h=0;for(k=d.length;h=f;)w[f++]=0;for(f=0;29>=f;)y[f++]=0}w[256]=1;e=0;for(b=a.length;e=b){r&&c(r,-1);f=0;for(g=b-e;fg&&a+gf&&(b=e,f=g);if(258===g)break}return new ta(f,a-b)} +function qa(d,a){var c=d.length,e=new ha(572),b=new (F?Uint8Array:Array)(c),f,g,h,k,n;if(!F)for(k=0;k2*b[m-1]+f[m]&&(b[m]=2*b[m-1]+f[m]),h[m]=Array(b[m]),k[m]=Array(b[m]);for(p=0;pd[p]?(h[m][s]=w,k[m][s]=a,y+=2):(h[m][s]=d[p],k[m][s]=p,++p);n[m]=0;1===f[m]&&e(m)}return g} +function sa(d){var a=new (F?Uint16Array:Array)(d.length),c=[],e=[],b=0,f,g,h,k;f=0;for(g=d.length;f>>=1}return a};function T(d,a){this.l=[];this.m=32768;this.e=this.g=this.c=this.q=0;this.input=F?new Uint8Array(d):d;this.s=!1;this.n=za;this.C=!1;if(a||!(a={}))a.index&&(this.c=a.index),a.bufferSize&&(this.m=a.bufferSize),a.bufferType&&(this.n=a.bufferType),a.resize&&(this.C=a.resize);switch(this.n){case Aa:this.b=32768;this.a=new (F?Uint8Array:Array)(32768+this.m+258);break;case za:this.b=0;this.a=new (F?Uint8Array:Array)(this.m);this.f=this.K;this.t=this.I;this.o=this.J;break;default:l(Error("invalid inflate mode"))}} +var Aa=0,za=1,Ba={F:Aa,D:za}; +T.prototype.p=function(){for(;!this.s;){var d=Y(this,3);d&1&&(this.s=x);d>>>=1;switch(d){case 0:var a=this.input,c=this.c,e=this.a,b=this.b,f=a.length,g=v,h=v,k=e.length,n=v;this.e=this.g=0;c+1>=f&&l(Error("invalid uncompressed block header: LEN"));g=a[c++]|a[c++]<<8;c+1>=f&&l(Error("invalid uncompressed block header: NLEN"));h=a[c++]|a[c++]<<8;g===~h&&l(Error("invalid uncompressed block header: length verify"));c+g>a.length&&l(Error("input buffer is broken"));switch(this.n){case Aa:for(;b+g>e.length;){n= +k-b;g-=n;if(F)e.set(a.subarray(c,c+n),b),b+=n,c+=n;else for(;n--;)e[b++]=a[c++];this.b=b;e=this.f();b=this.b}break;case za:for(;b+g>e.length;)e=this.f({v:2});break;default:l(Error("invalid inflate mode"))}if(F)e.set(a.subarray(c,c+g),b),b+=g,c+=g;else for(;g--;)e[b++]=a[c++];this.c=c;this.b=b;this.a=e;break;case 1:this.o(Ca,Da);break;case 2:Sa(this);break;default:l(Error("unknown BTYPE: "+d))}}return this.t()}; +var Ta=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],Ua=F?new Uint16Array(Ta):Ta,Va=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258],Wa=F?new Uint16Array(Va):Va,Xa=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0],Ya=F?new Uint8Array(Xa):Xa,Za=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],$a=F?new Uint16Array(Za):Za,ab=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10, +10,11,11,12,12,13,13],bb=F?new Uint8Array(ab):ab,cb=new (F?Uint8Array:Array)(288),Z,db;Z=0;for(db=cb.length;Z=Z?8:255>=Z?9:279>=Z?7:8;var Ca=R(cb),eb=new (F?Uint8Array:Array)(30),fb,hb;fb=0;for(hb=eb.length;fb=g&&l(Error("input buffer is broken")),c|=b[f++]<>>a;d.e=e-a;d.c=f;return h} +function ib(d,a){for(var c=d.g,e=d.e,b=d.input,f=d.c,g=b.length,h=a[0],k=a[1],n,q;e=g);)c|=b[f++]<>>16;d.g=c>>q;d.e=e-q;d.c=f;return n&65535} +function Sa(d){function a(a,b,c){var d,e=this.z,f,g;for(g=0;gf)e>=b&&(this.b=e,c=this.f(),e=this.b),c[e++]=f;else{g=f-257;k=Wa[g];0=b&&(this.b=e,c=this.f(),e=this.b);for(;k--;)c[e]=c[e++-h]}for(;8<=this.e;)this.e-=8,this.c--;this.b=e}; +T.prototype.J=function(d,a){var c=this.a,e=this.b;this.u=d;for(var b=c.length,f,g,h,k;256!==(f=ib(this,d));)if(256>f)e>=b&&(c=this.f(),b=c.length),c[e++]=f;else{g=f-257;k=Wa[g];0b&&(c=this.f(),b=c.length);for(;k--;)c[e]=c[e++-h]}for(;8<=this.e;)this.e-=8,this.c--;this.b=e}; +T.prototype.f=function(){var d=new (F?Uint8Array:Array)(this.b-32768),a=this.b-32768,c,e,b=this.a;if(F)d.set(b.subarray(32768,d.length));else{c=0;for(e=d.length;cc;++c)b[c]=b[a+c];this.b=32768;return b}; +T.prototype.K=function(d){var a,c=this.input.length/this.c+1|0,e,b,f,g=this.input,h=this.a;d&&("number"===typeof d.v&&(c=d.v),"number"===typeof d.G&&(c+=d.G));2>c?(e=(g.length-this.c)/this.u[2],f=258*(e/2)|0,b=fa&&(this.a.length=a),d=this.a);return this.buffer=d};function jb(d){if("string"===typeof d){var a=d.split(""),c,e;c=0;for(e=a.length;c>>0;d=a}for(var b=1,f=0,g=d.length,h,k=0;0>>0};function kb(d,a){var c,e;this.input=d;this.c=0;if(a||!(a={}))a.index&&(this.c=a.index),a.verify&&(this.N=a.verify);c=d[this.c++];e=d[this.c++];switch(c&15){case lb:this.method=lb;break;default:l(Error("unsupported compression method"))}0!==((c<<8)+e)%31&&l(Error("invalid fcheck flag:"+((c<<8)+e)%31));e&32&&l(Error("fdict flag is not supported"));this.B=new T(d,{index:this.c,bufferSize:a.bufferSize,bufferType:a.bufferType,resize:a.resize})} +kb.prototype.p=function(){var d=this.input,a,c;a=this.B.p();this.c=this.B.c;this.N&&(c=(d[this.c++]<<24|d[this.c++]<<16|d[this.c++]<<8|d[this.c++])>>>0,c!==jb(a)&&l(Error("invalid adler-32 checksum")));return a};var lb=8;function mb(d,a){this.input=d;this.a=new (F?Uint8Array:Array)(32768);this.h=$.k;var c={},e;if((a||!(a={}))&&"number"===typeof a.compressionType)this.h=a.compressionType;for(e in a)c[e]=a[e];c.outputBuffer=this.a;this.A=new ia(this.input,c)}var $=na; +mb.prototype.j=function(){var d,a,c,e,b,f,g,h=0;g=this.a;d=lb;switch(d){case lb:a=Math.LOG2E*Math.log(32768)-8;break;default:l(Error("invalid compression method"))}c=a<<4|d;g[h++]=c;switch(d){case lb:switch(this.h){case $.NONE:b=0;break;case $.r:b=1;break;case $.k:b=2;break;default:l(Error("unsupported compression type"))}break;default:l(Error("invalid compression method"))}e=b<<6|0;g[h++]=e|31-(256*c+e)%31;f=jb(this.input);this.A.b=h;g=this.A.j();h=g.length;F&&(g=new Uint8Array(g.buffer),g.length<= +h+4&&(this.a=new Uint8Array(g.length+4),this.a.set(g),g=this.a),g=g.subarray(0,h+4));g[h++]=f>>24&255;g[h++]=f>>16&255;g[h++]=f>>8&255;g[h++]=f&255;return g};function nb(d,a){var c,e,b,f;if(Object.keys)c=Object.keys(a);else for(e in c=[],b=0,a)c[b++]=e;b=0;for(f=c.length;ba&&(this.a.length=a),d=this.a);return this.buffer=d};function jb(d){if("string"===typeof d){var a=d.split(""),c,e;c=0;for(e=a.length;c>>0;d=a}for(var b=1,f=0,g=d.length,h,k=0;0>>0};function kb(d,a){var c,e;this.input=d;this.c=0;if(a||!(a={}))a.index&&(this.c=a.index),a.verify&&(this.N=a.verify);c=d[this.c++];e=d[this.c++];switch(c&15){case lb:this.method=lb;break;default:l(Error("unsupported compression method"))}0!==((c<<8)+e)%31&&l(Error("invalid fcheck flag:"+((c<<8)+e)%31));e&32&&l(Error("fdict flag is not supported"));this.B=new T(d,{index:this.c,bufferSize:a.bufferSize,bufferType:a.bufferType,resize:a.resize})} kb.prototype.p=function(){var d=this.input,a,c;a=this.B.p();this.c=this.B.c;this.N&&(c=(d[this.c++]<<24|d[this.c++]<<16|d[this.c++]<<8|d[this.c++])>>>0,c!==jb(a)&&l(Error("invalid adler-32 checksum")));return a};var lb=8;function mb(d,a){this.input=d;this.a=new (F?Uint8Array:Array)(32768);this.h=$.k;var c={},e;if((a||!(a={}))&&"number"===typeof a.compressionType)this.h=a.compressionType;for(e in a)c[e]=a[e];c.outputBuffer=this.a;this.A=new ia(this.input,c)}var $=na; mb.prototype.j=function(){var d,a,c,e,b,f,g,h=0;g=this.a;d=lb;switch(d){case lb:a=Math.LOG2E*Math.log(32768)-8;break;default:l(Error("invalid compression method"))}c=a<<4|d;g[h++]=c;switch(d){case lb:switch(this.h){case $.NONE:b=0;break;case $.r:b=1;break;case $.k:b=2;break;default:l(Error("unsupported compression type"))}break;default:l(Error("invalid compression method"))}e=b<<6|0;g[h++]=e|31-(256*c+e)%31;f=jb(this.input);this.A.b=h;g=this.A.j();h=g.length;F&&(g=new Uint8Array(g.buffer),g.length<= -h+4&&(this.a=new Uint8Array(g.length+4),this.a.set(g),g=this.a),g=g.subarray(0,h+4));g[h++]=f>>24&255;g[h++]=f>>16&255;g[h++]=f>>8&255;g[h++]=f&255;return g};function nb(d,a){var c,e,b,f;if(Object.keys)c=Object.keys(a);else for(e in c=[],b=0,a)c[b++]=e;b=0;for(f=c.length;b>24&255;g[h++]=f>>16&255;g[h++]=f>>8&255;g[h++]=f&255;return g};function nb(d,a){var c,e,b,f;if(Object.keys)c=Object.keys(a);else for(e in c=[],b=0,a)c[b++]=e;b=0;for(f=c.length;b= 0;--i) { + var src = scripts[i].src; + var qmark = src.lastIndexOf("?"); + var l = qmark == -1 ? src.length : qmark; + if(src.substr(l - 7, 7) == "base.js") { + goog.basePath = src.substr(0, l - 7); + return + } + } + }; + goog.importScript_ = function(src) { + var importScript = goog.global.CLOSURE_IMPORT_SCRIPT || goog.writeScriptTag_; + if(!goog.dependencies_.written[src] && importScript(src)) { + goog.dependencies_.written[src] = true + } + }; + goog.writeScriptTag_ = function(src) { + if(goog.inHtmlDocument_()) { + var doc = goog.global.document; + doc.write('