New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

keypad

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

keypad - npm Package Compare versions

Comparing version 0.2.1 to 0.3.0

tests/CyclingSlow.coffee

35

lib/browser.js

@@ -9,7 +9,9 @@ (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){

require('../node_modules/keypad/lib/MapNokia.js');
pad = new Keypad({
delay: 500,
text: 'Hello,\n'
});
pad = new Keypad();
(document.getElementById('key-1')).addEventListener('click', function() {
console.log('push', '1');
return pad.emit('push', '1');

@@ -19,2 +21,3 @@ });

(document.getElementById('key-2')).addEventListener('click', function() {
console.log('push', '2');
return pad.emit('push', '2');

@@ -24,2 +27,3 @@ });

(document.getElementById('key-3')).addEventListener('click', function() {
console.log('push', '3');
return pad.emit('push', '3');

@@ -29,2 +33,3 @@ });

(document.getElementById('key-4')).addEventListener('click', function() {
console.log('push', '4');
return pad.emit('push', '4');

@@ -34,2 +39,3 @@ });

(document.getElementById('key-5')).addEventListener('click', function() {
console.log('push', '5');
return pad.emit('push', '5');

@@ -39,2 +45,3 @@ });

(document.getElementById('key-6')).addEventListener('click', function() {
console.log('push', '6');
return pad.emit('push', '6');

@@ -44,2 +51,3 @@ });

(document.getElementById('key-7')).addEventListener('click', function() {
console.log('push', '7');
return pad.emit('push', '7');

@@ -49,2 +57,3 @@ });

(document.getElementById('key-8')).addEventListener('click', function() {
console.log('push', '8');
return pad.emit('push', '8');

@@ -54,2 +63,3 @@ });

(document.getElementById('key-9')).addEventListener('click', function() {
console.log('push', '9');
return pad.emit('push', '9');

@@ -59,2 +69,3 @@ });

(document.getElementById('key-a')).addEventListener('click', function() {
console.log('push', '*');
return pad.emit('push', '*');

@@ -64,2 +75,3 @@ });

(document.getElementById('key-0')).addEventListener('click', function() {
console.log('push', '0');
return pad.emit('push', '0');

@@ -69,2 +81,3 @@ });

(document.getElementById('key-b')).addEventListener('click', function() {
console.log('push', '#');
return pad.emit('push', '#');

@@ -74,4 +87,5 @@ });

setInterval(function() {
(document.getElementById('key-8')).innerHTML = pad.character;
return (document.getElementById('key-8')).innerHTML = pad.text;
(document.getElementById('screen-inner-text')).innerHTML = pad.text.replace('\n', '<br>');
(document.getElementById('screen-inner-character')).innerHTML = pad.character;
return (document.getElementById('screen-inner-case')).innerHTML = pad["case"];
}, 50);

@@ -83,3 +97,3 @@

},{"../node_modules/keypad/lib/MapNokia.js":4,"keypad":5}],2:[function(require,module,exports){
},{"keypad":5}],2:[function(require,module,exports){
// Copyright Joyent, Inc. and other Node contributors.

@@ -513,3 +527,6 @@ //

}
KeyMap = require("./Map" + (this.map_name[0].toUpperCase()) + (this.map_name.slice(1)) + ".js").KeyMap;
if ((typeof window !== "undefined" && window !== null) && this.map_name !== 'nokia') {
throw new Error('Custom maps cannot be selected in browser demo');
}
KeyMap = require('./MapNokia.js').KeyMap;
this.mapping = KeyMap;

@@ -657,3 +674,3 @@ this["case"] = exports.Keypad.caselist[0];

},{"events":2}],4:[function(require,module,exports){
},{"./MapNokia.js":4,"events":2}],4:[function(require,module,exports){
// Generated by CoffeeScript 1.8.0

@@ -706,2 +723,2 @@

},{"./Keypad.js":3}]},{},[1])
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJsaWIvbWFpbi5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzIiwibm9kZV9tb2R1bGVzL2tleXBhZC9saWIvS2V5cGFkLmpzIiwibm9kZV9tb2R1bGVzL2tleXBhZC9saWIvTWFwTm9raWEuanMiLCJub2RlX21vZHVsZXMva2V5cGFkL2xpYi9tYWluLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3U0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM1FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS44LjBcbihmdW5jdGlvbigpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICB2YXIgS2V5cGFkLCBwYWQ7XG5cbiAgS2V5cGFkID0gcmVxdWlyZSgna2V5cGFkJykuS2V5cGFkO1xuXG4gIHJlcXVpcmUoJy4uL25vZGVfbW9kdWxlcy9rZXlwYWQvbGliL01hcE5va2lhLmpzJyk7XG5cbiAgcGFkID0gbmV3IEtleXBhZCgpO1xuXG4gIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna2V5LTEnKSkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gcGFkLmVtaXQoJ3B1c2gnLCAnMScpO1xuICB9KTtcblxuICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2tleS0yJykpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHBhZC5lbWl0KCdwdXNoJywgJzInKTtcbiAgfSk7XG5cbiAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrZXktMycpKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBwYWQuZW1pdCgncHVzaCcsICczJyk7XG4gIH0pO1xuXG4gIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna2V5LTQnKSkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gcGFkLmVtaXQoJ3B1c2gnLCAnNCcpO1xuICB9KTtcblxuICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2tleS01JykpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHBhZC5lbWl0KCdwdXNoJywgJzUnKTtcbiAgfSk7XG5cbiAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrZXktNicpKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBwYWQuZW1pdCgncHVzaCcsICc2Jyk7XG4gIH0pO1xuXG4gIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna2V5LTcnKSkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gcGFkLmVtaXQoJ3B1c2gnLCAnNycpO1xuICB9KTtcblxuICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2tleS04JykpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHBhZC5lbWl0KCdwdXNoJywgJzgnKTtcbiAgfSk7XG5cbiAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrZXktOScpKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBwYWQuZW1pdCgncHVzaCcsICc5Jyk7XG4gIH0pO1xuXG4gIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna2V5LWEnKSkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gcGFkLmVtaXQoJ3B1c2gnLCAnKicpO1xuICB9KTtcblxuICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2tleS0wJykpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHBhZC5lbWl0KCdwdXNoJywgJzAnKTtcbiAgfSk7XG5cbiAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrZXktYicpKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBwYWQuZW1pdCgncHVzaCcsICcjJyk7XG4gIH0pO1xuXG4gIHNldEludGVydmFsKGZ1bmN0aW9uKCkge1xuICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna2V5LTgnKSkuaW5uZXJIVE1MID0gcGFkLmNoYXJhY3RlcjtcbiAgICByZXR1cm4gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrZXktOCcpKS5pbm5lckhUTUwgPSBwYWQudGV4dDtcbiAgfSwgNTApO1xuXG59KS5jYWxsKHRoaXMpO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYWluLmpzLm1hcFxuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgdGhpcy5fZXZlbnRzID0gdGhpcy5fZXZlbnRzIHx8IHt9O1xuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xufVxubW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuXG4vLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmVcbi8vIGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVha3MuXG5FdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycyA9IDEwO1xuXG4vLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncbi8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbihuKSB7XG4gIGlmICghaXNOdW1iZXIobikgfHwgbiA8IDAgfHwgaXNOYU4obikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCduIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtcbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciBlciwgaGFuZGxlciwgbGVuLCBhcmdzLCBpLCBsaXN0ZW5lcnM7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpXG4gICAgdGhpcy5fZXZlbnRzID0ge307XG5cbiAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRocm93LlxuICBpZiAodHlwZSA9PT0gJ2Vycm9yJykge1xuICAgIGlmICghdGhpcy5fZXZlbnRzLmVycm9yIHx8XG4gICAgICAgIChpc09iamVjdCh0aGlzLl9ldmVudHMuZXJyb3IpICYmICF0aGlzLl9ldmVudHMuZXJyb3IubGVuZ3RoKSkge1xuICAgICAgZXIgPSBhcmd1bWVudHNbMV07XG4gICAgICBpZiAoZXIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgICAgIH1cbiAgICAgIHRocm93IFR5cGVFcnJvcignVW5jYXVnaHQsIHVuc3BlY2lmaWVkIFwiZXJyb3JcIiBldmVudC4nKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVyID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gIGlmIChpc1VuZGVmaW5lZChoYW5kbGVyKSlcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKGlzRnVuY3Rpb24oaGFuZGxlcikpIHtcbiAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIC8vIGZhc3QgY2FzZXNcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMsIGFyZ3VtZW50c1sxXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOlxuICAgICAgICBoYW5kbGVyLmNhbGwodGhpcywgYXJndW1lbnRzWzFdLCBhcmd1bWVudHNbMl0pO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIHNsb3dlclxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgYXJncyA9IG5ldyBBcnJheShsZW4gLSAxKTtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGxlbjsgaSsrKVxuICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICBoYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdChoYW5kbGVyKSkge1xuICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgYXJncyA9IG5ldyBBcnJheShsZW4gLSAxKTtcbiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuOyBpKyspXG4gICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcblxuICAgIGxpc3RlbmVycyA9IGhhbmRsZXIuc2xpY2UoKTtcbiAgICBsZW4gPSBsaXN0ZW5lcnMubGVuZ3RoO1xuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICAgIGxpc3RlbmVyc1tpXS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBtO1xuXG4gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblxuICBpZiAoIXRoaXMuX2V2ZW50cylcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcblxuICAvLyBUbyBhdm9pZCByZWN1cnNpb24gaW4gdGhlIGNhc2UgdGhhdCB0eXBlID09PSBcIm5ld0xpc3RlbmVyXCIhIEJlZm9yZVxuICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gIGlmICh0aGlzLl9ldmVudHMubmV3TGlzdGVuZXIpXG4gICAgdGhpcy5lbWl0KCduZXdMaXN0ZW5lcicsIHR5cGUsXG4gICAgICAgICAgICAgIGlzRnVuY3Rpb24obGlzdGVuZXIubGlzdGVuZXIpID9cbiAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgdGhpcy5fZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7XG4gIGVsc2UgaWYgKGlzT2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSkpXG4gICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5wdXNoKGxpc3RlbmVyKTtcbiAgZWxzZVxuICAgIC8vIEFkZGluZyB0aGUgc2Vjb25kIGVsZW1lbnQsIG5lZWQgdG8gY2hhbmdlIHRvIGFycmF5LlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IFt0aGlzLl9ldmVudHNbdHlwZV0sIGxpc3RlbmVyXTtcblxuICAvLyBDaGVjayBmb3IgbGlzdGVuZXIgbGVha1xuICBpZiAoaXNPYmplY3QodGhpcy5fZXZlbnRzW3R5cGVdKSAmJiAhdGhpcy5fZXZlbnRzW3R5cGVdLndhcm5lZCkge1xuICAgIHZhciBtO1xuICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5fbWF4TGlzdGVuZXJzKSkge1xuICAgICAgbSA9IHRoaXMuX21heExpc3RlbmVycztcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IEV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzO1xuICAgIH1cblxuICAgIGlmIChtICYmIG0gPiAwICYmIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGggPiBtKSB7XG4gICAgICB0aGlzLl9ldmVudHNbdHlwZV0ud2FybmVkID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJyhub2RlKSB3YXJuaW5nOiBwb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5ICcgK1xuICAgICAgICAgICAgICAgICAgICAnbGVhayBkZXRlY3RlZC4gJWQgbGlzdGVuZXJzIGFkZGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1VzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0LicsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGgpO1xuICAgICAgaWYgKHR5cGVvZiBjb25zb2xlLnRyYWNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIG5vdCBzdXBwb3J0ZWQgaW4gSUUgMTBcbiAgICAgICAgY29uc29sZS50cmFjZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblxuICB2YXIgZmlyZWQgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBnKCkge1xuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgZyk7XG5cbiAgICBpZiAoIWZpcmVkKSB7XG4gICAgICBmaXJlZCA9IHRydWU7XG4gICAgICBsaXN0ZW5lci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfVxuXG4gIGcubGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgdGhpcy5vbih0eXBlLCBnKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIGVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZmYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHtcbiAgdmFyIGxpc3QsIHBvc2l0aW9uLCBsZW5ndGgsIGk7XG5cbiAgaWYgKCFpc0Z1bmN0aW9uKGxpc3RlbmVyKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgbGlzdCA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgbGVuZ3RoID0gbGlzdC5sZW5ndGg7XG4gIHBvc2l0aW9uID0gLTE7XG5cbiAgaWYgKGxpc3QgPT09IGxpc3RlbmVyIHx8XG4gICAgICAoaXNGdW5jdGlvbihsaXN0Lmxpc3RlbmVyKSAmJiBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikpIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuICAgIGlmICh0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdGVuZXIpO1xuXG4gIH0gZWxzZSBpZiAoaXNPYmplY3QobGlzdCkpIHtcbiAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSA+IDA7KSB7XG4gICAgICBpZiAobGlzdFtpXSA9PT0gbGlzdGVuZXIgfHxcbiAgICAgICAgICAobGlzdFtpXS5saXN0ZW5lciAmJiBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikpIHtcbiAgICAgICAgcG9zaXRpb24gPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgIGxpc3QubGVuZ3RoID0gMDtcbiAgICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpc3Quc3BsaWNlKHBvc2l0aW9uLCAxKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3RlbmVyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciBrZXksIGxpc3RlbmVycztcblxuICBpZiAoIXRoaXMuX2V2ZW50cylcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gIGlmICghdGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLl9ldmVudHMgPSB7fTtcbiAgICBlbHNlIGlmICh0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gZW1pdCByZW1vdmVMaXN0ZW5lciBmb3IgYWxsIGxpc3RlbmVycyBvbiBhbGwgZXZlbnRzXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgZm9yIChrZXkgaW4gdGhpcy5fZXZlbnRzKSB7XG4gICAgICBpZiAoa2V5ID09PSAncmVtb3ZlTGlzdGVuZXInKSBjb250aW51ZTtcbiAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdyZW1vdmVMaXN0ZW5lcicpO1xuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gIGlmIChpc0Z1bmN0aW9uKGxpc3RlbmVycykpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gTElGTyBvcmRlclxuICAgIHdoaWxlIChsaXN0ZW5lcnMubGVuZ3RoKVxuICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbbGlzdGVuZXJzLmxlbmd0aCAtIDFdKTtcbiAgfVxuICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciByZXQ7XG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgcmV0ID0gW107XG4gIGVsc2UgaWYgKGlzRnVuY3Rpb24odGhpcy5fZXZlbnRzW3R5cGVdKSlcbiAgICByZXQgPSBbdGhpcy5fZXZlbnRzW3R5cGVdXTtcbiAgZWxzZVxuICAgIHJldCA9IHRoaXMuX2V2ZW50c1t0eXBlXS5zbGljZSgpO1xuICByZXR1cm4gcmV0O1xufTtcblxuRXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlKSB7XG4gIHZhciByZXQ7XG4gIGlmICghZW1pdHRlci5fZXZlbnRzIHx8ICFlbWl0dGVyLl9ldmVudHNbdHlwZV0pXG4gICAgcmV0ID0gMDtcbiAgZWxzZSBpZiAoaXNGdW5jdGlvbihlbWl0dGVyLl9ldmVudHNbdHlwZV0pKVxuICAgIHJldCA9IDE7XG4gIGVsc2VcbiAgICByZXQgPSBlbWl0dGVyLl9ldmVudHNbdHlwZV0ubGVuZ3RoO1xuICByZXR1cm4gcmV0O1xufTtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGlzTnVtYmVyKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ251bWJlcic7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gdm9pZCAwO1xufVxuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjguMFxuXG4vKipcblx0QG1vZHVsZSBLZXlwYWRcblx0QGF1dGhvciBtdWNod2ViXG4gKi9cblxuKGZ1bmN0aW9uKCkge1xuICAndXNlIHN0cmljdCc7XG4gIHZhciBFdmVudEVtaXR0ZXIsXG4gICAgX19oYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHksXG4gICAgX19leHRlbmRzID0gZnVuY3Rpb24oY2hpbGQsIHBhcmVudCkgeyBmb3IgKHZhciBrZXkgaW4gcGFyZW50KSB7IGlmIChfX2hhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH07XG5cbiAgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xuXG4gIGV4cG9ydHMuS2V5cGFkID0gKGZ1bmN0aW9uKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhfQ2xhc3MsIF9zdXBlcik7XG5cblxuICAgIC8qKlxuICAgIFx0XHROYW1lIG9mIHNlbGVjdGVkIG1hcFxuICAgIFx0XHRAcHJvcGVydHkgbWFwX25hbWVcbiAgICBcdFx0QHR5cGUgU3RyaW5nXG4gICAgXHRcdEBkZWZhdWx0ICdub2tpYSdcbiAgICAgKi9cblxuICAgIF9DbGFzcy5wcm90b3R5cGUubWFwX25hbWUgPSAnbm9raWEnO1xuXG5cbiAgICAvKipcbiAgICBcdFx0RnVsbCB0eXBlZCBpbiB0ZXh0XG4gICAgXHRcdEBwcm9wZXJ0eSB0ZXh0XG4gICAgXHRcdEB0eXBlIFN0cmluZ1xuICAgIFx0XHRAZGVmYXVsdCAnJ1xuICAgICAqL1xuXG4gICAgX0NsYXNzLnByb3RvdHlwZS50ZXh0ID0gJyc7XG5cblxuICAgIC8qKlxuICAgIFx0XHRDaGFyYWN0ZXIgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgdHlwZWRcbiAgICBcdFx0QHByb3BlcnR5IGNoYXJhY3RlclxuICAgIFx0XHRAdHlwZSBTdHJpbmdcbiAgICBcdFx0QGRlZmF1bHQgbnVsbFxuICAgICAqL1xuXG4gICAgX0NsYXNzLnByb3RvdHlwZS5jaGFyYWN0ZXIgPSBudWxsO1xuXG5cbiAgICAvKipcbiAgICBcdFx0Q3VycmVudGx5IHVzZWQgbWFwcGluZ1xuICAgIFx0XHRAcHJvcGVydHkgbWFwcGluZ1xuICAgIFx0XHRAdHlwZSBPYmplY3RcbiAgICBcdFx0QGRlZmF1bHQgbnVsbFxuICAgICAqL1xuXG4gICAgX0NsYXNzLnByb3RvdHlwZS5tYXBwaW5nID0gbnVsbDtcblxuXG4gICAgLyoqXG4gICAgXHRcdFRpbWVvdXQgdGhhdCBpcyB1c2VkIHRvIGludGVycnVwdCB0eXBpbmdcbiAgICBcdFx0QHByb3BlcnR5IHRpbWVvdXRcbiAgICBcdFx0QHR5cGUgT2JqZWN0XG4gICAgXHRcdEBkZWZhdWx0IG51bGxcbiAgICAgKi9cblxuICAgIF9DbGFzcy5wcm90b3R5cGUudGltZW91dCA9IG51bGw7XG5cblxuICAgIC8qKlxuICAgIFx0XHREZWxheSBmb3IgdHlwaW5nIHRpbWVvdXRcbiAgICBcdFx0QHByb3BlcnR5IGRlbGF5XG4gICAgXHRcdEB0eXBlIE51bWJlclxuICAgIFx0XHRAZGVmYXVsdCAxMDBcbiAgICAgKi9cblxuICAgIF9DbGFzcy5wcm90b3R5cGUuZGVsYXkgPSAxMDA7XG5cblxuICAgIC8qKlxuICAgIFx0XHRMaXN0IG9mIGF2YWlsYWJsZSBjYXNlc1xuICAgIFx0XHRAc3RhdGljXG4gICAgXHRcdEBwcm9wZXJ0eSBjYXNlbGlzdFxuICAgIFx0XHRAdHlwZSBPYmplY3RcbiAgICAgKi9cblxuICAgIF9DbGFzcy5jYXNlbGlzdCA9IFsnQWJjJywgJ2FiYycsICdBQkMnLCAnMTIzJ107XG5cblxuICAgIC8qKlxuICAgIFx0XHRVcHBlcmNhc2Ugb2YgbG93ZXJjYXNlXG4gICAgXHRcdEBwcm9wZXJ0eSBjYXNlXG4gICAgXHRcdEB0eXBlIFN0cmluZ1xuICAgIFx0XHRAZGVmYXVsdCAnQWJjJ1xuICAgICAqL1xuXG4gICAgX0NsYXNzLnByb3RvdHlwZVtcImNhc2VcIl0gPSBudWxsO1xuXG5cbiAgICAvKipcbiAgICBcdFx0Q2hhcmFjdGVycyB0aGF0IGludGVycnVwdCBhIHNlbnRlbmNlXG4gICAgXHRcdEBwcm9wZXJ0eSBpbnRlcnJ1cHRfY2FzZVxuICAgIFx0XHRAdHlwZSBTdHJpbmdcbiAgICBcdFx0QGRlZmF1bHQgJy5cXG4nXG4gICAgICovXG5cbiAgICBfQ2xhc3MucHJvdG90eXBlLmludGVycnVwdF9jYXNlID0gJy5cXG4nO1xuXG5cbiAgICAvKipcbiAgICBcdFx0MTIta2V5IGtleWJvYXJkIGxheW91dCBlbXVsYXRpb24sIHNpbWlsYXIgdG8gb25lIHRoYXQgaXMgdXNlZCBpbiBtb2JpbGUgcGhvbmVzXG4gICAgXHRcdEBjbGFzcyBLZXlwYWRcbiAgICBcdFx0QGV4dGVuZHMgRXZlbnRFbWl0dGVyXG4gICAgXHRcdEBwYXJhbSB7W09iamVjdF19IG9wdGlvbnMgT3ZlcndyaXRlIGRlZmF1bHQgYEtleXBhZGAgb3B0aW9uc1xuICAgICAqL1xuXG4gICAgZnVuY3Rpb24gX0NsYXNzKG9wdGlvbnMpIHtcbiAgICAgIHZhciBLZXlNYXAsIGtleSwgdmFsO1xuICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkge1xuICAgICAgICBvcHRpb25zID0ge307XG4gICAgICB9XG4gICAgICBmb3IgKGtleSBpbiBvcHRpb25zKSB7XG4gICAgICAgIHZhbCA9IG9wdGlvbnNba2V5XTtcbiAgICAgICAgdGhpc1trZXldID0gdmFsO1xuICAgICAgfVxuICAgICAgS2V5TWFwID0gcmVxdWlyZShcIi4vTWFwXCIgKyAodGhpcy5tYXBfbmFtZVswXS50b1VwcGVyQ2FzZSgpKSArICh0aGlzLm1hcF9uYW1lLnNsaWNlKDEpKSArIFwiLmpzXCIpLktleU1hcDtcbiAgICAgIHRoaXMubWFwcGluZyA9IEtleU1hcDtcbiAgICAgIHRoaXNbXCJjYXNlXCJdID0gZXhwb3J0cy5LZXlwYWQuY2FzZWxpc3RbMF07XG4gICAgICB0aGlzLm9uKCdwdXNoJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuUHJvY2Vzc0tleShrZXkpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgXHRcdFByb2Nlc3MgYSBrZXlwcmVzc1xuICAgIFx0XHRAbWV0aG9kIFByb2Nlc3NLZXlcbiAgICBcdFx0QHBhcmFtIHtTdHJpbmd9IGtleSBLZXkgY2hhcmFjdGVyXG4gICAgICovXG5cbiAgICBfQ2xhc3MucHJvdG90eXBlLlByb2Nlc3NLZXkgPSBmdW5jdGlvbihrZXkpIHtcbiAgICAgIHZhciBjdXJyZW50X2luZGV4O1xuICAgICAgaWYgKGtleSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHNwZWNpZnkgcHJlc3NlZCBrZXkgY29kZScpO1xuICAgICAgfVxuICAgICAgaWYgKGtleSA9PT0gJ2MnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLkJhY2tzcGFjZSgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubWFwcGluZ1trZXldID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBrZXkgY29kZSB3YXMgbm90IGZvdW5kIGluIG1hcHBpbmc6ICdcIiArIGtleSArIFwiJ1wiKTtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRfaW5kZXggPSB0aGlzLm1hcHBpbmdba2V5XS5pbmRleE9mKHRoaXMuY2hhcmFjdGVyKTtcbiAgICAgIGlmIChjdXJyZW50X2luZGV4ID49IDApIHtcbiAgICAgICAgdGhpcy5SZXNldFRpbWVvdXQoKTtcbiAgICAgICAgaWYgKHRoaXMubWFwcGluZ1trZXldW2N1cnJlbnRfaW5kZXggKyAxXSAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY2hhcmFjdGVyID0gdGhpcy5tYXBwaW5nW2tleV1bY3VycmVudF9pbmRleCArIDFdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNoYXJhY3RlciA9IHRoaXMubWFwcGluZ1trZXldWzBdO1xuICAgICAgfVxuICAgICAgdGhpcy5JbnNlcnRDaGFyYWN0ZXIodGhpcy5jaGFyYWN0ZXIpO1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSB0aGlzLm1hcHBpbmdba2V5XVswXTtcbiAgICAgIGlmICh0aGlzLmNoYXJhY3RlciA9PT0gJ0NBU0UnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLkxvb3BDYXNlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5SZXNldFRpbWVvdXQoKTtcbiAgICB9O1xuXG5cbiAgICAvKipcbiAgICBcdFx0UmVtb3ZlIGxhc3QgY2hhcmFjdGVyXG4gICAgXHRcdEBtZXRob2QgQmFja3NwYWNlXG4gICAgICovXG5cbiAgICBfQ2xhc3MucHJvdG90eXBlLkJhY2tzcGFjZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBudWxsO1xuICAgICAgaWYgKHRoaXMudGV4dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy50ZXh0ID0gdGhpcy50ZXh0LnNsaWNlKDAsIC0xKTtcbiAgICB9O1xuXG5cbiAgICAvKipcbiAgICBcdFx0TG9vcGluZyB0aHJvdWdoIGF2YWlsYWJsZSBjYXNlc1xuICAgIFx0XHRAbWV0aG9kIExvb3BDYXNlXG4gICAgICovXG5cbiAgICBfQ2xhc3MucHJvdG90eXBlLkxvb3BDYXNlID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgY3VycmVudF9pbmRleDtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gbnVsbDtcbiAgICAgIGN1cnJlbnRfaW5kZXggPSBleHBvcnRzLktleXBhZC5jYXNlbGlzdC5pbmRleE9mKHRoaXNbXCJjYXNlXCJdKTtcbiAgICAgIGlmIChleHBvcnRzLktleXBhZC5jYXNlbGlzdFtjdXJyZW50X2luZGV4ICsgMV0gIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpc1tcImNhc2VcIl0gPSBleHBvcnRzLktleXBhZC5jYXNlbGlzdFtjdXJyZW50X2luZGV4ICsgMV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1tcImNhc2VcIl0gPSBleHBvcnRzLktleXBhZC5jYXNlbGlzdFswXTtcbiAgICB9O1xuXG5cbiAgICAvKipcbiAgICBcdFx0UmV0dXJucyBjaGFyYWN0ZXIgdGhhdCB3aWxsIGJlIGluc2VydGVkLCB3aXRoIGN1cnJlbnQgY2FzZVxuICAgIFx0XHRAbWV0aG9kIEdldEluc2VydENoYXJhY3RlclxuICAgIFx0XHRAcGFyYW0ge1N0cmluZ30gdGV4dCBTZWxlY3RlZCAodHlwZWQpIHN0cmluZ1xuICAgICAqL1xuXG4gICAgX0NsYXNzLnByb3RvdHlwZS5HZXRJbnNlcnRDaGFyYWN0ZXIgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICBpZiAodGV4dCA9PSBudWxsKSB7XG4gICAgICAgIHRleHQgPSB0aGlzLmNoYXJhY3RlcjtcbiAgICAgIH1cbiAgICAgIGlmICh0ZXh0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAodGhpc1tcImNhc2VcIl1bMF0gPT09ICdBJykge1xuICAgICAgICB0ZXh0ID0gdGV4dC50b1VwcGVyQ2FzZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfTtcblxuXG4gICAgLyoqXG4gICAgXHRcdEFwcGx5IHNlbGVjdGVkICh0eXBlZCkgdGV4dFxuICAgIFx0XHRAbWV0aG9kIEluc2VydENoYXJhY3RlclxuICAgIFx0XHRAcGFyYW0ge1N0cmluZ30gdGV4dCBTZWxlY3RlZCAodHlwZWQpIHN0cmluZ1xuICAgICAqL1xuXG4gICAgX0NsYXNzLnByb3RvdHlwZS5JbnNlcnRDaGFyYWN0ZXIgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICB2YXIgaW5zZXJ0ZWQ7XG4gICAgICBpZiAodGV4dCA9PSBudWxsKSB7XG4gICAgICAgIHRleHQgPSB0aGlzLmNoYXJhY3RlcjtcbiAgICAgIH1cbiAgICAgIGlmICh0ZXh0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaW5zZXJ0ZWQgPSB0aGlzLkdldEluc2VydENoYXJhY3RlcigpO1xuICAgICAgdGhpcy50ZXh0ICs9IGluc2VydGVkO1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBudWxsO1xuICAgICAgaWYgKHRoaXNbXCJjYXNlXCJdICE9PSAnQUJDJykge1xuICAgICAgICB0aGlzW1wiY2FzZVwiXSA9ICdhYmMnO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXNbXCJjYXNlXCJdICE9PSAnQUJDJyAmJiAodGhpcy5pbnRlcnJ1cHRfY2FzZS5pbmRleE9mKGluc2VydGVkKSkgPj0gMCkge1xuICAgICAgICByZXR1cm4gdGhpc1tcImNhc2VcIl0gPSAnQWJjJztcbiAgICAgIH1cbiAgICB9O1xuXG5cbiAgICAvKipcbiAgICBcdFx0UmVzZXR0aW5nIHR5cGluZyB0eW1lb3V0XG4gICAgXHRcdEBtZXRob2QgUmVzZXRUaW1lb3V0XG4gICAgICovXG5cbiAgICBfQ2xhc3MucHJvdG90eXBlLlJlc2V0VGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBfdGhpcy5JbnNlcnRDaGFyYWN0ZXIoKTtcbiAgICAgICAgICByZXR1cm4gX3RoaXMudGltZW91dCA9IG51bGw7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSwgdGhpcy5kZWxheSk7XG4gICAgfTtcblxuICAgIHJldHVybiBfQ2xhc3M7XG5cbiAgfSkoRXZlbnRFbWl0dGVyKTtcblxufSkuY2FsbCh0aGlzKTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9S2V5cGFkLmpzLm1hcFxuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjguMFxuXG4vKipcblx0QG1vZHVsZSBLZXlwYWRcblx0QGF1dGhvciBtdWNod2ViXG4gKi9cblxuKGZ1bmN0aW9uKCkge1xuICAndXNlIHN0cmljdCc7XG4gIGV4cG9ydHMuS2V5TWFwID0ge1xuICAgICcxJzogWycuJywgJywnLCAnPycsICchJywgJ1xcJycsICdcIicsICcxJywgJy0nLCAnKCcsICcpJywgJ0AnLCAnLycsICc6JywgJ18nXSxcbiAgICAnMic6IFsnYScsICdiJywgJ2MnLCAnMicsICfDpCcsICfDpicsICfDpScsICfDoCcsICfDoScsICfDoicsICfDoycsICfDpyddLFxuICAgICczJzogWydkJywgJ2UnLCAnZicsICczJywgJ8OoJywgJ8OpJywgJ8OqJywgJ8OwJ10sXG4gICAgJzQnOiBbJ2cnLCAnaCcsICdpJywgJzQnLCAnw6wnLCAnw60nLCAnw64nLCAnw68nXSxcbiAgICAnNSc6IFsnaicsICdrJywgJ2wnLCAnNScsICfCoyddLFxuICAgICc2JzogWydtJywgJ24nLCAnbycsICc2JywgJ8O2JywgJ8O4JywgJ8OyJywgJ8OzJywgJ8O0JywgJ8O1JywgJ8OxJ10sXG4gICAgJzcnOiBbJ3AnLCAncScsICdyJywgJ3MnLCAnNycsICfDnycsICckJ10sXG4gICAgJzgnOiBbJ3QnLCAndScsICd2JywgJzgnLCAnw7knLCAnw7onLCAnw7snLCAnw7wnXSxcbiAgICAnOSc6IFsndycsICd4JywgJ3knLCAneicsICc5JywgJ8O9JywgJ8O+J10sXG4gICAgJyonOiBbXSxcbiAgICAnMCc6IFsnICcsICcwJywgJ1xcbiddLFxuICAgICcjJzogWydDQVNFJ11cbiAgfTtcblxufSkuY2FsbCh0aGlzKTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TWFwTm9raWEuanMubWFwXG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuOC4wXG5cbi8qKlxuXHRAbW9kdWxlIEtleXBhZFxuXHRAYXV0aG9yIG11Y2h3ZWJcbiAqL1xuXG4oZnVuY3Rpb24oKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgS2V5cGFkOiAocmVxdWlyZSgnLi9LZXlwYWQuanMnKSkuS2V5cGFkXG4gIH07XG5cbn0pLmNhbGwodGhpcyk7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1haW4uanMubWFwXG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJsaWIvbWFpbi5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzIiwibm9kZV9tb2R1bGVzL2tleXBhZC9saWIvS2V5cGFkLmpzIiwibm9kZV9tb2R1bGVzL2tleXBhZC9saWIvTWFwTm9raWEuanMiLCJub2RlX21vZHVsZXMva2V5cGFkL2xpYi9tYWluLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN1NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuOC4wXG4oZnVuY3Rpb24oKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgdmFyIEtleXBhZCwgcGFkO1xuXG4gIEtleXBhZCA9IHJlcXVpcmUoJ2tleXBhZCcpLktleXBhZDtcblxuICBwYWQgPSBuZXcgS2V5cGFkKHtcbiAgICBkZWxheTogNTAwLFxuICAgIHRleHQ6ICdIZWxsbyxcXG4nXG4gIH0pO1xuXG4gIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna2V5LTEnKSkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICBjb25zb2xlLmxvZygncHVzaCcsICcxJyk7XG4gICAgcmV0dXJuIHBhZC5lbWl0KCdwdXNoJywgJzEnKTtcbiAgfSk7XG5cbiAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrZXktMicpKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgIGNvbnNvbGUubG9nKCdwdXNoJywgJzInKTtcbiAgICByZXR1cm4gcGFkLmVtaXQoJ3B1c2gnLCAnMicpO1xuICB9KTtcblxuICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2tleS0zJykpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgY29uc29sZS5sb2coJ3B1c2gnLCAnMycpO1xuICAgIHJldHVybiBwYWQuZW1pdCgncHVzaCcsICczJyk7XG4gIH0pO1xuXG4gIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna2V5LTQnKSkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICBjb25zb2xlLmxvZygncHVzaCcsICc0Jyk7XG4gICAgcmV0dXJuIHBhZC5lbWl0KCdwdXNoJywgJzQnKTtcbiAgfSk7XG5cbiAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrZXktNScpKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgIGNvbnNvbGUubG9nKCdwdXNoJywgJzUnKTtcbiAgICByZXR1cm4gcGFkLmVtaXQoJ3B1c2gnLCAnNScpO1xuICB9KTtcblxuICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2tleS02JykpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgY29uc29sZS5sb2coJ3B1c2gnLCAnNicpO1xuICAgIHJldHVybiBwYWQuZW1pdCgncHVzaCcsICc2Jyk7XG4gIH0pO1xuXG4gIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna2V5LTcnKSkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICBjb25zb2xlLmxvZygncHVzaCcsICc3Jyk7XG4gICAgcmV0dXJuIHBhZC5lbWl0KCdwdXNoJywgJzcnKTtcbiAgfSk7XG5cbiAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrZXktOCcpKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgIGNvbnNvbGUubG9nKCdwdXNoJywgJzgnKTtcbiAgICByZXR1cm4gcGFkLmVtaXQoJ3B1c2gnLCAnOCcpO1xuICB9KTtcblxuICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2tleS05JykpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgY29uc29sZS5sb2coJ3B1c2gnLCAnOScpO1xuICAgIHJldHVybiBwYWQuZW1pdCgncHVzaCcsICc5Jyk7XG4gIH0pO1xuXG4gIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna2V5LWEnKSkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICBjb25zb2xlLmxvZygncHVzaCcsICcqJyk7XG4gICAgcmV0dXJuIHBhZC5lbWl0KCdwdXNoJywgJyonKTtcbiAgfSk7XG5cbiAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrZXktMCcpKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgIGNvbnNvbGUubG9nKCdwdXNoJywgJzAnKTtcbiAgICByZXR1cm4gcGFkLmVtaXQoJ3B1c2gnLCAnMCcpO1xuICB9KTtcblxuICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2tleS1iJykpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgY29uc29sZS5sb2coJ3B1c2gnLCAnIycpO1xuICAgIHJldHVybiBwYWQuZW1pdCgncHVzaCcsICcjJyk7XG4gIH0pO1xuXG4gIHNldEludGVydmFsKGZ1bmN0aW9uKCkge1xuICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2NyZWVuLWlubmVyLXRleHQnKSkuaW5uZXJIVE1MID0gcGFkLnRleHQucmVwbGFjZSgnXFxuJywgJzxicj4nKTtcbiAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NjcmVlbi1pbm5lci1jaGFyYWN0ZXInKSkuaW5uZXJIVE1MID0gcGFkLmNoYXJhY3RlcjtcbiAgICByZXR1cm4gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzY3JlZW4taW5uZXItY2FzZScpKS5pbm5lckhUTUwgPSBwYWRbXCJjYXNlXCJdO1xuICB9LCA1MCk7XG5cbn0pLmNhbGwodGhpcyk7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1haW4uanMubWFwXG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICB0aGlzLl9ldmVudHMgPSB0aGlzLl9ldmVudHMgfHwge307XG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcblxuLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC4xMC54XG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7XG5cbi8vIEJ5IGRlZmF1bHQgRXZlbnRFbWl0dGVycyB3aWxsIHByaW50IGEgd2FybmluZyBpZiBtb3JlIHRoYW4gMTAgbGlzdGVuZXJzIGFyZVxuLy8gYWRkZWQgdG8gaXQuIFRoaXMgaXMgYSB1c2VmdWwgZGVmYXVsdCB3aGljaCBoZWxwcyBmaW5kaW5nIG1lbW9yeSBsZWFrcy5cbkV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzID0gMTA7XG5cbi8vIE9idmlvdXNseSBub3QgYWxsIEVtaXR0ZXJzIHNob3VsZCBiZSBsaW1pdGVkIHRvIDEwLiBUaGlzIGZ1bmN0aW9uIGFsbG93c1xuLy8gdGhhdCB0byBiZSBpbmNyZWFzZWQuIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uKG4pIHtcbiAgaWYgKCFpc051bWJlcihuKSB8fCBuIDwgMCB8fCBpc05hTihuKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ24gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgdmFyIGVyLCBoYW5kbGVyLCBsZW4sIGFyZ3MsIGksIGxpc3RlbmVycztcblxuICBpZiAoIXRoaXMuX2V2ZW50cylcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmICh0eXBlID09PSAnZXJyb3InKSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHMuZXJyb3IgfHxcbiAgICAgICAgKGlzT2JqZWN0KHRoaXMuX2V2ZW50cy5lcnJvcikgJiYgIXRoaXMuX2V2ZW50cy5lcnJvci5sZW5ndGgpKSB7XG4gICAgICBlciA9IGFyZ3VtZW50c1sxXTtcbiAgICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgICAgfVxuICAgICAgdGhyb3cgVHlwZUVycm9yKCdVbmNhdWdodCwgdW5zcGVjaWZpZWQgXCJlcnJvclwiIGV2ZW50LicpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZXIgPSB0aGlzLl9ldmVudHNbdHlwZV07XG5cbiAgaWYgKGlzVW5kZWZpbmVkKGhhbmRsZXIpKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAoaXNGdW5jdGlvbihoYW5kbGVyKSkge1xuICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgLy8gZmFzdCBjYXNlc1xuICAgICAgY2FzZSAxOlxuICAgICAgICBoYW5kbGVyLmNhbGwodGhpcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBoYW5kbGVyLmNhbGwodGhpcywgYXJndW1lbnRzWzFdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0sIGFyZ3VtZW50c1syXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gc2xvd2VyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICBhcmdzID0gbmV3IEFycmF5KGxlbiAtIDEpO1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgbGVuOyBpKyspXG4gICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIGhhbmRsZXIuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KGhhbmRsZXIpKSB7XG4gICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBhcmdzID0gbmV3IEFycmF5KGxlbiAtIDEpO1xuICAgIGZvciAoaSA9IDE7IGkgPCBsZW47IGkrKylcbiAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuXG4gICAgbGlzdGVuZXJzID0gaGFuZGxlci5zbGljZSgpO1xuICAgIGxlbiA9IGxpc3RlbmVycy5sZW5ndGg7XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgICAgbGlzdGVuZXJzW2ldLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHtcbiAgdmFyIG07XG5cbiAgaWYgKCFpc0Z1bmN0aW9uKGxpc3RlbmVyKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKVxuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuXG4gIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gIC8vIGFkZGluZyBpdCB0byB0aGUgbGlzdGVuZXJzLCBmaXJzdCBlbWl0IFwibmV3TGlzdGVuZXJcIi5cbiAgaWYgKHRoaXMuX2V2ZW50cy5uZXdMaXN0ZW5lcilcbiAgICB0aGlzLmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSxcbiAgICAgICAgICAgICAgaXNGdW5jdGlvbihsaXN0ZW5lci5saXN0ZW5lcikgP1xuICAgICAgICAgICAgICBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICBpZiAoIXRoaXMuX2V2ZW50c1t0eXBlXSlcbiAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cbiAgICB0aGlzLl9ldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgZWxzZSBpZiAoaXNPYmplY3QodGhpcy5fZXZlbnRzW3R5cGVdKSlcbiAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgdGhpcy5fZXZlbnRzW3R5cGVdLnB1c2gobGlzdGVuZXIpO1xuICBlbHNlXG4gICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgdGhpcy5fZXZlbnRzW3R5cGVdID0gW3RoaXMuX2V2ZW50c1t0eXBlXSwgbGlzdGVuZXJdO1xuXG4gIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gIGlmIChpc09iamVjdCh0aGlzLl9ldmVudHNbdHlwZV0pICYmICF0aGlzLl9ldmVudHNbdHlwZV0ud2FybmVkKSB7XG4gICAgdmFyIG07XG4gICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLl9tYXhMaXN0ZW5lcnMpKSB7XG4gICAgICBtID0gdGhpcy5fbWF4TGlzdGVuZXJzO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gICAgfVxuXG4gICAgaWYgKG0gJiYgbSA+IDAgJiYgdGhpcy5fZXZlbnRzW3R5cGVdLmxlbmd0aCA+IG0pIHtcbiAgICAgIHRoaXMuX2V2ZW50c1t0eXBlXS53YXJuZWQgPSB0cnVlO1xuICAgICAgY29uc29sZS5lcnJvcignKG5vZGUpIHdhcm5pbmc6IHBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgJyArXG4gICAgICAgICAgICAgICAgICAgICdsZWFrIGRldGVjdGVkLiAlZCBsaXN0ZW5lcnMgYWRkZWQuICcgK1xuICAgICAgICAgICAgICAgICAgICAnVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQuJyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzW3R5cGVdLmxlbmd0aCk7XG4gICAgICBpZiAodHlwZW9mIGNvbnNvbGUudHJhY2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gbm90IHN1cHBvcnRlZCBpbiBJRSAxMFxuICAgICAgICBjb25zb2xlLnRyYWNlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHtcbiAgaWYgKCFpc0Z1bmN0aW9uKGxpc3RlbmVyKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXG4gIHZhciBmaXJlZCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGcoKSB7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBnKTtcblxuICAgIGlmICghZmlyZWQpIHtcbiAgICAgIGZpcmVkID0gdHJ1ZTtcbiAgICAgIGxpc3RlbmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9XG5cbiAgZy5saXN0ZW5lciA9IGxpc3RlbmVyO1xuICB0aGlzLm9uKHR5cGUsIGcpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZW1pdHMgYSAncmVtb3ZlTGlzdGVuZXInIGV2ZW50IGlmZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWRcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgbGlzdCwgcG9zaXRpb24sIGxlbmd0aCwgaTtcblxuICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKVxuICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1t0eXBlXSlcbiAgICByZXR1cm4gdGhpcztcblxuICBsaXN0ID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xuICBsZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgcG9zaXRpb24gPSAtMTtcblxuICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHxcbiAgICAgIChpc0Z1bmN0aW9uKGxpc3QubGlzdGVuZXIpICYmIGxpc3QubGlzdGVuZXIgPT09IGxpc3RlbmVyKSkge1xuICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG4gICAgaWYgKHRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcilcbiAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0ZW5lcik7XG5cbiAgfSBlbHNlIGlmIChpc09iamVjdChsaXN0KSkge1xuICAgIGZvciAoaSA9IGxlbmd0aDsgaS0tID4gMDspIHtcbiAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fFxuICAgICAgICAgIChsaXN0W2ldLmxpc3RlbmVyICYmIGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSkge1xuICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwb3NpdGlvbiA8IDApXG4gICAgICByZXR1cm4gdGhpcztcblxuICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgbGlzdC5sZW5ndGggPSAwO1xuICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGlzdC5zcGxpY2UocG9zaXRpb24sIDEpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdGVuZXIpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgdmFyIGtleSwgbGlzdGVuZXJzO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcbiAgaWYgKCF0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuICAgIGVsc2UgaWYgKHRoaXMuX2V2ZW50c1t0eXBlXSlcbiAgICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICBmb3IgKGtleSBpbiB0aGlzLl9ldmVudHMpIHtcbiAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtcbiAgICB9XG4gICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgdGhpcy5fZXZlbnRzID0ge307XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbdHlwZV07XG5cbiAgaWYgKGlzRnVuY3Rpb24obGlzdGVuZXJzKSkge1xuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBMSUZPIG9yZGVyXG4gICAgd2hpbGUgKGxpc3RlbmVycy5sZW5ndGgpXG4gICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyc1tsaXN0ZW5lcnMubGVuZ3RoIC0gMV0pO1xuICB9XG4gIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgdmFyIHJldDtcbiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1t0eXBlXSlcbiAgICByZXQgPSBbXTtcbiAgZWxzZSBpZiAoaXNGdW5jdGlvbih0aGlzLl9ldmVudHNbdHlwZV0pKVxuICAgIHJldCA9IFt0aGlzLl9ldmVudHNbdHlwZV1dO1xuICBlbHNlXG4gICAgcmV0ID0gdGhpcy5fZXZlbnRzW3R5cGVdLnNsaWNlKCk7XG4gIHJldHVybiByZXQ7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgdmFyIHJldDtcbiAgaWYgKCFlbWl0dGVyLl9ldmVudHMgfHwgIWVtaXR0ZXIuX2V2ZW50c1t0eXBlXSlcbiAgICByZXQgPSAwO1xuICBlbHNlIGlmIChpc0Z1bmN0aW9uKGVtaXR0ZXIuX2V2ZW50c1t0eXBlXSkpXG4gICAgcmV0ID0gMTtcbiAgZWxzZVxuICAgIHJldCA9IGVtaXR0ZXIuX2V2ZW50c1t0eXBlXS5sZW5ndGg7XG4gIHJldHVybiByZXQ7XG59O1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09PSB2b2lkIDA7XG59XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuOC4wXG5cbi8qKlxuXHRAbW9kdWxlIEtleXBhZFxuXHRAYXV0aG9yIG11Y2h3ZWJcbiAqL1xuXG4oZnVuY3Rpb24oKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgdmFyIEV2ZW50RW1pdHRlcixcbiAgICBfX2hhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eSxcbiAgICBfX2V4dGVuZHMgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKF9faGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfTtcblxuICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG5cbiAgZXhwb3J0cy5LZXlwYWQgPSAoZnVuY3Rpb24oX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKF9DbGFzcywgX3N1cGVyKTtcblxuXG4gICAgLyoqXG4gICAgXHRcdE5hbWUgb2Ygc2VsZWN0ZWQgbWFwXG4gICAgXHRcdEBwcm9wZXJ0eSBtYXBfbmFtZVxuICAgIFx0XHRAdHlwZSBTdHJpbmdcbiAgICBcdFx0QGRlZmF1bHQgJ25va2lhJ1xuICAgICAqL1xuXG4gICAgX0NsYXNzLnByb3RvdHlwZS5tYXBfbmFtZSA9ICdub2tpYSc7XG5cblxuICAgIC8qKlxuICAgIFx0XHRGdWxsIHR5cGVkIGluIHRleHRcbiAgICBcdFx0QHByb3BlcnR5IHRleHRcbiAgICBcdFx0QHR5cGUgU3RyaW5nXG4gICAgXHRcdEBkZWZhdWx0ICcnXG4gICAgICovXG5cbiAgICBfQ2xhc3MucHJvdG90eXBlLnRleHQgPSAnJztcblxuXG4gICAgLyoqXG4gICAgXHRcdENoYXJhY3RlciB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyB0eXBlZFxuICAgIFx0XHRAcHJvcGVydHkgY2hhcmFjdGVyXG4gICAgXHRcdEB0eXBlIFN0cmluZ1xuICAgIFx0XHRAZGVmYXVsdCBudWxsXG4gICAgICovXG5cbiAgICBfQ2xhc3MucHJvdG90eXBlLmNoYXJhY3RlciA9IG51bGw7XG5cblxuICAgIC8qKlxuICAgIFx0XHRDdXJyZW50bHkgdXNlZCBtYXBwaW5nXG4gICAgXHRcdEBwcm9wZXJ0eSBtYXBwaW5nXG4gICAgXHRcdEB0eXBlIE9iamVjdFxuICAgIFx0XHRAZGVmYXVsdCBudWxsXG4gICAgICovXG5cbiAgICBfQ2xhc3MucHJvdG90eXBlLm1hcHBpbmcgPSBudWxsO1xuXG5cbiAgICAvKipcbiAgICBcdFx0VGltZW91dCB0aGF0IGlzIHVzZWQgdG8gaW50ZXJydXB0IHR5cGluZ1xuICAgIFx0XHRAcHJvcGVydHkgdGltZW91dFxuICAgIFx0XHRAdHlwZSBPYmplY3RcbiAgICBcdFx0QGRlZmF1bHQgbnVsbFxuICAgICAqL1xuXG4gICAgX0NsYXNzLnByb3RvdHlwZS50aW1lb3V0ID0gbnVsbDtcblxuXG4gICAgLyoqXG4gICAgXHRcdERlbGF5IGZvciB0eXBpbmcgdGltZW91dFxuICAgIFx0XHRAcHJvcGVydHkgZGVsYXlcbiAgICBcdFx0QHR5cGUgTnVtYmVyXG4gICAgXHRcdEBkZWZhdWx0IDEwMFxuICAgICAqL1xuXG4gICAgX0NsYXNzLnByb3RvdHlwZS5kZWxheSA9IDEwMDtcblxuXG4gICAgLyoqXG4gICAgXHRcdExpc3Qgb2YgYXZhaWxhYmxlIGNhc2VzXG4gICAgXHRcdEBzdGF0aWNcbiAgICBcdFx0QHByb3BlcnR5IGNhc2VsaXN0XG4gICAgXHRcdEB0eXBlIE9iamVjdFxuICAgICAqL1xuXG4gICAgX0NsYXNzLmNhc2VsaXN0ID0gWydBYmMnLCAnYWJjJywgJ0FCQycsICcxMjMnXTtcblxuXG4gICAgLyoqXG4gICAgXHRcdFVwcGVyY2FzZSBvZiBsb3dlcmNhc2VcbiAgICBcdFx0QHByb3BlcnR5IGNhc2VcbiAgICBcdFx0QHR5cGUgU3RyaW5nXG4gICAgXHRcdEBkZWZhdWx0ICdBYmMnXG4gICAgICovXG5cbiAgICBfQ2xhc3MucHJvdG90eXBlW1wiY2FzZVwiXSA9IG51bGw7XG5cblxuICAgIC8qKlxuICAgIFx0XHRDaGFyYWN0ZXJzIHRoYXQgaW50ZXJydXB0IGEgc2VudGVuY2VcbiAgICBcdFx0QHByb3BlcnR5IGludGVycnVwdF9jYXNlXG4gICAgXHRcdEB0eXBlIFN0cmluZ1xuICAgIFx0XHRAZGVmYXVsdCAnLlxcbidcbiAgICAgKi9cblxuICAgIF9DbGFzcy5wcm90b3R5cGUuaW50ZXJydXB0X2Nhc2UgPSAnLlxcbic7XG5cblxuICAgIC8qKlxuICAgIFx0XHQxMi1rZXkga2V5Ym9hcmQgbGF5b3V0IGVtdWxhdGlvbiwgc2ltaWxhciB0byBvbmUgdGhhdCBpcyB1c2VkIGluIG1vYmlsZSBwaG9uZXNcbiAgICBcdFx0QGNsYXNzIEtleXBhZFxuICAgIFx0XHRAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAgICBcdFx0QHBhcmFtIHtbT2JqZWN0XX0gb3B0aW9ucyBPdmVyd3JpdGUgZGVmYXVsdCBgS2V5cGFkYCBvcHRpb25zXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBfQ2xhc3Mob3B0aW9ucykge1xuICAgICAgdmFyIEtleU1hcCwga2V5LCB2YWw7XG4gICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgIH1cbiAgICAgIGZvciAoa2V5IGluIG9wdGlvbnMpIHtcbiAgICAgICAgdmFsID0gb3B0aW9uc1trZXldO1xuICAgICAgICB0aGlzW2tleV0gPSB2YWw7XG4gICAgICB9XG4gICAgICBpZiAoKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93ICE9PSBudWxsKSAmJiB0aGlzLm1hcF9uYW1lICE9PSAnbm9raWEnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ3VzdG9tIG1hcHMgY2Fubm90IGJlIHNlbGVjdGVkIGluIGJyb3dzZXIgZGVtbycpO1xuICAgICAgfVxuICAgICAgS2V5TWFwID0gcmVxdWlyZSgnLi9NYXBOb2tpYS5qcycpLktleU1hcDtcbiAgICAgIHRoaXMubWFwcGluZyA9IEtleU1hcDtcbiAgICAgIHRoaXNbXCJjYXNlXCJdID0gZXhwb3J0cy5LZXlwYWQuY2FzZWxpc3RbMF07XG4gICAgICB0aGlzLm9uKCdwdXNoJywgKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuUHJvY2Vzc0tleShrZXkpO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgXHRcdFByb2Nlc3MgYSBrZXlwcmVzc1xuICAgIFx0XHRAbWV0aG9kIFByb2Nlc3NLZXlcbiAgICBcdFx0QHBhcmFtIHtTdHJpbmd9IGtleSBLZXkgY2hhcmFjdGVyXG4gICAgICovXG5cbiAgICBfQ2xhc3MucHJvdG90eXBlLlByb2Nlc3NLZXkgPSBmdW5jdGlvbihrZXkpIHtcbiAgICAgIHZhciBjdXJyZW50X2luZGV4O1xuICAgICAgaWYgKGtleSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHNwZWNpZnkgcHJlc3NlZCBrZXkgY29kZScpO1xuICAgICAgfVxuICAgICAgaWYgKGtleSA9PT0gJ2MnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLkJhY2tzcGFjZSgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubWFwcGluZ1trZXldID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBrZXkgY29kZSB3YXMgbm90IGZvdW5kIGluIG1hcHBpbmc6ICdcIiArIGtleSArIFwiJ1wiKTtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRfaW5kZXggPSB0aGlzLm1hcHBpbmdba2V5XS5pbmRleE9mKHRoaXMuY2hhcmFjdGVyKTtcbiAgICAgIGlmIChjdXJyZW50X2luZGV4ID49IDApIHtcbiAgICAgICAgdGhpcy5SZXNldFRpbWVvdXQoKTtcbiAgICAgICAgaWYgKHRoaXMubWFwcGluZ1trZXldW2N1cnJlbnRfaW5kZXggKyAxXSAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY2hhcmFjdGVyID0gdGhpcy5tYXBwaW5nW2tleV1bY3VycmVudF9pbmRleCArIDFdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNoYXJhY3RlciA9IHRoaXMubWFwcGluZ1trZXldWzBdO1xuICAgICAgfVxuICAgICAgdGhpcy5JbnNlcnRDaGFyYWN0ZXIodGhpcy5jaGFyYWN0ZXIpO1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSB0aGlzLm1hcHBpbmdba2V5XVswXTtcbiAgICAgIGlmICh0aGlzLmNoYXJhY3RlciA9PT0gJ0NBU0UnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLkxvb3BDYXNlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5SZXNldFRpbWVvdXQoKTtcbiAgICB9O1xuXG5cbiAgICAvKipcbiAgICBcdFx0UmVtb3ZlIGxhc3QgY2hhcmFjdGVyXG4gICAgXHRcdEBtZXRob2QgQmFja3NwYWNlXG4gICAgICovXG5cbiAgICBfQ2xhc3MucHJvdG90eXBlLkJhY2tzcGFjZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBudWxsO1xuICAgICAgaWYgKHRoaXMudGV4dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy50ZXh0ID0gdGhpcy50ZXh0LnNsaWNlKDAsIC0xKTtcbiAgICB9O1xuXG5cbiAgICAvKipcbiAgICBcdFx0TG9vcGluZyB0aHJvdWdoIGF2YWlsYWJsZSBjYXNlc1xuICAgIFx0XHRAbWV0aG9kIExvb3BDYXNlXG4gICAgICovXG5cbiAgICBfQ2xhc3MucHJvdG90eXBlLkxvb3BDYXNlID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgY3VycmVudF9pbmRleDtcbiAgICAgIHRoaXMuY2hhcmFjdGVyID0gbnVsbDtcbiAgICAgIGN1cnJlbnRfaW5kZXggPSBleHBvcnRzLktleXBhZC5jYXNlbGlzdC5pbmRleE9mKHRoaXNbXCJjYXNlXCJdKTtcbiAgICAgIGlmIChleHBvcnRzLktleXBhZC5jYXNlbGlzdFtjdXJyZW50X2luZGV4ICsgMV0gIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpc1tcImNhc2VcIl0gPSBleHBvcnRzLktleXBhZC5jYXNlbGlzdFtjdXJyZW50X2luZGV4ICsgMV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1tcImNhc2VcIl0gPSBleHBvcnRzLktleXBhZC5jYXNlbGlzdFswXTtcbiAgICB9O1xuXG5cbiAgICAvKipcbiAgICBcdFx0UmV0dXJucyBjaGFyYWN0ZXIgdGhhdCB3aWxsIGJlIGluc2VydGVkLCB3aXRoIGN1cnJlbnQgY2FzZVxuICAgIFx0XHRAbWV0aG9kIEdldEluc2VydENoYXJhY3RlclxuICAgIFx0XHRAcGFyYW0ge1N0cmluZ30gdGV4dCBTZWxlY3RlZCAodHlwZWQpIHN0cmluZ1xuICAgICAqL1xuXG4gICAgX0NsYXNzLnByb3RvdHlwZS5HZXRJbnNlcnRDaGFyYWN0ZXIgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICBpZiAodGV4dCA9PSBudWxsKSB7XG4gICAgICAgIHRleHQgPSB0aGlzLmNoYXJhY3RlcjtcbiAgICAgIH1cbiAgICAgIGlmICh0ZXh0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAodGhpc1tcImNhc2VcIl1bMF0gPT09ICdBJykge1xuICAgICAgICB0ZXh0ID0gdGV4dC50b1VwcGVyQ2FzZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfTtcblxuXG4gICAgLyoqXG4gICAgXHRcdEFwcGx5IHNlbGVjdGVkICh0eXBlZCkgdGV4dFxuICAgIFx0XHRAbWV0aG9kIEluc2VydENoYXJhY3RlclxuICAgIFx0XHRAcGFyYW0ge1N0cmluZ30gdGV4dCBTZWxlY3RlZCAodHlwZWQpIHN0cmluZ1xuICAgICAqL1xuXG4gICAgX0NsYXNzLnByb3RvdHlwZS5JbnNlcnRDaGFyYWN0ZXIgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICB2YXIgaW5zZXJ0ZWQ7XG4gICAgICBpZiAodGV4dCA9PSBudWxsKSB7XG4gICAgICAgIHRleHQgPSB0aGlzLmNoYXJhY3RlcjtcbiAgICAgIH1cbiAgICAgIGlmICh0ZXh0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaW5zZXJ0ZWQgPSB0aGlzLkdldEluc2VydENoYXJhY3RlcigpO1xuICAgICAgdGhpcy50ZXh0ICs9IGluc2VydGVkO1xuICAgICAgdGhpcy5jaGFyYWN0ZXIgPSBudWxsO1xuICAgICAgaWYgKHRoaXNbXCJjYXNlXCJdICE9PSAnQUJDJykge1xuICAgICAgICB0aGlzW1wiY2FzZVwiXSA9ICdhYmMnO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXNbXCJjYXNlXCJdICE9PSAnQUJDJyAmJiAodGhpcy5pbnRlcnJ1cHRfY2FzZS5pbmRleE9mKGluc2VydGVkKSkgPj0gMCkge1xuICAgICAgICByZXR1cm4gdGhpc1tcImNhc2VcIl0gPSAnQWJjJztcbiAgICAgIH1cbiAgICB9O1xuXG5cbiAgICAvKipcbiAgICBcdFx0UmVzZXR0aW5nIHR5cGluZyB0eW1lb3V0XG4gICAgXHRcdEBtZXRob2QgUmVzZXRUaW1lb3V0XG4gICAgICovXG5cbiAgICBfQ2xhc3MucHJvdG90eXBlLlJlc2V0VGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBfdGhpcy5JbnNlcnRDaGFyYWN0ZXIoKTtcbiAgICAgICAgICByZXR1cm4gX3RoaXMudGltZW91dCA9IG51bGw7XG4gICAgICAgIH07XG4gICAgICB9KSh0aGlzKSwgdGhpcy5kZWxheSk7XG4gICAgfTtcblxuICAgIHJldHVybiBfQ2xhc3M7XG5cbiAgfSkoRXZlbnRFbWl0dGVyKTtcblxufSkuY2FsbCh0aGlzKTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9S2V5cGFkLmpzLm1hcFxuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjguMFxuXG4vKipcblx0QG1vZHVsZSBLZXlwYWRcblx0QGF1dGhvciBtdWNod2ViXG4gKi9cblxuKGZ1bmN0aW9uKCkge1xuICAndXNlIHN0cmljdCc7XG4gIGV4cG9ydHMuS2V5TWFwID0ge1xuICAgICcxJzogWycuJywgJywnLCAnPycsICchJywgJ1xcJycsICdcIicsICcxJywgJy0nLCAnKCcsICcpJywgJ0AnLCAnLycsICc6JywgJ18nXSxcbiAgICAnMic6IFsnYScsICdiJywgJ2MnLCAnMicsICfDpCcsICfDpicsICfDpScsICfDoCcsICfDoScsICfDoicsICfDoycsICfDpyddLFxuICAgICczJzogWydkJywgJ2UnLCAnZicsICczJywgJ8OoJywgJ8OpJywgJ8OqJywgJ8OwJ10sXG4gICAgJzQnOiBbJ2cnLCAnaCcsICdpJywgJzQnLCAnw6wnLCAnw60nLCAnw64nLCAnw68nXSxcbiAgICAnNSc6IFsnaicsICdrJywgJ2wnLCAnNScsICfCoyddLFxuICAgICc2JzogWydtJywgJ24nLCAnbycsICc2JywgJ8O2JywgJ8O4JywgJ8OyJywgJ8OzJywgJ8O0JywgJ8O1JywgJ8OxJ10sXG4gICAgJzcnOiBbJ3AnLCAncScsICdyJywgJ3MnLCAnNycsICfDnycsICckJ10sXG4gICAgJzgnOiBbJ3QnLCAndScsICd2JywgJzgnLCAnw7knLCAnw7onLCAnw7snLCAnw7wnXSxcbiAgICAnOSc6IFsndycsICd4JywgJ3knLCAneicsICc5JywgJ8O9JywgJ8O+J10sXG4gICAgJyonOiBbXSxcbiAgICAnMCc6IFsnICcsICcwJywgJ1xcbiddLFxuICAgICcjJzogWydDQVNFJ11cbiAgfTtcblxufSkuY2FsbCh0aGlzKTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TWFwTm9raWEuanMubWFwXG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuOC4wXG5cbi8qKlxuXHRAbW9kdWxlIEtleXBhZFxuXHRAYXV0aG9yIG11Y2h3ZWJcbiAqL1xuXG4oZnVuY3Rpb24oKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgS2V5cGFkOiAocmVxdWlyZSgnLi9LZXlwYWQuanMnKSkuS2V5cGFkXG4gIH07XG5cbn0pLmNhbGwodGhpcyk7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1haW4uanMubWFwXG4iXX0=

@@ -74,6 +74,6 @@ // Generated by CoffeeScript 1.8.0

@type Number
@default 100
@default 500
*/
_Class.prototype.delay = 100;
_Class.prototype.delay = 500;

@@ -168,6 +168,6 @@

this.character = this.mapping[key][0];
this.ResetTimeout();
if (this.character === 'CASE') {
return this.LoopCase();
}
return this.ResetTimeout();
};

@@ -182,3 +182,3 @@

_Class.prototype.Backspace = function() {
this.character = null;
this.ClearKeys();
if (this.text.length === 0) {

@@ -198,3 +198,3 @@ return null;

var current_index;
this.character = null;
this.ClearKeys();
current_index = exports.Keypad.caselist.indexOf(this["case"]);

@@ -244,3 +244,3 @@ if (exports.Keypad.caselist[current_index + 1] != null) {

this.text += inserted;
this.character = null;
this.ClearKeys();
if (this["case"] !== 'ABC') {

@@ -256,2 +256,15 @@ this["case"] = 'abc';

/**
Resetting current typing state
@method ClearKeys
*/
_Class.prototype.ClearKeys = function() {
this.character = null;
if (this.timeout != null) {
return clearTimeout(this.timeout);
}
};
/**
Resetting typing tymeout

@@ -262,2 +275,5 @@ @method ResetTimeout

_Class.prototype.ResetTimeout = function() {
if (this.timeout != null) {
clearTimeout(this.timeout);
}
return this.timeout = setTimeout((function(_this) {

@@ -264,0 +280,0 @@ return function() {

{
"name": "keypad",
"description": "12-key keyboard layout emulation, similar to one that is used in mobile phones",
"version": "0.2.1",
"version": "0.3.0",
"repository": "https://github.com/muchweb/keypad",

@@ -6,0 +6,0 @@ "license": "GPL-3.0+",

@@ -22,3 +22,3 @@ # Keypad [![Build Status](https://travis-ci.org/muchweb/keypad.svg)](https://travis-ci.org/muchweb/keypad) [![NPM version](https://badge.fury.io/js/keypad.svg)](http://badge.fury.io/js/keypad) ![License: GPLv3+](http://img.shields.io/badge/license-GPLv3%2B-brightgreen.svg)

pad = new Keypad({
delay: 100,
delay: 500,
layout: 'nokia',

@@ -25,0 +25,0 @@ });

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc