snabberb 0.4.2 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/.rubocop.yml +9 -4
- data/README.md +1 -1
- data/build.js +22 -0
- data/examples/rack/Gemfile.lock +4 -4
- data/examples/roda/Gemfile.lock +10 -10
- data/lib/snabberb.rb +3 -3
- data/lib/snabberb/version.rb +1 -1
- data/opal/snabberb.rb +1 -9
- data/opal/snabberb/component.rb +196 -6
- data/opal/vendor/snabbdom.js +989 -422
- data/snabberb.gemspec +2 -3
- metadata +10 -30
- data/opal/vendor/snabbdom-attributes.js +0 -71
- data/opal/vendor/snabbdom-class.js +0 -29
- data/opal/vendor/snabbdom-eventlisteners.js +0 -99
- data/opal/vendor/snabbdom-props.js +0 -30
- data/opal/vendor/snabbdom-style.js +0 -90
- data/opal/vendor/snabbdom-to-html.js +0 -4960
- data/opal/vendor/tovnode.js +0 -126
    
        data/opal/vendor/tovnode.js
    DELETED
    
    | @@ -1,126 +0,0 @@ | |
| 1 | 
            -
            (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.tovnode = f()}})(function(){var define,module,exports;return (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){
         | 
| 2 | 
            -
            "use strict";
         | 
| 3 | 
            -
            Object.defineProperty(exports, "__esModule", { value: true });
         | 
| 4 | 
            -
            function createElement(tagName) {
         | 
| 5 | 
            -
                return document.createElement(tagName);
         | 
| 6 | 
            -
            }
         | 
| 7 | 
            -
            function createElementNS(namespaceURI, qualifiedName) {
         | 
| 8 | 
            -
                return document.createElementNS(namespaceURI, qualifiedName);
         | 
| 9 | 
            -
            }
         | 
| 10 | 
            -
            function createTextNode(text) {
         | 
| 11 | 
            -
                return document.createTextNode(text);
         | 
| 12 | 
            -
            }
         | 
| 13 | 
            -
            function createComment(text) {
         | 
| 14 | 
            -
                return document.createComment(text);
         | 
| 15 | 
            -
            }
         | 
| 16 | 
            -
            function insertBefore(parentNode, newNode, referenceNode) {
         | 
| 17 | 
            -
                parentNode.insertBefore(newNode, referenceNode);
         | 
| 18 | 
            -
            }
         | 
| 19 | 
            -
            function removeChild(node, child) {
         | 
| 20 | 
            -
                node.removeChild(child);
         | 
| 21 | 
            -
            }
         | 
| 22 | 
            -
            function appendChild(node, child) {
         | 
| 23 | 
            -
                node.appendChild(child);
         | 
| 24 | 
            -
            }
         | 
| 25 | 
            -
            function parentNode(node) {
         | 
| 26 | 
            -
                return node.parentNode;
         | 
| 27 | 
            -
            }
         | 
| 28 | 
            -
            function nextSibling(node) {
         | 
| 29 | 
            -
                return node.nextSibling;
         | 
| 30 | 
            -
            }
         | 
| 31 | 
            -
            function tagName(elm) {
         | 
| 32 | 
            -
                return elm.tagName;
         | 
| 33 | 
            -
            }
         | 
| 34 | 
            -
            function setTextContent(node, text) {
         | 
| 35 | 
            -
                node.textContent = text;
         | 
| 36 | 
            -
            }
         | 
| 37 | 
            -
            function getTextContent(node) {
         | 
| 38 | 
            -
                return node.textContent;
         | 
| 39 | 
            -
            }
         | 
| 40 | 
            -
            function isElement(node) {
         | 
| 41 | 
            -
                return node.nodeType === 1;
         | 
| 42 | 
            -
            }
         | 
| 43 | 
            -
            function isText(node) {
         | 
| 44 | 
            -
                return node.nodeType === 3;
         | 
| 45 | 
            -
            }
         | 
| 46 | 
            -
            function isComment(node) {
         | 
| 47 | 
            -
                return node.nodeType === 8;
         | 
| 48 | 
            -
            }
         | 
| 49 | 
            -
            exports.htmlDomApi = {
         | 
| 50 | 
            -
                createElement: createElement,
         | 
| 51 | 
            -
                createElementNS: createElementNS,
         | 
| 52 | 
            -
                createTextNode: createTextNode,
         | 
| 53 | 
            -
                createComment: createComment,
         | 
| 54 | 
            -
                insertBefore: insertBefore,
         | 
| 55 | 
            -
                removeChild: removeChild,
         | 
| 56 | 
            -
                appendChild: appendChild,
         | 
| 57 | 
            -
                parentNode: parentNode,
         | 
| 58 | 
            -
                nextSibling: nextSibling,
         | 
| 59 | 
            -
                tagName: tagName,
         | 
| 60 | 
            -
                setTextContent: setTextContent,
         | 
| 61 | 
            -
                getTextContent: getTextContent,
         | 
| 62 | 
            -
                isElement: isElement,
         | 
| 63 | 
            -
                isText: isText,
         | 
| 64 | 
            -
                isComment: isComment,
         | 
| 65 | 
            -
            };
         | 
| 66 | 
            -
            exports.default = exports.htmlDomApi;
         | 
| 67 | 
            -
             | 
| 68 | 
            -
            },{}],2:[function(require,module,exports){
         | 
| 69 | 
            -
            "use strict";
         | 
| 70 | 
            -
            Object.defineProperty(exports, "__esModule", { value: true });
         | 
| 71 | 
            -
            var vnode_1 = require("./vnode");
         | 
| 72 | 
            -
            var htmldomapi_1 = require("./htmldomapi");
         | 
| 73 | 
            -
            function toVNode(node, domApi) {
         | 
| 74 | 
            -
                var api = domApi !== undefined ? domApi : htmldomapi_1.default;
         | 
| 75 | 
            -
                var text;
         | 
| 76 | 
            -
                if (api.isElement(node)) {
         | 
| 77 | 
            -
                    var id = node.id ? '#' + node.id : '';
         | 
| 78 | 
            -
                    var cn = node.getAttribute('class');
         | 
| 79 | 
            -
                    var c = cn ? '.' + cn.split(' ').join('.') : '';
         | 
| 80 | 
            -
                    var sel = api.tagName(node).toLowerCase() + id + c;
         | 
| 81 | 
            -
                    var attrs = {};
         | 
| 82 | 
            -
                    var children = [];
         | 
| 83 | 
            -
                    var name_1;
         | 
| 84 | 
            -
                    var i = void 0, n = void 0;
         | 
| 85 | 
            -
                    var elmAttrs = node.attributes;
         | 
| 86 | 
            -
                    var elmChildren = node.childNodes;
         | 
| 87 | 
            -
                    for (i = 0, n = elmAttrs.length; i < n; i++) {
         | 
| 88 | 
            -
                        name_1 = elmAttrs[i].nodeName;
         | 
| 89 | 
            -
                        if (name_1 !== 'id' && name_1 !== 'class') {
         | 
| 90 | 
            -
                            attrs[name_1] = elmAttrs[i].nodeValue;
         | 
| 91 | 
            -
                        }
         | 
| 92 | 
            -
                    }
         | 
| 93 | 
            -
                    for (i = 0, n = elmChildren.length; i < n; i++) {
         | 
| 94 | 
            -
                        children.push(toVNode(elmChildren[i]));
         | 
| 95 | 
            -
                    }
         | 
| 96 | 
            -
                    return vnode_1.default(sel, { attrs: attrs }, children, undefined, node);
         | 
| 97 | 
            -
                }
         | 
| 98 | 
            -
                else if (api.isText(node)) {
         | 
| 99 | 
            -
                    text = api.getTextContent(node);
         | 
| 100 | 
            -
                    return vnode_1.default(undefined, undefined, undefined, text, node);
         | 
| 101 | 
            -
                }
         | 
| 102 | 
            -
                else if (api.isComment(node)) {
         | 
| 103 | 
            -
                    text = api.getTextContent(node);
         | 
| 104 | 
            -
                    return vnode_1.default('!', {}, [], text, node);
         | 
| 105 | 
            -
                }
         | 
| 106 | 
            -
                else {
         | 
| 107 | 
            -
                    return vnode_1.default('', {}, [], undefined, undefined);
         | 
| 108 | 
            -
                }
         | 
| 109 | 
            -
            }
         | 
| 110 | 
            -
            exports.toVNode = toVNode;
         | 
| 111 | 
            -
            exports.default = toVNode;
         | 
| 112 | 
            -
             | 
| 113 | 
            -
            },{"./htmldomapi":1,"./vnode":3}],3:[function(require,module,exports){
         | 
| 114 | 
            -
            "use strict";
         | 
| 115 | 
            -
            Object.defineProperty(exports, "__esModule", { value: true });
         | 
| 116 | 
            -
            function vnode(sel, data, children, text, elm) {
         | 
| 117 | 
            -
                var key = data === undefined ? undefined : data.key;
         | 
| 118 | 
            -
                return { sel: sel, data: data, children: children,
         | 
| 119 | 
            -
                    text: text, elm: elm, key: key };
         | 
| 120 | 
            -
            }
         | 
| 121 | 
            -
            exports.vnode = vnode;
         | 
| 122 | 
            -
            exports.default = vnode;
         | 
| 123 | 
            -
             | 
| 124 | 
            -
            },{}]},{},[2])(2)
         | 
| 125 | 
            -
            });
         | 
| 126 | 
            -
            //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy8ucmVnaXN0cnkubnBtanMub3JnL2Jyb3dzZXItcGFjay82LjAuMi9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwiaHRtbGRvbWFwaS5qcyIsInRvdm5vZGUuanMiLCJ2bm9kZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZ05hbWUpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VVUkksIHF1YWxpZmllZE5hbWUpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZVVSSSwgcXVhbGlmaWVkTmFtZSk7XG59XG5mdW5jdGlvbiBjcmVhdGVUZXh0Tm9kZSh0ZXh0KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpO1xufVxuZnVuY3Rpb24gY3JlYXRlQ29tbWVudCh0ZXh0KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQodGV4dCk7XG59XG5mdW5jdGlvbiBpbnNlcnRCZWZvcmUocGFyZW50Tm9kZSwgbmV3Tm9kZSwgcmVmZXJlbmNlTm9kZSkge1xuICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpO1xufVxuZnVuY3Rpb24gcmVtb3ZlQ2hpbGQobm9kZSwgY2hpbGQpIHtcbiAgICBub2RlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbn1cbmZ1bmN0aW9uIGFwcGVuZENoaWxkKG5vZGUsIGNoaWxkKSB7XG4gICAgbm9kZS5hcHBlbmRDaGlsZChjaGlsZCk7XG59XG5mdW5jdGlvbiBwYXJlbnROb2RlKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5wYXJlbnROb2RlO1xufVxuZnVuY3Rpb24gbmV4dFNpYmxpbmcobm9kZSkge1xuICAgIHJldHVybiBub2RlLm5leHRTaWJsaW5nO1xufVxuZnVuY3Rpb24gdGFnTmFtZShlbG0pIHtcbiAgICByZXR1cm4gZWxtLnRhZ05hbWU7XG59XG5mdW5jdGlvbiBzZXRUZXh0Q29udGVudChub2RlLCB0ZXh0KSB7XG4gICAgbm9kZS50ZXh0Q29udGVudCA9IHRleHQ7XG59XG5mdW5jdGlvbiBnZXRUZXh0Q29udGVudChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUudGV4dENvbnRlbnQ7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQobm9kZSkge1xuICAgIHJldHVybiBub2RlLm5vZGVUeXBlID09PSAxO1xufVxuZnVuY3Rpb24gaXNUZXh0KG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gMztcbn1cbmZ1bmN0aW9uIGlzQ29tbWVudChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09IDg7XG59XG5leHBvcnRzLmh0bWxEb21BcGkgPSB7XG4gICAgY3JlYXRlRWxlbWVudDogY3JlYXRlRWxlbWVudCxcbiAgICBjcmVhdGVFbGVtZW50TlM6IGNyZWF0ZUVsZW1lbnROUyxcbiAgICBjcmVhdGVUZXh0Tm9kZTogY3JlYXRlVGV4dE5vZGUsXG4gICAgY3JlYXRlQ29tbWVudDogY3JlYXRlQ29tbWVudCxcbiAgICBpbnNlcnRCZWZvcmU6IGluc2VydEJlZm9yZSxcbiAgICByZW1vdmVDaGlsZDogcmVtb3ZlQ2hpbGQsXG4gICAgYXBwZW5kQ2hpbGQ6IGFwcGVuZENoaWxkLFxuICAgIHBhcmVudE5vZGU6IHBhcmVudE5vZGUsXG4gICAgbmV4dFNpYmxpbmc6IG5leHRTaWJsaW5nLFxuICAgIHRhZ05hbWU6IHRhZ05hbWUsXG4gICAgc2V0VGV4dENvbnRlbnQ6IHNldFRleHRDb250ZW50LFxuICAgIGdldFRleHRDb250ZW50OiBnZXRUZXh0Q29udGVudCxcbiAgICBpc0VsZW1lbnQ6IGlzRWxlbWVudCxcbiAgICBpc1RleHQ6IGlzVGV4dCxcbiAgICBpc0NvbW1lbnQ6IGlzQ29tbWVudCxcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBleHBvcnRzLmh0bWxEb21BcGk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1odG1sZG9tYXBpLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHZub2RlXzEgPSByZXF1aXJlKFwiLi92bm9kZVwiKTtcbnZhciBodG1sZG9tYXBpXzEgPSByZXF1aXJlKFwiLi9odG1sZG9tYXBpXCIpO1xuZnVuY3Rpb24gdG9WTm9kZShub2RlLCBkb21BcGkpIHtcbiAgICB2YXIgYXBpID0gZG9tQXBpICE9PSB1bmRlZmluZWQgPyBkb21BcGkgOiBodG1sZG9tYXBpXzEuZGVmYXVsdDtcbiAgICB2YXIgdGV4dDtcbiAgICBpZiAoYXBpLmlzRWxlbWVudChub2RlKSkge1xuICAgICAgICB2YXIgaWQgPSBub2RlLmlkID8gJyMnICsgbm9kZS5pZCA6ICcnO1xuICAgICAgICB2YXIgY24gPSBub2RlLmdldEF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICAgICAgdmFyIGMgPSBjbiA/ICcuJyArIGNuLnNwbGl0KCcgJykuam9pbignLicpIDogJyc7XG4gICAgICAgIHZhciBzZWwgPSBhcGkudGFnTmFtZShub2RlKS50b0xvd2VyQ2FzZSgpICsgaWQgKyBjO1xuICAgICAgICB2YXIgYXR0cnMgPSB7fTtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gW107XG4gICAgICAgIHZhciBuYW1lXzE7XG4gICAgICAgIHZhciBpID0gdm9pZCAwLCBuID0gdm9pZCAwO1xuICAgICAgICB2YXIgZWxtQXR0cnMgPSBub2RlLmF0dHJpYnV0ZXM7XG4gICAgICAgIHZhciBlbG1DaGlsZHJlbiA9IG5vZGUuY2hpbGROb2RlcztcbiAgICAgICAgZm9yIChpID0gMCwgbiA9IGVsbUF0dHJzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgbmFtZV8xID0gZWxtQXR0cnNbaV0ubm9kZU5hbWU7XG4gICAgICAgICAgICBpZiAobmFtZV8xICE9PSAnaWQnICYmIG5hbWVfMSAhPT0gJ2NsYXNzJykge1xuICAgICAgICAgICAgICAgIGF0dHJzW25hbWVfMV0gPSBlbG1BdHRyc1tpXS5ub2RlVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChpID0gMCwgbiA9IGVsbUNoaWxkcmVuLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaCh0b1ZOb2RlKGVsbUNoaWxkcmVuW2ldKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZub2RlXzEuZGVmYXVsdChzZWwsIHsgYXR0cnM6IGF0dHJzIH0sIGNoaWxkcmVuLCB1bmRlZmluZWQsIG5vZGUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChhcGkuaXNUZXh0KG5vZGUpKSB7XG4gICAgICAgIHRleHQgPSBhcGkuZ2V0VGV4dENvbnRlbnQobm9kZSk7XG4gICAgICAgIHJldHVybiB2bm9kZV8xLmRlZmF1bHQodW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGV4dCwgbm9kZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGFwaS5pc0NvbW1lbnQobm9kZSkpIHtcbiAgICAgICAgdGV4dCA9IGFwaS5nZXRUZXh0Q29udGVudChub2RlKTtcbiAgICAgICAgcmV0dXJuIHZub2RlXzEuZGVmYXVsdCgnIScsIHt9LCBbXSwgdGV4dCwgbm9kZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gdm5vZGVfMS5kZWZhdWx0KCcnLCB7fSwgW10sIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbiAgICB9XG59XG5leHBvcnRzLnRvVk5vZGUgPSB0b1ZOb2RlO1xuZXhwb3J0cy5kZWZhdWx0ID0gdG9WTm9kZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRvdm5vZGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiB2bm9kZShzZWwsIGRhdGEsIGNoaWxkcmVuLCB0ZXh0LCBlbG0pIHtcbiAgICB2YXIga2V5ID0gZGF0YSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogZGF0YS5rZXk7XG4gICAgcmV0dXJuIHsgc2VsOiBzZWwsIGRhdGE6IGRhdGEsIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICAgICAgdGV4dDogdGV4dCwgZWxtOiBlbG0sIGtleToga2V5IH07XG59XG5leHBvcnRzLnZub2RlID0gdm5vZGU7XG5leHBvcnRzLmRlZmF1bHQgPSB2bm9kZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZub2RlLmpzLm1hcCJdfQ==
         |