!function(){var a="window"in this?window:global,b=-1,c=1;while(c>0)c|=1<<++b;var d=1<1&&f[f.length-1]instanceof Object)h=g(f.pop(),e);else h=e;if(!Array.isArray(a)&&!(a instanceof Object))a=f;var i={a:{},b:{},c:{},d:{},e:{},f:{},keys:[],values:[],length:0,g:h};Object.defineProperty(this,"_",{value:i});if(Array.isArray(a)){i.length=a.length;for(var j=1,k=0,l=a.length;kb)throw Error("An enum can contain a maximum of "+b+" items in this environment.")}Object.defineProperties(Enum.prototype,{h:{value:function(a){if(this._.g.single&&!f(a))throw Error("This enum allows only one single choice.")}},valueOf:{value:function(a){this.h(a);return i(this._.a,this.length,a)}},keyOf:{value:function(a){this.h(a);return i(this._.c,this.length,a)}},valuesOf:{value:function(a){this.h(a);return j(this._.a,this.length,a)}},keysOf:{value:function(a){this.h(a);return j(this._.c,this.length,a)}},valueByKey:{value:function(a){if(this._.g.ignoreCase)a=a.toLowerCase();return this._.e[a]}},valuesByKeys:{value:function(a){if(!Array.isArray(a))a=Array.prototype.slice.call(arguments);if(this._.g.ignoreCase)a=a.map(function(a){return a.toLowerCase()});return h(this._.e,a)}},keyByValue:{value:function(a){return this._.f[a]}},keysByValues:{value:function(a){if(!Array.isArray(a))a=Array.prototype.slice.call(arguments);return h(this._.f,a)}},fromValue:{value:function(a){return this._.b[a]}},fromValues:{value:function(a){var b=a,c=0,d=this._.b;if(!Array.isArray(b))b=Array.prototype.slice.call(arguments);for(var e=0,f=b.length;e