diff --git a/css/iggy.css b/css/iggy.css index 811bc70..8da3d35 100644 --- a/css/iggy.css +++ b/css/iggy.css @@ -1,5 +1,5 @@ /* - * IGGY 0.2.4 ( 2017-01-31 ) + * IGGY 0.2.5 ( 2017-02-01 ) * http://mpneuried.github.io/iggy/ * * Released under the MIT license diff --git a/dist/css/iggy.css b/dist/css/iggy.css index 875f6d5..8da3d35 100644 --- a/dist/css/iggy.css +++ b/dist/css/iggy.css @@ -1,5 +1,5 @@ /* - * IGGY 0.2.4 ( 2017-01-28 ) + * IGGY 0.2.5 ( 2017-02-01 ) * http://mpneuried.github.io/iggy/ * * Released under the MIT license diff --git a/dist/js/iggy.js b/dist/js/iggy.js index 464bf5b..e8fd168 100644 --- a/dist/js/iggy.js +++ b/dist/js/iggy.js @@ -1,10 +1,10 @@ /* - * IGGY 0.2.4 ( 2017-01-28 ) + * IGGY 0.2.5 ( 2017-02-01 ) * http://mpneuried.github.io/iggy/ * * Released under the MIT license * https://github.com/mpneuried/iggy/blob/master/LICENSE */ -!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.IGGY=a()}}(function(){var a;return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g1)throw this._error("ESIZEELJQUERY");return a}if(a instanceof Element)return this.$(a);throw this._error("EINVALIDELTYPE")},b.prototype._prepareFacets=function(a,b){var c,e,f,g,h,i;for(null==b&&(b={}),f=[],e=h=0,i=a.length;h=0&&this.add(k)}return this},b.prototype._generateSubFilter=function(a){var b;return b=_.isFunction(a)?a:_.isArray(a)?function(b){var c;return c=b.id,h.call(a,c)>=0}:_.isString(a)||_.isNumber(a)?function(b){return b.id===a}:function(b){var c,d;for(c in a)if(d=a[c],b.get(c)!==d)return!1;return!0}},b}(Backbone.Collection),b.exports=d},{}],3:[function(a,b,c){var d,e=function(a,b){function c(){this.constructor=a}for(var d in b)f.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},f={}.hasOwnProperty;d=function(b){function c(){return c.__super__.constructor.apply(this,arguments)}return e(c,b),c.prototype.SubView=a("../views/facets/subarray"),c}(a("./facet_string")),b.exports=d},{"../views/facets/subarray":29,"./facet_string":10}],4:[function(a,b,c){var d,e=function(a,b){return function(){return a.apply(b,arguments)}},f=function(a,b){function c(){this.constructor=a}for(var d in b)g.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},g={}.hasOwnProperty;d=function(b){function c(a,b){this.match=e(this.match,this),this.getLabel=e(this.getLabel,this),this.main=b.main,c.__super__.constructor.apply(this,arguments)}return f(c,b),c.prototype.idAttribute="name",c.prototype.SubView=a("../views/facets/base"),c.prototype.defaults=function(){return{type:"string",name:"name",label:"Description",sort:0}},c.prototype.getLabel=function(){return this.get("label")},c.prototype.match=function(a){var b,c;return b=this.get("name")+" "+this.get("label"),c=b.toLowerCase().indexOf(a.toLowerCase()),c>=0},c.prototype.comparator=function(a){return a.id},c}(Backbone.Model),b.exports=d},{"../views/facets/base":26}],5:[function(a,b,c){var d,e=function(a,b){return function(){return a.apply(b,arguments)}},f=function(a,b){function c(){this.constructor=a}for(var d in b)g.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},g={}.hasOwnProperty;d=function(b){function c(){return this.defaults=e(this.defaults,this),c.__super__.constructor.apply(this,arguments)}return f(c,b),c.prototype.SubView=a("../views/facets/daterange"),c.prototype.defaults=function(){return $.extend(c.__super__.defaults.apply(this,arguments),{opts:{},value:null})},c}(a("./facet_base")),b.exports=d},{"../views/facets/daterange":27,"./facet_base":4}],6:[function(a,b,c){var d,e=function(a,b){return function(){return a.apply(b,arguments)}},f=function(a,b){function c(){this.constructor=a}for(var d in b)g.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},g={}.hasOwnProperty;d=function(a){function b(){return this.exec=e(this.exec,this),this.defaults=e(this.defaults,this),b.__super__.constructor.apply(this,arguments)}return f(b,a),b.prototype.SubView=null,b.prototype.onlyExec=!0,b.prototype.defaults=function(){return $.extend(b.__super__.defaults.apply(this,arguments),{options:[]})},b.prototype.exec=function(){this.main.trigger(this.get("event"),this.toJSON())},b}(a("./facet_base")),b.exports=d},{"./facet_base":4}],7:[function(a,b,c){var d,e=function(a,b){return function(){return a.apply(b,arguments)}},f=function(a,b){function c(){this.constructor=a}for(var d in b)g.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},g={}.hasOwnProperty;d=function(b){function c(){return this.defaults=e(this.defaults,this),c.__super__.constructor.apply(this,arguments)}return f(c,b),c.prototype.SubView=a("../views/facets/subnumber"),c.prototype.defaults=function(){return $.extend(c.__super__.defaults.apply(this,arguments),{min:null,max:null,step:1,value:null})},c}(a("./facet_base")),b.exports=d},{"../views/facets/subnumber":30,"./facet_base":4}],8:[function(a,b,c){var d,e=function(a,b){return function(){return a.apply(b,arguments)}},f=function(a,b){function c(){this.constructor=a}for(var d in b)g.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},g={}.hasOwnProperty;d=function(b){function c(){return this.defaults=e(this.defaults,this),c.__super__.constructor.apply(this,arguments)}return f(c,b),c.prototype.SubView=a("../views/facets/subrange"),c.prototype.defaults=function(){return $.extend(c.__super__.defaults.apply(this,arguments),{min:null,max:null,step:1,value:null})},c}(a("./facet_base")),b.exports=d},{"../views/facets/subrange":31,"./facet_base":4}],9:[function(a,b,c){var d,e=function(a,b){return function(){return a.apply(b,arguments)}},f=function(a,b){function c(){this.constructor=a}for(var d in b)g.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},g={}.hasOwnProperty;d=function(b){function c(){return this.defaults=e(this.defaults,this),c.__super__.constructor.apply(this,arguments)}return f(c,b),c.prototype.SubView=a("../views/facets/subselect"),c.prototype.defaults=function(){return $.extend(c.__super__.defaults.apply(this,arguments),{options:[],waitForAsync:!0})},c}(a("./facet_base")),b.exports=d},{"../views/facets/subselect":32,"./facet_base":4}],10:[function(a,b,c){var d,e=function(a,b){return function(){return a.apply(b,arguments)}},f=function(a,b){function c(){this.constructor=a}for(var d in b)g.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},g={}.hasOwnProperty;d=function(b){function c(){return this.defaults=e(this.defaults,this),c.__super__.constructor.apply(this,arguments)}return f(c,b),c.prototype.SubView=a("../views/facets/substring"),c.prototype.defaults=function(){return $.extend(c.__super__.defaults.apply(this,arguments),{options:[]})},c}(a("./facet_base")),b.exports=d},{"../views/facets/substring":33,"./facet_base":4}],11:[function(a,b,c){var d,e,f,g=function(a,b){return function(){return a.apply(b,arguments)}},h=function(a,b){function c(){this.constructor=a}for(var d in b)i.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},i={}.hasOwnProperty;f=a("sortcoll"),e=function(a,b){return a.get(b)},d=function(a){function b(a,c){var d;return null==c&&(c={}),this._subCollecctionOptions=g(this._subCollecctionOptions,this),null==c.comparator&&(d=function(){switch(c.dir){case"asc":return!0;case"desc":return!1;default:return!0}}(),c.comparator=f(["sort"].concat(c.sortby||"name"),{sort:!1,"?":d},e)),b.__super__.constructor.call(this,a,c)}return h(b,a),b.prototype._subCollecctionOptions=function(){var a;return a=b.__super__._subCollecctionOptions.apply(this,arguments),a.dir=this.forward?"asc":"desc",a},b.prototype.modelId=function(a){return a.name},b}(a("./backbone_sub")),b.exports=d},{"./backbone_sub":2,sortcoll:39}],12:[function(a,b,c){var d,e,f=function(a,b){function c(){this.constructor=a}for(var d in b)g.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},g={}.hasOwnProperty,h=function(a,b){return function(){return a.apply(b,arguments)}};d=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return f(b,a),b.prototype.idAttribute="name",b.prototype.defaults={type:"string",name:null,value:null},b}(Backbone.Model),e=function(a){function b(){return this.parse=h(this.parse,this),this.initialize=h(this.initialize,this),b.__super__.constructor.apply(this,arguments)}return f(b,a),b.prototype.model=d,b.prototype.initialize=function(a,b){var c;(null!=(c=b.modifyKey)?c.length:void 0)&&(this.modifyKey=b.modifyKey)},b.prototype.parse=function(a,b){var c,d,e;return c=b._facet.get("modifyKey")||this.modifyKey||"value",d=null!=(e=b._facet)?e.get("modify"):void 0,null!=d&&_.isFunction(d)&&(a[c]=d(a.value,b._facet,a)),a},b}(a("./backbone_sub")),b.exports=e},{"./backbone_sub":2}],13:[function(a,b,c){var d,e,f=function(a,b){return function(){return a.apply(b,arguments)}},g=function(a,b){function c(){this.constructor=a}for(var d in b)h.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},h={}.hasOwnProperty;d=function(a){function b(){return this.getLabel=f(this.getLabel,this),b.__super__.constructor.apply(this,arguments)}return g(b,a),b.prototype.idAttribute="value",b.prototype.getLabel=function(){return this.get("label")||this.get(this.idAttribute)||""},b}(Backbone.Model),e=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return g(b,a),b.prototype.model=d,b}(a("./backbone_sub")),b.exports=e},{"./backbone_sub":2}],14:[function(a,b,c){var d=a("jade/runtime");b.exports=function(a){var b,c=[],e=a||{};return function(a,e,f){c.push(''+d.escape(null==(b=f)?"":b)+''),a&&c.push("'),c.push("")}.call(this,"custom"in e?e.custom:"undefined"!=typeof custom?custom:void 0,"id"in e?e.id:"undefined"!=typeof id?id:void 0,"txt"in e?e.txt:"undefined"!=typeof txt?txt:void 0),c.join("")}},{"jade/runtime":38}],15:[function(a,b,c){var d=a("jade/runtime");b.exports=function(a){var b=[],c=a||{};return function(a){b.push("')}.call(this,"cid"in c?c.cid:"undefined"!=typeof cid?cid:void 0),b.join("")}},{"jade/runtime":38}],16:[function(a,b,c){var d=a("jade/runtime");b.exports=function(a){var b,c=[],e=a||{};return function(a,e,f,g,h){f&&f.length&&(c.push('
"),function(){var a=f;if("number"==typeof a.length)for(var g=0,h=a.length;g"+d.escape(null==(b=i)?"":b)+"")}else{var h=0;for(var g in a){h++;var i=a[g];c.push(""+d.escape(null==(b=i)?"":b)+"")}}}.call(this),c.push("
")),c.push("')}.call(this,"cid"in e?e.cid:"undefined"!=typeof cid?cid:void 0,"operator"in e?e.operator:"undefined"!=typeof operator?operator:void 0,"operators"in e?e.operators:"undefined"!=typeof operators?operators:void 0,"undefined"in e?e.undefined:void 0,"value"in e?e.value:"undefined"!=typeof value?value:void 0),c.join("")}},{"jade/runtime":38}],17:[function(a,b,c){var d=a("jade/runtime");b.exports=function(a){var b=[],c=a||{};return function(a,c){b.push('
');var e=c?c:[];b.push("-
')}.call(this,"cid"in c?c.cid:"undefined"!=typeof cid?cid:void 0,"value"in c?c.value:"undefined"!=typeof value?value:void 0),b.join("")}},{"jade/runtime":38}],18:[function(a,b,c){a("jade/runtime");b.exports=function(a){var b=[];return b.join("")}},{"jade/runtime":38}],19:[function(a,b,c){var d=a("jade/runtime");b.exports=function(a){var b,c=[],e=a||{};return function(a,e,f,g,h,i){c.push("'),f?function(){var a=f;if("number"==typeof a.length)for(var e=0,g=a.length;e"),function(){var a=h;if("number"==typeof a.length)for(var e=0,f=a.length;e=0,!0,!1)+">"+d.escape(null==(b=g.label)?"":b)+"")}else{var f=0;for(var e in a){f++;var g=a[e];c.push("=0,!0,!1)+">"+d.escape(null==(b=g.label)?"":b)+"")}}}.call(this)}else{var g=0;for(var e in a){g++;var h=a[e];c.push(""),function(){var a=h;if("number"==typeof a.length)for(var e=0,f=a.length;e=0,!0,!1)+">"+d.escape(null==(b=g.label)?"":b)+"")}else{var f=0;for(var e in a){f++;var g=a[e];c.push("=0,!0,!1)+">"+d.escape(null==(b=g.label)?"":b)+"")}}}.call(this)}}}.call(this):function(){var a=g;if("number"==typeof a.length)for(var e=0,f=a.length;e=0,!0,!1)+">"+d.escape(null==(b=h.label)?"":b)+"")}else{var f=0;for(var e in a){f++;var h=a[e];c.push("=0,!0,!1)+">"+d.escape(null==(b=h.label)?"":b)+"")}}}.call(this),c.push(""),e&&c.push('')}.call(this,"cid"in e?e.cid:"undefined"!=typeof cid?cid:void 0,"multiple"in e?e.multiple:"undefined"!=typeof multiple?multiple:void 0,"optionGroups"in e?e.optionGroups:"undefined"!=typeof optionGroups?optionGroups:void 0,"options"in e?e.options:"undefined"!=typeof options?options:void 0,"undefined"in e?e.undefined:void 0,"value"in e?e.value:"undefined"!=typeof value?value:void 0),c.join("")}},{"jade/runtime":38}],20:[function(a,b,c){var d=a("jade/runtime");b.exports=function(a){var b=[],c=a||{};return function(a,c){b.push("')}.call(this,"cid"in c?c.cid:"undefined"!=typeof cid?cid:void 0,"inpval"in c?c.inpval:"undefined"!=typeof inpval?inpval:void 0),b.join("")}},{"jade/runtime":38}],21:[function(a,b,c){var d=a("jade/runtime");b.exports=function(a){var b,c=[],e=a||{};return function(a,e,f,g,h){var i=0;e&&g&&(i=1,c.push('
  • "'+(null==(b=g)?"":b)+'"
  • ')),f.length?function(){var e=f;if("number"==typeof e.length)for(var g=0,h=e.length;g"+(null==(b=j.label)?"":b)+"")}else{var h=0;for(var g in e){h++;var j=e[g];c.push(""+(null==(b=j.label)?"":b)+"")}}}.call(this):e||c.push('
  • no result for "'+d.escape(null==(b=g)?"":b)+'"
  • ')}.call(this,"activeIdx"in e?e.activeIdx:"undefined"!=typeof activeIdx?activeIdx:void 0,"custom"in e?e.custom:"undefined"!=typeof custom?custom:void 0,"list"in e?e.list:"undefined"!=typeof list?list:void 0,"query"in e?e.query:"undefined"!=typeof query?query:void 0,"undefined"in e?e.undefined:void 0),c.join("")}},{"jade/runtime":38}],22:[function(a,b,c){var d=a("jade/runtime");b.exports=function(a){var b=[],c=a||{};return function(a,c){b.push("')}.call(this,"cid"in c?c.cid:"undefined"!=typeof cid?cid:void 0,"value"in c?c.value:"undefined"!=typeof value?value:void 0),b.join("")}},{"jade/runtime":38}],23:[function(a,b,c){var d=a("jade/runtime");b.exports=function(a){var b,c=[],e=a||{};return function(a,e,f,g){e||c.push('
    '),c.push(''+d.escape(null==(b=a)?"":b)+':
      '),f&&f.length&&function(){var a=f;if("number"==typeof a.length)for(var e=0,g=a.length;e'+d.escape(null==(b=h)?"":b)+'')}else{var g=0;for(var e in a){g++;var h=a[e];c.push('
    • '+d.escape(null==(b=h)?"":b)+'
    • ')}}}.call(this),c.push('
    ')}.call(this,"label"in e?e.label:"undefined"!=typeof label?label:void 0,"pinned"in e?e.pinned:"undefined"!=typeof pinned?pinned:void 0,"selected"in e?e.selected:"undefined"!=typeof selected?selected:void 0,"undefined"in e?e.undefined:void 0),c.join("")}},{"jade/runtime":38}],24:[function(a,b,c){var d=a("jade/runtime");b.exports=function(a){var b,c=[],e=a||{};return function(a){c.push(''),void 0!=a&&void 0!=a.template&&a.template.length>=0&&c.push(""+(null==(b=a.template)?"":b)+"")}.call(this,"searchButton"in e?e.searchButton:"undefined"!=typeof searchButton?searchButton:void 0),c.join("")}},{"jade/runtime":38}],25:[function(a,b,c){b.exports={LEFT:37,RIGHT:39,UP:38,DOWN:40,ESC:[229,27],ENTER:13,TAB:9}},{}],26:[function(a,b,c){var d,e,f,g=function(a,b){return function(){return a.apply(b,arguments)}},h=function(a,b){function c(){this.constructor=a}for(var d in b)i.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},i={}.hasOwnProperty,j=[].indexOf||function(a){for(var b=0,c=this.length;b"+c.join("
  • ")+"
  • ":""},c.prototype.open=function(){this.$el.removeClass("closed"),this.$el.addClass("open"),this.isOpen=!0,this.trigger("opened")},c.prototype.input=function(a){if("keydown"===a.type)switch(a.keyCode){case e.ENTER:this.select()}},c.prototype._onKey=function(a){var b;if(a.keyCode===e.TAB||(b=a.keyCode,j.call(e.TAB,b)>=0))return void this._onTabAction(a)},c.prototype.getTemplateData=function(){var a,b;return b={cid:this.cid,value:null!=(a=this.model)?a.get("value"):void 0}},c.prototype._getInpSelector=function(){return"input#"+this.cid},c.prototype.reopen=function(a){this.$el.removeClass("closed"),this.$el.addClass("open"),this.render(),null!=a&&a.open()},c.prototype.render=function(a){var b;b=this.template(this.getTemplateData()),this.$el.html(b),a||this.$el.removeClass("closed"),this.$inp=this.$el.find(this._getInpSelector())},c.prototype._hasTabEvent=function(){return"keydown"},c.prototype._hasTabListener=function(){return!0},c.prototype._onTabAction=function(a){return a.preventDefault(),a.stopPropagation(),this.select(),!0},c.prototype.close=function(a){this.focused=!1,this.$el.removeClass("open"),this.$el.addClass("closed"),this.isOpen=!1,this.trigger("closed",this.result)},c.prototype.getResults=function(){return{value:this.getValue()}},c.prototype.getValue=function(){return this.$inp.val()},c.prototype.getSelectModel=function(){return f.prototype.model},c.prototype._checkSelectEmpty=function(a){return!(!_.isEmpty(a)||_.isNumber(a)||_.isBoolean(a)||this.model.get("pinned"))&&(this.close(),!0)},c.prototype.select=function(){var a;a=this.getValue(),this._checkSelectEmpty(a)||this.set(a)},c.prototype.set=function(a){var b,c;c=this.result.first(),null==c?(b=this.getSelectModel(),c=new b({value:a}),this.result.add(c)):c.set({value:a}),this.trigger("selected",c),this.close()},c}(Backbone.View),b.exports=d},{"../../models/subresults":13,"../../tmpls/result_base.jade":18,"../../utils/keycodes":25}],27:[function(a,b,c){var d,e,f=function(a,b){return function(){return a.apply(b,arguments)}},g=function(a,b){function c(){this.constructor=a}for(var d in b)h.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},h={}.hasOwnProperty;e=a("../../utils/keycodes"),d=function(b){function c(){return this.select=f(this.select,this),this.getValue=f(this.getValue,this),this.getTemplateData=f(this.getTemplateData,this),this._dateReturn=f(this._dateReturn,this),this.renderResult=f(this.renderResult,this),this.remove=f(this.remove,this),this.close=f(this.close,this),this.focus=f(this.focus,this),this.events=f(this.events,this),this.forcedDateRangeOpts=f(this.forcedDateRangeOpts,this),c.__super__.constructor.apply(this,arguments)}return g(c,b),c.prototype.template=a("../../tmpls/daterange.jade"),c.prototype.forcedDateRangeOpts=function(){var a,b,c,d,e,f;return b={opens:"right"},this.model.get("dateformat")&&(b.locale={format:this.model.get("dateformat")}),null!=(null!=(d=this.model.get("value"))?d[0]:void 0)&&(null!=(null!=(e=this.model.get("value"))?e[1]:void 0),c=_.isNumber(this.model.get("value")[0])?moment(this.model.get("value")[0]):moment(this.model.get("value")[0],this.model.get("dateformat")),c.isValid()&&(b.startDate=c._d)),null!=(null!=(f=this.model.get("value"))?f[1]:void 0)&&(a=_.isNumber(this.model.get("value")[1])?moment(this.model.get("value")[1]):moment(this.model.get("value")[1],this.model.get("dateformat")),a.isValid()&&(b.endDate=a._d)),b},c.prototype.events=function(){},c.prototype.focus=function(){var a,b;return null==this.daterangepicker?(a=_.extend({},this.model.get("opts"),this.forcedDateRangeOpts()),this.$inp.daterangepicker(a,this._dateReturn),this.daterangepicker=this.$inp.data("daterangepicker"),null!=(b=this.daterangepicker.container)&&b.addClass("daterange-iggy"),this.daterangepicker.container.on("click",function(a){return a.stopPropagation(),!1})):(this.daterangepicker.element=this.$inp,this.daterangepicker.show()),this.$inp.on("cancel.daterangepicker",this.close),this.$inp.on("hide.daterangepicker",this.close),c.__super__.focus.apply(this,arguments)},c.prototype.close=function(){c.__super__.close.apply(this,arguments),this.$inp.off("cancel.daterangepicker",this.close),this.$inp.off("hide.daterangepicker",this.close)},c.prototype.remove=function(){var a;return null!=(a=this.daterangepicker)&&a.remove(),this.daterangepicker=null,c.__super__.remove.apply(this,arguments)},c.prototype.renderResult=function(){var a,b,c,d,e,f;return c=this.getResults(),e=_.isNumber(c.value[0])?moment(c.value[0]):moment(c.value[0],this.model.get("dateformat")),null!=c.value[1]&&(a=_.isNumber(c.value[1])?moment(c.value[1]):moment(c.value[1],this.model.get("dateformat"))),f=this.model.get("opts").timePicker,d="
  • ",b=null!=this.model.get("dateformat")?this.model.get("dateformat"):f?"LLLL":"LL",d+=e.format(b),null!=a&&(d+=" - ",d+=a.format(b)),d+="
  • "},c.prototype._hasTabListener=function(){return!1},c.prototype._dateReturn=function(a,b){this.startDate=a,this.endDate=b,this.model.set("value",this.getValue(!1)),this.select()},c.prototype.getTemplateData=function(){return c.__super__.getTemplateData.apply(this,arguments)},c.prototype.getValue=function(a){var b,c;return null==a&&(a=!0),a&&(c=this.model.get("value"),null!=c)?(_.isArray(c)||(c=[c]),this.startDate=c[0],this.endDate=c[1],c):(b=[this.startDate.valueOf()],null!=this.endDate&&b.push(this.endDate.valueOf()),b)},c.prototype.select=function(){var a,b;a=this.getSelectModel(),b=new a({value:this.getValue()}),this.result.add(b),this.trigger("selected",b),this.close()},c}(a("./base")),b.exports=d},{"../../tmpls/daterange.jade":15,"../../utils/keycodes":25,"./base":26}],28:[function(a,b,c){var d,e,f,g,h=function(a,b){return function(){return a.apply(b,arguments)}},i=function(a,b){function c(){this.constructor=a}for(var d in b)j.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},j={}.hasOwnProperty;e=a("../../utils/keycodes"),f=function(a,b){return a/=b,a=Math.round(a)*b},g=function(a,b){return b=Math.pow(10,b),a*=b,a=Math.round(a),a/=b},d=function(a){function b(){this._setNumber=h(this._setNumber,this),this.getValue=h(this.getValue,this),this.crement=h(this.crement,this),this.input=h(this.input,this),this.events=h(this.events,this),this.setNumber=_.throttle(this._setNumber,300,{leading:!1,trailing:!1}),b.__super__.constructor.apply(this,arguments)}return i(b,a),b.prototype.events=function(){var a;return a={},a["keyup "+this._getInpSelector()]="input",a["keydown "+this._getInpSelector()]="input",a},b.prototype.input=function(a){var b,c;if(b=$(a.currentTarget),"keydown"===a.type)switch(a.keyCode){case e.UP:return void this.crement(this.model.get("step"),b); -case e.DOWN:return void this.crement(this.model.get("step")*-1,b);case e.ENTER:return void this.select()}"keyup"===a.type&&(c=a.currentTarget.value.replace(/[^\d]?[^-\d]+/g,""),c=parseInt(c,10),this.setNumber(c,b))},b.prototype.crement=function(a,b){var c;null==b&&(b=this.$inp),c=b.val(),c=(null!=c?c.length:void 0)?parseInt(c,10):this.model.get("value"),this._setNumber(c+a,b)},b.prototype.getValue=function(){var a;return a=this.$inp.val(),(null!=a?a.length:void 0)?parseInt(this.valueByDefinition(a),10):null},b.prototype._setNumber=function(a,b){var c;null==b&&(b=this.$inp),isNaN(a)||(c=b.val(),a=this.valueByDefinition(a),c!==a.toString()&&b.val(a))},b.prototype.valueByDefinition=function(a){var b,c,d,e,h;return d=this.model.get("max"),e=this.model.get("min"),h=this.model.get("step"),e>d&&(c=e,e=d,d=c),null!=e&&ad?d:(1!==h&&(a=f(a,h)),b=Math.max(0,Math.ceil(Math.log(1/h)/Math.log(10))),a=b>0?g(a,b):Math.round(a))},b}(a("./base")),b.exports=d},{"../../utils/keycodes":25,"./base":26}],29:[function(a,b,c){var d,e,f,g,h,i,j,k=function(a,b){return function(){return a.apply(b,arguments)}},l=function(a,b){function c(){this.constructor=a}for(var d in b)m.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},m={}.hasOwnProperty;j=a("../../models/subresults"),g=a("../../utils/keycodes"),h=function(a){function b(){return this.match=k(this.match,this),b.__super__.constructor.apply(this,arguments)}return l(b,a),b.prototype.match=function(a){var b,c;return b=this.get("value")+" "+this.get("label"),c=b.toLowerCase().indexOf(a.toLowerCase()),c>=0},b}(j.prototype.model),i=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return l(b,a),b.prototype.model=h,b}(j),d=function(a){function b(){return this.match=k(this.match,this),this.getLabel=k(this.getLabel,this),b.__super__.constructor.apply(this,arguments)}return l(b,a),b.prototype.idAttribute="value",b.prototype.getLabel=function(){return this.get("label")||this.get("name")||"-"},b.prototype.match=function(a){var b,c;return b=this.get("value")+" "+this.get("label"),c=b.toLowerCase().indexOf(a.toLowerCase()),c>=0},b}(Backbone.Model),e=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return l(b,a),b.prototype.model=d,b}(a("../../models/backbone_sub")),f=function(b){function c(a){this._createOptionCollection=k(this._createOptionCollection,this),this._onTabAction=k(this._onTabAction,this),this.getResults=k(this.getResults,this),this.reopen=k(this.reopen,this),this.select=k(this.select,this),this._isFull=k(this._isFull,this),this.renderResult=k(this.renderResult,this),this.getTemplateData=k(this.getTemplateData,this),this.editRes=k(this.editRes,this),this.rmRes=k(this.rmRes,this),this.close=k(this.close,this),this.events=k(this.events,this),this.initialize=k(this.initialize,this),this.loading=!1,null!=a.model.get("count")&&(this.selectCount=a.model.get("count")),a.custom=!0,null!=a.model.get("custom")&&(a.custom=Boolean(a.model.get("custom"))),this.collection=this._createOptionCollection(a.model.get("options")),!a.custom&&this.selectCount<=0&&(this.selectCount=this.collection.length),c.__super__.constructor.call(this,a),this.result.on("remove",function(b){return function(c,d){d.length&&a.sub.renderResult(),b.searchcoll.add(c),b.trigger("removed",c)}}(this))}return l(c,b),c.prototype.templateResLi=a("../../tmpls/array_resultli.jade"),c.prototype.optDefault={label:"-",value:"-"},c.prototype.selectCount=0,c.prototype.optColl=i,c.prototype.initialize=function(){return this.editMode=!1,c.__super__.initialize.apply(this,arguments)},c.prototype.events=function(){var a;return a=c.__super__.events.apply(this,arguments),a["blur input#"+this.cid]="close",a},c.prototype.close=function(a){var b,d;return b=!1,this.editMode&&(b=!0),this.editMode=!1,this.loading?(null!=a&&a.preventDefault(),null!=a&&a.stopPropagation(),void this.focus()):(null!=(d=this.model)?d.get("pinned"):void 0)?c.__super__.close.apply(this,arguments):(b&&this.result.length<=0&&this.sub.del(),c.__super__.close.apply(this,arguments))},c.prototype.rmRes=function(a){var b,c,d;null!=(null!=a?a.target:void 0)?b=null!=(d=$(a.target))?d.data("id"):void 0:null!=a&&(b=a),c=this.result.get(b),null!=c&&(this.result.remove(b),(null!=c?c.get("custom"):void 0)&&this.searchcoll.remove(b))},c.prototype.editRes=function(a){var b,c,d;this.editMode=!0,b=null!=(d=$(a.target))?d.data("id"):void 0,c=this._editval=this.result.get(b).get("value"),this.result.remove(b),this.searchcoll.remove(b),this.sub.reopen(),this.search(c)},c.prototype.getTemplateData=function(){var a,b;return a=c.__super__.getTemplateData.apply(this,arguments),(null!=(b=this._editval)?b.length:void 0)&&(a.inpval=this._editval,this._editval=null),a},c.prototype.renderResult=function(a){var b,c,d,e,f,g;if(null==a&&(a=!1),a)return"
  • ";for(b=[],g=this.result.models,d=c=0,e=g.length;c"+b.join("
  • ")+"
  • "},c.prototype._isFull=function(){return!(this.selectCount<=0)&&(this.result||[]).length>=this.selectCount},c.prototype.select=function(){var a,b,c,d,e,f;if(!this.loading&&!this._isFull()&&(c=this.model.get("value"),null==c||_.isArray(c)||(c=[c]),null!=c?c.length:void 0)){for(f=this.selectCount<=0?c:c.slice(0,this.selectCount),d=0,e=f.length;d":(b=this.getResults(),c="
  • ",null!=b.operator&&(c+=b.operator+" "),c+=b.value,c+="
  • ")},c.prototype.close=function(a){null!=this.$inpOp&&(this.$inpOp.select2("destroy"),this.$inpOp.remove(),this.$inpOp=null),c.__super__.close.apply(this,arguments)},c.prototype.select=function(a){var b,d;return(null==(null!=a?a.relatedTarget:void 0)||(b=this.el.compareDocumentPosition(null!=a?a.relatedTarget:void 0),0===b||b-16>=0))&&(null==a||(null!=a?a.relatedTarget:void 0)!==this.$inp.get(0)&&(null!=a?a.relatedTarget:void 0)!==(null!=(d=this.$inpOp)?d.get(0):void 0))?(null!=this.$inpOp&&this.model.set({operator:this.$inpOp.val()}),void c.__super__.select.apply(this,arguments)):void a.stopPropagation()},c.prototype._opSelected=function(){this.selectedOP=!0,this.focus()},c.prototype.focus=function(a){return null==a&&(a=!1),null==this.$inpOp||this.selectedOP?void c.__super__.focus.apply(this,arguments):void this.$inpOp.select2("open")},c.prototype.reopen=function(a){var b,d;d=this.result.first().get("value"),b=this.result.first(),this.model.set({value:d}),a.$results.empty().html(this.renderResult(!0)),c.__super__.reopen.apply(this,arguments)},c.prototype.getTemplateData=function(){return _.extend(c.__super__.getTemplateData.apply(this,arguments),{operators:this.model.get("operators"),operator:this.model.get("operator")})},c.prototype._onTabAction=function(a){var b;return b=this.getValue(),a.preventDefault(),a.stopPropagation(),isNaN(b)||this.select(),!0},c.prototype.getResults=function(){var a;return a=null!=this.$inpOp?{value:this.getValue(),operator:this.$inpOp.val()}:{value:this.getValue()}},c}(a("./number_base")),b.exports=d},{"../../tmpls/number.jade":16,"./number_base":28}],31:[function(a,b,c){var d,e=function(a,b){return function(){return a.apply(b,arguments)}},f=function(a,b){function c(){this.constructor=a}for(var d in b)g.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},g={}.hasOwnProperty;d=function(b){function c(){return this._onTabAction=e(this._onTabAction,this),this.getValue=e(this.getValue,this),this.getResults=e(this.getResults,this),this.close=e(this.close,this),this.select=e(this.select,this),this.reopen=e(this.reopen,this),this.focus=e(this.focus,this),this.render=e(this.render,this),this.renderResult=e(this.renderResult,this),this.events=e(this.events,this),this._getInpSelector=e(this._getInpSelector,this),c.__super__.constructor.apply(this,arguments)}return f(c,b),c.prototype.template=a("../../tmpls/range.jade"),c.prototype._getInpSelector=function(a){return null==a&&(a="_from"),"input#"+this.cid+a},c.prototype.events=function(){var a;return a={},a["keyup "+this._getInpSelector()]="input",a["keydown "+this._getInpSelector()]="input",a["keyup "+this._getInpSelector("_to")]="input",a["keydown "+this._getInpSelector("_to")]="input",a["blur "+this._getInpSelector()]="select",a["blur "+this._getInpSelector("_to")]="select",a},c.prototype.renderResult=function(a){var b;return null==a&&(a=!1),a?"
  • ":(b=this.getResults(),"
  • "+b.value.join(" - ")+"
  • ")},c.prototype.render=function(){c.__super__.render.apply(this,arguments),this.$inpTo=this.$el.find(this._getInpSelector("_to"))},c.prototype.focus=function(a){null==a&&(a=!1),c.__super__.focus.apply(this,arguments)},c.prototype.reopen=function(a){var b;b=this.result.first().get("value"),this.model.set({value:b}),a.$results.empty().html(this.renderResult(!0)),c.__super__.reopen.apply(this,arguments)},c.prototype.select=function(a){return null==a||(null!=a?a.relatedTarget:void 0)!==this.$inp.get(0)&&(null!=a?a.relatedTarget:void 0)!==this.$inpTo.get(0)?void c.__super__.select.apply(this,arguments):void a.stopPropagation()},c.prototype.close=function(){try{this.$(".rangeinp").remove()}catch(a){}c.__super__.close.apply(this,arguments)},c.prototype.getResults=function(){var a;return a={value:this.getValue()}},c.prototype.getValue=function(){var a,b,d;return b=c.__super__.getValue.apply(this,arguments),a=this.$inpTo.val(),(null!=a?a.length:void 0)?(d=parseInt(this.valueByDefinition(a),10),[b,d]):null},c.prototype._onTabAction=function(a){var b;return this.$inp.is(a.target)&&!a.shiftKey?(this.$inpTo.focus(),!1):this.$inpTo.is(a.target)&&a.shiftKey?(this.$inp.focus(),!1):(b=this.getValue(),!((null!=b?b.length:void 0)>=2)||(a.preventDefault(),a.stopPropagation(),this.select(),!0))},c}(a("./number_base")),b.exports=d},{"../../tmpls/range.jade":17,"./number_base":28}],32:[function(a,b,c){var d,e,f=function(a,b){return function(){return a.apply(b,arguments)}},g=function(a,b){function c(){this.constructor=a}for(var d in b)h.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},h={}.hasOwnProperty,i=[].indexOf||function(a){for(var b=0,c=this.length;b=this.selectCount},c.prototype.reopen=function(a){var b;if(!this._isFull())return b=this.result.pluck("value"),this.model.set({value:b}),a.$results.empty(),this.select2.$container.off(),this.select2.destroy(),this.result.reset(),this.select2=null,c.__super__.reopen.apply(this,arguments)},c.prototype._checkIntValue=function(a){var b,c,d;if(null==a&&(a=[]),!a||!a.length)return!1;for(c=0,d=a.length;c1&&(a.optionGroups=b),a},c.prototype._hasTabListener=function(a){return!a&&this.model.get("multiple")},c.prototype._hasTabEvent=function(){return"keyup"},c.prototype.getValue=function(){var a,b,c,d,e,f;for(a=[],f=(null!=(e=this._initSelect2())?e.data():void 0)||[],c=0,d=f.length;cc[a]?1:b[a]=0)?$(b.target).is(".search-btn")&&(null!=b?b.shiftKey:void 0)?(null!=b&&b.preventDefault(),null!=b&&b.stopPropagation(),void setTimeout(function(){return a.addFacet()},0)):(null!=(f=a.selectview)?f.isOpen:void 0)?(null!=b&&b.preventDefault(),null!=b&&b.stopPropagation(),void((null!=b?b.shiftKey:void 0)?(c=null!=(g=a.$addBtn)&&null!=(h=g.prevAll(".sub"))&&null!=(i=h.first())?i.data("fctid"):void 0,null!=c&&setTimeout(function(){var b;return null!=(b=a.facets[c])?b.reopen():void 0},0)):(a.selectview.close(),a.focusSearch()))):void a.trigger("escape",b,a._nextFacet):b.keyCode===d.ESC||(j=b.keyCode,k.call(d.ESC,j)>=0)?(a.exit(),void a.trigger("escape",b)):void 0}}(this))},c.prototype._nextFacet=function(a,b){var c,d,e,f;return d=(null!=a?a.shiftKey:void 0)?"prev":"next",c=null!=(f=b.$el)&&"function"==typeof f[d]?f[d]():void 0,c.hasClass("add-facet-btn")?(null!=a&&a.preventDefault(),null!=a&&a.stopPropagation(),void setTimeout(function(a){return function(){return a.addFacet()}}(this),0)):(e=null!=c?c.data("fctid"):void 0,void(null!=e&&(null!=a&&a.preventDefault(),setTimeout(function(a){return function(){var b;return null!=(b=a.facets[e])?b.reopen():void 0}}(this),0))))},c.prototype.focusSearch=function(){null!=this.$searchBtn&&this.$searchBtn.focus()},c.prototype._onSearch=function(a){a.stopPropagation(),this.exit(),this.trigger("searchbutton",this.searchButton.event)},c.prototype._onFocusSearch=function(a){var b;a.stopPropagation(),null!=(b=this.selectview)&&"function"==typeof b.close&&b.close()},c.prototype._outerClick=function(a){var b;a.stopPropagation(),b=this.el.compareDocumentPosition(a.target),0===b||b-16>=0||this.exit(!1)},c}(Backbone.View),b.exports=e},{"../tmpls/wrapper.jade":24,"../utils/keycodes":25,"./selector":35,"./sub":36}],35:[function(a,b,c){var d,e,f=function(a,b){return function(){return a.apply(b,arguments)}},g=function(a,b){function c(){this.constructor=a}for(var d in b)h.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},h={}.hasOwnProperty;d=a("../utils/keycodes"),e=function(b){function c(a){this.selectActive=f(this.selectActive,this),this.select=f(this.select,this),this.move=f(this.move,this),this.search=f(this.search,this),this.open=f(this.open,this),this.focus=f(this.focus,this),this.selected=f(this.selected,this),this._onTabAction=f(this._onTabAction,this),this._isFull=f(this._isFull,this),this._onClick=f(this._onClick,this),this.checkOptionsEmpty=f(this.checkOptionsEmpty,this),this.scrollHelper=f(this.scrollHelper,this),this._checkScroll=f(this._checkScroll,this),this.renderRes=f(this.renderRes,this),this.render=f(this.render,this),this.getTemplateData=f(this.getTemplateData,this),this.initialize=f(this.initialize,this),this.events=f(this.events,this),this.className=f(this.className,this),this.custom=a.custom||!1,this.activeIdx=0,this.currQuery="",null!=a.main&&(this.main=a.main),c.__super__.constructor.call(this,a)}return g(c,b),c.prototype.template=a("../tmpls/selector.jade"),c.prototype.templateEl=a("../tmpls/selectorli.jade"),c.prototype.selectCount=1,c.prototype.className=function(){var a;return a=["add-facet"],this.custom&&a.push("custom"),a.join(" ")},c.prototype.events=function(){var a;return a={"mousedown a":"_onClick"},a["focus input#"+this.cid]="open",a["keydown input#"+this.cid]="search",a["keyup input#"+this.cid]="search",a},c.prototype.initialize=function(a){c.__super__.initialize.apply(this,arguments),this.searchcoll=this.collection.sub(function(){return!0}),this.result=new this.collection.constructor,this.listenTo(this.searchcoll,"add",this.renderRes),this.listenTo(this.searchcoll,"remove",this.renderRes),this.listenTo(this.searchcoll,"remove",this.checkOptionsEmpty)},c.prototype.getTemplateData=function(){return _.extend(c.__super__.getTemplateData.apply(this,arguments),{custom:this.custom})},c.prototype.render=function(){return c.__super__.render.apply(this,arguments),this.$list=this.$el.find("#"+this.cid+"typelist"),this.renderRes(),this.el},c.prototype.renderRes=function(){var a,b,c,d,e,f,g,h,i,j,k;for(this.$list.empty(),d=[],j=this.searchcoll.models,g=f=0,h=j.length;f1&&(c=c.replace(new RegExp(this.currQuery,"gi"),function(a){return""+a+""})),d.push({label:c,id:b,cssclass:a}));return this.$list.append(this.templateEl({list:d,query:this.currQuery,activeIdx:this.activeIdx,custom:this.custom})),this._checkScroll(),this.$list},c.prototype._scrollTill=198,c.prototype._checkScroll=function(){var a;return a=this.$list.height(),a>0?void this.scrollHelper(a):void setTimeout(function(a){return function(){return a.scrollHelper(a.$list.height())}}(this),0)},c.prototype.scrollHelper=function(a){a>=this._scrollTill?this.scrolling=!0:this.scrolling=!1},c.prototype.checkOptionsEmpty=function(){},c.prototype._onClick=function(a){var b,c;if(a.stopPropagation(),a.preventDefault(),b=this.$(a.currentTarget).data("id"),null!=b&&(c=this.collection.get(b),null!=c))return this.selected(c),!1},c.prototype._isFull=function(){return!0},c.prototype._onTabAction=function(a){null!=this.main?(a.preventDefault(),a.stopPropagation(),this.main.focusSearch()):c.__super__._onTabAction.call(this,event)},c.prototype.selected=function(a){var b,c,d,e;null==this.main&&this._isFull()&&(d=null!=(e=this.result.last())?e.id:void 0,this.rmRes(d));try{if(null!=a.onlyExec)return void(null!=a&&"function"==typeof a.exec&&a.exec())}catch(a){b=a;try{console.error("Issue #23: CATCH - Class:"+this.constructor.name+" - activeIdx:"+this.activeIdx+" - collection:"+JSON.stringify(this.collection.toJSON()))}catch(a){c=a,console.error("Issue #23: CATCH")}}null!=a&&(this.searchcoll.remove(a),this.result.add(a),this.trigger("selected",a)),this._isFull()&&this.close()},c.prototype.focus=function(){var a;this.$inp.focus(),a=this.$inp.get(0),a.selectionStart=a.selectionEnd=a.value.length},c.prototype.open=function(){return this.trigger("opened"),c.__super__.open.apply(this,arguments)},c.prototype.search=function(a){var b;if("keydown"!==(null!=a?a.type:void 0))b=_.isString(a)?a:a.currentTarget.value.toLowerCase(),b!==this.currQuery&&(this.currQuery=b,this.searchcoll.updateSubFilter(function(a){return function(c){var d;return null==a.result.get(c.id)&&(null==b||!b.length||(d=c.match(b)))}}(this),!1),this.activeIdx=0,this.renderRes());else switch(a.keyCode){case d.UP:return void this.move(!0);case d.DOWN:return void this.move(!1);case d.ENTER:return void this.selectActive(!0)}},c.prototype.move=function(a){var b,c,d,e,f,g,h,i,j,k;if(null==a&&(a=!1),f=this.$el.find(".typelist a"),d=(null!=(k=this.currQuery)?k.length:void 0)?0:1,j=0,a){if(this.activeIdx-1i+this._scrollTill?c.scrollTop(h-this._scrollTill):h=0&&this.searchcoll.length)this.selected(this.collection.get(d.id));else{if(null==(f=this.currQuery)||!f.length)return;this.selected(new this.collection.model({value:this.currQuery,custom:!0})),this.$inp.val("")}},c}(a("./facets/base")),b.exports=e},{"../tmpls/selector.jade":20,"../tmpls/selectorli.jade":21,"../utils/keycodes":25,"./facets/base":26}],36:[function(a,b,c){var d,e=function(a,b){return function(){return a.apply(b,arguments)}},f=function(a,b){function c(){this.constructor=a}for(var d in b)g.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},g={}.hasOwnProperty;d=function(b){function c(){return this.open=e(this.open,this),this.attachSubEvents=e(this.attachSubEvents,this),this.generateSub=e(this.generateSub,this),this.close=e(this.close,this),this.focus=e(this.focus,this),this.isOpen=e(this.isOpen,this),this.renderResult=e(this.renderResult,this),this.removed=e(this.removed,this),this.selected=e(this.selected,this),this.remove=e(this.remove,this),this.del=e(this.del,this),this.reopen=e(this.reopen,this),this.render=e(this.render,this),this.initialize=e(this.initialize,this),this.className=e(this.className,this),c.__super__.constructor.apply(this,arguments)}return f(c,b),c.prototype.template=a("../tmpls/sub.jade"),c.prototype.className=function(){var a,b,c;return b="sub",c=this.model.get("type"),null!=c&&(b+=" sub-type-"+c),a=this.model.get("name"),null!=a&&(b+=" sub-name-"+a),b},c.prototype.initialize=function(a){this._isOpen=!1,this.result=new Backbone.Collection,this.$el.on("click",this.reopen),this.parent=a.parent,this.$el.data("fctid",this.model.id),this.parent.on("escape",function(a){return function(b,c){var d;a._isOpen&&(null!=(d=a.selectview)?d._onTabAction(b):void 0)&&null!=c&&c(b,a)}}(this))},c.prototype.events={"click .rm-facet-btn":"del"},c.prototype.render=function(a){var b,c,d,e,f,g,h,i;for(d=[],i=this.result.models,f=e=0,g=i.length;e":">",'"':"""},i=/[&<>"]/g;c.escape=g,c.rethrow=function b(c,d,e,f){if(!(c instanceof Error))throw c;if(!("undefined"==typeof window&&d||f))throw c.message+=" on line "+e,c;try{f=f||a("fs").readFileSync(d,"utf8")}catch(a){b(c,null,e)}var g=3,h=f.split("\n"),i=Math.max(e-g,0),j=Math.min(h.length,e+g),g=h.slice(i,j).map(function(a,b){var c=b+i+1;return(c==e?" > ":" ")+c+"| "+a}).join("\n");throw c.path=d,c.message=(d||"Jade")+":"+e+"\n"+g+"\n\n"+c.message,c},c.DebugItem=function(a,b){this.lineno=a,this.filename=b}},{fs:2}],2:[function(a,b,c){},{}]},{},[1])(1)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{fs:37}],39:[function(a,b,c){(function(){var a,c,d;d={}.toString,c=Array.isArray||function(a){return"[object Array]"===d.call(a)},a=function(a,b){return a[b]},b.exports=function(b,d,e){var f,g;return null==d&&(d=!0),null==e&&(e=a),c(b)||(b=[b]),(f=function(a,b,c){var d,g,h,i;return(null!=c?c.length:void 0)&&(g=null!=(i=c.splice(0,1))?i[0]:void 0,null!=g&&(h=f(a,g,c))),d=null!=a[b]?a[b]:null!=a["?"]?a["?"]:a,function(a,c){var f,g;return f=e(a,b),g=e(c,b),fg?d?1:-1:f===g?null!=h?h(a,c):0:void 0}})(d,null!=(g=b.splice(0,1))?g[0]:void 0,b)}}).call(this)},{}]},{},[1])(1)}); \ No newline at end of file +!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.IGGY=a()}}(function(){var a;return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g1)throw this._error("ESIZEELJQUERY");return a}if(a instanceof Element)return this.$(a);throw this._error("EINVALIDELTYPE")},b.prototype._prepareFacets=function(a,b){var c,e,f,g,h,i;for(null==b&&(b={}),f=[],e=h=0,i=a.length;h=0&&this.add(k)}return this},b.prototype._generateSubFilter=function(a){var b;return b=_.isFunction(a)?a:_.isArray(a)?function(b){var c;return c=b.id,h.call(a,c)>=0}:_.isString(a)||_.isNumber(a)?function(b){return b.id===a}:function(b){var c,d;for(c in a)if(d=a[c],b.get(c)!==d)return!1;return!0}},b}(Backbone.Collection),b.exports=d},{}],3:[function(a,b,c){var d,e=function(a,b){function c(){this.constructor=a}for(var d in b)f.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},f={}.hasOwnProperty;d=function(b){function c(){return c.__super__.constructor.apply(this,arguments)}return e(c,b),c.prototype.SubView=a("../views/facets/subarray"),c}(a("./facet_string")),b.exports=d},{"../views/facets/subarray":29,"./facet_string":10}],4:[function(a,b,c){var d,e=function(a,b){return function(){return a.apply(b,arguments)}},f=function(a,b){function c(){this.constructor=a}for(var d in b)g.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},g={}.hasOwnProperty;d=function(b){function c(a,b){this.match=e(this.match,this),this.getLabel=e(this.getLabel,this),this.main=b.main,c.__super__.constructor.apply(this,arguments)}return f(c,b),c.prototype.idAttribute="name",c.prototype.SubView=a("../views/facets/base"),c.prototype.defaults=function(){return{type:"string",name:"name",label:"Description",sort:0}},c.prototype.getLabel=function(){return this.get("label")},c.prototype.match=function(a){var b,c;return b=this.get("name")+" "+this.get("label"),c=b.toLowerCase().indexOf(a.toLowerCase()),c>=0},c.prototype.comparator=function(a){return a.id},c}(Backbone.Model),b.exports=d},{"../views/facets/base":26}],5:[function(a,b,c){var d,e=function(a,b){return function(){return a.apply(b,arguments)}},f=function(a,b){function c(){this.constructor=a}for(var d in b)g.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},g={}.hasOwnProperty;d=function(b){function c(){return this.defaults=e(this.defaults,this),c.__super__.constructor.apply(this,arguments)}return f(c,b),c.prototype.SubView=a("../views/facets/daterange"),c.prototype.defaults=function(){return $.extend(c.__super__.defaults.apply(this,arguments),{opts:{},value:null})},c}(a("./facet_base")),b.exports=d},{"../views/facets/daterange":27,"./facet_base":4}],6:[function(a,b,c){var d,e=function(a,b){return function(){return a.apply(b,arguments)}},f=function(a,b){function c(){this.constructor=a}for(var d in b)g.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},g={}.hasOwnProperty;d=function(a){function b(){return this.exec=e(this.exec,this),this.defaults=e(this.defaults,this),b.__super__.constructor.apply(this,arguments)}return f(b,a),b.prototype.SubView=null,b.prototype.onlyExec=!0,b.prototype.defaults=function(){return $.extend(b.__super__.defaults.apply(this,arguments),{options:[]})},b.prototype.exec=function(){this.main.trigger(this.get("event"),this.toJSON())},b}(a("./facet_base")),b.exports=d},{"./facet_base":4}],7:[function(a,b,c){var d,e=function(a,b){return function(){return a.apply(b,arguments)}},f=function(a,b){function c(){this.constructor=a}for(var d in b)g.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},g={}.hasOwnProperty;d=function(b){function c(){return this.defaults=e(this.defaults,this),c.__super__.constructor.apply(this,arguments)}return f(c,b),c.prototype.SubView=a("../views/facets/subnumber"),c.prototype.defaults=function(){return $.extend(c.__super__.defaults.apply(this,arguments),{min:null,max:null,step:1,value:null})},c}(a("./facet_base")),b.exports=d},{"../views/facets/subnumber":30,"./facet_base":4}],8:[function(a,b,c){var d,e=function(a,b){return function(){return a.apply(b,arguments)}},f=function(a,b){function c(){this.constructor=a}for(var d in b)g.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},g={}.hasOwnProperty;d=function(b){function c(){return this.defaults=e(this.defaults,this),c.__super__.constructor.apply(this,arguments)}return f(c,b),c.prototype.SubView=a("../views/facets/subrange"),c.prototype.defaults=function(){return $.extend(c.__super__.defaults.apply(this,arguments),{min:null,max:null,step:1,value:null})},c}(a("./facet_base")),b.exports=d},{"../views/facets/subrange":31,"./facet_base":4}],9:[function(a,b,c){var d,e=function(a,b){return function(){return a.apply(b,arguments)}},f=function(a,b){function c(){this.constructor=a}for(var d in b)g.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},g={}.hasOwnProperty;d=function(b){function c(){return this.defaults=e(this.defaults,this),c.__super__.constructor.apply(this,arguments)}return f(c,b),c.prototype.SubView=a("../views/facets/subselect"),c.prototype.defaults=function(){return $.extend(c.__super__.defaults.apply(this,arguments),{options:[],waitForAsync:!0})},c}(a("./facet_base")),b.exports=d},{"../views/facets/subselect":32,"./facet_base":4}],10:[function(a,b,c){var d,e=function(a,b){return function(){return a.apply(b,arguments)}},f=function(a,b){function c(){this.constructor=a}for(var d in b)g.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},g={}.hasOwnProperty;d=function(b){function c(){return this.defaults=e(this.defaults,this),c.__super__.constructor.apply(this,arguments)}return f(c,b),c.prototype.SubView=a("../views/facets/substring"),c.prototype.defaults=function(){return $.extend(c.__super__.defaults.apply(this,arguments),{options:[]})},c}(a("./facet_base")),b.exports=d},{"../views/facets/substring":33,"./facet_base":4}],11:[function(a,b,c){var d,e,f,g=function(a,b){return function(){return a.apply(b,arguments)}},h=function(a,b){function c(){this.constructor=a}for(var d in b)i.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},i={}.hasOwnProperty;f=a("sortcoll"),e=function(a,b){return a.get(b)},d=function(a){function b(a,c){var d;return null==c&&(c={}),this._subCollecctionOptions=g(this._subCollecctionOptions,this),null==c.comparator&&(d=function(){switch(c.dir){case"asc":return!0;case"desc":return!1;default:return!0}}(),c.comparator=f(["sort"].concat(c.sortby||"name"),{sort:!1,"?":d},e)),b.__super__.constructor.call(this,a,c)}return h(b,a),b.prototype._subCollecctionOptions=function(){var a;return a=b.__super__._subCollecctionOptions.apply(this,arguments),a.dir=this.forward?"asc":"desc",a},b.prototype.modelId=function(a){return a.name},b}(a("./backbone_sub")),b.exports=d},{"./backbone_sub":2,sortcoll:39}],12:[function(a,b,c){var d,e,f=function(a,b){function c(){this.constructor=a}for(var d in b)g.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},g={}.hasOwnProperty,h=function(a,b){return function(){return a.apply(b,arguments)}};d=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return f(b,a),b.prototype.idAttribute="name",b.prototype.defaults={type:"string",name:null,value:null},b}(Backbone.Model),e=function(a){function b(){return this.parse=h(this.parse,this),this.initialize=h(this.initialize,this),b.__super__.constructor.apply(this,arguments)}return f(b,a),b.prototype.model=d,b.prototype.initialize=function(a,b){var c;(null!=(c=b.modifyKey)?c.length:void 0)&&(this.modifyKey=b.modifyKey)},b.prototype.parse=function(a,b){var c,d,e;return c=b._facet.get("modifyKey")||this.modifyKey||"value",d=null!=(e=b._facet)?e.get("modify"):void 0,null!=d&&_.isFunction(d)&&(a[c]=d(a.value,b._facet,a)),a},b}(a("./backbone_sub")),b.exports=e},{"./backbone_sub":2}],13:[function(a,b,c){var d,e,f=function(a,b){return function(){return a.apply(b,arguments)}},g=function(a,b){function c(){this.constructor=a}for(var d in b)h.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},h={}.hasOwnProperty;d=function(a){function b(){return this.getLabel=f(this.getLabel,this),b.__super__.constructor.apply(this,arguments)}return g(b,a),b.prototype.idAttribute="value",b.prototype.getLabel=function(){return this.get("label")||this.get(this.idAttribute)||""},b}(Backbone.Model),e=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return g(b,a),b.prototype.model=d,b}(a("./backbone_sub")),b.exports=e},{"./backbone_sub":2}],14:[function(a,b,c){var d=a("jade/runtime");b.exports=function(a){var b,c=[],e=a||{};return function(a,e,f){c.push(''+d.escape(null==(b=f)?"":b)+''),a&&c.push("'),c.push("")}.call(this,"custom"in e?e.custom:"undefined"!=typeof custom?custom:void 0,"id"in e?e.id:"undefined"!=typeof id?id:void 0,"txt"in e?e.txt:"undefined"!=typeof txt?txt:void 0),c.join("")}},{"jade/runtime":38}],15:[function(a,b,c){var d=a("jade/runtime");b.exports=function(a){var b=[],c=a||{};return function(a){b.push("')}.call(this,"cid"in c?c.cid:"undefined"!=typeof cid?cid:void 0),b.join("")}},{"jade/runtime":38}],16:[function(a,b,c){var d=a("jade/runtime");b.exports=function(a){var b,c=[],e=a||{};return function(a,e,f,g,h){f&&f.length&&(c.push('
    "),function(){var a=f;if("number"==typeof a.length)for(var g=0,h=a.length;g"+d.escape(null==(b=i)?"":b)+"")}else{var h=0;for(var g in a){h++;var i=a[g];c.push(""+d.escape(null==(b=i)?"":b)+"")}}}.call(this),c.push("
    ")),c.push("')}.call(this,"cid"in e?e.cid:"undefined"!=typeof cid?cid:void 0,"operator"in e?e.operator:"undefined"!=typeof operator?operator:void 0,"operators"in e?e.operators:"undefined"!=typeof operators?operators:void 0,"undefined"in e?e.undefined:void 0,"value"in e?e.value:"undefined"!=typeof value?value:void 0),c.join("")}},{"jade/runtime":38}],17:[function(a,b,c){var d=a("jade/runtime");b.exports=function(a){var b=[],c=a||{};return function(a,c){b.push('
    ');var e=c?c:[];b.push("-
    ')}.call(this,"cid"in c?c.cid:"undefined"!=typeof cid?cid:void 0,"value"in c?c.value:"undefined"!=typeof value?value:void 0),b.join("")}},{"jade/runtime":38}],18:[function(a,b,c){a("jade/runtime");b.exports=function(a){var b=[];return b.join("")}},{"jade/runtime":38}],19:[function(a,b,c){var d=a("jade/runtime");b.exports=function(a){var b,c=[],e=a||{};return function(a,e,f,g,h,i){c.push("'),f?function(){var a=f;if("number"==typeof a.length)for(var e=0,g=a.length;e"),function(){var a=h;if("number"==typeof a.length)for(var e=0,f=a.length;e=0,!0,!1)+">"+d.escape(null==(b=g.label)?"":b)+"")}else{var f=0;for(var e in a){f++;var g=a[e];c.push("=0,!0,!1)+">"+d.escape(null==(b=g.label)?"":b)+"")}}}.call(this)}else{var g=0;for(var e in a){g++;var h=a[e];c.push(""),function(){var a=h;if("number"==typeof a.length)for(var e=0,f=a.length;e=0,!0,!1)+">"+d.escape(null==(b=g.label)?"":b)+"")}else{var f=0;for(var e in a){f++;var g=a[e];c.push("=0,!0,!1)+">"+d.escape(null==(b=g.label)?"":b)+"")}}}.call(this)}}}.call(this):function(){var a=g;if("number"==typeof a.length)for(var e=0,f=a.length;e=0,!0,!1)+">"+d.escape(null==(b=h.label)?"":b)+"")}else{var f=0;for(var e in a){f++;var h=a[e];c.push("=0,!0,!1)+">"+d.escape(null==(b=h.label)?"":b)+"")}}}.call(this),c.push(""),e&&c.push('')}.call(this,"cid"in e?e.cid:"undefined"!=typeof cid?cid:void 0,"multiple"in e?e.multiple:"undefined"!=typeof multiple?multiple:void 0,"optionGroups"in e?e.optionGroups:"undefined"!=typeof optionGroups?optionGroups:void 0,"options"in e?e.options:"undefined"!=typeof options?options:void 0,"undefined"in e?e.undefined:void 0,"value"in e?e.value:"undefined"!=typeof value?value:void 0),c.join("")}},{"jade/runtime":38}],20:[function(a,b,c){var d=a("jade/runtime");b.exports=function(a){var b=[],c=a||{};return function(a,c){b.push("')}.call(this,"cid"in c?c.cid:"undefined"!=typeof cid?cid:void 0,"inpval"in c?c.inpval:"undefined"!=typeof inpval?inpval:void 0),b.join("")}},{"jade/runtime":38}],21:[function(a,b,c){var d=a("jade/runtime");b.exports=function(a){var b,c=[],e=a||{};return function(a,e,f,g,h){var i=0;e&&g&&(i=1,c.push('
  • "'+(null==(b=g)?"":b)+'"
  • ')),f.length?function(){var e=f;if("number"==typeof e.length)for(var g=0,h=e.length;g"+(null==(b=j.label)?"":b)+"")}else{var h=0;for(var g in e){h++;var j=e[g];c.push(""+(null==(b=j.label)?"":b)+"")}}}.call(this):e||c.push('
  • no result for "'+d.escape(null==(b=g)?"":b)+'"
  • ')}.call(this,"activeIdx"in e?e.activeIdx:"undefined"!=typeof activeIdx?activeIdx:void 0,"custom"in e?e.custom:"undefined"!=typeof custom?custom:void 0,"list"in e?e.list:"undefined"!=typeof list?list:void 0,"query"in e?e.query:"undefined"!=typeof query?query:void 0,"undefined"in e?e.undefined:void 0),c.join("")}},{"jade/runtime":38}],22:[function(a,b,c){var d=a("jade/runtime");b.exports=function(a){var b=[],c=a||{};return function(a,c){b.push("')}.call(this,"cid"in c?c.cid:"undefined"!=typeof cid?cid:void 0,"value"in c?c.value:"undefined"!=typeof value?value:void 0),b.join("")}},{"jade/runtime":38}],23:[function(a,b,c){var d=a("jade/runtime");b.exports=function(a){var b,c=[],e=a||{};return function(a,e,f,g){e||c.push('
    '),c.push(''+d.escape(null==(b=a)?"":b)+':
      '),f&&f.length&&function(){var a=f;if("number"==typeof a.length)for(var e=0,g=a.length;e'+d.escape(null==(b=h)?"":b)+'')}else{var g=0;for(var e in a){g++;var h=a[e];c.push('
    • '+d.escape(null==(b=h)?"":b)+'
    • ')}}}.call(this),c.push('
    ')}.call(this,"label"in e?e.label:"undefined"!=typeof label?label:void 0,"pinned"in e?e.pinned:"undefined"!=typeof pinned?pinned:void 0,"selected"in e?e.selected:"undefined"!=typeof selected?selected:void 0,"undefined"in e?e.undefined:void 0),c.join("")}},{"jade/runtime":38}],24:[function(a,b,c){var d=a("jade/runtime");b.exports=function(a){var b,c=[],e=a||{};return function(a){c.push(''),void 0!=a&&void 0!=a.template&&a.template.length>=0&&c.push(""+(null==(b=a.template)?"":b)+"")}.call(this,"searchButton"in e?e.searchButton:"undefined"!=typeof searchButton?searchButton:void 0),c.join("")}},{"jade/runtime":38}],25:[function(a,b,c){b.exports={LEFT:37,RIGHT:39,UP:38,DOWN:40,ESC:[229,27],ENTER:13,TAB:9}},{}],26:[function(a,b,c){var d,e,f,g=function(a,b){return function(){return a.apply(b,arguments)}},h=function(a,b){function c(){this.constructor=a}for(var d in b)i.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},i={}.hasOwnProperty,j=[].indexOf||function(a){for(var b=0,c=this.length;b"+c.join("
  • ")+"
  • ":""},c.prototype.open=function(){this.$el.removeClass("closed"),this.$el.addClass("open"),this.isOpen=!0,this.trigger("opened")},c.prototype.input=function(a){if("keydown"===a.type)switch(a.keyCode){case e.ENTER:this.select()}},c.prototype._onKey=function(a){var b;if(a.keyCode===e.TAB||(b=a.keyCode,j.call(e.TAB,b)>=0))return void this._onTabAction(a)},c.prototype.getTemplateData=function(){var a,b;return b={cid:this.cid,value:null!=(a=this.model)?a.get("value"):void 0}},c.prototype._getInpSelector=function(){return"input#"+this.cid},c.prototype.reopen=function(a){this.$el.removeClass("closed"),this.$el.addClass("open"),this.render(),null!=a&&a.open()},c.prototype.render=function(a){var b;b=this.template(this.getTemplateData()),this.$el.html(b),a||this.$el.removeClass("closed"),this.$inp=this.$el.find(this._getInpSelector())},c.prototype._hasTabEvent=function(){return"keydown"},c.prototype._hasTabListener=function(){return!0},c.prototype._onTabAction=function(a){return a.preventDefault(),a.stopPropagation(),this.select(),!0},c.prototype.close=function(a){this.focused=!1,this.$el.removeClass("open"),this.$el.addClass("closed"),this.isOpen=!1,this.trigger("closed",this.result,a)},c.prototype.getResults=function(){return{value:this.getValue()}},c.prototype.isResultEmpty=function(a){return null!=(null!=a?a.value:void 0)?this.isResultEmpty(a.value):null==a||(""===a||!!(_.isArray(a)&&a.length<=0))},c.prototype.getResValue=function(){var a,b,c;return c=null!=(a=this.result)&&null!=(b=a.first())?b.toJSON():void 0,(null!=c?c.value:void 0)||""},c.prototype.isEqualCurrent=function(a){var b;return null==a&&(a=this.getValue()),b=this.getResValue(),b===a},c.prototype.getValue=function(){return this.$inp.val()},c.prototype.getSelectModel=function(){return f.prototype.model},c.prototype._checkSelectEmpty=function(a,b){return!(!_.isEmpty(a)||_.isNumber(a)||_.isBoolean(a))&&(this.close(b),!0)},c.prototype.select=function(a){var b;b=this.getValue(),this._checkSelectEmpty(b,a)||this.set(b,a)},c.prototype.set=function(a,b){var c,d;d=this.result.first(),null==d?(c=this.getSelectModel(),d=new c({value:a}),this.result.add(d)):d.set({value:a}),this.trigger("selected",d,b),this.close(b)},c}(Backbone.View),b.exports=d},{"../../models/subresults":13,"../../tmpls/result_base.jade":18,"../../utils/keycodes":25}],27:[function(a,b,c){var d,e,f=function(a,b){return function(){return a.apply(b,arguments)}},g=function(a,b){function c(){this.constructor=a}for(var d in b)h.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},h={}.hasOwnProperty;e=a("../../utils/keycodes"),d=function(b){function c(){return this.select=f(this.select,this),this.getValue=f(this.getValue,this),this.getTemplateData=f(this.getTemplateData,this),this._dateReturn=f(this._dateReturn,this),this.renderResult=f(this.renderResult,this),this.remove=f(this.remove,this),this.close=f(this.close,this),this.focus=f(this.focus,this),this.events=f(this.events,this),this.forcedDateRangeOpts=f(this.forcedDateRangeOpts,this),c.__super__.constructor.apply(this,arguments)}return g(c,b),c.prototype.template=a("../../tmpls/daterange.jade"),c.prototype.forcedDateRangeOpts=function(){var a,b,c,d,e,f;return b={opens:"right"},this.model.get("dateformat")&&(b.locale={format:this.model.get("dateformat")}),null!=(null!=(d=this.model.get("value"))?d[0]:void 0)&&(null!=(null!=(e=this.model.get("value"))?e[1]:void 0),c=_.isNumber(this.model.get("value")[0])?moment(this.model.get("value")[0]):moment(this.model.get("value")[0],this.model.get("dateformat")),c.isValid()&&(b.startDate=c._d)),null!=(null!=(f=this.model.get("value"))?f[1]:void 0)&&(a=_.isNumber(this.model.get("value")[1])?moment(this.model.get("value")[1]):moment(this.model.get("value")[1],this.model.get("dateformat")),a.isValid()&&(b.endDate=a._d)),b},c.prototype.events=function(){},c.prototype.focus=function(){var a,b;return null==this.daterangepicker?(a=_.extend({},this.model.get("opts"),this.forcedDateRangeOpts()),this.$inp.daterangepicker(a,this._dateReturn),this.daterangepicker=this.$inp.data("daterangepicker"),null!=(b=this.daterangepicker.container)&&b.addClass("daterange-iggy"),this.daterangepicker.container.on("click",function(a){return a.stopPropagation(),!1})):(this.daterangepicker.element=this.$inp,this.daterangepicker.show()),this.$inp.on("cancel.daterangepicker",this.close),this.$inp.on("hide.daterangepicker",this.close),c.__super__.focus.apply(this,arguments)},c.prototype.close=function(){c.__super__.close.apply(this,arguments),this.$inp.off("cancel.daterangepicker",this.close),this.$inp.off("hide.daterangepicker",this.close)},c.prototype.remove=function(){var a;return null!=(a=this.daterangepicker)&&a.remove(),this.daterangepicker=null,c.__super__.remove.apply(this,arguments)},c.prototype.renderResult=function(){var a,b,c,d,e,f;return c=this.getResults(),e=_.isNumber(c.value[0])?moment(c.value[0]):moment(c.value[0],this.model.get("dateformat")),null!=c.value[1]&&(a=_.isNumber(c.value[1])?moment(c.value[1]):moment(c.value[1],this.model.get("dateformat"))),f=this.model.get("opts").timePicker,d="
  • ",b=null!=this.model.get("dateformat")?this.model.get("dateformat"):f?"LLLL":"LL",d+=e.format(b),null!=a&&(d+=" - ",d+=a.format(b)),d+="
  • "},c.prototype._hasTabListener=function(){return!1},c.prototype._dateReturn=function(a,b){this.startDate=a,this.endDate=b,this.model.set("value",this.getValue(!1)),this.select()},c.prototype.getTemplateData=function(){return c.__super__.getTemplateData.apply(this,arguments)},c.prototype.getValue=function(a){var b,c;return null==a&&(a=!0),a&&(c=this.model.get("value"),null!=c)?(_.isArray(c)||(c=[c]),this.startDate=c[0],this.endDate=c[1],c):(b=[this.startDate.valueOf()],null!=this.endDate&&b.push(this.endDate.valueOf()),b)},c.prototype.select=function(){var a,b;a=this.getSelectModel(),b=new a({value:this.getValue()}),this.result.add(b),this.trigger("selected",b),this.close()},c}(a("./base")),b.exports=d},{"../../tmpls/daterange.jade":15,"../../utils/keycodes":25,"./base":26}],28:[function(a,b,c){var d,e,f,g,h=function(a,b){return function(){return a.apply(b,arguments)}},i=function(a,b){function c(){this.constructor=a}for(var d in b)j.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},j={}.hasOwnProperty;e=a("../../utils/keycodes"),f=function(a,b){return a/=b,a=Math.round(a)*b},g=function(a,b){return b=Math.pow(10,b),a*=b,a=Math.round(a),a/=b},d=function(a){function b(){this._setNumber=h(this._setNumber,this), +this.getValue=h(this.getValue,this),this.crement=h(this.crement,this),this.input=h(this.input,this),this.events=h(this.events,this),this.setNumber=_.throttle(this._setNumber,300,{leading:!1,trailing:!1}),b.__super__.constructor.apply(this,arguments)}return i(b,a),b.prototype.events=function(){var a;return a={},a["keyup "+this._getInpSelector()]="input",a["keydown "+this._getInpSelector()]="input",a},b.prototype.input=function(a){var b,c;if(b=$(a.currentTarget),"keydown"===a.type)switch(a.keyCode){case e.UP:return void this.crement(this.model.get("step"),b);case e.DOWN:return void this.crement(this.model.get("step")*-1,b);case e.ENTER:return void this.select()}"keyup"===a.type&&(c=a.currentTarget.value.replace(/[^\d]?[^-\d]+/g,""),c=parseInt(c,10),this.setNumber(c,b))},b.prototype.crement=function(a,b){var c;null==b&&(b=this.$inp),c=b.val(),c=(null!=c?c.length:void 0)?parseInt(c,10):this.model.get("value"),this._setNumber(c+a,b)},b.prototype.getValue=function(){var a,b;return b=this.$inp.val(),(null!=b?b.length:void 0)?(a=parseInt(b,10),isNaN(a)?null:this.valueByDefinition(b)):null},b.prototype._setNumber=function(a,b){var c;null==b&&(b=this.$inp),isNaN(a)||(c=b.val(),a=this.valueByDefinition(a),c!==a.toString()&&b.val(a))},b.prototype.valueByDefinition=function(a){var b,c,d,e,h;return d=this.model.get("max"),e=this.model.get("min"),h=this.model.get("step"),e>d&&(c=e,e=d,d=c),null!=e&&ad?d:(1!==h&&(a=f(a,h)),b=Math.max(0,Math.ceil(Math.log(1/h)/Math.log(10))),a=b>0?g(a,b):Math.round(a))},b}(a("./base")),b.exports=d},{"../../utils/keycodes":25,"./base":26}],29:[function(a,b,c){var d,e,f,g,h,i,j,k=function(a,b){return function(){return a.apply(b,arguments)}},l=function(a,b){function c(){this.constructor=a}for(var d in b)m.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},m={}.hasOwnProperty;j=a("../../models/subresults"),g=a("../../utils/keycodes"),h=function(a){function b(){return this.match=k(this.match,this),b.__super__.constructor.apply(this,arguments)}return l(b,a),b.prototype.match=function(a){var b,c;return b=this.get("value")+" "+this.get("label"),c=b.toLowerCase().indexOf(a.toLowerCase()),c>=0},b}(j.prototype.model),i=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return l(b,a),b.prototype.model=h,b}(j),d=function(a){function b(){return this.match=k(this.match,this),this.getLabel=k(this.getLabel,this),b.__super__.constructor.apply(this,arguments)}return l(b,a),b.prototype.idAttribute="value",b.prototype.getLabel=function(){return this.get("label")||this.get("name")||"-"},b.prototype.match=function(a){var b,c;return b=this.get("value")+" "+this.get("label"),c=b.toLowerCase().indexOf(a.toLowerCase()),c>=0},b}(Backbone.Model),e=function(a){function b(){return b.__super__.constructor.apply(this,arguments)}return l(b,a),b.prototype.model=d,b}(a("../../models/backbone_sub")),f=function(b){function c(a){this._createOptionCollection=k(this._createOptionCollection,this),this._onTabAction=k(this._onTabAction,this),this.getResults=k(this.getResults,this),this.reopen=k(this.reopen,this),this.select=k(this.select,this),this._isFull=k(this._isFull,this),this.renderResult=k(this.renderResult,this),this.getTemplateData=k(this.getTemplateData,this),this.editRes=k(this.editRes,this),this.rmRes=k(this.rmRes,this),this.close=k(this.close,this),this.events=k(this.events,this),this.initialize=k(this.initialize,this),this.loading=!1,null!=a.model.get("count")&&(this.selectCount=a.model.get("count")),a.custom=!0,null!=a.model.get("custom")&&(a.custom=Boolean(a.model.get("custom"))),this.collection=this._createOptionCollection(a.model.get("options")),!a.custom&&this.selectCount<=0&&(this.selectCount=this.collection.length),c.__super__.constructor.call(this,a),this.result.on("remove",function(b){return function(c,d){d.length&&a.sub.renderResult(),b.searchcoll.add(c),b.trigger("removed",c)}}(this))}return l(c,b),c.prototype.templateResLi=a("../../tmpls/array_resultli.jade"),c.prototype.optDefault={label:"-",value:"-"},c.prototype.selectCount=0,c.prototype.optColl=i,c.prototype.initialize=function(){return this.editMode=!1,c.__super__.initialize.apply(this,arguments)},c.prototype.events=function(){var a;return a=c.__super__.events.apply(this,arguments),a["blur input#"+this.cid]="close",a},c.prototype.close=function(a){var b,d;return b=!1,this.editMode&&(b=!0),this.editMode=!1,this.loading?(null!=a&&a.preventDefault(),null!=a&&a.stopPropagation(),void this.focus()):(null!=(d=this.model)?d.get("pinned"):void 0)?c.__super__.close.apply(this,arguments):(b&&this.result.length<=0&&this.sub.del(),c.__super__.close.apply(this,arguments))},c.prototype.rmRes=function(a){var b,c,d;null!=(null!=a?a.target:void 0)?b=null!=(d=$(a.target))?d.data("id"):void 0:null!=a&&(b=a),c=this.result.get(b),null!=c&&(this.result.remove(b),(null!=c?c.get("custom"):void 0)&&this.searchcoll.remove(b))},c.prototype.editRes=function(a){var b,c,d;this.editMode=!0,b=null!=(d=$(a.target))?d.data("id"):void 0,c=this._editval=this.result.get(b).get("value"),this.result.remove(b),this.searchcoll.remove(b),this.sub.reopen(),this.search(c)},c.prototype.getTemplateData=function(){var a,b;return a=c.__super__.getTemplateData.apply(this,arguments),(null!=(b=this._editval)?b.length:void 0)&&(a.inpval=this._editval,this._editval=null),a},c.prototype.renderResult=function(a){var b,c,d,e,f,g;if(null==a&&(a=!1),a)return"
  • ";for(b=[],g=this.result.models,d=c=0,e=g.length;c"+b.join("
  • ")+"
  • "},c.prototype._isFull=function(){return!(this.selectCount<=0)&&(this.result||[]).length>=this.selectCount},c.prototype.select=function(){var a,b,c,d,e,f;if(!this.loading&&!this._isFull()&&(c=this.model.get("value"),null==c||_.isArray(c)||(c=[c]),null!=c?c.length:void 0)){for(f=this.selectCount<=0?c:c.slice(0,this.selectCount),d=0,e=f.length;d",null!=b.operator&&(c+=b.operator+" "),c+=b.value,c+="")},c.prototype.close=function(a){null!=this.$inpOp&&(this.$inpOp.select2("destroy"),this.$inpOp.remove(),this.$inpOp=null),c.__super__.close.apply(this,arguments)},c.prototype.select=function(a){var b,d,e,f,g;if(b=-1,null==a||!a.relatedTarget||(b=null!=(f=this.elOp)?f.compareDocumentPosition(null!=a?a.relatedTarget:void 0):void 0,20!==b)){if("focusout"===(null!=a?a.type:void 0)&&20!==b)return e=this.getValue(),null!=e?void this.set(e,a):void this.close();if(null!=(null!=a?a.relatedTarget:void 0)&&(d=this.el.compareDocumentPosition(null!=a?a.relatedTarget:void 0),!(0===d||d-16>=0)))return void a.stopPropagation();if(null!=a&&((null!=a?a.relatedTarget:void 0)===this.$inp.get(0)||(null!=a?a.relatedTarget:void 0)===(null!=(g=this.$inpOp)?g.get(0):void 0)))return void a.stopPropagation();null!=this.$inpOp&&this.model.set({operator:this.$inpOp.val()}),c.__super__.select.apply(this,arguments)}},c.prototype._opSelected=function(){this.selectedOP=!0,this.focus()},c.prototype.focus=function(a){return null==a&&(a=!1),null==this.$inpOp||this.selectedOP?(c.__super__.focus.apply(this,arguments),void this.$inp.select()):void this.$inpOp.select2("open")},c.prototype.reopen=function(a){var b,d,e;d=null!=(e=this.result.first())?e.get("value"):void 0,b=this.result.first(),this.model.set({value:d}),a.$results.empty().html(this.renderResult(!0)),c.__super__.reopen.apply(this,arguments)},c.prototype.getTemplateData=function(){return _.extend(c.__super__.getTemplateData.apply(this,arguments),{operators:this.model.get("operators"),operator:this.model.get("operator")})},c.prototype._onTabAction=function(a){var b,c;if(null!=(c=this.model.get("operators"))?c.length:void 0){if(this.$inp.is(a.target)&&a.shiftKey)return a.stopPropagation(),a.preventDefault(),this.$inpOp.focus(),!1;if((this.select2Op.$selection.is(a.target)||a.target.classList.contains("select2-search__field"))&&!a.shiftKey)return a.stopPropagation(),a.preventDefault(),this.$inp.focus().select(),!1}return b=this.getValue(),a.preventDefault(),a.stopPropagation(),isNaN(b)||this.select(a),!0},c.prototype.getResults=function(){var a,b;return a=null!=this.$inpOp||null!=this.model.get("operator")?{value:this.getValue(),operator:(null!=(b=this.$inpOp)?b.val():void 0)||this.model.get("operator")}:{value:this.getValue()}},c}(a("./number_base")),b.exports=d},{"../../tmpls/number.jade":16,"./number_base":28}],31:[function(a,b,c){var d,e=function(a,b){return function(){return a.apply(b,arguments)}},f=function(a,b){function c(){this.constructor=a}for(var d in b)g.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},g={}.hasOwnProperty;d=function(b){function c(){return this._onTabAction=e(this._onTabAction,this),this.getValue=e(this.getValue,this),this.getResults=e(this.getResults,this),this.close=e(this.close,this),this.select=e(this.select,this),this.reopen=e(this.reopen,this),this.clickSel=e(this.clickSel,this),this.focus=e(this.focus,this),this.render=e(this.render,this),this.renderResult=e(this.renderResult,this),this.events=e(this.events,this),this._getInpSelector=e(this._getInpSelector,this),c.__super__.constructor.apply(this,arguments)}return f(c,b),c.prototype.template=a("../../tmpls/range.jade"),c.prototype._getInpSelector=function(a){return null==a&&(a="_from"),"input#"+this.cid+a},c.prototype.events=function(){var a;return a={},a["keyup "+this._getInpSelector()]="input",a["keydown "+this._getInpSelector()]="input",a["keyup "+this._getInpSelector("_to")]="input",a["keydown "+this._getInpSelector("_to")]="input",a["blur "+this._getInpSelector()]="select",a["blur "+this._getInpSelector("_to")]="select",a["mousedown "+this._getInpSelector()]="clickSel",a["mousedown "+this._getInpSelector("_to")]="clickSel",a},c.prototype.renderResult=function(a){var b;return null==a&&(a=!1),a?"":(b=this.getResults(),"
  • "+b.value.join(" - ")+"
  • ")},c.prototype.render=function(){c.__super__.render.apply(this,arguments),this.$inpTo=this.$el.find(this._getInpSelector("_to"))},c.prototype.focus=function(a){null==a&&(a=!1),c.__super__.focus.apply(this,arguments),this.$inp.select()},c.prototype.clickSel=function(a){a.currentTarget.focus()},c.prototype.reopen=function(a){var b;b=this.result.first().get("value"),this.model.set({value:b}),a.$results.empty().html(this.renderResult(!0)),c.__super__.reopen.apply(this,arguments)},c.prototype.select=function(a){return null==a||(null!=a?a.relatedTarget:void 0)!==this.$inp.get(0)&&(null!=a?a.relatedTarget:void 0)!==this.$inpTo.get(0)?void c.__super__.select.apply(this,arguments):void a.stopPropagation()},c.prototype.close=function(){try{this.$(".rangeinp").remove()}catch(a){}c.__super__.close.apply(this,arguments)},c.prototype.getResults=function(){var a;return a={value:this.getValue()}},c.prototype.getValue=function(){var a,b,d;return b=c.__super__.getValue.apply(this,arguments),a=this.$inpTo.val(),(null!=a?a.length:void 0)?(d=parseInt(this.valueByDefinition(a),10),[b,d]):null},c.prototype._onTabAction=function(a){var b;return this.$inp.is(a.target)&&!a.shiftKey?(a.stopPropagation(),a.preventDefault(),this.$inpTo.focus().select(),console.log("focus next"),!1):this.$inpTo.is(a.target)&&a.shiftKey?(a.stopPropagation(),a.preventDefault(),this.$inp.focus().select(),!1):(b=this.getValue(),!((null!=b?b.length:void 0)>=2)||(a.preventDefault(),a.stopPropagation(),this.select(),!0))},c}(a("./number_base")),b.exports=d},{"../../tmpls/range.jade":17,"./number_base":28}],32:[function(a,b,c){var d,e,f=function(a,b){return function(){return a.apply(b,arguments)}},g=function(a,b){function c(){this.constructor=a}for(var d in b)h.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},h={}.hasOwnProperty,i=[].indexOf||function(a){for(var b=0,c=this.length;b=this.selectCount},c.prototype.reopen=function(a){var b;if(!this._isFull())return b=this.result.pluck("value"),this.model.set({value:b}),a.$results.empty(),this.select2.$container.off(),this.select2.destroy(),this.result.reset(),this.select2=null,c.__super__.reopen.apply(this,arguments)},c.prototype._checkIntValue=function(a){var b,c,d;if(null==a&&(a=[]),!a||!a.length)return!1;for(c=0,d=a.length;c1&&(a.optionGroups=b),a},c.prototype._hasTabListener=function(a){return!a&&this.model.get("multiple")},c.prototype._hasTabEvent=function(){return"keyup"},c.prototype.getValue=function(){var a,b,c,d,e,f;for(a=[],f=(null!=(e=this._initSelect2())?e.data():void 0)||[],c=0,d=f.length;cc[a]?1:b[a]=0)?$(b.target).is(".search-btn")&&(null!=b?b.shiftKey:void 0)?(null!=b&&b.preventDefault(),null!=b&&b.stopPropagation(),void(a.TMopenAddFacet=setTimeout(function(){return a.addFacet()},0))):(null!=(f=a.selectview)?f.isOpen:void 0)?(null!=b&&b.preventDefault(),null!=b&&b.stopPropagation(),void((null!=b?b.shiftKey:void 0)?(c=null!=(g=a.$addBtn)&&null!=(h=g.prevAll(".sub"))&&null!=(i=h.first())?i.data("fctid"):void 0,null!=c&&setTimeout(function(){var b;return null!=(b=a.facets[c])?b.reopen():void 0},0)):(a.selectview.close(),a.focusSearch()))):void a.trigger("escape",b,a._nextFacet):b.keyCode===d.ESC||(j=b.keyCode,k.call(d.ESC,j)>=0)?(a.exit(),void a.trigger("escape",b)):void 0}}(this))},c.prototype._nextFacet=function(a,b){var c,d,e,f;return d=(null!=a?a.shiftKey:void 0)?"prev":"next",c=null!=(f=b.$el)&&"function"==typeof f[d]?f[d]():void 0,c.hasClass("add-facet-btn")?(null!=a&&a.preventDefault(),null!=a&&a.stopPropagation(),void setTimeout(function(a){return function(){return a.addFacet()}}(this),0)):(e=null!=c?c.data("fctid"):void 0,void(null!=e&&(null!=a&&a.preventDefault(),setTimeout(function(a){return function(){var b;return null!=(b=a.facets[e])?b.reopen():void 0}}(this),0))))},c.prototype.focusSearch=function(){null!=this.$searchBtn&&this.$searchBtn.focus()},c.prototype._onSearch=function(a){a.stopPropagation(),this.exit(),this.trigger("searchbutton",this.searchButton.event)},c.prototype._onFocusSearch=function(a){var b;a.stopPropagation(),null!=(b=this.selectview)&&"function"==typeof b.close&&b.close()},c.prototype._outerClick=function(a){var b;null!=this.TMopenAddFacet&&clearTimeout(this.TMopenAddFacet),b=this.el.compareDocumentPosition(a.target),0===b||b-16>=0||this.exit(!1)},c}(Backbone.View),b.exports=e},{"../tmpls/wrapper.jade":24,"../utils/keycodes":25,"./selector":35,"./sub":36}],35:[function(a,b,c){var d,e,f=function(a,b){return function(){return a.apply(b,arguments)}},g=function(a,b){function c(){this.constructor=a}for(var d in b)h.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},h={}.hasOwnProperty;d=a("../utils/keycodes"),e=function(b){function c(a){this.selectActive=f(this.selectActive,this),this.select=f(this.select,this),this.move=f(this.move,this),this.search=f(this.search,this),this.open=f(this.open,this),this.focus=f(this.focus,this),this.selected=f(this.selected,this),this._onTabAction=f(this._onTabAction,this),this._isFull=f(this._isFull,this),this._onClick=f(this._onClick,this),this.checkOptionsEmpty=f(this.checkOptionsEmpty,this),this.scrollHelper=f(this.scrollHelper,this),this._checkScroll=f(this._checkScroll,this),this.renderRes=f(this.renderRes,this),this.render=f(this.render,this),this.getTemplateData=f(this.getTemplateData,this),this.initialize=f(this.initialize,this),this.events=f(this.events,this),this.className=f(this.className,this),this.custom=a.custom||!1,this.activeIdx=0,this.currQuery="",null!=a.main&&(this.main=a.main),c.__super__.constructor.call(this,a)}return g(c,b),c.prototype.template=a("../tmpls/selector.jade"),c.prototype.templateEl=a("../tmpls/selectorli.jade"),c.prototype.selectCount=1,c.prototype.className=function(){var a;return a=["add-facet"],this.custom&&a.push("custom"),a.join(" ")},c.prototype.events=function(){var a;return a={"mousedown a":"_onClick"},a["focus input#"+this.cid]="open",a["keydown input#"+this.cid]="search",a["keyup input#"+this.cid]="search",a},c.prototype.initialize=function(a){c.__super__.initialize.apply(this,arguments),this.searchcoll=this.collection.sub(function(){return!0}),this.result=new this.collection.constructor,this.listenTo(this.searchcoll,"add",this.renderRes),this.listenTo(this.searchcoll,"remove",this.renderRes),this.listenTo(this.searchcoll,"remove",this.checkOptionsEmpty)},c.prototype.getTemplateData=function(){return _.extend(c.__super__.getTemplateData.apply(this,arguments),{custom:this.custom})},c.prototype.render=function(){return c.__super__.render.apply(this,arguments),this.$list=this.$el.find("#"+this.cid+"typelist"),this.renderRes(),this.el},c.prototype.renderRes=function(){var a,b,c,d,e,f,g,h,i,j,k;for(this.$list.empty(),d=[],j=this.searchcoll.models,g=f=0,h=j.length;f1&&(c=c.replace(new RegExp(this.currQuery,"gi"),function(a){return""+a+""})), +d.push({label:c,id:b,cssclass:a}));return this.$list.append(this.templateEl({list:d,query:this.currQuery,activeIdx:this.activeIdx,custom:this.custom})),this._checkScroll(),this.$list},c.prototype._scrollTill=198,c.prototype._checkScroll=function(){var a;return a=this.$list.height(),a>0?void this.scrollHelper(a):void setTimeout(function(a){return function(){return a.scrollHelper(a.$list.height())}}(this),0)},c.prototype.scrollHelper=function(a){a>=this._scrollTill?this.scrolling=!0:this.scrolling=!1},c.prototype.checkOptionsEmpty=function(){},c.prototype._onClick=function(a){var b,c;if(a.stopPropagation(),a.preventDefault(),b=this.$(a.currentTarget).data("id"),null!=b&&(c=this.collection.get(b),null!=c))return this.selected(c),!1},c.prototype._isFull=function(){return!0},c.prototype._onTabAction=function(a){null!=this.main?(a.preventDefault(),a.stopPropagation(),this.main.focusSearch()):c.__super__._onTabAction.call(this,event)},c.prototype.selected=function(a){var b,c,d,e;null==this.main&&this._isFull()&&(d=null!=(e=this.result.last())?e.id:void 0,this.rmRes(d));try{if(null!=a.onlyExec)return void(null!=a&&"function"==typeof a.exec&&a.exec())}catch(a){b=a;try{console.error("Issue #23: CATCH - Class:"+this.constructor.name+" - activeIdx:"+this.activeIdx+" - collection:"+JSON.stringify(this.collection.toJSON()))}catch(a){c=a,console.error("Issue #23: CATCH")}}null!=a&&(this.searchcoll.remove(a),this.result.add(a),this.trigger("selected",a)),this._isFull()&&this.close()},c.prototype.focus=function(){var a;this.$inp.focus(),a=this.$inp.get(0),a.selectionStart=a.selectionEnd=a.value.length},c.prototype.open=function(){return this.trigger("opened"),c.__super__.open.apply(this,arguments)},c.prototype.search=function(a){var b;if("keydown"!==(null!=a?a.type:void 0))b=_.isString(a)?a:a.currentTarget.value.toLowerCase(),b!==this.currQuery&&(this.currQuery=b,this.searchcoll.updateSubFilter(function(a){return function(c){var d;return null==a.result.get(c.id)&&(null==b||!b.length||(d=c.match(b)))}}(this),!1),this.activeIdx=0,this.renderRes());else switch(a.keyCode){case d.UP:return void this.move(!0);case d.DOWN:return void this.move(!1);case d.ENTER:return void this.selectActive(!0)}},c.prototype.move=function(a){var b,c,d,e,f,g,h,i,j,k;if(null==a&&(a=!1),f=this.$el.find(".typelist a"),d=(null!=(k=this.currQuery)?k.length:void 0)?0:1,j=0,a){if(this.activeIdx-1i+this._scrollTill?c.scrollTop(h-this._scrollTill):h=0&&this.searchcoll.length)this.selected(this.collection.get(d.id));else{if(null==(f=this.currQuery)||!f.length)return;this.selected(new this.collection.model({value:this.currQuery,custom:!0})),this.$inp.val("")}},c}(a("./facets/base")),b.exports=e},{"../tmpls/selector.jade":20,"../tmpls/selectorli.jade":21,"../utils/keycodes":25,"./facets/base":26}],36:[function(a,b,c){var d,e=function(a,b){return function(){return a.apply(b,arguments)}},f=function(a,b){function c(){this.constructor=a}for(var d in b)g.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},g={}.hasOwnProperty;d=function(b){function c(){return this.open=e(this.open,this),this.isResultEmpty=e(this.isResultEmpty,this),this.attachSubEvents=e(this.attachSubEvents,this),this.generateSub=e(this.generateSub,this),this.close=e(this.close,this),this.focus=e(this.focus,this),this.isOpen=e(this.isOpen,this),this.renderResult=e(this.renderResult,this),this.removed=e(this.removed,this),this.selected=e(this.selected,this),this.remove=e(this.remove,this),this.del=e(this.del,this),this.reopen=e(this.reopen,this),this.render=e(this.render,this),this.initialize=e(this.initialize,this),this.className=e(this.className,this),c.__super__.constructor.apply(this,arguments)}return f(c,b),c.prototype.template=a("../tmpls/sub.jade"),c.prototype.className=function(){var a,b,c;return b="sub",c=this.model.get("type"),null!=c&&(b+=" sub-type-"+c),a=this.model.get("name"),null!=a&&(b+=" sub-name-"+a),b},c.prototype.initialize=function(a){this._isOpen=!1,this.result=new Backbone.Collection,this.parent=a.parent,this.$el.data("fctid",this.model.id),this.parent.on("escape",function(a){return function(b,c){var d;a._isOpen&&(null!=(d=a.selectview)?d._onTabAction(b):void 0)&&null!=c&&c(b,a)}}(this))},c.prototype.events={mousedown:"reopen","mousedown .rm-facet-btn":"del"},c.prototype.render=function(a){var b,c,d,e,f,g,h,i;for(d=[],i=this.result.models,f=e=0,g=i.length;e":">",'"':"""},i=/[&<>"]/g;c.escape=g,c.rethrow=function b(c,d,e,f){if(!(c instanceof Error))throw c;if(!("undefined"==typeof window&&d||f))throw c.message+=" on line "+e,c;try{f=f||a("fs").readFileSync(d,"utf8")}catch(a){b(c,null,e)}var g=3,h=f.split("\n"),i=Math.max(e-g,0),j=Math.min(h.length,e+g),g=h.slice(i,j).map(function(a,b){var c=b+i+1;return(c==e?" > ":" ")+c+"| "+a}).join("\n");throw c.path=d,c.message=(d||"Jade")+":"+e+"\n"+g+"\n\n"+c.message,c},c.DebugItem=function(a,b){this.lineno=a,this.filename=b}},{fs:2}],2:[function(a,b,c){},{}]},{},[1])(1)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{fs:37}],39:[function(a,b,c){(function(){var a,c,d;d={}.toString,c=Array.isArray||function(a){return"[object Array]"===d.call(a)},a=function(a,b){return a[b]},b.exports=function(b,d,e){var f,g;return null==d&&(d=!0),null==e&&(e=a),c(b)||(b=[b]),(f=function(a,b,c){var d,g,h,i;return(null!=c?c.length:void 0)&&(g=null!=(i=c.splice(0,1))?i[0]:void 0,null!=g&&(h=f(a,g,c))),d=null!=a[b]?a[b]:null!=a["?"]?a["?"]:a,function(a,c){var f,g;return f=e(a,b),g=e(c,b),fg?d?1:-1:f===g?null!=h?h(a,c):0:void 0}})(d,null!=(g=b.splice(0,1))?g[0]:void 0,b)}}).call(this)},{}]},{},[1])(1)}); \ No newline at end of file diff --git a/js/iggy.debug.js b/js/iggy.debug.js new file mode 100644 index 0000000..a305960 --- /dev/null +++ b/js/iggy.debug.js @@ -0,0 +1,4260 @@ +(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.IGGY = 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 1) { + throw this._error("ESIZEELJQUERY"); + } + return el; + } + if (el instanceof Element) { + return this.$(el); + } + throw this._error("EINVALIDELTYPE"); + }; + + IGGY.prototype._prepareFacets = function(facets, options) { + var _fct, _idx, _ret, facet, i, len; + if (options == null) { + options = {}; + } + _ret = []; + for (_idx = i = 0, len = facets.length; i < len; _idx = ++i) { + facet = facets[_idx]; + if (!((_fct = this._createFacet(facet)) != null)) { + continue; + } + _fct._idx = _idx; + _ret.push(_fct); + } + return new Facets(_ret, options); + }; + + IGGY.prototype._createFacet = function(facet) { + switch (facet.type.toLowerCase()) { + case "string": + return new FctString(facet, { + main: this + }); + case "select": + return new FctSelect(facet, { + main: this + }); + case "array": + return new FctArray(facet, { + main: this + }); + case "number": + return new FctNumber(facet, { + main: this + }); + case "range": + return new FctRange(facet, { + main: this + }); + case "daterange": + return new FctDateRange(facet, { + main: this + }); + case "event": + return new FctEvent(facet, { + main: this + }); + } + }; + + IGGY.prototype.addFacet = function(facet) { + var _fct; + if (this.facets == null) { + return; + } + if ((_fct = this._createFacet(facet)) != null) { + this.facets.add(_fct); + } + return this; + }; + + IGGY.prototype._error = function(type, data) { + var _err, _msg; + if (data == null) { + data = {}; + } + if (this.errors[type] != null) { + _msg = this.errors[type](data); + } else { + _msg = "-"; + } + _err = new Error(); + _err.name = type; + _err.message = _msg; + return _err; + }; + + IGGY.prototype._filterEmpty = function(model) { + var _v; + _v = model.get("value"); + if (_v == null) { + return false; + } + if (_v.length <= 0) { + return false; + } + return true; + }; + + IGGY.prototype.getQuery = function() { + return this.nonEmptyResults; + }; + + IGGY.prototype.triggerChange = function() { + setTimeout((function(_this) { + return function() { + return _this.trigger("change", _this.nonEmptyResults); + }; + })(this), 0); + }; + + IGGY.prototype.triggerEvent = function(eventName) { + setTimeout((function(_this) { + return function() { + return _this.trigger(eventName, _this.nonEmptyResults); + }; + })(this), 0); + }; + + IGGY.prototype._initErrors = function() { + var _k, _tmpl, ref; + this.errors = {}; + ref = this.ERRORS(); + for (_k in ref) { + _tmpl = ref[_k]; + this.errors[_k] = _.template(_tmpl); + } + }; + + IGGY.prototype.ERRORS = function() { + return { + "EINVALIDELSTRING": "If you define a `el` as String it has to be a valid selector for an existing DOM element.", + "EEMPTYELSTRING": "The `el` as string can not be empty.", + "EEMPTYELJQUERY": "The `el` as jOuery object can not be an empty collection.", + "ESIZEELJQUERY": "The `el` as jOuery object can not be a result of one el.", + "EINVALIDELTYPE": "The `el` can only be a selector string, dom element or jQuery collection", + "EMISSINGEL": "Please define a target `el`" + }; + }; + + return IGGY; + +})(Backbone.Events); + +module.exports = IGGY; + + +},{"./models/facet_array":3,"./models/facet_daterange":5,"./models/facet_event":6,"./models/facet_number":7,"./models/facet_range":8,"./models/facet_select":9,"./models/facet_string":10,"./models/facets":11,"./models/results":12,"./views/main":34}],2:[function(require,module,exports){ + +/* +EXAMPLE USAGE + + parentColl = new Backbone.Collection.Sub() + + * by Array + subCollA = parentColl.sub( [ 1, 2, 3 ] ) + + * or by Object + subCollO = parentColl.sub( { name: "Foo", age: 42 } ) + + * or by Number + subCollN = parentColl.sub( 13 ) + + * or by Function + subCollF = parentColl.sub( (( model )-> if model.get( "age" ) > 23 ) ) + + * subcollection of subcollection + subCollA_O = subCollA.sub( { name: "Foo", age: 42 } ) + + * update the filter of a subcollection. For this a `reset` will be fired on the subcollection + subCollA = subCollA.updateSubFilter( { name: "Bar", age: 42 } ) + */ +var BackboneSub, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + +BackboneSub = (function(superClass) { + extend(BackboneSub, superClass); + + function BackboneSub() { + this.updateSubFilter = bind(this.updateSubFilter, this); + this._subCollectionOptions = bind(this._subCollectionOptions, this); + this.sub = bind(this.sub, this); + return BackboneSub.__super__.constructor.apply(this, arguments); + } + + + /* + ## sub + + `collection.sub( filter )` + + Generate a sub-collection by a filter. + The models will be distributed within all involved collections under consideration of the filter. + + @param { Function|Array|String|Number|Object } filter The filter to reduce the current collection. Can be a function like underscore `_.filter` or an array of ids, a single id as string or number or a filter object containings key value filters. + + @return { Collection } A Sub-Collection based on the filter + + @api public + */ + + BackboneSub.prototype.sub = function(filter) { + var _models, _sub, fnFilter; + this.subColls || (this.subColls = []); + fnFilter = this._generateSubFilter(filter); + _models = this.filter(fnFilter); + _sub = new this.constructor(_models, this._subCollectionOptions()); + _sub._parentCol = this; + _sub._fnFilter = fnFilter; + this.on("change", _.bind(function(_m) { + var added, toAdd; + toAdd = this._fnFilter(_m); + added = this.get(_m) != null; + if (added && !toAdd) { + this.remove(_m); + } else if (!added && toAdd) { + this.add(_m); + } + }, _sub)); + _sub.on("add", _.bind(function(_m) { + this.add(_m); + }, this)); + this.on("add", _.bind(function(_m) { + if (this._fnFilter(_m)) { + this.add(_m); + } + }, _sub)); + _sub.on("remove", _.bind(function(_m) {}, this)); + this.on("remove", _.bind(function(_m) { + this.remove(_m); + }, _sub)); + this.on("reset", _.bind(function(_m) { + this.updateSubFilter(); + }, _sub)); + this.subColls.push(_sub); + return _sub; + }; + + + /* + ## _subCollectionOptions + + `collection._subCollectionOptions()` + + Overwritable method to set the constructor options for sub collections + + @return { Object } The options object + + @api private + */ + + BackboneSub.prototype._subCollectionOptions = function() { + var _opts; + _opts = { + comparator: this.comparator + }; + return _opts; + }; + + + /* + ## updateSubFilter + + `collection.updateSubFilter( filter )` + + Method to update the filter of a subcollection. Then all models will be resete by the new filter. So you have to listen to teh reset event + + @param { Function|Array|String|Number|Object } filter The filter to reduce the current collection. Can be a function like underscore `_.filter` or an array of ids, a single id as string or number or a filter object containings key value filters. + + @return { Self } itself + + @api public + */ + + BackboneSub.prototype.updateSubFilter = function(filter, asReset) { + var _addIds, _models, currids, i, j, len, len1, mdl, newids, ref, ref1, rid; + if (asReset == null) { + asReset = true; + } + if (this._parentCol != null) { + if (filter != null) { + this._fnFilter = this._generateSubFilter(filter); + } + _models = this._parentCol.filter(this._fnFilter); + if (asReset) { + this.reset(_models); + return this; + } + newids = _.pluck(_models, "cid"); + currids = _.pluck(this.models, "cid"); + ref = _.difference(currids, newids); + for (i = 0, len = ref.length; i < len; i++) { + rid = ref[i]; + this.remove(rid); + } + _addIds = _.difference(newids, currids); + for (j = 0, len1 = _models.length; j < len1; j++) { + mdl = _models[j]; + if (ref1 = mdl.cid, indexOf.call(_addIds, ref1) >= 0) { + this.add(mdl); + } + } + } + return this; + }; + + + /* + ## _generateSubFilter + + `collection._generateSubFilter( filter )` + + Internal method th convert a filter argument to a filter function + + @param { Function|Array|String|Number|Object } filter The filter to reduce the current collection. Can be a function like underscore `_.filter` or an array of ids, a single id as string or number or a filter object containings key value filters. + + @return { Function } The generated filter function + + @api private + */ + + BackboneSub.prototype._generateSubFilter = function(filter) { + var fnFilter; + if (_.isFunction(filter)) { + fnFilter = filter; + } else if (_.isArray(filter)) { + fnFilter = function(_m) { + var ref; + return ref = _m.id, indexOf.call(filter, ref) >= 0; + }; + } else if (_.isString(filter) || _.isNumber(filter)) { + fnFilter = function(_m) { + return _m.id === filter; + }; + } else { + fnFilter = function(_m) { + var _nm, _vl; + for (_nm in filter) { + _vl = filter[_nm]; + if (_m.get(_nm) !== _vl) { + return false; + } + } + return true; + }; + } + return fnFilter; + }; + + return BackboneSub; + +})(Backbone.Collection); + +module.exports = BackboneSub; + + +},{}],3:[function(require,module,exports){ +var FctArray, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + +FctArray = (function(superClass) { + extend(FctArray, superClass); + + function FctArray() { + return FctArray.__super__.constructor.apply(this, arguments); + } + + FctArray.prototype.SubView = require("../views/facets/subarray"); + + return FctArray; + +})(require("./facet_string")); + +module.exports = FctArray; + + +},{"../views/facets/subarray":29,"./facet_string":10}],4:[function(require,module,exports){ +var FacetBase, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + +FacetBase = (function(superClass) { + extend(FacetBase, superClass); + + FacetBase.prototype.idAttribute = "name"; + + FacetBase.prototype.SubView = require("../views/facets/base"); + + function FacetBase(attrs, options) { + this.match = bind(this.match, this); + this.getLabel = bind(this.getLabel, this); + this.main = options.main; + FacetBase.__super__.constructor.apply(this, arguments); + return; + } + + FacetBase.prototype.defaults = function() { + return { + type: "string", + name: "name", + label: "Description", + sort: 0 + }; + }; + + FacetBase.prototype.getLabel = function() { + return this.get("label"); + }; + + FacetBase.prototype.match = function(crit) { + var _s, found; + _s = this.get("name") + " " + this.get("label"); + found = _s.toLowerCase().indexOf(crit.toLowerCase()); + return found >= 0; + }; + + FacetBase.prototype.comparator = function(mdl) { + return mdl.id; + }; + + return FacetBase; + +})(Backbone.Model); + +module.exports = FacetBase; + + +},{"../views/facets/base":26}],5:[function(require,module,exports){ +var FctDateRange, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + +FctDateRange = (function(superClass) { + extend(FctDateRange, superClass); + + function FctDateRange() { + this.defaults = bind(this.defaults, this); + return FctDateRange.__super__.constructor.apply(this, arguments); + } + + FctDateRange.prototype.SubView = require("../views/facets/daterange"); + + FctDateRange.prototype.defaults = function() { + return $.extend(FctDateRange.__super__.defaults.apply(this, arguments), { + opts: {}, + value: null + }); + }; + + return FctDateRange; + +})(require("./facet_base")); + +module.exports = FctDateRange; + + +},{"../views/facets/daterange":27,"./facet_base":4}],6:[function(require,module,exports){ +var FctEvent, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + +FctEvent = (function(superClass) { + extend(FctEvent, superClass); + + function FctEvent() { + this.exec = bind(this.exec, this); + this.defaults = bind(this.defaults, this); + return FctEvent.__super__.constructor.apply(this, arguments); + } + + FctEvent.prototype.SubView = null; + + FctEvent.prototype.onlyExec = true; + + FctEvent.prototype.defaults = function() { + return $.extend(FctEvent.__super__.defaults.apply(this, arguments), { + options: [] + }); + }; + + FctEvent.prototype.exec = function() { + this.main.trigger(this.get("event"), this.toJSON()); + }; + + return FctEvent; + +})(require("./facet_base")); + +module.exports = FctEvent; + + +},{"./facet_base":4}],7:[function(require,module,exports){ +var FctNumber, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + +FctNumber = (function(superClass) { + extend(FctNumber, superClass); + + function FctNumber() { + this.defaults = bind(this.defaults, this); + return FctNumber.__super__.constructor.apply(this, arguments); + } + + FctNumber.prototype.SubView = require("../views/facets/subnumber"); + + FctNumber.prototype.defaults = function() { + return $.extend(FctNumber.__super__.defaults.apply(this, arguments), { + min: null, + max: null, + step: 1, + value: null + }); + }; + + return FctNumber; + +})(require("./facet_base")); + +module.exports = FctNumber; + + +},{"../views/facets/subnumber":30,"./facet_base":4}],8:[function(require,module,exports){ +var FctRange, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + +FctRange = (function(superClass) { + extend(FctRange, superClass); + + function FctRange() { + this.defaults = bind(this.defaults, this); + return FctRange.__super__.constructor.apply(this, arguments); + } + + FctRange.prototype.SubView = require("../views/facets/subrange"); + + FctRange.prototype.defaults = function() { + return $.extend(FctRange.__super__.defaults.apply(this, arguments), { + min: null, + max: null, + step: 1, + value: null + }); + }; + + return FctRange; + +})(require("./facet_base")); + +module.exports = FctRange; + + +},{"../views/facets/subrange":31,"./facet_base":4}],9:[function(require,module,exports){ +var FctSelect, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + +FctSelect = (function(superClass) { + extend(FctSelect, superClass); + + function FctSelect() { + this.defaults = bind(this.defaults, this); + return FctSelect.__super__.constructor.apply(this, arguments); + } + + FctSelect.prototype.SubView = require("../views/facets/subselect"); + + FctSelect.prototype.defaults = function() { + return $.extend(FctSelect.__super__.defaults.apply(this, arguments), { + options: [], + waitForAsync: true + }); + }; + + return FctSelect; + +})(require("./facet_base")); + +module.exports = FctSelect; + + +},{"../views/facets/subselect":32,"./facet_base":4}],10:[function(require,module,exports){ +var FctString, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + +FctString = (function(superClass) { + extend(FctString, superClass); + + function FctString() { + this.defaults = bind(this.defaults, this); + return FctString.__super__.constructor.apply(this, arguments); + } + + FctString.prototype.SubView = require("../views/facets/substring"); + + FctString.prototype.defaults = function() { + return $.extend(FctString.__super__.defaults.apply(this, arguments), { + options: [] + }); + }; + + return FctString; + +})(require("./facet_base")); + +module.exports = FctString; + + +},{"../views/facets/substring":33,"./facet_base":4}],11:[function(require,module,exports){ +var IggyFacets, fnGet, sortColl, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + +sortColl = require("sortcoll"); + +fnGet = function(el, key) { + return el.get(key); +}; + +IggyFacets = (function(superClass) { + extend(IggyFacets, superClass); + + function IggyFacets(models, options) { + var _forward; + if (options == null) { + options = {}; + } + this._subCollecctionOptions = bind(this._subCollecctionOptions, this); + if (options.comparator == null) { + _forward = (function() { + switch (options.dir) { + case "asc": + return true; + case "desc": + return false; + default: + return true; + } + })(); + options.comparator = sortColl(["sort"].concat(options.sortby || "name"), { + sort: false, + "?": _forward + }, fnGet); + } + return IggyFacets.__super__.constructor.call(this, models, options); + } + + IggyFacets.prototype._subCollecctionOptions = function() { + var opt; + opt = IggyFacets.__super__._subCollecctionOptions.apply(this, arguments); + opt.dir = this.forward ? "asc" : "desc"; + return opt; + }; + + IggyFacets.prototype.modelId = function(attrs) { + return attrs.name; + }; + + return IggyFacets; + +})(require("./backbone_sub")); + +module.exports = IggyFacets; + + +},{"./backbone_sub":2,"sortcoll":39}],12:[function(require,module,exports){ +var IggyResult, IggyResults, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; + +IggyResult = (function(superClass) { + extend(IggyResult, superClass); + + function IggyResult() { + return IggyResult.__super__.constructor.apply(this, arguments); + } + + IggyResult.prototype.idAttribute = "name"; + + IggyResult.prototype.defaults = { + type: "string", + name: null, + value: null + }; + + return IggyResult; + +})(Backbone.Model); + +IggyResults = (function(superClass) { + extend(IggyResults, superClass); + + function IggyResults() { + this.parse = bind(this.parse, this); + this.initialize = bind(this.initialize, this); + return IggyResults.__super__.constructor.apply(this, arguments); + } + + IggyResults.prototype.model = IggyResult; + + IggyResults.prototype.initialize = function(mdls, opts) { + var ref; + if ((ref = opts.modifyKey) != null ? ref.length : void 0) { + this.modifyKey = opts.modifyKey; + } + }; + + IggyResults.prototype.parse = function(attr, options) { + var _key, _modify, ref; + _key = options._facet.get("modifyKey") || this.modifyKey || "value"; + _modify = (ref = options._facet) != null ? ref.get("modify") : void 0; + if ((_modify != null) && _.isFunction(_modify)) { + attr[_key] = _modify(attr.value, options._facet, attr); + } + return attr; + }; + + return IggyResults; + +})(require("./backbone_sub")); + +module.exports = IggyResults; + + +},{"./backbone_sub":2}],13:[function(require,module,exports){ +var BaseResult, BaseResults, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + +BaseResult = (function(superClass) { + extend(BaseResult, superClass); + + function BaseResult() { + this.getLabel = bind(this.getLabel, this); + return BaseResult.__super__.constructor.apply(this, arguments); + } + + BaseResult.prototype.idAttribute = "value"; + + BaseResult.prototype.getLabel = function() { + return this.get("label") || this.get(this.idAttribute) || ""; + }; + + return BaseResult; + +})(Backbone.Model); + +BaseResults = (function(superClass) { + extend(BaseResults, superClass); + + function BaseResults() { + return BaseResults.__super__.constructor.apply(this, arguments); + } + + BaseResults.prototype.model = BaseResult; + + return BaseResults; + +})(require("./backbone_sub")); + +module.exports = BaseResults; + + +},{"./backbone_sub":2}],14:[function(require,module,exports){ +var jade = require("jade/runtime"); + +module.exports = function template(locals) { +var buf = []; +var jade_mixins = {}; +var jade_interp; +;var locals_for_with = (locals || {});(function (custom, id, txt) { +buf.push("" + (jade.escape(null == (jade_interp = txt) ? "" : jade_interp)) + ""); +if ( custom) +{ +buf.push(""); +} +buf.push("");}.call(this,"custom" in locals_for_with?locals_for_with.custom:typeof custom!=="undefined"?custom:undefined,"id" in locals_for_with?locals_for_with.id:typeof id!=="undefined"?id:undefined,"txt" in locals_for_with?locals_for_with.txt:typeof txt!=="undefined"?txt:undefined));;return buf.join(""); +}; +},{"jade/runtime":38}],15:[function(require,module,exports){ +var jade = require("jade/runtime"); + +module.exports = function template(locals) { +var buf = []; +var jade_mixins = {}; +var jade_interp; +;var locals_for_with = (locals || {});(function (cid) { +buf.push("");}.call(this,"cid" in locals_for_with?locals_for_with.cid:typeof cid!=="undefined"?cid:undefined));;return buf.join(""); +}; +},{"jade/runtime":38}],16:[function(require,module,exports){ +var jade = require("jade/runtime"); + +module.exports = function template(locals) { +var buf = []; +var jade_mixins = {}; +var jade_interp; +;var locals_for_with = (locals || {});(function (cid, operator, operators, undefined, value) { +if ( operators && operators.length) +{ +buf.push("
    "); +// iterate operators +;(function(){ + var $$obj = operators; + if ('number' == typeof $$obj.length) { + + for (var idx = 0, $$l = $$obj.length; idx < $$l; idx++) { + var op = $$obj[idx]; + +buf.push("" + (jade.escape(null == (jade_interp = op) ? "" : jade_interp)) + ""); + } + + } else { + var $$l = 0; + for (var idx in $$obj) { + $$l++; var op = $$obj[idx]; + +buf.push("" + (jade.escape(null == (jade_interp = op) ? "" : jade_interp)) + ""); + } + + } +}).call(this); + +buf.push("
    "); +} +buf.push("");}.call(this,"cid" in locals_for_with?locals_for_with.cid:typeof cid!=="undefined"?cid:undefined,"operator" in locals_for_with?locals_for_with.operator:typeof operator!=="undefined"?operator:undefined,"operators" in locals_for_with?locals_for_with.operators:typeof operators!=="undefined"?operators:undefined,"undefined" in locals_for_with?locals_for_with.undefined:typeof undefined!=="undefined"?undefined:undefined,"value" in locals_for_with?locals_for_with.value:typeof value!=="undefined"?value:undefined));;return buf.join(""); +}; +},{"jade/runtime":38}],17:[function(require,module,exports){ +var jade = require("jade/runtime"); + +module.exports = function template(locals) { +var buf = []; +var jade_mixins = {}; +var jade_interp; +;var locals_for_with = (locals || {});(function (cid, value) { +buf.push("
    "); +var _vals = value ? value : [] +buf.push("-
    ");}.call(this,"cid" in locals_for_with?locals_for_with.cid:typeof cid!=="undefined"?cid:undefined,"value" in locals_for_with?locals_for_with.value:typeof value!=="undefined"?value:undefined));;return buf.join(""); +}; +},{"jade/runtime":38}],18:[function(require,module,exports){ +var jade = require("jade/runtime"); + +module.exports = function template(locals) { +var buf = []; +var jade_mixins = {}; +var jade_interp; + +;return buf.join(""); +}; +},{"jade/runtime":38}],19:[function(require,module,exports){ +var jade = require("jade/runtime"); + +module.exports = function template(locals) { +var buf = []; +var jade_mixins = {}; +var jade_interp; +;var locals_for_with = (locals || {});(function (cid, multiple, optionGroups, options, undefined, value) { +buf.push(""); +if ( optionGroups) +{ +// iterate optionGroups +;(function(){ + var $$obj = optionGroups; + if ('number' == typeof $$obj.length) { + + for (var gname = 0, $$l = $$obj.length; gname < $$l; gname++) { + var opts = $$obj[gname]; + +buf.push(""); +// iterate opts +;(function(){ + var $$obj = opts; + if ('number' == typeof $$obj.length) { + + for (var idx = 0, $$l = $$obj.length; idx < $$l; idx++) { + var el = $$obj[idx]; + +buf.push("= 0 ), true, false)) + ">" + (jade.escape(null == (jade_interp = el.label) ? "" : jade_interp)) + ""); + } + + } else { + var $$l = 0; + for (var idx in $$obj) { + $$l++; var el = $$obj[idx]; + +buf.push("= 0 ), true, false)) + ">" + (jade.escape(null == (jade_interp = el.label) ? "" : jade_interp)) + ""); + } + + } +}).call(this); + + } + + } else { + var $$l = 0; + for (var gname in $$obj) { + $$l++; var opts = $$obj[gname]; + +buf.push(""); +// iterate opts +;(function(){ + var $$obj = opts; + if ('number' == typeof $$obj.length) { + + for (var idx = 0, $$l = $$obj.length; idx < $$l; idx++) { + var el = $$obj[idx]; + +buf.push("= 0 ), true, false)) + ">" + (jade.escape(null == (jade_interp = el.label) ? "" : jade_interp)) + ""); + } + + } else { + var $$l = 0; + for (var idx in $$obj) { + $$l++; var el = $$obj[idx]; + +buf.push("= 0 ), true, false)) + ">" + (jade.escape(null == (jade_interp = el.label) ? "" : jade_interp)) + ""); + } + + } +}).call(this); + + } + + } +}).call(this); + +} +else +{ +// iterate options +;(function(){ + var $$obj = options; + if ('number' == typeof $$obj.length) { + + for (var idx = 0, $$l = $$obj.length; idx < $$l; idx++) { + var el = $$obj[idx]; + +buf.push("= 0 ), true, false)) + ">" + (jade.escape(null == (jade_interp = el.label) ? "" : jade_interp)) + ""); + } + + } else { + var $$l = 0; + for (var idx in $$obj) { + $$l++; var el = $$obj[idx]; + +buf.push("= 0 ), true, false)) + ">" + (jade.escape(null == (jade_interp = el.label) ? "" : jade_interp)) + ""); + } + + } +}).call(this); + +} +buf.push(""); +if ( multiple) +{ +buf.push(""); +}}.call(this,"cid" in locals_for_with?locals_for_with.cid:typeof cid!=="undefined"?cid:undefined,"multiple" in locals_for_with?locals_for_with.multiple:typeof multiple!=="undefined"?multiple:undefined,"optionGroups" in locals_for_with?locals_for_with.optionGroups:typeof optionGroups!=="undefined"?optionGroups:undefined,"options" in locals_for_with?locals_for_with.options:typeof options!=="undefined"?options:undefined,"undefined" in locals_for_with?locals_for_with.undefined:typeof undefined!=="undefined"?undefined:undefined,"value" in locals_for_with?locals_for_with.value:typeof value!=="undefined"?value:undefined));;return buf.join(""); +}; +},{"jade/runtime":38}],20:[function(require,module,exports){ +var jade = require("jade/runtime"); + +module.exports = function template(locals) { +var buf = []; +var jade_mixins = {}; +var jade_interp; +;var locals_for_with = (locals || {});(function (cid, inpval) { +buf.push("");}.call(this,"cid" in locals_for_with?locals_for_with.cid:typeof cid!=="undefined"?cid:undefined,"inpval" in locals_for_with?locals_for_with.inpval:typeof inpval!=="undefined"?inpval:undefined));;return buf.join(""); +}; +},{"jade/runtime":38}],21:[function(require,module,exports){ +var jade = require("jade/runtime"); + +module.exports = function template(locals) { +var buf = []; +var jade_mixins = {}; +var jade_interp; +;var locals_for_with = (locals || {});(function (activeIdx, custom, list, query, undefined) { +var add = 0; +if ( custom && query) +{ +add = 1; +buf.push("
  • \"" + (((jade_interp = query) == null ? '' : jade_interp)) + "\"
  • "); +} +if ( list.length) +{ +// iterate list +;(function(){ + var $$obj = list; + if ('number' == typeof $$obj.length) { + + for (var idx = 0, $$l = $$obj.length; idx < $$l; idx++) { + var el = $$obj[idx]; + +buf.push("" + (((jade_interp = el.label) == null ? '' : jade_interp)) + ""); + } + + } else { + var $$l = 0; + for (var idx in $$obj) { + $$l++; var el = $$obj[idx]; + +buf.push("" + (((jade_interp = el.label) == null ? '' : jade_interp)) + ""); + } + + } +}).call(this); + +} +else if ( !custom) +{ +buf.push("
  • no result for \"" + (jade.escape((jade_interp = query) == null ? '' : jade_interp)) + "\"
  • "); +}}.call(this,"activeIdx" in locals_for_with?locals_for_with.activeIdx:typeof activeIdx!=="undefined"?activeIdx:undefined,"custom" in locals_for_with?locals_for_with.custom:typeof custom!=="undefined"?custom:undefined,"list" in locals_for_with?locals_for_with.list:typeof list!=="undefined"?list:undefined,"query" in locals_for_with?locals_for_with.query:typeof query!=="undefined"?query:undefined,"undefined" in locals_for_with?locals_for_with.undefined:typeof undefined!=="undefined"?undefined:undefined));;return buf.join(""); +}; +},{"jade/runtime":38}],22:[function(require,module,exports){ +var jade = require("jade/runtime"); + +module.exports = function template(locals) { +var buf = []; +var jade_mixins = {}; +var jade_interp; +;var locals_for_with = (locals || {});(function (cid, value) { +buf.push("");}.call(this,"cid" in locals_for_with?locals_for_with.cid:typeof cid!=="undefined"?cid:undefined,"value" in locals_for_with?locals_for_with.value:typeof value!=="undefined"?value:undefined));;return buf.join(""); +}; +},{"jade/runtime":38}],23:[function(require,module,exports){ +var jade = require("jade/runtime"); + +module.exports = function template(locals) { +var buf = []; +var jade_mixins = {}; +var jade_interp; +;var locals_for_with = (locals || {});(function (label, pinned, selected, undefined) { +if ( !pinned) +{ +buf.push("
    "); +} +buf.push("" + (jade.escape((jade_interp = label) == null ? '' : jade_interp)) + ":
      "); +if ( selected && selected.length) +{ +// iterate selected +;(function(){ + var $$obj = selected; + if ('number' == typeof $$obj.length) { + + for (var idx = 0, $$l = $$obj.length; idx < $$l; idx++) { + var el = $$obj[idx]; + +buf.push("
    • " + (jade.escape(null == (jade_interp = el) ? "" : jade_interp)) + "
    • "); + } + + } else { + var $$l = 0; + for (var idx in $$obj) { + $$l++; var el = $$obj[idx]; + +buf.push("
    • " + (jade.escape(null == (jade_interp = el) ? "" : jade_interp)) + "
    • "); + } + + } +}).call(this); + +} +buf.push("
    ");}.call(this,"label" in locals_for_with?locals_for_with.label:typeof label!=="undefined"?label:undefined,"pinned" in locals_for_with?locals_for_with.pinned:typeof pinned!=="undefined"?pinned:undefined,"selected" in locals_for_with?locals_for_with.selected:typeof selected!=="undefined"?selected:undefined,"undefined" in locals_for_with?locals_for_with.undefined:typeof undefined!=="undefined"?undefined:undefined));;return buf.join(""); +}; +},{"jade/runtime":38}],24:[function(require,module,exports){ +var jade = require("jade/runtime"); + +module.exports = function template(locals) { +var buf = []; +var jade_mixins = {}; +var jade_interp; +;var locals_for_with = (locals || {});(function (searchButton) { +buf.push(""); +if ( searchButton != undefined && searchButton.template != undefined && searchButton.template.length >= 0) +{ +buf.push("" + (null == (jade_interp = searchButton.template) ? "" : jade_interp) + ""); +}}.call(this,"searchButton" in locals_for_with?locals_for_with.searchButton:typeof searchButton!=="undefined"?searchButton:undefined));;return buf.join(""); +}; +},{"jade/runtime":38}],25:[function(require,module,exports){ +module.exports = { + "LEFT": 37, + "RIGHT": 39, + "UP": 38, + "DOWN": 40, + "ESC": [229, 27], + "ENTER": 13, + "TAB": 9 +}; + + +},{}],26:[function(require,module,exports){ +var FacetSubsBase, KEYCODES, SubResults, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + +KEYCODES = require("../../utils/keycodes"); + +SubResults = require("../../models/subresults"); + +FacetSubsBase = (function(superClass) { + extend(FacetSubsBase, superClass); + + function FacetSubsBase() { + this.set = bind(this.set, this); + this.select = bind(this.select, this); + this._checkSelectEmpty = bind(this._checkSelectEmpty, this); + this.getValue = bind(this.getValue, this); + this.isEqualCurrent = bind(this.isEqualCurrent, this); + this.getResValue = bind(this.getResValue, this); + this.isResultEmpty = bind(this.isResultEmpty, this); + this.getResults = bind(this.getResults, this); + this.close = bind(this.close, this); + this._onTabAction = bind(this._onTabAction, this); + this.render = bind(this.render, this); + this.reopen = bind(this.reopen, this); + this._getInpSelector = bind(this._getInpSelector, this); + this.getTemplateData = bind(this.getTemplateData, this); + this._onKey = bind(this._onKey, this); + this.input = bind(this.input, this); + this.open = bind(this.open, this); + this.renderResult = bind(this.renderResult, this); + this.focus = bind(this.focus, this); + this.events = bind(this.events, this); + this.initialize = bind(this.initialize, this); + return FacetSubsBase.__super__.constructor.apply(this, arguments); + } + + FacetSubsBase.prototype.resultTemplate = require("../../tmpls/result_base.jade"); + + FacetSubsBase.prototype.initialize = function(options) { + this.sub = options.sub; + this.result = new SubResults(); + }; + + FacetSubsBase.prototype.events = function() { + var obj; + return ( + obj = {}, + obj["keyup " + (this._getInpSelector())] = "input", + obj["keydown " + (this._getInpSelector())] = "input", + obj + ); + }; + + FacetSubsBase.prototype.focus = function() { + this.$el.removeClass("closed"); + this.focused = true; + this.$inp.focus(); + }; + + FacetSubsBase.prototype.renderResult = function(renderEmpty) { + var _lbl, _list, i, idx, len, model, ref; + if (renderEmpty == null) { + renderEmpty = false; + } + if (renderEmpty) { + return ""; + } + _list = []; + ref = this.result.models; + for (idx = i = 0, len = ref.length; i < len; idx = ++i) { + model = ref[idx]; + _lbl = model.getLabel(); + if ((_lbl != null) && _lbl !== "") { + _list.push(model.getLabel()); + } + } + if (_list.length) { + return "
  • " + _list.join("
  • ") + "
  • "; + } + return ""; + }; + + FacetSubsBase.prototype.open = function() { + this.$el.removeClass("closed"); + this.$el.addClass("open"); + this.isOpen = true; + this.trigger("opened"); + }; + + FacetSubsBase.prototype.input = function(evnt) { + if (evnt.type === "keydown") { + switch (evnt.keyCode) { + case KEYCODES.ENTER: + this.select(); + } + } + }; + + FacetSubsBase.prototype._onKey = function(evnt) { + var ref; + if (evnt.keyCode === KEYCODES.TAB || (ref = evnt.keyCode, indexOf.call(KEYCODES.TAB, ref) >= 0)) { + this._onTabAction(evnt); + return; + } + }; + + FacetSubsBase.prototype.getTemplateData = function() { + var ref, ret; + ret = { + cid: this.cid, + value: (ref = this.model) != null ? ref.get("value") : void 0 + }; + return ret; + }; + + FacetSubsBase.prototype._getInpSelector = function() { + return "input#" + this.cid; + }; + + FacetSubsBase.prototype.reopen = function(pView) { + this.$el.removeClass("closed"); + this.$el.addClass("open"); + this.render(); + if (pView != null) { + pView.open(); + } + }; + + FacetSubsBase.prototype.render = function(initialAdd) { + var _tmpl; + _tmpl = this.template(this.getTemplateData()); + this.$el.html(_tmpl); + if (!initialAdd) { + this.$el.removeClass("closed"); + } + this.$inp = this.$el.find(this._getInpSelector()); + }; + + FacetSubsBase.prototype._hasTabEvent = function() { + return "keydown"; + }; + + FacetSubsBase.prototype._hasTabListener = function() { + return true; + }; + + FacetSubsBase.prototype._onTabAction = function(evnt) { + evnt.preventDefault(); + evnt.stopPropagation(); + this.select(); + return true; + }; + + FacetSubsBase.prototype.close = function(evnt) { + this.focused = false; + this.$el.removeClass("open"); + this.$el.addClass("closed"); + this.isOpen = false; + this.trigger("closed", this.result, evnt); + }; + + FacetSubsBase.prototype.getResults = function() { + return { + value: this.getValue() + }; + }; + + FacetSubsBase.prototype.isResultEmpty = function(res) { + if ((res != null ? res.value : void 0) != null) { + return this.isResultEmpty(res.value); + } + if (res == null) { + return true; + } + if (res === "") { + return true; + } + if (_.isArray(res) && res.length <= 0) { + return true; + } + return false; + }; + + FacetSubsBase.prototype.getResValue = function() { + var ref, ref1, res; + res = (ref = this.result) != null ? (ref1 = ref.first()) != null ? ref1.toJSON() : void 0 : void 0; + return (res != null ? res.value : void 0) || ""; + }; + + FacetSubsBase.prototype.isEqualCurrent = function(val) { + var rv; + if (val == null) { + val = this.getValue(); + } + rv = this.getResValue(); + if (rv === val) { + return true; + } + return false; + }; + + FacetSubsBase.prototype.getValue = function() { + return this.$inp.val(); + }; + + FacetSubsBase.prototype.getSelectModel = function() { + return SubResults.prototype.model; + }; + + FacetSubsBase.prototype._checkSelectEmpty = function(_val, evnt) { + if (_.isEmpty(_val) && !_.isNumber(_val) && !_.isBoolean(_val)) { + this.close(evnt); + return true; + } + return false; + }; + + FacetSubsBase.prototype.select = function(evnt) { + var _val; + _val = this.getValue(); + if (this._checkSelectEmpty(_val, evnt)) { + return; + } + this.set(_val, evnt); + }; + + FacetSubsBase.prototype.set = function(val, evnt) { + var _ModelConst, _model; + _model = this.result.first(); + if (_model == null) { + _ModelConst = this.getSelectModel(); + _model = new _ModelConst({ + value: val + }); + this.result.add(_model); + } else { + _model.set({ + value: val + }); + } + this.trigger("selected", _model, evnt); + this.close(evnt); + }; + + return FacetSubsBase; + +})(Backbone.View); + +module.exports = FacetSubsBase; + + +},{"../../models/subresults":13,"../../tmpls/result_base.jade":18,"../../utils/keycodes":25}],27:[function(require,module,exports){ +var FacetSubsDateRange, KEYCODES, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + +KEYCODES = require("../../utils/keycodes"); + +FacetSubsDateRange = (function(superClass) { + extend(FacetSubsDateRange, superClass); + + function FacetSubsDateRange() { + this.select = bind(this.select, this); + this.getValue = bind(this.getValue, this); + this.getTemplateData = bind(this.getTemplateData, this); + this._dateReturn = bind(this._dateReturn, this); + this.renderResult = bind(this.renderResult, this); + this.remove = bind(this.remove, this); + this.close = bind(this.close, this); + this.focus = bind(this.focus, this); + this.events = bind(this.events, this); + this.forcedDateRangeOpts = bind(this.forcedDateRangeOpts, this); + return FacetSubsDateRange.__super__.constructor.apply(this, arguments); + } + + FacetSubsDateRange.prototype.template = require("../../tmpls/daterange.jade"); + + FacetSubsDateRange.prototype.forcedDateRangeOpts = function() { + var _ed, _opts, _sd, ref, ref1, ref2; + _opts = { + opens: "right" + }; + if (this.model.get("dateformat")) { + _opts.locale = { + format: this.model.get("dateformat") + }; + } + if (((ref = this.model.get("value")) != null ? ref[0] : void 0) != null) { + ((ref1 = this.model.get("value")) != null ? ref1[1] : void 0) != null; + if (_.isNumber(this.model.get("value")[0])) { + _sd = moment(this.model.get("value")[0]); + } else { + _sd = moment(this.model.get("value")[0], this.model.get("dateformat")); + } + if (_sd.isValid()) { + _opts.startDate = _sd._d; + } + } + if (((ref2 = this.model.get("value")) != null ? ref2[1] : void 0) != null) { + if (_.isNumber(this.model.get("value")[1])) { + _ed = moment(this.model.get("value")[1]); + } else { + _ed = moment(this.model.get("value")[1], this.model.get("dateformat")); + } + if (_ed.isValid()) { + _opts.endDate = _ed._d; + } + } + return _opts; + }; + + FacetSubsDateRange.prototype.events = function() {}; + + FacetSubsDateRange.prototype.focus = function() { + var _opts, ref; + if (this.daterangepicker == null) { + _opts = _.extend({}, this.model.get("opts"), this.forcedDateRangeOpts()); + this.$inp.daterangepicker(_opts, this._dateReturn); + this.daterangepicker = this.$inp.data("daterangepicker"); + if ((ref = this.daterangepicker.container) != null) { + ref.addClass("daterange-iggy"); + } + this.daterangepicker.container.on("click", function(evnt) { + evnt.stopPropagation(); + return false; + }); + } else { + this.daterangepicker.element = this.$inp; + this.daterangepicker.show(); + } + this.$inp.on("cancel.daterangepicker", this.close); + this.$inp.on("hide.daterangepicker", this.close); + return FacetSubsDateRange.__super__.focus.apply(this, arguments); + }; + + FacetSubsDateRange.prototype.close = function() { + FacetSubsDateRange.__super__.close.apply(this, arguments); + this.$inp.off("cancel.daterangepicker", this.close); + this.$inp.off("hide.daterangepicker", this.close); + }; + + FacetSubsDateRange.prototype.remove = function() { + var ref; + if ((ref = this.daterangepicker) != null) { + ref.remove(); + } + this.daterangepicker = null; + return FacetSubsDateRange.__super__.remove.apply(this, arguments); + }; + + FacetSubsDateRange.prototype.renderResult = function() { + var _endDate, _frmt, _res, _s, _startDate, _time; + _res = this.getResults(); + if (_.isNumber(_res.value[0])) { + _startDate = moment(_res.value[0]); + } else { + _startDate = moment(_res.value[0], this.model.get("dateformat")); + } + if (_res.value[1] != null) { + if (_.isNumber(_res.value[1])) { + _endDate = moment(_res.value[1]); + } else { + _endDate = moment(_res.value[1], this.model.get("dateformat")); + } + } + _time = this.model.get("opts").timePicker; + _s = "
  • "; + if (this.model.get("dateformat") != null) { + _frmt = this.model.get("dateformat"); + } else if (_time) { + _frmt = "LLLL"; + } else { + _frmt = "LL"; + } + _s += _startDate.format(_frmt); + if (_endDate != null) { + _s += " - "; + _s += _endDate.format(_frmt); + } + _s += "
  • "; + return _s; + }; + + FacetSubsDateRange.prototype._hasTabListener = function() { + return false; + }; + + FacetSubsDateRange.prototype._dateReturn = function(startDate, endDate) { + this.startDate = startDate; + this.endDate = endDate; + this.model.set("value", this.getValue(false)); + this.select(); + }; + + FacetSubsDateRange.prototype.getTemplateData = function() { + return FacetSubsDateRange.__super__.getTemplateData.apply(this, arguments); + }; + + FacetSubsDateRange.prototype.getValue = function(predef) { + var _out, _predefVal; + if (predef == null) { + predef = true; + } + if (predef) { + _predefVal = this.model.get("value"); + if (_predefVal != null) { + if (!_.isArray(_predefVal)) { + _predefVal = [_predefVal]; + } + this.startDate = _predefVal[0], this.endDate = _predefVal[1]; + return _predefVal; + } + } + _out = [this.startDate.valueOf()]; + if (this.endDate != null) { + _out.push(this.endDate.valueOf()); + } + return _out; + }; + + FacetSubsDateRange.prototype.select = function() { + var _ModelConst, _model; + _ModelConst = this.getSelectModel(); + _model = new _ModelConst({ + value: this.getValue() + }); + this.result.add(_model); + this.trigger("selected", _model); + this.close(); + }; + + return FacetSubsDateRange; + +})(require("./base")); + +module.exports = FacetSubsDateRange; + + +},{"../../tmpls/daterange.jade":15,"../../utils/keycodes":25,"./base":26}],28:[function(require,module,exports){ +var FacetNumberBase, KEYCODES, nearest, precision, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + +KEYCODES = require("../../utils/keycodes"); + +nearest = function(n, v) { + n = n / v; + n = Math.round(n) * v; + return n; +}; + +precision = function(n, dp) { + dp = Math.pow(10, dp); + n = n * dp; + n = Math.round(n); + n = n / dp; + return n; +}; + +FacetNumberBase = (function(superClass) { + extend(FacetNumberBase, superClass); + + function FacetNumberBase() { + this._setNumber = bind(this._setNumber, this); + this.getValue = bind(this.getValue, this); + this.crement = bind(this.crement, this); + this.input = bind(this.input, this); + this.events = bind(this.events, this); + this.setNumber = _.throttle(this._setNumber, 300, { + leading: false, + trailing: false + }); + FacetNumberBase.__super__.constructor.apply(this, arguments); + return; + } + + FacetNumberBase.prototype.events = function() { + var obj; + return ( + obj = {}, + obj["keyup " + (this._getInpSelector())] = "input", + obj["keydown " + (this._getInpSelector())] = "input", + obj + ); + }; + + FacetNumberBase.prototype.input = function(evnt) { + var _$el, _v; + _$el = $(evnt.currentTarget); + if (evnt.type === "keydown") { + switch (evnt.keyCode) { + case KEYCODES.UP: + this.crement(this.model.get("step"), _$el); + return; + case KEYCODES.DOWN: + this.crement(this.model.get("step") * -1, _$el); + return; + case KEYCODES.ENTER: + this.select(); + return; + } + } + if (evnt.type === "keyup") { + _v = evnt.currentTarget.value.replace(/[^\d]?[^-\d]+/g, ""); + _v = parseInt(_v, 10); + this.setNumber(_v, _$el); + } + }; + + FacetNumberBase.prototype.crement = function(change, el) { + var _v; + if (el == null) { + el = this.$inp; + } + _v = el.val(); + if (!(_v != null ? _v.length : void 0)) { + _v = this.model.get("value"); + } else { + _v = parseInt(_v, 10); + } + this._setNumber(_v + change, el); + }; + + FacetNumberBase.prototype.getValue = function() { + var _iv, _v; + _v = this.$inp.val(); + if (!(_v != null ? _v.length : void 0)) { + return null; + } + _iv = parseInt(_v, 10); + if (isNaN(_iv)) { + return null; + } + return this.valueByDefinition(_v); + }; + + FacetNumberBase.prototype._setNumber = function(_v, el) { + var _curr; + if (el == null) { + el = this.$inp; + } + if (isNaN(_v)) { + return; + } + _curr = el.val(); + _v = this.valueByDefinition(_v); + if (_curr !== _v.toString()) { + el.val(_v); + } + }; + + FacetNumberBase.prototype.valueByDefinition = function(_value) { + var _precision, _tmp, max, min, step; + max = this.model.get("max"); + min = this.model.get("min"); + step = this.model.get("step"); + if (min > max) { + _tmp = min; + min = max; + max = _tmp; + } + if ((min != null) && _value < min) { + return min; + } + if ((max != null) && _value > max) { + return max; + } + if (step !== 1) { + _value = nearest(_value, step); + } + _precision = Math.max(0, Math.ceil(Math.log(1 / step) / Math.log(10))); + if (_precision > 0) { + _value = precision(_value, _precision); + } else { + _value = Math.round(_value); + } + return _value; + }; + + return FacetNumberBase; + +})(require("./base")); + +module.exports = FacetNumberBase; + + +},{"../../utils/keycodes":25,"./base":26}],29:[function(require,module,exports){ +var ArrayOption, ArrayOptions, FacetSubArray, KEYCODES, StringOption, StringOptions, SubResults, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + +SubResults = require("../../models/subresults"); + +KEYCODES = require("../../utils/keycodes"); + +StringOption = (function(superClass) { + extend(StringOption, superClass); + + function StringOption() { + this.match = bind(this.match, this); + return StringOption.__super__.constructor.apply(this, arguments); + } + + StringOption.prototype.match = function(crit) { + var _s, found; + _s = this.get("value") + " " + this.get("label"); + found = _s.toLowerCase().indexOf(crit.toLowerCase()); + return found >= 0; + }; + + return StringOption; + +})(SubResults.prototype.model); + +StringOptions = (function(superClass) { + extend(StringOptions, superClass); + + function StringOptions() { + return StringOptions.__super__.constructor.apply(this, arguments); + } + + StringOptions.prototype.model = StringOption; + + return StringOptions; + +})(SubResults); + +ArrayOption = (function(superClass) { + extend(ArrayOption, superClass); + + function ArrayOption() { + this.match = bind(this.match, this); + this.getLabel = bind(this.getLabel, this); + return ArrayOption.__super__.constructor.apply(this, arguments); + } + + ArrayOption.prototype.idAttribute = "value"; + + ArrayOption.prototype.getLabel = function() { + return this.get("label") || this.get("name") || "-"; + }; + + ArrayOption.prototype.match = function(crit) { + var _s, found; + _s = this.get("value") + " " + this.get("label"); + found = _s.toLowerCase().indexOf(crit.toLowerCase()); + return found >= 0; + }; + + return ArrayOption; + +})(Backbone.Model); + +ArrayOptions = (function(superClass) { + extend(ArrayOptions, superClass); + + function ArrayOptions() { + return ArrayOptions.__super__.constructor.apply(this, arguments); + } + + ArrayOptions.prototype.model = ArrayOption; + + return ArrayOptions; + +})(require("../../models/backbone_sub")); + +FacetSubArray = (function(superClass) { + extend(FacetSubArray, superClass); + + FacetSubArray.prototype.templateResLi = require("../../tmpls/array_resultli.jade"); + + FacetSubArray.prototype.optDefault = { + label: "-", + value: "-" + }; + + FacetSubArray.prototype.selectCount = 0; + + FacetSubArray.prototype.optColl = StringOptions; + + function FacetSubArray(options) { + this._createOptionCollection = bind(this._createOptionCollection, this); + this._onTabAction = bind(this._onTabAction, this); + this.getResults = bind(this.getResults, this); + this.reopen = bind(this.reopen, this); + this.select = bind(this.select, this); + this._isFull = bind(this._isFull, this); + this.renderResult = bind(this.renderResult, this); + this.getTemplateData = bind(this.getTemplateData, this); + this.editRes = bind(this.editRes, this); + this.rmRes = bind(this.rmRes, this); + this.close = bind(this.close, this); + this.events = bind(this.events, this); + this.initialize = bind(this.initialize, this); + this.loading = false; + if (options.model.get("count") != null) { + this.selectCount = options.model.get("count"); + } + options.custom = true; + if (options.model.get("custom") != null) { + options.custom = Boolean(options.model.get("custom")); + } + this.collection = this._createOptionCollection(options.model.get("options")); + if (!options.custom && this.selectCount <= 0) { + this.selectCount = this.collection.length; + } + FacetSubArray.__super__.constructor.call(this, options); + this.result.on("remove", (function(_this) { + return function(mdl, coll) { + if (coll.length) { + options.sub.renderResult(); + } + _this.searchcoll.add(mdl); + _this.trigger("removed", mdl); + }; + })(this)); + return; + } + + FacetSubArray.prototype.initialize = function() { + this.editMode = false; + return FacetSubArray.__super__.initialize.apply(this, arguments); + }; + + FacetSubArray.prototype.events = function() { + var _evnts; + _evnts = FacetSubArray.__super__.events.apply(this, arguments); + _evnts["blur input#" + this.cid] = "close"; + return _evnts; + }; + + FacetSubArray.prototype.close = function(evnt) { + var _delSub, ref; + _delSub = false; + if (this.editMode) { + _delSub = true; + } + this.editMode = false; + if (this.loading) { + if (evnt != null) { + evnt.preventDefault(); + } + if (evnt != null) { + evnt.stopPropagation(); + } + this.focus(); + return; + } + if ((ref = this.model) != null ? ref.get("pinned") : void 0) { + return FacetSubArray.__super__.close.apply(this, arguments); + } + if (_delSub && this.result.length <= 0) { + this.sub.del(); + } + return FacetSubArray.__super__.close.apply(this, arguments); + }; + + FacetSubArray.prototype.rmRes = function(evnt) { + var _id, _mdl, ref; + if ((evnt != null ? evnt.target : void 0) != null) { + _id = (ref = $(evnt.target)) != null ? ref.data("id") : void 0; + } else if (evnt != null) { + _id = evnt; + } + _mdl = this.result.get(_id); + if (_mdl != null) { + this.result.remove(_id); + if (_mdl != null ? _mdl.get("custom") : void 0) { + this.searchcoll.remove(_id); + } + } + }; + + FacetSubArray.prototype.editRes = function(evnt) { + var _id, _v, ref; + this.editMode = true; + _id = (ref = $(evnt.target)) != null ? ref.data("id") : void 0; + _v = this._editval = this.result.get(_id).get("value"); + this.result.remove(_id); + this.searchcoll.remove(_id); + this.sub.reopen(); + this.search(_v); + }; + + FacetSubArray.prototype.getTemplateData = function() { + var _data, ref; + _data = FacetSubArray.__super__.getTemplateData.apply(this, arguments); + if ((ref = this._editval) != null ? ref.length : void 0) { + _data.inpval = this._editval; + this._editval = null; + } + return _data; + }; + + FacetSubArray.prototype.renderResult = function(renderEmpty) { + var _list, i, idx, len, model, ref; + if (renderEmpty == null) { + renderEmpty = false; + } + if (renderEmpty) { + return "
  • "; + } + _list = []; + ref = this.result.models; + for (idx = i = 0, len = ref.length; i < len; idx = ++i) { + model = ref[idx]; + _list.push(this.templateResLi({ + txt: model.getLabel(), + id: model.id, + custom: model.get("custom") + })); + } + return "
  • " + _list.join("
  • ") + "
  • "; + }; + + FacetSubArray.prototype._isFull = function() { + if (this.selectCount <= 0) { + return false; + } + return (this.result || []).length >= this.selectCount; + }; + + FacetSubArray.prototype.select = function() { + var _mdl, _val, _vals, i, len, ref; + if (this.loading) { + return; + } + if (this._isFull()) { + return; + } + _vals = this.model.get("value"); + if ((_vals != null) && !_.isArray(_vals)) { + _vals = [_vals]; + } + if (!(_vals != null ? _vals.length : void 0)) { + return; + } + ref = (this.selectCount <= 0 ? _vals : _vals.slice(0, this.selectCount)); + for (i = 0, len = ref.length; i < len; i++) { + _val = ref[i]; + _mdl = this.collection.get(_val); + if (_mdl == null) { + _mdl = new this.collection.model({ + value: _val, + custom: true + }); + } + this.selected(_mdl); + } + this.close(); + }; + + FacetSubArray.prototype.reopen = function(pView) { + if (this._isFull()) { + FacetSubArray.__super__.reopen.apply(this, arguments); + return; + } + FacetSubArray.__super__.reopen.apply(this, arguments); + }; + + FacetSubArray.prototype.getResults = function() { + return { + value: this.result.pluck("value") + }; + }; + + FacetSubArray.prototype._onTabAction = function(evnt) { + var searchContent; + evnt.preventDefault(); + evnt.stopPropagation(); + searchContent = this.$inp.val(); + if (searchContent != null ? searchContent.length : void 0) { + this.selectActive(); + return true; + } + this.close(); + return true; + }; + + FacetSubArray.prototype._createOptionCollection = function(options) { + var _coll, _opts, i, len, opt; + if (_.isFunction(options)) { + this.loading = true; + _coll = new this.optColl([]); + setTimeout((function(_this) { + return function() { + _this.$el.parent().addClass("loading"); + return options(_this.result, _this.model, function(aOpts) { + var _opt, i, idx, len; + for (idx = i = 0, len = aOpts.length; i < len; idx = ++i) { + _opt = aOpts[idx]; + aOpts[idx] = _.extend({}, _this.optDefault, _opt, { + custom: false + }); + } + _coll.add(aOpts); + _this.loading = false; + _this.$el.parent().removeClass("loading"); + _this.select(); + }); + }; + })(this), 0); + return _coll; + } + _opts = []; + for (i = 0, len = options.length; i < len; i++) { + opt = options[i]; + if (_.isString(opt) || _.isNumber(opt)) { + _opts.push({ + value: opt, + label: opt + }); + } else if (_.isObject(opt)) { + _opts.push(_.extend({}, this.optDefault, opt)); + } + } + return new this.optColl(_opts); + }; + + return FacetSubArray; + +})(require("../selector")); + +module.exports = FacetSubArray; + + +},{"../../models/backbone_sub":2,"../../models/subresults":13,"../../tmpls/array_resultli.jade":14,"../../utils/keycodes":25,"../selector":35}],30:[function(require,module,exports){ +var FacetSubsNumber, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + +FacetSubsNumber = (function(superClass) { + extend(FacetSubsNumber, superClass); + + function FacetSubsNumber() { + this.getResults = bind(this.getResults, this); + this._onTabAction = bind(this._onTabAction, this); + this.getTemplateData = bind(this.getTemplateData, this); + this.reopen = bind(this.reopen, this); + this.focus = bind(this.focus, this); + this._opSelected = bind(this._opSelected, this); + this.select = bind(this.select, this); + this.close = bind(this.close, this); + this.renderResult = bind(this.renderResult, this); + this.render = bind(this.render, this); + this.events = bind(this.events, this); + return FacetSubsNumber.__super__.constructor.apply(this, arguments); + } + + FacetSubsNumber.prototype.template = require("../../tmpls/number.jade"); + + FacetSubsNumber.prototype.events = function() { + var _evnts; + _evnts = FacetSubsNumber.__super__.events.apply(this, arguments); + _evnts["blur " + (this._getInpSelector())] = "select"; + return _evnts; + }; + + FacetSubsNumber.prototype.render = function() { + var ref; + FacetSubsNumber.__super__.render.apply(this, arguments); + if ((ref = this.model.get("operators")) != null ? ref.length : void 0) { + this.$elOp = this.$el.find(".operator"); + this.elOp = this.$elOp.get(0); + this.$inpOp = this.$el.find("select#" + this.cid + "op"); + this.select2Op = this.$inpOp.select2({ + width: "auto" + }).data("select2"); + this.$inpOp.on("select2:close", this._opSelected); + } + }; + + FacetSubsNumber.prototype.renderResult = function(renderEmpty) { + var _res, _s; + if (renderEmpty == null) { + renderEmpty = false; + } + if (renderEmpty) { + return ""; + } + _res = this.getResults(); + _s = "
  • "; + if (_res.operator != null) { + _s += _res.operator + " "; + } + _s += _res.value; + _s += "
  • "; + return _s; + }; + + FacetSubsNumber.prototype.close = function(evnt) { + if (this.$inpOp != null) { + this.$inpOp.select2("destroy"); + this.$inpOp.remove(); + this.$inpOp = null; + } + FacetSubsNumber.__super__.close.apply(this, arguments); + }; + + FacetSubsNumber.prototype.select = function(evnt) { + var _posOpWrp, _posWrp, _val, ref, ref1; + _posOpWrp = -1; + if (evnt != null ? evnt.relatedTarget : void 0) { + _posOpWrp = (ref = this.elOp) != null ? ref.compareDocumentPosition(evnt != null ? evnt.relatedTarget : void 0) : void 0; + if (_posOpWrp === 20) { + return; + } + } + if ((evnt != null ? evnt.type : void 0) === "focusout" && _posOpWrp !== 20) { + _val = this.getValue(); + if (_val != null) { + this.set(_val, evnt); + return; + } + this.close(); + return; + } + if ((evnt != null ? evnt.relatedTarget : void 0) != null) { + _posWrp = this.el.compareDocumentPosition(evnt != null ? evnt.relatedTarget : void 0); + if (!(_posWrp === 0 || _posWrp - 16 >= 0)) { + evnt.stopPropagation(); + return; + } + } + if ((evnt != null) && ((evnt != null ? evnt.relatedTarget : void 0) === this.$inp.get(0) || (evnt != null ? evnt.relatedTarget : void 0) === ((ref1 = this.$inpOp) != null ? ref1.get(0) : void 0))) { + evnt.stopPropagation(); + return; + } + if (this.$inpOp != null) { + this.model.set({ + operator: this.$inpOp.val() + }); + } + FacetSubsNumber.__super__.select.apply(this, arguments); + }; + + FacetSubsNumber.prototype._opSelected = function() { + this.selectedOP = true; + this.focus(); + }; + + FacetSubsNumber.prototype.focus = function(inp) { + if (inp == null) { + inp = false; + } + if ((this.$inpOp != null) && !this.selectedOP) { + this.$inpOp.select2("open"); + return; + } + FacetSubsNumber.__super__.focus.apply(this, arguments); + this.$inp.select(); + }; + + FacetSubsNumber.prototype.reopen = function(pView) { + var _oldOp, _oldVal, ref; + _oldVal = (ref = this.result.first()) != null ? ref.get("value") : void 0; + _oldOp = this.result.first(); + this.model.set({ + value: _oldVal + }); + pView.$results.empty().html(this.renderResult(true)); + FacetSubsNumber.__super__.reopen.apply(this, arguments); + }; + + FacetSubsNumber.prototype.getTemplateData = function() { + return _.extend(FacetSubsNumber.__super__.getTemplateData.apply(this, arguments), { + operators: this.model.get("operators"), + operator: this.model.get("operator") + }); + }; + + FacetSubsNumber.prototype._onTabAction = function(evnt) { + var _val, ref; + if ((ref = this.model.get("operators")) != null ? ref.length : void 0) { + if (this.$inp.is(evnt.target) && evnt.shiftKey) { + evnt.stopPropagation(); + evnt.preventDefault(); + this.$inpOp.focus(); + return false; + } + if ((this.select2Op.$selection.is(evnt.target) || evnt.target.classList.contains("select2-search__field")) && !evnt.shiftKey) { + evnt.stopPropagation(); + evnt.preventDefault(); + this.$inp.focus().select(); + return false; + } + } + _val = this.getValue(); + evnt.preventDefault(); + evnt.stopPropagation(); + if (!isNaN(_val)) { + this.select(evnt); + } + return true; + }; + + FacetSubsNumber.prototype.getResults = function() { + var _ret, ref; + if ((this.$inpOp != null) || (this.model.get("operator") != null)) { + _ret = { + value: this.getValue(), + operator: ((ref = this.$inpOp) != null ? ref.val() : void 0) || this.model.get("operator") + }; + } else { + _ret = { + value: this.getValue() + }; + } + return _ret; + }; + + return FacetSubsNumber; + +})(require("./number_base")); + +module.exports = FacetSubsNumber; + + +},{"../../tmpls/number.jade":16,"./number_base":28}],31:[function(require,module,exports){ +var FacetSubsRange, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + +FacetSubsRange = (function(superClass) { + extend(FacetSubsRange, superClass); + + function FacetSubsRange() { + this._onTabAction = bind(this._onTabAction, this); + this.getValue = bind(this.getValue, this); + this.getResults = bind(this.getResults, this); + this.close = bind(this.close, this); + this.select = bind(this.select, this); + this.reopen = bind(this.reopen, this); + this.clickSel = bind(this.clickSel, this); + this.focus = bind(this.focus, this); + this.render = bind(this.render, this); + this.renderResult = bind(this.renderResult, this); + this.events = bind(this.events, this); + this._getInpSelector = bind(this._getInpSelector, this); + return FacetSubsRange.__super__.constructor.apply(this, arguments); + } + + FacetSubsRange.prototype.template = require("../../tmpls/range.jade"); + + FacetSubsRange.prototype._getInpSelector = function(ext) { + if (ext == null) { + ext = "_from"; + } + return "input#" + this.cid + ext; + }; + + FacetSubsRange.prototype.events = function() { + var obj; + return ( + obj = {}, + obj["keyup " + (this._getInpSelector())] = "input", + obj["keydown " + (this._getInpSelector())] = "input", + obj["keyup " + (this._getInpSelector("_to"))] = "input", + obj["keydown " + (this._getInpSelector("_to"))] = "input", + obj["blur " + (this._getInpSelector())] = "select", + obj["blur " + (this._getInpSelector("_to"))] = "select", + obj["mousedown " + (this._getInpSelector())] = "clickSel", + obj["mousedown " + (this._getInpSelector("_to"))] = "clickSel", + obj + ); + }; + + FacetSubsRange.prototype.renderResult = function(renderEmpty) { + var _res; + if (renderEmpty == null) { + renderEmpty = false; + } + if (renderEmpty) { + return ""; + } + _res = this.getResults(); + return "
  • " + _res.value.join(" - ") + "
  • "; + }; + + FacetSubsRange.prototype.render = function() { + FacetSubsRange.__super__.render.apply(this, arguments); + this.$inpTo = this.$el.find(this._getInpSelector("_to")); + }; + + FacetSubsRange.prototype.focus = function(inp) { + if (inp == null) { + inp = false; + } + FacetSubsRange.__super__.focus.apply(this, arguments); + this.$inp.select(); + }; + + FacetSubsRange.prototype.clickSel = function(evnt) { + evnt.currentTarget.focus(); + }; + + FacetSubsRange.prototype.reopen = function(pView) { + var _oldVal; + _oldVal = this.result.first().get("value"); + this.model.set({ + value: _oldVal + }); + pView.$results.empty().html(this.renderResult(true)); + FacetSubsRange.__super__.reopen.apply(this, arguments); + }; + + FacetSubsRange.prototype.select = function(evnt) { + if ((evnt != null) && ((evnt != null ? evnt.relatedTarget : void 0) === this.$inp.get(0) || (evnt != null ? evnt.relatedTarget : void 0) === this.$inpTo.get(0))) { + evnt.stopPropagation(); + return; + } + FacetSubsRange.__super__.select.apply(this, arguments); + }; + + FacetSubsRange.prototype.close = function() { + try { + this.$(".rangeinp").remove(); + } catch (error) {} + FacetSubsRange.__super__.close.apply(this, arguments); + }; + + FacetSubsRange.prototype.getResults = function() { + var _ret; + _ret = { + value: this.getValue() + }; + return _ret; + }; + + FacetSubsRange.prototype.getValue = function() { + var _v, _vFrom, _vTo; + _vFrom = FacetSubsRange.__super__.getValue.apply(this, arguments); + _v = this.$inpTo.val(); + if (!(_v != null ? _v.length : void 0)) { + return null; + } + _vTo = parseInt(this.valueByDefinition(_v), 10); + return [_vFrom, _vTo]; + }; + + FacetSubsRange.prototype._onTabAction = function(evnt) { + var _val; + if (this.$inp.is(evnt.target) && !evnt.shiftKey) { + evnt.stopPropagation(); + evnt.preventDefault(); + this.$inpTo.focus().select(); + console.log("focus next"); + return false; + } + if (this.$inpTo.is(evnt.target) && evnt.shiftKey) { + evnt.stopPropagation(); + evnt.preventDefault(); + this.$inp.focus().select(); + return false; + } + _val = this.getValue(); + if ((_val != null ? _val.length : void 0) >= 2) { + evnt.preventDefault(); + evnt.stopPropagation(); + this.select(); + return true; + } + return true; + }; + + return FacetSubsRange; + +})(require("./number_base")); + +module.exports = FacetSubsRange; + + +},{"../../tmpls/range.jade":17,"./number_base":28}],32:[function(require,module,exports){ +var FacetSubsSelect, KEYCODES, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + +KEYCODES = require("../../utils/keycodes"); + +FacetSubsSelect = (function(superClass) { + extend(FacetSubsSelect, superClass); + + function FacetSubsSelect() { + this._select = bind(this._select, this); + this.select = bind(this.select, this); + this.close = bind(this.close, this); + this.unselect = bind(this.unselect, this); + this._createOptionCollection = bind(this._createOptionCollection, this); + this.getResults = bind(this.getResults, this); + this._convertValue = bind(this._convertValue, this); + this.getValue = bind(this.getValue, this); + this._hasTabListener = bind(this._hasTabListener, this); + this.getTemplateData = bind(this.getTemplateData, this); + this.remove = bind(this.remove, this); + this._initSelect2 = bind(this._initSelect2, this); + this._checkIntValue = bind(this._checkIntValue, this); + this.reopen = bind(this.reopen, this); + this._isFull = bind(this._isFull, this); + this.focus = bind(this.focus, this); + this.render = bind(this.render, this); + this._getInpSelector = bind(this._getInpSelector, this); + this.events = bind(this.events, this); + return FacetSubsSelect.__super__.constructor.apply(this, arguments); + } + + FacetSubsSelect.prototype.template = require("../../tmpls/select.jade"); + + FacetSubsSelect.prototype.forcedModuleOpts = {}; + + FacetSubsSelect.prototype.defaultModuleOpts = { + width: "auto", + multiple: false + }; + + FacetSubsSelect.prototype.initialize = function() { + this.convertValueToInt = this._checkIntValue(this.model.get("options")); + FacetSubsSelect.__super__.initialize.apply(this, arguments); + }; + + FacetSubsSelect.prototype.events = function() { + var _evnts; + _evnts = {}; + if (this.model.get("multiple")) { + _evnts["click .select-check"] = "select"; + } + return _evnts; + }; + + FacetSubsSelect.prototype._getInpSelector = function() { + return "select#" + this.cid; + }; + + FacetSubsSelect.prototype.render = function() { + FacetSubsSelect.__super__.render.apply(this, arguments); + if (this.model.get("pinned")) { + this._initSelect2(); + } + }; + + FacetSubsSelect.prototype.focus = function() { + this.model.set("waitForAsync", false); + this._initSelect2(); + this.select2.$container.show(); + this.select2.open(); + return FacetSubsSelect.__super__.focus.apply(this, arguments); + }; + + FacetSubsSelect.prototype._isFull = function() { + if (this.selectCount <= 0) { + return false; + } + return (this.result || []).length >= this.selectCount; + }; + + FacetSubsSelect.prototype.reopen = function(pView) { + var _oldVals; + if (this._isFull()) { + return; + } + _oldVals = this.result.pluck("value"); + this.model.set({ + value: _oldVals + }); + pView.$results.empty(); + this.select2.$container.off(); + this.select2.destroy(); + this.result.reset(); + this.select2 = null; + return FacetSubsSelect.__super__.reopen.apply(this, arguments); + }; + + FacetSubsSelect.prototype._checkIntValue = function(_opts) { + var _v, i, len; + if (_opts == null) { + _opts = []; + } + if (!_opts || !_opts.length) { + return false; + } + for (i = 0, len = _opts.length; i < len; i++) { + _v = _opts[i]; + if ((_v.value != null) && _.isString(_v.value)) { + return false; + } + if ((_v.id != null) && _.isString(_v.id)) { + return false; + } + if ((_v != null) && _.isString(_v)) { + return false; + } + } + return true; + }; + + FacetSubsSelect.prototype._initSelect2 = function() { + var _opts; + if (this.select2 == null) { + _opts = _.extend({}, this.defaultModuleOpts, this.model.get("opts"), { + multiple: this.model.get("multiple") || false + }, this.forcedModuleOpts); + this.$inp.select2(_opts); + this.select2 = this.$inp.data("select2"); + if (!this.model.get("multiple")) { + this.$inp.on("select2:select select2:close", this.select); + } + if (!this.select2._eventsAdded) { + this.select2._eventsAdded = true; + this.select2.on("results:all", (function(_this) { + return function(results) { + var ref, ref1, ref2; + _this.convertValueToInt = _this._checkIntValue(results != null ? (ref = results.data) != null ? ref.results : void 0 : void 0); + if ((ref1 = _this.select2.selection) != null) { + if ((ref2 = ref1.$search) != null) { + if (typeof ref2.focus === "function") { + ref2.focus(); + } + } + } + }; + })(this)); + this.select2.dataAdapter.current((function(_this) { + return function(results) { + var _data, i, len, result; + if (_this.model.get("waitForAsync")) { + _data = []; + for (i = 0, len = results.length; i < len; i++) { + result = results[i]; + _data.push(_this._convertValue(result)); + } + _this._select(_data); + _this.close(); + } + }; + })(this)); + this.select2.$container.on("click", this._sel2open); + this.select2.$element.hide(); + this.select2.$selection.on("focusout", (function(_this) { + return function(evnt) { + _this.TMfocusOut = setTimeout(function() { + _this.select(); + }, 150); + }; + })(this)); + this.select2.$selection.on("focusin", (function(_this) { + return function(evnt) { + if (_this.TMfocusOut != null) { + clearTimeout(_this.TMfocusOut); + } + }; + })(this)); + } + } + return this.select2; + }; + + FacetSubsSelect.prototype._sel2open = function(evnt) { + evnt.stopPropagation(); + return false; + }; + + FacetSubsSelect.prototype.remove = function() { + return FacetSubsSelect.__super__.remove.apply(this, arguments); + }; + + FacetSubsSelect.prototype.getTemplateData = function() { + var _data, _groups, _idx, _v, _vlist, i, j, len, len1, ref, ref1; + _data = _.extend({}, FacetSubsSelect.__super__.getTemplateData.apply(this, arguments), { + multiple: this.model.get("multiple"), + options: this._createOptionCollection(this.model.get("options")) + }); + if ((_data.value != null) && _.isArray(_data.value)) { + ref = _data.value; + for (_idx = i = 0, len = ref.length; i < len; _idx = ++i) { + _v = ref[_idx]; + _data.value[_idx] = this.convertValueToInt ? parseFloat(_v) : _v.toString(); + } + } else if (_data.value != null) { + _data.value = [this.convertValueToInt ? parseFloat(_data.value) : _data.value.toString()]; + } + if (_data.value != null) { + _vlist = _.pluck(_data.options, "value"); + ref1 = _data.value; + for (j = 0, len1 = ref1.length; j < len1; j++) { + _v = ref1[j]; + if (indexOf.call(_vlist, _v) < 0) { + _data.options.push({ + value: (this.convertValueToInt ? parseFloat(_v) : _v.toString()), + label: _v, + group: void 0 + }); + } + } + } + _groups = _.groupBy(_data.options, "group"); + if (_.compact(_.keys(_groups || {})).length > 1) { + _data.optionGroups = _groups; + } + return _data; + }; + + FacetSubsSelect.prototype._hasTabListener = function(create) { + if (create) { + return false; + } + return this.model.get("multiple"); + }; + + FacetSubsSelect.prototype._hasTabEvent = function() { + return "keyup"; + }; + + FacetSubsSelect.prototype.getValue = function() { + var _vals, data, i, len, ref, ref1; + _vals = []; + ref1 = ((ref = this._initSelect2()) != null ? ref.data() : void 0) || []; + for (i = 0, len = ref1.length; i < len; i++) { + data = ref1[i]; + _vals.push(this._convertValue(data)); + } + return _vals; + }; + + FacetSubsSelect.prototype._convertValue = function(data) { + var _data; + _data = {}; + if (this.convertValueToInt) { + _data.value = parseFloat(data.id); + } else { + _data.value = data.id; + } + if (data.text != null) { + if (data.text instanceof jQuery) { + _data.label = data.text.html(); + } else { + _data.label = data.text; + } + } + return _data; + }; + + FacetSubsSelect.prototype.getResults = function() { + return { + value: this.result.pluck("value") + }; + }; + + FacetSubsSelect.prototype._createOptionCollection = function(options) { + var _opts, i, len, opt; + if (_.isFunction(options)) { + return options(this._createOptionCollection); + } + _opts = []; + for (i = 0, len = options.length; i < len; i++) { + opt = options[i]; + if (_.isString(opt) || _.isNumber(opt)) { + _opts.push({ + value: (this.convertValueToInt ? parseFloat(opt) : opt.toString()), + label: opt, + group: null + }); + } else if (_.isObject(opt)) { + opt.value = this.convertValueToInt ? parseFloat(opt.value) : opt.value.toString(); + _opts.push(_.extend({}, this.optDefault, opt)); + } + } + return _opts; + }; + + FacetSubsSelect.prototype.unselect = function(evnt) { + var ref, ref1; + this.result.remove((ref = evnt.params) != null ? (ref1 = ref.data) != null ? ref1.id : void 0 : void 0); + }; + + FacetSubsSelect.prototype.close = function() { + var ref; + if (this.model.get("waitForAsync")) { + return; + } + if (this.select2 != null) { + this.select2.$container.hide(); + } + if ((ref = this.$inp) != null) { + ref.remove(); + } + this.$(".select-check").remove(); + FacetSubsSelect.__super__.close.apply(this, arguments); + }; + + FacetSubsSelect.prototype.select = function(evnt) { + var _vals; + if (evnt != null ? evnt.stopPropagation : void 0) { + evnt.stopPropagation(); + } + _vals = this.getValue(); + if (!(_vals != null ? _vals.length : void 0)) { + this.close(); + if (!this.model.get("waitForAsync")) { + this.sub.del(); + } + return; + } + this._select(_vals); + this.close(); + }; + + FacetSubsSelect.prototype._select = function(_vals) { + var ModelConst, _val, i, len; + this.model.set("waitForAsync", false); + ModelConst = this.getSelectModel(); + for (i = 0, len = _vals.length; i < len; i++) { + _val = _vals[i]; + this.result.add(new ModelConst(_val)); + } + this.trigger("selected", this.result); + }; + + return FacetSubsSelect; + +})(require("./base")); + +module.exports = FacetSubsSelect; + + +},{"../../tmpls/select.jade":19,"../../utils/keycodes":25,"./base":26}],33:[function(require,module,exports){ +var FacetSubString, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + +FacetSubString = (function(superClass) { + extend(FacetSubString, superClass); + + function FacetSubString() { + this.focus = bind(this.focus, this); + this.reopen = bind(this.reopen, this); + this.close = bind(this.close, this); + this.events = bind(this.events, this); + return FacetSubString.__super__.constructor.apply(this, arguments); + } + + FacetSubString.prototype.template = require("../../tmpls/string.jade"); + + FacetSubString.prototype.events = function() { + var obj; + return ( + obj = {}, + obj["keyup " + (this._getInpSelector())] = "input", + obj["keydown " + (this._getInpSelector())] = "input", + obj["blur " + (this._getInpSelector())] = "select", + obj + ); + }; + + FacetSubString.prototype.close = function(evnt) { + var ref; + FacetSubString.__super__.close.apply(this, arguments); + try { + if ((ref = this.$inp) != null) { + if (typeof ref.remove === "function") { + ref.remove(); + } + } + } catch (error) {} + }; + + FacetSubString.prototype.reopen = function(pView) { + var _oldVal, ref, ref1; + _oldVal = (ref = this.result) != null ? (ref1 = ref.first()) != null ? ref1.get("value") : void 0 : void 0; + this.model.set({ + value: _oldVal + }); + pView.$results.empty().html(this.renderResult(true)); + FacetSubString.__super__.reopen.apply(this, arguments); + }; + + FacetSubString.prototype.focus = function() { + FacetSubString.__super__.focus.apply(this, arguments); + this.$inp.select(); + }; + + return FacetSubString; + +})(require("./base")); + +module.exports = FacetSubString; + + +},{"../../tmpls/string.jade":22,"./base":26}],34:[function(require,module,exports){ +var KEYCODES, MainView, SelectorView, SubView, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + +SubView = require("./sub"); + +SelectorView = require("./selector"); + +KEYCODES = require("../utils/keycodes"); + +MainView = (function(superClass) { + extend(MainView, superClass); + + function MainView() { + this._outerClick = bind(this._outerClick, this); + this._onFocusSearch = bind(this._onFocusSearch, this); + this._onSearch = bind(this._onSearch, this); + this.focusSearch = bind(this.focusSearch, this); + this._nextFacet = bind(this._nextFacet, this); + this._keyListen = bind(this._keyListen, this); + this._outerClickListen = bind(this._outerClickListen, this); + this._onClosed = bind(this._onClosed, this); + this._onOpened = bind(this._onOpened, this); + this.addFacet = bind(this.addFacet, this); + this.genSub = bind(this.genSub, this); + this.setFacet = bind(this.setFacet, this); + this.remFacet = bind(this.remFacet, this); + this.exit = bind(this.exit, this); + this._addFacet = bind(this._addFacet, this); + this.render = bind(this.render, this); + this.templateData = bind(this.templateData, this); + this.initialize = bind(this.initialize, this); + return MainView.__super__.constructor.apply(this, arguments); + } + + MainView.prototype.template = require("../tmpls/wrapper.jade"); + + MainView.prototype.events = { + "mousedown .search-btn": "_onSearch", + "click .search-btn": "_onSearch", + "focus .search-btn": "_onFocusSearch", + "mousedown .add-facet-btn": "_addFacet", + "click": "_addFacet" + }; + + MainView.prototype.initialize = function(options) { + var _cl, _fnSort, _valueFacets, fct, i, len, ref, ref1; + this.main = options.main; + this.idx = options.idx; + this.results = options.results; + this.searchButton = options.searchButton; + this.facets = {}; + this.collection.on("iggy:rem", this.remFacet); + _cl = "iggy clearfix"; + if ((ref = this.el.className) != null ? ref.length : void 0) { + _cl = " " + _cl; + } + this.el.className += _cl; + this.render(); + this._outerClickListen(); + this._keyListen(); + _valueFacets = this.collection.filter(function(fct) { + return ((fct != null ? fct.get("value") : void 0) != null) || (fct != null ? fct.get("pinned") : void 0); + }); + _fnSort = function(key) { + return function(v1, v2) { + if (v1[key] > v2[key]) { + return 1; + } + if (v1[key] < v2[key]) { + return -1; + } + return 0; + }; + }; + ref1 = _valueFacets.sort(_fnSort("_idx")); + for (i = 0, len = ref1.length; i < len; i++) { + fct = ref1[i]; + this.genSub(fct, false, true); + } + this.collection.on("add", (function(_this) { + return function() { + _this.$addBtn.show(); + }; + })(this)); + setTimeout((function(_this) { + return function() { + var _active, view; + _active = _this.collection.filter(function(fct) { + return (fct != null ? fct.get("active") : void 0) && (fct != null ? fct.get("pinned") : void 0); + }); + if (_active.length) { + view = _this.facets[_active[0].id]; + if (view != null) { + view.reopen(); + } + if (view != null) { + view.focus(); + } + } + }; + })(this), 0); + }; + + MainView.prototype.templateData = function() { + var _ret; + _ret = { + tab_index: (((this.idx || 1) + 1) * 1000) - 10 + }; + if (this.searchButton != null) { + _ret.searchButton = { + template: this.searchButton.template || "", + event: this.searchButton.event || "search", + pullright: this.searchButton.pullright || false, + cssclass: this.searchButton.cssclass || "btn btn-primary fa fa-search" + }; + } + return _ret; + }; + + MainView.prototype.render = function() { + var _tplData; + _tplData = this.templateData(); + this.$el.html(this.template(_tplData)); + this.$addBtn = this.$(".add-facet-btn"); + if (_tplData.searchButton != null) { + this.$searchBtn = this.$(".search-btn"); + } + }; + + MainView.prototype._addFacet = function(evnt) { + this.TMopenAddFacet = setTimeout((function(_this) { + return function() { + _this.addFacet(); + }; + })(this), 0); + }; + + MainView.prototype.exit = function(nextAdd) { + if (nextAdd == null) { + nextAdd = true; + } + if (this.subview) { + this.subview.close(); + this.subview = null; + if (nextAdd) { + this.addFacet(); + } + return; + } + if (this.selectview) { + this.selectview.close(); + this.selectview = null; + } + }; + + MainView.prototype.remFacet = function(facetM) { + this.results.remove(facetM.get("name")); + }; + + MainView.prototype.setFacet = function(facetM, data) { + this.collection.remove(facetM); + this.results.add(_.extend(data, { + name: facetM.get("name"), + type: facetM.get("type") + }), { + merge: true, + parse: true, + _facet: facetM + }); + if (!this.collection.length) { + this.$addBtn.hide(); + } + }; + + MainView.prototype.genSub = function(facetM, addAfter, initialAdd) { + var _self, subview; + if (addAfter == null) { + addAfter = true; + } + if (initialAdd == null) { + initialAdd = false; + } + subview = new SubView({ + model: facetM, + collection: this.collection, + parent: this + }); + subview.on("closed", (function(_this) { + return function(results, evnt) { + var ref; + if (subview != null ? (ref = subview.model) != null ? ref.get("pinned") : void 0 : void 0) { + _this.subview = null; + return; + } + if (!(results != null ? results.length : void 0)) { + subview.remove(); + } + _this.subview = null; + if (addAfter && (evnt != null ? evnt.type : void 0) !== "focusout") { + _this.addFacet(); + } + }; + })(this)); + subview.on("reopen", (function(_this) { + return function() { + var ref; + if ((ref = _this.selectview) != null) { + ref.close(); + } + }; + })(this)); + _self = this; + subview.on("selected", function(facetM, data, evnt) { + _self.setFacet(facetM, data); + if (((this.selectview._isFull == null) || this.selectview._isFull()) && (evnt != null ? evnt.type : void 0) !== "focusout") { + _self._nextFacet(null, this); + } + }); + subview.eventsAttached = true; + this.$addBtn.before(subview.render(initialAdd)); + this.facets[facetM.id] = subview; + return subview; + }; + + MainView.prototype.addFacet = function() { + if (this.selectview != null) { + this.selectview.focus(); + return; + } + if (this.subview != null) { + this.subview.close(); + } + if (!this.collection.length) { + return; + } + this.selectview = new SelectorView({ + collection: this.collection, + custom: false, + main: this + }); + this.selectview.on("opened", (function(_this) { + return function() { + _this._onOpened(); + }; + })(this)); + this.selectview.on("closed", (function(_this) { + return function(results) { + _this._onClosed(); + _this.selectview.remove(); + _this.selectview = null; + if (!(results != null ? results.length : void 0) && (_this.subview != null)) { + _this.subview.remove(); + _this.subview = null; + } + }; + })(this)); + this.selectview.on("selected", (function(_this) { + return function(facetM, data, evnt) { + facetM.set("value", null); + _this.subview = _this.genSub(facetM); + _this.subview.open(); + }; + })(this)); + this.$addBtn.before(this.selectview.render()); + this.selectview.focus(); + }; + + MainView.prototype._onOpened = function() { + var ref; + if ((ref = this.$addBtn) != null) { + ref.hide(); + } + }; + + MainView.prototype._onClosed = function() { + var ref; + if ((ref = this.$addBtn) != null) { + ref.show(); + } + }; + + MainView.prototype._outerClickListen = function() { + jQuery(document).on("click", this._outerClick); + }; + + MainView.prototype._keyListen = function() { + jQuery(document).on("keydown", (function(_this) { + return function(evnt) { + var _prevId, ref, ref1, ref2, ref3, ref4, ref5; + if (evnt.keyCode === KEYCODES.TAB || (ref = evnt.keyCode, indexOf.call(KEYCODES.TAB, ref) >= 0)) { + if ($(evnt.target).is(".search-btn") && (evnt != null ? evnt.shiftKey : void 0)) { + if (evnt != null) { + evnt.preventDefault(); + } + if (evnt != null) { + evnt.stopPropagation(); + } + _this.TMopenAddFacet = setTimeout(function() { + return _this.addFacet(); + }, 0); + return; + } + if ((ref1 = _this.selectview) != null ? ref1.isOpen : void 0) { + if (evnt != null) { + evnt.preventDefault(); + } + if (evnt != null) { + evnt.stopPropagation(); + } + if (evnt != null ? evnt.shiftKey : void 0) { + _prevId = (ref2 = _this.$addBtn) != null ? (ref3 = ref2.prevAll(".sub")) != null ? (ref4 = ref3.first()) != null ? ref4.data("fctid") : void 0 : void 0 : void 0; + if (_prevId != null) { + setTimeout(function() { + var ref5; + return (ref5 = _this.facets[_prevId]) != null ? ref5.reopen() : void 0; + }, 0); + } + } else { + _this.selectview.close(); + _this.focusSearch(); + } + return; + } + _this.trigger("escape", evnt, _this._nextFacet); + return; + } + if (evnt.keyCode === KEYCODES.ESC || (ref5 = evnt.keyCode, indexOf.call(KEYCODES.ESC, ref5) >= 0)) { + _this.exit(); + _this.trigger("escape", evnt); + return; + } + }; + })(this)); + }; + + MainView.prototype._nextFacet = function(evnt, subView) { + var _next, _nextFn, _nextId, ref; + _nextFn = (evnt != null ? evnt.shiftKey : void 0) ? "prev" : "next"; + _next = (ref = subView.$el) != null ? typeof ref[_nextFn] === "function" ? ref[_nextFn]() : void 0 : void 0; + if (_next.hasClass("add-facet-btn")) { + if (evnt != null) { + evnt.preventDefault(); + } + if (evnt != null) { + evnt.stopPropagation(); + } + setTimeout((function(_this) { + return function() { + return _this.addFacet(); + }; + })(this), 0); + return; + } + _nextId = _next != null ? _next.data("fctid") : void 0; + if (_nextId != null) { + if (evnt != null) { + evnt.preventDefault(); + } + setTimeout((function(_this) { + return function() { + var ref1; + return (ref1 = _this.facets[_nextId]) != null ? ref1.reopen() : void 0; + }; + })(this), 0); + } + }; + + MainView.prototype.focusSearch = function() { + if (this.$searchBtn != null) { + this.$searchBtn.focus(); + } + }; + + MainView.prototype._onSearch = function(evnt) { + evnt.stopPropagation(); + this.exit(); + this.trigger("searchbutton", this.searchButton.event); + }; + + MainView.prototype._onFocusSearch = function(evnt) { + var ref; + evnt.stopPropagation(); + if ((ref = this.selectview) != null) { + if (typeof ref.close === "function") { + ref.close(); + } + } + }; + + MainView.prototype._outerClick = function(evnt) { + var _posWrp; + if (this.TMopenAddFacet != null) { + clearTimeout(this.TMopenAddFacet); + } + _posWrp = this.el.compareDocumentPosition(evnt.target); + if (!(_posWrp === 0 || _posWrp - 16 >= 0)) { + this.exit(false); + } + }; + + return MainView; + +})(Backbone.View); + +module.exports = MainView; + + +},{"../tmpls/wrapper.jade":24,"../utils/keycodes":25,"./selector":35,"./sub":36}],35:[function(require,module,exports){ +var KEYCODES, SelectorView, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + +KEYCODES = require("../utils/keycodes"); + +SelectorView = (function(superClass) { + extend(SelectorView, superClass); + + SelectorView.prototype.template = require("../tmpls/selector.jade"); + + SelectorView.prototype.templateEl = require("../tmpls/selectorli.jade"); + + SelectorView.prototype.selectCount = 1; + + SelectorView.prototype.className = function() { + var cls; + cls = ["add-facet"]; + if (this.custom) { + cls.push("custom"); + } + return cls.join(" "); + }; + + SelectorView.prototype.events = function() { + var obj; + return ( + obj = { + "mousedown a": "_onClick" + }, + obj["focus input#" + this.cid] = "open", + obj["keydown input#" + this.cid] = "search", + obj["keyup input#" + this.cid] = "search", + obj + ); + }; + + function SelectorView(options) { + this.selectActive = bind(this.selectActive, this); + this.select = bind(this.select, this); + this.move = bind(this.move, this); + this.search = bind(this.search, this); + this.open = bind(this.open, this); + this.focus = bind(this.focus, this); + this.selected = bind(this.selected, this); + this._onTabAction = bind(this._onTabAction, this); + this._isFull = bind(this._isFull, this); + this._onClick = bind(this._onClick, this); + this.checkOptionsEmpty = bind(this.checkOptionsEmpty, this); + this.scrollHelper = bind(this.scrollHelper, this); + this._checkScroll = bind(this._checkScroll, this); + this.renderRes = bind(this.renderRes, this); + this.render = bind(this.render, this); + this.getTemplateData = bind(this.getTemplateData, this); + this.initialize = bind(this.initialize, this); + this.events = bind(this.events, this); + this.className = bind(this.className, this); + this.custom = options.custom || false; + this.activeIdx = 0; + this.currQuery = ""; + if (options.main != null) { + this.main = options.main; + } + SelectorView.__super__.constructor.call(this, options); + return; + } + + SelectorView.prototype.initialize = function(options) { + SelectorView.__super__.initialize.apply(this, arguments); + this.searchcoll = this.collection.sub(function() { + return true; + }); + this.result = new this.collection.constructor(); + this.listenTo(this.searchcoll, "add", this.renderRes); + this.listenTo(this.searchcoll, "remove", this.renderRes); + this.listenTo(this.searchcoll, "remove", this.checkOptionsEmpty); + }; + + SelectorView.prototype.getTemplateData = function() { + return _.extend(SelectorView.__super__.getTemplateData.apply(this, arguments), { + custom: this.custom + }); + }; + + SelectorView.prototype.render = function() { + SelectorView.__super__.render.apply(this, arguments); + this.$list = this.$el.find("#" + this.cid + "typelist"); + this.renderRes(); + return this.el; + }; + + SelectorView.prototype.renderRes = function() { + var _cssclass, _id, _lbl, _list, _tmpl, i, idx, len, model, ref, ref1; + this.$list.empty(); + _list = []; + ref = this.searchcoll.models; + for (idx = i = 0, len = ref.length; i < len; idx = ++i) { + model = ref[idx]; + if (!(!model.get("pinned"))) { + continue; + } + _lbl = model.getLabel(); + _tmpl = model.get("labeltemplate"); + if (_tmpl != null) { + _lbl = _tmpl.replace("{{label}}", _lbl); + } + _id = model.id; + _cssclass = model.get("cssclass"); + if (((ref1 = this.currQuery) != null ? ref1.length : void 0) > 1) { + _lbl = _lbl.replace(new RegExp(this.currQuery, "gi"), (function(str) { + return "" + str + ""; + })); + } + _list.push({ + label: _lbl, + id: _id, + cssclass: _cssclass + }); + } + this.$list.append(this.templateEl({ + list: _list, + query: this.currQuery, + activeIdx: this.activeIdx, + custom: this.custom + })); + this._checkScroll(); + return this.$list; + }; + + SelectorView.prototype._scrollTill = 198; + + SelectorView.prototype._checkScroll = function() { + var _height; + _height = this.$list.height(); + if (_height > 0) { + this.scrollHelper(_height); + return; + } + setTimeout((function(_this) { + return function() { + return _this.scrollHelper(_this.$list.height()); + }; + })(this), 0); + }; + + SelectorView.prototype.scrollHelper = function(height) { + if (height >= this._scrollTill) { + this.scrolling = true; + } else { + this.scrolling = false; + } + }; + + SelectorView.prototype.checkOptionsEmpty = function() {}; + + SelectorView.prototype._onClick = function(evnt) { + var _id, _mdl; + evnt.stopPropagation(); + evnt.preventDefault(); + _id = this.$(evnt.currentTarget).data("id"); + if (_id == null) { + return; + } + _mdl = this.collection.get(_id); + if (_mdl == null) { + return; + } + this.selected(_mdl); + return false; + }; + + SelectorView.prototype._isFull = function() { + return true; + }; + + SelectorView.prototype._onTabAction = function(evnt) { + if (this.main != null) { + evnt.preventDefault(); + evnt.stopPropagation(); + this.main.focusSearch(); + } else { + SelectorView.__super__._onTabAction.call(this, event); + } + }; + + SelectorView.prototype.selected = function(mdl) { + var _err, _errerr, _id, ref; + if ((this.main == null) && this._isFull()) { + _id = (ref = this.result.last()) != null ? ref.id : void 0; + this.rmRes(_id); + } + try { + if (mdl.onlyExec != null) { + if (mdl != null) { + if (typeof mdl.exec === "function") { + mdl.exec(); + } + } + return; + } + } catch (error) { + _err = error; + try { + console.error("Issue #23: CATCH - Class:" + this.constructor.name + " - activeIdx:" + this.activeIdx + " - collection:" + (JSON.stringify(this.collection.toJSON()))); + } catch (error) { + _errerr = error; + console.error("Issue #23: CATCH"); + } + } + if (mdl != null) { + this.searchcoll.remove(mdl); + this.result.add(mdl); + this.trigger("selected", mdl); + } + if (this._isFull()) { + this.close(); + } + }; + + SelectorView.prototype.focus = function() { + var _el; + this.$inp.focus(); + _el = this.$inp.get(0); + _el.selectionStart = _el.selectionEnd = _el.value.length; + }; + + SelectorView.prototype.open = function() { + this.trigger("opened"); + return SelectorView.__super__.open.apply(this, arguments); + }; + + SelectorView.prototype.search = function(evnt) { + var _q; + if ((evnt != null ? evnt.type : void 0) === "keydown") { + switch (evnt.keyCode) { + case KEYCODES.UP: + this.move(true); + return; + case KEYCODES.DOWN: + this.move(false); + return; + case KEYCODES.ENTER: + this.selectActive(true); + return; + } + return; + } + if (_.isString(evnt)) { + _q = evnt; + } else { + _q = evnt.currentTarget.value.toLowerCase(); + } + if (_q === this.currQuery) { + return; + } + this.currQuery = _q; + this.searchcoll.updateSubFilter((function(_this) { + return function(mdl) { + var _match; + if (_this.result.get(mdl.id) != null) { + return false; + } + if (!(_q != null ? _q.length : void 0)) { + return true; + } + _match = mdl.match(_q); + return _match; + }; + })(this), false); + this.activeIdx = 0; + this.renderRes(); + }; + + SelectorView.prototype.move = function(up) { + var _$elnew, _$list, _customElementChange, _elH, _list, _newidx, _pos, _scrollT, _top, ref; + if (up == null) { + up = false; + } + _list = this.$el.find(".typelist a"); + _customElementChange = ((ref = this.currQuery) != null ? ref.length : void 0) ? 0 : 1; + _top = 0; + if (up) { + if ((this.activeIdx - 1) < _top) { + return; + } + _newidx = this.activeIdx - 1; + } else { + if (this.searchcoll.length - _customElementChange <= this.activeIdx) { + return; + } + _newidx = this.activeIdx + 1; + } + this.$(_list[this.activeIdx]).removeClass("active"); + _$elnew = this.$(_list[_newidx]).addClass("active"); + if (this.scrolling) { + _elH = _$elnew.outerHeight(); + _pos = _elH * (_newidx + 1); + _$list = this.$el.find(".typelist"); + _scrollT = _$list.scrollTop(); + if (_pos > _scrollT + this._scrollTill) { + _$list.scrollTop(_pos - this._scrollTill); + } else if (_pos < _scrollT + _elH) { + _$list.scrollTop(_pos - _elH); + } + } + this.activeIdx = _newidx; + }; + + SelectorView.prototype.select = function() {}; + + SelectorView.prototype.selectActive = function(isEnterEvent) { + var _id, _search, _sel, ref, ref1; + if (isEnterEvent == null) { + isEnterEvent = false; + } + if ((this.main == null) && this._isFull()) { + _id = (ref = this.result.last()) != null ? ref.id : void 0; + this.rmRes(_id); + } + _sel = this.$el.find(".typelist a.active").removeClass("active").data(); + _search = this.$inp.val(); + if ((_sel == null) && this.selectCount !== 1 && isEnterEvent && !(_search != null ? _search.length : void 0)) { + this.close(); + return; + } + if (_sel == null) { + return; + } + this.activeIdx = 0; + if ((_sel != null ? _sel.idx : void 0) >= 0 && this.searchcoll.length) { + this.selected(this.collection.get(_sel.id)); + } else if ((ref1 = this.currQuery) != null ? ref1.length : void 0) { + this.selected(new this.collection.model({ + value: this.currQuery, + custom: true + })); + this.$inp.val(""); + } else { + return; + } + }; + + return SelectorView; + +})(require("./facets/base")); + +module.exports = SelectorView; + + +},{"../tmpls/selector.jade":20,"../tmpls/selectorli.jade":21,"../utils/keycodes":25,"./facets/base":26}],36:[function(require,module,exports){ +var ViewSub, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + +ViewSub = (function(superClass) { + extend(ViewSub, superClass); + + function ViewSub() { + this.open = bind(this.open, this); + this.isResultEmpty = bind(this.isResultEmpty, this); + this.attachSubEvents = bind(this.attachSubEvents, this); + this.generateSub = bind(this.generateSub, this); + this.close = bind(this.close, this); + this.focus = bind(this.focus, this); + this.isOpen = bind(this.isOpen, this); + this.renderResult = bind(this.renderResult, this); + this.removed = bind(this.removed, this); + this.selected = bind(this.selected, this); + this.remove = bind(this.remove, this); + this.del = bind(this.del, this); + this.reopen = bind(this.reopen, this); + this.render = bind(this.render, this); + this.initialize = bind(this.initialize, this); + this.className = bind(this.className, this); + return ViewSub.__super__.constructor.apply(this, arguments); + } + + ViewSub.prototype.template = require("../tmpls/sub.jade"); + + ViewSub.prototype.className = function() { + var _name, _std, _type; + _std = "sub"; + _type = this.model.get("type"); + if (_type != null) { + _std += " sub-type-" + _type; + } + _name = this.model.get("name"); + if (_name != null) { + _std += " sub-name-" + _name; + } + return _std; + }; + + ViewSub.prototype.initialize = function(options) { + this._isOpen = false; + this.result = new Backbone.Collection(); + this.parent = options.parent; + this.$el.data("fctid", this.model.id); + this.parent.on("escape", (function(_this) { + return function(evnt, cb) { + var ref; + if (_this._isOpen) { + if ((ref = _this.selectview) != null ? ref._onTabAction(evnt) : void 0) { + if (cb != null) { + cb(evnt, _this); + } + } + } + }; + })(this)); + }; + + ViewSub.prototype.events = { + "mousedown": "reopen", + "mousedown .rm-facet-btn": "del" + }; + + ViewSub.prototype.render = function(initialAdd) { + var _err, _errerr, _list, i, idx, len, model, ref; + _list = []; + ref = this.result.models; + for (idx = i = 0, len = ref.length; i < len; idx = ++i) { + model = ref[idx]; + try { + _list.push(model.getLabel()); + } catch (error) { + _err = error; + try { + console.error("Issue #24: CATCH - Class:" + this.constructor.name + " - model:" + (JSON.stringify(this.model.toJSON())) + " - result:" + (JSON.stringify(this.result.toJSON()))); + } catch (error) { + _errerr = error; + console.error("Issue #24: CATCH"); + } + } + } + this.$el.html(this.template({ + label: this.model.getLabel(), + selected: _list, + type: this.model.get("type"), + name: this.model.get("name"), + pinned: this.model.get("pinned") || false + })); + this.$sub = this.$(".subselect"); + this.$results = this.$(".subresults"); + this.generateSub(initialAdd); + return this.el; + }; + + ViewSub.prototype.reopen = function(evnt) { + var ref, ref1; + if (this._isOpen) { + return; + } + if ((evnt != null) && $(evnt.target).is(".rm-result-btn") && (((ref = this.selectview) != null ? ref.rmRes : void 0) != null)) { + this.selectview.rmRes(evnt); + evnt.preventDefault(); + evnt.stopPropagation(); + return; + } + if ((evnt != null) && $(evnt.target).is(".edit-result-btn") && (((ref1 = this.selectview) != null ? ref1.editRes : void 0) != null)) { + this.selectview.editRes(evnt); + evnt.preventDefault(); + evnt.stopPropagation(); + return; + } + if (!this._isOpen && (this.selectview != null)) { + this.selectview.reopen(this); + } + if (evnt != null) { + evnt.preventDefault(); + } + if (evnt != null) { + evnt.stopPropagation(); + } + this.trigger("reopen"); + }; + + ViewSub.prototype.del = function(evnt) { + if (this.model.get("pinned")) { + return; + } + if (evnt != null) { + evnt.stopPropagation(); + } + if (evnt != null) { + evnt.preventDefault(); + } + this.collection.trigger("iggy:rem", this.model); + this.collection.add(this.model); + this.remove(); + this.trigger("closed"); + return false; + }; + + ViewSub.prototype.remove = function() { + var ref; + this._isOpen = false; + if ((ref = this.selectview) != null) { + ref.remove(); + } + this.parent = null; + return ViewSub.__super__.remove.apply(this, arguments); + }; + + ViewSub.prototype.selected = function(optMdl, evnt) { + this.result.add(optMdl, { + merge: true + }); + this.renderResult(); + this.trigger("selected", this.model, this.selectview.getResults(), evnt); + }; + + ViewSub.prototype.removed = function(optMdl, evnt) { + this.result.remove(optMdl); + this.renderResult(); + this.trigger("selected", this.model, this.selectview.getResults(), evnt); + if (this.result.length <= 0 && !this.selectview.editMode) { + this.del(); + } + }; + + ViewSub.prototype.renderResult = function() { + this.$results.html(this.selectview.renderResult()); + }; + + ViewSub.prototype.isOpen = function() { + return this.selectview != null; + }; + + ViewSub.prototype.focus = function() { + var ref; + if (this.selectview != null) { + if ((ref = this.selectview) != null) { + ref.focus(); + } + return; + } + this.open(); + }; + + ViewSub.prototype.close = function() { + var ref, ref1; + this._isOpen = false; + if (this.selectview != null) { + if ((ref = this.selectview) != null) { + ref.off(); + } + if ((ref1 = this.selectview) != null) { + ref1.close(); + } + return; + } + }; + + ViewSub.prototype.generateSub = function(initialAdd) { + var ref; + if (this.selectview != null) { + this.attachSubEvents(); + return this.selectview; + } + this.selectview = new this.model.SubView({ + sub: this, + model: this.model, + el: this.$sub + }); + this.attachSubEvents(); + this.$el.append(this.selectview.render(initialAdd)); + if (((ref = this.model) != null ? ref.get("value") : void 0) != null) { + this.selectview.select(); + } + }; + + ViewSub.prototype.attachSubEvents = function() { + if (!this.selectview.subEventsAttached) { + this.selectview.on("closed", (function(_this) { + return function(result, evnt) { + _this._isOpen = false; + if (_this.model.get("pinned")) { + return; + } + if (!result.length) { + _this.selectview.remove(); + } + _this.trigger("closed", result, evnt); + if (!result.length) { + _this.remove(); + } + }; + })(this)); + this.selectview.on("selected", (function(_this) { + return function(mdl, evnt) { + if (mdl) { + _this.selected(mdl, evnt); + } + }; + })(this)); + this.selectview.on("removed", (function(_this) { + return function(mdl) { + if (mdl) { + _this.removed(mdl); + } + }; + })(this)); + this.selectview.subEventsAttached = true; + } + }; + + ViewSub.prototype.isResultEmpty = function(inp) { + if (this.selectview != null) { + return this.selectview.isResultEmpty(inp); + } + return true; + }; + + ViewSub.prototype.open = function() { + var ref; + this.generateSub(); + if ((ref = this.selectview) != null) { + ref.focus(); + } + this._isOpen = true; + }; + + return ViewSub; + +})(Backbone.View); + +module.exports = ViewSub; + + +},{"../tmpls/sub.jade":23}],37:[function(require,module,exports){ + +},{}],38:[function(require,module,exports){ +(function (global){ +(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.jade = 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} escaped + * @return {String} + */ +exports.cls = function cls(classes, escaped) { + var buf = []; + for (var i = 0; i < classes.length; i++) { + if (escaped && escaped[i]) { + buf.push(exports.escape(joinClasses([classes[i]]))); + } else { + buf.push(joinClasses(classes[i])); + } + } + var text = joinClasses(buf); + if (text.length) { + return ' class="' + text + '"'; + } else { + return ''; + } +}; + + +exports.style = function (val) { + if (val && typeof val === 'object') { + return Object.keys(val).map(function (style) { + return style + ':' + val[style]; + }).join(';'); + } else { + return val; + } +}; +/** + * Render the given attribute. + * + * @param {String} key + * @param {String} val + * @param {Boolean} escaped + * @param {Boolean} terse + * @return {String} + */ +exports.attr = function attr(key, val, escaped, terse) { + if (key === 'style') { + val = exports.style(val); + } + if ('boolean' == typeof val || null == val) { + if (val) { + return ' ' + (terse ? key : key + '="' + key + '"'); + } else { + return ''; + } + } else if (0 == key.indexOf('data') && 'string' != typeof val) { + if (JSON.stringify(val).indexOf('&') !== -1) { + console.warn('Since Jade 2.0.0, ampersands (`&`) in data attributes ' + + 'will be escaped to `&`'); + }; + if (val && typeof val.toISOString === 'function') { + console.warn('Jade will eliminate the double quotes around dates in ' + + 'ISO form after 2.0.0'); + } + return ' ' + key + "='" + JSON.stringify(val).replace(/'/g, ''') + "'"; + } else if (escaped) { + if (val && typeof val.toISOString === 'function') { + console.warn('Jade will stringify dates in ISO form after 2.0.0'); + } + return ' ' + key + '="' + exports.escape(val) + '"'; + } else { + if (val && typeof val.toISOString === 'function') { + console.warn('Jade will stringify dates in ISO form after 2.0.0'); + } + return ' ' + key + '="' + val + '"'; + } +}; + +/** + * Render the given attributes object. + * + * @param {Object} obj + * @param {Object} escaped + * @return {String} + */ +exports.attrs = function attrs(obj, terse){ + var buf = []; + + var keys = Object.keys(obj); + + if (keys.length) { + for (var i = 0; i < keys.length; ++i) { + var key = keys[i] + , val = obj[key]; + + if ('class' == key) { + if (val = joinClasses(val)) { + buf.push(' ' + key + '="' + val + '"'); + } + } else { + buf.push(exports.attr(key, val, false, terse)); + } + } + } + + return buf.join(''); +}; + +/** + * Escape the given string of `html`. + * + * @param {String} html + * @return {String} + * @api private + */ + +var jade_encode_html_rules = { + '&': '&', + '<': '<', + '>': '>', + '"': '"' +}; +var jade_match_html = /[&<>"]/g; + +function jade_encode_char(c) { + return jade_encode_html_rules[c] || c; +} + +exports.escape = jade_escape; +function jade_escape(html){ + var result = String(html).replace(jade_match_html, jade_encode_char); + if (result === '' + html) return html; + else return result; +}; + +/** + * Re-throw the given `err` in context to the + * the jade in `filename` at the given `lineno`. + * + * @param {Error} err + * @param {String} filename + * @param {String} lineno + * @api private + */ + +exports.rethrow = function rethrow(err, filename, lineno, str){ + if (!(err instanceof Error)) throw err; + if ((typeof window != 'undefined' || !filename) && !str) { + err.message += ' on line ' + lineno; + throw err; + } + try { + str = str || require('fs').readFileSync(filename, 'utf8') + } catch (ex) { + rethrow(err, null, lineno) + } + var context = 3 + , lines = str.split('\n') + , start = Math.max(lineno - context, 0) + , end = Math.min(lines.length, lineno + context); + + // Error context + var context = lines.slice(start, end).map(function(line, i){ + var curr = i + start + 1; + return (curr == lineno ? ' > ' : ' ') + + curr + + '| ' + + line; + }).join('\n'); + + // Alter exception message + err.path = filename; + err.message = (filename || 'Jade') + ':' + lineno + + '\n' + context + '\n\n' + err.message; + throw err; +}; + +exports.DebugItem = function DebugItem(lineno, filename) { + this.lineno = lineno; + this.filename = filename; +} + +},{"fs":2}],2:[function(require,module,exports){ + +},{}]},{},[1])(1) +}); +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"fs":37}],39:[function(require,module,exports){ +(function() { + var _getKey, isArray, toString; + + toString = {}.toString; + + isArray = Array.isArray || function(arr) { + return toString.call(arr) === '[object Array]'; + }; + + _getKey = function(el, key) { + return el[key]; + }; + + module.exports = function(keys, forward, getKey) { + var fnsort, ref; + if (forward == null) { + forward = true; + } + if (getKey == null) { + getKey = _getKey; + } + if (!isArray(keys)) { + keys = [keys]; + } + fnsort = function(forward, key, nextkeys) { + var _fwrd, _k, nextSort, ref; + if (nextkeys != null ? nextkeys.length : void 0) { + _k = (ref = nextkeys.splice(0, 1)) != null ? ref[0] : void 0; + if (_k != null) { + nextSort = fnsort(forward, _k, nextkeys); + } + } + _fwrd = (forward[key] != null ? forward[key] : (forward["?"] != null ? forward["?"] : forward)); + return function(elA, elB) { + var _a, _b; + _a = getKey(elA, key); + _b = getKey(elB, key); + if (_a < _b) { + if (_fwrd) { + return -1; + } else { + return 1; + } + } else if (_a > _b) { + if (_fwrd) { + return 1; + } else { + return -1; + } + } else if (_a === _b) { + if (nextSort != null) { + return nextSort(elA, elB); + } else { + return 0; + } + } + }; + }; + return fnsort(forward, (ref = keys.splice(0, 1)) != null ? ref[0] : void 0, keys); + }; + +}).call(this); + +},{}]},{},[1])(1) +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9ncnVudC1icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJfc3JjL2pzL21haW4uY29mZmVlIiwiX3NyYy9qcy9tb2RlbHMvYmFja2JvbmVfc3ViLmNvZmZlZSIsIl9zcmMvanMvbW9kZWxzL2ZhY2V0X2FycmF5LmNvZmZlZSIsIl9zcmMvanMvbW9kZWxzL2ZhY2V0X2Jhc2UuY29mZmVlIiwiX3NyYy9qcy9tb2RlbHMvZmFjZXRfZGF0ZXJhbmdlLmNvZmZlZSIsIl9zcmMvanMvbW9kZWxzL2ZhY2V0X2V2ZW50LmNvZmZlZSIsIl9zcmMvanMvbW9kZWxzL2ZhY2V0X251bWJlci5jb2ZmZWUiLCJfc3JjL2pzL21vZGVscy9mYWNldF9yYW5nZS5jb2ZmZWUiLCJfc3JjL2pzL21vZGVscy9mYWNldF9zZWxlY3QuY29mZmVlIiwiX3NyYy9qcy9tb2RlbHMvZmFjZXRfc3RyaW5nLmNvZmZlZSIsIl9zcmMvanMvbW9kZWxzL2ZhY2V0cy5jb2ZmZWUiLCJfc3JjL2pzL21vZGVscy9yZXN1bHRzLmNvZmZlZSIsIl9zcmMvanMvbW9kZWxzL3N1YnJlc3VsdHMuY29mZmVlIiwiX3NyYy9qcy90bXBscy9hcnJheV9yZXN1bHRsaS5qYWRlIiwiX3NyYy9qcy90bXBscy9kYXRlcmFuZ2UuamFkZSIsIl9zcmMvanMvdG1wbHMvbnVtYmVyLmphZGUiLCJfc3JjL2pzL3RtcGxzL3JhbmdlLmphZGUiLCJfc3JjL2pzL3RtcGxzL3Jlc3VsdF9iYXNlLmphZGUiLCJfc3JjL2pzL3RtcGxzL3NlbGVjdC5qYWRlIiwiX3NyYy9qcy90bXBscy9zZWxlY3Rvci5qYWRlIiwiX3NyYy9qcy90bXBscy9zZWxlY3RvcmxpLmphZGUiLCJfc3JjL2pzL3RtcGxzL3N0cmluZy5qYWRlIiwiX3NyYy9qcy90bXBscy9zdWIuamFkZSIsIl9zcmMvanMvdG1wbHMvd3JhcHBlci5qYWRlIiwiX3NyYy9qcy91dGlscy9rZXljb2Rlcy5jb2ZmZWUiLCJfc3JjL2pzL3ZpZXdzL2ZhY2V0cy9iYXNlLmNvZmZlZSIsIl9zcmMvanMvdmlld3MvZmFjZXRzL2RhdGVyYW5nZS5jb2ZmZWUiLCJfc3JjL2pzL3ZpZXdzL2ZhY2V0cy9udW1iZXJfYmFzZS5jb2ZmZWUiLCJfc3JjL2pzL3ZpZXdzL2ZhY2V0cy9zdWJhcnJheS5jb2ZmZWUiLCJfc3JjL2pzL3ZpZXdzL2ZhY2V0cy9zdWJudW1iZXIuY29mZmVlIiwiX3NyYy9qcy92aWV3cy9mYWNldHMvc3VicmFuZ2UuY29mZmVlIiwiX3NyYy9qcy92aWV3cy9mYWNldHMvc3Vic2VsZWN0LmNvZmZlZSIsIl9zcmMvanMvdmlld3MvZmFjZXRzL3N1YnN0cmluZy5jb2ZmZWUiLCJfc3JjL2pzL3ZpZXdzL21haW4uY29mZmVlIiwiX3NyYy9qcy92aWV3cy9zZWxlY3Rvci5jb2ZmZWUiLCJfc3JjL2pzL3ZpZXdzL3N1Yi5jb2ZmZWUiLCJub2RlX21vZHVsZXMvZ3J1bnQtYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3Nlci1yZXNvbHZlL2VtcHR5LmpzIiwibm9kZV9tb2R1bGVzL2phZGUvcnVudGltZS5qcyIsIm5vZGVfbW9kdWxlcy9zb3J0Y29sbC9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBLElBQUEsc0hBQUE7RUFBQTs7OztBQUFBLFFBQUEsR0FBVyxPQUFBLENBQVMsY0FBVDs7QUFDWCxNQUFBLEdBQVMsT0FBQSxDQUFTLGlCQUFUOztBQUNULFNBQUEsR0FBWSxPQUFBLENBQVMsdUJBQVQ7O0FBQ1osUUFBQSxHQUFXLE9BQUEsQ0FBUyxzQkFBVDs7QUFDWCxTQUFBLEdBQVksT0FBQSxDQUFTLHVCQUFUOztBQUNaLFNBQUEsR0FBWSxPQUFBLENBQVMsdUJBQVQ7O0FBQ1osUUFBQSxHQUFXLE9BQUEsQ0FBUyxzQkFBVDs7QUFDWCxZQUFBLEdBQWUsT0FBQSxDQUFTLDBCQUFUOztBQUNm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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQSxNQUFNLENBQUMsT0FBUCxHQUNDO0VBQUEsTUFBQSxFQUFRLEVBQVI7RUFDQSxPQUFBLEVBQVMsRUFEVDtFQUVBLElBQUEsRUFBTSxFQUZOO0VBR0EsTUFBQSxFQUFRLEVBSFI7RUFJQSxLQUFBLEVBQU8sQ0FBRSxHQUFGLEVBQU8sRUFBUCxDQUpQO0VBS0EsT0FBQSxFQUFTLEVBTFQ7RUFNQSxLQUFBLEVBQU8sQ0FOUDs7Ozs7QUNERCxJQUFBLG1DQUFBO0VBQUE7Ozs7O0FBQUEsUUFBQSxHQUFXLE9BQUEsQ0FBUyxzQkFBVDs7QUFDWCxVQUFBLEdBQWEsT0FBQSxDQUFTLHlCQUFUOztBQUVQOzs7Ozs7Ozs7Ozs7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RSxLQUFiLENBQUE7O0lBQ0EsSUFBQyxDQUFBLE9BQUQsR0FBVztFQUpOOzs7O0dBbkxlLFFBQVEsQ0FBQzs7QUE2TC9CLE1BQU0sQ0FBQyxPQUFQLEdBQWlCOzs7O0FDN0xqQjs7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDM1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJNYWluVmlldyA9IHJlcXVpcmUoIFwiLi92aWV3cy9tYWluXCIgKVxuRmFjZXRzID0gcmVxdWlyZSggXCIuL21vZGVscy9mYWNldHNcIiApXG5GY3RTdHJpbmcgPSByZXF1aXJlKCBcIi4vbW9kZWxzL2ZhY2V0X3N0cmluZ1wiIClcbkZjdEFycmF5ID0gcmVxdWlyZSggXCIuL21vZGVscy9mYWNldF9hcnJheVwiIClcbkZjdFNlbGVjdCA9IHJlcXVpcmUoIFwiLi9tb2RlbHMvZmFjZXRfc2VsZWN0XCIgKVxuRmN0TnVtYmVyID0gcmVxdWlyZSggXCIuL21vZGVscy9mYWNldF9udW1iZXJcIiApXG5GY3RSYW5nZSA9IHJlcXVpcmUoIFwiLi9tb2RlbHMvZmFjZXRfcmFuZ2VcIiApXG5GY3REYXRlUmFuZ2UgPSByZXF1aXJlKCBcIi4vbW9kZWxzL2ZhY2V0X2RhdGVyYW5nZVwiIClcbkZjdEV2ZW50ID0gcmVxdWlyZSggXCIuL21vZGVscy9mYWNldF9ldmVudFwiIClcblJlc3VsdHMgPSByZXF1aXJlKCBcIi4vbW9kZWxzL3Jlc3VsdHNcIiApXG5cbklHR1lfSURYID0gMVxuXG5jbGFzcyBJR0dZIGV4dGVuZHMgQmFja2JvbmUuRXZlbnRzXG5cdCQ6IGpRdWVyeVxuXHRjb25zdHJ1Y3RvcjogKCBlbCwgZmFjZXRzID0gW10sIG9wdGlvbnMgPSB7fSApLT5cblx0XHRfLmV4dGVuZCBALCBCYWNrYm9uZS5FdmVudHNcblx0XHRAX2luaXRFcnJvcnMoKVxuXHRcdFxuXHRcdCMgaW5pdCBlbGVtZW50XG5cdFx0QCRlbCA9IEBfcHJlcGFyZUVsKCBlbCApXG5cdFx0QGVsID0gQCRlbFswXVxuXHRcdEAkZWwuZGF0YSggXCJpZ2d5XCIsIEAgKVxuXG5cdFx0IyBpbml0IGZhY2V0c1xuXHRcdEBmYWNldHMgPSBAX3ByZXBhcmVGYWNldHMoIGZhY2V0cywgb3B0aW9ucyApXG5cdFx0QHJlc3VsdHMgPSBuZXcgUmVzdWx0cyggbnVsbCwgb3B0aW9ucyApXG5cblx0XHRAcmVzdWx0cy5vbiBcImFkZFwiLCBAdHJpZ2dlckNoYW5nZVxuXHRcdEByZXN1bHRzLm9uIFwicmVtb3ZlXCIsIEB0cmlnZ2VyQ2hhbmdlXG5cdFx0QHJlc3VsdHMub24gXCJjaGFuZ2VcIiwgQHRyaWdnZXJDaGFuZ2VcblxuXHRcdEB2aWV3ID0gbmV3IE1haW5WaWV3KCBtYWluOiBALCBlbDogQCRlbCwgY29sbGVjdGlvbjogQGZhY2V0cywgcmVzdWx0czogQHJlc3VsdHMsIHNlYXJjaEJ1dHRvbjogb3B0aW9ucy5zZWFyY2hCdXR0b24sIGlkeDogSUdHWV9JRFgrKyApXG5cdFx0XG5cdFx0QHZpZXcub24gXCJzZWFyY2hidXR0b25cIiwgQHRyaWdnZXJFdmVudFxuXG5cdFx0QG5vbkVtcHR5UmVzdWx0cyA9IEByZXN1bHRzLnN1YiggQF9maWx0ZXJFbXB0eSApXG5cdFx0cmV0dXJuXG5cblx0X3ByZXBhcmVFbDogKCBlbCApPT5cblxuXHRcdGlmIG5vdCBlbD9cblx0XHRcdHRocm93IEBfZXJyb3IoIFwiRU1JU1NJTkdFTFwiIClcblxuXHRcdGlmIF8uaXNTdHJpbmcoIGVsIClcblx0XHRcdGlmIG5vdCBlbC5sZW5ndGhcblx0XHRcdFx0dGhyb3cgQF9lcnJvciggXCJFRU1QVFlFTFNUUklOR1wiIClcblxuXHRcdFx0XyRlbCA9IEAkKCBlbCApXG5cdFx0XHRpZiBub3QgXyRlbD8ubGVuZ3RoXG5cdFx0XHRcdHRocm93IEBfZXJyb3IoIFwiRUlOVkFMSURFTFNUUklOR1wiIClcblxuXHRcdFx0cmV0dXJuIF8kZWxcblxuXHRcdGlmIGVsIGluc3RhbmNlb2YgalF1ZXJ5XG5cdFx0XHRpZiBub3QgZWwubGVuZ3RoXG5cdFx0XHRcdHRocm93IEBfZXJyb3IoIFwiRUVNUFRZRUxKUVVFUllcIiApXG5cblx0XHRcdCMgVE9ETyBoYW5kbGUgbXVsdGlwbGUgalF1ZXJ5IGVsZW1lbnRzIHRvIElHR1kgaW5zdGFuY2VzXG5cdFx0XHRpZiBlbC5sZW5ndGggPiAxXG5cdFx0XHRcdHRocm93IEBfZXJyb3IoIFwiRVNJWkVFTEpRVUVSWVwiIClcblxuXHRcdFx0cmV0dXJuIGVsXG5cblx0XHRpZiBlbCBpbnN0YW5jZW9mIEVsZW1lbnRcblx0XHRcdHJldHVybiBAJCggZWwgKVxuXG5cdFx0dGhyb3cgQF9lcnJvciggXCJFSU5WQUxJREVMVFlQRVwiIClcblxuXHRcdHJldHVyblxuXG5cdF9wcmVwYXJlRmFjZXRzOiAoIGZhY2V0cywgb3B0aW9ucz17fSApPT5cblx0XHRfcmV0ID0gW11cblx0XHRmb3IgZmFjZXQsIF9pZHggaW4gZmFjZXRzIHdoZW4gKCBfZmN0ID0gQF9jcmVhdGVGYWNldCggZmFjZXQgKSApP1xuXHRcdFx0X2ZjdC5faWR4ID0gX2lkeFxuXHRcdFx0X3JldC5wdXNoIF9mY3Rcblx0XHRcblx0XHRyZXR1cm4gbmV3IEZhY2V0cyggX3JldCwgb3B0aW9ucyApXG5cblx0X2NyZWF0ZUZhY2V0OiAoIGZhY2V0ICktPlxuXHRcdHN3aXRjaCBmYWNldC50eXBlLnRvTG93ZXJDYXNlKClcblx0XHRcdHdoZW4gXCJzdHJpbmdcIiB0aGVuIHJldHVybiBuZXcgRmN0U3RyaW5nKCBmYWNldCwgbWFpbjogQCApXG5cdFx0XHR3aGVuIFwic2VsZWN0XCIgdGhlbiByZXR1cm4gbmV3IEZjdFNlbGVjdCggZmFjZXQsIG1haW46IEAgKVxuXHRcdFx0d2hlbiBcImFycmF5XCIgdGhlbiByZXR1cm4gbmV3IEZjdEFycmF5KCBmYWNldCwgbWFpbjogQCApXG5cdFx0XHR3aGVuIFwibnVtYmVyXCIgdGhlbiByZXR1cm4gbmV3IEZjdE51bWJlciggZmFjZXQsIG1haW46IEAgKVxuXHRcdFx0d2hlbiBcInJhbmdlXCIgdGhlbiByZXR1cm4gbmV3IEZjdFJhbmdlKCBmYWNldCwgbWFpbjogQCApXG5cdFx0XHR3aGVuIFwiZGF0ZXJhbmdlXCIgdGhlbiByZXR1cm4gbmV3IEZjdERhdGVSYW5nZSggZmFjZXQsIG1haW46IEAgKVxuXHRcdFx0d2hlbiBcImV2ZW50XCIgdGhlbiByZXR1cm4gbmV3IEZjdEV2ZW50KCBmYWNldCwgbWFpbjogQCApXG5cblx0YWRkRmFjZXQ6ICggZmFjZXQgKT0+XG5cdFx0aWYgbm90IEBmYWNldHM/XG5cdFx0XHRyZXR1cm5cblx0XHRpZiAoIF9mY3QgPSBAX2NyZWF0ZUZhY2V0KCBmYWNldCApICk/XG5cdFx0XHRAZmFjZXRzLmFkZCggX2ZjdCApXG5cdFx0cmV0dXJuIEBcblxuXHRfZXJyb3I6ICggdHlwZSwgZGF0YSA9IHt9ICk9PlxuXHRcdGlmIEBlcnJvcnNbIHR5cGUgXT9cblx0XHRcdF9tc2cgPSBAZXJyb3JzWyB0eXBlIF0oIGRhdGEgKVxuXHRcdGVsc2Vcblx0XHRcdF9tc2cgPSBcIi1cIlxuXHRcdF9lcnIgPSBuZXcgRXJyb3IoKVxuXHRcdF9lcnIubmFtZSA9IHR5cGVcblx0XHRfZXJyLm1lc3NhZ2UgPSBfbXNnXG5cdFx0cmV0dXJuIF9lcnJcblxuXHRfZmlsdGVyRW1wdHk6ICggbW9kZWwgKT0+XG5cdFx0X3YgPSBtb2RlbC5nZXQoIFwidmFsdWVcIiApXG5cdFx0aWYgbm90IF92P1xuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0aWYgX3YubGVuZ3RoIDw9IDBcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdFxuXHRcdHJldHVybiB0cnVlXG5cdFxuXHRnZXRRdWVyeTogPT5cblx0XHRyZXR1cm4gQG5vbkVtcHR5UmVzdWx0c1xuXG5cdHRyaWdnZXJDaGFuZ2U6ID0+XG5cdFx0c2V0VGltZW91dCggPT5cblx0XHRcdEB0cmlnZ2VyKCBcImNoYW5nZVwiLCBAbm9uRW1wdHlSZXN1bHRzIClcblx0XHQsIDAgKVxuXHRcdHJldHVyblxuXHRcblx0dHJpZ2dlckV2ZW50OiAoIGV2ZW50TmFtZSApPT5cblx0XHRzZXRUaW1lb3V0KCA9PlxuXHRcdFx0QHRyaWdnZXIoIGV2ZW50TmFtZSwgQG5vbkVtcHR5UmVzdWx0cyApXG5cdFx0LCAwIClcblx0XHRyZXR1cm5cblx0XHRcblx0X2luaXRFcnJvcnM6ID0+XG5cdFx0QGVycm9ycyA9IHt9XG5cdFx0Zm9yIF9rLCBfdG1wbCBvZiBARVJST1JTKClcblx0XHRcdEBlcnJvcnNbIF9rIF0gPSBfLnRlbXBsYXRlKCBfdG1wbCApXG5cdFx0cmV0dXJuXG5cblx0RVJST1JTOiAtPlxuXHRcdFwiRUlOVkFMSURFTFNUUklOR1wiOiBcIklmIHlvdSBkZWZpbmUgYSBgZWxgIGFzIFN0cmluZyBpdCBoYXMgdG8gYmUgYSB2YWxpZCBzZWxlY3RvciBmb3IgYW4gZXhpc3RpbmcgRE9NIGVsZW1lbnQuXCJcblx0XHRcIkVFTVBUWUVMU1RSSU5HXCI6IFwiVGhlIGBlbGAgYXMgc3RyaW5nIGNhbiBub3QgYmUgZW1wdHkuXCJcblx0XHRcIkVFTVBUWUVMSlFVRVJZXCI6IFwiVGhlIGBlbGAgYXMgak91ZXJ5IG9iamVjdCBjYW4gbm90IGJlIGFuIGVtcHR5IGNvbGxlY3Rpb24uXCJcblx0XHRcIkVTSVpFRUxKUVVFUllcIjogXCJUaGUgYGVsYCBhcyBqT3Vlcnkgb2JqZWN0IGNhbiBub3QgYmUgYSByZXN1bHQgb2Ygb25lIGVsLlwiXG5cdFx0XCJFSU5WQUxJREVMVFlQRVwiOiBcIlRoZSBgZWxgIGNhbiBvbmx5IGJlIGEgc2VsZWN0b3Igc3RyaW5nLCBkb20gZWxlbWVudCBvciBqUXVlcnkgY29sbGVjdGlvblwiXG5cdFx0XCJFTUlTU0lOR0VMXCI6IFwiUGxlYXNlIGRlZmluZSBhIHRhcmdldCBgZWxgXCJcblxubW9kdWxlLmV4cG9ydHMgPSBJR0dZXG4iLCIjIyNcbkVYQU1QTEUgVVNBR0VcblxuXHRwYXJlbnRDb2xsID0gbmV3IEJhY2tib25lLkNvbGxlY3Rpb24uU3ViKClcblx0XG5cdCMgYnkgQXJyYXlcblx0c3ViQ29sbEEgPSBwYXJlbnRDb2xsLnN1YiggWyAxLCAyLCAzIF0gKVxuXHRcblx0IyBvciBieSBPYmplY3Rcblx0c3ViQ29sbE8gPSBwYXJlbnRDb2xsLnN1YiggeyBuYW1lOiBcIkZvb1wiLCBhZ2U6IDQyIH0gKVxuXHRcblx0IyBvciBieSBOdW1iZXJcblx0c3ViQ29sbE4gPSBwYXJlbnRDb2xsLnN1YiggMTMgKVxuXHRcblx0IyBvciBieSBGdW5jdGlvblxuXHRzdWJDb2xsRiA9IHBhcmVudENvbGwuc3ViKCAoKCBtb2RlbCApLT4gaWYgbW9kZWwuZ2V0KCBcImFnZVwiICkgPiAyMyApIClcblx0XG5cdCMgc3ViY29sbGVjdGlvbiBvZiBzdWJjb2xsZWN0aW9uXG5cdHN1YkNvbGxBX08gPSBzdWJDb2xsQS5zdWIoIHsgbmFtZTogXCJGb29cIiwgYWdlOiA0MiB9IClcblx0XG5cdCMgdXBkYXRlIHRoZSBmaWx0ZXIgb2YgYSBzdWJjb2xsZWN0aW9uLiBGb3IgdGhpcyBhIGByZXNldGAgd2lsbCBiZSBmaXJlZCBvbiB0aGUgc3ViY29sbGVjdGlvblxuXHRzdWJDb2xsQSA9IHN1YkNvbGxBLnVwZGF0ZVN1YkZpbHRlciggeyBuYW1lOiBcIkJhclwiLCBhZ2U6IDQyIH0gKVxuIyMjXG5cbmNsYXNzIEJhY2tib25lU3ViIGV4dGVuZHMgQmFja2JvbmUuQ29sbGVjdGlvblxuXHQjIyNcblx0IyMgc3ViXG5cdFxuXHRgY29sbGVjdGlvbi5zdWIoIGZpbHRlciApYFxuXHRcblx0R2VuZXJhdGUgYSBzdWItY29sbGVjdGlvbiBieSBhIGZpbHRlci5cblx0VGhlIG1vZGVscyB3aWxsIGJlIGRpc3RyaWJ1dGVkIHdpdGhpbiBhbGwgaW52b2x2ZWQgY29sbGVjdGlvbnMgdW5kZXIgY29uc2lkZXJhdGlvbiBvZiB0aGUgZmlsdGVyLlxuXHRcblx0QHBhcmFtIHsgRnVuY3Rpb258QXJyYXl8U3RyaW5nfE51bWJlcnxPYmplY3QgfSBmaWx0ZXIgVGhlIGZpbHRlciB0byByZWR1Y2UgdGhlIGN1cnJlbnQgY29sbGVjdGlvbi4gQ2FuIGJlIGEgZnVuY3Rpb24gbGlrZSB1bmRlcnNjb3JlIGBfLmZpbHRlcmAgb3IgYW4gYXJyYXkgb2YgaWRzLCBhIHNpbmdsZSBpZCBhcyBzdHJpbmcgb3IgbnVtYmVyIG9yIGEgZmlsdGVyIG9iamVjdCBjb250YWluaW5ncyBrZXkgdmFsdWUgZmlsdGVycy5cblx0XG5cdEByZXR1cm4geyBDb2xsZWN0aW9uIH0gQSBTdWItQ29sbGVjdGlvbiBiYXNlZCBvbiB0aGUgZmlsdGVyXG5cdFxuXHRAYXBpIHB1YmxpY1xuXHQjIyNcblx0c3ViOiAoIGZpbHRlciApPT5cblx0XHRAc3ViQ29sbHMgb3I9IFtdXG5cdFx0Zm5GaWx0ZXIgPSBAX2dlbmVyYXRlU3ViRmlsdGVyKCBmaWx0ZXIgKVxuXG5cdFx0IyBmaWx0ZXIgdGhlIGNvbGxlY3Rpb25cblx0XHRfbW9kZWxzID0gQGZpbHRlciBmbkZpbHRlclxuXHRcdCMgY3JlYXRlIHRoZSBzdWJjb2xsZWN0aW9uXG5cdFx0X3N1YiA9IG5ldyBAY29uc3RydWN0b3IoIF9tb2RlbHMsIEBfc3ViQ29sbGVjdGlvbk9wdGlvbnMoKSApXG5cblx0XHRfc3ViLl9wYXJlbnRDb2wgPSBAXG5cdFx0X3N1Yi5fZm5GaWx0ZXIgPSBmbkZpbHRlclxuXG5cdFx0IyBhZGQgZXZlbnQgaGFuZGxlcnMgdG8gZGlzdHJpYnV0ZSB0aGUgbW9kZWxzIHRocm91Z2ggdGhlIHN1YiBjb2xsZWN0aW9ucyB0cmVlXG5cblx0XHQjIHJlY2hlY2sgdGhlIG1vZGVsIGFnYWluc3QgdGhlIGZpbHRlciBvbiBjaGFuZ2Vcblx0XHRAb24gXCJjaGFuZ2VcIiwgXy5iaW5kKCAoIF9tICktPlxuXHRcdFx0dG9BZGQgPSBAX2ZuRmlsdGVyKCBfbSApXG5cdFx0XHRhZGRlZCA9IEBnZXQoIF9tICk/XG5cdFx0XHRpZiBhZGRlZCBhbmQgbm90IHRvQWRkXG5cdFx0XHRcdEByZW1vdmUoIF9tIClcblx0XHRcdGVsc2UgaWYgbm90IGFkZGVkIGFuZCB0b0FkZFxuXHRcdFx0XHRAYWRkKCBfbSApXG5cdFx0XHRyZXR1cm5cblx0XHQsIF9zdWIgKVxuXG5cdFx0IyBhZGQgbW9kZWwgdG8gYmFzZSBjb2xsZWN0aW9uIG9uIGFkZCB0byBzdWJcblx0XHRfc3ViLm9uIFwiYWRkXCIsIF8uYmluZCggKCBfbSApLT5cblx0XHRcdEBhZGQoIF9tIClcblx0XHRcdHJldHVyblxuXHRcdCwgQClcblxuXHRcdCMgYWRkIG1vZGVsIHRvIHN1YiBjb2xsZWN0aW9uIG9uIGFkZCB0byBiYXNlIGlmIGl0IG1hdGNoZXMgdGhlIGZpbHRlclxuXHRcdEBvbiBcImFkZFwiLCBfLmJpbmQoICggX20gKS0+XG5cdFx0XHRpZiBAX2ZuRmlsdGVyKCBfbSApXG5cdFx0XHRcdEBhZGQoIF9tIClcblx0XHRcdHJldHVyblxuXHRcdCwgX3N1YiApXG5cblx0XHQjIHJlbW92ZSBtb2RlbCBmcm9tIGJhc2UgY29sbGVjdGlvbiBvbiByZW1vdmUgb2Ygc3ViXG5cdFx0X3N1Yi5vbiBcInJlbW92ZVwiLCBfLmJpbmQoICggX20gKS0+XG5cdFx0XHQjQHJlbW92ZSggX20gKVxuXHRcdFx0cmV0dXJuXG5cdFx0LCBAKVxuXG5cdFx0IyByZW1vdmUgbW9kZWwgZnJvbSBiYXNlIGNvbGxlY3Rpb24gb24gcmVtb3ZlIG9mIHN1YlxuXHRcdEBvbiBcInJlbW92ZVwiLCBfLmJpbmQoICggX20gKS0+XG5cdFx0XHRAcmVtb3ZlKCBfbSApXG5cdFx0XHRyZXR1cm5cblx0XHQsIF9zdWIgKVxuXG5cdFx0IyByZW1vdmUgbW9kZWwgZnJvbSBiYXNlIGNvbGxlY3Rpb24gb24gcmVtb3ZlIG9mIHN1YlxuXHRcdEBvbiBcInJlc2V0XCIsIF8uYmluZCggKCBfbSApLT5cblx0XHRcdEB1cGRhdGVTdWJGaWx0ZXIoKVxuXHRcdFx0cmV0dXJuXG5cdFx0LCBfc3ViIClcblxuXHRcdCMgc3RvcmUgdGhlIHN1YmNvbGxlY3Rpb24gdW5kZXIgdGhlIGN1cnJlbnQgY29sbGVjdGlvblxuXHRcdEBzdWJDb2xscy5wdXNoKCBfc3ViIClcblxuXHRcdHJldHVybiBfc3ViXG5cdFxuXHQjIyNcblx0IyMgX3N1YkNvbGxlY3Rpb25PcHRpb25zXG5cdFxuXHRgY29sbGVjdGlvbi5fc3ViQ29sbGVjdGlvbk9wdGlvbnMoKWBcblx0XG5cdE92ZXJ3cml0YWJsZSBtZXRob2QgdG8gc2V0IHRoZSBjb25zdHJ1Y3RvciBvcHRpb25zIGZvciBzdWIgY29sbGVjdGlvbnNcblx0XG5cdEByZXR1cm4geyBPYmplY3QgfSBUaGUgb3B0aW9ucyBvYmplY3Rcblx0XG5cdEBhcGkgcHJpdmF0ZVxuXHQjIyNcblx0X3N1YkNvbGxlY3Rpb25PcHRpb25zOiA9PlxuXHRcdF9vcHRzID1cblx0XHRcdGNvbXBhcmF0b3I6IEBjb21wYXJhdG9yXG5cdFx0cmV0dXJuIF9vcHRzXG5cblx0IyMjXG5cdCMjIHVwZGF0ZVN1YkZpbHRlclxuXHRcblx0YGNvbGxlY3Rpb24udXBkYXRlU3ViRmlsdGVyKCBmaWx0ZXIgKWBcblx0XG5cdE1ldGhvZCB0byB1cGRhdGUgdGhlIGZpbHRlciBvZiBhIHN1YmNvbGxlY3Rpb24uIFRoZW4gYWxsIG1vZGVscyB3aWxsIGJlIHJlc2V0ZSBieSB0aGUgbmV3IGZpbHRlci4gU28geW91IGhhdmUgdG8gbGlzdGVuIHRvIHRlaCByZXNldCBldmVudFxuXHRcblx0QHBhcmFtIHsgRnVuY3Rpb258QXJyYXl8U3RyaW5nfE51bWJlcnxPYmplY3QgfSBmaWx0ZXIgVGhlIGZpbHRlciB0byByZWR1Y2UgdGhlIGN1cnJlbnQgY29sbGVjdGlvbi4gQ2FuIGJlIGEgZnVuY3Rpb24gbGlrZSB1bmRlcnNjb3JlIGBfLmZpbHRlcmAgb3IgYW4gYXJyYXkgb2YgaWRzLCBhIHNpbmdsZSBpZCBhcyBzdHJpbmcgb3IgbnVtYmVyIG9yIGEgZmlsdGVyIG9iamVjdCBjb250YWluaW5ncyBrZXkgdmFsdWUgZmlsdGVycy5cblx0XG5cdEByZXR1cm4geyBTZWxmIH0gaXRzZWxmXG5cdFxuXHRAYXBpIHB1YmxpY1xuXHQjIyNcblx0dXBkYXRlU3ViRmlsdGVyOiAoIGZpbHRlciwgYXNSZXNldCA9IHRydWUgKT0+XG5cdFx0aWYgQF9wYXJlbnRDb2w/XG5cblx0XHRcdCMgc2V0IHRoZSBuZXcgZmlsdGVyIG1ldGhvZFxuXHRcdFx0QF9mbkZpbHRlciA9IEBfZ2VuZXJhdGVTdWJGaWx0ZXIoIGZpbHRlciApIGlmIGZpbHRlcj9cblxuXHRcdFx0X21vZGVscyA9IEBfcGFyZW50Q29sLmZpbHRlciggQF9mbkZpbHRlciApXG5cblx0XHRcdCMgcmVzZXQgdGhlIGNvbGxlY3Rpb24gd2l0aCB0aGUgbmV3IG1vZGVsc1xuXHRcdFx0aWYgYXNSZXNldFxuXHRcdFx0XHRAcmVzZXQoIF9tb2RlbHMgKVxuXHRcdFx0XHRyZXR1cm4gQFxuXG5cdFx0XHRuZXdpZHMgPSBfLnBsdWNrKCBfbW9kZWxzLCBcImNpZFwiIClcblx0XHRcdGN1cnJpZHMgPSBfLnBsdWNrKCBAbW9kZWxzLCBcImNpZFwiIClcblx0XHRcdGZvciByaWQgaW4gXy5kaWZmZXJlbmNlKCBjdXJyaWRzLCBuZXdpZHMgKVxuXHRcdFx0XHRAcmVtb3ZlKCByaWQgKVxuXHRcdFx0XHRcblx0XHRcdF9hZGRJZHMgPSBfLmRpZmZlcmVuY2UoIG5ld2lkcywgY3VycmlkcyApXG5cdFx0XHRmb3IgbWRsIGluIF9tb2RlbHMgd2hlbiBtZGwuY2lkIGluIF9hZGRJZHNcblx0XHRcdFx0QGFkZCggbWRsIClcblxuXHRcdHJldHVybiBAXG5cblxuXHQjIyNcblx0IyMgX2dlbmVyYXRlU3ViRmlsdGVyXG5cdFxuXHRgY29sbGVjdGlvbi5fZ2VuZXJhdGVTdWJGaWx0ZXIoIGZpbHRlciApYFxuXHRcblx0SW50ZXJuYWwgbWV0aG9kIHRoIGNvbnZlcnQgYSBmaWx0ZXIgYXJndW1lbnQgdG8gYSBmaWx0ZXIgZnVuY3Rpb25cblx0XG5cdEBwYXJhbSB7IEZ1bmN0aW9ufEFycmF5fFN0cmluZ3xOdW1iZXJ8T2JqZWN0IH0gZmlsdGVyIFRoZSBmaWx0ZXIgdG8gcmVkdWNlIHRoZSBjdXJyZW50IGNvbGxlY3Rpb24uIENhbiBiZSBhIGZ1bmN0aW9uIGxpa2UgdW5kZXJzY29yZSBgXy5maWx0ZXJgIG9yIGFuIGFycmF5IG9mIGlkcywgYSBzaW5nbGUgaWQgYXMgc3RyaW5nIG9yIG51bWJlciBvciBhIGZpbHRlciBvYmplY3QgY29udGFpbmluZ3Mga2V5IHZhbHVlIGZpbHRlcnMuXG5cdFxuXHRAcmV0dXJuIHsgRnVuY3Rpb24gfSBUaGUgZ2VuZXJhdGVkIGZpbHRlciBmdW5jdGlvblxuXHRcblx0QGFwaSBwcml2YXRlXG5cdCMjI1xuXHRfZ2VuZXJhdGVTdWJGaWx0ZXI6ICggZmlsdGVyICktPlxuXHRcdCMgY29uc3RydWN0IHRoZSBmaWx0ZXIgZnVuY3Rpb25cblx0XHRpZiBfLmlzRnVuY3Rpb24oIGZpbHRlciApXG5cdFx0XHRmbkZpbHRlciA9IGZpbHRlclxuXHRcdGVsc2UgaWYgXy5pc0FycmF5KCBmaWx0ZXIgKVxuXHRcdFx0Zm5GaWx0ZXIgPSAoIF9tICktPlxuXHRcdFx0XHRfbS5pZCBpbiBmaWx0ZXJcblx0XHRlbHNlIGlmIF8uaXNTdHJpbmcoIGZpbHRlciApIG9yIF8uaXNOdW1iZXIoIGZpbHRlciApXG5cdFx0XHRmbkZpbHRlciA9ICggX20gKS0+XG5cdFx0XHRcdF9tLmlkIGlzIGZpbHRlclxuXHRcdGVsc2Vcblx0XHRcdGZuRmlsdGVyID0gKCBfbSApLT5cblx0XHRcdFx0Zm9yIF9ubSwgX3ZsIG9mIGZpbHRlclxuXHRcdFx0XHRcdGlmIF9tLmdldCggX25tICkgaXNudCBfdmxcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXG5cdFx0cmV0dXJuIGZuRmlsdGVyXG5cbm1vZHVsZS5leHBvcnRzID0gQmFja2JvbmVTdWJcbiIsImNsYXNzIEZjdEFycmF5IGV4dGVuZHMgcmVxdWlyZSggXCIuL2ZhY2V0X3N0cmluZ1wiIClcblx0U3ViVmlldzogcmVxdWlyZSggXCIuLi92aWV3cy9mYWNldHMvc3ViYXJyYXlcIiApXG5cblxubW9kdWxlLmV4cG9ydHMgPSBGY3RBcnJheVxuIiwiY2xhc3MgRmFjZXRCYXNlIGV4dGVuZHMgQmFja2JvbmUuTW9kZWxcblx0aWRBdHRyaWJ1dGU6IFwibmFtZVwiXG5cdFN1YlZpZXc6IHJlcXVpcmUoIFwiLi4vdmlld3MvZmFjZXRzL2Jhc2VcIiApXG5cdFxuXHRjb25zdHJ1Y3RvcjogKCBhdHRycywgb3B0aW9ucyApLT5cblx0XHRAbWFpbiA9IG9wdGlvbnMubWFpblxuXHRcdHN1cGVyXG5cdFx0cmV0dXJuXG5cdFxuXHRkZWZhdWx0czogLT5cblx0XHR0eXBlOiBcInN0cmluZ1wiXG5cdFx0bmFtZTogXCJuYW1lXCJcblx0XHRsYWJlbDogXCJEZXNjcmlwdGlvblwiXG5cdFx0c29ydDogMFxuXG5cdGdldExhYmVsOiA9PlxuXHRcdHJldHVybiBAZ2V0KCBcImxhYmVsXCIgKVxuXG5cdG1hdGNoOiAoIGNyaXQgKT0+XG5cdFx0X3MgPSAgQGdldCggXCJuYW1lXCIgKSArIFwiIFwiICsgQGdldCggXCJsYWJlbFwiIClcblx0XHRmb3VuZCA9IF9zLnRvTG93ZXJDYXNlKCkuaW5kZXhPZiggY3JpdC50b0xvd2VyQ2FzZSgpIClcblx0XHRyZXR1cm4gZm91bmQgPj0gMFxuXG5cdGNvbXBhcmF0b3I6ICggbWRsICktPlxuXHRcdHJldHVybiBtZGwuaWRcblxubW9kdWxlLmV4cG9ydHMgPSBGYWNldEJhc2VcbiIsImNsYXNzIEZjdERhdGVSYW5nZSBleHRlbmRzIHJlcXVpcmUoIFwiLi9mYWNldF9iYXNlXCIgKVxuXHRTdWJWaWV3OiByZXF1aXJlKCBcIi4uL3ZpZXdzL2ZhY2V0cy9kYXRlcmFuZ2VcIiApXG5cdGRlZmF1bHRzOiA9PlxuXHRcdHJldHVybiAkLmV4dGVuZCBzdXBlcixcblx0XHRcdG9wdHM6IHt9XG5cdFx0XHR2YWx1ZTogbnVsbFxuXG5tb2R1bGUuZXhwb3J0cyA9IEZjdERhdGVSYW5nZVxuIiwiY2xhc3MgRmN0RXZlbnQgZXh0ZW5kcyByZXF1aXJlKCBcIi4vZmFjZXRfYmFzZVwiIClcblx0U3ViVmlldzogbnVsbFxuXHRvbmx5RXhlYzogdHJ1ZVxuXHRkZWZhdWx0czogPT5cblx0XHRyZXR1cm4gJC5leHRlbmQgc3VwZXIsXG5cdFx0XHRvcHRpb25zOiBbXVxuXHRcdFxuXHRleGVjOiAoICk9PlxuXHRcdEBtYWluLnRyaWdnZXIoIEBnZXQoIFwiZXZlbnRcIiApLCBAdG9KU09OKCkgKVxuXHRcdHJldHVyblxubW9kdWxlLmV4cG9ydHMgPSBGY3RFdmVudFxuIiwiY2xhc3MgRmN0TnVtYmVyIGV4dGVuZHMgcmVxdWlyZSggXCIuL2ZhY2V0X2Jhc2VcIiApXG5cdFN1YlZpZXc6IHJlcXVpcmUoIFwiLi4vdmlld3MvZmFjZXRzL3N1Ym51bWJlclwiIClcblx0ZGVmYXVsdHM6ID0+XG5cdFx0cmV0dXJuICQuZXh0ZW5kIHN1cGVyLFxuXHRcdFx0bWluOiBudWxsXG5cdFx0XHRtYXg6IG51bGxcblx0XHRcdHN0ZXA6IDFcblx0XHRcdHZhbHVlOiBudWxsXG5cbm1vZHVsZS5leHBvcnRzID0gRmN0TnVtYmVyXG4iLCJjbGFzcyBGY3RSYW5nZSBleHRlbmRzIHJlcXVpcmUoIFwiLi9mYWNldF9iYXNlXCIgKVxuXHRTdWJWaWV3OiByZXF1aXJlKCBcIi4uL3ZpZXdzL2ZhY2V0cy9zdWJyYW5nZVwiIClcblx0ZGVmYXVsdHM6ID0+XG5cdFx0cmV0dXJuICQuZXh0ZW5kIHN1cGVyLFxuXHRcdFx0bWluOiBudWxsXG5cdFx0XHRtYXg6IG51bGxcblx0XHRcdHN0ZXA6IDFcblx0XHRcdHZhbHVlOiBudWxsXG5cbm1vZHVsZS5leHBvcnRzID0gRmN0UmFuZ2VcbiIsImNsYXNzIEZjdFNlbGVjdCBleHRlbmRzIHJlcXVpcmUoIFwiLi9mYWNldF9iYXNlXCIgKVxuXHRTdWJWaWV3OiByZXF1aXJlKCBcIi4uL3ZpZXdzL2ZhY2V0cy9zdWJzZWxlY3RcIiApXG5cdGRlZmF1bHRzOiA9PlxuXHRcdHJldHVybiAkLmV4dGVuZCggc3VwZXIsIHtcblx0XHRcdG9wdGlvbnM6IFtdXG5cdFx0XHR3YWl0Rm9yQXN5bmM6IHRydWVcblx0XHR9KVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZjdFNlbGVjdFxuIiwiY2xhc3MgRmN0U3RyaW5nIGV4dGVuZHMgcmVxdWlyZSggXCIuL2ZhY2V0X2Jhc2VcIiApXG5cdFN1YlZpZXc6IHJlcXVpcmUoIFwiLi4vdmlld3MvZmFjZXRzL3N1YnN0cmluZ1wiIClcblx0ZGVmYXVsdHM6ID0+XG5cdFx0cmV0dXJuICQuZXh0ZW5kIHN1cGVyLFxuXHRcdFx0b3B0aW9uczogW11cblxubW9kdWxlLmV4cG9ydHMgPSBGY3RTdHJpbmdcbiIsInNvcnRDb2xsID0gcmVxdWlyZSggXCJzb3J0Y29sbFwiIClcblxuZm5HZXQgPSAoIGVsLCBrZXkgKS0+XG5cdHJldHVybiBlbC5nZXQoIGtleSApXG5cbmNsYXNzIElnZ3lGYWNldHMgZXh0ZW5kcyByZXF1aXJlKCBcIi4vYmFja2JvbmVfc3ViXCIgKVxuXHRcblx0Y29uc3RydWN0b3I6ICggbW9kZWxzLCBvcHRpb25zPXt9ICktPlxuXHRcdGlmIG5vdCBvcHRpb25zLmNvbXBhcmF0b3I/XG5cdFx0XHRfZm9yd2FyZCA9IHN3aXRjaCBvcHRpb25zLmRpclxuXHRcdFx0XHR3aGVuIFwiYXNjXCIgdGhlbiB0cnVlXG5cdFx0XHRcdHdoZW4gXCJkZXNjXCIgdGhlbiBmYWxzZVxuXHRcdFx0XHRlbHNlIHRydWVcblx0XHRcdFxuXHRcdFx0b3B0aW9ucy5jb21wYXJhdG9yID0gc29ydENvbGwoIFsgXCJzb3J0XCIgXS5jb25jYXQoIG9wdGlvbnMuc29ydGJ5IG9yIFwibmFtZVwiICksIHsgc29ydDogZmFsc2UsIFwiP1wiOiBfZm9yd2FyZCB9LCBmbkdldCApXG5cdFx0cmV0dXJuIHN1cGVyKCBtb2RlbHMsIG9wdGlvbnMgKVxuXHRcblx0X3N1YkNvbGxlY2N0aW9uT3B0aW9uczogPT5cblx0XHRvcHQgPSBzdXBlclxuXHRcdG9wdC5kaXIgPSBpZiBAZm9yd2FyZCB0aGVuIFwiYXNjXCIgZWxzZSBcImRlc2NcIlxuXHRcdHJldHVybiBvcHRcblx0XG5cdG1vZGVsSWQ6IChhdHRycyktPlxuXHRcdHJldHVybiBhdHRycy5uYW1lXG5cdFx0XG5tb2R1bGUuZXhwb3J0cyA9IElnZ3lGYWNldHNcbiIsImNsYXNzIElnZ3lSZXN1bHQgZXh0ZW5kcyBCYWNrYm9uZS5Nb2RlbFxuXHRpZEF0dHJpYnV0ZTogXCJuYW1lXCJcblx0ZGVmYXVsdHM6XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHRcdG5hbWU6IG51bGxcblx0XHR2YWx1ZTogbnVsbFxuXG5jbGFzcyBJZ2d5UmVzdWx0cyBleHRlbmRzIHJlcXVpcmUoIFwiLi9iYWNrYm9uZV9zdWJcIiApXG5cdG1vZGVsOiBJZ2d5UmVzdWx0XG5cdGluaXRpYWxpemU6ICggbWRscywgb3B0cyApPT5cblx0XHRpZiBvcHRzLm1vZGlmeUtleT8ubGVuZ3RoXG5cdFx0XHRAbW9kaWZ5S2V5ID0gb3B0cy5tb2RpZnlLZXlcblx0XHRyZXR1cm5cblx0cGFyc2U6ICggYXR0ciwgb3B0aW9ucyApPT5cblx0XHRfa2V5ID0gb3B0aW9ucy5fZmFjZXQuZ2V0KCBcIm1vZGlmeUtleVwiICkgb3IgQG1vZGlmeUtleSBvciBcInZhbHVlXCJcblx0XHRfbW9kaWZ5ID0gb3B0aW9ucy5fZmFjZXQ/LmdldCggXCJtb2RpZnlcIiApXG5cdFx0aWYgX21vZGlmeT8gYW5kIF8uaXNGdW5jdGlvbiggX21vZGlmeSApXG5cdFx0XHRhdHRyWyBfa2V5IF0gPSBfbW9kaWZ5KCBhdHRyLnZhbHVlLCBvcHRpb25zLl9mYWNldCwgYXR0ciApXG5cdFx0cmV0dXJuIGF0dHJcblxubW9kdWxlLmV4cG9ydHMgPSBJZ2d5UmVzdWx0c1xuIiwiY2xhc3MgQmFzZVJlc3VsdCBleHRlbmRzIEJhY2tib25lLk1vZGVsXG5cdGlkQXR0cmlidXRlOiBcInZhbHVlXCJcblx0Z2V0TGFiZWw6ID0+XG5cdFx0cmV0dXJuIEBnZXQoIFwibGFiZWxcIiApIG9yIEBnZXQoIEBpZEF0dHJpYnV0ZSApIG9yIFwiXCJcblxuXG5jbGFzcyBCYXNlUmVzdWx0cyBleHRlbmRzIHJlcXVpcmUoIFwiLi9iYWNrYm9uZV9zdWJcIiApXG5cdG1vZGVsOiBCYXNlUmVzdWx0XG5cbm1vZHVsZS5leHBvcnRzID0gQmFzZVJlc3VsdHNcbiIsInZhciBqYWRlID0gcmVxdWlyZShcImphZGUvcnVudGltZVwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0ZW1wbGF0ZShsb2NhbHMpIHtcbnZhciBidWYgPSBbXTtcbnZhciBqYWRlX21peGlucyA9IHt9O1xudmFyIGphZGVfaW50ZXJwO1xuO3ZhciBsb2NhbHNfZm9yX3dpdGggPSAobG9jYWxzIHx8IHt9KTsoZnVuY3Rpb24gKGN1c3RvbSwgaWQsIHR4dCkge1xuYnVmLnB1c2goXCI8c3BhbiBjbGFzcz1cXFwidHh0XFxcIj5cIiArIChqYWRlLmVzY2FwZShudWxsID09IChqYWRlX2ludGVycCA9IHR4dCkgPyBcIlwiIDogamFkZV9pbnRlcnApKSArIFwiPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJidG4td3JwXFxcIj48aVwiICsgKGphZGUuYXR0cihcImRhdGEtaWRcIiwgaWQsIHRydWUsIGZhbHNlKSkgKyBcIiBjbGFzcz1cXFwicm0tcmVzdWx0LWJ0biBmYSBmYS1yZW1vdmVcXFwiPjwvaT5cIik7XG5pZiAoIGN1c3RvbSlcbntcbmJ1Zi5wdXNoKFwiPGlcIiArIChqYWRlLmF0dHIoXCJkYXRhLWlkXCIsIGlkLCB0cnVlLCBmYWxzZSkpICsgXCIgY2xhc3M9XFxcImVkaXQtcmVzdWx0LWJ0biBmYSBmYS1wZW5jaWxcXFwiPjwvaT5cIik7XG59XG5idWYucHVzaChcIjwvc3Bhbj5cIik7fS5jYWxsKHRoaXMsXCJjdXN0b21cIiBpbiBsb2NhbHNfZm9yX3dpdGg/bG9jYWxzX2Zvcl93aXRoLmN1c3RvbTp0eXBlb2YgY3VzdG9tIT09XCJ1bmRlZmluZWRcIj9jdXN0b206dW5kZWZpbmVkLFwiaWRcIiBpbiBsb2NhbHNfZm9yX3dpdGg/bG9jYWxzX2Zvcl93aXRoLmlkOnR5cGVvZiBpZCE9PVwidW5kZWZpbmVkXCI/aWQ6dW5kZWZpbmVkLFwidHh0XCIgaW4gbG9jYWxzX2Zvcl93aXRoP2xvY2Fsc19mb3Jfd2l0aC50eHQ6dHlwZW9mIHR4dCE9PVwidW5kZWZpbmVkXCI/dHh0OnVuZGVmaW5lZCkpOztyZXR1cm4gYnVmLmpvaW4oXCJcIik7XG59OyIsInZhciBqYWRlID0gcmVxdWlyZShcImphZGUvcnVudGltZVwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0ZW1wbGF0ZShsb2NhbHMpIHtcbnZhciBidWYgPSBbXTtcbnZhciBqYWRlX21peGlucyA9IHt9O1xudmFyIGphZGVfaW50ZXJwO1xuO3ZhciBsb2NhbHNfZm9yX3dpdGggPSAobG9jYWxzIHx8IHt9KTsoZnVuY3Rpb24gKGNpZCkge1xuYnVmLnB1c2goXCI8aW5wdXRcIiArIChqYWRlLmF0dHIoXCJpZFwiLCBjaWQsIHRydWUsIGZhbHNlKSkgKyBcIiBjbGFzcz1cXFwiZGF0ZXJhbmdlLWlucFxcXCIvPlwiKTt9LmNhbGwodGhpcyxcImNpZFwiIGluIGxvY2Fsc19mb3Jfd2l0aD9sb2NhbHNfZm9yX3dpdGguY2lkOnR5cGVvZiBjaWQhPT1cInVuZGVmaW5lZFwiP2NpZDp1bmRlZmluZWQpKTs7cmV0dXJuIGJ1Zi5qb2luKFwiXCIpO1xufTsiLCJ2YXIgamFkZSA9IHJlcXVpcmUoXCJqYWRlL3J1bnRpbWVcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdGVtcGxhdGUobG9jYWxzKSB7XG52YXIgYnVmID0gW107XG52YXIgamFkZV9taXhpbnMgPSB7fTtcbnZhciBqYWRlX2ludGVycDtcbjt2YXIgbG9jYWxzX2Zvcl93aXRoID0gKGxvY2FscyB8fCB7fSk7KGZ1bmN0aW9uIChjaWQsIG9wZXJhdG9yLCBvcGVyYXRvcnMsIHVuZGVmaW5lZCwgdmFsdWUpIHtcbmlmICggb3BlcmF0b3JzICYmIG9wZXJhdG9ycy5sZW5ndGgpXG57XG5idWYucHVzaChcIjxkaXYgY2xhc3M9XFxcIm9wZXJhdG9yXFxcIj48c2VsZWN0XCIgKyAoamFkZS5hdHRyKFwiaWRcIiwgXCJcIiArIChjaWQpICsgXCJvcFwiLCB0cnVlLCBmYWxzZSkpICsgXCI+XCIpO1xuLy8gaXRlcmF0ZSBvcGVyYXRvcnNcbjsoZnVuY3Rpb24oKXtcbiAgdmFyICQkb2JqID0gb3BlcmF0b3JzO1xuICBpZiAoJ251bWJlcicgPT0gdHlwZW9mICQkb2JqLmxlbmd0aCkge1xuXG4gICAgZm9yICh2YXIgaWR4ID0gMCwgJCRsID0gJCRvYmoubGVuZ3RoOyBpZHggPCAkJGw7IGlkeCsrKSB7XG4gICAgICB2YXIgb3AgPSAkJG9ialtpZHhdO1xuXG5idWYucHVzaChcIjxvcHRpb25cIiArIChqYWRlLmF0dHIoXCJ2YWx1ZVwiLCBvcCwgdHJ1ZSwgZmFsc2UpKSArIChqYWRlLmF0dHIoXCJzZWxlY3RlZFwiLCAoIG9wZXJhdG9yID09IG9wICksIHRydWUsIGZhbHNlKSkgKyBcIj5cIiArIChqYWRlLmVzY2FwZShudWxsID09IChqYWRlX2ludGVycCA9IG9wKSA/IFwiXCIgOiBqYWRlX2ludGVycCkpICsgXCI8L29wdGlvbj5cIik7XG4gICAgfVxuXG4gIH0gZWxzZSB7XG4gICAgdmFyICQkbCA9IDA7XG4gICAgZm9yICh2YXIgaWR4IGluICQkb2JqKSB7XG4gICAgICAkJGwrKzsgICAgICB2YXIgb3AgPSAkJG9ialtpZHhdO1xuXG5idWYucHVzaChcIjxvcHRpb25cIiArIChqYWRlLmF0dHIoXCJ2YWx1ZVwiLCBvcCwgdHJ1ZSwgZmFsc2UpKSArIChqYWRlLmF0dHIoXCJzZWxlY3RlZFwiLCAoIG9wZXJhdG9yID09IG9wICksIHRydWUsIGZhbHNlKSkgKyBcIj5cIiArIChqYWRlLmVzY2FwZShudWxsID09IChqYWRlX2ludGVycCA9IG9wKSA/IFwiXCIgOiBqYWRlX2ludGVycCkpICsgXCI8L29wdGlvbj5cIik7XG4gICAgfVxuXG4gIH1cbn0pLmNhbGwodGhpcyk7XG5cbmJ1Zi5wdXNoKFwiPC9zZWxlY3Q+PC9kaXY+XCIpO1xufVxuYnVmLnB1c2goXCI8aW5wdXRcIiArIChqYWRlLmF0dHIoXCJpZFwiLCBjaWQsIHRydWUsIGZhbHNlKSkgKyAoamFkZS5hdHRyKFwidmFsdWVcIiwgdmFsdWUsIHRydWUsIGZhbHNlKSkgKyBcIiBjbGFzcz1cXFwibnVtYmVyLWlucFxcXCIvPlwiKTt9LmNhbGwodGhpcyxcImNpZFwiIGluIGxvY2Fsc19mb3Jfd2l0aD9sb2NhbHNfZm9yX3dpdGguY2lkOnR5cGVvZiBjaWQhPT1cInVuZGVmaW5lZFwiP2NpZDp1bmRlZmluZWQsXCJvcGVyYXRvclwiIGluIGxvY2Fsc19mb3Jfd2l0aD9sb2NhbHNfZm9yX3dpdGgub3BlcmF0b3I6dHlwZW9mIG9wZXJhdG9yIT09XCJ1bmRlZmluZWRcIj9vcGVyYXRvcjp1bmRlZmluZWQsXCJvcGVyYXRvcnNcIiBpbiBsb2NhbHNfZm9yX3dpdGg/bG9jYWxzX2Zvcl93aXRoLm9wZXJhdG9yczp0eXBlb2Ygb3BlcmF0b3JzIT09XCJ1bmRlZmluZWRcIj9vcGVyYXRvcnM6dW5kZWZpbmVkLFwidW5kZWZpbmVkXCIgaW4gbG9jYWxzX2Zvcl93aXRoP2xvY2Fsc19mb3Jfd2l0aC51bmRlZmluZWQ6dHlwZW9mIHVuZGVmaW5lZCE9PVwidW5kZWZpbmVkXCI/dW5kZWZpbmVkOnVuZGVmaW5lZCxcInZhbHVlXCIgaW4gbG9jYWxzX2Zvcl93aXRoP2xvY2Fsc19mb3Jfd2l0aC52YWx1ZTp0eXBlb2YgdmFsdWUhPT1cInVuZGVmaW5lZFwiP3ZhbHVlOnVuZGVmaW5lZCkpOztyZXR1cm4gYnVmLmpvaW4oXCJcIik7XG59OyIsInZhciBqYWRlID0gcmVxdWlyZShcImphZGUvcnVudGltZVwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0ZW1wbGF0ZShsb2NhbHMpIHtcbnZhciBidWYgPSBbXTtcbnZhciBqYWRlX21peGlucyA9IHt9O1xudmFyIGphZGVfaW50ZXJwO1xuO3ZhciBsb2NhbHNfZm9yX3dpdGggPSAobG9jYWxzIHx8IHt9KTsoZnVuY3Rpb24gKGNpZCwgdmFsdWUpIHtcbmJ1Zi5wdXNoKFwiPGRpdiBjbGFzcz1cXFwicmFuZ2VpbnBcXFwiPlwiKTtcbnZhciBfdmFscyA9IHZhbHVlID8gdmFsdWUgOiBbXVxuYnVmLnB1c2goXCI8aW5wdXRcIiArIChqYWRlLmF0dHIoXCJpZFwiLCBcIlwiICsgKGNpZCkgKyBcIl9mcm9tXCIsIHRydWUsIGZhbHNlKSkgKyAoamFkZS5hdHRyKFwidmFsdWVcIiwgX3ZhbHNbMF0sIHRydWUsIGZhbHNlKSkgKyBcIiBjbGFzcz1cXFwibnVtYmVyLWlucCByYW5nZS1mcm9tXFxcIi8+PHNwYW4gY2xhc3M9XFxcInNlcGFyYXRvclxcXCI+LTwvc3Bhbj48aW5wdXRcIiArIChqYWRlLmF0dHIoXCJpZFwiLCBcIlwiICsgKGNpZCkgKyBcIl90b1wiLCB0cnVlLCBmYWxzZSkpICsgKGphZGUuYXR0cihcInZhbHVlXCIsIF92YWxzWzFdLCB0cnVlLCBmYWxzZSkpICsgXCIgY2xhc3M9XFxcIm51bWJlci1pbnAgcmFuZ2UtdG9cXFwiLz48L2Rpdj5cIik7fS5jYWxsKHRoaXMsXCJjaWRcIiBpbiBsb2NhbHNfZm9yX3dpdGg/bG9jYWxzX2Zvcl93aXRoLmNpZDp0eXBlb2YgY2lkIT09XCJ1bmRlZmluZWRcIj9jaWQ6dW5kZWZpbmVkLFwidmFsdWVcIiBpbiBsb2NhbHNfZm9yX3dpdGg/bG9jYWxzX2Zvcl93aXRoLnZhbHVlOnR5cGVvZiB2YWx1ZSE9PVwidW5kZWZpbmVkXCI/dmFsdWU6dW5kZWZpbmVkKSk7O3JldHVybiBidWYuam9pbihcIlwiKTtcbn07IiwidmFyIGphZGUgPSByZXF1aXJlKFwiamFkZS9ydW50aW1lXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRlbXBsYXRlKGxvY2Fscykge1xudmFyIGJ1ZiA9IFtdO1xudmFyIGphZGVfbWl4aW5zID0ge307XG52YXIgamFkZV9pbnRlcnA7XG5cbjtyZXR1cm4gYnVmLmpvaW4oXCJcIik7XG59OyIsInZhciBqYWRlID0gcmVxdWlyZShcImphZGUvcnVudGltZVwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0ZW1wbGF0ZShsb2NhbHMpIHtcbnZhciBidWYgPSBbXTtcbnZhciBqYWRlX21peGlucyA9IHt9O1xudmFyIGphZGVfaW50ZXJwO1xuO3ZhciBsb2NhbHNfZm9yX3dpdGggPSAobG9jYWxzIHx8IHt9KTsoZnVuY3Rpb24gKGNpZCwgbXVsdGlwbGUsIG9wdGlvbkdyb3Vwcywgb3B0aW9ucywgdW5kZWZpbmVkLCB2YWx1ZSkge1xuYnVmLnB1c2goXCI8c2VsZWN0XCIgKyAoamFkZS5hdHRyKFwiaWRcIiwgY2lkLCB0cnVlLCBmYWxzZSkpICsgXCIgbXVsdGlwbGU9XFxcIm11bHRpcGxlXFxcIiBjbGFzcz1cXFwic2VsZWN0LWlucFxcXCI+XCIpO1xuaWYgKCBvcHRpb25Hcm91cHMpXG57XG4vLyBpdGVyYXRlIG9wdGlvbkdyb3Vwc1xuOyhmdW5jdGlvbigpe1xuICB2YXIgJCRvYmogPSBvcHRpb25Hcm91cHM7XG4gIGlmICgnbnVtYmVyJyA9PSB0eXBlb2YgJCRvYmoubGVuZ3RoKSB7XG5cbiAgICBmb3IgKHZhciBnbmFtZSA9IDAsICQkbCA9ICQkb2JqLmxlbmd0aDsgZ25hbWUgPCAkJGw7IGduYW1lKyspIHtcbiAgICAgIHZhciBvcHRzID0gJCRvYmpbZ25hbWVdO1xuXG5idWYucHVzaChcIjxvcHRncm91cFwiICsgKGphZGUuYXR0cihcImxhYmVsXCIsIGduYW1lLCB0cnVlLCBmYWxzZSkpICsgXCI+PC9vcHRncm91cD5cIik7XG4vLyBpdGVyYXRlIG9wdHNcbjsoZnVuY3Rpb24oKXtcbiAgdmFyICQkb2JqID0gb3B0cztcbiAgaWYgKCdudW1iZXInID09IHR5cGVvZiAkJG9iai5sZW5ndGgpIHtcblxuICAgIGZvciAodmFyIGlkeCA9IDAsICQkbCA9ICQkb2JqLmxlbmd0aDsgaWR4IDwgJCRsOyBpZHgrKykge1xuICAgICAgdmFyIGVsID0gJCRvYmpbaWR4XTtcblxuYnVmLnB1c2goXCI8b3B0aW9uXCIgKyAoamFkZS5hdHRyKFwidmFsdWVcIiwgZWwudmFsdWUsIHRydWUsIGZhbHNlKSkgKyAoamFkZS5hdHRyKFwic2VsZWN0ZWRcIiwgKCB2YWx1ZSAmJiB2YWx1ZS5pbmRleE9mKCBlbC52YWx1ZSApID49IDAgKSwgdHJ1ZSwgZmFsc2UpKSArIFwiPlwiICsgKGphZGUuZXNjYXBlKG51bGwgPT0gKGphZGVfaW50ZXJwID0gZWwubGFiZWwpID8gXCJcIiA6IGphZGVfaW50ZXJwKSkgKyBcIjwvb3B0aW9uPlwiKTtcbiAgICB9XG5cbiAgfSBlbHNlIHtcbiAgICB2YXIgJCRsID0gMDtcbiAgICBmb3IgKHZhciBpZHggaW4gJCRvYmopIHtcbiAgICAgICQkbCsrOyAgICAgIHZhciBlbCA9ICQkb2JqW2lkeF07XG5cbmJ1Zi5wdXNoKFwiPG9wdGlvblwiICsgKGphZGUuYXR0cihcInZhbHVlXCIsIGVsLnZhbHVlLCB0cnVlLCBmYWxzZSkpICsgKGphZGUuYXR0cihcInNlbGVjdGVkXCIsICggdmFsdWUgJiYgdmFsdWUuaW5kZXhPZiggZWwudmFsdWUgKSA+PSAwICksIHRydWUsIGZhbHNlKSkgKyBcIj5cIiArIChqYWRlLmVzY2FwZShudWxsID09IChqYWRlX2ludGVycCA9IGVsLmxhYmVsKSA/IFwiXCIgOiBqYWRlX2ludGVycCkpICsgXCI8L29wdGlvbj5cIik7XG4gICAgfVxuXG4gIH1cbn0pLmNhbGwodGhpcyk7XG5cbiAgICB9XG5cbiAgfSBlbHNlIHtcbiAgICB2YXIgJCRsID0gMDtcbiAgICBmb3IgKHZhciBnbmFtZSBpbiAkJG9iaikge1xuICAgICAgJCRsKys7ICAgICAgdmFyIG9wdHMgPSAkJG9ialtnbmFtZV07XG5cbmJ1Zi5wdXNoKFwiPG9wdGdyb3VwXCIgKyAoamFkZS5hdHRyKFwibGFiZWxcIiwgZ25hbWUsIHRydWUsIGZhbHNlKSkgKyBcIj48L29wdGdyb3VwPlwiKTtcbi8vIGl0ZXJhdGUgb3B0c1xuOyhmdW5jdGlvbigpe1xuICB2YXIgJCRvYmogPSBvcHRzO1xuICBpZiAoJ251bWJlcicgPT0gdHlwZW9mICQkb2JqLmxlbmd0aCkge1xuXG4gICAgZm9yICh2YXIgaWR4ID0gMCwgJCRsID0gJCRvYmoubGVuZ3RoOyBpZHggPCAkJGw7IGlkeCsrKSB7XG4gICAgICB2YXIgZWwgPSAkJG9ialtpZHhdO1xuXG5idWYucHVzaChcIjxvcHRpb25cIiArIChqYWRlLmF0dHIoXCJ2YWx1ZVwiLCBlbC52YWx1ZSwgdHJ1ZSwgZmFsc2UpKSArIChqYWRlLmF0dHIoXCJzZWxlY3RlZFwiLCAoIHZhbHVlICYmIHZhbHVlLmluZGV4T2YoIGVsLnZhbHVlICkgPj0gMCApLCB0cnVlLCBmYWxzZSkpICsgXCI+XCIgKyAoamFkZS5lc2NhcGUobnVsbCA9PSAoamFkZV9pbnRlcnAgPSBlbC5sYWJlbCkgPyBcIlwiIDogamFkZV9pbnRlcnApKSArIFwiPC9vcHRpb24+XCIpO1xuICAgIH1cblxuICB9IGVsc2Uge1xuICAgIHZhciAkJGwgPSAwO1xuICAgIGZvciAodmFyIGlkeCBpbiAkJG9iaikge1xuICAgICAgJCRsKys7ICAgICAgdmFyIGVsID0gJCRvYmpbaWR4XTtcblxuYnVmLnB1c2goXCI8b3B0aW9uXCIgKyAoamFkZS5hdHRyKFwidmFsdWVcIiwgZWwudmFsdWUsIHRydWUsIGZhbHNlKSkgKyAoamFkZS5hdHRyKFwic2VsZWN0ZWRcIiwgKCB2YWx1ZSAmJiB2YWx1ZS5pbmRleE9mKCBlbC52YWx1ZSApID49IDAgKSwgdHJ1ZSwgZmFsc2UpKSArIFwiPlwiICsgKGphZGUuZXNjYXBlKG51bGwgPT0gKGphZGVfaW50ZXJwID0gZWwubGFiZWwpID8gXCJcIiA6IGphZGVfaW50ZXJwKSkgKyBcIjwvb3B0aW9uPlwiKTtcbiAgICB9XG5cbiAgfVxufSkuY2FsbCh0aGlzKTtcblxuICAgIH1cblxuICB9XG59KS5jYWxsKHRoaXMpO1xuXG59XG5lbHNlXG57XG4vLyBpdGVyYXRlIG9wdGlvbnNcbjsoZnVuY3Rpb24oKXtcbiAgdmFyICQkb2JqID0gb3B0aW9ucztcbiAgaWYgKCdudW1iZXInID09IHR5cGVvZiAkJG9iai5sZW5ndGgpIHtcblxuICAgIGZvciAodmFyIGlkeCA9IDAsICQkbCA9ICQkb2JqLmxlbmd0aDsgaWR4IDwgJCRsOyBpZHgrKykge1xuICAgICAgdmFyIGVsID0gJCRvYmpbaWR4XTtcblxuYnVmLnB1c2goXCI8b3B0aW9uXCIgKyAoamFkZS5hdHRyKFwidmFsdWVcIiwgZWwudmFsdWUsIHRydWUsIGZhbHNlKSkgKyAoamFkZS5hdHRyKFwic2VsZWN0ZWRcIiwgKCB2YWx1ZSAmJiB2YWx1ZS5pbmRleE9mKCBlbC52YWx1ZSApID49IDAgKSwgdHJ1ZSwgZmFsc2UpKSArIFwiPlwiICsgKGphZGUuZXNjYXBlKG51bGwgPT0gKGphZGVfaW50ZXJwID0gZWwubGFiZWwpID8gXCJcIiA6IGphZGVfaW50ZXJwKSkgKyBcIjwvb3B0aW9uPlwiKTtcbiAgICB9XG5cbiAgfSBlbHNlIHtcbiAgICB2YXIgJCRsID0gMDtcbiAgICBmb3IgKHZhciBpZHggaW4gJCRvYmopIHtcbiAgICAgICQkbCsrOyAgICAgIHZhciBlbCA9ICQkb2JqW2lkeF07XG5cbmJ1Zi5wdXNoKFwiPG9wdGlvblwiICsgKGphZGUuYXR0cihcInZhbHVlXCIsIGVsLnZhbHVlLCB0cnVlLCBmYWxzZSkpICsgKGphZGUuYXR0cihcInNlbGVjdGVkXCIsICggdmFsdWUgJiYgdmFsdWUuaW5kZXhPZiggZWwudmFsdWUgKSA+PSAwICksIHRydWUsIGZhbHNlKSkgKyBcIj5cIiArIChqYWRlLmVzY2FwZShudWxsID09IChqYWRlX2ludGVycCA9IGVsLmxhYmVsKSA/IFwiXCIgOiBqYWRlX2ludGVycCkpICsgXCI8L29wdGlvbj5cIik7XG4gICAgfVxuXG4gIH1cbn0pLmNhbGwodGhpcyk7XG5cbn1cbmJ1Zi5wdXNoKFwiPC9zZWxlY3Q+XCIpO1xuaWYgKCBtdWx0aXBsZSlcbntcbmJ1Zi5wdXNoKFwiPHNwYW4gY2xhc3M9XFxcImJ0biBidG4teHMgYnRuLXN1Y2Nlc3Mgc2VsZWN0LWNoZWNrIGZhIGZhLWNoZWNrXFxcIj48L3NwYW4+XCIpO1xufX0uY2FsbCh0aGlzLFwiY2lkXCIgaW4gbG9jYWxzX2Zvcl93aXRoP2xvY2Fsc19mb3Jfd2l0aC5jaWQ6dHlwZW9mIGNpZCE9PVwidW5kZWZpbmVkXCI/Y2lkOnVuZGVmaW5lZCxcIm11bHRpcGxlXCIgaW4gbG9jYWxzX2Zvcl93aXRoP2xvY2Fsc19mb3Jfd2l0aC5tdWx0aXBsZTp0eXBlb2YgbXVsdGlwbGUhPT1cInVuZGVmaW5lZFwiP211bHRpcGxlOnVuZGVmaW5lZCxcIm9wdGlvbkdyb3Vwc1wiIGluIGxvY2Fsc19mb3Jfd2l0aD9sb2NhbHNfZm9yX3dpdGgub3B0aW9uR3JvdXBzOnR5cGVvZiBvcHRpb25Hcm91cHMhPT1cInVuZGVmaW5lZFwiP29wdGlvbkdyb3Vwczp1bmRlZmluZWQsXCJvcHRpb25zXCIgaW4gbG9jYWxzX2Zvcl93aXRoP2xvY2Fsc19mb3Jfd2l0aC5vcHRpb25zOnR5cGVvZiBvcHRpb25zIT09XCJ1bmRlZmluZWRcIj9vcHRpb25zOnVuZGVmaW5lZCxcInVuZGVmaW5lZFwiIGluIGxvY2Fsc19mb3Jfd2l0aD9sb2NhbHNfZm9yX3dpdGgudW5kZWZpbmVkOnR5cGVvZiB1bmRlZmluZWQhPT1cInVuZGVmaW5lZFwiP3VuZGVmaW5lZDp1bmRlZmluZWQsXCJ2YWx1ZVwiIGluIGxvY2Fsc19mb3Jfd2l0aD9sb2NhbHNfZm9yX3dpdGgudmFsdWU6dHlwZW9mIHZhbHVlIT09XCJ1bmRlZmluZWRcIj92YWx1ZTp1bmRlZmluZWQpKTs7cmV0dXJuIGJ1Zi5qb2luKFwiXCIpO1xufTsiLCJ2YXIgamFkZSA9IHJlcXVpcmUoXCJqYWRlL3J1bnRpbWVcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdGVtcGxhdGUobG9jYWxzKSB7XG52YXIgYnVmID0gW107XG52YXIgamFkZV9taXhpbnMgPSB7fTtcbnZhciBqYWRlX2ludGVycDtcbjt2YXIgbG9jYWxzX2Zvcl93aXRoID0gKGxvY2FscyB8fCB7fSk7KGZ1bmN0aW9uIChjaWQsIGlucHZhbCkge1xuYnVmLnB1c2goXCI8aW5wdXRcIiArIChqYWRlLmF0dHIoXCJpZFwiLCBjaWQsIHRydWUsIGZhbHNlKSkgKyAoamFkZS5hdHRyKFwidmFsdWVcIiwgaW5wdmFsLCB0cnVlLCBmYWxzZSkpICsgXCIgY2xhc3M9XFxcInNlbGVjdG9yLWlucFxcXCIvPjx1bFwiICsgKGphZGUuYXR0cihcImlkXCIsIFwiXCIgKyAoY2lkKSArIFwidHlwZWxpc3RcIiwgdHJ1ZSwgZmFsc2UpKSArIFwiIGNsYXNzPVxcXCJ0eXBlbGlzdFxcXCI+PC91bD5cIik7fS5jYWxsKHRoaXMsXCJjaWRcIiBpbiBsb2NhbHNfZm9yX3dpdGg/bG9jYWxzX2Zvcl93aXRoLmNpZDp0eXBlb2YgY2lkIT09XCJ1bmRlZmluZWRcIj9jaWQ6dW5kZWZpbmVkLFwiaW5wdmFsXCIgaW4gbG9jYWxzX2Zvcl93aXRoP2xvY2Fsc19mb3Jfd2l0aC5pbnB2YWw6dHlwZW9mIGlucHZhbCE9PVwidW5kZWZpbmVkXCI/aW5wdmFsOnVuZGVmaW5lZCkpOztyZXR1cm4gYnVmLmpvaW4oXCJcIik7XG59OyIsInZhciBqYWRlID0gcmVxdWlyZShcImphZGUvcnVudGltZVwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0ZW1wbGF0ZShsb2NhbHMpIHtcbnZhciBidWYgPSBbXTtcbnZhciBqYWRlX21peGlucyA9IHt9O1xudmFyIGphZGVfaW50ZXJwO1xuO3ZhciBsb2NhbHNfZm9yX3dpdGggPSAobG9jYWxzIHx8IHt9KTsoZnVuY3Rpb24gKGFjdGl2ZUlkeCwgY3VzdG9tLCBsaXN0LCBxdWVyeSwgdW5kZWZpbmVkKSB7XG52YXIgYWRkID0gMDtcbmlmICggY3VzdG9tICYmIHF1ZXJ5KVxue1xuYWRkID0gMTtcbmJ1Zi5wdXNoKFwiPGxpPjxhIGRhdGEtaWQ9XFxcIl9jdXN0b21cXFwiIGRhdGEtaWR4PVxcXCItMVxcXCJcIiArIChqYWRlLmNscyhbe2FjdGl2ZTowID09PSBhY3RpdmVJZHh9XSwgW3RydWVdKSkgKyBcIj48aT5cXFwiXCIgKyAoKChqYWRlX2ludGVycCA9IHF1ZXJ5KSA9PSBudWxsID8gJycgOiBqYWRlX2ludGVycCkpICsgXCJcXFwiPC9pPjwvYT48L2xpPlwiKTtcbn1cbmlmICggbGlzdC5sZW5ndGgpXG57XG4vLyBpdGVyYXRlIGxpc3RcbjsoZnVuY3Rpb24oKXtcbiAgdmFyICQkb2JqID0gbGlzdDtcbiAgaWYgKCdudW1iZXInID09IHR5cGVvZiAkJG9iai5sZW5ndGgpIHtcblxuICAgIGZvciAodmFyIGlkeCA9IDAsICQkbCA9ICQkb2JqLmxlbmd0aDsgaWR4IDwgJCRsOyBpZHgrKykge1xuICAgICAgdmFyIGVsID0gJCRvYmpbaWR4XTtcblxuYnVmLnB1c2goXCI8bGlcIiArIChqYWRlLmNscyhbZWwuY3NzY2xhc3NdLCBbdHJ1ZV0pKSArIFwiPjxhXCIgKyAoamFkZS5hdHRyKFwiZGF0YS1pZFwiLCBlbC5pZCwgdHJ1ZSwgZmFsc2UpKSArIChqYWRlLmF0dHIoXCJkYXRhLWlkeFwiLCBpZHgsIHRydWUsIGZhbHNlKSkgKyAoamFkZS5jbHMoW3thY3RpdmU6KGlkeCArIGFkZCkgPT09IGFjdGl2ZUlkeH1dLCBbdHJ1ZV0pKSArIFwiPlwiICsgKCgoamFkZV9pbnRlcnAgPSBlbC5sYWJlbCkgPT0gbnVsbCA/ICcnIDogamFkZV9pbnRlcnApKSArIFwiPC9hPjwvbGk+XCIpO1xuICAgIH1cblxuICB9IGVsc2Uge1xuICAgIHZhciAkJGwgPSAwO1xuICAgIGZvciAodmFyIGlkeCBpbiAkJG9iaikge1xuICAgICAgJCRsKys7ICAgICAgdmFyIGVsID0gJCRvYmpbaWR4XTtcblxuYnVmLnB1c2goXCI8bGlcIiArIChqYWRlLmNscyhbZWwuY3NzY2xhc3NdLCBbdHJ1ZV0pKSArIFwiPjxhXCIgKyAoamFkZS5hdHRyKFwiZGF0YS1pZFwiLCBlbC5pZCwgdHJ1ZSwgZmFsc2UpKSArIChqYWRlLmF0dHIoXCJkYXRhLWlkeFwiLCBpZHgsIHRydWUsIGZhbHNlKSkgKyAoamFkZS5jbHMoW3thY3RpdmU6KGlkeCArIGFkZCkgPT09IGFjdGl2ZUlkeH1dLCBbdHJ1ZV0pKSArIFwiPlwiICsgKCgoamFkZV9pbnRlcnAgPSBlbC5sYWJlbCkgPT0gbnVsbCA/ICcnIDogamFkZV9pbnRlcnApKSArIFwiPC9hPjwvbGk+XCIpO1xuICAgIH1cblxuICB9XG59KS5jYWxsKHRoaXMpO1xuXG59XG5lbHNlIGlmICggIWN1c3RvbSlcbntcbmJ1Zi5wdXNoKFwiPGxpPjxhIGNsYXNzPVxcXCJlbXB0eXJlc1xcXCI+bm8gcmVzdWx0IGZvciBcXFwiXCIgKyAoamFkZS5lc2NhcGUoKGphZGVfaW50ZXJwID0gcXVlcnkpID09IG51bGwgPyAnJyA6IGphZGVfaW50ZXJwKSkgKyBcIlxcXCI8L2E+PC9saT5cIik7XG59fS5jYWxsKHRoaXMsXCJhY3RpdmVJZHhcIiBpbiBsb2NhbHNfZm9yX3dpdGg/bG9jYWxzX2Zvcl93aXRoLmFjdGl2ZUlkeDp0eXBlb2YgYWN0aXZlSWR4IT09XCJ1bmRlZmluZWRcIj9hY3RpdmVJZHg6dW5kZWZpbmVkLFwiY3VzdG9tXCIgaW4gbG9jYWxzX2Zvcl93aXRoP2xvY2Fsc19mb3Jfd2l0aC5jdXN0b206dHlwZW9mIGN1c3RvbSE9PVwidW5kZWZpbmVkXCI/Y3VzdG9tOnVuZGVmaW5lZCxcImxpc3RcIiBpbiBsb2NhbHNfZm9yX3dpdGg/bG9jYWxzX2Zvcl93aXRoLmxpc3Q6dHlwZW9mIGxpc3QhPT1cInVuZGVmaW5lZFwiP2xpc3Q6dW5kZWZpbmVkLFwicXVlcnlcIiBpbiBsb2NhbHNfZm9yX3dpdGg/bG9jYWxzX2Zvcl93aXRoLnF1ZXJ5OnR5cGVvZiBxdWVyeSE9PVwidW5kZWZpbmVkXCI/cXVlcnk6dW5kZWZpbmVkLFwidW5kZWZpbmVkXCIgaW4gbG9jYWxzX2Zvcl93aXRoP2xvY2Fsc19mb3Jfd2l0aC51bmRlZmluZWQ6dHlwZW9mIHVuZGVmaW5lZCE9PVwidW5kZWZpbmVkXCI/dW5kZWZpbmVkOnVuZGVmaW5lZCkpOztyZXR1cm4gYnVmLmpvaW4oXCJcIik7XG59OyIsInZhciBqYWRlID0gcmVxdWlyZShcImphZGUvcnVudGltZVwiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0ZW1wbGF0ZShsb2NhbHMpIHtcbnZhciBidWYgPSBbXTtcbnZhciBqYWRlX21peGlucyA9IHt9O1xudmFyIGphZGVfaW50ZXJwO1xuO3ZhciBsb2NhbHNfZm9yX3dpdGggPSAobG9jYWxzIHx8IHt9KTsoZnVuY3Rpb24gKGNpZCwgdmFsdWUpIHtcbmJ1Zi5wdXNoKFwiPGlucHV0XCIgKyAoamFkZS5hdHRyKFwiaWRcIiwgY2lkLCB0cnVlLCBmYWxzZSkpICsgKGphZGUuYXR0cihcInZhbHVlXCIsIHZhbHVlLCB0cnVlLCBmYWxzZSkpICsgXCIgY2xhc3M9XFxcInN0cmluZy1pbnBcXFwiLz5cIik7fS5jYWxsKHRoaXMsXCJjaWRcIiBpbiBsb2NhbHNfZm9yX3dpdGg/bG9jYWxzX2Zvcl93aXRoLmNpZDp0eXBlb2YgY2lkIT09XCJ1bmRlZmluZWRcIj9jaWQ6dW5kZWZpbmVkLFwidmFsdWVcIiBpbiBsb2NhbHNfZm9yX3dpdGg/bG9jYWxzX2Zvcl93aXRoLnZhbHVlOnR5cGVvZiB2YWx1ZSE9PVwidW5kZWZpbmVkXCI/dmFsdWU6dW5kZWZpbmVkKSk7O3JldHVybiBidWYuam9pbihcIlwiKTtcbn07IiwidmFyIGphZGUgPSByZXF1aXJlKFwiamFkZS9ydW50aW1lXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRlbXBsYXRlKGxvY2Fscykge1xudmFyIGJ1ZiA9IFtdO1xudmFyIGphZGVfbWl4aW5zID0ge307XG52YXIgamFkZV9pbnRlcnA7XG47dmFyIGxvY2Fsc19mb3Jfd2l0aCA9IChsb2NhbHMgfHwge30pOyhmdW5jdGlvbiAobGFiZWwsIHBpbm5lZCwgc2VsZWN0ZWQsIHVuZGVmaW5lZCkge1xuaWYgKCAhcGlubmVkKVxue1xuYnVmLnB1c2goXCI8ZGl2IGNsYXNzPVxcXCJybS1mYWNldC1idG4gZmEgZmEtcmVtb3ZlXFxcIj48L2Rpdj5cIik7XG59XG5idWYucHVzaChcIjxzcGFuIGNsYXNzPVxcXCJzdWJsYWJlbFxcXCI+XCIgKyAoamFkZS5lc2NhcGUoKGphZGVfaW50ZXJwID0gbGFiZWwpID09IG51bGwgPyAnJyA6IGphZGVfaW50ZXJwKSkgKyBcIjo8L3NwYW4+PHVsIGNsYXNzPVxcXCJzdWJyZXN1bHRzXFxcIj5cIik7XG5pZiAoIHNlbGVjdGVkICYmIHNlbGVjdGVkLmxlbmd0aClcbntcbi8vIGl0ZXJhdGUgc2VsZWN0ZWRcbjsoZnVuY3Rpb24oKXtcbiAgdmFyICQkb2JqID0gc2VsZWN0ZWQ7XG4gIGlmICgnbnVtYmVyJyA9PSB0eXBlb2YgJCRvYmoubGVuZ3RoKSB7XG5cbiAgICBmb3IgKHZhciBpZHggPSAwLCAkJGwgPSAkJG9iai5sZW5ndGg7IGlkeCA8ICQkbDsgaWR4KyspIHtcbiAgICAgIHZhciBlbCA9ICQkb2JqW2lkeF07XG5cbmJ1Zi5wdXNoKFwiPGxpPjxzcGFuIGNsYXNzPVxcXCJ0eHRcXFwiPlwiICsgKGphZGUuZXNjYXBlKG51bGwgPT0gKGphZGVfaW50ZXJwID0gZWwpID8gXCJcIiA6IGphZGVfaW50ZXJwKSkgKyBcIjwvc3Bhbj48aSBjbGFzcz1cXFwicm0tZmFjZXQtYnRuIGZhIGZhLXJlbW92ZVxcXCI+PC9pPjwvbGk+XCIpO1xuICAgIH1cblxuICB9IGVsc2Uge1xuICAgIHZhciAkJGwgPSAwO1xuICAgIGZvciAodmFyIGlkeCBpbiAkJG9iaikge1xuICAgICAgJCRsKys7ICAgICAgdmFyIGVsID0gJCRvYmpbaWR4XTtcblxuYnVmLnB1c2goXCI8bGk+PHNwYW4gY2xhc3M9XFxcInR4dFxcXCI+XCIgKyAoamFkZS5lc2NhcGUobnVsbCA9PSAoamFkZV9pbnRlcnAgPSBlbCkgPyBcIlwiIDogamFkZV9pbnRlcnApKSArIFwiPC9zcGFuPjxpIGNsYXNzPVxcXCJybS1mYWNldC1idG4gZmEgZmEtcmVtb3ZlXFxcIj48L2k+PC9saT5cIik7XG4gICAgfVxuXG4gIH1cbn0pLmNhbGwodGhpcyk7XG5cbn1cbmJ1Zi5wdXNoKFwiPC91bD48ZGl2IGNsYXNzPVxcXCJzdWJzZWxlY3QgY2xvc2VkXFxcIj48L2Rpdj48ZGl2IGNsYXNzPVxcXCJsb2FkZXJcXFwiPjxpIGNsYXNzPVxcXCJmYSBmYS1jb2cgZmEtc3BpblxcXCI+PC9pPjwvZGl2PlwiKTt9LmNhbGwodGhpcyxcImxhYmVsXCIgaW4gbG9jYWxzX2Zvcl93aXRoP2xvY2Fsc19mb3Jfd2l0aC5sYWJlbDp0eXBlb2YgbGFiZWwhPT1cInVuZGVmaW5lZFwiP2xhYmVsOnVuZGVmaW5lZCxcInBpbm5lZFwiIGluIGxvY2Fsc19mb3Jfd2l0aD9sb2NhbHNfZm9yX3dpdGgucGlubmVkOnR5cGVvZiBwaW5uZWQhPT1cInVuZGVmaW5lZFwiP3Bpbm5lZDp1bmRlZmluZWQsXCJzZWxlY3RlZFwiIGluIGxvY2Fsc19mb3Jfd2l0aD9sb2NhbHNfZm9yX3dpdGguc2VsZWN0ZWQ6dHlwZW9mIHNlbGVjdGVkIT09XCJ1bmRlZmluZWRcIj9zZWxlY3RlZDp1bmRlZmluZWQsXCJ1bmRlZmluZWRcIiBpbiBsb2NhbHNfZm9yX3dpdGg/bG9jYWxzX2Zvcl93aXRoLnVuZGVmaW5lZDp0eXBlb2YgdW5kZWZpbmVkIT09XCJ1bmRlZmluZWRcIj91bmRlZmluZWQ6dW5kZWZpbmVkKSk7O3JldHVybiBidWYuam9pbihcIlwiKTtcbn07IiwidmFyIGphZGUgPSByZXF1aXJlKFwiamFkZS9ydW50aW1lXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRlbXBsYXRlKGxvY2Fscykge1xudmFyIGJ1ZiA9IFtdO1xudmFyIGphZGVfbWl4aW5zID0ge307XG52YXIgamFkZV9pbnRlcnA7XG47dmFyIGxvY2Fsc19mb3Jfd2l0aCA9IChsb2NhbHMgfHwge30pOyhmdW5jdGlvbiAoc2VhcmNoQnV0dG9uKSB7XG5idWYucHVzaChcIjxidXR0b24gY2xhc3M9XFxcImFkZC1mYWNldC1idG4gZmEgZmEtcGx1c1xcXCI+PC9idXR0b24+XCIpO1xuaWYgKCBzZWFyY2hCdXR0b24gIT0gdW5kZWZpbmVkICYmIHNlYXJjaEJ1dHRvbi50ZW1wbGF0ZSAhPSB1bmRlZmluZWQgJiYgc2VhcmNoQnV0dG9uLnRlbXBsYXRlLmxlbmd0aCA+PSAwKVxue1xuYnVmLnB1c2goXCI8YnV0dG9uXCIgKyAoamFkZS5jbHMoWydzZWFyY2gtYnRuJyxzZWFyY2hCdXR0b24uY3NzY2xhc3Mse1wic2VhcmNoLWJ0bi1wdWxscmlnaHRcIjpzZWFyY2hCdXR0b24ucHVsbHJpZ2h0fV0sIFtudWxsLHRydWUsdHJ1ZV0pKSArIFwiPlwiICsgKG51bGwgPT0gKGphZGVfaW50ZXJwID0gc2VhcmNoQnV0dG9uLnRlbXBsYXRlKSA/IFwiXCIgOiBqYWRlX2ludGVycCkgKyBcIjwvYnV0dG9uPlwiKTtcbn19LmNhbGwodGhpcyxcInNlYXJjaEJ1dHRvblwiIGluIGxvY2Fsc19mb3Jfd2l0aD9sb2NhbHNfZm9yX3dpdGguc2VhcmNoQnV0dG9uOnR5cGVvZiBzZWFyY2hCdXR0b24hPT1cInVuZGVmaW5lZFwiP3NlYXJjaEJ1dHRvbjp1bmRlZmluZWQpKTs7cmV0dXJuIGJ1Zi5qb2luKFwiXCIpO1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG5cdFwiTEVGVFwiOiAzN1xuXHRcIlJJR0hUXCI6IDM5XG5cdFwiVVBcIjogMzhcblx0XCJET1dOXCI6IDQwXG5cdFwiRVNDXCI6IFsgMjI5LCAyNyBdXG5cdFwiRU5URVJcIjogMTNcblx0XCJUQUJcIjogOVxuIiwiS0VZQ09ERVMgPSByZXF1aXJlKCBcIi4uLy4uL3V0aWxzL2tleWNvZGVzXCIgKVxuU3ViUmVzdWx0cyA9IHJlcXVpcmUoIFwiLi4vLi4vbW9kZWxzL3N1YnJlc3VsdHNcIiApXG5cbmNsYXNzIEZhY2V0U3Vic0Jhc2UgZXh0ZW5kcyBCYWNrYm9uZS5WaWV3XG5cdHJlc3VsdFRlbXBsYXRlOiByZXF1aXJlKCBcIi4uLy4uL3RtcGxzL3Jlc3VsdF9iYXNlLmphZGVcIiApXG5cblx0aW5pdGlhbGl6ZTogKCBvcHRpb25zICk9PlxuXHRcdEBzdWIgPSBvcHRpb25zLnN1YlxuXHRcdEByZXN1bHQgPSBuZXcgU3ViUmVzdWx0cygpXG5cdFx0cmV0dXJuXG5cblx0ZXZlbnRzOiA9PlxuXHRcdFwia2V5dXAgI3tAX2dldElucFNlbGVjdG9yKCl9XCI6IFwiaW5wdXRcIlxuXHRcdFwia2V5ZG93biAje0BfZ2V0SW5wU2VsZWN0b3IoKX1cIjogXCJpbnB1dFwiXG5cblx0Zm9jdXM6ID0+XG5cdFx0QCRlbC5yZW1vdmVDbGFzcyggXCJjbG9zZWRcIiApXG5cdFx0QGZvY3VzZWQgPSB0cnVlXG5cdFx0QCRpbnAuZm9jdXMoKVxuXHRcdHJldHVyblxuXG5cdHJlbmRlclJlc3VsdDogKCByZW5kZXJFbXB0eSA9IGZhbHNlICk9PlxuXHRcdGlmIHJlbmRlckVtcHR5XG5cdFx0XHRyZXR1cm4gXCJcIlxuXHRcdF9saXN0ID0gW11cblx0XHRmb3IgbW9kZWwsIGlkeCBpbiBAcmVzdWx0Lm1vZGVsc1xuXHRcdFx0X2xibCA9IG1vZGVsLmdldExhYmVsKClcblx0XHRcdGlmIF9sYmw/IGFuZCBfbGJsIGlzbnQgXCJcIlxuXHRcdFx0XHRfbGlzdC5wdXNoIG1vZGVsLmdldExhYmVsKClcblx0XHRpZiBfbGlzdC5sZW5ndGhcblx0XHRcdHJldHVybiBcIjxsaT5cIiArIF9saXN0LmpvaW4oIFwiPC9saT48bGk+XCIgKSArIFwiPC9saT5cIlxuXHRcdHJldHVybiBcIlwiXG5cdFx0XG5cdFx0XG5cdG9wZW46ID0+XG5cdFx0QCRlbC5yZW1vdmVDbGFzcyggXCJjbG9zZWRcIiApXG5cdFx0QCRlbC5hZGRDbGFzcyggXCJvcGVuXCIgKVxuXHRcdEBpc09wZW4gPSB0cnVlXG5cdFx0QHRyaWdnZXIoIFwib3BlbmVkXCIgKVxuXHRcdHJldHVyblxuXG5cdGlucHV0OiAoIGV2bnQgKT0+XG5cdFx0aWYgZXZudC50eXBlIGlzIFwia2V5ZG93blwiXG5cdFx0XHRzd2l0Y2ggZXZudC5rZXlDb2RlXG5cdFx0XHRcdHdoZW4gS0VZQ09ERVMuRU5URVJcblx0XHRcdFx0XHRAc2VsZWN0KClcblx0XHRyZXR1cm5cblx0XG5cdF9vbktleTogKCBldm50ICk9PlxuXHRcdGlmIGV2bnQua2V5Q29kZSBpcyBLRVlDT0RFUy5UQUIgb3IgZXZudC5rZXlDb2RlIGluIEtFWUNPREVTLlRBQlxuXHRcdFx0QF9vblRhYkFjdGlvbiggZXZudCApXG5cdFx0XHRyZXR1cm5cblx0XHRyZXR1cm5cblx0XHRcblx0Z2V0VGVtcGxhdGVEYXRhOiA9PlxuXHRcdHJldCA9XG5cdFx0XHRjaWQ6IEBjaWRcblx0XHRcdCN0YWJfaW5kZXg6ICggKCBAbW9kZWw/Ll9pZHggKiAxMCApIG9yIDEgKSArICggKCBAc3ViPy5wYXJlbnQ/LmlkeCBvciAxICkgKiAxMDAwIClcblx0XHRcdHZhbHVlOiBAbW9kZWw/LmdldCggXCJ2YWx1ZVwiIClcblx0XHRyZXR1cm4gcmV0XG5cblx0X2dldElucFNlbGVjdG9yOiA9PlxuXHRcdHJldHVybiBcImlucHV0IyN7QGNpZH1cIlxuXHRcblx0cmVvcGVuOiAoIHBWaWV3ICk9PlxuXHRcdEAkZWwucmVtb3ZlQ2xhc3MoIFwiY2xvc2VkXCIgKVxuXHRcdEAkZWwuYWRkQ2xhc3MoIFwib3BlblwiIClcblx0XHRAcmVuZGVyKClcblx0XHRwVmlldz8ub3BlbigpXG5cdFx0cmV0dXJuXG5cdFxuXHRyZW5kZXI6ICggaW5pdGlhbEFkZCApPT5cblx0XHRfdG1wbCA9IEB0ZW1wbGF0ZSggIEBnZXRUZW1wbGF0ZURhdGEoKSApXG5cdFx0QCRlbC5odG1sKCBfdG1wbCApXG5cdFx0aWYgbm90IGluaXRpYWxBZGRcblx0XHRcdEAkZWwucmVtb3ZlQ2xhc3MoIFwiY2xvc2VkXCIgKVxuXHRcdEAkaW5wID0gQCRlbC5maW5kKCBAX2dldElucFNlbGVjdG9yKCkgKVxuXHRcdCMkKCBkb2N1bWVudCApLm9uIEBfaGFzVGFiRXZlbnQoKSwgQF9vbktleSBpZiBAX2hhc1RhYkxpc3RlbmVyKCB0cnVlIClcblx0XHRyZXR1cm5cblx0XG5cdF9oYXNUYWJFdmVudDogLT5cblx0XHRyZXR1cm4gXCJrZXlkb3duXCJcblx0XHRcblx0X2hhc1RhYkxpc3RlbmVyOiAtPlxuXHRcdHJldHVybiB0cnVlXG5cdFxuXHRfb25UYWJBY3Rpb246ICggZXZudCApPT5cblx0XHRldm50LnByZXZlbnREZWZhdWx0KClcblx0XHRldm50LnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0QHNlbGVjdCgpXG5cdFx0cmV0dXJuIHRydWVcblxuXHRjbG9zZTogKCBldm50ICk9PlxuXHRcdEBmb2N1c2VkID0gZmFsc2Vcblx0XHQjJCggZG9jdW1lbnQgKS5vZmYgQF9oYXNUYWJFdmVudCgpLCBAX29uS2V5IGlmIEBfaGFzVGFiTGlzdGVuZXIoIGZhbHNlIClcblx0XHRAJGVsLnJlbW92ZUNsYXNzKCBcIm9wZW5cIiApXG5cdFx0QCRlbC5hZGRDbGFzcyggXCJjbG9zZWRcIiApXG5cdFx0QGlzT3BlbiA9IGZhbHNlXG5cdFx0QHRyaWdnZXIoIFwiY2xvc2VkXCIsIEByZXN1bHQsIGV2bnQgKVxuXHRcdHJldHVyblxuXG5cdGdldFJlc3VsdHM6ID0+XG5cdFx0dmFsdWU6IEBnZXRWYWx1ZSgpXG5cdFxuXHRpc1Jlc3VsdEVtcHR5OiAoIHJlcyApPT5cblx0XHRpZiByZXM/LnZhbHVlP1xuXHRcdFx0cmV0dXJuIEBpc1Jlc3VsdEVtcHR5KCByZXMudmFsdWUgKVxuXHRcdFxuXHRcdGlmIG5vdCByZXM/XG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdGlmIHJlcyBpcyBcIlwiXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdGlmIF8uaXNBcnJheSggcmVzICkgYW5kIHJlcy5sZW5ndGggPD0gMFxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHRcblx0XHRyZXR1cm4gZmFsc2Vcblx0XG5cdGdldFJlc1ZhbHVlOiA9PlxuXHRcdHJlcyA9IEByZXN1bHQ/LmZpcnN0KCk/LnRvSlNPTigpXG5cdFx0XG5cdFx0cmV0dXJuIHJlcz8udmFsdWUgb3IgXCJcIlxuXHRcdFxuXHRpc0VxdWFsQ3VycmVudDogKCB2YWwgPSBAZ2V0VmFsdWUoKSApPT5cblx0XHRydiA9IEBnZXRSZXNWYWx1ZSgpXG5cdFx0aWYgcnYgaXMgdmFsXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdHJldHVybiBmYWxzZVxuXHRcdFxuXHRnZXRWYWx1ZTogPT5cblx0XHRyZXR1cm4gQCRpbnAudmFsKClcblxuXHRnZXRTZWxlY3RNb2RlbDogLT5cblx0XHRyZXR1cm4gU3ViUmVzdWx0cy5wcm90b3R5cGUubW9kZWxcblxuXHRfY2hlY2tTZWxlY3RFbXB0eTogKCBfdmFsLCBldm50ICk9PlxuXHRcdCNkZWJ1Z2dlclxuXHRcdCMgaWYgQGlzRXF1YWxDdXJyZW50KCBfdmFsIClcblx0XHQjIFx0QGNsb3NlKClcblx0XHQjIFx0cmV0dXJuIHRydWVcblx0XHRcdFxuXHRcdGlmIF8uaXNFbXB0eSggX3ZhbCApIGFuZCBub3QgXy5pc051bWJlciggX3ZhbCApIGFuZCBub3QgXy5pc0Jvb2xlYW4oIF92YWwgKSMgYW5kIG5vdCBAbW9kZWwuZ2V0KCBcInBpbm5lZFwiIClcblx0XHRcdEBjbG9zZSggZXZudCApXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdHJldHVybiBmYWxzZVxuXG5cdHNlbGVjdDogKCBldm50ICk9PlxuXHRcdF92YWwgPSBAZ2V0VmFsdWUoKVxuXHRcdHJldHVybiBpZiBAX2NoZWNrU2VsZWN0RW1wdHkoIF92YWwsIGV2bnQgKVxuXHRcdEBzZXQoIF92YWwsIGV2bnQgKVxuXHRcdHJldHVyblxuXG5cdHNldDogKCB2YWwsIGV2bnQgKT0+XG5cdFx0X21vZGVsID0gQHJlc3VsdC5maXJzdCgpXG5cdFx0aWYgbm90IF9tb2RlbD9cblx0XHRcdF9Nb2RlbENvbnN0ID0gQGdldFNlbGVjdE1vZGVsKClcblx0XHRcdF9tb2RlbCA9IG5ldyBfTW9kZWxDb25zdCggdmFsdWU6IHZhbCApXG5cdFx0XHRAcmVzdWx0LmFkZCggX21vZGVsIClcblx0XHRlbHNlXG5cdFx0XHRfbW9kZWwuc2V0KCB2YWx1ZTogdmFsIClcblx0XHRAdHJpZ2dlciggXCJzZWxlY3RlZFwiLCBfbW9kZWwsIGV2bnQgKVxuXHRcdEBjbG9zZSggZXZudCApXG5cdFx0cmV0dXJuXG5cblxubW9kdWxlLmV4cG9ydHMgPSBGYWNldFN1YnNCYXNlXG4iLCJLRVlDT0RFUyA9IHJlcXVpcmUoIFwiLi4vLi4vdXRpbHMva2V5Y29kZXNcIiApXG5cbmNsYXNzIEZhY2V0U3Vic0RhdGVSYW5nZSBleHRlbmRzIHJlcXVpcmUoIFwiLi9iYXNlXCIgKVxuXHR0ZW1wbGF0ZTogcmVxdWlyZSggXCIuLi8uLi90bXBscy9kYXRlcmFuZ2UuamFkZVwiIClcblxuXHRmb3JjZWREYXRlUmFuZ2VPcHRzOiA9PlxuXHRcdF9vcHRzID1cblx0XHRcdG9wZW5zOiBcInJpZ2h0XCJcblx0XHRcdFxuXHRcdGlmIEBtb2RlbC5nZXQoIFwiZGF0ZWZvcm1hdFwiIClcblx0XHRcdF9vcHRzLmxvY2FsZSA9XG5cdFx0XHRcdGZvcm1hdDogQG1vZGVsLmdldCggXCJkYXRlZm9ybWF0XCIgKVxuXHRcdFxuXHRcdGlmIEBtb2RlbC5nZXQoXCJ2YWx1ZVwiKT9bMF0/XG5cdFx0XHRAbW9kZWwuZ2V0KFwidmFsdWVcIik/WzFdP1xuXHRcdFx0aWYgXy5pc051bWJlciggQG1vZGVsLmdldChcInZhbHVlXCIpWzBdIClcblx0XHRcdFx0X3NkID0gbW9tZW50KCBAbW9kZWwuZ2V0KFwidmFsdWVcIilbMF0gKVxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRfc2QgPSBtb21lbnQoIEBtb2RlbC5nZXQoXCJ2YWx1ZVwiKVswXSwgQG1vZGVsLmdldCggXCJkYXRlZm9ybWF0XCIgKSApXG5cdFx0XHRpZiBfc2QuaXNWYWxpZCgpXG5cdFx0XHRcdF9vcHRzLnN0YXJ0RGF0ZSA9IF9zZC5fZFxuXG5cdFx0aWYgQG1vZGVsLmdldChcInZhbHVlXCIpP1sxXT9cblx0XHRcdGlmIF8uaXNOdW1iZXIoIEBtb2RlbC5nZXQoXCJ2YWx1ZVwiKVsxXSApXG5cdFx0XHRcdF9lZCA9IG1vbWVudCggQG1vZGVsLmdldChcInZhbHVlXCIpWzFdIClcblx0XHRcdGVsc2Vcblx0XHRcdFx0X2VkID0gbW9tZW50KCBAbW9kZWwuZ2V0KFwidmFsdWVcIilbMV0sIEBtb2RlbC5nZXQoIFwiZGF0ZWZvcm1hdFwiICkgKVxuXHRcdFx0aWYgX2VkLmlzVmFsaWQoKVxuXHRcdFx0XHRfb3B0cy5lbmREYXRlID0gX2VkLl9kXG5cdFx0cmV0dXJuIF9vcHRzXG5cblx0ZXZlbnRzOiA9PlxuXHRcdHJldHVyblxuXG5cdGZvY3VzOiAoKT0+XG5cdFx0aWYgbm90IEBkYXRlcmFuZ2VwaWNrZXI/XG5cdFx0XHRfb3B0cyA9IF8uZXh0ZW5kKCB7fSwgQG1vZGVsLmdldCggXCJvcHRzXCIgKSwgQGZvcmNlZERhdGVSYW5nZU9wdHMoKSApXG5cdFx0XHRAJGlucC5kYXRlcmFuZ2VwaWNrZXIoIF9vcHRzLCBAX2RhdGVSZXR1cm4gKVxuXHRcdFx0QGRhdGVyYW5nZXBpY2tlciA9IEAkaW5wLmRhdGEoIFwiZGF0ZXJhbmdlcGlja2VyXCIgKVxuXHRcdFx0QGRhdGVyYW5nZXBpY2tlci5jb250YWluZXI/LmFkZENsYXNzKCBcImRhdGVyYW5nZS1pZ2d5XCIgKVxuXHRcdFx0XG5cdFx0XHQjIHByZXZlbnQgZnJvbSBoYW5kbGljaCB0aGUgb3V0ZXJjbGljayBleGl0IGZyb20gTWFpblZpZXdcblx0XHRcdEBkYXRlcmFuZ2VwaWNrZXIuY29udGFpbmVyLm9uIFwiY2xpY2tcIiwgKCBldm50ICktPlxuXHRcdFx0XHRldm50LnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0XHRcdHJldHVybiBmYWxzZVxuXHRcdGVsc2Vcblx0XHRcdEBkYXRlcmFuZ2VwaWNrZXIuZWxlbWVudCA9IEAkaW5wXG5cdFx0XHRAZGF0ZXJhbmdlcGlja2VyLnNob3coKVxuXHRcdFx0XG5cdFx0QCRpbnAub24oIFwiY2FuY2VsLmRhdGVyYW5nZXBpY2tlclwiLCBAY2xvc2UgKVxuXHRcdEAkaW5wLm9uKCBcImhpZGUuZGF0ZXJhbmdlcGlja2VyXCIsIEBjbG9zZSApXG5cdFx0cmV0dXJuIHN1cGVyXG5cdFx0XG5cdGNsb3NlOiA9PlxuXHRcdHN1cGVyXG5cdFx0QCRpbnAub2ZmKCBcImNhbmNlbC5kYXRlcmFuZ2VwaWNrZXJcIiwgQGNsb3NlIClcblx0XHRAJGlucC5vZmYoIFwiaGlkZS5kYXRlcmFuZ2VwaWNrZXJcIiwgQGNsb3NlIClcblx0XHRyZXR1cm5cblxuXHRyZW1vdmU6ID0+XG5cdFx0QGRhdGVyYW5nZXBpY2tlcj8ucmVtb3ZlKClcblx0XHRAZGF0ZXJhbmdlcGlja2VyID0gbnVsbFxuXHRcdHJldHVybiBzdXBlclxuXG5cdHJlbmRlclJlc3VsdDogPT5cblx0XHRfcmVzID0gQGdldFJlc3VsdHMoKVxuXHRcdFxuXHRcdGlmIF8uaXNOdW1iZXIoIF9yZXMudmFsdWVbIDAgXSApXG5cdFx0XHRfc3RhcnREYXRlID0gbW9tZW50KCBfcmVzLnZhbHVlWyAwIF0gKVxuXHRcdGVsc2Vcblx0XHRcdF9zdGFydERhdGUgPSBtb21lbnQoIF9yZXMudmFsdWVbIDAgXSwgQG1vZGVsLmdldCggXCJkYXRlZm9ybWF0XCIgKSApXG5cdFx0XHRcblx0XHRpZiBfcmVzLnZhbHVlWyAxIF0/XG5cdFx0XHRpZiBfLmlzTnVtYmVyKCBfcmVzLnZhbHVlWyAxIF0gKVxuXHRcdFx0XHRfZW5kRGF0ZSA9IG1vbWVudCggX3Jlcy52YWx1ZVsgMSBdIClcblx0XHRcdGVsc2Vcblx0XHRcdFx0X2VuZERhdGUgPSBtb21lbnQoIF9yZXMudmFsdWVbIDEgXSwgQG1vZGVsLmdldCggXCJkYXRlZm9ybWF0XCIgKSApXG5cblx0XHRfdGltZSA9IEBtb2RlbC5nZXQoIFwib3B0c1wiICkudGltZVBpY2tlclxuXG5cdFx0X3MgPSBcIjxsaT5cIlxuXHRcdGlmIEBtb2RlbC5nZXQoIFwiZGF0ZWZvcm1hdFwiICk/XG5cdFx0XHRfZnJtdCA9IEBtb2RlbC5nZXQoIFwiZGF0ZWZvcm1hdFwiIClcblx0XHRlbHNlIGlmIF90aW1lXG5cdFx0XHRfZnJtdCA9IFwiTExMTFwiXG5cdFx0ZWxzZVxuXHRcdFx0X2ZybXQgPSBcIkxMXCJcblx0XHRfcyArPSBfc3RhcnREYXRlLmZvcm1hdCggX2ZybXQgKVxuXG5cdFx0aWYgX2VuZERhdGU/XG5cdFx0XHRfcyArPSBcIiAtIFwiXG5cdFx0XHRfcyArPSBfZW5kRGF0ZS5mb3JtYXQoIF9mcm10IClcblxuXHRcdF9zICs9IFwiPC9saT5cIlxuXG5cdFx0cmV0dXJuIF9zXG5cdFxuXHRfaGFzVGFiTGlzdGVuZXI6IC0+XG5cdFx0cmV0dXJuIGZhbHNlXG5cdFxuXHRfZGF0ZVJldHVybjogKCBAc3RhcnREYXRlLCBAZW5kRGF0ZSApPT5cblx0XHRAbW9kZWwuc2V0KCBcInZhbHVlXCIsIEBnZXRWYWx1ZSggZmFsc2UgKSApXG5cdFx0QHNlbGVjdCgpXG5cdFx0cmV0dXJuXG5cblx0Z2V0VGVtcGxhdGVEYXRhOiA9PlxuXHRcdHJldHVybiBzdXBlclxuXG5cdGdldFZhbHVlOiAoIHByZWRlZiA9IHRydWUgKT0+XG5cdFx0aWYgcHJlZGVmXG5cdFx0XHRfcHJlZGVmVmFsID0gQG1vZGVsLmdldCggXCJ2YWx1ZVwiIClcblx0XHRcdGlmIF9wcmVkZWZWYWw/XG5cdFx0XHRcdGlmIG5vdCBfLmlzQXJyYXkoIF9wcmVkZWZWYWwgKVxuXHRcdFx0XHRcdF9wcmVkZWZWYWwgPSAgWyBfcHJlZGVmVmFsIF1cblx0XHRcdFx0WyBAc3RhcnREYXRlLCBAZW5kRGF0ZSBdID0gX3ByZWRlZlZhbFxuXHRcdFx0XHRyZXR1cm4gX3ByZWRlZlZhbFxuXHRcdF9vdXQgPSBbIEBzdGFydERhdGUudmFsdWVPZigpIF1cblx0XHRfb3V0LnB1c2ggQGVuZERhdGUudmFsdWVPZigpIGlmIEBlbmREYXRlP1xuXHRcdHJldHVybiBfb3V0XG5cblx0c2VsZWN0OiA9PlxuXHRcdF9Nb2RlbENvbnN0ID0gQGdldFNlbGVjdE1vZGVsKClcblx0XHRfbW9kZWwgPSBuZXcgX01vZGVsQ29uc3QoIHZhbHVlOiBAZ2V0VmFsdWUoKSApXG5cdFx0QHJlc3VsdC5hZGQoIF9tb2RlbCApXG5cdFx0QHRyaWdnZXIoIFwic2VsZWN0ZWRcIiwgX21vZGVsIClcblx0XHRAY2xvc2UoKVxuXHRcdHJldHVyblxuXG5tb2R1bGUuZXhwb3J0cyA9IEZhY2V0U3Vic0RhdGVSYW5nZVxuIiwiS0VZQ09ERVMgPSByZXF1aXJlKCBcIi4uLy4uL3V0aWxzL2tleWNvZGVzXCIgKVxuXG5uZWFyZXN0ID0gKG4sIHYpLT5cblx0biA9IG4gLyB2XG5cdG4gPSBNYXRoLnJvdW5kKG4pICogdlxuXHRyZXR1cm4gblxuXHRcbnByZWNpc2lvbiA9IChuLCBkcCktPlxuXHRkcCA9IE1hdGgucG93KDEwLCBkcClcblx0biA9IG4gKiBkcFxuXHRuID0gTWF0aC5yb3VuZChuKVxuXHRuID0gbiAvIGRwXG5cdHJldHVybiBuXG5cbmNsYXNzIEZhY2V0TnVtYmVyQmFzZSBleHRlbmRzIHJlcXVpcmUoIFwiLi9iYXNlXCIgKVxuXG5cdGNvbnN0cnVjdG9yOiAtPlxuXHRcdEBzZXROdW1iZXIgPSBfLnRocm90dGxlKCBAX3NldE51bWJlciwgMzAwLCB7bGVhZGluZzogZmFsc2UsIHRyYWlsaW5nOiBmYWxzZX0gKVxuXHRcdHN1cGVyXG5cdFx0cmV0dXJuXG5cblx0ZXZlbnRzOiA9PlxuXHRcdFwia2V5dXAgI3tAX2dldElucFNlbGVjdG9yKCl9XCI6IFwiaW5wdXRcIlxuXHRcdFwia2V5ZG93biAje0BfZ2V0SW5wU2VsZWN0b3IoKX1cIjogXCJpbnB1dFwiXG5cblxuXG5cdGlucHV0OiAoIGV2bnQgKT0+XG5cdFx0XyRlbCA9ICQoIGV2bnQuY3VycmVudFRhcmdldCApXG5cdFx0aWYgZXZudC50eXBlIGlzIFwia2V5ZG93blwiXG5cdFx0XHRzd2l0Y2ggZXZudC5rZXlDb2RlXG5cdFx0XHRcdHdoZW4gS0VZQ09ERVMuVVBcblx0XHRcdFx0XHRAY3JlbWVudCggQG1vZGVsLmdldCggXCJzdGVwXCIgKSwgXyRlbCApXG5cdFx0XHRcdFx0cmV0dXJuXG5cdFx0XHRcdHdoZW4gS0VZQ09ERVMuRE9XTlxuXHRcdFx0XHRcdEBjcmVtZW50KCBAbW9kZWwuZ2V0KCBcInN0ZXBcIiApICogLTEsIF8kZWwgKVxuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHR3aGVuIEtFWUNPREVTLkVOVEVSXG5cdFx0XHRcdFx0QHNlbGVjdCgpXG5cdFx0XHRcdFx0cmV0dXJuXG5cdFx0XG5cdFx0aWYgZXZudC50eXBlIGlzIFwia2V5dXBcIlxuXHRcdFx0X3YgPSBldm50LmN1cnJlbnRUYXJnZXQudmFsdWUucmVwbGFjZSggL1teXFxkXT9bXi1cXGRdKy9nLCBcIlwiIClcblx0XHRcdF92ID0gcGFyc2VJbnQoIF92LCAxMCApXG5cdFx0XHQgXG5cdFx0XHRAc2V0TnVtYmVyKCBfdiwgXyRlbCApXG5cdFx0cmV0dXJuXG5cblx0Y3JlbWVudDogKCBjaGFuZ2UsIGVsID0gQCRpbnAgKT0+XG5cdFx0X3YgPSBlbC52YWwoKVxuXHRcdGlmIG5vdCBfdj8ubGVuZ3RoXG5cdFx0XHRfdiA9IEBtb2RlbC5nZXQoIFwidmFsdWVcIiApXG5cdFx0ZWxzZVxuXHRcdFx0X3YgPSBwYXJzZUludCggX3YsIDEwIClcblxuXHRcdEBfc2V0TnVtYmVyKCBfdiArIGNoYW5nZSwgZWwgKVxuXHRcdHJldHVyblxuXG5cdGdldFZhbHVlOiA9PlxuXHRcdF92ID0gQCRpbnAudmFsKClcblx0XHRpZiBub3QgX3Y/Lmxlbmd0aFxuXHRcdFx0cmV0dXJuIG51bGxcblx0XHRcdFxuXHRcdF9pdiA9IHBhcnNlSW50KCBfdiwgMTAgKVxuXHRcdGlmIGlzTmFOKCBfaXYgKVxuXHRcdFx0cmV0dXJuIG51bGxcblx0XHRcdFxuXHRcdHJldHVybiBAdmFsdWVCeURlZmluaXRpb24oIF92IClcblxuXHRfc2V0TnVtYmVyOiAoIF92LCBlbCA9IEAkaW5wICk9PlxuXHRcdGlmIGlzTmFOKCBfdiApXG5cdFx0XHQjQCRpbnAudmFsKFwiXCIpXG5cdFx0XHRyZXR1cm5cblxuXHRcdF9jdXJyID0gZWwudmFsKClcblxuXHRcdF92ID0gQHZhbHVlQnlEZWZpbml0aW9uKCBfdilcblx0XHRpZiBfY3VyciAhPSBfdi50b1N0cmluZygpXG5cdFx0XHRlbC52YWwoIF92IClcblx0XHRyZXR1cm5cblxuXHR2YWx1ZUJ5RGVmaW5pdGlvbjogKCBfdmFsdWUgKS0+XG5cdFx0bWF4ID0gQG1vZGVsLmdldCggXCJtYXhcIiApXG5cdFx0bWluID0gQG1vZGVsLmdldCggXCJtaW5cIiApXG5cdFx0c3RlcCA9IEBtb2RlbC5nZXQoIFwic3RlcFwiIClcblx0XHRcblx0XHQjIGZpeCByZXZlcnNlZCBtaW4vbWF4IHNldHRpbmdcblx0XHRpZiBtaW4gPiBtYXhcblx0XHRcdF90bXAgPSBtaW5cblx0XHRcdG1pbiA9IG1heFxuXHRcdFx0bWF4ID0gX3RtcFxuXHRcdFxuXHRcdCMgb24gZXh4ZWRkaW5nIHRoZSBsaW1pdHMgdXNlIHRoZSBsaW1pdFxuXHRcdGlmIG1pbj8gYW5kIF92YWx1ZSA8IG1pblxuXHRcdFx0cmV0dXJuIG1pblxuXHRcdGlmIG1heD8gYW5kIF92YWx1ZSA+IG1heFxuXHRcdFx0cmV0dXJuIG1heFxuXG5cdFx0IyBzZWFyY2ggdGhlIG5lYXJlc3QgX3ZhbHVlIHRvIHRoZSBzdGVwXG5cdFx0aWYgc3RlcCBpc250IDFcblx0XHRcdF92YWx1ZSA9IG5lYXJlc3QoIF92YWx1ZSwgc3RlcCApXG5cdFx0XG5cdFx0IyBjYWxjIHRoZSBwcmVjaXNpb24gYnkgc3RlcFxuXHRcdF9wcmVjaXNpb24gPSBNYXRoLm1heCggMCwgTWF0aC5jZWlsKCBNYXRoLmxvZyggMS9zdGVwICkgLyBNYXRoLmxvZyggMTAgKSApIClcblx0XHRpZiBfcHJlY2lzaW9uID4gMFxuXHRcdFx0X3ZhbHVlID0gcHJlY2lzaW9uKCBfdmFsdWUsIF9wcmVjaXNpb24gKVxuXHRcdGVsc2Vcblx0XHRcdF92YWx1ZSA9IE1hdGgucm91bmQoIF92YWx1ZSApXG5cdFx0XHRcblx0XHRyZXR1cm4gX3ZhbHVlXG5cblxubW9kdWxlLmV4cG9ydHMgPSBGYWNldE51bWJlckJhc2VcbiIsIlN1YlJlc3VsdHMgPSByZXF1aXJlKCBcIi4uLy4uL21vZGVscy9zdWJyZXN1bHRzXCIgKVxuS0VZQ09ERVMgPSByZXF1aXJlKCBcIi4uLy4uL3V0aWxzL2tleWNvZGVzXCIgKVxuXG5jbGFzcyBTdHJpbmdPcHRpb24gZXh0ZW5kcyBTdWJSZXN1bHRzLnByb3RvdHlwZS5tb2RlbFxuXHRtYXRjaDogKCBjcml0ICk9PlxuXHRcdF9zID0gIEBnZXQoIFwidmFsdWVcIiApICsgXCIgXCIgKyBAZ2V0KCBcImxhYmVsXCIgKVxuXHRcdGZvdW5kID0gX3MudG9Mb3dlckNhc2UoKS5pbmRleE9mKCBjcml0LnRvTG93ZXJDYXNlKCkgKVxuXHRcdHJldHVybiBmb3VuZCA+PSAwXG5cbmNsYXNzIFN0cmluZ09wdGlvbnMgZXh0ZW5kcyBTdWJSZXN1bHRzXG5cdG1vZGVsOiBTdHJpbmdPcHRpb25cblxuXG5jbGFzcyBBcnJheU9wdGlvbiBleHRlbmRzIEJhY2tib25lLk1vZGVsXG5cdGlkQXR0cmlidXRlOiBcInZhbHVlXCJcblx0Z2V0TGFiZWw6ID0+XG5cdFx0cmV0dXJuIEBnZXQoIFwibGFiZWxcIiApIG9yIEBnZXQoIFwibmFtZVwiICkgb3IgXCItXCJcblxuXHRtYXRjaDogKCBjcml0ICk9PlxuXHRcdF9zID0gIEBnZXQoIFwidmFsdWVcIiApICsgXCIgXCIgKyBAZ2V0KCBcImxhYmVsXCIgKVxuXHRcdGZvdW5kID0gX3MudG9Mb3dlckNhc2UoKS5pbmRleE9mKCBjcml0LnRvTG93ZXJDYXNlKCkgKVxuXHRcdHJldHVybiBmb3VuZCA+PSAwXG5cbmNsYXNzIEFycmF5T3B0aW9ucyBleHRlbmRzIHJlcXVpcmUoIFwiLi4vLi4vbW9kZWxzL2JhY2tib25lX3N1YlwiIClcblx0bW9kZWw6IEFycmF5T3B0aW9uXG5cbmNsYXNzIEZhY2V0U3ViQXJyYXkgZXh0ZW5kcyByZXF1aXJlKCBcIi4uL3NlbGVjdG9yXCIgKVxuXHRcblx0dGVtcGxhdGVSZXNMaTogcmVxdWlyZSggXCIuLi8uLi90bXBscy9hcnJheV9yZXN1bHRsaS5qYWRlXCIgKVxuXHRcblx0b3B0RGVmYXVsdDpcblx0XHRsYWJlbDogXCItXCJcblx0XHR2YWx1ZTogXCItXCJcblxuXHRzZWxlY3RDb3VudDogMFxuXG5cdG9wdENvbGw6IFN0cmluZ09wdGlvbnNcblx0XG5cdGNvbnN0cnVjdG9yOiAoIG9wdGlvbnMgKS0+XG5cdFx0QGxvYWRpbmcgPSBmYWxzZVxuXHRcdGlmIG9wdGlvbnMubW9kZWwuZ2V0KCBcImNvdW50XCIgKT9cblx0XHRcdEBzZWxlY3RDb3VudCA9IG9wdGlvbnMubW9kZWwuZ2V0KCBcImNvdW50XCIgKVxuXHRcdG9wdGlvbnMuY3VzdG9tID0gdHJ1ZVxuXHRcdGlmIG9wdGlvbnMubW9kZWwuZ2V0KCBcImN1c3RvbVwiICk/XG5cdFx0XHRvcHRpb25zLmN1c3RvbSA9IEJvb2xlYW4oIG9wdGlvbnMubW9kZWwuZ2V0KCBcImN1c3RvbVwiICkgKVxuXHRcdFx0XG5cdFx0QGNvbGxlY3Rpb24gPSBAX2NyZWF0ZU9wdGlvbkNvbGxlY3Rpb24oIG9wdGlvbnMubW9kZWwuZ2V0KCBcIm9wdGlvbnNcIiApIClcblx0XHRcblx0XHRpZiBub3Qgb3B0aW9ucy5jdXN0b20gYW5kIEBzZWxlY3RDb3VudCA8PSAwXG5cdFx0XHRAc2VsZWN0Q291bnQgPSBAY29sbGVjdGlvbi5sZW5ndGhcblx0XHRcdFxuXHRcdHN1cGVyKCBvcHRpb25zIClcblx0XHRcblx0XHRAcmVzdWx0Lm9uIFwicmVtb3ZlXCIsICggbWRsLCBjb2xsICk9PlxuXHRcdFx0aWYgY29sbC5sZW5ndGhcblx0XHRcdFx0b3B0aW9ucy5zdWIucmVuZGVyUmVzdWx0KClcblx0XHRcdEBzZWFyY2hjb2xsLmFkZCggbWRsIClcblx0XHRcdEB0cmlnZ2VyKCBcInJlbW92ZWRcIiwgbWRsIClcblx0XHRcdHJldHVyblxuXHRcdHJldHVyblxuXHRcblx0aW5pdGlhbGl6ZTogPT5cblx0XHRAZWRpdE1vZGUgPSBmYWxzZVxuXHRcdHJldHVybiBzdXBlclxuXHRcdFxuXHRldmVudHM6ID0+XG5cdFx0X2V2bnRzID0gc3VwZXJcblx0XHQjaWYgbm90IEBtb2RlbC5nZXQoIFwib3BlcmF0b3JzXCIgKT8ubGVuZ3RoXG5cdFx0X2V2bnRzWyBcImJsdXIgaW5wdXQjI3tAY2lkfVwiIF0gPSBcImNsb3NlXCJcblx0XHRyZXR1cm4gX2V2bnRzXG5cdFxuXHRjbG9zZTogKCBldm50ICk9PlxuXHRcdCMgY2hlY2sgaWYgdGhlIGNsb3NlIGlzIGluaXRpZWQgZnJvbSB0aGUgZWRpdCBtb2RlXG5cdFx0X2RlbFN1YiA9IGZhbHNlXG5cdFx0aWYgQGVkaXRNb2RlXG5cdFx0XHRfZGVsU3ViID0gdHJ1ZVxuXHRcdFx0XG5cdFx0QGVkaXRNb2RlID0gZmFsc2Vcblx0XHRpZiBAbG9hZGluZ1xuXHRcdFx0ZXZudD8ucHJldmVudERlZmF1bHQoKVxuXHRcdFx0ZXZudD8uc3RvcFByb3BhZ2F0aW9uKClcblx0XHRcdEBmb2N1cygpXG5cdFx0XHRyZXR1cm5cblxuXHRcdGlmIEBtb2RlbD8uZ2V0KCBcInBpbm5lZFwiIClcblx0XHRcdHJldHVybiBzdXBlclxuXHRcdFxuXHRcdGlmIF9kZWxTdWIgYW5kIEByZXN1bHQubGVuZ3RoIDw9IDBcblx0XHRcdEBzdWIuZGVsKClcblx0XHRyZXR1cm4gc3VwZXJcblx0XG5cdHJtUmVzOiAoIGV2bnQgKT0+XG5cdFx0aWYgZXZudD8udGFyZ2V0P1xuXHRcdFx0X2lkID0gJCggZXZudC50YXJnZXQgKT8uZGF0YSggXCJpZFwiIClcblx0XHRlbHNlIGlmIGV2bnQ/XG5cdFx0XHRfaWQgPSBldm50XG5cdFx0X21kbCA9IEByZXN1bHQuZ2V0KCBfaWQgKVxuXHRcdGlmIF9tZGw/XG5cdFx0XHRAcmVzdWx0LnJlbW92ZSggX2lkIClcblx0XHRcdGlmIF9tZGw/LmdldCggXCJjdXN0b21cIiApXG5cdFx0XHRcdEBzZWFyY2hjb2xsLnJlbW92ZSggX2lkIClcblx0XHRyZXR1cm5cblx0XHRcblx0ZWRpdFJlczogKCBldm50ICk9PlxuXHRcdEBlZGl0TW9kZSA9IHRydWVcblx0XHRfaWQgPSAkKCBldm50LnRhcmdldCApPy5kYXRhKCBcImlkXCIgKVxuXHRcdF92ID0gQF9lZGl0dmFsID0gQHJlc3VsdC5nZXQoIF9pZCApLmdldCggXCJ2YWx1ZVwiIClcblx0XHRcblx0XHRAcmVzdWx0LnJlbW92ZSggX2lkIClcblx0XHRAc2VhcmNoY29sbC5yZW1vdmUoIF9pZCApXG5cdFx0QHN1Yi5yZW9wZW4oKVxuXHRcdFxuXHRcdEBzZWFyY2goX3YpXG5cdFx0cmV0dXJuXG5cdFxuXHRnZXRUZW1wbGF0ZURhdGE6ID0+XG5cdFx0X2RhdGEgPSBzdXBlclxuXHRcdGlmIEBfZWRpdHZhbD8ubGVuZ3RoXG5cdFx0XHRfZGF0YS5pbnB2YWwgPSBAX2VkaXR2YWxcblx0XHRcdEBfZWRpdHZhbCA9IG51bGxcblx0XHRyZXR1cm4gX2RhdGFcblx0XG5cdHJlbmRlclJlc3VsdDogKCByZW5kZXJFbXB0eSA9IGZhbHNlICk9PlxuXHRcdGlmIHJlbmRlckVtcHR5XG5cdFx0XHRyZXR1cm4gXCI8bGk+PC9saT5cIlxuXHRcdF9saXN0ID0gW11cblx0XHRmb3IgbW9kZWwsIGlkeCBpbiBAcmVzdWx0Lm1vZGVsc1xuXHRcdFx0X2xpc3QucHVzaCBAdGVtcGxhdGVSZXNMaSggdHh0OiBtb2RlbC5nZXRMYWJlbCgpLCBpZDogbW9kZWwuaWQsIGN1c3RvbTogbW9kZWwuZ2V0KCBcImN1c3RvbVwiICkgIClcblxuXHRcdHJldHVybiBcIjxsaT5cIiArIF9saXN0LmpvaW4oIFwiPC9saT48bGk+XCIgKSArIFwiPC9saT5cIlxuXG5cdFxuXHRfaXNGdWxsOiA9PlxuXHRcdGlmIEBzZWxlY3RDb3VudCA8PSAwXG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRyZXR1cm4gKCBAcmVzdWx0IG9yIFtdKS5sZW5ndGggPj0gQHNlbGVjdENvdW50XG5cdFx0XG5cdHNlbGVjdDogPT5cblx0XHRpZiBAbG9hZGluZ1xuXHRcdFx0cmV0dXJuXG5cdFx0XG5cdFx0aWYgQF9pc0Z1bGwoKVxuXHRcdFx0cmV0dXJuXG5cdFx0XHRcblx0XHRfdmFscyA9IEBtb2RlbC5nZXQoIFwidmFsdWVcIiApXG5cdFx0aWYgX3ZhbHM/IGFuZCBub3QgXy5pc0FycmF5KCBfdmFscyApXG5cdFx0XHRfdmFscyA9IFsgX3ZhbHMgXVxuXHRcdGlmIG5vdCBfdmFscz8ubGVuZ3RoXG5cdFx0XHRyZXR1cm5cblx0XHRcdFxuXHRcdGZvciBfdmFsIGluICggaWYgQHNlbGVjdENvdW50IDw9IDAgdGhlbiBfdmFscyBlbHNlIF92YWxzWy4uLkBzZWxlY3RDb3VudF0gKVxuXHRcdFx0X21kbCA9IEBjb2xsZWN0aW9uLmdldCggX3ZhbCApXG5cdFx0XHRpZiBub3QgX21kbD9cblx0XHRcdFx0X21kbCA9IG5ldyBAY29sbGVjdGlvbi5tb2RlbCggdmFsdWU6IF92YWwsIGN1c3RvbTogdHJ1ZSApXG5cdFx0XHRAc2VsZWN0ZWQoIF9tZGwgKVxuXHRcdFxuXHRcdEBjbG9zZSgpXG5cdFx0cmV0dXJuXG5cdFxuXHRyZW9wZW46ICggcFZpZXcgKT0+XG5cdFx0aWYgQF9pc0Z1bGwoKVxuXHRcdFx0IyBpZiBAbW9kZWwuZ2V0KCBcInBpbm5lZFwiIClcblx0XHRcdCMgXHRfaWQgPSBAcmVzdWx0Lmxhc3QoKT8uaWRcblx0XHRcdCMgXHRAcm1SZXMoIF9pZCApXG5cdFx0XHRzdXBlclxuXHRcdFx0cmV0dXJuXG5cdFx0c3VwZXJcblx0XHRyZXR1cm5cblx0XG5cdGdldFJlc3VsdHM6ID0+XG5cdFx0dmFsdWU6IEByZXN1bHQucGx1Y2soIFwidmFsdWVcIiApXG5cdFxuXHRfb25UYWJBY3Rpb246ICggZXZudCApPT5cblx0XHRldm50LnByZXZlbnREZWZhdWx0KClcblx0XHRldm50LnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0c2VhcmNoQ29udGVudCA9IEAkaW5wLnZhbCgpXG5cdFx0aWYgc2VhcmNoQ29udGVudD8ubGVuZ3RoXG5cdFx0XHRAc2VsZWN0QWN0aXZlKClcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0QGNsb3NlKClcblx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFxuXHRfY3JlYXRlT3B0aW9uQ29sbGVjdGlvbjogKCBvcHRpb25zICk9PlxuXHRcdGlmIF8uaXNGdW5jdGlvbiggb3B0aW9ucyApXG5cdFx0XHRAbG9hZGluZyA9IHRydWVcblx0XHRcdF9jb2xsID0gbmV3IEBvcHRDb2xsKCBbXSApXG5cdFx0XHRcblx0XHRcdHNldFRpbWVvdXQoID0+XG5cdFx0XHRcdEAkZWwucGFyZW50KCkuYWRkQ2xhc3MoIFwibG9hZGluZ1wiIClcblx0XHRcdFx0b3B0aW9ucyBAcmVzdWx0LCBAbW9kZWwsICggYU9wdHMgKT0+XG5cdFx0XHRcdFx0Zm9yIF9vcHQsIGlkeCBpbiBhT3B0c1xuXHRcdFx0XHRcdFx0YU9wdHNbaWR4XSA9IF8uZXh0ZW5kKCB7fSwgQG9wdERlZmF1bHQsIF9vcHQsIHsgY3VzdG9tOiBmYWxzZSB9IClcblx0XHRcdFx0XHRfY29sbC5hZGQoIGFPcHRzIClcblx0XHRcdFx0XHRAbG9hZGluZyA9IGZhbHNlXG5cdFx0XHRcdFx0QCRlbC5wYXJlbnQoKS5yZW1vdmVDbGFzcyggXCJsb2FkaW5nXCIgKVxuXHRcdFx0XHRcdEBzZWxlY3QoKVxuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHRcdFxuXHRcdFx0LCAwIClcblx0XHRcdHJldHVybiBfY29sbFxuXG5cdFx0X29wdHMgPSBbXVxuXHRcdGZvciBvcHQgaW4gb3B0aW9uc1xuXHRcdFx0aWYgXy5pc1N0cmluZyggb3B0ICkgb3IgXy5pc051bWJlciggb3B0IClcblx0XHRcdFx0X29wdHMucHVzaCB7IHZhbHVlOiBvcHQsIGxhYmVsOiBvcHQgfVxuXHRcdFx0ZWxzZSBpZiBfLmlzT2JqZWN0KG9wdClcblx0XHRcdFx0X29wdHMucHVzaCBfLmV4dGVuZCgge30sIEBvcHREZWZhdWx0LCBvcHQgKVxuXHRcdHJldHVybiBuZXcgQG9wdENvbGwoIF9vcHRzIClcblxuXG5tb2R1bGUuZXhwb3J0cyA9IEZhY2V0U3ViQXJyYXlcbiIsImNsYXNzIEZhY2V0U3Vic051bWJlciBleHRlbmRzIHJlcXVpcmUoIFwiLi9udW1iZXJfYmFzZVwiIClcblx0dGVtcGxhdGU6IHJlcXVpcmUoIFwiLi4vLi4vdG1wbHMvbnVtYmVyLmphZGVcIiApXG5cblx0ZXZlbnRzOiA9PlxuXHRcdF9ldm50cyA9IHN1cGVyXG5cdFx0I2lmIG5vdCBAbW9kZWwuZ2V0KCBcIm9wZXJhdG9yc1wiICk/Lmxlbmd0aFxuXHRcdF9ldm50c1sgXCJibHVyICN7QF9nZXRJbnBTZWxlY3RvcigpfVwiIF0gPSBcInNlbGVjdFwiXG5cdFx0cmV0dXJuIF9ldm50c1xuXG5cdHJlbmRlcjogPT5cblx0XHRzdXBlclxuXHRcdGlmIEBtb2RlbC5nZXQoIFwib3BlcmF0b3JzXCIgKT8ubGVuZ3RoXG5cdFx0XHRAJGVsT3AgPSBAJGVsLmZpbmQoIFwiLm9wZXJhdG9yXCIgKVxuXHRcdFx0QGVsT3AgPSBAJGVsT3AuZ2V0KDApXG5cdFx0XHRAJGlucE9wID0gQCRlbC5maW5kKCBcInNlbGVjdCMje0BjaWR9b3BcIiApXG5cdFx0XHRAc2VsZWN0Mk9wID0gQCRpbnBPcC5zZWxlY3QyKCB7IHdpZHRoOiBcImF1dG9cIiB9ICkuZGF0YSggXCJzZWxlY3QyXCIgKVxuXHRcdFx0QCRpbnBPcC5vbiggXCJzZWxlY3QyOmNsb3NlXCIsIEBfb3BTZWxlY3RlZCApXG5cdFx0cmV0dXJuXG5cblx0cmVuZGVyUmVzdWx0OiAoIHJlbmRlckVtcHR5ID0gZmFsc2UgKT0+XG5cdFx0aWYgcmVuZGVyRW1wdHlcblx0XHRcdHJldHVybiBcIlwiXG5cdFx0X3JlcyA9IEBnZXRSZXN1bHRzKClcblx0XHRcblx0XHRfcyA9IFwiPGxpPlwiXG5cdFx0X3MgKz0gX3Jlcy5vcGVyYXRvciArIFwiIFwiIGlmIF9yZXMub3BlcmF0b3I/XG5cdFx0X3MgKz0gX3Jlcy52YWx1ZVxuXHRcdF9zICs9IFwiPC9saT5cIlxuXG5cdFx0cmV0dXJuIF9zXG5cdFxuXHRjbG9zZTogKCBldm50ICk9PlxuXHRcdGlmIEAkaW5wT3A/XG5cdFx0XHRAJGlucE9wLnNlbGVjdDIoIFwiZGVzdHJveVwiIClcblx0XHRcdEAkaW5wT3AucmVtb3ZlKClcblx0XHRcdEAkaW5wT3AgPSBudWxsXG5cdFx0c3VwZXJcblx0XHRyZXR1cm5cblx0XHRcblx0c2VsZWN0OiAoIGV2bnQgKT0+XG5cdFx0X3Bvc09wV3JwID0gLTFcblx0XHRpZiBldm50Py5yZWxhdGVkVGFyZ2V0XG5cdFx0XHRfcG9zT3BXcnAgPSBAZWxPcD8uY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGV2bnQ/LnJlbGF0ZWRUYXJnZXQgKVxuXHRcdFx0aWYgX3Bvc09wV3JwIGlzIDIwXG5cdFx0XHRcdHJldHVyblxuXHRcdGlmIGV2bnQ/LnR5cGUgaXMgXCJmb2N1c291dFwiIGFuZCBfcG9zT3BXcnAgaXNudCAyMFxuXHRcdFx0X3ZhbCA9IEBnZXRWYWx1ZSgpXG5cdFx0XHRpZiBfdmFsP1xuXHRcdFx0XHRAc2V0KCBfdmFsLCBldm50IClcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHRAY2xvc2UoKVxuXHRcdFx0cmV0dXJuXG5cdFx0aWYgZXZudD8ucmVsYXRlZFRhcmdldD9cblx0XHRcdF9wb3NXcnAgPSBAZWwuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGV2bnQ/LnJlbGF0ZWRUYXJnZXQgKVxuXHRcdFx0aWYgbm90ICggX3Bvc1dycCBpcyAwIG9yIF9wb3NXcnAgLSAxNiA+PSAwIClcblx0XHRcdFx0ZXZudC5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdFx0XHRyZXR1cm5cblx0XHRpZiBldm50PyBhbmQgKCBldm50Py5yZWxhdGVkVGFyZ2V0IGlzIEAkaW5wLmdldCgwKSBvciBldm50Py5yZWxhdGVkVGFyZ2V0IGlzIEAkaW5wT3A/LmdldCgwKSApXG5cdFx0XHRldm50LnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0XHRyZXR1cm5cblx0XHRpZiBAJGlucE9wP1xuXHRcdFx0QG1vZGVsLnNldCggeyBvcGVyYXRvcjogQCRpbnBPcC52YWwoKSB9IClcblx0XHRzdXBlclxuXHRcdHJldHVyblxuXHRcblxuXHRfb3BTZWxlY3RlZDogPT5cblx0XHRAc2VsZWN0ZWRPUCA9IHRydWVcblx0XHRAZm9jdXMoKVxuXHRcdHJldHVyblxuXG5cdGZvY3VzOiAoIGlucCA9IGZhbHNlICk9PlxuXHRcdGlmIEAkaW5wT3A/IGFuZCBub3QgQHNlbGVjdGVkT1Bcblx0XHRcdEAkaW5wT3Auc2VsZWN0MiggXCJvcGVuXCIgKVxuXHRcdFx0cmV0dXJuXG5cdFx0c3VwZXJcblx0XHRAJGlucC5zZWxlY3QoKVxuXHRcdHJldHVyblxuXHRcblx0cmVvcGVuOiAoIHBWaWV3ICk9PlxuXHRcdF9vbGRWYWwgPSBAcmVzdWx0LmZpcnN0KCk/LmdldCggXCJ2YWx1ZVwiIClcblx0XHRfb2xkT3AgPSBAcmVzdWx0LmZpcnN0KClcblx0XHRAbW9kZWwuc2V0KCB2YWx1ZTogX29sZFZhbCApXG5cdFx0cFZpZXcuJHJlc3VsdHMuZW1wdHkoKS5odG1sKCBAcmVuZGVyUmVzdWx0KCB0cnVlICkgKVxuXHRcdHN1cGVyXG5cdFx0cmV0dXJuXG5cblx0Z2V0VGVtcGxhdGVEYXRhOiA9PlxuXHRcdHJldHVybiBfLmV4dGVuZCggc3VwZXIsIHsgb3BlcmF0b3JzOiBAbW9kZWwuZ2V0KCBcIm9wZXJhdG9yc1wiICksIG9wZXJhdG9yOiBAbW9kZWwuZ2V0KCBcIm9wZXJhdG9yXCIgKX0gKVxuXG5cdF9vblRhYkFjdGlvbjogKCBldm50ICk9PlxuXG5cdFx0aWYgQG1vZGVsLmdldCggXCJvcGVyYXRvcnNcIiApPy5sZW5ndGhcblx0XHRcdGlmIEAkaW5wLmlzKCBldm50LnRhcmdldCApIGFuZCBldm50LnNoaWZ0S2V5XG5cdFx0XHRcdGV2bnQuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRcdFx0ZXZudC5wcmV2ZW50RGVmYXVsdCgpXG5cdFx0XHRcdEAkaW5wT3AuZm9jdXMoKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdFxuXHRcdFx0aWYgKCBAc2VsZWN0Mk9wLiRzZWxlY3Rpb24uaXMoIGV2bnQudGFyZ2V0ICkgb3IgZXZudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCBcInNlbGVjdDItc2VhcmNoX19maWVsZFwiICkgKSBhbmQgbm90IGV2bnQuc2hpZnRLZXlcblx0XHRcdFx0ZXZudC5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdFx0XHRldm50LnByZXZlbnREZWZhdWx0KClcblx0XHRcdFx0QCRpbnAuZm9jdXMoKS5zZWxlY3QoKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdFx0XHRcblx0XHRfdmFsID0gQGdldFZhbHVlKClcblx0XHRldm50LnByZXZlbnREZWZhdWx0KClcblx0XHRldm50LnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0aWYgbm90IGlzTmFOKCBfdmFsIClcblx0XHRcdEBzZWxlY3QoIGV2bnQgKVxuXHRcdHJldHVybiB0cnVlXG5cdFxuXHRnZXRSZXN1bHRzOiA9PlxuXHRcdGlmIEAkaW5wT3A/IG9yIEBtb2RlbC5nZXQoIFwib3BlcmF0b3JcIiApP1xuXHRcdFx0X3JldCA9XG5cdFx0XHRcdHZhbHVlOiBAZ2V0VmFsdWUoKVxuXHRcdFx0XHRvcGVyYXRvcjogQCRpbnBPcD8udmFsKCkgb3IgQG1vZGVsLmdldCggXCJvcGVyYXRvclwiIClcblx0XHRlbHNlXG5cdFx0XHRfcmV0ID1cblx0XHRcdFx0dmFsdWU6IEBnZXRWYWx1ZSgpXG5cdFx0cmV0dXJuIF9yZXRcblxuXG5cbm1vZHVsZS5leHBvcnRzID0gRmFjZXRTdWJzTnVtYmVyXG4iLCJjbGFzcyBGYWNldFN1YnNSYW5nZSBleHRlbmRzIHJlcXVpcmUoIFwiLi9udW1iZXJfYmFzZVwiIClcblx0dGVtcGxhdGU6IHJlcXVpcmUoIFwiLi4vLi4vdG1wbHMvcmFuZ2UuamFkZVwiIClcblxuXHRfZ2V0SW5wU2VsZWN0b3I6ICggZXh0ID0gXCJfZnJvbVwiICk9PlxuXHRcdHJldHVybiBcImlucHV0IyN7QGNpZH0je2V4dH1cIlxuXG5cdGV2ZW50czogPT5cblx0XHRcImtleXVwICN7QF9nZXRJbnBTZWxlY3RvcigpfVwiOiBcImlucHV0XCJcblx0XHRcImtleWRvd24gI3tAX2dldElucFNlbGVjdG9yKCl9XCI6IFwiaW5wdXRcIlxuXHRcdFwia2V5dXAgI3tAX2dldElucFNlbGVjdG9yKCBcIl90b1wiICl9XCI6IFwiaW5wdXRcIlxuXHRcdFwia2V5ZG93biAje0BfZ2V0SW5wU2VsZWN0b3IoIFwiX3RvXCIgKX1cIjogXCJpbnB1dFwiXG5cdFx0XCJibHVyICN7QF9nZXRJbnBTZWxlY3RvcigpfVwiOiBcInNlbGVjdFwiXG5cdFx0XCJibHVyICN7QF9nZXRJbnBTZWxlY3RvciggXCJfdG9cIiApfVwiOiBcInNlbGVjdFwiXG5cdFx0XCJtb3VzZWRvd24gI3tAX2dldElucFNlbGVjdG9yKCl9XCI6IFwiY2xpY2tTZWxcIlxuXHRcdFwibW91c2Vkb3duICN7QF9nZXRJbnBTZWxlY3RvciggXCJfdG9cIiApfVwiOiBcImNsaWNrU2VsXCJcblxuXHRyZW5kZXJSZXN1bHQ6ICggcmVuZGVyRW1wdHkgPSBmYWxzZSApPT5cblx0XHRpZiByZW5kZXJFbXB0eVxuXHRcdFx0cmV0dXJuIFwiXCJcblx0XHRfcmVzID0gQGdldFJlc3VsdHMoKVxuXHRcdHJldHVybiBcIjxsaT5cIiArX3Jlcy52YWx1ZS5qb2luKCBcIiAtIFwiICkgKyBcIjwvbGk+XCJcblxuXHRyZW5kZXI6ID0+XG5cdFx0c3VwZXJcblx0XHRAJGlucFRvID0gQCRlbC5maW5kKCBAX2dldElucFNlbGVjdG9yKCBcIl90b1wiICkgKVxuXHRcdHJldHVyblxuXG5cdGZvY3VzOiAoIGlucCA9IGZhbHNlICk9PlxuXHRcdHN1cGVyXG5cdFx0QCRpbnAuc2VsZWN0KClcblx0XHRyZXR1cm5cblx0XG5cdGNsaWNrU2VsOiAoIGV2bnQgKT0+XG5cdFx0ZXZudC5jdXJyZW50VGFyZ2V0LmZvY3VzKClcblx0XHRyZXR1cm5cblx0XHRcblx0cmVvcGVuOiAoIHBWaWV3ICk9PlxuXHRcdF9vbGRWYWwgPSBAcmVzdWx0LmZpcnN0KCkuZ2V0KCBcInZhbHVlXCIgKVxuXHRcdEBtb2RlbC5zZXQoIHZhbHVlOiBfb2xkVmFsIClcblx0XHRwVmlldy4kcmVzdWx0cy5lbXB0eSgpLmh0bWwoIEByZW5kZXJSZXN1bHQoIHRydWUgKSApXG5cdFx0c3VwZXJcblx0XHRyZXR1cm5cblx0XHRcblx0c2VsZWN0OiAoIGV2bnQgKT0+XG5cdFx0aWYgZXZudD8gYW5kICggZXZudD8ucmVsYXRlZFRhcmdldCBpcyBAJGlucC5nZXQoMCkgb3IgZXZudD8ucmVsYXRlZFRhcmdldCBpcyBAJGlucFRvLmdldCgwKSApXG5cdFx0XHRldm50LnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0XHRyZXR1cm5cblx0XHRcdFxuXHRcdFxuXHRcdCNpZiBAJGlucC5pcyggZXZudC50YXJnZXQgKSBhbmQgbm90IGV2bnQuc2hpZnRLZXlcblx0XHRcdFxuXHRcdHN1cGVyXG5cdFx0cmV0dXJuXG5cdFxuXHRjbG9zZTogPT5cblx0XHR0cnlcblx0XHRcdEAkKCBcIi5yYW5nZWlucFwiICkucmVtb3ZlKClcblx0XHRzdXBlclxuXHRcdHJldHVyblxuXG5cdGdldFJlc3VsdHM6ID0+XG5cdFx0X3JldCA9XG5cdFx0XHR2YWx1ZTogQGdldFZhbHVlKClcblx0XHRyZXR1cm4gX3JldFxuXHRcblx0Z2V0VmFsdWU6ID0+XG5cdFx0X3ZGcm9tID0gc3VwZXJcblx0XHRfdiA9IEAkaW5wVG8udmFsKClcblx0XHRpZiBub3QgX3Y/Lmxlbmd0aFxuXHRcdFx0cmV0dXJuIG51bGxcblx0XHRfdlRvID0gcGFyc2VJbnQoIEB2YWx1ZUJ5RGVmaW5pdGlvbiggX3YpLCAxMCApXG5cblx0XHRyZXR1cm4gWyBfdkZyb20sIF92VG8gXVxuXHRcblx0X29uVGFiQWN0aW9uOiAoIGV2bnQgKT0+XG5cdFx0XG5cdFx0aWYgQCRpbnAuaXMoIGV2bnQudGFyZ2V0ICkgYW5kIG5vdCBldm50LnNoaWZ0S2V5XG5cdFx0XHRldm50LnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0XHRldm50LnByZXZlbnREZWZhdWx0KClcblx0XHRcdEAkaW5wVG8uZm9jdXMoKS5zZWxlY3QoKVxuXHRcdFx0Y29uc29sZS5sb2cgXCJmb2N1cyBuZXh0XCJcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdFxuXHRcdGlmIEAkaW5wVG8uaXMoIGV2bnQudGFyZ2V0ICkgYW5kIGV2bnQuc2hpZnRLZXlcblx0XHRcdGV2bnQuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRcdGV2bnQucHJldmVudERlZmF1bHQoKVxuXHRcdFx0QCRpbnAuZm9jdXMoKS5zZWxlY3QoKVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRcblx0XHRfdmFsID0gQGdldFZhbHVlKClcblx0XHRpZiBfdmFsPy5sZW5ndGggPj0gMlxuXHRcdFx0ZXZudC5wcmV2ZW50RGVmYXVsdCgpXG5cdFx0XHRldm50LnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0XHRAc2VsZWN0KClcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0XHRcblx0XHQjIHJldHVybiBmYWxzZSB0byBwcmV2ZW50IGp1bXAgdG8gbmV4dCBmYWNldFxuXHRcdHJldHVybiB0cnVlXG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IEZhY2V0U3Vic1JhbmdlXG4iLCJLRVlDT0RFUyA9IHJlcXVpcmUoIFwiLi4vLi4vdXRpbHMva2V5Y29kZXNcIiApXG5cbmNsYXNzIEZhY2V0U3Vic1NlbGVjdCBleHRlbmRzIHJlcXVpcmUoIFwiLi9iYXNlXCIgKVxuXHR0ZW1wbGF0ZTogcmVxdWlyZSggXCIuLi8uLi90bXBscy9zZWxlY3QuamFkZVwiIClcblxuXHRmb3JjZWRNb2R1bGVPcHRzOnt9XG5cdCNcdG11bHRpcGxlOiB0cnVlXG5cblx0ZGVmYXVsdE1vZHVsZU9wdHM6XG5cdFx0I21heGltdW1TZWxlY3Rpb25MZW5ndGg6IDFcblx0XHR3aWR0aDogXCJhdXRvXCJcblx0XHRtdWx0aXBsZTogZmFsc2Vcblx0XG5cdGluaXRpYWxpemU6IC0+XG5cdFx0QGNvbnZlcnRWYWx1ZVRvSW50ID0gQF9jaGVja0ludFZhbHVlKCBAbW9kZWwuZ2V0KCBcIm9wdGlvbnNcIiApIClcblx0XHRzdXBlclxuXHRcdHJldHVyblxuXHRcblx0ZXZlbnRzOiA9PlxuXHRcdF9ldm50cyA9IHt9XG5cdFx0X2V2bnRzWyBcImNsaWNrIC5zZWxlY3QtY2hlY2tcIiBdID0gXCJzZWxlY3RcIiBpZiBAbW9kZWwuZ2V0KCBcIm11bHRpcGxlXCIgKVxuXHRcdHJldHVybiBfZXZudHNcblxuXHRfZ2V0SW5wU2VsZWN0b3I6ID0+XG5cdFx0cmV0dXJuIFwic2VsZWN0IyN7QGNpZH1cIlxuXHRcdFxuXHRyZW5kZXI6ID0+XG5cdFx0c3VwZXJcblx0XHRpZiBAbW9kZWwuZ2V0KCBcInBpbm5lZFwiIClcblx0XHRcdEBfaW5pdFNlbGVjdDIoKVxuXHRcdHJldHVyblxuXG5cdGZvY3VzOiAoKT0+XG5cdFx0IyBwcmV2ZW50IGZyb20gYXN5bmMgbGlzdGVuaW5nIG9uIG1hbnVhbCBhY2Nlc3Ncblx0XHRAbW9kZWwuc2V0KCBcIndhaXRGb3JBc3luY1wiLCBmYWxzZSApXG5cdFx0QF9pbml0U2VsZWN0MigpXG5cdFx0QHNlbGVjdDIuJGNvbnRhaW5lci5zaG93KClcblx0XHRAc2VsZWN0Mi5vcGVuKClcblx0XHQjZWxzZVxuXHRcdFx0I0AkaW5wLnNlbGVjdDIoIFwib3BlblwiIClcblx0XHRyZXR1cm4gc3VwZXJcblx0XG5cdF9pc0Z1bGw6ID0+XG5cdFx0aWYgQHNlbGVjdENvdW50IDw9IDBcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdHJldHVybiAoIEByZXN1bHQgb3IgW10pLmxlbmd0aCA+PSBAc2VsZWN0Q291bnRcblx0XG5cdHJlb3BlbjogKCBwVmlldyApPT5cblx0XHRpZiBAX2lzRnVsbCgpXG5cdFx0XHRyZXR1cm5cblx0XHQjIHNldCB0aGUgY3VycmVudCB2YWx1ZXNcblx0XHRfb2xkVmFscyA9IEByZXN1bHQucGx1Y2soIFwidmFsdWVcIiApXG5cdFx0QG1vZGVsLnNldCggdmFsdWU6IF9vbGRWYWxzIClcblx0XHRcblx0XHQjIHJlc2V0IHJlc3VsdHMgYW5kIHNlbGVjdDJcblx0XHRwVmlldy4kcmVzdWx0cy5lbXB0eSgpXG5cdFx0QHNlbGVjdDIuJGNvbnRhaW5lci5vZmYoKVxuXHRcdEBzZWxlY3QyLmRlc3Ryb3koKVxuXHRcdEByZXN1bHQucmVzZXQoKVxuXHRcdEBzZWxlY3QyID0gbnVsbFxuXHRcdFxuXHRcdHJldHVybiBzdXBlclxuXHRcdFxuXHRfY2hlY2tJbnRWYWx1ZTogKCBfb3B0cyA9IFtdICk9PlxuXHRcdGlmIG5vdCBfb3B0cyBvciBub3QgX29wdHMubGVuZ3RoXG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRmb3IgX3YgaW4gX29wdHNcblx0XHRcdGlmIF92LnZhbHVlPyBhbmQgXy5pc1N0cmluZyggX3YudmFsdWUgKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdGlmIF92LmlkPyBhbmQgXy5pc1N0cmluZyggX3YuaWQgKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdGlmIF92PyBhbmQgXy5pc1N0cmluZyggX3YgKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdFxuXHRcdHJldHVybiB0cnVlXG5cblx0X2luaXRTZWxlY3QyOiA9PlxuXHRcdFxuXHRcdGlmIG5vdCBAc2VsZWN0Mj9cblx0XHRcdF9vcHRzID0gXy5leHRlbmQoIHt9LCBAZGVmYXVsdE1vZHVsZU9wdHMsIEBtb2RlbC5nZXQoIFwib3B0c1wiICksIHsgbXVsdGlwbGU6IEBtb2RlbC5nZXQoIFwibXVsdGlwbGVcIiApIG9yIGZhbHNlIH0sIEBmb3JjZWRNb2R1bGVPcHRzIClcblx0XHRcdEAkaW5wLnNlbGVjdDIoIF9vcHRzIClcblx0XHRcdEBzZWxlY3QyID0gQCRpbnAuZGF0YSggXCJzZWxlY3QyXCIgKVxuXHRcdFx0aWYgbm90IEBtb2RlbC5nZXQoIFwibXVsdGlwbGVcIiApXG5cdFx0XHRcdEAkaW5wLm9uIFwic2VsZWN0MjpzZWxlY3Qgc2VsZWN0MjpjbG9zZVwiLCBAc2VsZWN0XG5cdFx0XHRcblx0XHRcdGlmIG5vdCBAc2VsZWN0Mi5fZXZlbnRzQWRkZWRcblx0XHRcdFx0QHNlbGVjdDIuX2V2ZW50c0FkZGVkID0gdHJ1ZVxuXHRcdFx0XHQjIGFmdGVyIGxvYWRpbmcgdHJ5IHRvIHNldCB0aGUgY3Vyc29yIGZvY3VzXG5cdFx0XHRcdEBzZWxlY3QyLm9uIFwicmVzdWx0czphbGxcIiwgKCByZXN1bHRzICk9PlxuXHRcdFx0XHRcdEBjb252ZXJ0VmFsdWVUb0ludCA9IEBfY2hlY2tJbnRWYWx1ZSggcmVzdWx0cz8uZGF0YT8ucmVzdWx0cyApXG5cdFx0XHRcdFx0QHNlbGVjdDIuc2VsZWN0aW9uPy4kc2VhcmNoPy5mb2N1cz8oKVxuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHRcblx0XHRcdFx0IyBsaXN0ZW4gdG8gYXN5bmMgcmVzdWx0IGNoYW5nZXMgYW5kIHNldCB0aGUgc2VsZWN0aW9uXG5cdFx0XHRcdEBzZWxlY3QyLmRhdGFBZGFwdGVyLmN1cnJlbnQgKCByZXN1bHRzICk9PlxuXHRcdFx0XHRcdGlmIEBtb2RlbC5nZXQoIFwid2FpdEZvckFzeW5jXCIgKVxuXHRcdFx0XHRcdFx0X2RhdGEgPSBbXVxuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRmb3IgcmVzdWx0IGluIHJlc3VsdHNcblx0XHRcdFx0XHRcdFx0X2RhdGEucHVzaCBAX2NvbnZlcnRWYWx1ZSggcmVzdWx0IClcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHQjIHNlbGVjdCB0aGUgYWN0aXZlL3ByZWRlZmluZWQgcmVzdWx0c1xuXHRcdFx0XHRcdFx0QF9zZWxlY3QoIF9kYXRhIClcblx0XHRcdFx0XHRcdEBjbG9zZSgpXG5cdFx0XHRcdFx0cmV0dXJuXG5cdFx0XHRcdFx0XG5cdFx0XHRcdEBzZWxlY3QyLiRjb250YWluZXIub24gXCJjbGlja1wiLCBAX3NlbDJvcGVuXG5cdFx0XHRcdEBzZWxlY3QyLiRlbGVtZW50LmhpZGUoKVxuXHRcdFx0XHRAc2VsZWN0Mi4kc2VsZWN0aW9uLm9uIFwiZm9jdXNvdXRcIiwgKCBldm50ICk9PlxuXHRcdFx0XHRcdEBUTWZvY3VzT3V0ID0gc2V0VGltZW91dCggPT5cblx0XHRcdFx0XHRcdEBzZWxlY3QoKVxuXHRcdFx0XHRcdFx0cmV0dXJuXG5cdFx0XHRcdFx0LCAxNTAgKVxuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHRcblx0XHRcdFx0QHNlbGVjdDIuJHNlbGVjdGlvbi5vbiBcImZvY3VzaW5cIiwgKCBldm50ICk9PlxuXHRcdFx0XHRcdGNsZWFyVGltZW91dCggQFRNZm9jdXNPdXQgKSBpZiBAVE1mb2N1c091dD9cblx0XHRcdFx0XHRyZXR1cm5cblx0XHRcdFxuXHRcdFx0XG5cdFx0XHQjJCggZG9jdW1lbnQgKS5vbiBAX2hhc1RhYkV2ZW50KCksIEBfb25LZXkgaWYgQG1vZGVsLmdldCggXCJtdWx0aXBsZVwiIClcblx0XHRyZXR1cm4gQHNlbGVjdDJcblxuXHRfc2VsMm9wZW46ICggZXZudCApLT5cblx0XHRldm50LnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0cmV0dXJuIGZhbHNlXG5cdFxuXHRyZW1vdmU6ID0+XG5cdFx0I0AkaW5wLnNlbGVjdDIoIFwiZGVzdHJveVwiIClcblx0XHRyZXR1cm4gc3VwZXJcblxuXHRnZXRUZW1wbGF0ZURhdGE6ID0+XG5cdFx0X2RhdGEgPSBfLmV4dGVuZCgge30sIHN1cGVyLCB7IG11bHRpcGxlOiBAbW9kZWwuZ2V0KCBcIm11bHRpcGxlXCIgKSwgb3B0aW9uczogQF9jcmVhdGVPcHRpb25Db2xsZWN0aW9uKCBAbW9kZWwuZ2V0KCBcIm9wdGlvbnNcIiApICkgfSApXG5cdFx0aWYgX2RhdGEudmFsdWU/IGFuZCBfLmlzQXJyYXkoIF9kYXRhLnZhbHVlIClcblx0XHRcdGZvciBfdiwgX2lkeCBpbiBfZGF0YS52YWx1ZVxuXHRcdFx0XHRfZGF0YS52YWx1ZVsgX2lkeCBdID0gaWYgQGNvbnZlcnRWYWx1ZVRvSW50IHRoZW4gcGFyc2VGbG9hdCggX3YgKSBlbHNlIF92LnRvU3RyaW5nKClcblx0XHRlbHNlIGlmIF9kYXRhLnZhbHVlP1xuXHRcdFx0X2RhdGEudmFsdWUgPSBbIGlmIEBjb252ZXJ0VmFsdWVUb0ludCB0aGVuIHBhcnNlRmxvYXQoIF9kYXRhLnZhbHVlICkgZWxzZSBfZGF0YS52YWx1ZS50b1N0cmluZygpIF1cblx0XHRcblx0XHRpZiBfZGF0YS52YWx1ZT9cblx0XHRcdF92bGlzdCA9IF8ucGx1Y2soIF9kYXRhLm9wdGlvbnMsIFwidmFsdWVcIiApXG5cdFx0XHRmb3IgX3YgaW4gX2RhdGEudmFsdWUgd2hlbiBfdiBub3QgaW4gX3ZsaXN0XG5cdFx0XHRcdF9kYXRhLm9wdGlvbnMucHVzaCB7IHZhbHVlOiAoIGlmIEBjb252ZXJ0VmFsdWVUb0ludCB0aGVuIHBhcnNlRmxvYXQoIF92ICkgZWxzZSBfdi50b1N0cmluZygpICksIGxhYmVsOiBfdiwgZ3JvdXA6IHVuZGVmaW5lZCB9XG5cdFx0XG5cdFx0X2dyb3VwcyA9IF8uZ3JvdXBCeSggX2RhdGEub3B0aW9ucywgXCJncm91cFwiIClcblx0XHRpZiBfLmNvbXBhY3QoIF8ua2V5cyggX2dyb3VwcyBvciB7fSApICkubGVuZ3RoID4gMVxuXHRcdFx0X2RhdGEub3B0aW9uR3JvdXBzID0gX2dyb3Vwc1xuXHRcdHJldHVybiBfZGF0YVxuXHRcblx0X2hhc1RhYkxpc3RlbmVyOiAoIGNyZWF0ZSApPT5cblx0XHRpZiBjcmVhdGVcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdHJldHVybiBAbW9kZWwuZ2V0KFwibXVsdGlwbGVcIilcblx0XG5cdF9oYXNUYWJFdmVudDogLT5cblx0XHRyZXR1cm4gXCJrZXl1cFwiXG5cdFx0XG5cdGdldFZhbHVlOiA9PlxuXHRcdF92YWxzID0gW11cblx0XHRmb3IgZGF0YSBpbiBAX2luaXRTZWxlY3QyKCk/LmRhdGEoKSBvciBbXVxuXHRcdFx0XG5cdFx0XHRfdmFscy5wdXNoKCBAX2NvbnZlcnRWYWx1ZSggZGF0YSApIClcblx0XHRyZXR1cm4gX3ZhbHNcblx0XG5cdF9jb252ZXJ0VmFsdWU6ICggZGF0YSApPT5cblx0XHRfZGF0YSA9IHt9XG5cdFx0aWYgQGNvbnZlcnRWYWx1ZVRvSW50XG5cdFx0XHRfZGF0YS52YWx1ZSA9IHBhcnNlRmxvYXQoIGRhdGEuaWQgKVxuXHRcdGVsc2Vcblx0XHRcdF9kYXRhLnZhbHVlID0gZGF0YS5pZFxuXHRcdGlmIGRhdGEudGV4dD9cblx0XHRcdGlmIGRhdGEudGV4dCBpbnN0YW5jZW9mIGpRdWVyeVxuXHRcdFx0XHRfZGF0YS5sYWJlbCA9IGRhdGEudGV4dC5odG1sKClcblx0XHRcdGVsc2Vcblx0XHRcdFx0X2RhdGEubGFiZWwgPSBkYXRhLnRleHRcblx0XHRcdFxuXHRcdHJldHVybiBfZGF0YVxuXG5cdGdldFJlc3VsdHM6ID0+XG5cdFx0dmFsdWU6IEByZXN1bHQucGx1Y2soIFwidmFsdWVcIiApXG5cblx0X2NyZWF0ZU9wdGlvbkNvbGxlY3Rpb246ICggb3B0aW9ucyApPT5cblx0XHRpZiBfLmlzRnVuY3Rpb24oIG9wdGlvbnMgKVxuXHRcdFx0cmV0dXJuIG9wdGlvbnMoIEBfY3JlYXRlT3B0aW9uQ29sbGVjdGlvbiApXG5cblx0XHRfb3B0cyA9IFtdXG5cdFx0Zm9yIG9wdCBpbiBvcHRpb25zXG5cdFx0XHRpZiBfLmlzU3RyaW5nKCBvcHQgKSBvciBfLmlzTnVtYmVyKCBvcHQgKVxuXHRcdFx0XHRfb3B0cy5wdXNoIHsgdmFsdWU6ICggaWYgQGNvbnZlcnRWYWx1ZVRvSW50IHRoZW4gcGFyc2VGbG9hdCggb3B0ICkgZWxzZSBvcHQudG9TdHJpbmcoKSApLCBsYWJlbDogb3B0LCBncm91cDogbnVsbCB9XG5cdFx0XHRlbHNlIGlmIF8uaXNPYmplY3QoIG9wdCApXG5cdFx0XHRcdG9wdC52YWx1ZSA9IGlmIEBjb252ZXJ0VmFsdWVUb0ludCB0aGVuIHBhcnNlRmxvYXQoIG9wdC52YWx1ZSApIGVsc2Ugb3B0LnZhbHVlLnRvU3RyaW5nKClcblx0XHRcdFx0X29wdHMucHVzaCBfLmV4dGVuZCgge30sIEBvcHREZWZhdWx0LCBvcHQgKVxuXHRcdHJldHVybiBfb3B0c1xuXG5cdHVuc2VsZWN0OiAoIGV2bnQgKT0+XG5cdFx0QHJlc3VsdC5yZW1vdmUoIGV2bnQucGFyYW1zPy5kYXRhPy5pZCApXG5cdFx0cmV0dXJuXG5cblx0Y2xvc2U6ID0+XG5cdFx0aWYgQG1vZGVsLmdldCggXCJ3YWl0Rm9yQXN5bmNcIiApXG5cdFx0XHRyZXR1cm5cblx0XHRcblx0XHRpZiBAc2VsZWN0Mj9cblx0XHRcdCNAc2VsZWN0Mj8uZGVzdHJveSgpXG5cdFx0XHRAc2VsZWN0Mi4kY29udGFpbmVyLmhpZGUoKVxuXHRcdEAkaW5wPy5yZW1vdmUoKVxuXHRcdEAkKCBcIi5zZWxlY3QtY2hlY2tcIiApLnJlbW92ZSgpXG5cdFx0c3VwZXJcblx0XHRyZXR1cm5cblx0XG5cdHNlbGVjdDogKCBldm50ICk9PlxuXHRcdGV2bnQuc3RvcFByb3BhZ2F0aW9uKCkgaWYgZXZudD8uc3RvcFByb3BhZ2F0aW9uXG5cdFx0X3ZhbHMgPSBAZ2V0VmFsdWUoKVxuXHRcdGlmIG5vdCBfdmFscz8ubGVuZ3RoXG5cdFx0XHQjIElzc3VlIzQ5IGlmIG5vdGhpbmcgd2FzIHNlbGVjdGVkIGNsb3NlIHRoZSBzZWxlY3QtdmlldyBhbmQgcmVtb3ZlIHRoZSB3aG9sZSBmYWNldFxuXHRcdFx0QGNsb3NlKClcblx0XHRcdGlmIG5vdCBAbW9kZWwuZ2V0KCBcIndhaXRGb3JBc3luY1wiIClcblx0XHRcdFx0QHN1Yi5kZWwoKVxuXHRcdFx0cmV0dXJuXG5cdFx0QF9zZWxlY3QoIF92YWxzIClcblxuXHRcdEBjbG9zZSgpXG5cdFx0cmV0dXJuXG5cdFxuXHRfc2VsZWN0OiAoIF92YWxzICk9PlxuXHRcdEBtb2RlbC5zZXQoIFwid2FpdEZvckFzeW5jXCIsIGZhbHNlIClcblx0XHRNb2RlbENvbnN0ID0gQGdldFNlbGVjdE1vZGVsKClcblx0XHRmb3IgX3ZhbCBpbiBfdmFsc1xuXHRcdFx0QHJlc3VsdC5hZGQoIG5ldyBNb2RlbENvbnN0KCBfdmFsICkgKVxuXHRcdEB0cmlnZ2VyKCBcInNlbGVjdGVkXCIsIEByZXN1bHQgKVxuXHRcdHJldHVyblxuXG5tb2R1bGUuZXhwb3J0cyA9IEZhY2V0U3Vic1NlbGVjdFxuIiwiY2xhc3MgRmFjZXRTdWJTdHJpbmcgZXh0ZW5kcyByZXF1aXJlKCBcIi4vYmFzZVwiIClcblx0dGVtcGxhdGU6IHJlcXVpcmUoIFwiLi4vLi4vdG1wbHMvc3RyaW5nLmphZGVcIiApXG5cdFxuXHRldmVudHM6ID0+XG5cdFx0XCJrZXl1cCAje0BfZ2V0SW5wU2VsZWN0b3IoKX1cIjogXCJpbnB1dFwiXG5cdFx0XCJrZXlkb3duICN7QF9nZXRJbnBTZWxlY3RvcigpfVwiOiBcImlucHV0XCJcblx0XHRcImJsdXIgI3tAX2dldElucFNlbGVjdG9yKCl9XCI6IFwic2VsZWN0XCJcblxuXHRjbG9zZTogKCBldm50ICk9PlxuXHRcdHN1cGVyXG5cdFx0dHJ5XG5cdFx0XHRAJGlucD8ucmVtb3ZlPygpXG5cdFx0cmV0dXJuXG5cdFxuXHRyZW9wZW46ICggcFZpZXcgKT0+XG5cdFx0X29sZFZhbCA9IEByZXN1bHQ/LmZpcnN0KCk/LmdldCggXCJ2YWx1ZVwiIClcblx0XHRAbW9kZWwuc2V0KCB2YWx1ZTogX29sZFZhbCApXG5cdFx0cFZpZXcuJHJlc3VsdHMuZW1wdHkoKS5odG1sKCBAcmVuZGVyUmVzdWx0KCB0cnVlICkgKVxuXHRcdHN1cGVyXG5cdFx0cmV0dXJuXG5cdFxuXHRmb2N1czogPT5cblx0XHRzdXBlclxuXHRcdEAkaW5wLnNlbGVjdCgpXG5cdFx0cmV0dXJuXG5cdFx0XHRcdFxubW9kdWxlLmV4cG9ydHMgPSBGYWNldFN1YlN0cmluZ1xuIiwiU3ViVmlldyA9IHJlcXVpcmUoIFwiLi9zdWJcIiApXG5TZWxlY3RvclZpZXcgPSByZXF1aXJlKCBcIi4vc2VsZWN0b3JcIiApXG5cbktFWUNPREVTID0gcmVxdWlyZSggXCIuLi91dGlscy9rZXljb2Rlc1wiIClcblxuY2xhc3MgTWFpblZpZXcgZXh0ZW5kcyBCYWNrYm9uZS5WaWV3XG5cdHRlbXBsYXRlOiByZXF1aXJlKCBcIi4uL3RtcGxzL3dyYXBwZXIuamFkZVwiIClcblxuXHRldmVudHM6XG5cdFx0XCJtb3VzZWRvd24gLnNlYXJjaC1idG5cIjogXCJfb25TZWFyY2hcIlxuXHRcdFwiY2xpY2sgLnNlYXJjaC1idG5cIjogXCJfb25TZWFyY2hcIlxuXHRcdFwiZm9jdXMgLnNlYXJjaC1idG5cIjogXCJfb25Gb2N1c1NlYXJjaFwiXG5cdFx0XCJtb3VzZWRvd24gLmFkZC1mYWNldC1idG5cIjogXCJfYWRkRmFjZXRcIlxuXHRcdFwiY2xpY2tcIjogXCJfYWRkRmFjZXRcIlxuXG5cdGluaXRpYWxpemU6ICggb3B0aW9ucyApPT5cblx0XHRcblx0XHRAbWFpbiA9IG9wdGlvbnMubWFpblxuXHRcdEBpZHggPSBvcHRpb25zLmlkeFxuXHRcdEByZXN1bHRzID0gb3B0aW9ucy5yZXN1bHRzXG5cdFx0QHNlYXJjaEJ1dHRvbiA9IG9wdGlvbnMuc2VhcmNoQnV0dG9uXG5cdFx0XG5cdFx0QGZhY2V0cyA9IHt9XG5cdFx0XG5cdFx0QGNvbGxlY3Rpb24ub24gXCJpZ2d5OnJlbVwiLCBAcmVtRmFjZXRcblx0XHRcblx0XHRfY2wgPSBcImlnZ3kgY2xlYXJmaXhcIlxuXHRcdGlmIEBlbC5jbGFzc05hbWU/Lmxlbmd0aFxuXHRcdFx0X2NsID0gXCIgXCIgKyBfY2xcblx0XHRAZWwuY2xhc3NOYW1lICs9IF9jbFxuXHRcdEByZW5kZXIoKVxuXHRcdEBfb3V0ZXJDbGlja0xpc3RlbigpXG5cdFx0QF9rZXlMaXN0ZW4oKVxuXHRcdFxuXHRcdF92YWx1ZUZhY2V0cyA9IEBjb2xsZWN0aW9uLmZpbHRlciggKCBmY3QgKS0+cmV0dXJuIGZjdD8uZ2V0KCBcInZhbHVlXCIgKT8gb3IgZmN0Py5nZXQoIFwicGlubmVkXCIgKSApXG5cdFx0XG5cdFx0X2ZuU29ydCA9ICgga2V5ICktPlxuXHRcdFx0cmV0dXJuICggdjEsIHYyICktPlxuXHRcdFx0XHRpZiB2MVsga2V5IF0gPiB2Mlsga2V5IF1cblx0XHRcdFx0XHRyZXR1cm4gMVxuXHRcdFx0XHRpZiB2MVsga2V5IF0gPCB2Mlsga2V5IF1cblx0XHRcdFx0XHRyZXR1cm4gLTFcblx0XHRcdFx0cmV0dXJuIDBcblx0XHRcblx0XHRmb3IgZmN0IGluIF92YWx1ZUZhY2V0cy5zb3J0KCBfZm5Tb3J0KCBcIl9pZHhcIiApIClcblx0XHRcdEBnZW5TdWIoIGZjdCwgZmFsc2UsIHRydWUgKVxuXHRcdFxuXHRcdEBjb2xsZWN0aW9uLm9uIFwiYWRkXCIsID0+XG5cdFx0XHRAJGFkZEJ0bi5zaG93KClcblx0XHRcdHJldHVyblxuXHRcdFxuXHRcdHNldFRpbWVvdXQoID0+XG5cdFx0XHRfYWN0aXZlID0gQGNvbGxlY3Rpb24uZmlsdGVyKCAoIGZjdCApLT5yZXR1cm4gZmN0Py5nZXQoIFwiYWN0aXZlXCIgKSBhbmQgZmN0Py5nZXQoIFwicGlubmVkXCIgKSApXG5cdFx0XHRpZiBfYWN0aXZlLmxlbmd0aFxuXHRcdFx0XHR2aWV3ID0gQGZhY2V0c1sgX2FjdGl2ZVsgMCBdLmlkIF1cblx0XHRcdFx0I0BzdWJ2aWV3ID0gdmlld1xuXHRcdFx0XHR2aWV3Py5yZW9wZW4oKVxuXHRcdFx0XHR2aWV3Py5mb2N1cygpXG5cdFx0XHRyZXR1cm5cblx0XHQsIDAgKVxuXHRcdFxuXHRcdHJldHVyblxuXHRcblx0dGVtcGxhdGVEYXRhOiA9PlxuXHRcdF9yZXQgPVxuXHRcdFx0dGFiX2luZGV4OiAoICggKCBAaWR4IG9yIDEgKSArIDEgKSAqIDEwMDAgKSAtIDEwXG5cdFx0aWYgIEBzZWFyY2hCdXR0b24/XG5cdFx0XHRfcmV0LnNlYXJjaEJ1dHRvbiA9XG5cdFx0XHRcdHRlbXBsYXRlOiBAc2VhcmNoQnV0dG9uLnRlbXBsYXRlIG9yIFwiXCJcblx0XHRcdFx0ZXZlbnQ6IEBzZWFyY2hCdXR0b24uZXZlbnQgb3IgXCJzZWFyY2hcIlxuXHRcdFx0XHRwdWxscmlnaHQ6IEBzZWFyY2hCdXR0b24ucHVsbHJpZ2h0IG9yIGZhbHNlXG5cdFx0XHRcdGNzc2NsYXNzOiBAc2VhcmNoQnV0dG9uLmNzc2NsYXNzIG9yIFwiYnRuIGJ0bi1wcmltYXJ5IGZhIGZhLXNlYXJjaFwiXG5cdFx0XG5cdFx0cmV0dXJuIF9yZXRcblx0XG5cdHJlbmRlcjogPT5cblx0XHRfdHBsRGF0YSA9IEB0ZW1wbGF0ZURhdGEoKVxuXHRcdEAkZWwuaHRtbCggQHRlbXBsYXRlKCBfdHBsRGF0YSApIClcblx0XHRAJGFkZEJ0biA9IEAkKCBcIi5hZGQtZmFjZXQtYnRuXCIgKVxuXHRcdGlmIF90cGxEYXRhLnNlYXJjaEJ1dHRvbj9cblx0XHRcdEAkc2VhcmNoQnRuID0gQCQoIFwiLnNlYXJjaC1idG5cIiApXG5cdFx0cmV0dXJuXG5cblx0X2FkZEZhY2V0OiAoIGV2bnQgKT0+XG5cdFx0QFRNb3BlbkFkZEZhY2V0ID0gc2V0VGltZW91dCggPT5cblx0XHRcdEBhZGRGYWNldCgpXG5cdFx0XHRyZXR1cm5cblx0XHQsIDAgKVxuXHRcdHJldHVyblxuXG5cdGV4aXQ6ICggbmV4dEFkZCA9IHRydWUgKT0+XG5cdFx0aWYgQHN1YnZpZXdcblx0XHRcdEBzdWJ2aWV3LmNsb3NlKClcblx0XHRcdEBzdWJ2aWV3ID0gbnVsbFxuXHRcdFx0QGFkZEZhY2V0KCkgaWYgbmV4dEFkZFxuXHRcdFx0cmV0dXJuXG5cdFx0XG5cdFx0aWYgQHNlbGVjdHZpZXdcblx0XHRcdCNjb25zb2xlLmxvZyBcIk1BSU4gUkVNT1ZFIFNFTEVDVFwiXG5cdFx0XHRAc2VsZWN0dmlldy5jbG9zZSgpXG5cdFx0XHRAc2VsZWN0dmlldyA9IG51bGxcblxuXHRcdFxuXHRcdHJldHVyblxuXG5cdHJlbUZhY2V0OiAoIGZhY2V0TSApPT5cblx0XHRAcmVzdWx0cy5yZW1vdmUoIGZhY2V0TS5nZXQoIFwibmFtZVwiICkgKVxuXHRcdHJldHVyblxuXG5cdHNldEZhY2V0OiAoIGZhY2V0TSwgZGF0YSApPT5cblx0XHRAY29sbGVjdGlvbi5yZW1vdmUoIGZhY2V0TSApXG5cblx0XHRAcmVzdWx0cy5hZGQoIF8uZXh0ZW5kKCBkYXRhLCB7IG5hbWU6IGZhY2V0TS5nZXQoIFwibmFtZVwiICksIHR5cGU6IGZhY2V0TS5nZXQoIFwidHlwZVwiICkgfSApLCB7IG1lcmdlOiB0cnVlLCBwYXJzZTogdHJ1ZSwgX2ZhY2V0OiBmYWNldE0gfSApXG5cdFx0aWYgbm90IEBjb2xsZWN0aW9uLmxlbmd0aFxuXHRcdFx0QCRhZGRCdG4uaGlkZSgpXG5cdFx0cmV0dXJuXG5cblx0Z2VuU3ViOiAoIGZhY2V0TSwgYWRkQWZ0ZXIgPSB0cnVlLCBpbml0aWFsQWRkPWZhbHNlICk9PlxuXHRcdHN1YnZpZXcgPSBuZXcgU3ViVmlldyggbW9kZWw6IGZhY2V0TSwgY29sbGVjdGlvbjogQGNvbGxlY3Rpb24sIHBhcmVudDogQCApXG5cdFx0XG5cdFx0c3Vidmlldy5vbiBcImNsb3NlZFwiLCAoIHJlc3VsdHMsIGV2bnQgKT0+XG5cdFx0XHRpZiBzdWJ2aWV3Py5tb2RlbD8uZ2V0KCBcInBpbm5lZFwiIClcblx0XHRcdFx0QHN1YnZpZXcgPSBudWxsXG5cdFx0XHRcdHJldHVyblxuXHRcdFx0I2NvbnNvbGUubG9nIFwiU1VCIFZJRVcgQ0xPU0VEXCIsIHJlc3VsdHM/Lmxlbmd0aFxuXHRcdFx0I3N1YnZpZXcub2ZmKClcblx0XHRcdHN1YnZpZXcucmVtb3ZlKCkgaWYgbm90IHJlc3VsdHM/Lmxlbmd0aFxuXHRcdFx0QHN1YnZpZXcgPSBudWxsXG5cdFx0XHRAYWRkRmFjZXQoKSBpZiBhZGRBZnRlciBhbmQgZXZudD8udHlwZSBpc250IFwiZm9jdXNvdXRcIlxuXHRcdFx0cmV0dXJuXG5cdFx0XG5cdFx0c3Vidmlldy5vbiBcInJlb3BlblwiLCA9PlxuXHRcdFx0QHNlbGVjdHZpZXc/LmNsb3NlKClcblx0XHRcdHJldHVyblxuXHRcdFx0XG5cdFx0X3NlbGYgPSBAXG5cdFx0c3Vidmlldy5vbiBcInNlbGVjdGVkXCIsICggZmFjZXRNLCBkYXRhLCBldm50ICktPlxuXHRcdFx0I2NvbnNvbGUubG9nIFwic3VidmlldyAtIHNlbGVjdGVkXCIsIGRhdGEsIEBpc1Jlc3VsdEVtcHR5KCBkYXRhIClcblx0XHRcdF9zZWxmLnNldEZhY2V0KCBmYWNldE0sIGRhdGEgKVxuXHRcdFx0aWYgKCBub3QgQHNlbGVjdHZpZXcuX2lzRnVsbD8gb3IgQHNlbGVjdHZpZXcuX2lzRnVsbCgpICkgYW5kIGV2bnQ/LnR5cGUgaXNudCBcImZvY3Vzb3V0XCJcblx0XHRcdFx0X3NlbGYuX25leHRGYWNldCggbnVsbCwgQCApXG5cdFx0XHRyZXR1cm5cblx0XHRcblx0XHRzdWJ2aWV3LmV2ZW50c0F0dGFjaGVkID0gdHJ1ZVxuXHRcdFxuXHRcdEAkYWRkQnRuLmJlZm9yZSggc3Vidmlldy5yZW5kZXIoIGluaXRpYWxBZGQgKSApXG5cdFx0QGZhY2V0c1sgZmFjZXRNLmlkIF0gPSBzdWJ2aWV3XG5cdFx0cmV0dXJuIHN1YnZpZXdcblxuXHRhZGRGYWNldDogPT5cblx0XHQjY29uc29sZS5lcnJvciBcImFkZEZhY2V0XCIsIEBzZWxlY3R2aWV3PywgQHN1YnZpZXc/XG5cdFx0aWYgQHNlbGVjdHZpZXc/XG5cdFx0XHQjY29uc29sZS5sb2cgXCJTVE9QIEAgU0VMRUNUIEVYSVNUXCJcblx0XHRcdEBzZWxlY3R2aWV3LmZvY3VzKClcblx0XHRcdHJldHVyblxuXG5cdFx0aWYgQHN1YnZpZXc/XG5cdFx0XHQjY29uc29sZS5sb2cgXCJTVE9QIEAgU1VCIEVYSVNUXCJcblx0XHRcdEBzdWJ2aWV3LmNsb3NlKClcblx0XHRcdCNyZXR1cm5cblxuXHRcdGlmIG5vdCBAY29sbGVjdGlvbi5sZW5ndGhcblx0XHRcdCNjb25zb2xlLmxvZyBcIlNUT1AgQCBFTVBUWSBDT0xMXCJcblx0XHRcdHJldHVyblxuXG5cdFx0QHNlbGVjdHZpZXcgPSBuZXcgU2VsZWN0b3JWaWV3KCBjb2xsZWN0aW9uOiBAY29sbGVjdGlvbiwgY3VzdG9tOiBmYWxzZSwgbWFpbjogQCApXG5cblx0XHRAc2VsZWN0dmlldy5vbiBcIm9wZW5lZFwiLCA9PlxuXHRcdFx0QF9vbk9wZW5lZCgpXG5cdFx0XHRyZXR1cm5cblxuXHRcdEBzZWxlY3R2aWV3Lm9uIFwiY2xvc2VkXCIsICggcmVzdWx0cyApPT5cblx0XHRcdEBfb25DbG9zZWQoKVxuXHRcdFx0I2NvbnNvbGUubG9nIFwiU0VMRUNUIFZJRVcgQ0xPU0VEXCIsIHJlc3VsdHM/Lmxlbmd0aFxuXHRcdFx0I0BzZWxlY3R2aWV3Lm9mZigpXG5cdFx0XHRAc2VsZWN0dmlldy5yZW1vdmUoKVxuXHRcdFx0QHNlbGVjdHZpZXcgPSBudWxsXG5cdFx0XHRpZiBub3QgcmVzdWx0cz8ubGVuZ3RoIGFuZCBAc3Vidmlldz9cblx0XHRcdFx0I0BzdWJ2aWV3Lm9mZigpXG5cdFx0XHRcdEBzdWJ2aWV3LnJlbW92ZSgpXG5cdFx0XHRcdEBzdWJ2aWV3ID0gbnVsbFxuXHRcdFx0cmV0dXJuXG5cblx0XHRAc2VsZWN0dmlldy5vbiBcInNlbGVjdGVkXCIsICggZmFjZXRNLCBkYXRhLCBldm50ICk9PlxuXHRcdFx0ZmFjZXRNLnNldCggXCJ2YWx1ZVwiLCBudWxsIClcblx0XHRcdEBzdWJ2aWV3ID0gQGdlblN1YiggZmFjZXRNIClcblx0XHRcdEBzdWJ2aWV3Lm9wZW4oKVxuXHRcdFx0cmV0dXJuXG5cdFxuXHRcdEAkYWRkQnRuLmJlZm9yZSggQHNlbGVjdHZpZXcucmVuZGVyKCkgKVxuXHRcdEBzZWxlY3R2aWV3LmZvY3VzKClcblx0XHRyZXR1cm5cblx0XG5cdF9vbk9wZW5lZDogPT5cblx0XHRAJGFkZEJ0bj8uaGlkZSgpXG5cdFx0cmV0dXJuXG5cdFxuXHRfb25DbG9zZWQ6ID0+XG5cdFx0QCRhZGRCdG4/LnNob3coKVxuXHRcdHJldHVyblxuXHRcblx0X291dGVyQ2xpY2tMaXN0ZW46ID0+XG5cdFx0alF1ZXJ5KCBkb2N1bWVudCApLm9uIFwiY2xpY2tcIiwgQF9vdXRlckNsaWNrXG5cdFx0cmV0dXJuXG5cdFxuXHRfa2V5TGlzdGVuOiA9PlxuXHRcdGpRdWVyeSggZG9jdW1lbnQgKS5vbiBcImtleWRvd25cIiwgKCBldm50ICk9PlxuXHRcdFx0aWYgZXZudC5rZXlDb2RlIGlzIEtFWUNPREVTLlRBQiBvciBldm50LmtleUNvZGUgaW4gS0VZQ09ERVMuVEFCXG5cdFx0XHRcdCNldm50Py5wcmV2ZW50RGVmYXVsdCgpXG5cdFx0XHRcdFxuXHRcdFx0XHRpZiAkKCBldm50LnRhcmdldCApLmlzKCBcIi5zZWFyY2gtYnRuXCIgKSBhbmQgZXZudD8uc2hpZnRLZXlcblx0XHRcdFx0XHRldm50Py5wcmV2ZW50RGVmYXVsdCgpXG5cdFx0XHRcdFx0ZXZudD8uc3RvcFByb3BhZ2F0aW9uKClcblx0XHRcdFx0XHRAVE1vcGVuQWRkRmFjZXQgPXNldFRpbWVvdXQoID0+XG5cdFx0XHRcdFx0XHRAYWRkRmFjZXQoKVxuXHRcdFx0XHRcdCwgMCApXG5cdFx0XHRcdFx0cmV0dXJuXG5cdFx0XHRcdFx0XG5cdFx0XHRcdCMgY2FzZSBvbmx5IHRoZSBmYWNldCBzZWxlY3RvciBpcyBvcGVuXG5cdFx0XHRcdGlmIEBzZWxlY3R2aWV3Py5pc09wZW5cblx0XHRcdFx0XHRldm50Py5wcmV2ZW50RGVmYXVsdCgpXG5cdFx0XHRcdFx0ZXZudD8uc3RvcFByb3BhZ2F0aW9uKClcblx0XHRcdFx0XHRpZiBldm50Py5zaGlmdEtleVxuXHRcdFx0XHRcdFx0X3ByZXZJZCA9IEAkYWRkQnRuPy5wcmV2QWxsKCBcIi5zdWJcIiApPy5maXJzdCgpPy5kYXRhKCBcImZjdGlkXCIgKVxuXHRcdFx0XHRcdFx0aWYgX3ByZXZJZD9cblx0XHRcdFx0XHRcdFx0c2V0VGltZW91dCggPT5cblx0XHRcdFx0XHRcdFx0XHRAZmFjZXRzWyBfcHJldklkIF0/LnJlb3BlbigpXG5cdFx0XHRcdFx0XHRcdCwgMCApXG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0QHNlbGVjdHZpZXcuY2xvc2UoKVxuXHRcdFx0XHRcdFx0QGZvY3VzU2VhcmNoKClcblx0XHRcdFx0XHRyZXR1cm5cblx0XHRcdFx0XG5cdFx0XHRcdFxuXHRcdFx0XHQjIG90aGVyd2lzZSB0cmlnZ2VyIGVzY2FwZSBldmVudCBhbmQgbGlzdGVuIGZvciB0aGUgcmVzcG9uc2Ugb2YgdGhlIG9wZW4gZmFjZXRcblx0XHRcdFx0QHRyaWdnZXIgXCJlc2NhcGVcIiwgZXZudCwgQF9uZXh0RmFjZXRcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHRpZiBldm50LmtleUNvZGUgaXMgS0VZQ09ERVMuRVNDIG9yIGV2bnQua2V5Q29kZSBpbiBLRVlDT0RFUy5FU0Ncblx0XHRcdFx0QGV4aXQoKVxuXHRcdFx0XHRAdHJpZ2dlciggXCJlc2NhcGVcIiwgZXZudCApXG5cdFx0XHRcdHJldHVyblxuXHRcdFx0cmV0dXJuXG5cdFx0cmV0dXJuXG5cdFxuXHRfbmV4dEZhY2V0OiAoIGV2bnQsIHN1YlZpZXcgKT0+XG5cdFx0X25leHRGbiA9IGlmIGV2bnQ/LnNoaWZ0S2V5IHRoZW4gXCJwcmV2XCIgZWxzZSBcIm5leHRcIlxuXHRcdF9uZXh0ID0gc3ViVmlldy4kZWw/WyBfbmV4dEZuIF0/KClcblx0XHRcblx0XHRpZiBfbmV4dC5oYXNDbGFzcyggXCJhZGQtZmFjZXQtYnRuXCIgKVxuXHRcdFx0ZXZudD8ucHJldmVudERlZmF1bHQoKVxuXHRcdFx0ZXZudD8uc3RvcFByb3BhZ2F0aW9uKClcblx0XHRcdHNldFRpbWVvdXQoID0+XG5cdFx0XHRcdEBhZGRGYWNldCgpXG5cdFx0XHQsIDAgKVxuXHRcdFx0cmV0dXJuXG5cdFx0X25leHRJZCA9IF9uZXh0Py5kYXRhKCBcImZjdGlkXCIgKVxuXHRcdGlmIF9uZXh0SWQ/XG5cdFx0XHRldm50Py5wcmV2ZW50RGVmYXVsdCgpXG5cdFx0XHRzZXRUaW1lb3V0KCA9PlxuXHRcdFx0XHRAZmFjZXRzWyBfbmV4dElkIF0/LnJlb3BlbigpXG5cdFx0XHQsIDAgKVxuXHRcdHJldHVyblxuXHRcdFxuXHRmb2N1c1NlYXJjaDogPT5cblx0XHRpZiBAJHNlYXJjaEJ0bj9cblx0XHRcdEAkc2VhcmNoQnRuLmZvY3VzKClcblx0XHRyZXR1cm5cblx0XHRcblx0X29uU2VhcmNoOiAoIGV2bnQgKT0+XG5cdFx0ZXZudC5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdEBleGl0KClcblx0XHRAdHJpZ2dlciggXCJzZWFyY2hidXR0b25cIiwgQHNlYXJjaEJ1dHRvbi5ldmVudCApXG5cdFx0cmV0dXJuXG5cdFxuXHRfb25Gb2N1c1NlYXJjaDogKCBldm50ICk9PlxuXHRcdGV2bnQuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRAc2VsZWN0dmlldz8uY2xvc2U/KClcblx0XHRyZXR1cm5cblx0XHRcblx0X291dGVyQ2xpY2s6ICggZXZudCApPT5cblx0XHRjbGVhclRpbWVvdXQoIEBUTW9wZW5BZGRGYWNldCApIGlmIEBUTW9wZW5BZGRGYWNldD9cblx0XHRfcG9zV3JwID0gQGVsLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBldm50LnRhcmdldCApXG5cdFx0aWYgbm90ICggX3Bvc1dycCBpcyAwIG9yIF9wb3NXcnAgLSAxNiA+PSAwIClcblx0XHRcdEBleGl0KCBmYWxzZSApXG5cdFx0cmV0dXJuXG5cdFxuXG5tb2R1bGUuZXhwb3J0cyA9IE1haW5WaWV3XG4iLCJLRVlDT0RFUyA9IHJlcXVpcmUoIFwiLi4vdXRpbHMva2V5Y29kZXNcIiApXG5cbmNsYXNzIFNlbGVjdG9yVmlldyBleHRlbmRzIHJlcXVpcmUoIFwiLi9mYWNldHMvYmFzZVwiIClcblx0dGVtcGxhdGU6IHJlcXVpcmUoIFwiLi4vdG1wbHMvc2VsZWN0b3IuamFkZVwiIClcblx0dGVtcGxhdGVFbDogcmVxdWlyZSggXCIuLi90bXBscy9zZWxlY3RvcmxpLmphZGVcIiApXG5cdHNlbGVjdENvdW50OiAxXG5cblx0Y2xhc3NOYW1lOiA9PlxuXHRcdGNscyA9IFsgXCJhZGQtZmFjZXRcIiBdXG5cdFx0aWYgQGN1c3RvbVxuXHRcdFx0Y2xzLnB1c2ggXCJjdXN0b21cIlxuXHRcdHJldHVybiBjbHMuam9pbiggXCIgXCIgKVxuXG5cdGV2ZW50czogPT5cblx0XHRcIm1vdXNlZG93biBhXCI6IFwiX29uQ2xpY2tcIlxuXHRcdFwiZm9jdXMgaW5wdXQjI3tAY2lkfVwiOiBcIm9wZW5cIlxuXHRcdCNcImJsdXIgaW5wdXQjI3tAY2lkfVwiOiBcImNsb3NlXCJcblx0XHRcImtleWRvd24gaW5wdXQjI3tAY2lkfVwiOiBcInNlYXJjaFwiXG5cdFx0XCJrZXl1cCBpbnB1dCMje0BjaWR9XCI6IFwic2VhcmNoXCJcblxuXHRjb25zdHJ1Y3RvcjogKCBvcHRpb25zICktPlxuXHRcdEBjdXN0b20gPSBvcHRpb25zLmN1c3RvbSBvciBmYWxzZVxuXHRcdEBhY3RpdmVJZHggPSAwXG5cdFx0QGN1cnJRdWVyeSA9IFwiXCJcblx0XHRcblx0XHRpZiBvcHRpb25zLm1haW4/XG5cdFx0XHRAbWFpbiA9IG9wdGlvbnMubWFpblxuXHRcdFxuXHRcdHN1cGVyKCBvcHRpb25zIClcblx0XHRyZXR1cm5cblx0XHRcblx0aW5pdGlhbGl6ZTogKCBvcHRpb25zICk9PlxuXHRcdHN1cGVyXG5cdFx0QHNlYXJjaGNvbGwgPSBAY29sbGVjdGlvbi5zdWIoIC0+dHJ1ZSApXG5cdFx0QHJlc3VsdCA9IG5ldyBAY29sbGVjdGlvbi5jb25zdHJ1Y3RvcigpXG5cdFx0XG5cdFx0QGxpc3RlblRvKCBAc2VhcmNoY29sbCwgXCJhZGRcIiwgQHJlbmRlclJlcyApXG5cdFx0QGxpc3RlblRvKCBAc2VhcmNoY29sbCwgXCJyZW1vdmVcIiwgQHJlbmRlclJlcyApXG5cdFx0QGxpc3RlblRvKCBAc2VhcmNoY29sbCwgXCJyZW1vdmVcIiwgQGNoZWNrT3B0aW9uc0VtcHR5IClcblx0XHRcblx0XHRyZXR1cm5cblxuXHRnZXRUZW1wbGF0ZURhdGE6ID0+XG5cdFx0cmV0dXJuIF8uZXh0ZW5kKCBzdXBlciwgY3VzdG9tOiBAY3VzdG9tIClcblxuXHRyZW5kZXI6ID0+XG5cdFx0c3VwZXJcblx0XHRAJGxpc3QgPSBAJGVsLmZpbmQoIFwiIyN7QGNpZH10eXBlbGlzdFwiIClcblx0XHRAcmVuZGVyUmVzKClcblx0XHRyZXR1cm4gQGVsXG5cblx0cmVuZGVyUmVzOiA9PlxuXHRcdEAkbGlzdC5lbXB0eSgpXG5cblx0XHRfbGlzdCA9IFtdXG5cdFx0Zm9yIG1vZGVsLCBpZHggaW4gQHNlYXJjaGNvbGwubW9kZWxzIHdoZW4gbm90IG1vZGVsLmdldCggXCJwaW5uZWRcIiApXG5cdFx0XHRfbGJsID0gbW9kZWwuZ2V0TGFiZWwoKVxuXHRcdFx0X3RtcGwgPSBtb2RlbC5nZXQoIFwibGFiZWx0ZW1wbGF0ZVwiIClcblx0XHRcdGlmIF90bXBsP1xuXHRcdFx0XHRfbGJsID0gX3RtcGwucmVwbGFjZSggXCJ7e2xhYmVsfX1cIiwgX2xibCApXG5cdFx0XHRcdFxuXHRcdFx0X2lkID0gbW9kZWwuaWRcblx0XHRcdF9jc3NjbGFzcyA9IG1vZGVsLmdldCggXCJjc3NjbGFzc1wiIClcblx0XHRcdGlmIEBjdXJyUXVlcnk/Lmxlbmd0aCA+IDFcblx0XHRcdFx0X2xibCA9IF9sYmwucmVwbGFjZSggbmV3IFJlZ0V4cCggQGN1cnJRdWVyeSwgXCJnaVwiICksICgoIHN0ciApLT5yZXR1cm4gXCI8Yj4je3N0cn08L2I+XCIgKSApXG5cdFx0XHRfbGlzdC5wdXNoIGxhYmVsOiBfbGJsLCBpZDogX2lkLCBjc3NjbGFzczogX2Nzc2NsYXNzXG5cdFx0I2lmIF9saXN0Lmxlbmd0aFxuXHRcdEAkbGlzdC5hcHBlbmQoIEB0ZW1wbGF0ZUVsKFxuXHRcdFx0bGlzdDogX2xpc3QsXG5cdFx0XHRxdWVyeTogQGN1cnJRdWVyeSxcblx0XHRcdGFjdGl2ZUlkeDogQGFjdGl2ZUlkeCxcblx0XHRcdGN1c3RvbTogQGN1c3RvbVxuXHRcdCkgKVxuXG5cdFx0QF9jaGVja1Njcm9sbCgpXG5cdFx0XG5cdFx0cmV0dXJuIEAkbGlzdFxuXG5cdF9zY3JvbGxUaWxsOiAxOThcblx0X2NoZWNrU2Nyb2xsOiA9PlxuXHRcdF9oZWlnaHQgPSBAJGxpc3QuaGVpZ2h0KClcblx0XHRpZiBfaGVpZ2h0ID4gMFxuXHRcdFx0QHNjcm9sbEhlbHBlciggX2hlaWdodCApXG5cdFx0XHRyZXR1cm5cblxuXHRcdCMgZXhpdCB0aGUgdGhlIGNhbGwgc3RhY2sgdG8gY2hlY2sgaGVpZ2h0IGFmdGVyIHRoZSBtb2R1bGUgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGRvbVxuXHRcdHNldFRpbWVvdXQoID0+XG5cdFx0XHRAc2Nyb2xsSGVscGVyKCBAJGxpc3QuaGVpZ2h0KCkgKVxuXHRcdCwgMCApXG5cdFx0cmV0dXJuXG5cblx0c2Nyb2xsSGVscGVyOiAoIGhlaWdodCApPT5cblx0XHRpZiBoZWlnaHQgPj0gQF9zY3JvbGxUaWxsXG5cdFx0XHRAc2Nyb2xsaW5nID0gdHJ1ZVxuXHRcdGVsc2Vcblx0XHRcdEBzY3JvbGxpbmcgPSBmYWxzZVxuXHRcdHJldHVyblxuXG5cdGNoZWNrT3B0aW9uc0VtcHR5OiA9PlxuXHRcdCNpZiBAc2VhcmNoY29sbC5sZW5ndGggPD0gMFxuXHRcdCNcdEBjbG9zZSgpXG5cdFx0cmV0dXJuXG5cblx0X29uQ2xpY2s6ICggZXZudCApPT5cblx0XHRldm50LnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0ZXZudC5wcmV2ZW50RGVmYXVsdCgpXG5cblx0XHRfaWQgPSBAJCggZXZudC5jdXJyZW50VGFyZ2V0ICkuZGF0YSggXCJpZFwiIClcblx0XHRpZiBub3QgX2lkP1xuXHRcdFx0cmV0dXJuXG5cdFx0XHRcblx0XHRfbWRsID0gQGNvbGxlY3Rpb24uZ2V0KCBfaWQgKVxuXHRcdGlmIG5vdCBfbWRsP1xuXHRcdFx0cmV0dXJuXG5cdFx0XHRcblx0XHRAc2VsZWN0ZWQoIF9tZGwgKVxuXHRcdHJldHVybiBmYWxzZVxuXHRcblx0X2lzRnVsbDogPT5cblx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFxuXHRfb25UYWJBY3Rpb246ICggZXZudCApPT5cblx0XHRpZiBAbWFpbj9cblx0XHRcdGV2bnQucHJldmVudERlZmF1bHQoKVxuXHRcdFx0ZXZudC5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdFx0QG1haW4uZm9jdXNTZWFyY2goKVxuXHRcdGVsc2Vcblx0XHRcdHN1cGVyKCBldmVudCApXG5cdFx0cmV0dXJuXG5cdFx0XG5cdHNlbGVjdGVkOiAoIG1kbCApPT5cblx0XHRpZiBub3QgQG1haW4/IGFuZCBAX2lzRnVsbCgpXG5cdFx0XHRfaWQgPSBAcmVzdWx0Lmxhc3QoKT8uaWRcblx0XHRcdEBybVJlcyggX2lkIClcblx0XHRcdFxuXHRcdHRyeVxuXHRcdFx0aWYgbWRsLm9ubHlFeGVjP1xuXHRcdFx0XHRtZGw/LmV4ZWM/KClcblx0XHRcdFx0cmV0dXJuXG5cdFx0Y2F0Y2ggX2VyclxuXHRcdFx0dHJ5XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IgXCJJc3N1ZSAjMjM6IENBVENIIC0gQ2xhc3M6I3sgQGNvbnN0cnVjdG9yLm5hbWUgfSAtIGFjdGl2ZUlkeDoje0BhY3RpdmVJZHh9IC0gY29sbGVjdGlvbjoje0pTT04uc3RyaW5naWZ5KCBAY29sbGVjdGlvbi50b0pTT04oKSl9XCJcblx0XHRcdGNhdGNoIF9lcnJlcnJcblx0XHRcdFx0Y29uc29sZS5lcnJvciBcIklzc3VlICMyMzogQ0FUQ0hcIlxuXHRcdFxuXHRcdGlmIG1kbD9cblx0XHRcdEBzZWFyY2hjb2xsLnJlbW92ZSggbWRsIClcblx0XHRcdEByZXN1bHQuYWRkKCBtZGwgKVxuXHRcdFx0QHRyaWdnZXIgXCJzZWxlY3RlZFwiLCBtZGxcblx0XHRcblx0XHRpZiBAX2lzRnVsbCgpXG5cdFx0XHRAY2xvc2UoKVxuXHRcdHJldHVyblxuXG5cdGZvY3VzOiA9PlxuXHRcdEAkaW5wLmZvY3VzKClcblx0XHRfZWwgPSBAJGlucC5nZXQoMClcblx0XHRcblx0XHRfZWwuc2VsZWN0aW9uU3RhcnQgPSBfZWwuc2VsZWN0aW9uRW5kID0gX2VsLnZhbHVlLmxlbmd0aFxuXHRcdHJldHVyblxuXHRcblx0b3BlbjogPT5cblx0XHQjY29uc29sZS5sb2cgXCJzZWxlY3RvciBvcGVuXCJcblx0XHRAdHJpZ2dlciggXCJvcGVuZWRcIiApXG5cdFx0cmV0dXJuIHN1cGVyXG5cblx0c2VhcmNoOiAoIGV2bnQgKT0+XG5cdFx0aWYgZXZudD8udHlwZSBpcyBcImtleWRvd25cIlxuXHRcdFx0c3dpdGNoIGV2bnQua2V5Q29kZVxuXHRcdFx0XHR3aGVuIEtFWUNPREVTLlVQXG5cdFx0XHRcdFx0QG1vdmUoIHRydWUgKVxuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHR3aGVuIEtFWUNPREVTLkRPV05cblx0XHRcdFx0XHRAbW92ZSggZmFsc2UgKVxuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHR3aGVuIEtFWUNPREVTLkVOVEVSXG5cdFx0XHRcdFx0QHNlbGVjdEFjdGl2ZSggdHJ1ZSApXG5cdFx0XHRcdFx0cmV0dXJuXG5cdFx0XHRyZXR1cm5cblx0XHRcblx0XHRpZiBfLmlzU3RyaW5nKCBldm50IClcblx0XHRcdF9xID0gZXZudFxuXHRcdGVsc2Vcblx0XHRcdF9xID0gZXZudC5jdXJyZW50VGFyZ2V0LnZhbHVlLnRvTG93ZXJDYXNlKClcblx0XHRpZiBfcSBpcyBAY3VyclF1ZXJ5XG5cdFx0XHRyZXR1cm5cblxuXHRcdEBjdXJyUXVlcnkgPSBfcVxuXG5cdFx0QHNlYXJjaGNvbGwudXBkYXRlU3ViRmlsdGVyKCAoIG1kbCApPT5cblx0XHRcdGlmIEByZXN1bHQuZ2V0KCBtZGwuaWQgKT9cblx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRpZiBub3QgX3E/Lmxlbmd0aFxuXHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0X21hdGNoID0gbWRsLm1hdGNoKCBfcSApXG5cdFx0XHRyZXR1cm4gX21hdGNoXG5cdFx0LCBmYWxzZSApXG5cblxuXHRcdEBhY3RpdmVJZHggPSAwXG5cdFx0QHJlbmRlclJlcygpXG5cdFx0cmV0dXJuXG5cblx0bW92ZTogKCB1cCA9IGZhbHNlICk9PlxuXHRcdF9saXN0ID0gQCRlbC5maW5kKCBcIi50eXBlbGlzdCBhXCIgKVxuXHRcblx0XHRfY3VzdG9tRWxlbWVudENoYW5nZSA9IGlmIEBjdXJyUXVlcnk/Lmxlbmd0aCB0aGVuIDAgZWxzZSAxXG5cdFx0X3RvcCA9IDBcblx0XHRpZiB1cFxuXHRcdFx0aWYgKCBAYWN0aXZlSWR4IC0gMSApIDwgX3RvcFxuXHRcdFx0XHRyZXR1cm5cblx0XHRcdF9uZXdpZHggPSBAYWN0aXZlSWR4IC0gMVxuXHRcdGVsc2Vcblx0XHRcdGlmIEBzZWFyY2hjb2xsLmxlbmd0aCAtIF9jdXN0b21FbGVtZW50Q2hhbmdlIDw9IEBhY3RpdmVJZHhcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHRfbmV3aWR4ID0gQGFjdGl2ZUlkeCArIDFcblxuXHRcdFxuXHRcdEAkKCBfbGlzdFsgQGFjdGl2ZUlkeCBdICkucmVtb3ZlQ2xhc3MoIFwiYWN0aXZlXCIgKVxuXHRcdF8kZWxuZXcgPSBAJCggX2xpc3RbIF9uZXdpZHggXSApLmFkZENsYXNzKCBcImFjdGl2ZVwiIClcblxuXHRcdGlmIEBzY3JvbGxpbmdcblx0XHRcdF9lbEggPSBfJGVsbmV3Lm91dGVySGVpZ2h0KClcblx0XHRcdF9wb3MgPSBfZWxIICogKCBfbmV3aWR4ICsgMSApXG5cdFx0XHRfJGxpc3QgPSBAJGVsLmZpbmQoIFwiLnR5cGVsaXN0XCIgKVxuXHRcdFx0X3Njcm9sbFQgPSBfJGxpc3Quc2Nyb2xsVG9wKClcblx0XHRcdGlmIF9wb3MgPiBfc2Nyb2xsVCArIEBfc2Nyb2xsVGlsbFxuXHRcdFx0XHRfJGxpc3Quc2Nyb2xsVG9wKCBfcG9zIC0gQF9zY3JvbGxUaWxsIClcblx0XHRcdGVsc2UgaWYgX3BvcyA8IF9zY3JvbGxUICsgX2VsSFxuXHRcdFx0XHRfJGxpc3Quc2Nyb2xsVG9wKCBfcG9zIC0gX2VsSCApXG5cblx0XHRAYWN0aXZlSWR4ID0gX25ld2lkeFxuXHRcdHJldHVyblxuXG5cdHNlbGVjdDo9PlxuXHRcdHJldHVyblxuXG5cdHNlbGVjdEFjdGl2ZTogKCBpc0VudGVyRXZlbnQ9ZmFsc2UgKT0+XG5cdFx0aWYgbm90IEBtYWluPyBhbmQgQF9pc0Z1bGwoKVxuXHRcdFx0X2lkID0gQHJlc3VsdC5sYXN0KCk/LmlkXG5cdFx0XHRAcm1SZXMoIF9pZCApXG5cdFx0XHRcdFxuXHRcdF9zZWwgPSBAJGVsLmZpbmQoIFwiLnR5cGVsaXN0IGEuYWN0aXZlXCIgKS5yZW1vdmVDbGFzcyggXCJhY3RpdmVcIiApLmRhdGEoKVxuXHRcdFx0XG5cdFx0X3NlYXJjaCA9IEAkaW5wLnZhbCgpXG5cdFx0XG5cdFx0aWYgIG5vdCBfc2VsPyBhbmQgQHNlbGVjdENvdW50IGlzbnQgMSBhbmQgaXNFbnRlckV2ZW50IGFuZCBub3QgX3NlYXJjaD8ubGVuZ3RoXG5cdFx0XHRAY2xvc2UoKVxuXHRcdFx0cmV0dXJuXG5cdFx0XHRcblx0XHRpZiBub3QgX3NlbD9cblx0XHRcdHJldHVyblxuXHRcdFxuXHRcdEBhY3RpdmVJZHggPSAwXG5cdFx0aWYgX3NlbD8uaWR4ID49IDAgYW5kIEBzZWFyY2hjb2xsLmxlbmd0aFxuXHRcdFx0QHNlbGVjdGVkKCBAY29sbGVjdGlvbi5nZXQoIF9zZWwuaWQgKSApXG5cdFx0ZWxzZSBpZiBAY3VyclF1ZXJ5Py5sZW5ndGhcblx0XHRcdEBzZWxlY3RlZCggbmV3IEBjb2xsZWN0aW9uLm1vZGVsKCB2YWx1ZTogQGN1cnJRdWVyeSwgY3VzdG9tOiB0cnVlICkgKVxuXHRcdFx0QCRpbnAudmFsKCBcIlwiIClcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm5cblx0XHRyZXR1cm5cblxubW9kdWxlLmV4cG9ydHMgPSBTZWxlY3RvclZpZXdcbiIsImNsYXNzIFZpZXdTdWIgZXh0ZW5kcyBCYWNrYm9uZS5WaWV3XG5cdHRlbXBsYXRlOiByZXF1aXJlKCBcIi4uL3RtcGxzL3N1Yi5qYWRlXCIgKVxuXHRjbGFzc05hbWU6ID0+XG5cdFx0X3N0ZCA9IFwic3ViXCJcblx0XHRfdHlwZSA9IEBtb2RlbC5nZXQoIFwidHlwZVwiIClcblx0XHRpZiBfdHlwZT9cblx0XHRcdF9zdGQgKz0gXCIgc3ViLXR5cGUtXCIgKyBfdHlwZVxuXHRcdFxuXHRcdF9uYW1lID0gQG1vZGVsLmdldCggXCJuYW1lXCIgKVxuXHRcdGlmIF9uYW1lP1xuXHRcdFx0X3N0ZCArPSBcIiBzdWItbmFtZS1cIiArIF9uYW1lXG5cdFx0cmV0dXJuIF9zdGRcblxuXHRpbml0aWFsaXplOiAoIG9wdGlvbnMgKT0+XG5cdFx0QF9pc09wZW4gPSBmYWxzZVxuXHRcdEByZXN1bHQgPSBuZXcgQmFja2JvbmUuQ29sbGVjdGlvbigpXG5cdFx0I0AkZWwub24gXCJjbGlja1wiLCBAcmVvcGVuXG5cdFx0QHBhcmVudCA9IG9wdGlvbnMucGFyZW50XG5cdFx0XG5cdFx0QCRlbC5kYXRhKCBcImZjdGlkXCIsIEBtb2RlbC5pZCApXG5cdFx0XG5cdFx0QHBhcmVudC5vbiBcImVzY2FwZVwiLCAoIGV2bnQsIGNiICk9PlxuXHRcdFx0aWYgQF9pc09wZW5cblx0XHRcdFx0aWYgQHNlbGVjdHZpZXc/Ll9vblRhYkFjdGlvbiggZXZudCApXG5cdFx0XHRcdFx0Y2IoIGV2bnQsIEAgKSBpZiBjYj9cblx0XHRcdHJldHVyblxuXHRcdHJldHVyblxuXG5cdGV2ZW50czpcblx0XHRcIm1vdXNlZG93blwiOiBcInJlb3BlblwiXG5cdFx0XCJtb3VzZWRvd24gLnJtLWZhY2V0LWJ0blwiOiBcImRlbFwiXG5cdFx0XG5cblx0cmVuZGVyOiAoIGluaXRpYWxBZGQgKT0+XG5cdFx0X2xpc3QgPSBbXVxuXHRcdGZvciBtb2RlbCwgaWR4IGluIEByZXN1bHQubW9kZWxzXG5cdFx0XHR0cnlcblx0XHRcdFx0X2xpc3QucHVzaCBtb2RlbC5nZXRMYWJlbCgpXG5cdFx0XHRjYXRjaCBfZXJyXG5cdFx0XHRcdHRyeVxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IgXCJJc3N1ZSAjMjQ6IENBVENIIC0gQ2xhc3M6I3sgQGNvbnN0cnVjdG9yLm5hbWUgfSAtIG1vZGVsOiN7SlNPTi5zdHJpbmdpZnkoQG1vZGVsLnRvSlNPTigpKX0gLSByZXN1bHQ6I3tKU09OLnN0cmluZ2lmeSggQHJlc3VsdC50b0pTT04oKSl9XCJcblx0XHRcdFx0Y2F0Y2ggX2VycmVyclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IgXCJJc3N1ZSAjMjQ6IENBVENIXCJcblx0XHRcblx0XHRAJGVsLmh0bWwgQHRlbXBsYXRlXG5cdFx0XHRsYWJlbDogQG1vZGVsLmdldExhYmVsKClcblx0XHRcdHNlbGVjdGVkOiBfbGlzdFxuXHRcdFx0dHlwZTogQG1vZGVsLmdldCggXCJ0eXBlXCIgKVxuXHRcdFx0bmFtZTogQG1vZGVsLmdldCggXCJuYW1lXCIgKVxuXHRcdFx0cGlubmVkOiBAbW9kZWwuZ2V0KCBcInBpbm5lZFwiICkgb3IgZmFsc2Vcblx0XHRcdFx0XG5cdFx0QCRzdWIgPSBAJCggXCIuc3Vic2VsZWN0XCIgKVxuXHRcdEAkcmVzdWx0cyA9IEAkKCBcIi5zdWJyZXN1bHRzXCIgKVxuXG5cdFx0QGdlbmVyYXRlU3ViKCBpbml0aWFsQWRkIClcblx0XHRyZXR1cm4gQGVsXG5cdFxuXHRyZW9wZW46ICggZXZudCApPT5cblx0XHRpZiBAX2lzT3BlblxuXHRcdFx0cmV0dXJuXG5cdFx0aWYgZXZudD8gYW5kICQoIGV2bnQudGFyZ2V0ICkuaXMoIFwiLnJtLXJlc3VsdC1idG5cIiApIGFuZCBAc2VsZWN0dmlldz8ucm1SZXM/XG5cdFx0XHRAc2VsZWN0dmlldy5ybVJlcyggZXZudCApXG5cdFx0XHRldm50LnByZXZlbnREZWZhdWx0KClcblx0XHRcdGV2bnQuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRcdHJldHVyblxuXHRcdFx0XG5cdFx0aWYgZXZudD8gYW5kICQoIGV2bnQudGFyZ2V0ICkuaXMoIFwiLmVkaXQtcmVzdWx0LWJ0blwiICkgYW5kIEBzZWxlY3R2aWV3Py5lZGl0UmVzP1xuXHRcdFx0QHNlbGVjdHZpZXcuZWRpdFJlcyggZXZudCApXG5cdFx0XHRldm50LnByZXZlbnREZWZhdWx0KClcblx0XHRcdGV2bnQuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRcdHJldHVyblxuXHRcdFx0XG5cdFx0aWYgbm90IEBfaXNPcGVuIGFuZCBAc2VsZWN0dmlldz9cblx0XHRcdEBzZWxlY3R2aWV3LnJlb3BlbiggQCApXG5cdFx0ZXZudD8ucHJldmVudERlZmF1bHQoKVxuXHRcdGV2bnQ/LnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0QHRyaWdnZXIoIFwicmVvcGVuXCIgKVxuXHRcdHJldHVyblxuXHRcdFxuXHRkZWw6ICggZXZudCApPT5cblx0XHRpZiBAbW9kZWwuZ2V0KCBcInBpbm5lZFwiIClcblx0XHRcdHJldHVyblxuXHRcdFx0XG5cdFx0ZXZudD8uc3RvcFByb3BhZ2F0aW9uKClcblx0XHRldm50Py5wcmV2ZW50RGVmYXVsdCgpXG5cdFx0QGNvbGxlY3Rpb24udHJpZ2dlciggXCJpZ2d5OnJlbVwiLCBAbW9kZWwgKVxuXHRcdEBjb2xsZWN0aW9uLmFkZCggQG1vZGVsIClcblx0XHRAcmVtb3ZlKClcblx0XHRAdHJpZ2dlciggXCJjbG9zZWRcIiApXG5cdFx0cmV0dXJuIGZhbHNlXG5cblx0cmVtb3ZlOiA9PlxuXHRcdEBfaXNPcGVuID0gZmFsc2Vcblx0XHRAc2VsZWN0dmlldz8ucmVtb3ZlKClcblx0XHRAcGFyZW50ID0gbnVsbFxuXHRcdHJldHVybiBzdXBlclxuXG5cdHNlbGVjdGVkOiAoIG9wdE1kbCwgZXZudCApPT5cblx0XHRAcmVzdWx0LmFkZCggb3B0TWRsLCB7IG1lcmdlOiB0cnVlIH0gKVxuXHRcdEByZW5kZXJSZXN1bHQoKVxuXHRcdEB0cmlnZ2VyKCBcInNlbGVjdGVkXCIsIEBtb2RlbCwgQHNlbGVjdHZpZXcuZ2V0UmVzdWx0cygpLCBldm50IClcblx0XHRyZXR1cm5cblx0XG5cdHJlbW92ZWQ6ICggb3B0TWRsLCBldm50ICApPT5cblx0XHRAcmVzdWx0LnJlbW92ZSggb3B0TWRsIClcblx0XHRAcmVuZGVyUmVzdWx0KClcblx0XHRAdHJpZ2dlciggXCJzZWxlY3RlZFwiLCBAbW9kZWwsIEBzZWxlY3R2aWV3LmdldFJlc3VsdHMoKSwgZXZudCApXG5cdFx0XG5cdFx0IyByZW1vdmUgZmFjZXQgaWYgY29udGVudCBsZW5ndGggb3IgdGhlIGZhY2V0IGlzIGluIGVkaXRNb2RlXG5cdFx0aWYgQHJlc3VsdC5sZW5ndGggPD0gMCBhbmQgbm90IEBzZWxlY3R2aWV3LmVkaXRNb2RlXG5cdFx0XHRAZGVsKClcblx0XHRyZXR1cm5cblxuXHRyZW5kZXJSZXN1bHQ6ID0+XG5cdFx0QCRyZXN1bHRzLmh0bWwoIEBzZWxlY3R2aWV3LnJlbmRlclJlc3VsdCgpIClcblx0XHRyZXR1cm5cblxuXHRpc09wZW46ID0+XG5cdFx0cmV0dXJuIEBzZWxlY3R2aWV3P1xuXG5cdGZvY3VzOiA9PlxuXHRcdGlmIEBzZWxlY3R2aWV3P1xuXHRcdFx0QHNlbGVjdHZpZXc/LmZvY3VzKClcblx0XHRcdHJldHVyblxuXHRcdEBvcGVuKClcblx0XHRyZXR1cm5cblxuXHRjbG9zZTogPT5cblx0XHRAX2lzT3BlbiA9IGZhbHNlXG5cdFx0aWYgQHNlbGVjdHZpZXc/XG5cdFx0XHRAc2VsZWN0dmlldz8ub2ZmKClcblx0XHRcdEBzZWxlY3R2aWV3Py5jbG9zZSgpXG5cdFx0XHRyZXR1cm5cblx0XHRyZXR1cm5cblxuXHRnZW5lcmF0ZVN1YjogKCBpbml0aWFsQWRkICk9PlxuXHRcdGlmIEBzZWxlY3R2aWV3P1xuXHRcdFx0QGF0dGFjaFN1YkV2ZW50cygpXG5cdFx0XHRyZXR1cm4gQHNlbGVjdHZpZXdcblx0XHRcdFxuXHRcdEBzZWxlY3R2aWV3ID0gbmV3IEBtb2RlbC5TdWJWaWV3KCBzdWI6IEAsIG1vZGVsOiBAbW9kZWwsIGVsOiBAJHN1YiApXG5cdFx0QGF0dGFjaFN1YkV2ZW50cygpXG5cdFx0XHRcblx0XHRAJGVsLmFwcGVuZCggQHNlbGVjdHZpZXcucmVuZGVyKCBpbml0aWFsQWRkICkgKVxuXHRcdGlmIEBtb2RlbD8uZ2V0KCBcInZhbHVlXCIgKT9cblx0XHRcdEBzZWxlY3R2aWV3LnNlbGVjdCgpXG5cdFx0cmV0dXJuXG5cdFx0XG5cdGF0dGFjaFN1YkV2ZW50czogPT5cblx0XHRpZiBub3QgQHNlbGVjdHZpZXcuc3ViRXZlbnRzQXR0YWNoZWRcblx0XHRcdEBzZWxlY3R2aWV3Lm9uIFwiY2xvc2VkXCIsICggcmVzdWx0LCBldm50ICk9PlxuXHRcdFx0XHRAX2lzT3BlbiA9IGZhbHNlXG5cdFx0XHRcdGlmIEBtb2RlbC5nZXQoIFwicGlubmVkXCIgKVxuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHQjQHNlbGVjdHZpZXcub2ZmKClcblx0XHRcdFx0QHNlbGVjdHZpZXcucmVtb3ZlKCkgaWYgbm90IHJlc3VsdC5sZW5ndGhcblx0XHRcdFx0I0BzZWxlY3R2aWV3ID0gbnVsbFxuXHRcdFx0XHRAdHJpZ2dlciggXCJjbG9zZWRcIiwgcmVzdWx0LCBldm50IClcblx0XHRcdFx0QHJlbW92ZSgpIGlmIG5vdCByZXN1bHQubGVuZ3RoXG5cdFx0XHRcdHJldHVyblxuXG5cdFx0XHRAc2VsZWN0dmlldy5vbiBcInNlbGVjdGVkXCIsICggbWRsLCBldm50ICk9PlxuXHRcdFx0XHRpZiBtZGxcblx0XHRcdFx0XHRAc2VsZWN0ZWQoIG1kbCwgZXZudCApXG5cdFx0XHRcdHJldHVyblxuXHRcdFx0XG5cdFx0XHRAc2VsZWN0dmlldy5vbiBcInJlbW92ZWRcIiwgKCBtZGwgKT0+XG5cdFx0XHRcdGlmIG1kbFxuXHRcdFx0XHRcdEByZW1vdmVkKCBtZGwgKVxuXHRcdFx0XHRyZXR1cm5cblx0XHRcdFxuXHRcdFx0QHNlbGVjdHZpZXcuc3ViRXZlbnRzQXR0YWNoZWQgPSB0cnVlXG5cdFx0cmV0dXJuXG5cdFxuXHRpc1Jlc3VsdEVtcHR5OiAoIGlucCApPT5cblx0XHRpZiBAc2VsZWN0dmlldz9cblx0XHRcdHJldHVybiBAc2VsZWN0dmlldy5pc1Jlc3VsdEVtcHR5KCBpbnAgKVxuXHRcdHJldHVybiB0cnVlXG5cdFx0XG5cdG9wZW46ID0+XG5cdFx0QGdlbmVyYXRlU3ViKClcblxuXHRcdEBzZWxlY3R2aWV3Py5mb2N1cygpXG5cdFx0QF9pc09wZW4gPSB0cnVlXG5cdFx0XG5cdFx0IyBAcGFyZW50LnN1YnZpZXcgPSBAXG5cdFx0IyBAcGFyZW50LnNlbGVjdHZpZXcgPSBAc2VsZWN0dmlld1xuXHRcdHJldHVyblxuXG5tb2R1bGUuZXhwb3J0cyA9IFZpZXdTdWJcbiIsIiIsIihmdW5jdGlvbihmKXtpZih0eXBlb2YgZXhwb3J0cz09PVwib2JqZWN0XCImJnR5cGVvZiBtb2R1bGUhPT1cInVuZGVmaW5lZFwiKXttb2R1bGUuZXhwb3J0cz1mKCl9ZWxzZSBpZih0eXBlb2YgZGVmaW5lPT09XCJmdW5jdGlvblwiJiZkZWZpbmUuYW1kKXtkZWZpbmUoW10sZil9ZWxzZXt2YXIgZztpZih0eXBlb2Ygd2luZG93IT09XCJ1bmRlZmluZWRcIil7Zz13aW5kb3d9ZWxzZSBpZih0eXBlb2YgZ2xvYmFsIT09XCJ1bmRlZmluZWRcIil7Zz1nbG9iYWx9ZWxzZSBpZih0eXBlb2Ygc2VsZiE9PVwidW5kZWZpbmVkXCIpe2c9c2VsZn1lbHNle2c9dGhpc31nLmphZGUgPSBmKCl9fSkoZnVuY3Rpb24oKXt2YXIgZGVmaW5lLG1vZHVsZSxleHBvcnRzO3JldHVybiAoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSh7MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogTWVyZ2UgdHdvIGF0dHJpYnV0ZSBvYmplY3RzIGdpdmluZyBwcmVjZWRlbmNlXG4gKiB0byB2YWx1ZXMgaW4gb2JqZWN0IGBiYC4gQ2xhc3NlcyBhcmUgc3BlY2lhbC1jYXNlZFxuICogYWxsb3dpbmcgZm9yIGFycmF5cyBhbmQgbWVyZ2luZy9qb2luaW5nIGFwcHJvcHJpYXRlbHlcbiAqIHJlc3VsdGluZyBpbiBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYVxuICogQHBhcmFtIHtPYmplY3R9IGJcbiAqIEByZXR1cm4ge09iamVjdH0gYVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5tZXJnZSA9IGZ1bmN0aW9uIG1lcmdlKGEsIGIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICB2YXIgYXR0cnMgPSBhWzBdO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgYXR0cnMgPSBtZXJnZShhdHRycywgYVtpXSk7XG4gICAgfVxuICAgIHJldHVybiBhdHRycztcbiAgfVxuICB2YXIgYWMgPSBhWydjbGFzcyddO1xuICB2YXIgYmMgPSBiWydjbGFzcyddO1xuXG4gIGlmIChhYyB8fCBiYykge1xuICAgIGFjID0gYWMgfHwgW107XG4gICAgYmMgPSBiYyB8fCBbXTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYWMpKSBhYyA9IFthY107XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGJjKSkgYmMgPSBbYmNdO1xuICAgIGFbJ2NsYXNzJ10gPSBhYy5jb25jYXQoYmMpLmZpbHRlcihudWxscyk7XG4gIH1cblxuICBmb3IgKHZhciBrZXkgaW4gYikge1xuICAgIGlmIChrZXkgIT0gJ2NsYXNzJykge1xuICAgICAgYVtrZXldID0gYltrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhO1xufTtcblxuLyoqXG4gKiBGaWx0ZXIgbnVsbCBgdmFsYHMuXG4gKlxuICogQHBhcmFtIHsqfSB2YWxcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBudWxscyh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPSBudWxsICYmIHZhbCAhPT0gJyc7XG59XG5cbi8qKlxuICogam9pbiBhcnJheSBhcyBjbGFzc2VzLlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmV4cG9ydHMuam9pbkNsYXNzZXMgPSBqb2luQ2xhc3NlcztcbmZ1bmN0aW9uIGpvaW5DbGFzc2VzKHZhbCkge1xuICByZXR1cm4gKEFycmF5LmlzQXJyYXkodmFsKSA/IHZhbC5tYXAoam9pbkNsYXNzZXMpIDpcbiAgICAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSA/IE9iamVjdC5rZXlzKHZhbCkuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIHZhbFtrZXldOyB9KSA6XG4gICAgW3ZhbF0pLmZpbHRlcihudWxscykuam9pbignICcpO1xufVxuXG4vKipcbiAqIFJlbmRlciB0aGUgZ2l2ZW4gY2xhc3Nlcy5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBjbGFzc2VzXG4gKiBAcGFyYW0ge0FycmF5LjxCb29sZWFuPn0gZXNjYXBlZFxuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5leHBvcnRzLmNscyA9IGZ1bmN0aW9uIGNscyhjbGFzc2VzLCBlc2NhcGVkKSB7XG4gIHZhciBidWYgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGVzY2FwZWQgJiYgZXNjYXBlZFtpXSkge1xuICAgICAgYnVmLnB1c2goZXhwb3J0cy5lc2NhcGUoam9pbkNsYXNzZXMoW2NsYXNzZXNbaV1dKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBidWYucHVzaChqb2luQ2xhc3NlcyhjbGFzc2VzW2ldKSk7XG4gICAgfVxuICB9XG4gIHZhciB0ZXh0ID0gam9pbkNsYXNzZXMoYnVmKTtcbiAgaWYgKHRleHQubGVuZ3RoKSB7XG4gICAgcmV0dXJuICcgY2xhc3M9XCInICsgdGV4dCArICdcIic7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5cbmV4cG9ydHMuc3R5bGUgPSBmdW5jdGlvbiAodmFsKSB7XG4gIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModmFsKS5tYXAoZnVuY3Rpb24gKHN0eWxlKSB7XG4gICAgICByZXR1cm4gc3R5bGUgKyAnOicgKyB2YWxbc3R5bGVdO1xuICAgIH0pLmpvaW4oJzsnKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG59O1xuLyoqXG4gKiBSZW5kZXIgdGhlIGdpdmVuIGF0dHJpYnV0ZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGVzY2FwZWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gdGVyc2VcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZXhwb3J0cy5hdHRyID0gZnVuY3Rpb24gYXR0cihrZXksIHZhbCwgZXNjYXBlZCwgdGVyc2UpIHtcbiAgaWYgKGtleSA9PT0gJ3N0eWxlJykge1xuICAgIHZhbCA9IGV4cG9ydHMuc3R5bGUodmFsKTtcbiAgfVxuICBpZiAoJ2Jvb2xlYW4nID09IHR5cGVvZiB2YWwgfHwgbnVsbCA9PSB2YWwpIHtcbiAgICBpZiAodmFsKSB7XG4gICAgICByZXR1cm4gJyAnICsgKHRlcnNlID8ga2V5IDoga2V5ICsgJz1cIicgKyBrZXkgKyAnXCInKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfSBlbHNlIGlmICgwID09IGtleS5pbmRleE9mKCdkYXRhJykgJiYgJ3N0cmluZycgIT0gdHlwZW9mIHZhbCkge1xuICAgIGlmIChKU09OLnN0cmluZ2lmeSh2YWwpLmluZGV4T2YoJyYnKSAhPT0gLTEpIHtcbiAgICAgIGNvbnNvbGUud2FybignU2luY2UgSmFkZSAyLjAuMCwgYW1wZXJzYW5kcyAoYCZgKSBpbiBkYXRhIGF0dHJpYnV0ZXMgJyArXG4gICAgICAgICAgICAgICAgICAgJ3dpbGwgYmUgZXNjYXBlZCB0byBgJmFtcDtgJyk7XG4gICAgfTtcbiAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwudG9JU09TdHJpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2FybignSmFkZSB3aWxsIGVsaW1pbmF0ZSB0aGUgZG91YmxlIHF1b3RlcyBhcm91bmQgZGF0ZXMgaW4gJyArXG4gICAgICAgICAgICAgICAgICAgJ0lTTyBmb3JtIGFmdGVyIDIuMC4wJyk7XG4gICAgfVxuICAgIHJldHVybiAnICcgKyBrZXkgKyBcIj0nXCIgKyBKU09OLnN0cmluZ2lmeSh2YWwpLnJlcGxhY2UoLycvZywgJyZhcG9zOycpICsgXCInXCI7XG4gIH0gZWxzZSBpZiAoZXNjYXBlZCkge1xuICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbC50b0lTT1N0cmluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKCdKYWRlIHdpbGwgc3RyaW5naWZ5IGRhdGVzIGluIElTTyBmb3JtIGFmdGVyIDIuMC4wJyk7XG4gICAgfVxuICAgIHJldHVybiAnICcgKyBrZXkgKyAnPVwiJyArIGV4cG9ydHMuZXNjYXBlKHZhbCkgKyAnXCInO1xuICB9IGVsc2Uge1xuICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbC50b0lTT1N0cmluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKCdKYWRlIHdpbGwgc3RyaW5naWZ5IGRhdGVzIGluIElTTyBmb3JtIGFmdGVyIDIuMC4wJyk7XG4gICAgfVxuICAgIHJldHVybiAnICcgKyBrZXkgKyAnPVwiJyArIHZhbCArICdcIic7XG4gIH1cbn07XG5cbi8qKlxuICogUmVuZGVyIHRoZSBnaXZlbiBhdHRyaWJ1dGVzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0ge09iamVjdH0gZXNjYXBlZFxuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5leHBvcnRzLmF0dHJzID0gZnVuY3Rpb24gYXR0cnMob2JqLCB0ZXJzZSl7XG4gIHZhciBidWYgPSBbXTtcblxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG5cbiAgaWYgKGtleXMubGVuZ3RoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXVxuICAgICAgICAsIHZhbCA9IG9ialtrZXldO1xuXG4gICAgICBpZiAoJ2NsYXNzJyA9PSBrZXkpIHtcbiAgICAgICAgaWYgKHZhbCA9IGpvaW5DbGFzc2VzKHZhbCkpIHtcbiAgICAgICAgICBidWYucHVzaCgnICcgKyBrZXkgKyAnPVwiJyArIHZhbCArICdcIicpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWYucHVzaChleHBvcnRzLmF0dHIoa2V5LCB2YWwsIGZhbHNlLCB0ZXJzZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBidWYuam9pbignJyk7XG59O1xuXG4vKipcbiAqIEVzY2FwZSB0aGUgZ2l2ZW4gc3RyaW5nIG9mIGBodG1sYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaHRtbFxuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxudmFyIGphZGVfZW5jb2RlX2h0bWxfcnVsZXMgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7J1xufTtcbnZhciBqYWRlX21hdGNoX2h0bWwgPSAvWyY8PlwiXS9nO1xuXG5mdW5jdGlvbiBqYWRlX2VuY29kZV9jaGFyKGMpIHtcbiAgcmV0dXJuIGphZGVfZW5jb2RlX2h0bWxfcnVsZXNbY10gfHwgYztcbn1cblxuZXhwb3J0cy5lc2NhcGUgPSBqYWRlX2VzY2FwZTtcbmZ1bmN0aW9uIGphZGVfZXNjYXBlKGh0bWwpe1xuICB2YXIgcmVzdWx0ID0gU3RyaW5nKGh0bWwpLnJlcGxhY2UoamFkZV9tYXRjaF9odG1sLCBqYWRlX2VuY29kZV9jaGFyKTtcbiAgaWYgKHJlc3VsdCA9PT0gJycgKyBodG1sKSByZXR1cm4gaHRtbDtcbiAgZWxzZSByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBSZS10aHJvdyB0aGUgZ2l2ZW4gYGVycmAgaW4gY29udGV4dCB0byB0aGVcbiAqIHRoZSBqYWRlIGluIGBmaWxlbmFtZWAgYXQgdGhlIGdpdmVuIGBsaW5lbm9gLlxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVyclxuICogQHBhcmFtIHtTdHJpbmd9IGZpbGVuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gbGluZW5vXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLnJldGhyb3cgPSBmdW5jdGlvbiByZXRocm93KGVyciwgZmlsZW5hbWUsIGxpbmVubywgc3RyKXtcbiAgaWYgKCEoZXJyIGluc3RhbmNlb2YgRXJyb3IpKSB0aHJvdyBlcnI7XG4gIGlmICgodHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyB8fCAhZmlsZW5hbWUpICYmICFzdHIpIHtcbiAgICBlcnIubWVzc2FnZSArPSAnIG9uIGxpbmUgJyArIGxpbmVubztcbiAgICB0aHJvdyBlcnI7XG4gIH1cbiAgdHJ5IHtcbiAgICBzdHIgPSBzdHIgfHwgcmVxdWlyZSgnZnMnKS5yZWFkRmlsZVN5bmMoZmlsZW5hbWUsICd1dGY4JylcbiAgfSBjYXRjaCAoZXgpIHtcbiAgICByZXRocm93KGVyciwgbnVsbCwgbGluZW5vKVxuICB9XG4gIHZhciBjb250ZXh0ID0gM1xuICAgICwgbGluZXMgPSBzdHIuc3BsaXQoJ1xcbicpXG4gICAgLCBzdGFydCA9IE1hdGgubWF4KGxpbmVubyAtIGNvbnRleHQsIDApXG4gICAgLCBlbmQgPSBNYXRoLm1pbihsaW5lcy5sZW5ndGgsIGxpbmVubyArIGNvbnRleHQpO1xuXG4gIC8vIEVycm9yIGNvbnRleHRcbiAgdmFyIGNvbnRleHQgPSBsaW5lcy5zbGljZShzdGFydCwgZW5kKS5tYXAoZnVuY3Rpb24obGluZSwgaSl7XG4gICAgdmFyIGN1cnIgPSBpICsgc3RhcnQgKyAxO1xuICAgIHJldHVybiAoY3VyciA9PSBsaW5lbm8gPyAnICA+ICcgOiAnICAgICcpXG4gICAgICArIGN1cnJcbiAgICAgICsgJ3wgJ1xuICAgICAgKyBsaW5lO1xuICB9KS5qb2luKCdcXG4nKTtcblxuICAvLyBBbHRlciBleGNlcHRpb24gbWVzc2FnZVxuICBlcnIucGF0aCA9IGZpbGVuYW1lO1xuICBlcnIubWVzc2FnZSA9IChmaWxlbmFtZSB8fCAnSmFkZScpICsgJzonICsgbGluZW5vXG4gICAgKyAnXFxuJyArIGNvbnRleHQgKyAnXFxuXFxuJyArIGVyci5tZXNzYWdlO1xuICB0aHJvdyBlcnI7XG59O1xuXG5leHBvcnRzLkRlYnVnSXRlbSA9IGZ1bmN0aW9uIERlYnVnSXRlbShsaW5lbm8sIGZpbGVuYW1lKSB7XG4gIHRoaXMubGluZW5vID0gbGluZW5vO1xuICB0aGlzLmZpbGVuYW1lID0gZmlsZW5hbWU7XG59XG5cbn0se1wiZnNcIjoyfV0sMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG5cbn0se31dfSx7fSxbMV0pKDEpXG59KTsiLCIoZnVuY3Rpb24oKSB7XG4gIHZhciBfZ2V0S2V5LCBpc0FycmF5LCB0b1N0cmluZztcblxuICB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG4gIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uKGFycikge1xuICAgIHJldHVybiB0b1N0cmluZy5jYWxsKGFycikgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gIH07XG5cbiAgX2dldEtleSA9IGZ1bmN0aW9uKGVsLCBrZXkpIHtcbiAgICByZXR1cm4gZWxba2V5XTtcbiAgfTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleXMsIGZvcndhcmQsIGdldEtleSkge1xuICAgIHZhciBmbnNvcnQsIHJlZjtcbiAgICBpZiAoZm9yd2FyZCA9PSBudWxsKSB7XG4gICAgICBmb3J3YXJkID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGdldEtleSA9PSBudWxsKSB7XG4gICAgICBnZXRLZXkgPSBfZ2V0S2V5O1xuICAgIH1cbiAgICBpZiAoIWlzQXJyYXkoa2V5cykpIHtcbiAgICAgIGtleXMgPSBba2V5c107XG4gICAgfVxuICAgIGZuc29ydCA9IGZ1bmN0aW9uKGZvcndhcmQsIGtleSwgbmV4dGtleXMpIHtcbiAgICAgIHZhciBfZndyZCwgX2ssIG5leHRTb3J0LCByZWY7XG4gICAgICBpZiAobmV4dGtleXMgIT0gbnVsbCA/IG5leHRrZXlzLmxlbmd0aCA6IHZvaWQgMCkge1xuICAgICAgICBfayA9IChyZWYgPSBuZXh0a2V5cy5zcGxpY2UoMCwgMSkpICE9IG51bGwgPyByZWZbMF0gOiB2b2lkIDA7XG4gICAgICAgIGlmIChfayAhPSBudWxsKSB7XG4gICAgICAgICAgbmV4dFNvcnQgPSBmbnNvcnQoZm9yd2FyZCwgX2ssIG5leHRrZXlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgX2Z3cmQgPSAoZm9yd2FyZFtrZXldICE9IG51bGwgPyBmb3J3YXJkW2tleV0gOiAoZm9yd2FyZFtcIj9cIl0gIT0gbnVsbCA/IGZvcndhcmRbXCI/XCJdIDogZm9yd2FyZCkpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKGVsQSwgZWxCKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIF9hID0gZ2V0S2V5KGVsQSwga2V5KTtcbiAgICAgICAgX2IgPSBnZXRLZXkoZWxCLCBrZXkpO1xuICAgICAgICBpZiAoX2EgPCBfYikge1xuICAgICAgICAgIGlmIChfZndyZCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoX2EgPiBfYikge1xuICAgICAgICAgIGlmIChfZndyZCkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoX2EgPT09IF9iKSB7XG4gICAgICAgICAgaWYgKG5leHRTb3J0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0U29ydChlbEEsIGVsQik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiBmbnNvcnQoZm9yd2FyZCwgKHJlZiA9IGtleXMuc3BsaWNlKDAsIDEpKSAhPSBudWxsID8gcmVmWzBdIDogdm9pZCAwLCBrZXlzKTtcbiAgfTtcblxufSkuY2FsbCh0aGlzKTtcbiJdfQ==