From f6fed5efc90fb96f3989727e27498166dc75467a Mon Sep 17 00:00:00 2001 From: Rob Dingwell Date: Wed, 14 Aug 2019 10:59:26 -0400 Subject: [PATCH 1/9] [WIP] externalizing fhir-mapper configuration --- public/config.js | 5 +++-- public/index.html | 1 + public/static/js/fhir-mapper/app.bundle.js | 14 ++++++++++++++ public/static/js/fhir-mapper/app.bundle.js.map | 1 + .../McodeV05SmartOnFhirDataSource.test.js | 2 +- .../GenericSmartOnFhirDstu2DataSource.jsx | 6 +++--- yarn.lock | 6 +++--- 7 files changed, 26 insertions(+), 9 deletions(-) create mode 100644 public/static/js/fhir-mapper/app.bundle.js create mode 100644 public/static/js/fhir-mapper/app.bundle.js.map diff --git a/public/config.js b/public/config.js index 31ac7e9823..0d2ad256a2 100644 --- a/public/config.js +++ b/public/config.js @@ -30,8 +30,9 @@ CONFIG = { display: 'Compass™', app: "SmartCompassApp", isExact: true, - dataSource: 'McodeV05SmartOnFhirDataSource', + dataSource: 'GenericSmartOnFhirDstu2DataSource', dataSourceProps: { + mapper: null, resourceTypes: ['Patient', 'Condition', 'Encounter', 'MedicationOrder', 'Observation', 'Organization', 'Practitioner', 'Procedure'] }, logoObject: { @@ -96,7 +97,7 @@ CONFIG = { dataSource: 'GenericSmartOnFhirDstu2DataSource', shortcuts: [], dataSourceProps: { - mapper: 'syntheaToV05' + mapper: Mapper.mappers['syntheaToV05'] } }, { diff --git a/public/index.html b/public/index.html index 78370c96c0..12a5f8c875 100644 --- a/public/index.html +++ b/public/index.html @@ -13,6 +13,7 @@ return window.fluxnotes_app.receive_command(name,data); } + diff --git a/public/static/js/fhir-mapper/app.bundle.js b/public/static/js/fhir-mapper/app.bundle.js new file mode 100644 index 0000000000..10ac296f9f --- /dev/null +++ b/public/static/js/fhir-mapper/app.bundle.js @@ -0,0 +1,14 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Mapper=e():t.Mapper=e()}(window,function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=40)}([function(t,e){function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function r(t){return"["+t.join(", ")+"]"}function i(t,e){return t.equals(e)}function o(t){return t.hashCode()}function s(t,e){return this.data={},this.hashFunction=t||o,this.equalsFunction=e||i,this}function u(){return this.data=[],this}function a(t,e){return this.data={},this.hashFunction=t||o,this.equalsFunction=e||i,this}function c(){return this.data={},this}function l(){return this}function p(){return this.count=0,this.hash=0,this}String.prototype.seed=String.prototype.seed||Math.round(Math.random()*Math.pow(2,32)),String.prototype.hashCode=function(){var t,e,n,r,i,o,s,u,a=this.toString();for(t=3&a.length,e=a.length-t,n=String.prototype.seed,i=3432918353,o=461845907,u=0;u>>16)*i&65535)<<16)&4294967295)<<15|s>>>17))*o+(((s>>>16)*o&65535)<<16)&4294967295)<<13|n>>>19))+((5*(n>>>16)&65535)<<16)&4294967295))+((58964+(r>>>16)&65535)<<16);switch(s=0,t){case 3:s^=(255&a.charCodeAt(u+2))<<16;case 2:s^=(255&a.charCodeAt(u+1))<<8;case 1:n^=s=(65535&(s=(s=(65535&(s^=255&a.charCodeAt(u)))*i+(((s>>>16)*i&65535)<<16)&4294967295)<<15|s>>>17))*o+(((s>>>16)*o&65535)<<16)&4294967295}return n^=a.length,n=2246822507*(65535&(n^=n>>>16))+((2246822507*(n>>>16)&65535)<<16)&4294967295,n=3266489909*(65535&(n^=n>>>13))+((3266489909*(n>>>16)&65535)<<16)&4294967295,(n^=n>>>16)>>>0},Object.defineProperty(s.prototype,"length",{get:function(){var t=0;for(var e in this.data)0===e.indexOf("hash_")&&(t+=this.data[e].length);return t}}),s.prototype.add=function(t){var e="hash_"+this.hashFunction(t);if(e in this.data){for(var n=this.data[e],r=0;r>>17,r*=461845907,this.count=this.count+1;var i=this.hash^r;i=5*(i=i<<13|i>>>19)+3864292196,this.hash=i}}},p.prototype.finish=function(){var t=this.hash^4*this.count;return t^=t>>>16,t*=2246822507,t^=t>>>13,t*=3266489909,t^=t>>>16},l.prototype.get=function(t,e){var n=this[t]||null;return null===n?null:n[e]||null},l.prototype.set=function(t,e,n){var r=this[t]||null;null===r&&(r={},this[t]=r),r[e]=n},e.Hash=p,e.Set=s,e.Map=a,e.BitSet=u,e.AltDict=c,e.DoubleDict=l,e.hashStuff=function(){var t=new p;return t.update.apply(arguments),t.finish()},e.escapeWhitespace=function(t,e){return t=t.replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),e&&(t=t.replace(/ /g,"·")),t},e.arrayToString=r,e.titleCase=function(t){return t.replace(/\w\S*/g,function(t){return t.charAt(0).toUpperCase()+t.substr(1)})},e.equalArrays=function(t,e){if(!Array.isArray(t)||!Array.isArray(e))return!1;if(t==e)return!0;if(t.length!=e.length)return!1;for(var n=0;n"},set:function(t){this._text=t}}),r.prototype.toString=function(){var t=this.text;return t=null!==t?t.replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t"):"","[@"+this.tokenIndex+","+this.start+":"+this.stop+"='"+t+"',<"+this.type+">"+(this.channel>0?",channel="+this.channel:"")+","+this.line+":"+this.column+"]"},e.Token=n,e.CommonToken=r},function(t,e,n){var r=n(1).Token;function i(t,e){return this.start=t,this.stop=e,this}function o(){this.intervals=null,this.readOnly=!1}i.prototype.contains=function(t){return t>=this.start&&t=n.stop?(this.intervals.pop(t+1),this.reduce(t)):e.stop>=n.start&&(this.intervals[t]=new i(e.start,n.stop),this.intervals.pop(t+1))}},o.prototype.complement=function(t,e){var n=new o;n.addInterval(new i(t,e+1));for(var r=0;rr.start&&t.stop=r.stop?(this.intervals.splice(e,1),e-=1):t.start"):t.push("'"+String.fromCharCode(n.start)+"'"):t.push("'"+String.fromCharCode(n.start)+"'..'"+String.fromCharCode(n.stop-1)+"'")}return t.length>1?"{"+t.join(", ")+"}":t[0]},o.prototype.toIndexString=function(){for(var t=[],e=0;e"):t.push(n.start.toString()):t.push(n.start.toString()+".."+(n.stop-1).toString())}return t.length>1?"{"+t.join(", ")+"}":t[0]},o.prototype.toTokenString=function(t,e){for(var n=[],r=0;r1?"{"+n.join(", ")+"}":n[0]},o.prototype.elementName=function(t,e,n){return n===r.EOF?"":n===r.EPSILON?"":t[n]||e[n]},e.Interval=i,e.IntervalSet=o},function(t,e){function n(){return this.atn=null,this.stateNumber=n.INVALID_STATE_NUMBER,this.stateType=null,this.ruleIndex=0,this.epsilonOnlyTransitions=!1,this.transitions=[],this.nextTokenWithinRule=null,this}function r(){return n.call(this),this.stateType=n.BASIC,this}function i(){return n.call(this),this.decision=-1,this.nonGreedy=!1,this}function o(){return i.call(this),this.endState=null,this}function s(){return o.call(this),this.stateType=n.BLOCK_START,this}function u(){return n.call(this),this.stateType=n.BLOCK_END,this.startState=null,this}function a(){return n.call(this),this.stateType=n.RULE_STOP,this}function c(){return n.call(this),this.stateType=n.RULE_START,this.stopState=null,this.isPrecedenceRule=!1,this}function l(){return i.call(this),this.stateType=n.PLUS_LOOP_BACK,this}function p(){return o.call(this),this.stateType=n.PLUS_BLOCK_START,this.loopBackState=null,this}function h(){return o.call(this),this.stateType=n.STAR_BLOCK_START,this}function f(){return n.call(this),this.stateType=n.STAR_LOOP_BACK,this}function d(){return i.call(this),this.stateType=n.STAR_LOOP_ENTRY,this.loopBackState=null,this.isPrecedenceDecision=null,this}function y(){return n.call(this),this.stateType=n.LOOP_END,this.loopBackState=null,this}function g(){return i.call(this),this.stateType=n.TOKEN_START,this}n.INVALID_TYPE=0,n.BASIC=1,n.RULE_START=2,n.BLOCK_START=3,n.PLUS_BLOCK_START=4,n.STAR_BLOCK_START=5,n.TOKEN_START=6,n.RULE_STOP=7,n.BLOCK_END=8,n.STAR_LOOP_BACK=9,n.STAR_LOOP_ENTRY=10,n.PLUS_LOOP_BACK=11,n.LOOP_END=12,n.serializationNames=["INVALID","BASIC","RULE_START","BLOCK_START","PLUS_BLOCK_START","STAR_BLOCK_START","TOKEN_START","RULE_STOP","BLOCK_END","STAR_LOOP_BACK","STAR_LOOP_ENTRY","PLUS_LOOP_BACK","LOOP_END"],n.INVALID_STATE_NUMBER=-1,n.prototype.toString=function(){return this.stateNumber},n.prototype.equals=function(t){return t instanceof n&&this.stateNumber===t.stateNumber},n.prototype.isNonGreedyExitState=function(){return!1},n.prototype.addTransition=function(t,e){void 0===e&&(e=-1),0===this.transitions.length?this.epsilonOnlyTransitions=t.isEpsilon:this.epsilonOnlyTransitions!==t.isEpsilon&&(this.epsilonOnlyTransitions=!1),-1===e?this.transitions.push(t):this.transitions.splice(e,1,t)},r.prototype=Object.create(n.prototype),r.prototype.constructor=r,i.prototype=Object.create(n.prototype),i.prototype.constructor=i,o.prototype=Object.create(i.prototype),o.prototype.constructor=o,s.prototype=Object.create(o.prototype),s.prototype.constructor=s,u.prototype=Object.create(n.prototype),u.prototype.constructor=u,a.prototype=Object.create(n.prototype),a.prototype.constructor=a,c.prototype=Object.create(n.prototype),c.prototype.constructor=c,l.prototype=Object.create(i.prototype),l.prototype.constructor=l,p.prototype=Object.create(o.prototype),p.prototype.constructor=p,h.prototype=Object.create(o.prototype),h.prototype.constructor=h,f.prototype=Object.create(n.prototype),f.prototype.constructor=f,d.prototype=Object.create(i.prototype),d.prototype.constructor=d,y.prototype=Object.create(n.prototype),y.prototype.constructor=y,g.prototype=Object.create(i.prototype),g.prototype.constructor=g,e.ATNState=n,e.BasicState=r,e.DecisionState=i,e.BlockStartState=o,e.BlockEndState=u,e.LoopEndState=y,e.RuleStartState=c,e.RuleStopState=a,e.TokensStartState=g,e.PlusLoopbackState=l,e.StarLoopbackState=f,e.StarLoopEntryState=d,e.PlusBlockStartState=p,e.StarBlockStartState=h,e.BasicBlockStartState=s},function(t,e,n){var r=n(1).Token,i=n(2).Interval,o=new i(-1,-2);n(0);function s(){return this}function u(){return s.call(this),this}function a(){return u.call(this),this}function c(){return a.call(this),this}function l(){return a.call(this),this}function p(){return l.call(this),this}function h(){return this}function f(){return this}function d(t){return l.call(this),this.parentCtx=null,this.symbol=t,this}function y(t){return d.call(this,t),this}function g(){return this}u.prototype=Object.create(s.prototype),u.prototype.constructor=u,a.prototype=Object.create(u.prototype),a.prototype.constructor=a,c.prototype=Object.create(a.prototype),c.prototype.constructor=c,l.prototype=Object.create(a.prototype),l.prototype.constructor=l,p.prototype=Object.create(l.prototype),p.prototype.constructor=p,h.prototype.visit=function(t){return Array.isArray(t)?t.map(function(t){return t.accept(this)},this):t.accept(this)},h.prototype.visitChildren=function(t){return t.children?this.visit(t.children):null},h.prototype.visitTerminal=function(t){},h.prototype.visitErrorNode=function(t){},f.prototype.visitTerminal=function(t){},f.prototype.visitErrorNode=function(t){},f.prototype.enterEveryRule=function(t){},f.prototype.exitEveryRule=function(t){},d.prototype=Object.create(l.prototype),d.prototype.constructor=d,d.prototype.getChild=function(t){return null},d.prototype.getSymbol=function(){return this.symbol},d.prototype.getParent=function(){return this.parentCtx},d.prototype.getPayload=function(){return this.symbol},d.prototype.getSourceInterval=function(){if(null===this.symbol)return o;var t=this.symbol.tokenIndex;return new i(t,t)},d.prototype.getChildCount=function(){return 0},d.prototype.accept=function(t){return t.visitTerminal(this)},d.prototype.getText=function(){return this.symbol.text},d.prototype.toString=function(){return this.symbol.type===r.EOF?"":this.symbol.text},y.prototype=Object.create(d.prototype),y.prototype.constructor=y,y.prototype.isErrorNode=function(){return!0},y.prototype.accept=function(t){return t.visitErrorNode(this)},g.prototype.walk=function(t,e){if(e instanceof p||void 0!==e.isErrorNode&&e.isErrorNode())t.visitErrorNode(e);else if(e instanceof l)t.visitTerminal(e);else{this.enterRule(t,e);for(var n=0;n=0&&this.startIndexe.returnState&&(f[0]=e.returnState,f[1]=t.returnState);var d=new c(y=[h,h],f);return null!==r&&r.set(t,e,d),d}f=[t.returnState,e.returnState];var y=[t.parentCtx,e.parentCtx];t.returnState>e.returnState&&(f[0]=e.returnState,f[1]=t.returnState,y=[e.parentCtx,t.parentCtx]);var g=new c(y,f);return null!==r&&r.set(t,e,g),g}(t,e,n,r);if(n){if(t instanceof a)return t;if(e instanceof a)return e}return t instanceof u&&(t=new c([t.getParent()],[t.returnState])),e instanceof u&&(e=new c([e.getParent()],[e.returnState])),function(t,e,n,r){if(null!==r){var i=r.get(t,e);if(null!==i)return i;if(null!==(i=r.get(e,t)))return i}var s=0,a=0,p=0,h=[],f=[];for(;s0&&(t+=", "),this.returnStates[e]!==o.EMPTY_RETURN_STATE?(t+=this.returnStates[e],null!==this.parents[e]?t=t+" "+this.parents[e]:t+="null"):t+="$";return t+"]"},e.merge=l,e.PredictionContext=o,e.PredictionContextCache=s,e.SingletonPredictionContext=u,e.predictionContextFromRuleContext=function t(e,n){if(null==n&&(n=r.EMPTY),null===n.parentCtx||n===r.EMPTY)return o.EMPTY;var i=t(e,n.parentCtx),s=e.states[n.invokingState].transitions[0];return u.create(i,s.followState.stateNumber)},e.getCachedPredictionContext=function t(e,n,r){if(e.isEmpty())return e;var i=r[e]||null;if(null!==i)return i;if(null!==(i=n.get(e)))return r[e]=i,i;for(var s=!1,a=[],l=0;l=this.states.length)throw"Invalid state number.";var n=this.states[t],r=this.nextTokens(n);if(!r.contains(s.EPSILON))return r;var o=new i;for(o.addSet(r),o.removeOne(s.EPSILON);null!==e&&e.invokingState>=0&&r.contains(s.EPSILON);){var u=this.states[e.invokingState].transitions[0];r=this.nextTokens(u.followState),o.addSet(r),o.removeOne(s.EPSILON),e=e.parentCtx}return r.contains(s.EPSILON)&&o.addOne(s.EOF),o},o.INVALID_ALT_NUMBER=0,e.ATN=o},function(t,e,n){var r=n(1).Token,i=(n(2).Interval,n(2).IntervalSet),o=n(10).Predicate,s=n(10).PrecedencePredicate;function u(t){if(null==t)throw"target cannot be null.";return this.target=t,this.isEpsilon=!1,this.label=null,this}function a(t,e){return u.call(this,t),this.label_=e,this.label=this.makeLabel(),this.serializationType=u.ATOM,this}function c(t,e,n,r){return u.call(this,t),this.ruleIndex=e,this.precedence=n,this.followState=r,this.serializationType=u.RULE,this.isEpsilon=!0,this}function l(t,e){return u.call(this,t),this.serializationType=u.EPSILON,this.isEpsilon=!0,this.outermostPrecedenceReturn=e,this}function p(t,e,n){return u.call(this,t),this.serializationType=u.RANGE,this.start=e,this.stop=n,this.label=this.makeLabel(),this}function h(t){return u.call(this,t),this}function f(t,e,n,r){return h.call(this,t),this.serializationType=u.PREDICATE,this.ruleIndex=e,this.predIndex=n,this.isCtxDependent=r,this.isEpsilon=!0,this}function d(t,e,n,r){return u.call(this,t),this.serializationType=u.ACTION,this.ruleIndex=e,this.actionIndex=void 0===n?-1:n,this.isCtxDependent=void 0!==r&&r,this.isEpsilon=!0,this}function y(t,e){return u.call(this,t),this.serializationType=u.SET,null!=e?this.label=e:(this.label=new i,this.label.addOne(r.INVALID_TYPE)),this}function g(t,e){return y.call(this,t,e),this.serializationType=u.NOT_SET,this}function _(t){return u.call(this,t),this.serializationType=u.WILDCARD,this}function v(t,e){return h.call(this,t),this.serializationType=u.PRECEDENCE,this.precedence=e,this.isEpsilon=!0,this}u.EPSILON=1,u.RANGE=2,u.RULE=3,u.PREDICATE=4,u.ATOM=5,u.ACTION=6,u.SET=7,u.NOT_SET=8,u.WILDCARD=9,u.PRECEDENCE=10,u.serializationNames=["INVALID","EPSILON","RANGE","RULE","PREDICATE","ATOM","ACTION","SET","NOT_SET","WILDCARD","PRECEDENCE"],u.serializationTypes={EpsilonTransition:u.EPSILON,RangeTransition:u.RANGE,RuleTransition:u.RULE,PredicateTransition:u.PREDICATE,AtomTransition:u.ATOM,ActionTransition:u.ACTION,SetTransition:u.SET,NotSetTransition:u.NOT_SET,WildcardTransition:u.WILDCARD,PrecedencePredicateTransition:u.PRECEDENCE},a.prototype=Object.create(u.prototype),a.prototype.constructor=a,a.prototype.makeLabel=function(){var t=new i;return t.addOne(this.label_),t},a.prototype.matches=function(t,e,n){return this.label_===t},a.prototype.toString=function(){return this.label_},c.prototype=Object.create(u.prototype),c.prototype.constructor=c,c.prototype.matches=function(t,e,n){return!1},l.prototype=Object.create(u.prototype),l.prototype.constructor=l,l.prototype.matches=function(t,e,n){return!1},l.prototype.toString=function(){return"epsilon"},p.prototype=Object.create(u.prototype),p.prototype.constructor=p,p.prototype.makeLabel=function(){var t=new i;return t.addRange(this.start,this.stop),t},p.prototype.matches=function(t,e,n){return t>=this.start&&t<=this.stop},p.prototype.toString=function(){return"'"+String.fromCharCode(this.start)+"'..'"+String.fromCharCode(this.stop)+"'"},h.prototype=Object.create(u.prototype),h.prototype.constructor=h,f.prototype=Object.create(h.prototype),f.prototype.constructor=f,f.prototype.matches=function(t,e,n){return!1},f.prototype.getPredicate=function(){return new o(this.ruleIndex,this.predIndex,this.isCtxDependent)},f.prototype.toString=function(){return"pred_"+this.ruleIndex+":"+this.predIndex},d.prototype=Object.create(u.prototype),d.prototype.constructor=d,d.prototype.matches=function(t,e,n){return!1},d.prototype.toString=function(){return"action_"+this.ruleIndex+":"+this.actionIndex},y.prototype=Object.create(u.prototype),y.prototype.constructor=y,y.prototype.matches=function(t,e,n){return this.label.contains(t)},y.prototype.toString=function(){return this.label.toString()},g.prototype=Object.create(y.prototype),g.prototype.constructor=g,g.prototype.matches=function(t,e,n){return t>=e&&t<=n&&!y.prototype.matches.call(this,t,e,n)},g.prototype.toString=function(){return"~"+y.prototype.toString.call(this)},_.prototype=Object.create(u.prototype),_.prototype.constructor=_,_.prototype.matches=function(t,e,n){return t>=e&&t<=n},_.prototype.toString=function(){return"."},v.prototype=Object.create(h.prototype),v.prototype.constructor=v,v.prototype.matches=function(t,e,n){return!1},v.prototype.getPredicate=function(){return new s(this.precedence)},v.prototype.toString=function(){return this.precedence+" >= _p"},e.Transition=u,e.AtomTransition=a,e.SetTransition=y,e.NotSetTransition=g,e.RuleTransition=c,e.ActionTransition=d,e.EpsilonTransition=l,e.RangeTransition=p,e.WildcardTransition=_,e.PredicateTransition=f,e.PrecedencePredicateTransition=v,e.AbstractPredicateTransition=h},function(t,e,n){var r=n(7).ATN,i=n(0),o=i.Hash,s=i.Set,u=n(10).SemanticContext,a=n(6).merge;function c(t){return t.hashCodeForConfigSet()}function l(t,e){return t===e||null!==t&&null!==e&&t.equalsForConfigSet(e)}function p(t){return this.configLookup=new s(c,l),this.fullCtx=void 0===t||t,this.readOnly=!1,this.configs=[],this.uniqueAlt=0,this.conflictingAlts=null,this.hasSemanticContext=!1,this.dipsIntoOuterContext=!1,this.cachedHashCode=-1,this}function h(){return p.call(this),this.configLookup=new s,this}p.prototype.add=function(t,e){if(void 0===e&&(e=null),this.readOnly)throw"This set is readonly";t.semanticContext!==u.NONE&&(this.hasSemanticContext=!0),t.reachesIntoOuterContext>0&&(this.dipsIntoOuterContext=!0);var n=this.configLookup.add(t);if(n===t)return this.cachedHashCode=-1,this.configs.push(t),!0;var r=!this.fullCtx,i=a(n.context,t.context,r,e);return n.reachesIntoOuterContext=Math.max(n.reachesIntoOuterContext,t.reachesIntoOuterContext),t.precedenceFilterSuppressed&&(n.precedenceFilterSuppressed=!0),n.context=i,!0},p.prototype.getStates=function(){for(var t=new s,e=0;e0){var s=null;i.map(function(t){(null===s||t.precedence0){var s=i.sort(function(t,e){return t.compareTo(e)}),a=s[s.length-1];n.add(a)}return this.opnds=n.values(),this}o.prototype.hashCode=function(){var t=new i;return this.updateHashCode(t),t.finish()},o.prototype.evaluate=function(t,e){},o.prototype.evalPrecedence=function(t,e){return this},o.andContext=function(t,e){if(null===t||t===o.NONE)return e;if(null===e||e===o.NONE)return t;var n=new a(t,e);return 1===n.opnds.length?n.opnds[0]:n},o.orContext=function(t,e){if(null===t)return e;if(null===e)return t;if(t===o.NONE||e===o.NONE)return o.NONE;var n=new c(t,e);return 1===n.opnds.length?n.opnds[0]:n},s.prototype=Object.create(o.prototype),s.prototype.constructor=s,o.NONE=new s,s.prototype.evaluate=function(t,e){var n=this.isCtxDependent?e:null;return t.sempred(n,this.ruleIndex,this.predIndex)},s.prototype.updateHashCode=function(t){t.update(this.ruleIndex,this.predIndex,this.isCtxDependent)},s.prototype.equals=function(t){return this===t||t instanceof s&&(this.ruleIndex===t.ruleIndex&&this.predIndex===t.predIndex&&this.isCtxDependent===t.isCtxDependent)},s.prototype.toString=function(){return"{"+this.ruleIndex+":"+this.predIndex+"}?"},u.prototype=Object.create(o.prototype),u.prototype.constructor=u,u.prototype.evaluate=function(t,e){return t.precpred(e,this.precedence)},u.prototype.evalPrecedence=function(t,e){return t.precpred(e,this.precedence)?o.NONE:null},u.prototype.compareTo=function(t){return this.precedence-t.precedence},u.prototype.updateHashCode=function(t){t.update(31)},u.prototype.equals=function(t){return this===t||t instanceof u&&this.precedence===t.precedence},u.prototype.toString=function(){return"{"+this.precedence+">=prec}?"},u.filterPrecedencePredicates=function(t){var e=[];return t.values().map(function(t){t instanceof u&&e.push(t)}),e},a.prototype=Object.create(o.prototype),a.prototype.constructor=a,a.prototype.equals=function(t){return this===t||t instanceof a&&this.opnds===t.opnds},a.prototype.updateHashCode=function(t){t.update(this.opnds,"AND")},a.prototype.evaluate=function(t,e){for(var n=0;n3?t.slice(3):t},c.prototype=Object.create(o.prototype),c.prototype.constructor=c,c.prototype.constructor=function(t){return this===t||t instanceof c&&this.opnds===t.opnds},c.prototype.updateHashCode=function(t){t.update(this.opnds,"OR")},c.prototype.evaluate=function(t,e){for(var n=0;n3?t.slice(3):t},e.SemanticContext=o,e.PrecedencePredicate=u,e.Predicate=s},function(t,e,n){var r=n(9).ATNConfigSet,i=n(0),o=i.Hash,s=i.Set;function u(t,e){return this.alt=e,this.pred=t,this}function a(t,e){return null===t&&(t=-1),null===e&&(e=new r),this.stateNumber=t,this.configs=e,this.edges=null,this.isAcceptState=!1,this.prediction=0,this.lexerActionExecutor=null,this.requiresFullContext=!1,this.predicates=null,this}u.prototype.toString=function(){return"("+this.pred+", "+this.alt+")"},a.prototype.getAltSet=function(){var t=new s;if(null!==this.configs)for(var e=0;e1&&r.raiseError("Was expecting no more than one element but got "+JSON.stringify(t),e)},assertType:function(t,e,i){if(e.indexOf(n(t))<0){var o=e.length>1?"one of "+e.join(", "):e[0];r.raiseError("Found type '"+n(t)+"' but was expecting "+o,i)}},isEmpty:function(t){return Array.isArray(t)&&0==t.length},isSome:function(t){return null!=t&&!r.isEmpty(t)},isTrue:function(t){return null!=t&&(!0===t||1==t.length&&!0===t[0])},isFalse:function(t){return null!=t&&(!1===t||1==t.length&&!1===t[0])},isCapitalized:function(t){return t&&t[0]===t[0].toUpperCase()},flatten:function(t){return t.reduce(function(t,e){return Array.isArray(e)?t=t.concat(e):t.push(e),t},[])},arraify:function(t){return Array.isArray(t)?t:r.isSome(t)?[t]:[]}};t.exports=r},function(t,e,n){e.atn=n(45),e.codepointat=n(29),e.dfa=n(52),e.fromcodepoint=n(30),e.tree=n(54),e.error=n(55),e.Token=n(1).Token,e.CharStreams=n(57).CharStreams,e.CommonToken=n(1).CommonToken,e.InputStream=n(20).InputStream,e.FileStream=n(58).FileStream,e.CommonTokenStream=n(59).CommonTokenStream,e.Lexer=n(16).Lexer,e.Parser=n(61).Parser;var r=n(6);e.PredictionContextCache=r.PredictionContextCache,e.ParserRuleContext=n(19).ParserRuleContext,e.Interval=n(2).Interval,e.Utils=n(0)},function(t,e,n){var r=n(3).DecisionState,i=n(10).SemanticContext,o=n(0).Hash;function s(t,e){if(null===t){var n={state:null,alt:null,context:null,semanticContext:null};return e&&(n.reachesIntoOuterContext=0),n}var r={};return r.state=t.state||null,r.alt=void 0===t.alt?null:t.alt,r.context=t.context||null,r.semanticContext=t.semanticContext||null,e&&(r.reachesIntoOuterContext=t.reachesIntoOuterContext||0,r.precedenceFilterSuppressed=t.precedenceFilterSuppressed||!1),r}function u(t,e){return this.checkContext(t,e),t=s(t),e=s(e,!0),this.state=null!==t.state?t.state:e.state,this.alt=null!==t.alt?t.alt:e.alt,this.context=null!==t.context?t.context:e.context,this.semanticContext=null!==t.semanticContext?t.semanticContext:null!==e.semanticContext?e.semanticContext:i.NONE,this.reachesIntoOuterContext=e.reachesIntoOuterContext,this.precedenceFilterSuppressed=e.precedenceFilterSuppressed,this}function a(t,e){u.call(this,t,e);var n=t.lexerActionExecutor||null;return this.lexerActionExecutor=n||(null!==e?e.lexerActionExecutor:null),this.passedThroughNonGreedyDecision=null!==e&&this.checkNonGreedyDecision(e,this.state),this}u.prototype.checkContext=function(t,e){null!==t.context&&void 0!==t.context||null!==e&&null!==e.context&&void 0!==e.context||(this.context=null)},u.prototype.hashCode=function(){var t=new o;return this.updateHashCode(t),t.finish()},u.prototype.updateHashCode=function(t){t.update(this.state.stateNumber,this.alt,this.context,this.semanticContext)},u.prototype.equals=function(t){return this===t||t instanceof u&&(this.state.stateNumber===t.state.stateNumber&&this.alt===t.alt&&(null===this.context?null===t.context:this.context.equals(t.context))&&this.semanticContext.equals(t.semanticContext)&&this.precedenceFilterSuppressed===t.precedenceFilterSuppressed)},u.prototype.hashCodeForConfigSet=function(){var t=new o;return t.update(this.state.stateNumber,this.alt,this.semanticContext),t.finish()},u.prototype.equalsForConfigSet=function(t){return this===t||t instanceof u&&(this.state.stateNumber===t.state.stateNumber&&this.alt===t.alt&&this.semanticContext.equals(t.semanticContext))},u.prototype.toString=function(){return"("+this.state+","+this.alt+(null!==this.context?",["+this.context.toString()+"]":"")+(this.semanticContext!==i.NONE?","+this.semanticContext.toString():"")+(this.reachesIntoOuterContext>0?",up="+this.reachesIntoOuterContext:"")+")"},a.prototype=Object.create(u.prototype),a.prototype.constructor=a,a.prototype.updateHashCode=function(t){t.update(this.state.stateNumber,this.alt,this.context,this.semanticContext,this.passedThroughNonGreedyDecision,this.lexerActionExecutor)},a.prototype.equals=function(t){return this===t||t instanceof a&&this.passedThroughNonGreedyDecision==t.passedThroughNonGreedyDecision&&(this.lexerActionExecutor?this.lexerActionExecutor.equals(t.lexerActionExecutor):!t.lexerActionExecutor)&&u.prototype.equals.call(this,t)},a.prototype.hashCodeForConfigSet=a.prototype.hashCode,a.prototype.equalsForConfigSet=a.prototype.equals,a.prototype.checkNonGreedyDecision=function(t,e){return t.passedThroughNonGreedyDecision||e instanceof r&&e.nonGreedy},e.ATNConfig=u,e.LexerATNConfig=a},function(t,e,n){var r=n(4).RuleNode,i=n(4).INVALID_INTERVAL,o=n(7).INVALID_ALT_NUMBER;function s(t,e){return r.call(this),this.parentCtx=t||null,this.invokingState=e||-1,this}s.prototype=Object.create(r.prototype),s.prototype.constructor=s,s.prototype.depth=function(){for(var t=0,e=this;null!==e;)e=e.parentCtx,t+=1;return t},s.prototype.isEmpty=function(){return-1===this.invokingState},s.prototype.getSourceInterval=function(){return i},s.prototype.getRuleContext=function(){return this},s.prototype.getPayload=function(){return this},s.prototype.getText=function(){return 0===this.getChildCount()?"":this.children.map(function(t){return t.getText()}).join("")},s.prototype.getAltNumber=function(){return o},s.prototype.setAltNumber=function(t){},s.prototype.getChild=function(t){return null},s.prototype.getChildCount=function(){return 0},s.prototype.accept=function(t){return t.visitChildren(this)},e.RuleContext=s;var u=n(22).Trees;s.prototype.toStringTree=function(t,e){return u.toStringTree(this,t,e)},s.prototype.toString=function(t,e){t=t||null,e=e||null;for(var n=this,r="[";null!==n&&n!==e;){if(null===t)n.isEmpty()||(r+=n.invokingState);else{var i=n.ruleIndex;r+=i>=0&&i":"\n"===t?"\\n":"\t"===t?"\\t":"\r"===t?"\\r":t},a.prototype.getCharErrorDisplay=function(t){return"'"+this.getErrorDisplayForChar(t)+"'"},a.prototype.recover=function(t){this._input.LA(1)!==r.EOF&&(t instanceof u?this._interp.consume(this._input):this._input.consume())},e.Lexer=a},function(t,e){function n(){return this}function r(){return n.call(this),this}function i(t){if(n.call(this),null===t)throw"delegates";return this.delegates=t,this}n.prototype.syntaxError=function(t,e,n,r,i,o){},n.prototype.reportAmbiguity=function(t,e,n,r,i,o,s){},n.prototype.reportAttemptingFullContext=function(t,e,n,r,i,o){},n.prototype.reportContextSensitivity=function(t,e,n,r,i,o){},r.prototype=Object.create(n.prototype),r.prototype.constructor=r,r.INSTANCE=new r,r.prototype.syntaxError=function(t,e,n,r,i,o){console.error("line "+n+":"+r+" "+i)},i.prototype=Object.create(n.prototype),i.prototype.constructor=i,i.prototype.syntaxError=function(t,e,n,r,i,o){this.delegates.map(function(s){s.syntaxError(t,e,n,r,i,o)})},i.prototype.reportAmbiguity=function(t,e,n,r,i,o,s){this.delegates.map(function(u){u.reportAmbiguity(t,e,n,r,i,o,s)})},i.prototype.reportAttemptingFullContext=function(t,e,n,r,i,o){this.delegates.map(function(s){s.reportAttemptingFullContext(t,e,n,r,i,o)})},i.prototype.reportContextSensitivity=function(t,e,n,r,i,o){this.delegates.map(function(s){s.reportContextSensitivity(t,e,n,r,i,o)})},e.ErrorListener=n,e.ConsoleErrorListener=r,e.ProxyErrorListener=i},function(t,e){function n(t,e,n){return this.dfa=t,this.literalNames=e||[],this.symbolicNames=n||[],this}function r(t){return n.call(this,t,null),this}n.prototype.toString=function(){if(null===this.dfa.s0)return null;for(var t="",e=this.dfa.sortedStates(),n=0;n")).concat(this.getStateString(s))).concat("\n"))}}return 0===t.length?null:t},n.prototype.getEdgeLabel=function(t){return 0===t?"EOF":null!==this.literalNames||null!==this.symbolicNames?this.literalNames[t-1]||this.symbolicNames[t-1]:String.fromCharCode(t-1)},n.prototype.getStateString=function(t){var e=(t.isAcceptState?":":"")+"s"+t.stateNumber+(t.requiresFullContext?"^":"");return t.isAcceptState?null!==t.predicates?e+"=>"+t.predicates.toString():e+"=>"+t.prediction.toString():e},r.prototype=Object.create(n.prototype),r.prototype.constructor=r,r.prototype.getEdgeLabel=function(t){return"'"+String.fromCharCode(t)+"'"},e.DFASerializer=n,e.LexerDFASerializer=r},function(t,e,n){var r=n(15).RuleContext,i=n(4),o=i.INVALID_INTERVAL,s=i.TerminalNode,u=i.TerminalNodeImpl,a=i.ErrorNodeImpl,c=n(2).Interval;function l(t,e){t=t||null,e=e||null,r.call(this,t,e),this.ruleIndex=-1,this.children=null,this.start=null,this.stop=null,this.exception=null}function p(t,e,n){return l.call(t,e),this.ruleIndex=n,this}l.prototype=Object.create(r.prototype),l.prototype.constructor=l,l.prototype.copyFrom=function(t){this.parentCtx=t.parentCtx,this.invokingState=t.invokingState,this.children=null,this.start=t.start,this.stop=t.stop,t.children&&(this.children=[],t.children.map(function(t){t instanceof a&&(this.children.push(t),t.parentCtx=this)},this))},l.prototype.enterRule=function(t){},l.prototype.exitRule=function(t){},l.prototype.addChild=function(t){return null===this.children&&(this.children=[]),this.children.push(t),t},l.prototype.removeLastChild=function(){null!==this.children&&this.children.pop()},l.prototype.addTokenNode=function(t){var e=new u(t);return this.addChild(e),e.parentCtx=this,e},l.prototype.addErrorNode=function(t){var e=new a(t);return this.addChild(e),e.parentCtx=this,e},l.prototype.getChild=function(t,e){if(e=e||null,null===this.children||t<0||t>=this.children.length)return null;if(null===e)return this.children[t];for(var n=0;n=this.children.length)return null;for(var n=0;n=this._size)throw"cannot consume EOF";this._index+=1},i.prototype.LA=function(t){if(0===t)return 0;t<0&&(t+=1);var e=this._index+t-1;return e<0||e>=this._size?r.EOF:this.data[e]},i.prototype.LT=function(t){return this.LA(t)},i.prototype.mark=function(){return-1},i.prototype.release=function(t){},i.prototype.seek=function(t){t<=this._index?this._index=t:this._index=Math.min(t,this._size)},i.prototype.getText=function(t,e){if(e>=this._size&&(e=this._size-1),t>=this._size)return"";if(this.decodeToUnicodeCodePoints){for(var n="",r=t;r<=e;r++)n+=String.fromCodePoint(this.data[r]);return n}return this.strdata.slice(t,e+1)},i.prototype.toString=function(){return this.strdata},e.InputStream=i},function(t,e,n){function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{};if(Array.isArray(e)){var r=e.map(function(e){return t(e)});return function(t){return r.find(function(e){return c(e(t))})}}var i=null;switch(s(e)){case"string":var o=u.compile(e,n);i=function(t){return c(o(t))};break;case"function":i=e}return i},h=function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e)return[];if(Array.isArray(e))return e.map(function(e){return t(e,r)});if(e.mappers)return new f(e,r);if(e.exec)return new d(e,r);var i=[];for(var o in e){var u=e[o];"string"==typeof u?i.push(n(38)(u)):"object"===s(u)&&"Object"===!u.constructor.name?i.push(u):(u.filter||(u.filter=o),u.description||(u.description=o),i.push(t(u,r)))}return i},f=function(){function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};r(this,t),this.args=e,this.filterFn=p(e.filter,n),this.defaultFn=l(e.default),this.ignoreFn=p(e.ignore,n),this.excludeFn=p(e.exclude,n),this.mappers=h(e.mappers,n)}return o(t,[{key:"ignore",value:function(t,e){return!!this.ignoreFn&&this.ignoreFn(t,e)}},{key:"exclude",value:function(t,e){return!!this.excludeFn&&this.excludeFn(t,e)}},{key:"default",value:function(t,e){return this.defaultFn?this.defaultFn(t,e):t}},{key:"filter",value:function(t,e){return!!this.filterFn&&this.filterFn(t,e)}},{key:"execute",value:function(t,e){var n=this;if(Array.isArray(t))return t.map(function(t){return n.execute(t,e)}).filter(function(t){return t});if("Bundle"===t.resourceType)return t.entry=t.entry.map(function(t){return{fullUrl:t.fullUrl,resource:n.execute(t.resource,e)}}),t;if(this.ignore(t,e)||!this.filter(t,e))return t;if(this.exclude(t,e))return null;var r=this.mappers.find(function(n){return n.filter(t,e)});return r?r.execute(t,e):this.default(t,e)}}]),t}(),d=function(){function t(e,n){r(this,t),this.args=e,this.filterFn=p(e.filter,n),this.execfn=l(e.exec)}return o(t,[{key:"filter",value:function(t,e){return!!this.filterFn&&this.filterFn(t,e)}},{key:"execute",value:function(t,e){var n=this;return Array.isArray(t)?t.map(function(t){return n.execute(t,e)}).filter(function(t){return t}):this.execfn(t,e)}}]),t}();t.exports={AggregateMapper:f,FilterMapper:d,buildFilter:p,buildMappers:h}},function(t,e,n){var r=n(0),i=n(1).Token,o=(n(4).RuleNode,n(4).ErrorNode),s=n(4).TerminalNode,u=n(19).ParserRuleContext,a=n(15).RuleContext,c=n(7).INVALID_ALT_NUMBER;function l(){}l.toStringTree=function(t,e,n){e=e||null,null!==(n=n||null)&&(e=n.ruleNames);var i=l.getNodeText(t,e);i=r.escapeWhitespace(i,!1);var o=t.getChildCount();if(0===o)return i;var s="("+i+" ";o>0&&(i=l.toStringTree(t.getChild(0),e),s=s.concat(i));for(var u=1;u=n},G.prototype.deserialize=function(t){this.reset(t),this.checkVersion(),this.checkUUID();var e=this.readATN();this.readStates(e),this.readRules(e),this.readModes(e);var n=[];return this.readSets(e,n,this.readInt.bind(this)),this.isFeatureSupported(K,this.uuid)&&this.readSets(e,n,this.readInt32.bind(this)),this.readEdges(e,n),this.readDecisions(e),this.readLexerActions(e),this.markPrecedenceDecisions(e),this.verifyATN(e),this.deserializationOptions.generateRuleBypassTransitions&&e.grammarType===o.PARSER&&(this.generateRuleBypassTransitions(e),this.verifyATN(e)),e},G.prototype.reset=function(t){var e=t.split("").map(function(t){var e=t.charCodeAt(0);return e>1?e-2:e+65533});e[0]=t.charCodeAt(0),this.data=e,this.pos=0},G.prototype.checkVersion=function(){var t=this.readInt();if(3!==t)throw"Could not deserialize ATN with version "+t+" (expected 3)."},G.prototype.checkUUID=function(){var t=this.readUUID();if(Y.indexOf(t)<0)throw"59627784-3BE5-417A-B9EB-8131A7286089";this.uuid=t},G.prototype.readATN=function(){var t=this.readInt(),e=this.readInt();return new i(t,e)},G.prototype.readStates=function(t){for(var e,n,r,i=[],o=[],s=this.readInt(),a=0;a0;)i.addTransition(h.transitions[f-1]),h.transitions=h.transitions.slice(-1);t.ruleToStartState[e].addTransition(new N(i)),o.addTransition(new N(u));var d=new a;t.addState(d),d.addTransition(new A(o,t.ruleToTokenType[e])),i.addTransition(new N(d))},G.prototype.stateIsEndStateFor=function(t,e){if(t.ruleIndex!==e)return null;if(!(t instanceof v))return null;var n=t.transitions[t.transitions.length-1].target;return n instanceof h&&n.epsilonOnlyTransitions&&n.transitions[0].target instanceof d?t:null},G.prototype.markPrecedenceDecisions=function(t){for(var e=0;e=0):this.checkCondition(n.transitions.length<=1||n instanceof d)}},G.prototype.checkCondition=function(t,e){if(!t)throw null==e&&(e="IllegalState"),e},G.prototype.readInt=function(){return this.data[this.pos++]},G.prototype.readInt32=function(){return this.readInt()|this.readInt()<<16},G.prototype.readLong=function(){return 4294967295&this.readInt32()|this.readInt32()<<32};var J=function(){for(var t=[],e=0;e<256;e++)t[e]=(e+256).toString(16).substr(1).toUpperCase();return t}();G.prototype.readUUID=function(){for(var t=[],e=7;e>=0;e--){var n=this.readInt();t[2*e+1]=255&n,t[2*e]=n>>8&255}return J[t[0]]+J[t[1]]+J[t[2]]+J[t[3]]+"-"+J[t[4]]+J[t[5]]+"-"+J[t[6]]+J[t[7]]+"-"+J[t[8]]+J[t[9]]+"-"+J[t[10]]+J[t[11]]+J[t[12]]+J[t[13]]+J[t[14]]+J[t[15]]},G.prototype.edgeFactory=function(t,e,n,i,o,s,u,a){var c=t.states[i];switch(e){case S.EPSILON:return new N(c);case S.RANGE:return new R(c,0!==u?r.EOF:o,s);case S.RULE:return new I(t.states[o],s,u,c);case S.PREDICATE:return new L(c,o,s,0!==u);case S.PRECEDENCE:return new k(c,o);case S.ATOM:return new A(c,0!==u?r.EOF:o);case S.ACTION:return new O(c,o,s,0!==u);case S.SET:return new C(c,a[o]);case S.NOT_SET:return new b(c,a[o]);case S.WILDCARD:return new w(c);default:throw"The specified transition type: "+e+" is not valid."}},G.prototype.stateFactory=function(t,e){if(null===this.stateFactories){var n=[];n[u.INVALID_TYPE]=null,n[u.BASIC]=function(){return new a},n[u.RULE_START]=function(){return new f},n[u.BLOCK_START]=function(){return new m},n[u.PLUS_BLOCK_START]=function(){return new x},n[u.STAR_BLOCK_START]=function(){return new T},n[u.TOKEN_START]=function(){return new y},n[u.RULE_STOP]=function(){return new d},n[u.BLOCK_END]=function(){return new p},n[u.STAR_LOOP_BACK]=function(){return new _},n[u.STAR_LOOP_ENTRY]=function(){return new v},n[u.PLUS_LOOP_BACK]=function(){return new g},n[u.LOOP_END]=function(){return new h},this.stateFactories=n}if(t>this.stateFactories.length||null===this.stateFactories[t])throw"The specified state type "+t+" is not valid.";var r=this.stateFactories[t]();if(null!==r)return r.ruleIndex=e,r},G.prototype.lexerActionFactory=function(t,e,n){if(null===this.actionFactories){var r=[];r[M.CHANNEL]=function(t,e){return new U(t)},r[M.CUSTOM]=function(t,e){return new B(t,e)},r[M.MODE]=function(t,e){return new W(t)},r[M.MORE]=function(t,e){return H.INSTANCE},r[M.POP_MODE]=function(t,e){return V.INSTANCE},r[M.PUSH_MODE]=function(t,e){return new q(t)},r[M.SKIP]=function(t,e){return j.INSTANCE},r[M.TYPE]=function(t,e){return new z(t)},this.actionFactories=r}if(t>this.actionFactories.length||null===this.actionFactories[t])throw"The specified lexer action type "+t+" is not valid.";return this.actionFactories[t](e,n)},e.ATNDeserializer=G},function(t,e){function n(t){return void 0===t&&(t=null),this.readOnly=!1,this.verifyATN=null===t||t.verifyATN,this.generateRuleBypassTransitions=null!==t&&t.generateRuleBypassTransitions,this}n.defaultOptions=new n,n.defaultOptions.readOnly=!0,e.ATNDeserializationOptions=n},function(t,e){function n(){}function r(t){return this.actionType=t,this.isPositionDependent=!1,this}function i(){return r.call(this,n.SKIP),this}function o(t){return r.call(this,n.TYPE),this.type=t,this}function s(t){return r.call(this,n.PUSH_MODE),this.mode=t,this}function u(){return r.call(this,n.POP_MODE),this}function a(){return r.call(this,n.MORE),this}function c(t){return r.call(this,n.MODE),this.mode=t,this}function l(t,e){return r.call(this,n.CUSTOM),this.ruleIndex=t,this.actionIndex=e,this.isPositionDependent=!0,this}function p(t){return r.call(this,n.CHANNEL),this.channel=t,this}function h(t,e){return r.call(this,e.actionType),this.offset=t,this.action=e,this.isPositionDependent=!0,this}n.CHANNEL=0,n.CUSTOM=1,n.MODE=2,n.MORE=3,n.POP_MODE=4,n.PUSH_MODE=5,n.SKIP=6,n.TYPE=7,r.prototype.hashCode=function(){var t=new Hash;return this.updateHashCode(t),t.finish()},r.prototype.updateHashCode=function(t){t.update(this.actionType)},r.prototype.equals=function(t){return this===t},i.prototype=Object.create(r.prototype),i.prototype.constructor=i,i.INSTANCE=new i,i.prototype.execute=function(t){t.skip()},i.prototype.toString=function(){return"skip"},o.prototype=Object.create(r.prototype),o.prototype.constructor=o,o.prototype.execute=function(t){t.type=this.type},o.prototype.updateHashCode=function(t){t.update(this.actionType,this.type)},o.prototype.equals=function(t){return this===t||t instanceof o&&this.type===t.type},o.prototype.toString=function(){return"type("+this.type+")"},s.prototype=Object.create(r.prototype),s.prototype.constructor=s,s.prototype.execute=function(t){t.pushMode(this.mode)},s.prototype.updateHashCode=function(t){t.update(this.actionType,this.mode)},s.prototype.equals=function(t){return this===t||t instanceof s&&this.mode===t.mode},s.prototype.toString=function(){return"pushMode("+this.mode+")"},u.prototype=Object.create(r.prototype),u.prototype.constructor=u,u.INSTANCE=new u,u.prototype.execute=function(t){t.popMode()},u.prototype.toString=function(){return"popMode"},a.prototype=Object.create(r.prototype),a.prototype.constructor=a,a.INSTANCE=new a,a.prototype.execute=function(t){t.more()},a.prototype.toString=function(){return"more"},c.prototype=Object.create(r.prototype),c.prototype.constructor=c,c.prototype.execute=function(t){t.mode(this.mode)},c.prototype.updateHashCode=function(t){t.update(this.actionType,this.mode)},c.prototype.equals=function(t){return this===t||t instanceof c&&this.mode===t.mode},c.prototype.toString=function(){return"mode("+this.mode+")"},l.prototype=Object.create(r.prototype),l.prototype.constructor=l,l.prototype.execute=function(t){t.action(null,this.ruleIndex,this.actionIndex)},l.prototype.updateHashCode=function(t){t.update(this.actionType,this.ruleIndex,this.actionIndex)},l.prototype.equals=function(t){return this===t||t instanceof l&&(this.ruleIndex===t.ruleIndex&&this.actionIndex===t.actionIndex)},p.prototype=Object.create(r.prototype),p.prototype.constructor=p,p.prototype.execute=function(t){t._channel=this.channel},p.prototype.updateHashCode=function(t){t.update(this.actionType,this.channel)},p.prototype.equals=function(t){return this===t||t instanceof p&&this.channel===t.channel},p.prototype.toString=function(){return"channel("+this.channel+")"},h.prototype=Object.create(r.prototype),h.prototype.constructor=h,h.prototype.execute=function(t){this.action.execute(t)},h.prototype.updateHashCode=function(t){t.update(this.actionType,this.offset,this.action)},h.prototype.equals=function(t){return this===t||t instanceof h&&(this.offset===t.offset&&this.action===t.action)},e.LexerActionType=n,e.LexerSkipAction=i,e.LexerChannelAction=p,e.LexerCustomAction=l,e.LexerIndexedCustomAction=h,e.LexerMoreAction=a,e.LexerTypeAction=o,e.LexerPushModeAction=s,e.LexerPopModeAction=u,e.LexerModeAction=c},function(t,e,n){var r=n(1).Token,i=n(17).ConsoleErrorListener,o=n(17).ProxyErrorListener;function s(){return this._listeners=[i.INSTANCE],this._interp=null,this._stateNumber=-1,this}s.tokenTypeMapCache={},s.ruleIndexMapCache={},s.prototype.checkVersion=function(t){"4.7.2"!==t&&console.log("ANTLR runtime and generated code versions disagree: 4.7.2!="+t)},s.prototype.addErrorListener=function(t){this._listeners.push(t)},s.prototype.removeErrorListeners=function(){this._listeners=[]},s.prototype.getTokenTypeMap=function(){var t=this.getTokenNames();if(null===t)throw"The current recognizer does not provide a list of token names.";var e=this.tokenTypeMapCache[t];return void 0===e&&((e=t.reduce(function(t,e,n){t[e]=n})).EOF=r.EOF,this.tokenTypeMapCache[t]=e),e},s.prototype.getRuleIndexMap=function(){var t=this.ruleNames;if(null===t)throw"The current recognizer does not provide a list of rule names.";var e=this.ruleIndexMapCache[t];return void 0===e&&(e=t.reduce(function(t,e,n){t[e]=n}),this.ruleIndexMapCache[t]=e),e},s.prototype.getTokenType=function(t){var e=this.getTokenTypeMap()[t];return void 0!==e?e:r.INVALID_TYPE},s.prototype.getErrorHeader=function(t){return"line "+t.getOffendingToken().line+":"+t.getOffendingToken().column},s.prototype.getTokenErrorDisplay=function(t){if(null===t)return"";var e=t.text;return null===e&&(e=t.type===r.EOF?"":"<"+t.type+">"),"'"+(e=e.replace("\n","\\n").replace("\r","\\r").replace("\t","\\t"))+"'"},s.prototype.getErrorListenerDispatch=function(){return new o(this._listeners)},s.prototype.sempred=function(t,e,n){return!0},s.prototype.precpred=function(t,e){return!0},Object.defineProperty(s.prototype,"state",{get:function(){return this._stateNumber},set:function(t){this._stateNumber=t}}),e.Recognizer=s},function(t,e,n){var r=n(11).DFAState,i=n(9).ATNConfigSet,o=n(6).getCachedPredictionContext;function s(t,e){return this.atn=t,this.sharedContextCache=e,this}s.ERROR=new r(2147483647,new i),s.prototype.getCachedContext=function(t){if(null===this.sharedContextCache)return t;return o(t,this.sharedContextCache,{})},e.ATNSimulator=s},function(t,e,n){n(0).Set;var r=n(0).Map,i=n(0).BitSet,o=n(0).AltDict,s=n(7).ATN,u=n(3).RuleStopState,a=n(9).ATNConfigSet,c=n(14).ATNConfig,l=n(10).SemanticContext,p=(n(0).Hash,n(0).hashStuff);n(0).equalArrays;function h(){return this}h.SLL=0,h.LL=1,h.LL_EXACT_AMBIG_DETECTION=2,h.hasSLLConflictTerminatingPrediction=function(t,e){if(h.allConfigsInRuleStopStates(e))return!0;if(t===h.SLL&&e.hasSemanticContext){for(var n=new a,r=0;r1)return!0}return!1},h.allSubsetsEqual=function(t){for(var e=null,n=0;n=n)){var i,o=e.charCodeAt(r);return o>=55296&&o<=56319&&n>r+1&&(i=e.charCodeAt(r+1))>=56320&&i<=57343?1024*(o-55296)+i-56320+65536:o}};t?t(String.prototype,"codePointAt",{value:e,configurable:!0,writable:!0}):String.prototype.codePointAt=e}()},function(t,e){var n,r,i,o; +/*! https://mths.be/fromcodepoint v0.2.1 by @mathias */ +String.fromCodePoint||(n=function(){try{var t={},e=Object.defineProperty,n=e(t,t,t)&&e}catch(t){}return n}(),r=String.fromCharCode,i=Math.floor,o=function(t){var e,n,o=16384,s=[],u=-1,a=arguments.length;if(!a)return"";for(var c="";++u1114111||i(l)!=l)throw RangeError("Invalid code point: "+l);l<=65535?s.push(l):(e=55296+((l-=65536)>>10),n=l%1024+56320,s.push(e,n)),(u+1==a||s.length>o)&&(c+=r.apply(null,s),s.length=0)}return c},n?n(String,"fromCodePoint",{value:o,configurable:!0,writable:!0}):String.fromCodePoint=o)},function(t,e,n){var r=n(1).Token,i=n(5),o=i.NoViableAltException,s=i.InputMismatchException,u=i.FailedPredicateException,a=i.ParseCancellationException,c=n(3).ATNState,l=n(2).Interval,p=n(2).IntervalSet;function h(){}function f(){return h.call(this),this.errorRecoveryMode=!1,this.lastErrorIndex=-1,this.lastErrorStates=null,this}function d(){return f.call(this),this}h.prototype.reset=function(t){},h.prototype.recoverInline=function(t){},h.prototype.recover=function(t,e){},h.prototype.sync=function(t){},h.prototype.inErrorRecoveryMode=function(t){},h.prototype.reportError=function(t){},f.prototype=Object.create(h.prototype),f.prototype.constructor=f,f.prototype.reset=function(t){this.endErrorCondition(t)},f.prototype.beginErrorCondition=function(t){this.errorRecoveryMode=!0},f.prototype.inErrorRecoveryMode=function(t){return this.errorRecoveryMode},f.prototype.endErrorCondition=function(t){this.errorRecoveryMode=!1,this.lastErrorStates=null,this.lastErrorIndex=-1},f.prototype.reportMatch=function(t){this.endErrorCondition(t)},f.prototype.reportError=function(t,e){this.inErrorRecoveryMode(t)||(this.beginErrorCondition(t),e instanceof o?this.reportNoViableAlternative(t,e):e instanceof s?this.reportInputMismatch(t,e):e instanceof u?this.reportFailedPredicate(t,e):(console.log("unknown recognition error type: "+e.constructor.name),console.log(e.stack),t.notifyErrorListeners(e.getOffendingToken(),e.getMessage(),e)))},f.prototype.recover=function(t,e){this.lastErrorIndex===t.getInputStream().index&&null!==this.lastErrorStates&&this.lastErrorStates.indexOf(t.state)>=0&&t.consume(),this.lastErrorIndex=t._input.index,null===this.lastErrorStates&&(this.lastErrorStates=[]),this.lastErrorStates.push(t.state);var n=this.getErrorRecoverySet(t);this.consumeUntil(t,n)},f.prototype.sync=function(t){if(!this.inErrorRecoveryMode(t)){var e=t._interp.atn.states[t.state],n=t.getTokenStream().LA(1),i=t.atn.nextTokens(e);if(!i.contains(r.EPSILON)&&!i.contains(n))switch(e.stateType){case c.BLOCK_START:case c.STAR_BLOCK_START:case c.PLUS_BLOCK_START:case c.STAR_LOOP_ENTRY:if(null!==this.singleTokenDeletion(t))return;throw new s(t);case c.PLUS_LOOP_BACK:case c.STAR_LOOP_BACK:this.reportUnwantedToken(t);var o=new p;o.addSet(t.getExpectedTokens());var u=o.addSet(this.getErrorRecoverySet(t));this.consumeUntil(t,u)}}},f.prototype.reportNoViableAlternative=function(t,e){var n,i=t.getTokenStream();n=null!==i?e.startToken.type===r.EOF?"":i.getText(new l(e.startToken.tokenIndex,e.offendingToken.tokenIndex)):"";var o="no viable alternative at input "+this.escapeWSAndQuote(n);t.notifyErrorListeners(o,e.offendingToken,e)},f.prototype.reportInputMismatch=function(t,e){var n="mismatched input "+this.getTokenErrorDisplay(e.offendingToken)+" expecting "+e.getExpectedTokens().toString(t.literalNames,t.symbolicNames);t.notifyErrorListeners(n,e.offendingToken,e)},f.prototype.reportFailedPredicate=function(t,e){var n="rule "+t.ruleNames[t._ctx.ruleIndex]+" "+e.message;t.notifyErrorListeners(n,e.offendingToken,e)},f.prototype.reportUnwantedToken=function(t){if(!this.inErrorRecoveryMode(t)){this.beginErrorCondition(t);var e=t.getCurrentToken(),n="extraneous input "+this.getTokenErrorDisplay(e)+" expecting "+this.getExpectedTokens(t).toString(t.literalNames,t.symbolicNames);t.notifyErrorListeners(n,e,null)}},f.prototype.reportMissingToken=function(t){if(!this.inErrorRecoveryMode(t)){this.beginErrorCondition(t);var e=t.getCurrentToken(),n="missing "+this.getExpectedTokens(t).toString(t.literalNames,t.symbolicNames)+" at "+this.getTokenErrorDisplay(e);t.notifyErrorListeners(n,e,null)}},f.prototype.recoverInline=function(t){var e=this.singleTokenDeletion(t);if(null!==e)return t.consume(),e;if(this.singleTokenInsertion(t))return this.getMissingSymbol(t);throw new s(t)},f.prototype.singleTokenInsertion=function(t){var e=t.getTokenStream().LA(1),n=t._interp.atn,r=n.states[t.state].transitions[0].target;return!!n.nextTokens(r,t._ctx).contains(e)&&(this.reportMissingToken(t),!0)},f.prototype.singleTokenDeletion=function(t){var e=t.getTokenStream().LA(2);if(this.getExpectedTokens(t).contains(e)){this.reportUnwantedToken(t),t.consume();var n=t.getCurrentToken();return this.reportMatch(t),n}return null},f.prototype.getMissingSymbol=function(t){var e,n=t.getCurrentToken(),i=this.getExpectedTokens(t).first();e=i===r.EOF?"":"";var o=n,s=t.getTokenStream().LT(-1);return o.type===r.EOF&&null!==s&&(o=s),t.getTokenFactory().create(o.source,i,e,r.DEFAULT_CHANNEL,-1,-1,o.line,o.column)},f.prototype.getExpectedTokens=function(t){return t.getExpectedTokens()},f.prototype.getTokenErrorDisplay=function(t){if(null===t)return"";var e=t.text;return null===e&&(e=t.type===r.EOF?"":"<"+t.type+">"),this.escapeWSAndQuote(e)},f.prototype.escapeWSAndQuote=function(t){return"'"+(t=(t=(t=t.replace(/\n/g,"\\n")).replace(/\r/g,"\\r")).replace(/\t/g,"\\t"))+"'"},f.prototype.getErrorRecoverySet=function(t){for(var e=t._interp.atn,n=t._ctx,i=new p;null!==n&&n.invokingState>=0;){var o=e.states[n.invokingState].transitions[0],s=e.nextTokens(o.followState);i.addSet(s),n=n.parentCtx}return i.removeOne(r.EPSILON),i},f.prototype.consumeUntil=function(t,e){for(var n=t.getTokenStream().LA(1);n!==r.EOF&&!e.contains(n);)t.consume(),n=t.getTokenStream().LA(1)},d.prototype=Object.create(f.prototype),d.prototype.constructor=d,d.prototype.recover=function(t,e){for(var n=t._ctx;null!==n;)n.exception=e,n=n.parentCtx;throw new a(e)},d.prototype.recoverInline=function(t){this.recover(t,new s(t))},d.prototype.sync=function(t){},e.BailErrorStrategy=d,e.DefaultErrorStrategy=f},function(t,e){},function(t,e,n){var r=n(13);function i(){return r.tree.ParseTreeListener.call(this),this}i.prototype=Object.create(r.tree.ParseTreeListener.prototype),i.prototype.constructor=i,i.prototype.enterIndexerExpression=function(t){},i.prototype.exitIndexerExpression=function(t){},i.prototype.enterPolarityExpression=function(t){},i.prototype.exitPolarityExpression=function(t){},i.prototype.enterAdditiveExpression=function(t){},i.prototype.exitAdditiveExpression=function(t){},i.prototype.enterMultiplicativeExpression=function(t){},i.prototype.exitMultiplicativeExpression=function(t){},i.prototype.enterUnionExpression=function(t){},i.prototype.exitUnionExpression=function(t){},i.prototype.enterOrExpression=function(t){},i.prototype.exitOrExpression=function(t){},i.prototype.enterAndExpression=function(t){},i.prototype.exitAndExpression=function(t){},i.prototype.enterMembershipExpression=function(t){},i.prototype.exitMembershipExpression=function(t){},i.prototype.enterInequalityExpression=function(t){},i.prototype.exitInequalityExpression=function(t){},i.prototype.enterInvocationExpression=function(t){},i.prototype.exitInvocationExpression=function(t){},i.prototype.enterEqualityExpression=function(t){},i.prototype.exitEqualityExpression=function(t){},i.prototype.enterImpliesExpression=function(t){},i.prototype.exitImpliesExpression=function(t){},i.prototype.enterTermExpression=function(t){},i.prototype.exitTermExpression=function(t){},i.prototype.enterTypeExpression=function(t){},i.prototype.exitTypeExpression=function(t){},i.prototype.enterInvocationTerm=function(t){},i.prototype.exitInvocationTerm=function(t){},i.prototype.enterLiteralTerm=function(t){},i.prototype.exitLiteralTerm=function(t){},i.prototype.enterExternalConstantTerm=function(t){},i.prototype.exitExternalConstantTerm=function(t){},i.prototype.enterParenthesizedTerm=function(t){},i.prototype.exitParenthesizedTerm=function(t){},i.prototype.enterNullLiteral=function(t){},i.prototype.exitNullLiteral=function(t){},i.prototype.enterBooleanLiteral=function(t){},i.prototype.exitBooleanLiteral=function(t){},i.prototype.enterStringLiteral=function(t){},i.prototype.exitStringLiteral=function(t){},i.prototype.enterNumberLiteral=function(t){},i.prototype.exitNumberLiteral=function(t){},i.prototype.enterDateTimeLiteral=function(t){},i.prototype.exitDateTimeLiteral=function(t){},i.prototype.enterTimeLiteral=function(t){},i.prototype.exitTimeLiteral=function(t){},i.prototype.enterQuantityLiteral=function(t){},i.prototype.exitQuantityLiteral=function(t){},i.prototype.enterExternalConstant=function(t){},i.prototype.exitExternalConstant=function(t){},i.prototype.enterMemberInvocation=function(t){},i.prototype.exitMemberInvocation=function(t){},i.prototype.enterFunctionInvocation=function(t){},i.prototype.exitFunctionInvocation=function(t){},i.prototype.enterThisInvocation=function(t){},i.prototype.exitThisInvocation=function(t){},i.prototype.enterFunctn=function(t){},i.prototype.exitFunctn=function(t){},i.prototype.enterParamList=function(t){},i.prototype.exitParamList=function(t){},i.prototype.enterQuantity=function(t){},i.prototype.exitQuantity=function(t){},i.prototype.enterUnit=function(t){},i.prototype.exitUnit=function(t){},i.prototype.enterDateTimePrecision=function(t){},i.prototype.exitDateTimePrecision=function(t){},i.prototype.enterPluralDateTimePrecision=function(t){},i.prototype.exitPluralDateTimePrecision=function(t){},i.prototype.enterTypeSpecifier=function(t){},i.prototype.exitTypeSpecifier=function(t){},i.prototype.enterQualifiedIdentifier=function(t){},i.prototype.exitQualifiedIdentifier=function(t){},i.prototype.enterIdentifier=function(t){},i.prototype.exitIdentifier=function(t){},e.FHIRPathListener=i},function(t,e,n){function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var i=n(12),o=n(35),s={};function u(t){return JSON.stringify(a(t))}function a(t){return"object"===r(t)?Array.isArray(t)?t.map(a):Object.keys(t).sort().reduce(function(e,n){var r=t[n];return e[n]=a(r),e},{}):t}function c(t,e){var n=t.length<=e.length;if(n)for(var r={},i=0,o=t.length;i0)for(var n={},r=0,i=t.length;r=0;u--)if(c[u]!=l[u])return!1;for(u=c.length-1;u>=0;u--)if(a=c[u],!f(t[a],e[a],s))return!1;return n(t)===n(e)}t.exports=f},function(t,e){(function(e){t.exports=e}).call(this,{})},function(t,e){function n(t){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}n.keys=function(){return[]},n.resolve=n,t.exports=n,n.id=38},function(t,e){t.exports={applyProfile:function(t,e){return e&&(t.meta=t.meta||{},t.meta.profile=t.meta.profile||[],t.meta.profile.unshift(e)),t}}},function(t,e,n){function r(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function i(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var o=n(41),s=n(39),u=n(21);t.exports=function(t){for(var e=1;e":{fn:l.gt,arity:{2:["Any","Any"]},nullable:!0},"<=":{fn:l.lte,arity:{2:["Any","Any"]},nullable:!0},">=":{fn:l.gte,arity:{2:["Any","Any"]},nullable:!0},containsOp:{fn:p.contains,arity:{2:["Any","Any"]}},inOp:{fn:p.in,arity:{2:["Any","Any"]}},"&":{fn:h.amp,arity:{2:["String","String"]}},"+":{fn:h.plus,arity:{2:["Any","Any"]},nullable:!0},"-":{fn:h.minus,arity:{2:["Number","Number"]},nullable:!0},"*":{fn:h.mul,arity:{2:["Number","Number"]},nullable:!0},"/":{fn:h.div,arity:{2:["Number","Number"]},nullable:!0},mod:{fn:h.mod,arity:{2:["Number","Number"]},nullable:!0},div:{fn:h.intdiv,arity:{2:["Number","Number"]},nullable:!0},or:{fn:g.orOp,arity:{2:[["Boolean"],["Boolean"]]}},and:{fn:g.andOp,arity:{2:[["Boolean"],["Boolean"]]}},xor:{fn:g.xorOp,arity:{2:[["Boolean"],["Boolean"]]}},implies:{fn:g.impliesOp,arity:{2:[["Boolean"],["Boolean"]]}}},o.InvocationExpression=function(t,e,n){return n.children.reduce(function(e,n){return o.doEval(t,e,n)},e)},o.TermExpression=function(t,e,n){return o.doEval(t,e,n.children[0])},o.ExternalConstantTerm=function(t,e,n){var r=n.children[0].children[0],i=o.Identifier(t,e,r)[0],s=t.vars[i];return void 0===s?[]:s instanceof Array?s:[s]},o.LiteralTerm=function(t,e,n){var r=n.children[0];return r?o.doEval(t,e,r):[n.text]},o.StringLiteral=function(t,e,n){return[n.text.replace(/(^['"]|['"]$)/g,"")]},o.BooleanLiteral=function(t,e,n){return"true"===n.text?[!0]:[!1]},o.NumberLiteral=function(t,e,n){return[Number(n.text)]},o.Identifier=function(t,e,n){return[n.text.replace(/(^"|"$)/g,"")]},o.InvocationTerm=function(t,e,n){return o.doEval(t,e,n.children[0])},o.MemberInvocation=function(t,e,n){var r=o.doEval(t,e,n.children[0])[0];return e?i.isCapitalized(r)?e.filter(function(t){return t.resourceType===r}):e.reduce(function(t,e){var n=e[r];return i.isSome(n)?(Array.isArray(n)?t=t.concat(n):t.push(n),t):t},[]):[]},o.IndexerExpression=function(t,e,n){var r=n.children[0],s=n.children[1],u=o.doEval(t,e,r),a=o.doEval(t,e,s);if(i.isEmpty(a))return[];var c=parseInt(a[0]);return u&&i.isSome(c)&&u.length>c&&c>=0?[u[c]]:[]},o.Functn=function(t,e,n){return n.children.map(function(n){return o.doEval(t,e,n)})},o.realizeParams=function(t,e,n){return n&&n[0]&&n[0].children?n[0].children.map(function(n){return o.doEval(t,e,n)}):[]};var _={Integer:function(t){if("number"!=typeof t||!Number.isInteger(t))throw new Error("Expected integer, got: "+JSON.stringify(t));return t},Boolean:function(t){if(!0===t||!1===t)return t;throw new Error("Expected boolean, got: "+JSON.stringify(t))},Number:function(t){if("number"!=typeof t)throw new Error("Expected number, got: "+JSON.stringify(t));return t},String:function(t){if("string"!=typeof t)throw new Error("Expected string, got: "+JSON.stringify(t));return t}};function v(t,e,n,r){if(t.currentData=e,"Expr"===n)return function(e){return o.doEval(t,i.arraify(e),r)};if("AnyAtRoot"===n)return o.doEval(t,t.dataRoot,r);if("Identifier"===n){if("TermExpression"==r.type)return r.text;throw new Error("Expected identifier node, got ",JSON.stringify(r))}var s=o.doEval(t,e,r);if("Any"===n)return s;if(Array.isArray(n)){if(0==s.length)return[];n=n[0]}var u=_[n];if(s.length>1)throw new Error("Unexpected collection"+JSON.stringify(s)+"; expected singleton of type "+n);if(0==s.length)return[];if(u)return u(s[0]);throw console.error(n,r),new Error("IMPL me for "+n)}function x(t){return null==t||i.isEmpty(t)}function T(t,e,n,r){var s=o.invocationTable[e];if(s&&s.fn){var u=r?r.length:0;if(2!=u)throw new Error("Infix invoke should have arity 2");var a=s.arity[u];if(a){for(var c=[],l=0;l0){for(var m=[],E=0,S=l.length;Ev.MAX_DFA_EDGE)return null;var n=t.edges[e-v.MIN_DFA_EDGE];return void 0===n&&(n=null),v.debug&&null!==n&&console.log("reuse state "+t.stateNumber+" edge to "+n.stateNumber),n},v.prototype.computeTargetState=function(t,e,n){var r=new a;return this.getReachableConfigSet(t,e.configs,r,n),0===r.items.length?(r.hasSemanticContext||this.addDFAEdge(e,n,s.ERROR),s.ERROR):this.addDFAEdge(e,n,null,r)},v.prototype.failOrAccept=function(t,e,n,i){if(null!==this.prevAccept.dfaState){var o=t.dfaState.lexerActionExecutor;return this.accept(e,o,this.startIndex,t.index,t.line,t.column),t.dfaState.prediction}if(i===r.EOF&&e.index===this.startIndex)return r.EOF;throw new y(this.recog,e,this.startIndex,n)},v.prototype.getReachableConfigSet=function(t,e,n,i){for(var s=o.INVALID_ALT_NUMBER,u=0;uv.MAX_DFA_EDGE?n:(v.debug&&console.log("EDGE "+t+" -> "+n+" upon "+e),null===t.edges&&(t.edges=[]),t.edges[e-v.MIN_DFA_EDGE]=n,n)},v.prototype.addDFAState=function(t){for(var e=new u(null,t),n=null,r=0;r0&&(o=this.getAltThatFinishedDecisionEntryRule(i))!==u.INVALID_ALT_NUMBER?o:u.INVALID_ALT_NUMBER},N.prototype.getAltThatFinishedDecisionEntryRule=function(t){for(var e=[],n=0;n0||r.state instanceof v&&r.context.hasEmptyPath())&&e.indexOf(r.alt)<0&&e.push(r.alt)}return 0===e.length?u.INVALID_ALT_NUMBER:Math.min.apply(null,e)},N.prototype.splitAccordingToSemanticValidity=function(t,e){for(var n=new l(t.fullCtx),r=new l(t.fullCtx),i=0;i50))throw"problem";if(t.state instanceof v){if(!t.context.isEmpty()){for(var u=0;u=0&&(h+=1)}this.closureCheckingStopState(p,e,n,l,i,h,s)}}},N.prototype.canDropLoopEntryEdgeInLeftRecursiveRule=function(t){var e=t.state;if(e.stateType!=a.STAR_LOOP_ENTRY)return!1;if(e.stateType!=a.STAR_LOOP_ENTRY||!e.isPrecedenceDecision||t.context.isEmpty()||t.context.hasEmptyPath())return!1;for(var n=t.context.length,r=0;r=0?this.parser.ruleNames[t]:""},N.prototype.getEpsilonTarget=function(t,e,n,r,i,o){switch(e.serializationType){case E.RULE:return this.ruleTransition(t,e);case E.PRECEDENCE:return this.precedenceTransition(t,e,n,r,i);case E.PREDICATE:return this.predTransition(t,e,n,r,i);case E.ACTION:return this.actionTransition(t,e);case E.EPSILON:return new c({state:e.target},t);case E.ATOM:case E.RANGE:case E.SET:return o&&e.matches(p.EOF,0,1)?new c({state:e.target},t):null;default:return null}},N.prototype.actionTransition=function(t,e){if(this.debug){var n=-1==e.actionIndex?65535:e.actionIndex;console.log("ACTION edge "+e.ruleIndex+":"+n)}return new c({state:e.target},t)},N.prototype.precedenceTransition=function(t,e,n,i,o){this.debug&&(console.log("PRED (collectPredicates="+n+") "+e.precedence+">=_p, ctx dependent=true"),null!==this.parser&&console.log("context surrounding pred is "+r.arrayToString(this.parser.getRuleInvocationStack())));var s=null;if(n&&i)if(o){var u=this._input.index;this._input.seek(this._startIndex);var a=e.getPredicate().evaluate(this.parser,this._outerContext);this._input.seek(u),a&&(s=new c({state:e.target},t))}else{var l=_.andContext(t.semanticContext,e.getPredicate());s=new c({state:e.target,semanticContext:l},t)}else s=new c({state:e.target},t);return this.debug&&console.log("config from pred transition="+s),s},N.prototype.predTransition=function(t,e,n,i,o){this.debug&&(console.log("PRED (collectPredicates="+n+") "+e.ruleIndex+":"+e.predIndex+", ctx dependent="+e.isCtxDependent),null!==this.parser&&console.log("context surrounding pred is "+r.arrayToString(this.parser.getRuleInvocationStack())));var s=null;if(n&&(e.isCtxDependent&&i||!e.isCtxDependent))if(o){var u=this._input.index;this._input.seek(this._startIndex);var a=e.getPredicate().evaluate(this.parser,this._outerContext);this._input.seek(u),a&&(s=new c({state:e.target},t))}else{var l=_.andContext(t.semanticContext,e.getPredicate());s=new c({state:e.target,semanticContext:l},t)}else s=new c({state:e.target},t);return this.debug&&console.log("config from pred transition="+s),s},N.prototype.ruleTransition=function(t,e){this.debug&&console.log("CALL rule "+this.getRuleName(e.target.ruleIndex)+", ctx="+t.context);var n=e.followState,r=R.create(t.context,n.stateNumber);return new c({state:e.target,context:r},t)},N.prototype.getConflictingAlts=function(t){var e=y.getConflictingAltSubsets(t);return y.getAlts(e)},N.prototype.getConflictingAltsOrUniqueAlt=function(t){var e=null;return t.uniqueAlt!==u.INVALID_ALT_NUMBER?(e=new o).add(t.uniqueAlt):e=t.conflictingAlts,e},N.prototype.getTokenName=function(t){if(t===p.EOF)return"EOF";if(null!==this.parser&&null!==this.parser.literalNames){if(!(t>=this.parser.literalNames.length&&t>=this.parser.symbolicNames.length))return(this.parser.literalNames[t]||this.parser.symbolicNames[t])+"<"+t+">";console.log(t+" ttype out of range: "+this.parser.literalNames),console.log(""+this.parser.getInputStream().getTokens())}return""+t},N.prototype.getLookaheadName=function(t){return this.getTokenName(t.LA(1))},N.prototype.dumpDeadEndConfigs=function(t){console.log("dead end configs: ");for(var e=t.getDeadEndConfigs(),n=0;n0){var o=r.state.transitions[0];if(o instanceof AtomTransition)i="Atom "+this.getTokenName(o.label);else if(o instanceof S){i=(o instanceof A?"~":"")+"Set "+o.set}}console.error(r.toString(this.parser,!0)+":"+i)}},N.prototype.noViableAlt=function(t,e,n,r){return new I(this.parser,t,t.get(r),t.LT(1),n,e)},N.prototype.getUniqueAlt=function(t){for(var e=u.INVALID_ALT_NUMBER,n=0;n "+r+" upon "+this.getTokenName(n)),null===r)return null;if(r=this.addDFAState(t,r),null===e||n<-1||n>this.atn.maxTokenType)return r;if(null===e.edges&&(e.edges=[]),e.edges[n+1]=r,this.debug){var i=null===this.parser?null:this.parser.literalNames,o=null===this.parser?null:this.parser.symbolicNames;console.log("DFA=\n"+t.toString(i,o))}return r},N.prototype.addDFAState=function(t,e){if(e==d.ERROR)return e;var n=t.states.get(e);return null!==n?n:(e.stateNumber=t.states.length,e.configs.readOnly||(e.configs.optimizeConfigs(this),e.configs.setReadonly(!0)),t.states.add(e),this.debug&&console.log("adding new DFA state: "+e),e)},N.prototype.reportAttemptingFullContext=function(t,e,n,r,i){if(this.debug||this.retry_debug){var o=new T(r,i+1);console.log("reportAttemptingFullContext decision="+t.decision+":"+n+", input="+this.parser.getTokenStream().getText(o))}null!==this.parser&&this.parser.getErrorListenerDispatch().reportAttemptingFullContext(this.parser,t,r,i,e,n)},N.prototype.reportContextSensitivity=function(t,e,n,r,i){if(this.debug||this.retry_debug){var o=new T(r,i+1);console.log("reportContextSensitivity decision="+t.decision+":"+n+", input="+this.parser.getTokenStream().getText(o))}null!==this.parser&&this.parser.getErrorListenerDispatch().reportContextSensitivity(this.parser,t,r,i,e,n)},N.prototype.reportAmbiguity=function(t,e,n,r,i,o,s){if(this.debug||this.retry_debug){var u=new T(n,r+1);console.log("reportAmbiguity "+o+":"+s+", input="+this.parser.getTokenStream().getText(u))}null!==this.parser&&this.parser.getErrorListenerDispatch().reportAmbiguity(this.parser,t,n,r,i,o,s)},e.ParserATNSimulator=N},function(t,e,n){e.DFA=n(53).DFA,e.DFASerializer=n(18).DFASerializer,e.LexerDFASerializer=n(18).LexerDFASerializer,e.PredPrediction=n(11).PredPrediction},function(t,e,n){var r=n(0).Set,i=n(11).DFAState,o=n(3).StarLoopEntryState,s=n(9).ATNConfigSet,u=n(18).DFASerializer,a=n(18).LexerDFASerializer;function c(t,e){if(void 0===e&&(e=0),this.atnStartState=t,this.decision=e,this._states=new r,this.s0=null,this.precedenceDfa=!1,t instanceof o&&t.isPrecedenceDecision){this.precedenceDfa=!0;var n=new i(null,new s);n.edges=[],n.isAcceptState=!1,n.requiresFullContext=!1,this.s0=n}return this}c.prototype.getPrecedenceStartState=function(t){if(!this.precedenceDfa)throw"Only precedence DFAs may contain a precedence start state.";return t<0||t>=this.s0.edges.length?null:this.s0.edges[t]||null},c.prototype.setPrecedenceStartState=function(t,e){if(!this.precedenceDfa)throw"Only precedence DFAs may contain a precedence start state.";t<0||(this.s0.edges[t]=e)},c.prototype.setPrecedenceDfa=function(t){if(this.precedenceDfa!==t){if(this._states=new DFAStatesSet,t){var e=new i(null,new s);e.edges=[],e.isAcceptState=!1,e.requiresFullContext=!1,this.s0=e}else this.s0=null;this.precedenceDfa=t}},Object.defineProperty(c.prototype,"states",{get:function(){return this._states}}),c.prototype.sortedStates=function(){return this._states.values().sort(function(t,e){return t.stateNumber-e.stateNumber})},c.prototype.toString=function(t,e){return t=t||null,e=e||null,null===this.s0?"":new u(this,t,e).toString()},c.prototype.toLexerString=function(){return null===this.s0?"":new a(this).toString()},e.DFA=c},function(t,e,n){var r=n(4);e.Trees=n(22).Trees,e.RuleNode=r.RuleNode,e.ParseTreeListener=r.ParseTreeListener,e.ParseTreeVisitor=r.ParseTreeVisitor,e.ParseTreeWalker=r.ParseTreeWalker},function(t,e,n){e.RecognitionException=n(5).RecognitionException,e.NoViableAltException=n(5).NoViableAltException,e.LexerNoViableAltException=n(5).LexerNoViableAltException,e.InputMismatchException=n(5).InputMismatchException,e.FailedPredicateException=n(5).FailedPredicateException,e.DiagnosticErrorListener=n(56).DiagnosticErrorListener,e.BailErrorStrategy=n(31).BailErrorStrategy,e.ErrorListener=n(17).ErrorListener},function(t,e,n){var r=n(0).BitSet,i=n(17).ErrorListener,o=n(2).Interval;function s(t){return i.call(this),t=t||!0,this.exactOnly=t,this}s.prototype=Object.create(i.prototype),s.prototype.constructor=s,s.prototype.reportAmbiguity=function(t,e,n,r,i,s,u){if(!this.exactOnly||i){var a="reportAmbiguity d="+this.getDecisionDescription(t,e)+": ambigAlts="+this.getConflictingAlts(s,u)+", input='"+t.getTokenStream().getText(new o(n,r))+"'";t.notifyErrorListeners(a)}},s.prototype.reportAttemptingFullContext=function(t,e,n,r,i,s){var u="reportAttemptingFullContext d="+this.getDecisionDescription(t,e)+", input='"+t.getTokenStream().getText(new o(n,r))+"'";t.notifyErrorListeners(u)},s.prototype.reportContextSensitivity=function(t,e,n,r,i,s){var u="reportContextSensitivity d="+this.getDecisionDescription(t,e)+", input='"+t.getTokenStream().getText(new o(n,r))+"'";t.notifyErrorListeners(u)},s.prototype.getDecisionDescription=function(t,e){var n=e.decision,r=e.atnStartState.ruleIndex,i=t.ruleNames;if(r<0||r>=i.length)return""+n;var o=i[r]||null;return null===o||0===o.length?""+n:n+" ("+o+")"},s.prototype.getConflictingAlts=function(t,e){if(null!==t)return t;for(var n=new r,i=0;i=0&&(this.fetchedEOF?this.index0)||this.fetch(e)>=e},u.prototype.fetch=function(t){if(this.fetchedEOF)return 0;for(var e=0;e=this.tokens.length&&(e=this.tokens.length-1);for(var o=t;o=this.tokens.length?this.tokens[this.tokens.length-1]:this.tokens[e]},u.prototype.adjustSeekIndex=function(t){return t},u.prototype.lazyInit=function(){-1===this.index&&this.setup()},u.prototype.setup=function(){this.sync(0),this.index=this.adjustSeekIndex(0)},u.prototype.setTokenSource=function(t){this.tokenSource=t,this.tokens=[],this.index=-1,this.fetchedEOF=!1},u.prototype.nextTokenOnChannel=function(t,e){if(this.sync(t),t>=this.tokens.length)return-1;for(var n=this.tokens[t];n.channel!==this.channel;){if(n.type===r.EOF)return-1;t+=1,this.sync(t),n=this.tokens[t]}return t},u.prototype.previousTokenOnChannel=function(t,e){for(;t>=0&&this.tokens[t].channel!==e;)t-=1;return t},u.prototype.getHiddenTokensToRight=function(t,e){if(void 0===e&&(e=-1),this.lazyInit(),t<0||t>=this.tokens.length)throw t+" not in 0.."+this.tokens.length-1;var n=this.nextTokenOnChannel(t+1,i.DEFAULT_TOKEN_CHANNEL),r=t+1,o=-1===n?this.tokens.length-1:n;return this.filterForChannel(r,o,e)},u.prototype.getHiddenTokensToLeft=function(t,e){if(void 0===e&&(e=-1),this.lazyInit(),t<0||t>=this.tokens.length)throw t+" not in 0.."+this.tokens.length-1;var n=this.previousTokenOnChannel(t-1,i.DEFAULT_TOKEN_CHANNEL);if(n===t-1)return null;var r=n+1,o=t-1;return this.filterForChannel(r,o,e)},u.prototype.filterForChannel=function(t,e,n){for(var r=[],o=t;o=this.tokens.length&&(n=this.tokens.length-1);for(var i="",s=e;s=0&&this._parseListeners.splice(e,1),0===this._parseListeners.length&&(this._parseListeners=null)}},h.prototype.removeParseListeners=function(){this._parseListeners=null},h.prototype.triggerEnterRuleEvent=function(){if(null!==this._parseListeners){var t=this._ctx;this._parseListeners.map(function(e){e.enterEveryRule(t),t.enterRule(e)})}},h.prototype.triggerExitRuleEvent=function(){if(null!==this._parseListeners){var t=this._ctx;this._parseListeners.slice(0).reverse().map(function(e){t.exitRule(e),e.exitEveryRule(t)})}},h.prototype.getTokenFactory=function(){return this._input.tokenSource._factory},h.prototype.setTokenFactory=function(t){this._input.tokenSource._factory=t},h.prototype.getATNWithBypassAlts=function(){var t=this.getSerializedATN();if(null===t)throw"The current parser does not support an ATN with bypass alternatives.";var e=this.bypassAltsAtnCache[t];if(null===e){var n=new a;n.generateRuleBypassTransitions=!0,e=new u(n).deserialize(t),this.bypassAltsAtnCache[t]=e}return e};var f=n(16).Lexer;h.prototype.compileParseTreePattern=function(t,e,n){if(null===(n=n||null)&&null!==this.getTokenStream()){var r=this.getTokenStream().tokenSource;r instanceof f&&(n=r)}if(null===n)throw"Parser can't discover a lexer to use";return new ParseTreePatternMatcher(n,this).compile(t,e)},h.prototype.getInputStream=function(){return this.getTokenStream()},h.prototype.setInputStream=function(t){this.setTokenStream(t)},h.prototype.getTokenStream=function(){return this._input},h.prototype.setTokenStream=function(t){this._input=null,this.reset(),this._input=t},h.prototype.getCurrentToken=function(){return this._input.LT(1)},h.prototype.notifyErrorListeners=function(t,e,n){n=n||null,null===(e=e||null)&&(e=this.getCurrentToken()),this._syntaxErrors+=1;var r=e.line,i=e.column;this.getErrorListenerDispatch().syntaxError(this,e,r,i,t,n)},h.prototype.consume=function(){var t=this.getCurrentToken();t.type!==r.EOF&&this.getInputStream().consume();var e,n=null!==this._parseListeners&&this._parseListeners.length>0;(this.buildParseTrees||n)&&((e=this._errHandler.inErrorRecoveryMode(this)?this._ctx.addErrorNode(t):this._ctx.addTokenNode(t)).invokingState=this.state,n&&this._parseListeners.map(function(t){e instanceof l||void 0!==e.isErrorNode&&e.isErrorNode()?t.visitErrorNode(e):e instanceof c&&t.visitTerminal(e)}));return t},h.prototype.addContextToParseTree=function(){null!==this._ctx.parentCtx&&this._ctx.parentCtx.addChild(this._ctx)},h.prototype.enterRule=function(t,e,n){this.state=e,this._ctx=t,this._ctx.start=this._input.LT(1),this.buildParseTrees&&this.addContextToParseTree(),null!==this._parseListeners&&this.triggerEnterRuleEvent()},h.prototype.exitRule=function(){this._ctx.stop=this._input.LT(-1),null!==this._parseListeners&&this.triggerExitRuleEvent(),this.state=this._ctx.invokingState,this._ctx=this._ctx.parentCtx},h.prototype.enterOuterAlt=function(t,e){t.setAltNumber(e),this.buildParseTrees&&this._ctx!==t&&null!==this._ctx.parentCtx&&(this._ctx.parentCtx.removeLastChild(),this._ctx.parentCtx.addChild(t)),this._ctx=t},h.prototype.getPrecedence=function(){return 0===this._precedenceStack.length?-1:this._precedenceStack[this._precedenceStack.length-1]},h.prototype.enterRecursionRule=function(t,e,n,r){this.state=e,this._precedenceStack.push(r),this._ctx=t,this._ctx.start=this._input.LT(1),null!==this._parseListeners&&this.triggerEnterRuleEvent()},h.prototype.pushNewRecursionContext=function(t,e,n){var r=this._ctx;r.parentCtx=t,r.invokingState=e,r.stop=this._input.LT(-1),this._ctx=t,this._ctx.start=r.start,this.buildParseTrees&&this._ctx.addChild(r),null!==this._parseListeners&&this.triggerEnterRuleEvent()},h.prototype.unrollRecursionContexts=function(t){this._precedenceStack.pop(),this._ctx.stop=this._input.LT(-1);var e=this._ctx;if(null!==this._parseListeners)for(;this._ctx!==t;)this.triggerExitRuleEvent(),this._ctx=this._ctx.parentCtx;else this._ctx=t;e.parentCtx=t,this.buildParseTrees&&null!==t&&t.addChild(e)},h.prototype.getInvokingContext=function(t){for(var e=this._ctx;null!==e;){if(e.ruleIndex===t)return e;e=e.parentCtx}return null},h.prototype.precpred=function(t,e){return e>=this._precedenceStack[this._precedenceStack.length-1]},h.prototype.inContext=function(t){return!1},h.prototype.isExpectedToken=function(t){var e=this._interp.atn,n=this._ctx,i=e.states[this.state],o=e.nextTokens(i);if(o.contains(t))return!0;if(!o.contains(r.EPSILON))return!1;for(;null!==n&&n.invokingState>=0&&o.contains(r.EPSILON);){var s=e.states[n.invokingState].transitions[0];if((o=e.nextTokens(s.followState)).contains(t))return!0;n=n.parentCtx}return!(!o.contains(r.EPSILON)||t!==r.EOF)},h.prototype.getExpectedTokens=function(){return this._interp.atn.getExpectedTokens(this.state,this._ctx)},h.prototype.getExpectedTokensWithinCurrentRule=function(){var t=this._interp.atn,e=t.states[this.state];return t.nextTokens(e)},h.prototype.getRuleIndex=function(t){var e=this.getRuleIndexMap()[t];return null!==e?e:-1},h.prototype.getRuleInvocationStack=function(t){null===(t=t||null)&&(t=this._ctx);for(var e=[];null!==t;){var n=t.ruleIndex;n<0?e.push("n/a"):e.push(this.ruleNames[n]),t=t.parentCtx}return e},h.prototype.getDFAStrings=function(){return this._interp.decisionToDFA.toString()},h.prototype.dumpDFA=function(){for(var t=!1,e=0;e0&&(t&&console.log(),this.printer.println("Decision "+n.decision+":"),this.printer.print(n.toString(this.literalNames,this.symbolicNames)),t=!0)}},h.prototype.getSourceName=function(){return this._input.sourceName},h.prototype.setTrace=function(t){t?(null!==this._tracer&&this.removeParseListener(this._tracer),this._tracer=new p(this),this.addParseListener(this._tracer)):(this.removeParseListener(this._tracer),this._tracer=null)},e.Parser=h},function(t,e,n){var r=n(13),i=["悋Ꜫ脳맭䅼㯧瞆奤","?DZ\b\t\t","\t\t\t\t","\b\t\b\t\t\t\n\t\n\v\t\v","\f\t\f\r\t\r\t\t","\t\t\t\t","\t\t\t","\t\t\t\t","\t\t\t",'\t\t \t !\t!"\t"#',"\t#$\t$%\t%&\t&'\t'(\t()\t)","*\t*+\t+,\t,-\t-.\t./\t/0\t0","1\t12\t23\t34\t45\t56\t67\t7","8\t89\t9:\t:;\t;<\t<=\t=>\t>","?\t?@\t@A\tAB\tB","","\b\b\t\t","\t\t\n\n\n\n\v\v","\f\f\r\r\r","","","","","","","","","","  !",'!!!!"""""','"##$$$$$$%',"%&&&&&''''","''((((())","))*****+++","++++,,,,,,",",---------","---....../","//////0000","0011111222","2223333333","3444444445","5555555555","5566666666","666666ű\n66ų\n6","6ŵ\n666Ÿ\n67777","8888888888","8ƈ\n8\r88Ɖ8ƌ\n88Ǝ\n88Ɛ","\n888888888ƙ\n","899Ɯ\n999Ɵ\n9\f99Ƣ\v","9::::Ƨ\n:\f::ƪ\v:","::;;;;Ʊ\n;\f;;ƴ\v",";;;<<ƹ\n<\r<<ƺ<","<<ƿ\n<\r<<ǀ<ǃ\n<==dž","\n=\r==LJ==>>>>",">ǐ\n>\f>>Ǔ\v>>>>>",">?????Ǟ\n?\f??ǡ\v","???@@@@Ǩ\n@AA","AAAABBǑC","\t\v\r\b\t\n","\v\f\r","!#%')+-/13","579;= ?!A\"C#E$G%I&K'M(O)Q*S+U,W-Y.[/]0_1a","2c3e4g5i6k7m8oq9s:u;w}?ƒ","\f2;--//C\\aac|","2;C\\aac|$$^^))\v\f",'""\f\f\n$$))11^^hhppttvv',"2;CHchȂ","\t","\v\r","","","","","!","#%","')","+-","/1","35","79;","=?","AC","EG","IK","MOQ","SU","WY","[]","_a","ceg","ik","mq","su","wy","{}…","‡‰","\t‹\v","\r‘","“—","›","Ÿ¢","¤¦","!©#¬","%¯'±",")³+¶","-¹/¼","1Å3É5Ì","7Ð9Ø",";Ú=Ü","?ÞAà","CåEë","GíIóKõ","MúOĀ","QąSĉ","UĎWĕ","YĜ[Ĩ","]Į_ĵaĻ","cŀeņ","gŎiŖ","kţmŹ","oŽqƛ","sƣuƭwƸ","yDž{Nj","}ǙǤ","ǩƒǯ","…†0†","‡ˆ]ˆ","‰Š_Š\b","‹Œ-Œ\n","Ž/Ž\f",",","‘’1’","“”f”•k•","–x–—","˜o˜™q™š","fš›œ","(œž","~žŸ ","> ¡?¡","¢£>£","¤¥@¥","¦§@§¨","?¨ ©ªk",'ª«u«"',"¬­c­®u®","$¯°?°&","±²€²(","³´#´µ","?µ*¶·#","·¸€¸,","¹ºkº»p","».¼½e½","¾q¾¿p¿À","vÀÁcÁÂ","kÂÃpÃÄu","Ä0ÅÆc","ÆÇpÇÈfÈ","2ÉÊqÊË","tË4ÌÍ","zÍÎqÎÏt","Ï6ÐÑk","ÑÒoÒÓrÓ","ÔnÔÕkÕÖ","gÖ×u×8","ØÙ*Ù:","ÚÛ+Û<","ÜÝ}Ý>Þ","ßß@à","áváâtâã","wãägäB","åæhæçc","çènèéu","éêgêDë","ì'ìFíî","&îïvïð","jðñkñòu","òHóô.","ôJõö{ö","÷g÷øcøù","tùLúû","oûüqüýp","ýþvþÿj","ÿNĀāyā","ĂgĂăgăĄ","mĄPąĆ","fĆćcćĈ{","ĈRĉĊj","ĊċqċČwČ","čtčTĎď","oďĐkĐđ","pđĒwĒēv","ēĔgĔV","ĕĖuĖėgė","ĘeĘęqęĚ","pĚěfěX","ĜĝoĝĞk","ĞğnğĠn","ĠġkġĢuĢ","ģgģĤeĤĥ","qĥĦpĦħ","fħZĨĩ{","ĩĪgĪīc","īĬtĬĭuĭ","\\Įįoįİ","qİıpıIJ","vIJijjijĴu","Ĵ^ĵĶy","Ķķgķĸgĸ","ĹmĹĺuĺ`","ĻļfļĽ","cĽľ{ľĿu","ĿbŀŁj","ŁłqłŃwŃ","ńtńŅuŅd","ņŇoŇň","kňʼnpʼnŊw","ŊŋvŋŌg","ŌōuōfŎ","ŏuŏŐgŐő","eőŒqŒœ","pœŔfŔŕu","ŕhŖŗo","ŗŘkŘřnř","ŚnŚśkśŜ","uŜŝgŝŞ","eŞşqşŠp","ŠšfšŢu","ŢjţŤBŤ","ť\tťŦ\tŦŧ","\tŧŴ\tŨũ","/ũŪ\tŪŲ\t","ūŬ/Ŭŭ\t","ŭŰ\tŮůVů","űo8ŰŮŰű","űųŲū","Ųųųŵ","ŴŨŴŵ","ŵŷŶŸ","\\ŷŶŷŸ","ŸlŹź","BźŻVŻż","o8żnŽž\t","žƏ\tſƀ<ƀ","Ɓ\tƁƍ\tƂƃ","<ƃƄ\tƄƋ\t","ƅƇ0Ɔƈ\t","ƇƆƈƉ","ƉƇƉƊ","ƊƌƋƅ","ƋƌƌƎ","ƍƂƍƎ","ƎƐƏſ","ƏƐƐƘ","Ƒƙ\\ƒƓ\t","ƓƔ\tƔƕ\tƕ","Ɩ<ƖƗ\tƗƙ","\tƘƑƘƒ","Ƙƙƙp","ƚƜ\tƛƚ","ƜƠƝƟ","\tƞƝƟƢ","ƠƞƠơ","ơrƢƠ","ƣƨ$ƤƧ","@ƥƧ\nƦƤ","ƦƥƧƪ","ƨƦƨƩ","Ʃƫƪƨ","ƫƬ$Ƭt","ƭƲ)ƮƱ","@ƯƱ\nưƮ","ưƯƱƴ","ƲưƲƳ","ƳƵƴƲ","Ƶƶ)ƶv","Ʒƹ\tƸƷ","ƹƺƺƸ","ƺƻƻǂ","Ƽƾ0ƽƿ\tƾ","ƽƿǀǀ","ƾǀǁǁ","ǃǂƼǂ","ǃǃxDŽ","dž\t\bDžDŽdžLJ","LJDžLJLj","LjljljNJ","\b=NJzNjnj1","njǍ,ǍǑ","ǎǐ\vǏǎ","ǐǓǑǒ","ǑǏǒǔ","ǓǑǔǕ,","Ǖǖ1ǖǗ","Ǘǘ\b>ǘ|Ǚ","ǚ1ǚǛ1Ǜǟ","ǜǞ\n\tǝǜ","Ǟǡǟǝ","ǟǠǠǢ","ǡǟǢǣ\b","?ǣ~Ǥǧ^","ǥǨ\t\nǦǨAǧ","ǥǧǦǨ","€ǩǪwǪ","ǫƒBǫǬƒBǬǭ","ƒBǭǮƒBǮ‚","ǯǰ\t\vǰ„","ŰŲŴŷƉƋƍ","ƏƘƛƞƠƦƨưƲƺǀǂ","LJǑǟǧ"].join(""),o=(new r.atn.ATNDeserializer).deserialize(i),s=o.decisionToState.map(function(t,e){return new r.dfa.DFA(t,e)});function u(t){return r.Lexer.call(this,t),this._interp=new r.atn.LexerATNSimulator(this,o,s,new r.PredictionContextCache),this}u.prototype=Object.create(r.Lexer.prototype),u.prototype.constructor=u,Object.defineProperty(u.prototype,"atn",{get:function(){return o}}),u.EOF=r.Token.EOF,u.T__0=1,u.T__1=2,u.T__2=3,u.T__3=4,u.T__4=5,u.T__5=6,u.T__6=7,u.T__7=8,u.T__8=9,u.T__9=10,u.T__10=11,u.T__11=12,u.T__12=13,u.T__13=14,u.T__14=15,u.T__15=16,u.T__16=17,u.T__17=18,u.T__18=19,u.T__19=20,u.T__20=21,u.T__21=22,u.T__22=23,u.T__23=24,u.T__24=25,u.T__25=26,u.T__26=27,u.T__27=28,u.T__28=29,u.T__29=30,u.T__30=31,u.T__31=32,u.T__32=33,u.T__33=34,u.T__34=35,u.T__35=36,u.T__36=37,u.T__37=38,u.T__38=39,u.T__39=40,u.T__40=41,u.T__41=42,u.T__42=43,u.T__43=44,u.T__44=45,u.T__45=46,u.T__46=47,u.T__47=48,u.T__48=49,u.T__49=50,u.T__50=51,u.T__51=52,u.DATETIME=53,u.TIME=54,u.IDENTIFIER=55,u.QUOTEDIDENTIFIER=56,u.STRING=57,u.NUMBER=58,u.WS=59,u.COMMENT=60,u.LINE_COMMENT=61,u.prototype.channelNames=["DEFAULT_TOKEN_CHANNEL","HIDDEN"],u.prototype.modeNames=["DEFAULT_MODE"],u.prototype.literalNames=[null,"'.'","'['","']'","'+'","'-'","'*'","'/'","'div'","'mod'","'&'","'|'","'<='","'<'","'>'","'>='","'is'","'as'","'='","'~'","'!='","'!~'","'in'","'contains'","'and'","'or'","'xor'","'implies'","'('","')'","'{'","'}'","'true'","'false'","'%'","'$this'","','","'year'","'month'","'week'","'day'","'hour'","'minute'","'second'","'millisecond'","'years'","'months'","'weeks'","'days'","'hours'","'minutes'","'seconds'","'milliseconds'"],u.prototype.symbolicNames=[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"DATETIME","TIME","IDENTIFIER","QUOTEDIDENTIFIER","STRING","NUMBER","WS","COMMENT","LINE_COMMENT"],u.prototype.ruleNames=["T__0","T__1","T__2","T__3","T__4","T__5","T__6","T__7","T__8","T__9","T__10","T__11","T__12","T__13","T__14","T__15","T__16","T__17","T__18","T__19","T__20","T__21","T__22","T__23","T__24","T__25","T__26","T__27","T__28","T__29","T__30","T__31","T__32","T__33","T__34","T__35","T__36","T__37","T__38","T__39","T__40","T__41","T__42","T__43","T__44","T__45","T__46","T__47","T__48","T__49","T__50","T__51","DATETIME","TIME","TIMEFORMAT","IDENTIFIER","QUOTEDIDENTIFIER","STRING","NUMBER","WS","COMMENT","LINE_COMMENT","ESC","UNICODE","HEX"],u.prototype.grammarFileName="FHIRPath.g4",e.FHIRPathLexer=u},function(t,e,n){var r=n(13),i=n(33).FHIRPathListener,o=["悋Ꜫ脳맭䅼㯧瞆奤","?“\t\t\t","\t\t\t","\b\t\b\t\t\t\n\t\n\v\t\v\f\t\f","\r\t\r\t\t","#\n","","","","","","","K\n\fN\v","","W\n","a\n","","i\nn\n","\b\b\b\bu\n\b\f\b","\bx\v\b\t\t\t|\n\t\n\n\n","\n\n\n\v\v\f\f\r\r","Œ\n\f","\v","\b\n\f","\b","\v\f\f","","\"#'./6",'9:¢"',"V`\bb","\nh\fj","qy","€‚","„†","ˆ","\b# !\t",'!#\r""'," #L$%\f\f","%&\t&K\r'(\f\v","()\t)K\f*+\f\n+,","\r,K\v-.\f\t./\t","/K\n01\f12\t","2K\b34\f45\t","5K67\f78","8K9:\f:;\t\b",";K<=\f=>",">K?@\f@A","AK\nBC\fCD","DEEFFK","GH\f\bHI\t\tIK","\rJ$J'J*","J-J0","J3J6J9","J<J?JB","JGKNLJ","LMM","NLOW\nPW","QW\bRSST","TUUW","VOVPVQ","VRWXY"," Ya!Za\t\n[a;","\\a<]a7^a8","_a\t`X`Z","`[`\\`]","`^`_","abc$cd","d\teifi","\fgi%hehf","hgi\v","jkkmln","\bmlmnno","opp\r","qvrs&su","truxvt","vww","xvy{<z|\n","{z{||","}\v~\f",";€}€","~€","‚ƒ\t\vƒ","„…\t\f…","†‡‡","ˆ‰Š","ŠŒ‹‰","Œ‹","ŽŽ","‘",'\t\r‘\r"JLV`hmv{€',""].join(""),s=(new r.atn.ATNDeserializer).deserialize(o),u=s.decisionToState.map(function(t,e){return new r.dfa.DFA(t,e)}),a=new r.PredictionContextCache,c=[null,"'.'","'['","']'","'+'","'-'","'*'","'/'","'div'","'mod'","'&'","'|'","'<='","'<'","'>'","'>='","'is'","'as'","'='","'~'","'!='","'!~'","'in'","'contains'","'and'","'or'","'xor'","'implies'","'('","')'","'{'","'}'","'true'","'false'","'%'","'$this'","','","'year'","'month'","'week'","'day'","'hour'","'minute'","'second'","'millisecond'","'years'","'months'","'weeks'","'days'","'hours'","'minutes'","'seconds'","'milliseconds'"],l=[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"DATETIME","TIME","IDENTIFIER","QUOTEDIDENTIFIER","STRING","NUMBER","WS","COMMENT","LINE_COMMENT"],p=["expression","term","literal","externalConstant","invocation","functn","paramList","quantity","unit","dateTimePrecision","pluralDateTimePrecision","typeSpecifier","qualifiedIdentifier","identifier"];function h(t){return r.Parser.call(this,t),this._interp=new r.atn.ParserATNSimulator(this,s,u,a),this.ruleNames=p,this.literalNames=c,this.symbolicNames=l,this}function f(t,e,n){return void 0===e&&(e=null),null==n&&(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=h.RULE_expression,this}function d(t,e){return f.call(this,t),f.prototype.copyFrom.call(this,e),this}function y(t,e){return f.call(this,t),f.prototype.copyFrom.call(this,e),this}function g(t,e){return f.call(this,t),f.prototype.copyFrom.call(this,e),this}function _(t,e){return f.call(this,t),f.prototype.copyFrom.call(this,e),this}function v(t,e){return f.call(this,t),f.prototype.copyFrom.call(this,e),this}function x(t,e){return f.call(this,t),f.prototype.copyFrom.call(this,e),this}function T(t,e){return f.call(this,t),f.prototype.copyFrom.call(this,e),this}function m(t,e){return f.call(this,t),f.prototype.copyFrom.call(this,e),this}function E(t,e){return f.call(this,t),f.prototype.copyFrom.call(this,e),this}function S(t,e){return f.call(this,t),f.prototype.copyFrom.call(this,e),this}function A(t,e){return f.call(this,t),f.prototype.copyFrom.call(this,e),this}function C(t,e){return f.call(this,t),f.prototype.copyFrom.call(this,e),this}function b(t,e){return f.call(this,t),f.prototype.copyFrom.call(this,e),this}function I(t,e){return f.call(this,t),f.prototype.copyFrom.call(this,e),this}function R(t,e,n){return void 0===e&&(e=null),null==n&&(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=h.RULE_term,this}function O(t,e){return R.call(this,t),R.prototype.copyFrom.call(this,e),this}function N(t,e){return R.call(this,t),R.prototype.copyFrom.call(this,e),this}function w(t,e){return R.call(this,t),R.prototype.copyFrom.call(this,e),this}function L(t,e){return R.call(this,t),R.prototype.copyFrom.call(this,e),this}function k(t,e,n){return void 0===e&&(e=null),null==n&&(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=h.RULE_literal,this}function P(t,e){return k.call(this,t),k.prototype.copyFrom.call(this,e),this}function F(t,e){return k.call(this,t),k.prototype.copyFrom.call(this,e),this}function D(t,e){return k.call(this,t),k.prototype.copyFrom.call(this,e),this}function M(t,e){return k.call(this,t),k.prototype.copyFrom.call(this,e),this}function j(t,e){return k.call(this,t),k.prototype.copyFrom.call(this,e),this}function U(t,e){return k.call(this,t),k.prototype.copyFrom.call(this,e),this}function B(t,e){return k.call(this,t),k.prototype.copyFrom.call(this,e),this}function H(t,e,n){return void 0===e&&(e=null),null==n&&(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=h.RULE_externalConstant,this}function z(t,e,n){return void 0===e&&(e=null),null==n&&(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=h.RULE_invocation,this}function q(t,e){return z.call(this,t),z.prototype.copyFrom.call(this,e),this}function V(t,e){return z.call(this,t),z.prototype.copyFrom.call(this,e),this}function W(t,e){return z.call(this,t),z.prototype.copyFrom.call(this,e),this}function K(t,e,n){return void 0===e&&(e=null),null==n&&(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=h.RULE_functn,this}function Y(t,e,n){return void 0===e&&(e=null),null==n&&(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=h.RULE_paramList,this}function $(t,e,n){return void 0===e&&(e=null),null==n&&(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=h.RULE_quantity,this}function G(t,e,n){return void 0===e&&(e=null),null==n&&(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=h.RULE_unit,this}function J(t,e,n){return void 0===e&&(e=null),null==n&&(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=h.RULE_dateTimePrecision,this}function Q(t,e,n){return void 0===e&&(e=null),null==n&&(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=h.RULE_pluralDateTimePrecision,this}function X(t,e,n){return void 0===e&&(e=null),null==n&&(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=h.RULE_typeSpecifier,this}function Z(t,e,n){return void 0===e&&(e=null),null==n&&(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=h.RULE_qualifiedIdentifier,this}function tt(t,e,n){return void 0===e&&(e=null),null==n&&(n=-1),r.ParserRuleContext.call(this,e,n),this.parser=t,this.ruleIndex=h.RULE_identifier,this}h.prototype=Object.create(r.Parser.prototype),h.prototype.constructor=h,Object.defineProperty(h.prototype,"atn",{get:function(){return s}}),h.EOF=r.Token.EOF,h.T__0=1,h.T__1=2,h.T__2=3,h.T__3=4,h.T__4=5,h.T__5=6,h.T__6=7,h.T__7=8,h.T__8=9,h.T__9=10,h.T__10=11,h.T__11=12,h.T__12=13,h.T__13=14,h.T__14=15,h.T__15=16,h.T__16=17,h.T__17=18,h.T__18=19,h.T__19=20,h.T__20=21,h.T__21=22,h.T__22=23,h.T__23=24,h.T__24=25,h.T__25=26,h.T__26=27,h.T__27=28,h.T__28=29,h.T__29=30,h.T__30=31,h.T__31=32,h.T__32=33,h.T__33=34,h.T__34=35,h.T__35=36,h.T__36=37,h.T__37=38,h.T__38=39,h.T__39=40,h.T__40=41,h.T__41=42,h.T__42=43,h.T__43=44,h.T__44=45,h.T__45=46,h.T__46=47,h.T__47=48,h.T__48=49,h.T__49=50,h.T__50=51,h.T__51=52,h.DATETIME=53,h.TIME=54,h.IDENTIFIER=55,h.QUOTEDIDENTIFIER=56,h.STRING=57,h.NUMBER=58,h.WS=59,h.COMMENT=60,h.LINE_COMMENT=61,h.RULE_expression=0,h.RULE_term=1,h.RULE_literal=2,h.RULE_externalConstant=3,h.RULE_invocation=4,h.RULE_functn=5,h.RULE_paramList=6,h.RULE_quantity=7,h.RULE_unit=8,h.RULE_dateTimePrecision=9,h.RULE_pluralDateTimePrecision=10,h.RULE_typeSpecifier=11,h.RULE_qualifiedIdentifier=12,h.RULE_identifier=13,f.prototype=Object.create(r.ParserRuleContext.prototype),f.prototype.constructor=f,f.prototype.copyFrom=function(t){r.ParserRuleContext.prototype.copyFrom.call(this,t)},d.prototype=Object.create(f.prototype),d.prototype.constructor=d,h.IndexerExpressionContext=d,d.prototype.expression=function(t){return void 0===t&&(t=null),null===t?this.getTypedRuleContexts(f):this.getTypedRuleContext(f,t)},d.prototype.enterRule=function(t){t instanceof i&&t.enterIndexerExpression(this)},d.prototype.exitRule=function(t){t instanceof i&&t.exitIndexerExpression(this)},y.prototype=Object.create(f.prototype),y.prototype.constructor=y,h.PolarityExpressionContext=y,y.prototype.expression=function(){return this.getTypedRuleContext(f,0)},y.prototype.enterRule=function(t){t instanceof i&&t.enterPolarityExpression(this)},y.prototype.exitRule=function(t){t instanceof i&&t.exitPolarityExpression(this)},g.prototype=Object.create(f.prototype),g.prototype.constructor=g,h.AdditiveExpressionContext=g,g.prototype.expression=function(t){return void 0===t&&(t=null),null===t?this.getTypedRuleContexts(f):this.getTypedRuleContext(f,t)},g.prototype.enterRule=function(t){t instanceof i&&t.enterAdditiveExpression(this)},g.prototype.exitRule=function(t){t instanceof i&&t.exitAdditiveExpression(this)},_.prototype=Object.create(f.prototype),_.prototype.constructor=_,h.MultiplicativeExpressionContext=_,_.prototype.expression=function(t){return void 0===t&&(t=null),null===t?this.getTypedRuleContexts(f):this.getTypedRuleContext(f,t)},_.prototype.enterRule=function(t){t instanceof i&&t.enterMultiplicativeExpression(this)},_.prototype.exitRule=function(t){t instanceof i&&t.exitMultiplicativeExpression(this)},v.prototype=Object.create(f.prototype),v.prototype.constructor=v,h.UnionExpressionContext=v,v.prototype.expression=function(t){return void 0===t&&(t=null),null===t?this.getTypedRuleContexts(f):this.getTypedRuleContext(f,t)},v.prototype.enterRule=function(t){t instanceof i&&t.enterUnionExpression(this)},v.prototype.exitRule=function(t){t instanceof i&&t.exitUnionExpression(this)},x.prototype=Object.create(f.prototype),x.prototype.constructor=x,h.OrExpressionContext=x,x.prototype.expression=function(t){return void 0===t&&(t=null),null===t?this.getTypedRuleContexts(f):this.getTypedRuleContext(f,t)},x.prototype.enterRule=function(t){t instanceof i&&t.enterOrExpression(this)},x.prototype.exitRule=function(t){t instanceof i&&t.exitOrExpression(this)},T.prototype=Object.create(f.prototype),T.prototype.constructor=T,h.AndExpressionContext=T,T.prototype.expression=function(t){return void 0===t&&(t=null),null===t?this.getTypedRuleContexts(f):this.getTypedRuleContext(f,t)},T.prototype.enterRule=function(t){t instanceof i&&t.enterAndExpression(this)},T.prototype.exitRule=function(t){t instanceof i&&t.exitAndExpression(this)},m.prototype=Object.create(f.prototype),m.prototype.constructor=m,h.MembershipExpressionContext=m,m.prototype.expression=function(t){return void 0===t&&(t=null),null===t?this.getTypedRuleContexts(f):this.getTypedRuleContext(f,t)},m.prototype.enterRule=function(t){t instanceof i&&t.enterMembershipExpression(this)},m.prototype.exitRule=function(t){t instanceof i&&t.exitMembershipExpression(this)},E.prototype=Object.create(f.prototype),E.prototype.constructor=E,h.InequalityExpressionContext=E,E.prototype.expression=function(t){return void 0===t&&(t=null),null===t?this.getTypedRuleContexts(f):this.getTypedRuleContext(f,t)},E.prototype.enterRule=function(t){t instanceof i&&t.enterInequalityExpression(this)},E.prototype.exitRule=function(t){t instanceof i&&t.exitInequalityExpression(this)},S.prototype=Object.create(f.prototype),S.prototype.constructor=S,h.InvocationExpressionContext=S,S.prototype.expression=function(){return this.getTypedRuleContext(f,0)},S.prototype.invocation=function(){return this.getTypedRuleContext(z,0)},S.prototype.enterRule=function(t){t instanceof i&&t.enterInvocationExpression(this)},S.prototype.exitRule=function(t){t instanceof i&&t.exitInvocationExpression(this)},A.prototype=Object.create(f.prototype),A.prototype.constructor=A,h.EqualityExpressionContext=A,A.prototype.expression=function(t){return void 0===t&&(t=null),null===t?this.getTypedRuleContexts(f):this.getTypedRuleContext(f,t)},A.prototype.enterRule=function(t){t instanceof i&&t.enterEqualityExpression(this)},A.prototype.exitRule=function(t){t instanceof i&&t.exitEqualityExpression(this)},C.prototype=Object.create(f.prototype),C.prototype.constructor=C,h.ImpliesExpressionContext=C,C.prototype.expression=function(t){return void 0===t&&(t=null),null===t?this.getTypedRuleContexts(f):this.getTypedRuleContext(f,t)},C.prototype.enterRule=function(t){t instanceof i&&t.enterImpliesExpression(this)},C.prototype.exitRule=function(t){t instanceof i&&t.exitImpliesExpression(this)},b.prototype=Object.create(f.prototype),b.prototype.constructor=b,h.TermExpressionContext=b,b.prototype.term=function(){return this.getTypedRuleContext(R,0)},b.prototype.enterRule=function(t){t instanceof i&&t.enterTermExpression(this)},b.prototype.exitRule=function(t){t instanceof i&&t.exitTermExpression(this)},I.prototype=Object.create(f.prototype),I.prototype.constructor=I,h.TypeExpressionContext=I,I.prototype.expression=function(){return this.getTypedRuleContext(f,0)},I.prototype.typeSpecifier=function(){return this.getTypedRuleContext(X,0)},I.prototype.enterRule=function(t){t instanceof i&&t.enterTypeExpression(this)},I.prototype.exitRule=function(t){t instanceof i&&t.exitTypeExpression(this)},h.prototype.expression=function(t){void 0===t&&(t=0);var e=this._ctx,n=this.state,i=new f(this,this._ctx,n);this.enterRecursionRule(i,0,h.RULE_expression,t);var o=0;try{switch(this.enterOuterAlt(i,1),this.state=32,this._errHandler.sync(this),this._input.LA(1)){case h.T__15:case h.T__16:case h.T__22:case h.T__27:case h.T__29:case h.T__31:case h.T__32:case h.T__33:case h.T__34:case h.DATETIME:case h.TIME:case h.IDENTIFIER:case h.QUOTEDIDENTIFIER:case h.STRING:case h.NUMBER:i=new b(this,i),this._ctx=i,i,this.state=29,this.term();break;case h.T__3:case h.T__4:i=new y(this,i),this._ctx=i,i,this.state=30,(o=this._input.LA(1))!==h.T__3&&o!==h.T__4?this._errHandler.recoverInline(this):(this._errHandler.reportMatch(this),this.consume()),this.state=31,this.expression(11);break;default:throw new r.error.NoViableAltException(this)}this._ctx.stop=this._input.LT(-1),this.state=74,this._errHandler.sync(this);for(var s=this._interp.adaptivePredict(this._input,2,this._ctx);2!=s&&s!=r.atn.ATN.INVALID_ALT_NUMBER;){if(1===s)switch(null!==this._parseListeners&&this.triggerExitRuleEvent(),i,this.state=72,this._errHandler.sync(this),this._interp.adaptivePredict(this._input,1,this._ctx)){case 1:if(i=new _(this,new f(this,e,n)),this.pushNewRecursionContext(i,0,h.RULE_expression),this.state=34,!this.precpred(this._ctx,10))throw new r.error.FailedPredicateException(this,"this.precpred(this._ctx, 10)");this.state=35,0!=(-32&(o=this._input.LA(1)))||0==(1<e[0]):[]},s.lte=function(t,e){return t.length&&e.length?(c(t,e),t[0]<=e[0]):[]},s.gte=function(t,e){return t.length&&e.length?(c(t,e),t[0]>=e[0]):[]},t.exports=s},function(t,e,n){var r=n(36),i={};function o(t,e){if(0==e.length)return!0;for(var n=0;n1)throw new Error("Expected singleton on right side of contains, got "+JSON.stringify(e));return o(t,e)},i.in=function(t,e){if(0==t.length)return[];if(0==e.length)return!1;if(t.length>1)throw new Error("Expected singleton on right side of in, got "+JSON.stringify(e));return o(e,t)},t.exports=i},function(t,e){var n={amp:function(t,e){return(t||"")+(e||"")},plus:function(t,e){if(1==t.length&&1==e.length){var n=t[0],r=e[0];if("string"==typeof n&&"string"==typeof r)return n+r;if("number"==typeof n&&"number"==typeof r)return n+r}throw new Error("Can not "+JSON.stringify(t)+" + "+JSON.stringify(e))},minus:function(t,e){return t-e},mul:function(t,e){return t*e},div:function(t,e){return t/e},intdiv:function(t,e){return Math.floor(t/e)},mod:function(t,e){return t%e}};t.exports=n},function(t,e){var n={};function r(t){if(1==t.length&&"string"==typeof t[0])return t[0];throw new Error("Expected string, but got "+JSON.stringify(t))}n.indexOf=function(t,e){return r(t).indexOf(e)},n.substring=function(t,e,n){return r(t).substring(e,e+n)},n.startsWith=function(t,e){return r(t).startsWith(e)},n.endsWith=function(t,e){return r(t).endsWith(e)},n.containsFn=function(t,e){return r(t).includes(e)},n.matches=function(t,e){var n=r(t);return new RegExp(e).test(n)},n.replace=function(t,e,n){return r(t).replace(e,n)},n.replaceMatches=function(t,e,n){var i=r(t),o=new RegExp(e);return i.replace(o,n)},n.length=function(t){return r(t).length},t.exports=n},function(t,e){function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var r={children:function(t){return t.reduce(function(t,e){if("object"===n(e)){for(var r in e)if(e.hasOwnProperty(r)){var i=e[r];Array.isArray(i)?t.push.apply(t,i):t.push(i)}return t}return t},[])},descendants:function(t){for(var e=r.children(t),n=[];e.length>0;)n.push.apply(n,e),e=r.children(e);return n}};t.exports=r},function(t,e){var n={now:function(){},today:function(){}};t.exports=n},function(t,e){var n={orOp:function(t,e){if(Array.isArray(e)){if(!0===t)return!0;if(!1===t)return[];if(Array.isArray(t))return[]}return Array.isArray(t)?!0===e||[]:t||e},andOp:function(t,e){if(Array.isArray(e)){if(!0===t)return[];if(!1===t)return!1;if(Array.isArray(t))return[]}return Array.isArray(t)?!0===e&&[]:t&&e},xorOp:function(t,e){return Array.isArray(t)||Array.isArray(e)?[]:t&&!e||!t&&e},impliesOp:function(t,e){if(Array.isArray(e)){if(!0===t)return[];if(!1===t)return!0;if(Array.isArray(t))return[]}return Array.isArray(t)?!0===e||[]:!1===t||t&&e}};t.exports=n},function(t,e,n){(function(t,r){var i;function o(t){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)} +/** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */(function(){var s,u=200,a="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",c="Expected a function",l="__lodash_hash_undefined__",p=500,h="__lodash_placeholder__",f=1,d=2,y=4,g=1,_=2,v=1,x=2,T=4,m=8,E=16,S=32,A=64,C=128,b=256,I=512,R=30,O="...",N=800,w=16,L=1,k=2,P=1/0,F=9007199254740991,D=17976931348623157e292,M=NaN,j=4294967295,U=j-1,B=j>>>1,H=[["ary",C],["bind",v],["bindKey",x],["curry",m],["curryRight",E],["flip",I],["partial",S],["partialRight",A],["rearg",b]],z="[object Arguments]",q="[object Array]",V="[object AsyncFunction]",W="[object Boolean]",K="[object Date]",Y="[object DOMException]",$="[object Error]",G="[object Function]",J="[object GeneratorFunction]",Q="[object Map]",X="[object Number]",Z="[object Null]",tt="[object Object]",et="[object Proxy]",nt="[object RegExp]",rt="[object Set]",it="[object String]",ot="[object Symbol]",st="[object Undefined]",ut="[object WeakMap]",at="[object WeakSet]",ct="[object ArrayBuffer]",lt="[object DataView]",pt="[object Float32Array]",ht="[object Float64Array]",ft="[object Int8Array]",dt="[object Int16Array]",yt="[object Int32Array]",gt="[object Uint8Array]",_t="[object Uint8ClampedArray]",vt="[object Uint16Array]",xt="[object Uint32Array]",Tt=/\b__p \+= '';/g,mt=/\b(__p \+=) '' \+/g,Et=/(__e\(.*?\)|\b__t\)) \+\n'';/g,St=/&(?:amp|lt|gt|quot|#39);/g,At=/[&<>"']/g,Ct=RegExp(St.source),bt=RegExp(At.source),It=/<%-([\s\S]+?)%>/g,Rt=/<%([\s\S]+?)%>/g,Ot=/<%=([\s\S]+?)%>/g,Nt=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,wt=/^\w*$/,Lt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,kt=/[\\^$.*+?()[\]{}|]/g,Pt=RegExp(kt.source),Ft=/^\s+|\s+$/g,Dt=/^\s+/,Mt=/\s+$/,jt=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Ut=/\{\n\/\* \[wrapped with (.+)\] \*/,Bt=/,? & /,Ht=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,zt=/\\(\\)?/g,qt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Vt=/\w*$/,Wt=/^[-+]0x[0-9a-f]+$/i,Kt=/^0b[01]+$/i,Yt=/^\[object .+?Constructor\]$/,$t=/^0o[0-7]+$/i,Gt=/^(?:0|[1-9]\d*)$/,Jt=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Qt=/($^)/,Xt=/['\n\r\u2028\u2029\\]/g,Zt="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",te="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",ee="[\\ud800-\\udfff]",ne="["+te+"]",re="["+Zt+"]",ie="\\d+",oe="[\\u2700-\\u27bf]",se="[a-z\\xdf-\\xf6\\xf8-\\xff]",ue="[^\\ud800-\\udfff"+te+ie+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",ae="\\ud83c[\\udffb-\\udfff]",ce="[^\\ud800-\\udfff]",le="(?:\\ud83c[\\udde6-\\uddff]){2}",pe="[\\ud800-\\udbff][\\udc00-\\udfff]",he="[A-Z\\xc0-\\xd6\\xd8-\\xde]",fe="(?:"+se+"|"+ue+")",de="(?:"+he+"|"+ue+")",ye="(?:"+re+"|"+ae+")"+"?",ge="[\\ufe0e\\ufe0f]?"+ye+("(?:\\u200d(?:"+[ce,le,pe].join("|")+")[\\ufe0e\\ufe0f]?"+ye+")*"),_e="(?:"+[oe,le,pe].join("|")+")"+ge,ve="(?:"+[ce+re+"?",re,le,pe,ee].join("|")+")",xe=RegExp("['’]","g"),Te=RegExp(re,"g"),me=RegExp(ae+"(?="+ae+")|"+ve+ge,"g"),Ee=RegExp([he+"?"+se+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[ne,he,"$"].join("|")+")",de+"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[ne,he+fe,"$"].join("|")+")",he+"?"+fe+"+(?:['’](?:d|ll|m|re|s|t|ve))?",he+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",ie,_e].join("|"),"g"),Se=RegExp("[\\u200d\\ud800-\\udfff"+Zt+"\\ufe0e\\ufe0f]"),Ae=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Ce=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],be=-1,Ie={};Ie[pt]=Ie[ht]=Ie[ft]=Ie[dt]=Ie[yt]=Ie[gt]=Ie[_t]=Ie[vt]=Ie[xt]=!0,Ie[z]=Ie[q]=Ie[ct]=Ie[W]=Ie[lt]=Ie[K]=Ie[$]=Ie[G]=Ie[Q]=Ie[X]=Ie[tt]=Ie[nt]=Ie[rt]=Ie[it]=Ie[ut]=!1;var Re={};Re[z]=Re[q]=Re[ct]=Re[lt]=Re[W]=Re[K]=Re[pt]=Re[ht]=Re[ft]=Re[dt]=Re[yt]=Re[Q]=Re[X]=Re[tt]=Re[nt]=Re[rt]=Re[it]=Re[ot]=Re[gt]=Re[_t]=Re[vt]=Re[xt]=!0,Re[$]=Re[G]=Re[ut]=!1;var Oe={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Ne=parseFloat,we=parseInt,Le="object"==(void 0===t?"undefined":o(t))&&t&&t.Object===Object&&t,ke="object"==("undefined"==typeof self?"undefined":o(self))&&self&&self.Object===Object&&self,Pe=Le||ke||Function("return this")(),Fe="object"==o(e)&&e&&!e.nodeType&&e,De=Fe&&"object"==o(r)&&r&&!r.nodeType&&r,Me=De&&De.exports===Fe,je=Me&&Le.process,Ue=function(){try{var t=De&&De.require&&De.require("util").types;return t||je&&je.binding&&je.binding("util")}catch(t){}}(),Be=Ue&&Ue.isArrayBuffer,He=Ue&&Ue.isDate,ze=Ue&&Ue.isMap,qe=Ue&&Ue.isRegExp,Ve=Ue&&Ue.isSet,We=Ue&&Ue.isTypedArray;function Ke(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function Ye(t,e,n,r){for(var i=-1,o=null==t?0:t.length;++i-1}function Ze(t,e,n){for(var r=-1,i=null==t?0:t.length;++r-1;);return n}function En(t,e){for(var n=t.length;n--&&cn(e,t[n],0)>-1;);return n}var Sn=dn({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"}),An=dn({"&":"&","<":"<",">":">",'"':""","'":"'"});function Cn(t){return"\\"+Oe[t]}function bn(t){return Se.test(t)}function In(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function Rn(t,e){return function(n){return t(e(n))}}function On(t,e){for(var n=-1,r=t.length,i=0,o=[];++n",""":'"',"'":"'"});var Fn=function t(e){var n,r=(e=null==e?Pe:Fn.defaults(Pe.Object(),e,Fn.pick(Pe,Ce))).Array,i=e.Date,Zt=e.Error,te=e.Function,ee=e.Math,ne=e.Object,re=e.RegExp,ie=e.String,oe=e.TypeError,se=r.prototype,ue=te.prototype,ae=ne.prototype,ce=e["__core-js_shared__"],le=ue.toString,pe=ae.hasOwnProperty,he=0,fe=(n=/[^.]+$/.exec(ce&&ce.keys&&ce.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",de=ae.toString,ye=le.call(ne),ge=Pe._,_e=re("^"+le.call(pe).replace(kt,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),ve=Me?e.Buffer:s,me=e.Symbol,Se=e.Uint8Array,Oe=ve?ve.allocUnsafe:s,Le=Rn(ne.getPrototypeOf,ne),ke=ne.create,Fe=ae.propertyIsEnumerable,De=se.splice,je=me?me.isConcatSpreadable:s,Ue=me?me.iterator:s,sn=me?me.toStringTag:s,dn=function(){try{var t=Bo(ne,"defineProperty");return t({},"",{}),t}catch(t){}}(),Dn=e.clearTimeout!==Pe.clearTimeout&&e.clearTimeout,Mn=i&&i.now!==Pe.Date.now&&i.now,jn=e.setTimeout!==Pe.setTimeout&&e.setTimeout,Un=ee.ceil,Bn=ee.floor,Hn=ne.getOwnPropertySymbols,zn=ve?ve.isBuffer:s,qn=e.isFinite,Vn=se.join,Wn=Rn(ne.keys,ne),Kn=ee.max,Yn=ee.min,$n=i.now,Gn=e.parseInt,Jn=ee.random,Qn=se.reverse,Xn=Bo(e,"DataView"),Zn=Bo(e,"Map"),tr=Bo(e,"Promise"),er=Bo(e,"Set"),nr=Bo(e,"WeakMap"),rr=Bo(ne,"create"),ir=nr&&new nr,or={},sr=hs(Xn),ur=hs(Zn),ar=hs(tr),cr=hs(er),lr=hs(nr),pr=me?me.prototype:s,hr=pr?pr.valueOf:s,fr=pr?pr.toString:s;function dr(t){if(Ou(t)&&!vu(t)&&!(t instanceof vr)){if(t instanceof _r)return t;if(pe.call(t,"__wrapped__"))return fs(t)}return new _r(t)}var yr=function(){function t(){}return function(e){if(!Ru(e))return{};if(ke)return ke(e);t.prototype=e;var n=new t;return t.prototype=s,n}}();function gr(){}function _r(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=s}function vr(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=j,this.__views__=[]}function xr(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e=e?t:e)),t}function Dr(t,e,n,r,i,o){var u,a=e&f,c=e&d,l=e&y;if(n&&(u=i?n(t,r,i,o):n(t)),u!==s)return u;if(!Ru(t))return t;var p=vu(t);if(p){if(u=function(t){var e=t.length,n=new t.constructor(e);e&&"string"==typeof t[0]&&pe.call(t,"index")&&(n.index=t.index,n.input=t.input);return n}(t),!a)return ro(t,u)}else{var h=qo(t),g=h==G||h==J;if(Eu(t))return Qi(t,a);if(h==tt||h==z||g&&!i){if(u=c||g?{}:Wo(t),!a)return c?function(t,e){return io(t,zo(t),e)}(t,function(t,e){return t&&io(e,sa(e),t)}(u,t)):function(t,e){return io(t,Ho(t),e)}(t,Lr(u,t))}else{if(!Re[h])return i?t:{};u=function(t,e,n){var r=t.constructor;switch(e){case ct:return Xi(t);case W:case K:return new r(+t);case lt:return function(t,e){var n=e?Xi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}(t,n);case pt:case ht:case ft:case dt:case yt:case gt:case _t:case vt:case xt:return Zi(t,n);case Q:return new r;case X:case it:return new r(t);case nt:return function(t){var e=new t.constructor(t.source,Vt.exec(t));return e.lastIndex=t.lastIndex,e}(t);case rt:return new r;case ot:return i=t,hr?ne(hr.call(i)):{}}var i}(t,h,a)}}o||(o=new Sr);var _=o.get(t);if(_)return _;o.set(t,u),Pu(t)?t.forEach(function(r){u.add(Dr(r,e,n,r,t,o))}):Nu(t)&&t.forEach(function(r,i){u.set(i,Dr(r,e,n,i,t,o))});var v=p?s:(l?c?ko:Lo:c?sa:oa)(t);return $e(v||t,function(r,i){v&&(r=t[i=r]),Or(u,i,Dr(r,e,n,i,t,o))}),u}function Mr(t,e,n){var r=n.length;if(null==t)return!r;for(t=ne(t);r--;){var i=n[r],o=e[i],u=t[i];if(u===s&&!(i in t)||!o(u))return!1}return!0}function jr(t,e,n){if("function"!=typeof t)throw new oe(c);return os(function(){t.apply(s,n)},e)}function Ur(t,e,n,r){var i=-1,o=Xe,s=!0,a=t.length,c=[],l=e.length;if(!a)return c;n&&(e=tn(e,vn(n))),r?(o=Ze,s=!1):e.length>=u&&(o=Tn,s=!1,e=new Er(e));t:for(;++i-1},Tr.prototype.set=function(t,e){var n=this.__data__,r=Nr(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},mr.prototype.clear=function(){this.size=0,this.__data__={hash:new xr,map:new(Zn||Tr),string:new xr}},mr.prototype.delete=function(t){var e=jo(this,t).delete(t);return this.size-=e?1:0,e},mr.prototype.get=function(t){return jo(this,t).get(t)},mr.prototype.has=function(t){return jo(this,t).has(t)},mr.prototype.set=function(t,e){var n=jo(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},Er.prototype.add=Er.prototype.push=function(t){return this.__data__.set(t,l),this},Er.prototype.has=function(t){return this.__data__.has(t)},Sr.prototype.clear=function(){this.__data__=new Tr,this.size=0},Sr.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Sr.prototype.get=function(t){return this.__data__.get(t)},Sr.prototype.has=function(t){return this.__data__.has(t)},Sr.prototype.set=function(t,e){var n=this.__data__;if(n instanceof Tr){var r=n.__data__;if(!Zn||r.length0&&n(u)?e>1?Wr(u,e-1,n,r,i):en(i,u):r||(i[i.length]=u)}return i}var Kr=ao(),Yr=ao(!0);function $r(t,e){return t&&Kr(t,e,oa)}function Gr(t,e){return t&&Yr(t,e,oa)}function Jr(t,e){return Qe(e,function(e){return Cu(t[e])})}function Qr(t,e){for(var n=0,r=(e=Yi(e,t)).length;null!=t&&ne}function ei(t,e){return null!=t&&pe.call(t,e)}function ni(t,e){return null!=t&&e in ne(t)}function ri(t,e,n){for(var i=n?Ze:Xe,o=t[0].length,u=t.length,a=u,c=r(u),l=1/0,p=[];a--;){var h=t[a];a&&e&&(h=tn(h,vn(e))),l=Yn(h.length,l),c[a]=!n&&(e||o>=120&&h.length>=120)?new Er(a&&h):s}h=t[0];var f=-1,d=c[0];t:for(;++f=u)return a;var c=n[r];return a*("desc"==c?-1:1)}}return t.index-e.index}(t,e,n)})}function xi(t,e,n){for(var r=-1,i=e.length,o={};++r-1;)u!==t&&De.call(u,a,1),De.call(t,a,1);return t}function mi(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==o){var o=i;Yo(i)?De.call(t,i,1):Ui(t,i)}}return t}function Ei(t,e){return t+Bn(Jn()*(e-t+1))}function Si(t,e){var n="";if(!t||e<1||e>F)return n;do{e%2&&(n+=t),(e=Bn(e/2))&&(t+=t)}while(e);return n}function Ai(t,e){return ss(es(t,e,wa),t+"")}function Ci(t){return Cr(da(t))}function bi(t,e){var n=da(t);return cs(n,Fr(e,0,n.length))}function Ii(t,e,n,r){if(!Ru(t))return t;for(var i=-1,o=(e=Yi(e,t)).length,u=o-1,a=t;null!=a&&++io?0:o+e),(n=n>o?o:n)<0&&(n+=o),o=e>n?0:n-e>>>0,e>>>=0;for(var s=r(o);++i>>1,s=t[o];null!==s&&!Du(s)&&(n?s<=e:s=u){var l=e?null:Ao(t);if(l)return Nn(l);s=!1,i=Tn,c=new Er}else c=e?[]:a;t:for(;++r=r?t:wi(t,e,n)}var Ji=Dn||function(t){return Pe.clearTimeout(t)};function Qi(t,e){if(e)return t.slice();var n=t.length,r=Oe?Oe(n):new t.constructor(n);return t.copy(r),r}function Xi(t){var e=new t.constructor(t.byteLength);return new Se(e).set(new Se(t)),e}function Zi(t,e){var n=e?Xi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function to(t,e){if(t!==e){var n=t!==s,r=null===t,i=t==t,o=Du(t),u=e!==s,a=null===e,c=e==e,l=Du(e);if(!a&&!l&&!o&&t>e||o&&u&&c&&!a&&!l||r&&u&&c||!n&&c||!i)return 1;if(!r&&!o&&!l&&t1?n[i-1]:s,u=i>2?n[2]:s;for(o=t.length>3&&"function"==typeof o?(i--,o):s,u&&$o(n[0],n[1],u)&&(o=i<3?s:o,i=1),e=ne(e);++r-1?i[o?e[u]:u]:s}}function fo(t){return wo(function(e){var n=e.length,r=n,i=_r.prototype.thru;for(t&&e.reverse();r--;){var o=e[r];if("function"!=typeof o)throw new oe(c);if(i&&!u&&"wrapper"==Fo(o))var u=new _r([],!0)}for(r=u?r:n;++r1&&T.reverse(),h&&la))return!1;var l=o.get(t);if(l&&o.get(e))return l==e;var p=-1,h=!0,f=n&_?new Er:s;for(o.set(t,e),o.set(e,t);++p-1&&t%1==0&&t1?"& ":"")+e[r],e=e.join(n>2?", ":" "),t.replace(jt,"{\n/* [wrapped with "+e+"] */\n")}(r,function(t,e){return $e(H,function(n){var r="_."+n[0];e&n[1]&&!Xe(t,r)&&t.push(r)}),t.sort()}(function(t){var e=t.match(Ut);return e?e[1].split(Bt):[]}(r),n)))}function as(t){var e=0,n=0;return function(){var r=$n(),i=w-(r-n);if(n=r,i>0){if(++e>=N)return arguments[0]}else e=0;return t.apply(s,arguments)}}function cs(t,e){var n=-1,r=t.length,i=r-1;for(e=e===s?r:e;++n1?t[e-1]:s;return n="function"==typeof n?(t.pop(),n):s,ks(t,n)});function Bs(t){var e=dr(t);return e.__chain__=!0,e}function Hs(t,e){return e(t)}var zs=wo(function(t){var e=t.length,n=e?t[0]:0,r=this.__wrapped__,i=function(e){return Pr(e,t)};return!(e>1||this.__actions__.length)&&r instanceof vr&&Yo(n)?((r=r.slice(n,+n+(e?1:0))).__actions__.push({func:Hs,args:[i],thisArg:s}),new _r(r,this.__chain__).thru(function(t){return e&&!t.length&&t.push(s),t})):this.thru(i)});var qs=oo(function(t,e,n){pe.call(t,n)?++t[n]:kr(t,n,1)});var Vs=ho(_s),Ws=ho(vs);function Ks(t,e){return(vu(t)?$e:Br)(t,Mo(e,3))}function Ys(t,e){return(vu(t)?Ge:Hr)(t,Mo(e,3))}var $s=oo(function(t,e,n){pe.call(t,n)?t[n].push(e):kr(t,n,[e])});var Gs=Ai(function(t,e,n){var i=-1,o="function"==typeof e,s=Tu(t)?r(t.length):[];return Br(t,function(t){s[++i]=o?Ke(e,t,n):ii(t,e,n)}),s}),Js=oo(function(t,e,n){kr(t,n,e)});function Qs(t,e){return(vu(t)?tn:fi)(t,Mo(e,3))}var Xs=oo(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]});var Zs=Ai(function(t,e){if(null==t)return[];var n=e.length;return n>1&&$o(t,e[0],e[1])?e=[]:n>2&&$o(e[0],e[1],e[2])&&(e=[e[0]]),vi(t,Wr(e,1),[])}),tu=Mn||function(){return Pe.Date.now()};function eu(t,e,n){return e=n?s:e,e=t&&null==e?t.length:e,bo(t,C,s,s,s,s,e)}function nu(t,e){var n;if("function"!=typeof e)throw new oe(c);return t=zu(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=s),n}}var ru=Ai(function(t,e,n){var r=v;if(n.length){var i=On(n,Do(ru));r|=S}return bo(t,r,e,n,i)}),iu=Ai(function(t,e,n){var r=v|x;if(n.length){var i=On(n,Do(iu));r|=S}return bo(e,r,t,n,i)});function ou(t,e,n){var r,i,o,u,a,l,p=0,h=!1,f=!1,d=!0;if("function"!=typeof t)throw new oe(c);function y(e){var n=r,o=i;return r=i=s,p=e,u=t.apply(o,n)}function g(t){var n=t-l;return l===s||n>=e||n<0||f&&t-p>=o}function _(){var t=tu();if(g(t))return v(t);a=os(_,function(t){var n=e-(t-l);return f?Yn(n,o-(t-p)):n}(t))}function v(t){return a=s,d&&r?y(t):(r=i=s,u)}function x(){var t=tu(),n=g(t);if(r=arguments,i=this,l=t,n){if(a===s)return function(t){return p=t,a=os(_,e),h?y(t):u}(l);if(f)return Ji(a),a=os(_,e),y(l)}return a===s&&(a=os(_,e)),u}return e=Vu(e)||0,Ru(n)&&(h=!!n.leading,o=(f="maxWait"in n)?Kn(Vu(n.maxWait)||0,e):o,d="trailing"in n?!!n.trailing:d),x.cancel=function(){a!==s&&Ji(a),p=0,r=l=i=a=s},x.flush=function(){return a===s?u:v(tu())},x}var su=Ai(function(t,e){return jr(t,1,e)}),uu=Ai(function(t,e,n){return jr(t,Vu(e)||0,n)});function au(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new oe(c);var n=function n(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var s=t.apply(this,r);return n.cache=o.set(i,s)||o,s};return n.cache=new(au.Cache||mr),n}function cu(t){if("function"!=typeof t)throw new oe(c);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}au.Cache=mr;var lu=$i(function(t,e){var n=(e=1==e.length&&vu(e[0])?tn(e[0],vn(Mo())):tn(Wr(e,1),vn(Mo()))).length;return Ai(function(r){for(var i=-1,o=Yn(r.length,n);++i=e}),_u=oi(function(){return arguments}())?oi:function(t){return Ou(t)&&pe.call(t,"callee")&&!Fe.call(t,"callee")},vu=r.isArray,xu=Be?vn(Be):function(t){return Ou(t)&&Zr(t)==ct};function Tu(t){return null!=t&&Iu(t.length)&&!Cu(t)}function mu(t){return Ou(t)&&Tu(t)}var Eu=zn||Va,Su=He?vn(He):function(t){return Ou(t)&&Zr(t)==K};function Au(t){if(!Ou(t))return!1;var e=Zr(t);return e==$||e==Y||"string"==typeof t.message&&"string"==typeof t.name&&!Lu(t)}function Cu(t){if(!Ru(t))return!1;var e=Zr(t);return e==G||e==J||e==V||e==et}function bu(t){return"number"==typeof t&&t==zu(t)}function Iu(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=F}function Ru(t){var e=o(t);return null!=t&&("object"==e||"function"==e)}function Ou(t){return null!=t&&"object"==o(t)}var Nu=ze?vn(ze):function(t){return Ou(t)&&qo(t)==Q};function wu(t){return"number"==typeof t||Ou(t)&&Zr(t)==X}function Lu(t){if(!Ou(t)||Zr(t)!=tt)return!1;var e=Le(t);if(null===e)return!0;var n=pe.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&le.call(n)==ye}var ku=qe?vn(qe):function(t){return Ou(t)&&Zr(t)==nt};var Pu=Ve?vn(Ve):function(t){return Ou(t)&&qo(t)==rt};function Fu(t){return"string"==typeof t||!vu(t)&&Ou(t)&&Zr(t)==it}function Du(t){return"symbol"==o(t)||Ou(t)&&Zr(t)==ot}var Mu=We?vn(We):function(t){return Ou(t)&&Iu(t.length)&&!!Ie[Zr(t)]};var ju=mo(hi),Uu=mo(function(t,e){return t<=e});function Bu(t){if(!t)return[];if(Tu(t))return Fu(t)?kn(t):ro(t);if(Ue&&t[Ue])return function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}(t[Ue]());var e=qo(t);return(e==Q?In:e==rt?Nn:da)(t)}function Hu(t){return t?(t=Vu(t))===P||t===-P?(t<0?-1:1)*D:t==t?t:0:0===t?t:0}function zu(t){var e=Hu(t),n=e%1;return e==e?n?e-n:e:0}function qu(t){return t?Fr(zu(t),0,j):0}function Vu(t){if("number"==typeof t)return t;if(Du(t))return M;if(Ru(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=Ru(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(Ft,"");var n=Kt.test(t);return n||$t.test(t)?we(t.slice(2),n?2:8):Wt.test(t)?M:+t}function Wu(t){return io(t,sa(t))}function Ku(t){return null==t?"":Mi(t)}var Yu=so(function(t,e){if(Xo(e)||Tu(e))io(e,oa(e),t);else for(var n in e)pe.call(e,n)&&Or(t,n,e[n])}),$u=so(function(t,e){io(e,sa(e),t)}),Gu=so(function(t,e,n,r){io(e,sa(e),t,r)}),Ju=so(function(t,e,n,r){io(e,oa(e),t,r)}),Qu=wo(Pr);var Xu=Ai(function(t,e){t=ne(t);var n=-1,r=e.length,i=r>2?e[2]:s;for(i&&$o(e[0],e[1],i)&&(r=1);++n1),e}),io(t,ko(t),n),r&&(n=Dr(n,f|d|y,Oo));for(var i=e.length;i--;)Ui(n,e[i]);return n});var la=wo(function(t,e){return null==t?{}:function(t,e){return xi(t,e,function(e,n){return ea(t,n)})}(t,e)});function pa(t,e){if(null==t)return{};var n=tn(ko(t),function(t){return[t]});return e=Mo(e),xi(t,n,function(t,n){return e(t,n[0])})}var ha=Co(oa),fa=Co(sa);function da(t){return null==t?[]:xn(t,oa(t))}var ya=lo(function(t,e,n){return e=e.toLowerCase(),t+(n?ga(e):e)});function ga(t){return Aa(Ku(t).toLowerCase())}function _a(t){return(t=Ku(t))&&t.replace(Jt,Sn).replace(Te,"")}var va=lo(function(t,e,n){return t+(n?"-":"")+e.toLowerCase()}),xa=lo(function(t,e,n){return t+(n?" ":"")+e.toLowerCase()}),Ta=co("toLowerCase");var ma=lo(function(t,e,n){return t+(n?"_":"")+e.toLowerCase()});var Ea=lo(function(t,e,n){return t+(n?" ":"")+Aa(e)});var Sa=lo(function(t,e,n){return t+(n?" ":"")+e.toUpperCase()}),Aa=co("toUpperCase");function Ca(t,e,n){return t=Ku(t),(e=n?s:e)===s?function(t){return Ae.test(t)}(t)?function(t){return t.match(Ee)||[]}(t):function(t){return t.match(Ht)||[]}(t):t.match(e)||[]}var ba=Ai(function(t,e){try{return Ke(t,s,e)}catch(t){return Au(t)?t:new Zt(t)}}),Ia=wo(function(t,e){return $e(e,function(e){e=ps(e),kr(t,e,ru(t[e],t))}),t});function Ra(t){return function(){return t}}var Oa=fo(),Na=fo(!0);function wa(t){return t}function La(t){return ci("function"==typeof t?t:Dr(t,f))}var ka=Ai(function(t,e){return function(n){return ii(n,t,e)}}),Pa=Ai(function(t,e){return function(n){return ii(t,n,e)}});function Fa(t,e,n){var r=oa(e),i=Jr(e,r);null!=n||Ru(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=Jr(e,oa(e)));var o=!(Ru(n)&&"chain"in n&&!n.chain),s=Cu(t);return $e(i,function(n){var r=e[n];t[n]=r,s&&(t.prototype[n]=function(){var e=this.__chain__;if(o||e){var n=t(this.__wrapped__),i=n.__actions__=ro(this.__actions__);return i.push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,en([this.value()],arguments))})}),t}function Da(){}var Ma=vo(tn),ja=vo(Je),Ua=vo(on);function Ba(t){return Go(t)?fn(ps(t)):function(t){return function(e){return Qr(e,t)}}(t)}var Ha=To(),za=To(!0);function qa(){return[]}function Va(){return!1}var Wa=_o(function(t,e){return t+e},0),Ka=So("ceil"),Ya=_o(function(t,e){return t/e},1),$a=So("floor");var Ga,Ja=_o(function(t,e){return t*e},1),Qa=So("round"),Xa=_o(function(t,e){return t-e},0);return dr.after=function(t,e){if("function"!=typeof e)throw new oe(c);return t=zu(t),function(){if(--t<1)return e.apply(this,arguments)}},dr.ary=eu,dr.assign=Yu,dr.assignIn=$u,dr.assignInWith=Gu,dr.assignWith=Ju,dr.at=Qu,dr.before=nu,dr.bind=ru,dr.bindAll=Ia,dr.bindKey=iu,dr.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return vu(t)?t:[t]},dr.chain=Bs,dr.chunk=function(t,e,n){e=(n?$o(t,e,n):e===s)?1:Kn(zu(e),0);var i=null==t?0:t.length;if(!i||e<1)return[];for(var o=0,u=0,a=r(Un(i/e));oi?0:i+n),(r=r===s||r>i?i:zu(r))<0&&(r+=i),r=n>r?0:qu(r);n>>0)?(t=Ku(t))&&("string"==typeof e||null!=e&&!ku(e))&&!(e=Mi(e))&&bn(t)?Gi(kn(t),0,n):t.split(e,n):[]},dr.spread=function(t,e){if("function"!=typeof t)throw new oe(c);return e=null==e?0:Kn(zu(e),0),Ai(function(n){var r=n[e],i=Gi(n,0,e);return r&&en(i,r),Ke(t,this,i)})},dr.tail=function(t){var e=null==t?0:t.length;return e?wi(t,1,e):[]},dr.take=function(t,e,n){return t&&t.length?wi(t,0,(e=n||e===s?1:zu(e))<0?0:e):[]},dr.takeRight=function(t,e,n){var r=null==t?0:t.length;return r?wi(t,(e=r-(e=n||e===s?1:zu(e)))<0?0:e,r):[]},dr.takeRightWhile=function(t,e){return t&&t.length?Hi(t,Mo(e,3),!1,!0):[]},dr.takeWhile=function(t,e){return t&&t.length?Hi(t,Mo(e,3)):[]},dr.tap=function(t,e){return e(t),t},dr.throttle=function(t,e,n){var r=!0,i=!0;if("function"!=typeof t)throw new oe(c);return Ru(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),ou(t,e,{leading:r,maxWait:e,trailing:i})},dr.thru=Hs,dr.toArray=Bu,dr.toPairs=ha,dr.toPairsIn=fa,dr.toPath=function(t){return vu(t)?tn(t,ps):Du(t)?[t]:ro(ls(Ku(t)))},dr.toPlainObject=Wu,dr.transform=function(t,e,n){var r=vu(t),i=r||Eu(t)||Mu(t);if(e=Mo(e,4),null==n){var o=t&&t.constructor;n=i?r?new o:[]:Ru(t)&&Cu(o)?yr(Le(t)):{}}return(i?$e:$r)(t,function(t,r,i){return e(n,t,r,i)}),n},dr.unary=function(t){return eu(t,1)},dr.union=Os,dr.unionBy=Ns,dr.unionWith=ws,dr.uniq=function(t){return t&&t.length?ji(t):[]},dr.uniqBy=function(t,e){return t&&t.length?ji(t,Mo(e,2)):[]},dr.uniqWith=function(t,e){return e="function"==typeof e?e:s,t&&t.length?ji(t,s,e):[]},dr.unset=function(t,e){return null==t||Ui(t,e)},dr.unzip=Ls,dr.unzipWith=ks,dr.update=function(t,e,n){return null==t?t:Bi(t,e,Ki(n))},dr.updateWith=function(t,e,n,r){return r="function"==typeof r?r:s,null==t?t:Bi(t,e,Ki(n),r)},dr.values=da,dr.valuesIn=function(t){return null==t?[]:xn(t,sa(t))},dr.without=Ps,dr.words=Ca,dr.wrap=function(t,e){return pu(Ki(e),t)},dr.xor=Fs,dr.xorBy=Ds,dr.xorWith=Ms,dr.zip=js,dr.zipObject=function(t,e){return Vi(t||[],e||[],Or)},dr.zipObjectDeep=function(t,e){return Vi(t||[],e||[],Ii)},dr.zipWith=Us,dr.entries=ha,dr.entriesIn=fa,dr.extend=$u,dr.extendWith=Gu,Fa(dr,dr),dr.add=Wa,dr.attempt=ba,dr.camelCase=ya,dr.capitalize=ga,dr.ceil=Ka,dr.clamp=function(t,e,n){return n===s&&(n=e,e=s),n!==s&&(n=(n=Vu(n))==n?n:0),e!==s&&(e=(e=Vu(e))==e?e:0),Fr(Vu(t),e,n)},dr.clone=function(t){return Dr(t,y)},dr.cloneDeep=function(t){return Dr(t,f|y)},dr.cloneDeepWith=function(t,e){return Dr(t,f|y,e="function"==typeof e?e:s)},dr.cloneWith=function(t,e){return Dr(t,y,e="function"==typeof e?e:s)},dr.conformsTo=function(t,e){return null==e||Mr(t,e,oa(e))},dr.deburr=_a,dr.defaultTo=function(t,e){return null==t||t!=t?e:t},dr.divide=Ya,dr.endsWith=function(t,e,n){t=Ku(t),e=Mi(e);var r=t.length,i=n=n===s?r:Fr(zu(n),0,r);return(n-=e.length)>=0&&t.slice(n,i)==e},dr.eq=du,dr.escape=function(t){return(t=Ku(t))&&bt.test(t)?t.replace(At,An):t},dr.escapeRegExp=function(t){return(t=Ku(t))&&Pt.test(t)?t.replace(kt,"\\$&"):t},dr.every=function(t,e,n){var r=vu(t)?Je:zr;return n&&$o(t,e,n)&&(e=s),r(t,Mo(e,3))},dr.find=Vs,dr.findIndex=_s,dr.findKey=function(t,e){return un(t,Mo(e,3),$r)},dr.findLast=Ws,dr.findLastIndex=vs,dr.findLastKey=function(t,e){return un(t,Mo(e,3),Gr)},dr.floor=$a,dr.forEach=Ks,dr.forEachRight=Ys,dr.forIn=function(t,e){return null==t?t:Kr(t,Mo(e,3),sa)},dr.forInRight=function(t,e){return null==t?t:Yr(t,Mo(e,3),sa)},dr.forOwn=function(t,e){return t&&$r(t,Mo(e,3))},dr.forOwnRight=function(t,e){return t&&Gr(t,Mo(e,3))},dr.get=ta,dr.gt=yu,dr.gte=gu,dr.has=function(t,e){return null!=t&&Vo(t,e,ei)},dr.hasIn=ea,dr.head=Ts,dr.identity=wa,dr.includes=function(t,e,n,r){t=Tu(t)?t:da(t),n=n&&!r?zu(n):0;var i=t.length;return n<0&&(n=Kn(i+n,0)),Fu(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&cn(t,e,n)>-1},dr.indexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:zu(n);return i<0&&(i=Kn(r+i,0)),cn(t,e,i)},dr.inRange=function(t,e,n){return e=Hu(e),n===s?(n=e,e=0):n=Hu(n),function(t,e,n){return t>=Yn(e,n)&&t=-F&&t<=F},dr.isSet=Pu,dr.isString=Fu,dr.isSymbol=Du,dr.isTypedArray=Mu,dr.isUndefined=function(t){return t===s},dr.isWeakMap=function(t){return Ou(t)&&qo(t)==ut},dr.isWeakSet=function(t){return Ou(t)&&Zr(t)==at},dr.join=function(t,e){return null==t?"":Vn.call(t,e)},dr.kebabCase=va,dr.last=As,dr.lastIndexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=r;return n!==s&&(i=(i=zu(n))<0?Kn(r+i,0):Yn(i,r-1)),e==e?function(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}(t,e,i):an(t,pn,i,!0)},dr.lowerCase=xa,dr.lowerFirst=Ta,dr.lt=ju,dr.lte=Uu,dr.max=function(t){return t&&t.length?qr(t,wa,ti):s},dr.maxBy=function(t,e){return t&&t.length?qr(t,Mo(e,2),ti):s},dr.mean=function(t){return hn(t,wa)},dr.meanBy=function(t,e){return hn(t,Mo(e,2))},dr.min=function(t){return t&&t.length?qr(t,wa,hi):s},dr.minBy=function(t,e){return t&&t.length?qr(t,Mo(e,2),hi):s},dr.stubArray=qa,dr.stubFalse=Va,dr.stubObject=function(){return{}},dr.stubString=function(){return""},dr.stubTrue=function(){return!0},dr.multiply=Ja,dr.nth=function(t,e){return t&&t.length?_i(t,zu(e)):s},dr.noConflict=function(){return Pe._===this&&(Pe._=ge),this},dr.noop=Da,dr.now=tu,dr.pad=function(t,e,n){t=Ku(t);var r=(e=zu(e))?Ln(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return xo(Bn(i),n)+t+xo(Un(i),n)},dr.padEnd=function(t,e,n){t=Ku(t);var r=(e=zu(e))?Ln(t):0;return e&&re){var r=t;t=e,e=r}if(n||t%1||e%1){var i=Jn();return Yn(t+i*(e-t+Ne("1e-"+((i+"").length-1))),e)}return Ei(t,e)},dr.reduce=function(t,e,n){var r=vu(t)?nn:yn,i=arguments.length<3;return r(t,Mo(e,4),n,i,Br)},dr.reduceRight=function(t,e,n){var r=vu(t)?rn:yn,i=arguments.length<3;return r(t,Mo(e,4),n,i,Hr)},dr.repeat=function(t,e,n){return e=(n?$o(t,e,n):e===s)?1:zu(e),Si(Ku(t),e)},dr.replace=function(){var t=arguments,e=Ku(t[0]);return t.length<3?e:e.replace(t[1],t[2])},dr.result=function(t,e,n){var r=-1,i=(e=Yi(e,t)).length;for(i||(i=1,t=s);++rF)return[];var n=j,r=Yn(t,j);e=Mo(e),t-=j;for(var i=_n(r,e);++n=o)return t;var a=n-Ln(r);if(a<1)return r;var c=u?Gi(u,0,a).join(""):t.slice(0,a);if(i===s)return c+r;if(u&&(a+=c.length-a),ku(i)){if(t.slice(a).search(i)){var l,p=c;for(i.global||(i=re(i.source,Ku(Vt.exec(i))+"g")),i.lastIndex=0;l=i.exec(p);)var h=l.index;c=c.slice(0,h===s?a:h)}}else if(t.indexOf(Mi(i),a)!=a){var f=c.lastIndexOf(i);f>-1&&(c=c.slice(0,f))}return c+r},dr.unescape=function(t){return(t=Ku(t))&&Ct.test(t)?t.replace(St,Pn):t},dr.uniqueId=function(t){var e=++he;return Ku(t)+e},dr.upperCase=Sa,dr.upperFirst=Aa,dr.each=Ks,dr.eachRight=Ys,dr.first=Ts,Fa(dr,(Ga={},$r(dr,function(t,e){pe.call(dr.prototype,e)||(Ga[e]=t)}),Ga),{chain:!1}),dr.VERSION="4.17.15",$e(["bind","bindKey","curry","curryRight","partial","partialRight"],function(t){dr[t].placeholder=dr}),$e(["drop","take"],function(t,e){vr.prototype[t]=function(n){n=n===s?1:Kn(zu(n),0);var r=this.__filtered__&&!e?new vr(this):this.clone();return r.__filtered__?r.__takeCount__=Yn(n,r.__takeCount__):r.__views__.push({size:Yn(n,j),type:t+(r.__dir__<0?"Right":"")}),r},vr.prototype[t+"Right"]=function(e){return this.reverse()[t](e).reverse()}}),$e(["filter","map","takeWhile"],function(t,e){var n=e+1,r=n==L||3==n;vr.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:Mo(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}}),$e(["head","last"],function(t,e){var n="take"+(e?"Right":"");vr.prototype[t]=function(){return this[n](1).value()[0]}}),$e(["initial","tail"],function(t,e){var n="drop"+(e?"":"Right");vr.prototype[t]=function(){return this.__filtered__?new vr(this):this[n](1)}}),vr.prototype.compact=function(){return this.filter(wa)},vr.prototype.find=function(t){return this.filter(t).head()},vr.prototype.findLast=function(t){return this.reverse().find(t)},vr.prototype.invokeMap=Ai(function(t,e){return"function"==typeof t?new vr(this):this.map(function(n){return ii(n,t,e)})}),vr.prototype.reject=function(t){return this.filter(cu(Mo(t)))},vr.prototype.slice=function(t,e){t=zu(t);var n=this;return n.__filtered__&&(t>0||e<0)?new vr(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==s&&(n=(e=zu(e))<0?n.dropRight(-e):n.take(e-t)),n)},vr.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},vr.prototype.toArray=function(){return this.take(j)},$r(vr.prototype,function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),r=/^(?:head|last)$/.test(e),i=dr[r?"take"+("last"==e?"Right":""):e],o=r||/^find/.test(e);i&&(dr.prototype[e]=function(){var e=this.__wrapped__,u=r?[1]:arguments,a=e instanceof vr,c=u[0],l=a||vu(e),p=function(t){var e=i.apply(dr,en([t],u));return r&&h?e[0]:e};l&&n&&"function"==typeof c&&1!=c.length&&(a=l=!1);var h=this.__chain__,f=!!this.__actions__.length,d=o&&!h,y=a&&!f;if(!o&&l){e=y?e:new vr(this);var g=t.apply(e,u);return g.__actions__.push({func:Hs,args:[p],thisArg:s}),new _r(g,h)}return d&&y?t.apply(this,u):(g=this.thru(p),d?r?g.value()[0]:g.value():g)})}),$e(["pop","push","shift","sort","splice","unshift"],function(t){var e=se[t],n=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",r=/^(?:pop|shift)$/.test(t);dr.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return e.apply(vu(i)?i:[],t)}return this[n](function(n){return e.apply(vu(n)?n:[],t)})}}),$r(vr.prototype,function(t,e){var n=dr[e];if(n){var r=n.name+"";pe.call(or,r)||(or[r]=[]),or[r].push({name:e,func:n})}}),or[yo(s,x).name]=[{name:"wrapper",func:s}],vr.prototype.clone=function(){var t=new vr(this.__wrapped__);return t.__actions__=ro(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=ro(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=ro(this.__views__),t},vr.prototype.reverse=function(){if(this.__filtered__){var t=new vr(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},vr.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,n=vu(t),r=e<0,i=n?t.length:0,o=function(t,e,n){var r=-1,i=n.length;for(;++r=this.__values__.length;return{done:t,value:t?s:this.__values__[this.__index__++]}},dr.prototype.plant=function(t){for(var e,n=this;n instanceof gr;){var r=fs(n);r.__index__=0,r.__values__=s,e?i.__wrapped__=r:e=r;var i=r;n=n.__wrapped__}return i.__wrapped__=t,e},dr.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof vr){var e=t;return this.__actions__.length&&(e=new vr(this)),(e=e.reverse()).__actions__.push({func:Hs,args:[Rs],thisArg:s}),new _r(e,this.__chain__)}return this.thru(Rs)},dr.prototype.toJSON=dr.prototype.valueOf=dr.prototype.value=function(){return zi(this.__wrapped__,this.__actions__)},dr.prototype.first=dr.prototype.head,Ue&&(dr.prototype[Ue]=function(){return this}),dr}();"object"==o(n(37))&&n(37)?(Pe._=Fn,(i=function(){return Fn}.call(e,n,e,r))===s||(r.exports=i)):De?((De.exports=Fn)._=Fn,Fe._=Fn):Pe._=Fn}).call(this)}).call(this,n(74),n(75)(t))},function(t,e){function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(t){"object"===("undefined"==typeof window?"undefined":n(window))&&(r=window)}t.exports=r},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}}])}); +//# sourceMappingURL=app.bundle.js.map \ No newline at end of file diff --git a/public/static/js/fhir-mapper/app.bundle.js.map b/public/static/js/fhir-mapper/app.bundle.js.map new file mode 100644 index 0000000000..f951ece0f4 --- /dev/null +++ b/public/static/js/fhir-mapper/app.bundle.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack://Mapper/webpack/universalModuleDefinition","webpack://Mapper/webpack/bootstrap","webpack://Mapper/./node_modules/antlr4/Utils.js","webpack://Mapper/./node_modules/antlr4/Token.js","webpack://Mapper/./node_modules/antlr4/IntervalSet.js","webpack://Mapper/./node_modules/antlr4/atn/ATNState.js","webpack://Mapper/./node_modules/antlr4/tree/Tree.js","webpack://Mapper/./node_modules/antlr4/error/Errors.js","webpack://Mapper/./node_modules/antlr4/PredictionContext.js","webpack://Mapper/./node_modules/antlr4/atn/ATN.js","webpack://Mapper/./node_modules/antlr4/atn/Transition.js","webpack://Mapper/./node_modules/antlr4/atn/ATNConfigSet.js","webpack://Mapper/./node_modules/antlr4/atn/SemanticContext.js","webpack://Mapper/./node_modules/antlr4/dfa/DFAState.js","webpack://Mapper/./node_modules/fhirpath/src/utilities.js","webpack://Mapper/./node_modules/antlr4/index.js","webpack://Mapper/./node_modules/antlr4/atn/ATNConfig.js","webpack://Mapper/./node_modules/antlr4/RuleContext.js","webpack://Mapper/./node_modules/antlr4/Lexer.js","webpack://Mapper/./node_modules/antlr4/error/ErrorListener.js","webpack://Mapper/./node_modules/antlr4/dfa/DFASerializer.js","webpack://Mapper/./node_modules/antlr4/ParserRuleContext.js","webpack://Mapper/./node_modules/antlr4/InputStream.js","webpack://Mapper/./src/mapping/mapper.js","webpack://Mapper/./node_modules/antlr4/tree/Trees.js","webpack://Mapper/./node_modules/antlr4/atn/ATNDeserializer.js","webpack://Mapper/./node_modules/antlr4/atn/ATNDeserializationOptions.js","webpack://Mapper/./node_modules/antlr4/atn/LexerAction.js","webpack://Mapper/./node_modules/antlr4/Recognizer.js","webpack://Mapper/./node_modules/antlr4/atn/ATNSimulator.js","webpack://Mapper/./node_modules/antlr4/atn/PredictionMode.js","webpack://Mapper/./node_modules/antlr4/polyfills/codepointat.js","webpack://Mapper/./node_modules/antlr4/polyfills/fromcodepoint.js","webpack://Mapper/./node_modules/antlr4/error/ErrorStrategy.js","webpack://Mapper/./node_modules/fhirpath/src/parser/generated/FHIRPathListener.js","webpack://Mapper/./node_modules/fhirpath/src/existence.js","webpack://Mapper/./node_modules/fhirpath/src/filtering.js","webpack://Mapper/./node_modules/fhirpath/src/deep-equal.js","webpack://Mapper/(webpack)/buildin/amd-options.js","webpack://Mapper/./src/mapping sync","webpack://Mapper/./src/utils/index.js","webpack://Mapper/./src/index.js","webpack://Mapper/./src/mapping/mappers/index.js","webpack://Mapper/./src/mapping/mappers/syntheaToV05.js","webpack://Mapper/./node_modules/fhirpath/src/fhirpath.js","webpack://Mapper/./node_modules/fhirpath/src/parser/index.js","webpack://Mapper/./node_modules/antlr4/atn/index.js","webpack://Mapper/./node_modules/antlr4/LL1Analyzer.js","webpack://Mapper/./node_modules/antlr4/atn/ATNType.js","webpack://Mapper/./node_modules/antlr4/atn/LexerATNSimulator.js","webpack://Mapper/./node_modules/antlr4/CommonTokenFactory.js","webpack://Mapper/./node_modules/antlr4/atn/LexerActionExecutor.js","webpack://Mapper/./node_modules/antlr4/atn/ParserATNSimulator.js","webpack://Mapper/./node_modules/antlr4/dfa/index.js","webpack://Mapper/./node_modules/antlr4/dfa/DFA.js","webpack://Mapper/./node_modules/antlr4/tree/index.js","webpack://Mapper/./node_modules/antlr4/error/index.js","webpack://Mapper/./node_modules/antlr4/error/DiagnosticErrorListener.js","webpack://Mapper/./node_modules/antlr4/CharStreams.js","webpack://Mapper/./node_modules/antlr4/FileStream.js","webpack://Mapper/./node_modules/antlr4/CommonTokenStream.js","webpack://Mapper/./node_modules/antlr4/BufferedTokenStream.js","webpack://Mapper/./node_modules/antlr4/Parser.js","webpack://Mapper/./node_modules/fhirpath/src/parser/generated/FHIRPathLexer.js","webpack://Mapper/./node_modules/fhirpath/src/parser/generated/FHIRPathParser.js","webpack://Mapper/./node_modules/fhirpath/src/combining.js","webpack://Mapper/./node_modules/fhirpath/src/misc.js","webpack://Mapper/./node_modules/fhirpath/src/equality.js","webpack://Mapper/./node_modules/fhirpath/src/collections.js","webpack://Mapper/./node_modules/fhirpath/src/math.js","webpack://Mapper/./node_modules/fhirpath/src/strings.js","webpack://Mapper/./node_modules/fhirpath/src/navigation.js","webpack://Mapper/./node_modules/fhirpath/src/datetime.js","webpack://Mapper/./node_modules/fhirpath/src/logic.js","webpack://Mapper/./node_modules/lodash/lodash.js","webpack://Mapper/(webpack)/buildin/global.js","webpack://Mapper/(webpack)/buildin/module.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","arrayToString","a","join","standardEqualsFunction","b","equals","standardHashCodeFunction","hashCode","Set","hashFunction","equalsFunction","this","data","BitSet","Map","AltDict","DoubleDict","Hash","count","hash","String","seed","Math","round","random","pow","remainder","bytes","h1","h1b","c1","c2","k1","toString","length","charCodeAt","indexOf","add","values","push","contains","concat","or","set","bits","keys","map","alt","remove","minValue","min","apply","update","finish","other","hashKey","put","entries","entry","oldValue","containsKey","getKeys","e","getValues","arguments","Array","isArray","k","updateHashCode","hashStuff","escapeWhitespace","escapeSpaces","replace","titleCase","str","txt","charAt","toUpperCase","substr","equalArrays","Token","source","type","channel","start","stop","tokenIndex","line","column","_text","CommonToken","undefined","EMPTY_SOURCE","DEFAULT_CHANNEL","INVALID_TYPE","EPSILON","MIN_USER_TOKEN_TYPE","EOF","HIDDEN_CHANNEL","text","getTokenSource","getInputStream","constructor","clone","input","size","getText","require","Interval","IntervalSet","intervals","readOnly","item","first","v","addOne","addInterval","addRange","h","splice","max","reduce","addSet","intervalslength","pop","complement","result","removeRange","len","removeOne","x","literalNames","symbolicNames","elemsAreChar","toTokenString","toCharString","toIndexString","names","fromCharCode","j","elementName","ATNState","atn","stateNumber","INVALID_STATE_NUMBER","stateType","ruleIndex","epsilonOnlyTransitions","transitions","nextTokenWithinRule","BasicState","BASIC","DecisionState","decision","nonGreedy","BlockStartState","endState","BasicBlockStartState","BLOCK_START","BlockEndState","BLOCK_END","startState","RuleStopState","RULE_STOP","RuleStartState","RULE_START","stopState","isPrecedenceRule","PlusLoopbackState","PLUS_LOOP_BACK","PlusBlockStartState","PLUS_BLOCK_START","loopBackState","StarBlockStartState","STAR_BLOCK_START","StarLoopbackState","STAR_LOOP_BACK","StarLoopEntryState","STAR_LOOP_ENTRY","isPrecedenceDecision","LoopEndState","LOOP_END","TokensStartState","TOKEN_START","serializationNames","isNonGreedyExitState","addTransition","trans","index","isEpsilon","INVALID_INTERVAL","Tree","SyntaxTree","ParseTree","RuleNode","TerminalNode","ErrorNode","ParseTreeVisitor","ParseTreeListener","TerminalNodeImpl","symbol","parentCtx","ErrorNodeImpl","token","ParseTreeWalker","visit","ctx","child","accept","visitChildren","children","visitTerminal","node","visitErrorNode","enterEveryRule","exitEveryRule","getChild","getSymbol","getParent","getPayload","getSourceInterval","getChildCount","visitor","isErrorNode","walk","listener","enterRule","exitRule","getRuleContext","DEFAULT","PredicateTransition","RecognitionException","params","Error","captureStackTrace","stack","message","recognizer","offendingToken","offendingState","state","LexerNoViableAltException","lexer","startIndex","deadEndConfigs","NoViableAltException","startToken","_ctx","getCurrentToken","InputMismatchException","FailedPredicateException","predicate","formatMessage","_interp","states","predicateIndex","predIndex","ParseCancellationException","getExpectedTokens","RuleContext","PredictionContext","cachedHashCode","PredictionContextCache","cache","SingletonPredictionContext","parent","returnState","EmptyPredictionContext","EMPTY_RETURN_STATE","ArrayPredictionContext","parents","returnStates","merge","rootIsWildcard","mergeCache","previous","rootMerge","EMPTY","payloads","mergeRoot","spc","singleParent","apc","a_","mergeSingletons","mergedReturnStates","mergedParents","a_parent","b_parent","payload","bothDollars","ax_ax","mergedParent","slice","M","uniqueParents","q","combineCommonParents","mergeArrays","globalNodeCount","id","isEmpty","hasEmptyPath","getReturnState","existing","contructor","up","predictionContextFromRuleContext","outerContext","transition","invokingState","followState","getCachedPredictionContext","context","contextCache","visited","changed","updated","LL1Analyzer","ATN","grammarType","maxTokenType","decisionToState","ruleToStartState","ruleToStopState","modeNameToStartState","ruleToTokenType","lexerActions","modeToStartState","nextTokensInContext","LOOK","nextTokensNoContext","nextTokens","addState","removeState","defineDecisionState","getDecisionState","following","expected","rt","INVALID_ALT_NUMBER","Predicate","PrecedencePredicate","Transition","target","label","AtomTransition","label_","makeLabel","serializationType","ATOM","RuleTransition","ruleStart","precedence","RULE","EpsilonTransition","outermostPrecedenceReturn","RangeTransition","RANGE","AbstractPredicateTransition","isCtxDependent","PREDICATE","ActionTransition","actionIndex","ACTION","SetTransition","SET","NotSetTransition","NOT_SET","WildcardTransition","WILDCARD","PrecedencePredicateTransition","PRECEDENCE","serializationTypes","matches","minVocabSymbol","maxVocabSymbol","getPredicate","Utils","SemanticContext","hashATNConfig","hashCodeForConfigSet","equalATNConfigs","equalsForConfigSet","ATNConfigSet","fullCtx","configLookup","configs","uniqueAlt","conflictingAlts","hasSemanticContext","dipsIntoOuterContext","OrderedATNConfigSet","config","semanticContext","NONE","reachesIntoOuterContext","merged","precedenceFilterSuppressed","getStates","getPredicates","preds","optimizeConfigs","interpreter","getCachedContext","addAll","coll","containsFast","clear","setReadonly","AND","operands","opnds","precedencePredicates","filterPrecedencePredicates","reduced","OR","sort","compareTo","evaluate","parser","evalPrecedence","andContext","orContext","localctx","sempred","precpred","differs","evaluated","PredPrediction","pred","DFAState","edges","isAcceptState","prediction","lexerActionExecutor","requiresFullContext","predicates","getAltSet","alts","util","fnName","collection","errorMsgPrefix","raiseError","JSON","stringify","types","typeList","acc","isSome","codepointat","dfa","fromcodepoint","tree","error","CharStreams","InputStream","FileStream","CommonTokenStream","Lexer","Parser","pc","ParserRuleContext","checkParams","isCfg","props","ATNConfig","checkContext","LexerATNConfig","passedThroughNonGreedyDecision","checkNonGreedyDecision","depth","getAltNumber","setAltNumber","altNumber","Trees","toStringTree","ruleNames","recog","ri","Recognizer","CommonTokenFactory","_input","_factory","_tokenFactorySourcePair","_token","_tokenStartCharIndex","_tokenStartLine","_tokenStartColumn","_hitEOF","_channel","_type","_modeStack","_mode","DEFAULT_MODE","MORE","SKIP","DEFAULT_TOKEN_CHANNEL","HIDDEN","MIN_CHAR_VALUE","MAX_CHAR_VALUE","reset","seek","nextToken","tokenStartMarker","mark","emitEOF","continueOuter","ttype","match","console","log","notifyListeners","recover","LA","emit","release","skip","more","pushMode","debug","popMode","sourceName","emitToken","getCharIndex","cpos","lpos","eof","getAllTokens","tokens","msg","getErrorDisplay","getErrorListenerDispatch","syntaxError","getErrorDisplayForChar","getCharErrorDisplay","re","consume","ErrorListener","ConsoleErrorListener","ProxyErrorListener","delegates","offendingSymbol","reportAmbiguity","stopIndex","exact","ambigAlts","reportAttemptingFullContext","reportContextSensitivity","INSTANCE","DFASerializer","LexerDFASerializer","s0","buf","sortedStates","getStateString","getEdgeLabel","baseStateStr","invokingStateNumber","exception","InterpreterRuleContext","copyFrom","addChild","removeLastChild","addTokenNode","addErrorNode","badToken","getToken","getTokens","getTypedRuleContext","ctxType","getTypedRuleContexts","contexts","decodeToUnicodeCodePoints","strdata","stream","_index","codePoint","codePointAt","codeUnit","_size","_loadString","offset","pos","LT","marker","fromCodePoint","fhirpath","_","isTrue","arg","find","buildProcessor","processor","buildFilter","filters","f","resource","filter","path","compile","buildMappers","args","mappers","AggregateMapper","exec","FilterMapper","mapper","description","filterFn","defaultFn","ignoreFn","ignore","excludeFn","exclude","execute","resourceType","fullUrl","execfn","getNodeText","res","getChildren","list","getAncestors","ancestors","findAllTokenNodes","findAllNodes","findAllRuleNodes","findTokens","nodes","_findAllNodes","descendants","ATNType","ATNStates","Transitions","ATNDeserializationOptions","LexerActions","LexerActionType","LexerSkipAction","LexerChannelAction","LexerCustomAction","LexerMoreAction","LexerTypeAction","LexerPushModeAction","LexerPopModeAction","LexerModeAction","ADDED_UNICODE_SMP","SUPPORTED_UUIDS","initArray","tmp","ATNDeserializer","options","defaultOptions","deserializationOptions","stateFactories","actionFactories","isFeatureSupported","feature","actualUuid","idx1","deserialize","checkVersion","checkUUID","readATN","readStates","readRules","readModes","sets","readSets","readInt","uuid","readInt32","readEdges","readDecisions","readLexerActions","markPrecedenceDecisions","verifyATN","generateRuleBypassTransitions","PARSER","temp","split","version","readUUID","pair","loopBackStateNumbers","endStateNumbers","nstates","stype","stateFactory","loopBackStateNumber","endStateNumber","numNonGreedyStates","numPrecedenceStates","nrules","LEXER","tokenType","nmodes","readUnicode","iset","i1","i2","nedges","src","trg","arg1","arg2","arg3","edgeFactory","ndecisions","decState","actionType","data1","data2","lexerAction","lexerActionFactory","generateRuleBypassTransition","idx","bypassStart","bypassStop","excludeTransition","stateIsEndStateFor","matchState","maybeLoopEndState","checkCondition","condition","readLong","byteToHex","bth","createByteToHex","bb","int","sf","af","CHANNEL","CUSTOM","MODE","POP_MODE","PUSH_MODE","TYPE","LexerAction","action","isPositionDependent","LexerIndexedCustomAction","_listeners","_stateNumber","tokenTypeMapCache","ruleIndexMapCache","toolVersion","addErrorListener","removeErrorListeners","getTokenTypeMap","tokenNames","getTokenNames","getRuleIndexMap","getTokenType","tokenName","getErrorHeader","getOffendingToken","getTokenErrorDisplay","ATNSimulator","sharedContextCache","ERROR","PredictionMode","SLL","LL","LL_EXACT_AMBIG_DETECTION","hasSLLConflictTerminatingPrediction","allConfigsInRuleStopStates","dup","items","altsets","getConflictingAltSubsets","hasConflictingAltSet","hasStateAssociatedWithOneAlt","hasConfigInRuleStopState","resolvesToJustOneViableAlt","getSingleViableAlt","allSubsetsConflict","hasNonConflictingAltSet","allSubsetsEqual","getUniqueAlt","all","getAlts","configToAlts","cfg","getStateToAltMap","minAlt","$defineProperty","position","TypeError","string","Number","second","stringFromCharCode","floor","highSurrogate","lowSurrogate","MAX_SIZE","codeUnits","isFinite","RangeError","Errors","ErrorStrategy","DefaultErrorStrategy","errorRecoveryMode","lastErrorIndex","lastErrorStates","BailErrorStrategy","recoverInline","sync","inErrorRecoveryMode","reportError","endErrorCondition","beginErrorCondition","reportMatch","reportNoViableAlternative","reportInputMismatch","reportFailedPredicate","notifyErrorListeners","getMessage","followSet","getErrorRecoverySet","consumeUntil","la","getTokenStream","singleTokenDeletion","reportUnwantedToken","expecting","whatFollowsLoopIterationOrRule","escapeWSAndQuote","reportMissingToken","matchedSymbol","singleTokenInsertion","getMissingSymbol","currentSymbolType","next","nextTokenType","tokenText","currentSymbol","expectedTokenType","current","lookback","getTokenFactory","recoverSet","follow","antlr4","FHIRPathListener","enterIndexerExpression","exitIndexerExpression","enterPolarityExpression","exitPolarityExpression","enterAdditiveExpression","exitAdditiveExpression","enterMultiplicativeExpression","exitMultiplicativeExpression","enterUnionExpression","exitUnionExpression","enterOrExpression","exitOrExpression","enterAndExpression","exitAndExpression","enterMembershipExpression","exitMembershipExpression","enterInequalityExpression","exitInequalityExpression","enterInvocationExpression","exitInvocationExpression","enterEqualityExpression","exitEqualityExpression","enterImpliesExpression","exitImpliesExpression","enterTermExpression","exitTermExpression","enterTypeExpression","exitTypeExpression","enterInvocationTerm","exitInvocationTerm","enterLiteralTerm","exitLiteralTerm","enterExternalConstantTerm","exitExternalConstantTerm","enterParenthesizedTerm","exitParenthesizedTerm","enterNullLiteral","exitNullLiteral","enterBooleanLiteral","exitBooleanLiteral","enterStringLiteral","exitStringLiteral","enterNumberLiteral","exitNumberLiteral","enterDateTimeLiteral","exitDateTimeLiteral","enterTimeLiteral","exitTimeLiteral","enterQuantityLiteral","exitQuantityLiteral","enterExternalConstant","exitExternalConstant","enterMemberInvocation","exitMemberInvocation","enterFunctionInvocation","exitFunctionInvocation","enterThisInvocation","exitThisInvocation","enterFunctn","exitFunctn","enterParamList","exitParamList","enterQuantity","exitQuantity","enterUnit","exitUnit","enterDateTimePrecision","exitDateTimePrecision","enterPluralDateTimePrecision","exitPluralDateTimePrecision","enterTypeSpecifier","exitTypeSpecifier","enterQualifiedIdentifier","exitQualifiedIdentifier","enterIdentifier","exitIdentifier","filtering","engine","orderedJsonStringify","obj","sortObjByKey","subsetOf","coll1","coll2","rtn","c2Hash","pLen","obj1Str","found","obj2","obj2Str","emptyFn","notFn","existsMacro","expr","vec","whereMacro","allMacro","allTrueFn","assertType","anyTrueFn","allFalseFn","anyFalseFn","subsetOfFn","supersetOfFn","isDistinctFn","distinctFn","unique","uniqueHash","xObj","xStr","countFn","parentData","flatten","selectMacro","repeatMacro","lres","shift","singleFn","$status","$error","firstFn","lastFn","tailFn","takeFn","skipFn","num","ofTypeFn","tp","isInteger","checkFHIRType","pSlice","objectKeys","isArguments","isString","myVar","isNumber","isNaN","parseFloat","normalizeStr","decimalPlaces","fraction","exponent","PRECISION_STEP","roundToMaxPrecision","roundToDecimalPlaces","scale","deepEqual","actual","opts","fuzzy","prec","Date","getTime","strict","objEquiv","isUndefinedOrNull","ka","kb","__webpack_amd_options__","webpackEmptyContext","req","code","resolve","applyProfile","profile","meta","unshift","utils","exps","syntheaToV05","DEFAULT_PROFILE","resourceMapping","default","existence","combining","misc","equality","collections","math","strings","navigation","datetime","logic","invocationTable","empty","fn","not","exists","arity","0","1","allTrue","anyTrue","allFalse","anyFalse","supersetOf","isDistinct","distinct","where","select","single","last","ofType","tail","take","combine","combineFn","iif","iifMacro","3","trace","traceFn","toInteger","toDecimal","substring","2","startsWith","endsWith","containsFn","replaceMatches","now","today","repeat","unionOp","equal","nullable","unequal","equival","unequival","lt","gt","lte","gte","amp","plus","minus","mul","div","mod","intdiv","orOp","andOp","xorOp","impliesOp","InvocationExpression","ch","doEval","TermExpression","ExternalConstantTerm","identifier","varName","Identifier","vars","LiteralTerm","term","StringLiteral","BooleanLiteral","NumberLiteral","InvocationTerm","MemberInvocation","isCapitalized","toAdd","IndexerExpression","coll_node","idx_node","idxNum","parseInt","Functn","realizeParams","paramTable","val","makeParam","param","currentData","arraify","dataRoot","maker","isNullable","infixInvoke","rawParams","invoc","paramsNumber","argTypes","pr","some","FunctionInvocation","doInvoke","ParamList","UnionExpression","ThisInvocation","OpExpression","terminalNodeText","AliasOpExpression","op","alias","NullLiteral","ParenthesizedTerm","evalTable","EqualityExpression","InequalityExpression","AdditiveExpression","MultiplicativeExpression","MembershipExpression","OrExpression","ImpliesExpression","AndExpression","XorExpression","evaluator","parse","applyParsedPath","parsedPath","ucum","assign","FHIRPathLexer","FHIRPathParser","Listener","errors","rec","sym","col","chars","buildParseTrees","expression","PathListener","ast","parentStack","parentNode","nodeType","printer","errMsgs","err","LexerATNSimulator","ParserATNSimulator","HIT_PRED","getDecisionLookahead","look","lookBusy","_LOOK","lookContext","calledRuleStack","seeThruPreds","addEOF","removed","newContext","LexerActionExecutor","resetSimState","sim","dfaState","SimState","decisionToDFA","prevAccept","dfa_debug","MIN_DFA_EDGE","MAX_DFA_EDGE","match_calls","copyState","simulator","matchATN","execATN","old_mode","s0_closure","computeStartState","suppressEdge","addDFAState","predict","toLexerString","ds0","captureSimState","getExistingTargetState","computeTargetState","failOrAccept","reach","getReachableConfigSet","addDFAEdge","closure","skipAlt","currentAltReachedAcceptState","getTokenName","getReachableTarget","fixOffsetBeforeMatch","treatEofAsEpsilon","charPos","initialContext","speculative","getEpsilonTarget","evaluatePredicate","append","savedcolumn","savedLine","settings","from_","tk","to","cfgs","proposed","firstConfigWithRuleStopState","newState","getDFA","tt","TokenFactory","copyText","createThin","updatedLexerActions","requiresSeek","numActions","predictionMode","_startIndex","_outerContext","_dfa","debug_closure","debug_add","debug_list_atn_decisions","retry_debug","adaptivePredict","getLookaheadName","precedenceDfa","getPrecedenceStartState","getPrecedence","atnStartState","applyPrecedenceFilter","setPrecedenceStartState","previousD","D","noViableAlt","getSynValidOrSemInvalidAltThatFinishedDecisionEntryRule","conflictIndex","evalSemanticContext","execATNWithFullContext","computeReachSet","predictedAlt","altSubSets","getConflictingAlts","predicateDFAState","decisionState","nalts","altsToCollectPredsFrom","getConflictingAltsOrUniqueAlt","altToPred","getPredsForAmbigAlts","getPredicatePredictions","foundExactAmbig","intermediate","skippedStopStates","closureBusy","removeAllConfigsNotInRuleStopState","lookToEndOfRule","endOfRuleState","statesFromAlt1","configSet","updatedContext","nPredAlts","pairs","containsPredicate","splitAccordingToSemanticValidity","semValidConfigs","semInvalidConfigs","getAltThatFinishedDecisionEntryRule","succeeded","failed","predPredictions","complete","predictions","predicateEvaluationResult","collectPredicates","closureCheckingStopState","parms","getRuleName","closure_","canDropLoopEntryEdgeInLeftRecursiveRule","continueCollecting","newDepth","numCtxs","blockEndStateNum","blockEndState","returnStateNumber","returnStateTarget","inContext","ruleTransition","precedenceTransition","predTransition","actionTransition","pt","getRuleInvocationStack","currentPosition","predSucceeds","newSemCtx","dumpDeadEndConfigs","nvae","decs","getDeadEndConfigs","interval","DFA","_states","precedenceState","setPrecedenceDfa","DFAStatesSet","DiagnosticErrorListener","exactOnly","getDecisionDescription","ruleName","reportedAlts","fs","importScripts","fromString","fromBlob","blob","encoding","onLoad","onError","reader","FileReader","onload","is","onerror","readAsText","fromBuffer","buffer","fromPath","callback","readFile","fromPathSync","readFileSync","fileName","BufferedTokenStream","adjustSeekIndex","nextTokenOnChannel","LB","previousTokenOnChannel","lazyInit","getNumberOfOnChannelTokens","fill","TokenStream","tokenSource","fetchedEOF","fetch","subset","setup","setTokenSource","getHiddenTokensToRight","nextOnChannel","filterForChannel","getHiddenTokensToLeft","prevOnChannel","left","right","hidden","getSourceName","TraceListener","_errHandler","_precedenceStack","_tracer","_parseListeners","_syntaxErrors","setInputStream","bypassAltsAtnCache","setTrace","matchWildcard","_buildParseTrees","getParseListeners","addParseListener","removeParseListener","removeParseListeners","triggerEnterRuleEvent","triggerExitRuleEvent","reverse","setTokenFactory","getATNWithBypassAlts","serializedAtn","getSerializedATN","compileParseTreePattern","pattern","patternRuleIndex","ParseTreePatternMatcher","setTokenStream","hasListener","addContextToParseTree","enterOuterAlt","altNum","enterRecursionRule","pushNewRecursionContext","unrollRecursionContexts","retCtx","getInvokingContext","isExpectedToken","getExpectedTokensWithinCurrentRule","getRuleIndex","getDFAStrings","dumpDFA","seenOne","println","print","serializedATN","decisionsToDFA","ds","T__0","T__1","T__2","T__3","T__4","T__5","T__6","T__7","T__8","T__9","T__10","T__11","T__12","T__13","T__14","T__15","T__16","T__17","T__18","T__19","T__20","T__21","T__22","T__23","T__24","T__25","T__26","T__27","T__28","T__29","T__30","T__31","T__32","T__33","T__34","T__35","T__36","T__37","T__38","T__39","T__40","T__41","T__42","T__43","T__44","T__45","T__46","T__47","T__48","T__49","T__50","T__51","DATETIME","TIME","IDENTIFIER","QUOTEDIDENTIFIER","STRING","NUMBER","WS","COMMENT","LINE_COMMENT","channelNames","modeNames","grammarFileName","ExpressionContext","RULE_expression","IndexerExpressionContext","PolarityExpressionContext","AdditiveExpressionContext","MultiplicativeExpressionContext","UnionExpressionContext","OrExpressionContext","AndExpressionContext","MembershipExpressionContext","InequalityExpressionContext","InvocationExpressionContext","EqualityExpressionContext","ImpliesExpressionContext","TermExpressionContext","TypeExpressionContext","TermContext","RULE_term","ExternalConstantTermContext","LiteralTermContext","ParenthesizedTermContext","InvocationTermContext","LiteralContext","RULE_literal","TimeLiteralContext","NullLiteralContext","DateTimeLiteralContext","StringLiteralContext","BooleanLiteralContext","NumberLiteralContext","QuantityLiteralContext","ExternalConstantContext","RULE_externalConstant","InvocationContext","RULE_invocation","ThisInvocationContext","FunctionInvocationContext","MemberInvocationContext","FunctnContext","RULE_functn","ParamListContext","RULE_paramList","QuantityContext","RULE_quantity","UnitContext","RULE_unit","DateTimePrecisionContext","RULE_dateTimePrecision","PluralDateTimePrecisionContext","RULE_pluralDateTimePrecision","TypeSpecifierContext","RULE_typeSpecifier","QualifiedIdentifierContext","RULE_qualifiedIdentifier","IdentifierContext","RULE_identifier","invocation","typeSpecifier","_p","_parentctx","_parentState","_la","_alt","externalConstant","literal","quantity","functn","paramList","unit","dateTimePrecision","pluralDateTimePrecision","qualifiedIdentifier","expression_sempred","combineFns","cond","ok","fail","intRegex","test","numRegex","y","equivalence","typecheck","assertAtMostOne","containsImpl","xs","ys","ensureStringSingleton","prefix","postfix","includes","regex","RegExp","repl","reg","prop","LARGE_ARRAY_SIZE","CORE_ERROR_TEXT","FUNC_ERROR_TEXT","HASH_UNDEFINED","MAX_MEMOIZE_SIZE","PLACEHOLDER","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","WRAP_BIND_FLAG","WRAP_BIND_KEY_FLAG","WRAP_CURRY_BOUND_FLAG","WRAP_CURRY_FLAG","WRAP_CURRY_RIGHT_FLAG","WRAP_PARTIAL_FLAG","WRAP_PARTIAL_RIGHT_FLAG","WRAP_ARY_FLAG","WRAP_REARG_FLAG","WRAP_FLIP_FLAG","DEFAULT_TRUNC_LENGTH","DEFAULT_TRUNC_OMISSION","HOT_COUNT","HOT_SPAN","LAZY_FILTER_FLAG","LAZY_MAP_FLAG","INFINITY","MAX_SAFE_INTEGER","MAX_INTEGER","NAN","MAX_ARRAY_LENGTH","MAX_ARRAY_INDEX","HALF_MAX_ARRAY_LENGTH","wrapFlags","argsTag","arrayTag","asyncTag","boolTag","dateTag","domExcTag","errorTag","funcTag","genTag","mapTag","numberTag","nullTag","objectTag","proxyTag","regexpTag","setTag","stringTag","symbolTag","undefinedTag","weakMapTag","weakSetTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrim","reTrimStart","reTrimEnd","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsComboRange","rsComboMarksRange","rsBreakRange","rsMathOpRange","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsMiscLower","rsMiscUpper","reOptMod","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","freeParseFloat","freeParseInt","freeGlobal","global","freeSelf","self","Function","freeExports","freeModule","moduleExports","freeProcess","process","nodeUtil","binding","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","isDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","func","thisArg","arrayAggregator","array","setter","iteratee","accumulator","arrayEach","arrayEachRight","arrayEvery","arrayFilter","resIndex","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","arrayPush","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","baseFindKey","eachFunc","baseFindIndex","fromIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","baseTimes","baseUnary","baseValues","cacheHas","has","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","deburrLetter","escapeHtmlChar","escapeStringChar","chr","hasUnicode","mapToArray","forEach","overArg","transform","replaceHolders","placeholder","setToArray","setToPairs","stringSize","lastIndex","unicodeSize","stringToArray","unicodeToArray","asciiToArray","unescapeHtmlChar","runInContext","uid","defaults","pick","arrayProto","funcProto","objectProto","coreJsData","funcToString","idCounter","maskSrcKey","IE_PROTO","nativeObjectToString","objectCtorString","oldDash","reIsNative","Buffer","Uint8Array","allocUnsafe","getPrototype","getPrototypeOf","objectCreate","propertyIsEnumerable","spreadableSymbol","isConcatSpreadable","symIterator","iterator","symToStringTag","getNative","ctxClearTimeout","clearTimeout","ctxNow","ctxSetTimeout","setTimeout","nativeCeil","ceil","nativeFloor","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","isBuffer","nativeIsFinite","nativeJoin","nativeKeys","nativeMax","nativeMin","nativeNow","nativeParseInt","nativeRandom","nativeReverse","DataView","Promise","WeakMap","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","valueOf","symbolToString","lodash","isObjectLike","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","proto","isObject","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","ListCache","MapCache","SetCache","__data__","Stack","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","eq","baseAssignValue","assignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","baseAt","paths","number","lower","upper","baseClone","bitmask","customizer","isDeep","isFlat","isFull","initCloneArray","tag","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","getSymbols","copySymbols","Ctor","cloneArrayBuffer","dataView","byteOffset","byteLength","cloneDataView","cloneTypedArray","regexp","cloneRegExp","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","baseConformsTo","baseDelay","wait","baseDifference","isCommon","valuesLength","outer","computed","valuesIndex","templateSettings","getMapData","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","isSymbol","baseFilter","baseFlatten","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","isFunction","baseGet","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","isOwn","unmasked","getRawTag","objectToString","baseGt","baseHas","baseHasIn","baseIntersection","arrays","othLength","othIndex","caches","maxLength","Infinity","seen","baseInvoke","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","convert","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsMatch","matchData","noCustomizer","srcValue","baseIsNative","baseIteratee","identity","baseMatchesProperty","baseMatches","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","isArrayLike","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","mergeFunc","safeGet","newValue","isTyped","isArrayLikeObject","isPlainObject","toPlainObject","baseMergeDeep","baseNth","baseOrderBy","iteratees","orders","getIteratee","comparer","baseSortBy","objCriteria","criteria","othCriteria","ordersLength","compareAscending","order","compareMultiple","basePickBy","baseSet","basePullAll","basePullAt","indexes","baseUnset","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","constant","baseShuffle","baseSlice","end","baseSome","baseSortedIndex","retHighest","low","high","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","actions","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","copy","arrayBuffer","typedArray","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","sources","guard","isIterateeCall","iterable","createCaseFirst","methodName","trailing","createCompounder","words","deburr","createCtor","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","wrapper","getFuncName","funcName","getData","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","ary","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","countHolders","newHolders","createRecurry","arrLength","oldArray","reorder","createInverter","toIteratee","baseInverter","createMathOperation","operator","defaultValue","createOver","arrayFunc","createPadding","charsLength","createRange","step","toFinite","baseRange","createRelationalOperation","toNumber","wrapFunc","isCurry","newData","setData","setWrapToString","createRound","precision","noop","createToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","mergeData","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrValue","otherFunc","getValue","stubArray","hasPath","hasFunc","isLength","ArrayBuffer","ctorString","isMaskable","stubFalse","otherArgs","shortOut","reference","details","insertWrapDetails","updateWrapDetails","getWrapDetails","lastCalled","stamp","remaining","rand","memoize","memoizeCapped","quote","subString","difference","differenceBy","differenceWith","findIndex","findLastIndex","head","intersection","mapped","intersectionBy","intersectionWith","pull","pullAll","pullAt","union","unionBy","unionWith","unzip","group","unzipWith","without","xor","xorBy","xorWith","zip","zipWith","chain","interceptor","wrapperAt","countBy","findLast","forEachRight","groupBy","invokeMap","keyBy","partition","sortBy","before","bindKey","debounce","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","time","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","leadingEdge","cancel","flush","defer","delay","resolver","memoized","Cache","negate","overArgs","transforms","funcsLength","partial","partialRight","rearg","isError","toArray","done","iteratorToArray","toLength","isBinary","assignIn","assignInWith","assignWith","at","propsIndex","propsLength","defaultsDeep","mergeWith","invert","invertBy","invoke","omit","basePick","pickBy","toPairs","toPairsIn","camelCase","word","toLowerCase","capitalize","upperFirst","kebabCase","lowerCase","lowerFirst","snakeCase","startCase","upperCase","hasUnicodeWord","unicodeWords","asciiWords","attempt","bindAll","methodNames","flow","flowRight","method","methodOf","mixin","over","overEvery","overSome","basePropertyDeep","range","rangeRight","augend","addend","divide","dividend","divisor","multiply","multiplier","multiplicand","subtract","minuend","subtrahend","after","castArray","chunk","compact","conforms","baseConforms","properties","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","baseFill","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","flip","fromPairs","functions","functionsIn","initial","mapKeys","mapValues","matchesProperty","nthArg","omitBy","once","orderBy","propertyOf","pullAllBy","pullAllWith","reject","rest","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","separator","limit","spread","takeRight","takeRightWhile","takeWhile","tap","throttle","toPath","isArrLike","unary","uniq","uniqBy","uniqWith","unset","updateWith","valuesIn","wrap","zipObject","zipObjectDeep","entriesIn","extend","extendWith","clamp","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","escape","escapeRegExp","every","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","inRange","baseInRange","isBoolean","isElement","isEqual","isEqualWith","isMatch","isMatchWith","isNative","isNil","isNull","isSafeInteger","isUndefined","isWeakMap","isWeakSet","lastIndexOf","strictLastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","nth","noConflict","pad","strLength","padEnd","padStart","radix","floating","reduceRight","sample","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","sum","sumBy","template","isEscaping","isEvaluating","imports","importsKeys","importsValues","interpolate","reDelimiters","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","variable","times","toLower","toSafeInteger","toUpper","trim","trimEnd","trimStart","truncate","omission","search","newEnd","unescape","uniqueId","each","eachRight","VERSION","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","dir","isRight","view","getView","iterLength","takeCount","iterIndex","commit","wrapped","toJSON","g","webpackPolyfill","deprecate"],"mappings":"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ACA,iBACA,eACA,eACA,eACA,eACA,eACA,gBACA,gBACA,gBACA,gBACA,gBACA,iBACA,gBACA,gBACA,gBACA,gBACA,iBACA,gBACA,gBACA,gBACA,gBACA,iBACA,gBACA,gBACA,gBACA,gBACA,gBACA,eACA,iBACA,gBACA,eACA,eACA,eACA,eACA,gBACA,gBACA,gBACA,gBACA,iBACA,gBACA,gBACA,gBACA,gBACA,iBACA,gBACA,gBACA,gBACA,gBACA,iBACA,gBACA,gBACA,gBACA,gBACA,iBACA,gBACA,eACA,eACA,eACA,eACA,iBACA,iBACA,iBACA,eACA,eACA,gBACA,eACA,gBACA,eACA,eACA,eACA,gBACA,eACA,eACA,eACA,iBACA,gBACA,gBACA,iBACA,eACA,eACA,iBACA,eACA,gBACA,gBACA,gBACA,gBACA,iBACA,gBACA,gBACA,gBACA,gBACA,iBACA,gBACA,gBACA,gBACA,iBACA,gBACA,gBACA,gBACA,eACA,gBACA,iBACA,gBACA,gBACA,gBACA,gBACA,gBACA,iBACA,gBACA,gBACA,gBACA,gBACA,iBACA,gBACA,gBACA,gBACA,gBACA,iBACA,gBACA,gBACA,gBACA,gBACA,iBACA,gBACA,gBACA,gBACA,iBACA,gBACA,gBACA,gBACA,gBACA,gBACA,iBACA,gBACA,gBACA,iBACA,gBACA,iBACA,gBACA,gBACA,iBACA,eACA,iBACA,gBACA,gBACA,iBACA,eACA,iBACA,gBACA,gBACA,gBACA,gBACA,iBACA,gBACA,gBACA,gBACA,gBACA,iBACA,gBACA,gBACA,kBACA,kBACA,mBACA,iBACA,iBACA,gBACA,eACA,eACA,eACA,eACA,gBACA,eACA,gBACA,mBACA,iBACA,kBACA,mBACA,iBACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,kBACA,kBACA,iBACA,gBACA,eACA,gBACA,eACA,gBACA,eACA,eACA,eACA,iBACA,eACA,eACA,eACA,gBACA,eACA,iBACA,eACA,eACA,eACA,gBACA,gBACA,e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","file":"app.bundle.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Mapper\"] = factory();\n\telse\n\t\troot[\"Mapper\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 40);\n","/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n\nfunction arrayToString(a) {\n return \"[\" + a.join(\", \") + \"]\";\n}\n\nString.prototype.seed = String.prototype.seed || Math.round(Math.random() * Math.pow(2, 32));\n\nString.prototype.hashCode = function () {\n var remainder, bytes, h1, h1b, c1, c1b, c2, c2b, k1, i,\n key = this.toString();\n\n remainder = key.length & 3; // key.length % 4\n bytes = key.length - remainder;\n h1 = String.prototype.seed;\n c1 = 0xcc9e2d51;\n c2 = 0x1b873593;\n i = 0;\n\n while (i < bytes) {\n k1 =\n ((key.charCodeAt(i) & 0xff)) |\n ((key.charCodeAt(++i) & 0xff) << 8) |\n ((key.charCodeAt(++i) & 0xff) << 16) |\n ((key.charCodeAt(++i) & 0xff) << 24);\n ++i;\n\n k1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff;\n k1 = (k1 << 15) | (k1 >>> 17);\n k1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff;\n\n h1 ^= k1;\n h1 = (h1 << 13) | (h1 >>> 19);\n h1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;\n h1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16));\n }\n\n k1 = 0;\n\n switch (remainder) {\n case 3:\n k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;\n case 2:\n k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;\n case 1:\n k1 ^= (key.charCodeAt(i) & 0xff);\n\n k1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;\n k1 = (k1 << 15) | (k1 >>> 17);\n k1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;\n h1 ^= k1;\n }\n\n h1 ^= key.length;\n\n h1 ^= h1 >>> 16;\n h1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;\n h1 ^= h1 >>> 13;\n h1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;\n h1 ^= h1 >>> 16;\n\n return h1 >>> 0;\n};\n\nfunction standardEqualsFunction(a, b) {\n return a.equals(b);\n}\n\nfunction standardHashCodeFunction(a) {\n return a.hashCode();\n}\n\nfunction Set(hashFunction, equalsFunction) {\n this.data = {};\n this.hashFunction = hashFunction || standardHashCodeFunction;\n this.equalsFunction = equalsFunction || standardEqualsFunction;\n return this;\n}\n\nObject.defineProperty(Set.prototype, \"length\", {\n get: function () {\n var l = 0;\n for (var key in this.data) {\n if (key.indexOf(\"hash_\") === 0) {\n l = l + this.data[key].length;\n }\n }\n return l;\n }\n});\n\nSet.prototype.add = function (value) {\n var hash = this.hashFunction(value);\n var key = \"hash_\" + hash;\n if (key in this.data) {\n var values = this.data[key];\n for (var i = 0; i < values.length; i++) {\n if (this.equalsFunction(value, values[i])) {\n return values[i];\n }\n }\n values.push(value);\n return value;\n } else {\n this.data[key] = [value];\n return value;\n }\n};\n\nSet.prototype.contains = function (value) {\n return this.get(value) != null;\n};\n\nSet.prototype.get = function (value) {\n var hash = this.hashFunction(value);\n var key = \"hash_\" + hash;\n if (key in this.data) {\n var values = this.data[key];\n for (var i = 0; i < values.length; i++) {\n if (this.equalsFunction(value, values[i])) {\n return values[i];\n }\n }\n }\n return null;\n};\n\nSet.prototype.values = function () {\n var l = [];\n for (var key in this.data) {\n if (key.indexOf(\"hash_\") === 0) {\n l = l.concat(this.data[key]);\n }\n }\n return l;\n};\n\nSet.prototype.toString = function () {\n return arrayToString(this.values());\n};\n\nfunction BitSet() {\n this.data = [];\n return this;\n}\n\nBitSet.prototype.add = function (value) {\n this.data[value] = true;\n};\n\nBitSet.prototype.or = function (set) {\n var bits = this;\n Object.keys(set.data).map(function (alt) {\n bits.add(alt);\n });\n};\n\nBitSet.prototype.remove = function (value) {\n delete this.data[value];\n};\n\nBitSet.prototype.contains = function (value) {\n return this.data[value] === true;\n};\n\nBitSet.prototype.values = function () {\n return Object.keys(this.data);\n};\n\nBitSet.prototype.minValue = function () {\n return Math.min.apply(null, this.values());\n};\n\nBitSet.prototype.hashCode = function () {\n var hash = new Hash();\n hash.update(this.values());\n return hash.finish();\n};\n\nBitSet.prototype.equals = function (other) {\n if (!(other instanceof BitSet)) {\n return false;\n }\n return this.hashCode() === other.hashCode();\n};\n\nObject.defineProperty(BitSet.prototype, \"length\", {\n get: function () {\n return this.values().length;\n }\n});\n\nBitSet.prototype.toString = function () {\n return \"{\" + this.values().join(\", \") + \"}\";\n};\n\nfunction Map(hashFunction, equalsFunction) {\n this.data = {};\n this.hashFunction = hashFunction || standardHashCodeFunction;\n this.equalsFunction = equalsFunction || standardEqualsFunction;\n return this;\n}\n\nObject.defineProperty(Map.prototype, \"length\", {\n get: function () {\n var l = 0;\n for (var hashKey in this.data) {\n if (hashKey.indexOf(\"hash_\") === 0) {\n l = l + this.data[hashKey].length;\n }\n }\n return l;\n }\n});\n\nMap.prototype.put = function (key, value) {\n var hashKey = \"hash_\" + this.hashFunction(key);\n if (hashKey in this.data) {\n var entries = this.data[hashKey];\n for (var i = 0; i < entries.length; i++) {\n var entry = entries[i];\n if (this.equalsFunction(key, entry.key)) {\n var oldValue = entry.value;\n entry.value = value;\n return oldValue;\n }\n }\n entries.push({key:key, value:value});\n return value;\n } else {\n this.data[hashKey] = [{key:key, value:value}];\n return value;\n }\n};\n\nMap.prototype.containsKey = function (key) {\n var hashKey = \"hash_\" + this.hashFunction(key);\n if(hashKey in this.data) {\n var entries = this.data[hashKey];\n for (var i = 0; i < entries.length; i++) {\n var entry = entries[i];\n if (this.equalsFunction(key, entry.key))\n return true;\n }\n }\n return false;\n};\n\nMap.prototype.get = function (key) {\n var hashKey = \"hash_\" + this.hashFunction(key);\n if(hashKey in this.data) {\n var entries = this.data[hashKey];\n for (var i = 0; i < entries.length; i++) {\n var entry = entries[i];\n if (this.equalsFunction(key, entry.key))\n return entry.value;\n }\n }\n return null;\n};\n\nMap.prototype.entries = function () {\n var l = [];\n for (var key in this.data) {\n if (key.indexOf(\"hash_\") === 0) {\n l = l.concat(this.data[key]);\n }\n }\n return l;\n};\n\n\nMap.prototype.getKeys = function () {\n return this.entries().map(function(e) {\n return e.key;\n });\n};\n\n\nMap.prototype.getValues = function () {\n return this.entries().map(function(e) {\n return e.value;\n });\n};\n\n\nMap.prototype.toString = function () {\n var ss = this.entries().map(function(entry) {\n return '{' + entry.key + ':' + entry.value + '}';\n });\n return '[' + ss.join(\", \") + ']';\n};\n\n\nfunction AltDict() {\n this.data = {};\n return this;\n}\n\n\nAltDict.prototype.get = function (key) {\n key = \"k-\" + key;\n if (key in this.data) {\n return this.data[key];\n } else {\n return null;\n }\n};\n\nAltDict.prototype.put = function (key, value) {\n key = \"k-\" + key;\n this.data[key] = value;\n};\n\nAltDict.prototype.values = function () {\n var data = this.data;\n var keys = Object.keys(this.data);\n return keys.map(function (key) {\n return data[key];\n });\n};\n\nfunction DoubleDict() {\n return this;\n}\n\nfunction Hash() {\n this.count = 0;\n this.hash = 0;\n return this;\n}\n\nHash.prototype.update = function () {\n for(var i=0;i>> (32 - 15));\n k = k * 0x1B873593;\n this.count = this.count + 1;\n var hash = this.hash ^ k;\n hash = (hash << 13) | (hash >>> (32 - 13));\n hash = hash * 5 + 0xE6546B64;\n this.hash = hash;\n }\n }\n}\n\nHash.prototype.finish = function () {\n var hash = this.hash ^ (this.count * 4);\n hash = hash ^ (hash >>> 16);\n hash = hash * 0x85EBCA6B;\n hash = hash ^ (hash >>> 13);\n hash = hash * 0xC2B2AE35;\n hash = hash ^ (hash >>> 16);\n return hash;\n}\n\nfunction hashStuff() {\n var hash = new Hash();\n hash.update.apply(arguments);\n return hash.finish();\n}\n\nDoubleDict.prototype.get = function (a, b) {\n var d = this[a] || null;\n return d === null ? null : (d[b] || null);\n};\n\nDoubleDict.prototype.set = function (a, b, o) {\n var d = this[a] || null;\n if (d === null) {\n d = {};\n this[a] = d;\n }\n d[b] = o;\n};\n\n\nfunction escapeWhitespace(s, escapeSpaces) {\n s = s.replace(/\\t/g, \"\\\\t\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\");\n if (escapeSpaces) {\n s = s.replace(/ /g, \"\\u00B7\");\n }\n return s;\n}\n\nfunction titleCase(str) {\n return str.replace(/\\w\\S*/g, function (txt) {\n return txt.charAt(0).toUpperCase() + txt.substr(1);\n });\n};\n\nfunction equalArrays(a, b)\n{\n if (!Array.isArray(a) || !Array.isArray(b))\n return false;\n if (a == b)\n return true;\n if (a.length != b.length)\n return false;\n for (var i = 0; i < a.length; i++) {\n if (a[i] == b[i])\n continue;\n if (!a[i].equals(b[i]))\n return false;\n }\n return true;\n};\n\nexports.Hash = Hash;\nexports.Set = Set;\nexports.Map = Map;\nexports.BitSet = BitSet;\nexports.AltDict = AltDict;\nexports.DoubleDict = DoubleDict;\nexports.hashStuff = hashStuff;\nexports.escapeWhitespace = escapeWhitespace;\nexports.arrayToString = arrayToString;\nexports.titleCase = titleCase;\nexports.equalArrays = equalArrays;\n","/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n//\n\n// A token has properties: text, type, line, character position in the line\n// (so we can ignore tabs), token channel, index, and source from which\n// we obtained this token.\n\nfunction Token() {\n\tthis.source = null;\n\tthis.type = null; // token type of the token\n\tthis.channel = null; // The parser ignores everything not on DEFAULT_CHANNEL\n\tthis.start = null; // optional; return -1 if not implemented.\n\tthis.stop = null; // optional; return -1 if not implemented.\n\tthis.tokenIndex = null; // from 0..n-1 of the token object in the input stream\n\tthis.line = null; // line=1..n of the 1st character\n\tthis.column = null; // beginning of the line at which it occurs, 0..n-1\n\tthis._text = null; // text of the token.\n\treturn this;\n}\n\nToken.INVALID_TYPE = 0;\n\n// During lookahead operations, this \"token\" signifies we hit rule end ATN state\n// and did not follow it despite needing to.\nToken.EPSILON = -2;\n\nToken.MIN_USER_TOKEN_TYPE = 1;\n\nToken.EOF = -1;\n\n// All tokens go to the parser (unless skip() is called in that rule)\n// on a particular \"channel\". The parser tunes to a particular channel\n// so that whitespace etc... can go to the parser on a \"hidden\" channel.\n\nToken.DEFAULT_CHANNEL = 0;\n\n// Anything on different channel than DEFAULT_CHANNEL is not parsed\n// by parser.\n\nToken.HIDDEN_CHANNEL = 1;\n\n// Explicitly set the text for this token. If {code text} is not\n// {@code null}, then {@link //getText} will return this value rather than\n// extracting the text from the input.\n//\n// @param text The explicit text of the token, or {@code null} if the text\n// should be obtained from the input along with the start and stop indexes\n// of the token.\n\nObject.defineProperty(Token.prototype, \"text\", {\n\tget : function() {\n\t\treturn this._text;\n\t},\n\tset : function(text) {\n\t\tthis._text = text;\n\t}\n});\n\nToken.prototype.getTokenSource = function() {\n\treturn this.source[0];\n};\n\nToken.prototype.getInputStream = function() {\n\treturn this.source[1];\n};\n\nfunction CommonToken(source, type, channel, start, stop) {\n\tToken.call(this);\n\tthis.source = source !== undefined ? source : CommonToken.EMPTY_SOURCE;\n\tthis.type = type !== undefined ? type : null;\n\tthis.channel = channel !== undefined ? channel : Token.DEFAULT_CHANNEL;\n\tthis.start = start !== undefined ? start : -1;\n\tthis.stop = stop !== undefined ? stop : -1;\n\tthis.tokenIndex = -1;\n\tif (this.source[0] !== null) {\n\t\tthis.line = source[0].line;\n\t\tthis.column = source[0].column;\n\t} else {\n\t\tthis.column = -1;\n\t}\n\treturn this;\n}\n\nCommonToken.prototype = Object.create(Token.prototype);\nCommonToken.prototype.constructor = CommonToken;\n\n// An empty {@link Pair} which is used as the default value of\n// {@link //source} for tokens that do not have a source.\nCommonToken.EMPTY_SOURCE = [ null, null ];\n\n// Constructs a new {@link CommonToken} as a copy of another {@link Token}.\n//\n//

\n// If {@code oldToken} is also a {@link CommonToken} instance, the newly\n// constructed token will share a reference to the {@link //text} field and\n// the {@link Pair} stored in {@link //source}. Otherwise, {@link //text} will\n// be assigned the result of calling {@link //getText}, and {@link //source}\n// will be constructed from the result of {@link Token//getTokenSource} and\n// {@link Token//getInputStream}.

\n//\n// @param oldToken The token to copy.\n//\nCommonToken.prototype.clone = function() {\n\tvar t = new CommonToken(this.source, this.type, this.channel, this.start,\n\t\t\tthis.stop);\n\tt.tokenIndex = this.tokenIndex;\n\tt.line = this.line;\n\tt.column = this.column;\n\tt.text = this.text;\n\treturn t;\n};\n\nObject.defineProperty(CommonToken.prototype, \"text\", {\n\tget : function() {\n\t\tif (this._text !== null) {\n\t\t\treturn this._text;\n\t\t}\n\t\tvar input = this.getInputStream();\n\t\tif (input === null) {\n\t\t\treturn null;\n\t\t}\n\t\tvar n = input.size;\n\t\tif (this.start < n && this.stop < n) {\n\t\t\treturn input.getText(this.start, this.stop);\n\t\t} else {\n\t\t\treturn \"\";\n\t\t}\n\t},\n\tset : function(text) {\n\t\tthis._text = text;\n\t}\n});\n\nCommonToken.prototype.toString = function() {\n\tvar txt = this.text;\n\tif (txt !== null) {\n\t\ttxt = txt.replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/\\t/g, \"\\\\t\");\n\t} else {\n\t\ttxt = \"\";\n\t}\n\treturn \"[@\" + this.tokenIndex + \",\" + this.start + \":\" + this.stop + \"='\" +\n\t\t\ttxt + \"',<\" + this.type + \">\" +\n\t\t\t(this.channel > 0 ? \",channel=\" + this.channel : \"\") + \",\" +\n\t\t\tthis.line + \":\" + this.column + \"]\";\n};\n\nexports.Token = Token;\nexports.CommonToken = CommonToken;\n","/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n\n/*jslint smarttabs:true */\n\nvar Token = require('./Token').Token;\n\n/* stop is not included! */\nfunction Interval(start, stop) {\n\tthis.start = start;\n\tthis.stop = stop;\n\treturn this;\n}\n\nInterval.prototype.contains = function(item) {\n\treturn item >= this.start && item < this.stop;\n};\n\nInterval.prototype.toString = function() {\n\tif(this.start===this.stop-1) {\n\t\treturn this.start.toString();\n\t} else {\n\t\treturn this.start.toString() + \"..\" + (this.stop-1).toString();\n\t}\n};\n\n\nObject.defineProperty(Interval.prototype, \"length\", {\n\tget : function() {\n\t\treturn this.stop - this.start;\n\t}\n});\n\nfunction IntervalSet() {\n\tthis.intervals = null;\n\tthis.readOnly = false;\n}\n\nIntervalSet.prototype.first = function(v) {\n\tif (this.intervals === null || this.intervals.length===0) {\n\t\treturn Token.INVALID_TYPE;\n\t} else {\n\t\treturn this.intervals[0].start;\n\t}\n};\n\nIntervalSet.prototype.addOne = function(v) {\n\tthis.addInterval(new Interval(v, v + 1));\n};\n\nIntervalSet.prototype.addRange = function(l, h) {\n\tthis.addInterval(new Interval(l, h + 1));\n};\n\nIntervalSet.prototype.addInterval = function(v) {\n\tif (this.intervals === null) {\n\t\tthis.intervals = [];\n\t\tthis.intervals.push(v);\n\t} else {\n\t\t// find insert pos\n\t\tfor (var k = 0; k < this.intervals.length; k++) {\n\t\t\tvar i = this.intervals[k];\n\t\t\t// distinct range -> insert\n\t\t\tif (v.stop < i.start) {\n\t\t\t\tthis.intervals.splice(k, 0, v);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// contiguous range -> adjust\n\t\t\telse if (v.stop === i.start) {\n\t\t\t\tthis.intervals[k].start = v.start;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// overlapping range -> adjust and reduce\n\t\t\telse if (v.start <= i.stop) {\n\t\t\t\tthis.intervals[k] = new Interval(Math.min(i.start, v.start), Math.max(i.stop, v.stop));\n\t\t\t\tthis.reduce(k);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t// greater than any existing\n\t\tthis.intervals.push(v);\n\t}\n};\n\nIntervalSet.prototype.addSet = function(other) {\n\tif (other.intervals !== null) {\n\t\tfor (var k = 0; k < other.intervals.length; k++) {\n\t\t\tvar i = other.intervals[k];\n\t\t\tthis.addInterval(new Interval(i.start, i.stop));\n\t\t}\n\t}\n\treturn this;\n};\n\nIntervalSet.prototype.reduce = function(k) {\n\t// only need to reduce if k is not the last\n\tif (k < this.intervalslength - 1) {\n\t\tvar l = this.intervals[k];\n\t\tvar r = this.intervals[k + 1];\n\t\t// if r contained in l\n\t\tif (l.stop >= r.stop) {\n\t\t\tthis.intervals.pop(k + 1);\n\t\t\tthis.reduce(k);\n\t\t} else if (l.stop >= r.start) {\n\t\t\tthis.intervals[k] = new Interval(l.start, r.stop);\n\t\t\tthis.intervals.pop(k + 1);\n\t\t}\n\t}\n};\n\nIntervalSet.prototype.complement = function(start, stop) {\n var result = new IntervalSet();\n result.addInterval(new Interval(start,stop+1));\n for(var i=0; ii.start && v.stop=i.stop) {\n this.intervals.splice(k, 1);\n k = k - 1; // need another pass\n }\n // check for lower boundary\n else if(v.start\");\n\t\t\t} else {\n\t\t\t\tnames.push(\"'\" + String.fromCharCode(v.start) + \"'\");\n\t\t\t}\n\t\t} else {\n\t\t\tnames.push(\"'\" + String.fromCharCode(v.start) + \"'..'\" + String.fromCharCode(v.stop-1) + \"'\");\n\t\t}\n\t}\n\tif (names.length > 1) {\n\t\treturn \"{\" + names.join(\", \") + \"}\";\n\t} else {\n\t\treturn names[0];\n\t}\n};\n\n\nIntervalSet.prototype.toIndexString = function() {\n\tvar names = [];\n\tfor (var i = 0; i < this.intervals.length; i++) {\n\t\tvar v = this.intervals[i];\n\t\tif(v.stop===v.start+1) {\n\t\t\tif ( v.start===Token.EOF ) {\n\t\t\t\tnames.push(\"\");\n\t\t\t} else {\n\t\t\t\tnames.push(v.start.toString());\n\t\t\t}\n\t\t} else {\n\t\t\tnames.push(v.start.toString() + \"..\" + (v.stop-1).toString());\n\t\t}\n\t}\n\tif (names.length > 1) {\n\t\treturn \"{\" + names.join(\", \") + \"}\";\n\t} else {\n\t\treturn names[0];\n\t}\n};\n\n\nIntervalSet.prototype.toTokenString = function(literalNames, symbolicNames) {\n\tvar names = [];\n\tfor (var i = 0; i < this.intervals.length; i++) {\n\t\tvar v = this.intervals[i];\n\t\tfor (var j = v.start; j < v.stop; j++) {\n\t\t\tnames.push(this.elementName(literalNames, symbolicNames, j));\n\t\t}\n\t}\n\tif (names.length > 1) {\n\t\treturn \"{\" + names.join(\", \") + \"}\";\n\t} else {\n\t\treturn names[0];\n\t}\n};\n\nIntervalSet.prototype.elementName = function(literalNames, symbolicNames, a) {\n\tif (a === Token.EOF) {\n\t\treturn \"\";\n\t} else if (a === Token.EPSILON) {\n\t\treturn \"\";\n\t} else {\n\t\treturn literalNames[a] || symbolicNames[a];\n\t}\n};\n\nexports.Interval = Interval;\nexports.IntervalSet = IntervalSet;\n","//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n//\n\n// The following images show the relation of states and\n// {@link ATNState//transitions} for various grammar constructs.\n//\n//
    \n//\n//
  • Solid edges marked with an &//0949; indicate a required\n// {@link EpsilonTransition}.
  • \n//\n//
  • Dashed edges indicate locations where any transition derived from\n// {@link Transition} might appear.
  • \n//\n//
  • Dashed nodes are place holders for either a sequence of linked\n// {@link BasicState} states or the inclusion of a block representing a nested\n// construct in one of the forms below.
  • \n//\n//
  • Nodes showing multiple outgoing alternatives with a {@code ...} support\n// any number of alternatives (one or more). Nodes without the {@code ...} only\n// support the exact number of alternatives shown in the diagram.
  • \n//\n//
\n//\n//

Basic Blocks

\n//\n//

Rule

\n//\n// \n//\n//

Block of 1 or more alternatives

\n//\n// \n//\n//

Greedy Loops

\n//\n//

Greedy Closure: {@code (...)*}

\n//\n// \n//\n//

Greedy Positive Closure: {@code (...)+}

\n//\n// \n//\n//

Greedy Optional: {@code (...)?}

\n//\n// \n//\n//

Non-Greedy Loops

\n//\n//

Non-Greedy Closure: {@code (...)*?}

\n//\n// \n//\n//

Non-Greedy Positive Closure: {@code (...)+?}

\n//\n// \n//\n//

Non-Greedy Optional: {@code (...)??}

\n//\n// \n//\n\nvar INITIAL_NUM_TRANSITIONS = 4;\n\nfunction ATNState() {\n // Which ATN are we in?\n this.atn = null;\n this.stateNumber = ATNState.INVALID_STATE_NUMBER;\n this.stateType = null;\n this.ruleIndex = 0; // at runtime, we don't have Rule objects\n this.epsilonOnlyTransitions = false;\n // Track the transitions emanating from this ATN state.\n this.transitions = [];\n // Used to cache lookahead during parsing, not used during construction\n this.nextTokenWithinRule = null;\n return this;\n}\n\n// constants for serialization\nATNState.INVALID_TYPE = 0;\nATNState.BASIC = 1;\nATNState.RULE_START = 2;\nATNState.BLOCK_START = 3;\nATNState.PLUS_BLOCK_START = 4;\nATNState.STAR_BLOCK_START = 5;\nATNState.TOKEN_START = 6;\nATNState.RULE_STOP = 7;\nATNState.BLOCK_END = 8;\nATNState.STAR_LOOP_BACK = 9;\nATNState.STAR_LOOP_ENTRY = 10;\nATNState.PLUS_LOOP_BACK = 11;\nATNState.LOOP_END = 12;\n\nATNState.serializationNames = [\n \"INVALID\",\n \"BASIC\",\n \"RULE_START\",\n \"BLOCK_START\",\n \"PLUS_BLOCK_START\",\n \"STAR_BLOCK_START\",\n \"TOKEN_START\",\n \"RULE_STOP\",\n \"BLOCK_END\",\n \"STAR_LOOP_BACK\",\n \"STAR_LOOP_ENTRY\",\n \"PLUS_LOOP_BACK\",\n \"LOOP_END\" ];\n\nATNState.INVALID_STATE_NUMBER = -1;\n\nATNState.prototype.toString = function() {\n\treturn this.stateNumber;\n};\n\nATNState.prototype.equals = function(other) {\n if (other instanceof ATNState) {\n return this.stateNumber===other.stateNumber;\n } else {\n return false;\n }\n};\n\nATNState.prototype.isNonGreedyExitState = function() {\n return false;\n};\n\n\nATNState.prototype.addTransition = function(trans, index) {\n\tif(index===undefined) {\n\t\tindex = -1;\n\t}\n if (this.transitions.length===0) {\n this.epsilonOnlyTransitions = trans.isEpsilon;\n } else if(this.epsilonOnlyTransitions !== trans.isEpsilon) {\n this.epsilonOnlyTransitions = false;\n }\n if (index===-1) {\n this.transitions.push(trans);\n } else {\n this.transitions.splice(index, 1, trans);\n }\n};\n\nfunction BasicState() {\n\tATNState.call(this);\n this.stateType = ATNState.BASIC;\n return this;\n}\n\nBasicState.prototype = Object.create(ATNState.prototype);\nBasicState.prototype.constructor = BasicState;\n\n\nfunction DecisionState() {\n\tATNState.call(this);\n this.decision = -1;\n this.nonGreedy = false;\n return this;\n}\n\nDecisionState.prototype = Object.create(ATNState.prototype);\nDecisionState.prototype.constructor = DecisionState;\n\n\n// The start of a regular {@code (...)} block.\nfunction BlockStartState() {\n\tDecisionState.call(this);\n\tthis.endState = null;\n\treturn this;\n}\n\nBlockStartState.prototype = Object.create(DecisionState.prototype);\nBlockStartState.prototype.constructor = BlockStartState;\n\n\nfunction BasicBlockStartState() {\n\tBlockStartState.call(this);\n\tthis.stateType = ATNState.BLOCK_START;\n\treturn this;\n}\n\nBasicBlockStartState.prototype = Object.create(BlockStartState.prototype);\nBasicBlockStartState.prototype.constructor = BasicBlockStartState;\n\n\n// Terminal node of a simple {@code (a|b|c)} block.\nfunction BlockEndState() {\n\tATNState.call(this);\n\tthis.stateType = ATNState.BLOCK_END;\n this.startState = null;\n return this;\n}\n\nBlockEndState.prototype = Object.create(ATNState.prototype);\nBlockEndState.prototype.constructor = BlockEndState;\n\n\n// The last node in the ATN for a rule, unless that rule is the start symbol.\n// In that case, there is one transition to EOF. Later, we might encode\n// references to all calls to this rule to compute FOLLOW sets for\n// error handling.\n//\nfunction RuleStopState() {\n\tATNState.call(this);\n this.stateType = ATNState.RULE_STOP;\n return this;\n}\n\nRuleStopState.prototype = Object.create(ATNState.prototype);\nRuleStopState.prototype.constructor = RuleStopState;\n\nfunction RuleStartState() {\n\tATNState.call(this);\n\tthis.stateType = ATNState.RULE_START;\n\tthis.stopState = null;\n\tthis.isPrecedenceRule = false;\n\treturn this;\n}\n\nRuleStartState.prototype = Object.create(ATNState.prototype);\nRuleStartState.prototype.constructor = RuleStartState;\n\n// Decision state for {@code A+} and {@code (A|B)+}. It has two transitions:\n// one to the loop back to start of the block and one to exit.\n//\nfunction PlusLoopbackState() {\n\tDecisionState.call(this);\n\tthis.stateType = ATNState.PLUS_LOOP_BACK;\n\treturn this;\n}\n\nPlusLoopbackState.prototype = Object.create(DecisionState.prototype);\nPlusLoopbackState.prototype.constructor = PlusLoopbackState;\n\n\n// Start of {@code (A|B|...)+} loop. Technically a decision state, but\n// we don't use for code generation; somebody might need it, so I'm defining\n// it for completeness. In reality, the {@link PlusLoopbackState} node is the\n// real decision-making note for {@code A+}.\n//\nfunction PlusBlockStartState() {\n\tBlockStartState.call(this);\n\tthis.stateType = ATNState.PLUS_BLOCK_START;\n this.loopBackState = null;\n return this;\n}\n\nPlusBlockStartState.prototype = Object.create(BlockStartState.prototype);\nPlusBlockStartState.prototype.constructor = PlusBlockStartState;\n\n// The block that begins a closure loop.\nfunction StarBlockStartState() {\n\tBlockStartState.call(this);\n\tthis.stateType = ATNState.STAR_BLOCK_START;\n\treturn this;\n}\n\nStarBlockStartState.prototype = Object.create(BlockStartState.prototype);\nStarBlockStartState.prototype.constructor = StarBlockStartState;\n\n\nfunction StarLoopbackState() {\n\tATNState.call(this);\n\tthis.stateType = ATNState.STAR_LOOP_BACK;\n\treturn this;\n}\n\nStarLoopbackState.prototype = Object.create(ATNState.prototype);\nStarLoopbackState.prototype.constructor = StarLoopbackState;\n\n\nfunction StarLoopEntryState() {\n\tDecisionState.call(this);\n\tthis.stateType = ATNState.STAR_LOOP_ENTRY;\n this.loopBackState = null;\n // Indicates whether this state can benefit from a precedence DFA during SLL decision making.\n this.isPrecedenceDecision = null;\n return this;\n}\n\nStarLoopEntryState.prototype = Object.create(DecisionState.prototype);\nStarLoopEntryState.prototype.constructor = StarLoopEntryState;\n\n\n// Mark the end of a * or + loop.\nfunction LoopEndState() {\n\tATNState.call(this);\n\tthis.stateType = ATNState.LOOP_END;\n\tthis.loopBackState = null;\n\treturn this;\n}\n\nLoopEndState.prototype = Object.create(ATNState.prototype);\nLoopEndState.prototype.constructor = LoopEndState;\n\n\n// The Tokens rule start state linking to each lexer rule start state */\nfunction TokensStartState() {\n\tDecisionState.call(this);\n\tthis.stateType = ATNState.TOKEN_START;\n\treturn this;\n}\n\nTokensStartState.prototype = Object.create(DecisionState.prototype);\nTokensStartState.prototype.constructor = TokensStartState;\n\nexports.ATNState = ATNState;\nexports.BasicState = BasicState;\nexports.DecisionState = DecisionState;\nexports.BlockStartState = BlockStartState;\nexports.BlockEndState = BlockEndState;\nexports.LoopEndState = LoopEndState;\nexports.RuleStartState = RuleStartState;\nexports.RuleStopState = RuleStopState;\nexports.TokensStartState = TokensStartState;\nexports.PlusLoopbackState = PlusLoopbackState;\nexports.StarLoopbackState = StarLoopbackState;\nexports.StarLoopEntryState = StarLoopEntryState;\nexports.PlusBlockStartState = PlusBlockStartState;\nexports.StarBlockStartState = StarBlockStartState;\nexports.BasicBlockStartState = BasicBlockStartState;\n","/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n///\n\n// The basic notion of a tree has a parent, a payload, and a list of children.\n// It is the most abstract interface for all the trees used by ANTLR.\n///\n\nvar Token = require('./../Token').Token;\nvar Interval = require('./../IntervalSet').Interval;\nvar INVALID_INTERVAL = new Interval(-1, -2);\nvar Utils = require('../Utils.js');\n\n\nfunction Tree() {\n\treturn this;\n}\n\nfunction SyntaxTree() {\n\tTree.call(this);\n\treturn this;\n}\n\nSyntaxTree.prototype = Object.create(Tree.prototype);\nSyntaxTree.prototype.constructor = SyntaxTree;\n\nfunction ParseTree() {\n\tSyntaxTree.call(this);\n\treturn this;\n}\n\nParseTree.prototype = Object.create(SyntaxTree.prototype);\nParseTree.prototype.constructor = ParseTree;\n\nfunction RuleNode() {\n\tParseTree.call(this);\n\treturn this;\n}\n\nRuleNode.prototype = Object.create(ParseTree.prototype);\nRuleNode.prototype.constructor = RuleNode;\n\nfunction TerminalNode() {\n\tParseTree.call(this);\n\treturn this;\n}\n\nTerminalNode.prototype = Object.create(ParseTree.prototype);\nTerminalNode.prototype.constructor = TerminalNode;\n\nfunction ErrorNode() {\n\tTerminalNode.call(this);\n\treturn this;\n}\n\nErrorNode.prototype = Object.create(TerminalNode.prototype);\nErrorNode.prototype.constructor = ErrorNode;\n\nfunction ParseTreeVisitor() {\n\treturn this;\n}\n\nParseTreeVisitor.prototype.visit = function(ctx) {\n \tif (Array.isArray(ctx)) {\n\t\treturn ctx.map(function(child) {\n return child.accept(this);\n }, this);\n\t} else {\n\t\treturn ctx.accept(this);\n\t}\n};\n\nParseTreeVisitor.prototype.visitChildren = function(ctx) {\n\tif (ctx.children) {\n\t\treturn this.visit(ctx.children);\n\t} else {\n\t\treturn null;\n\t}\n}\n\nParseTreeVisitor.prototype.visitTerminal = function(node) {\n};\n\nParseTreeVisitor.prototype.visitErrorNode = function(node) {\n};\n\n\nfunction ParseTreeListener() {\n\treturn this;\n}\n\nParseTreeListener.prototype.visitTerminal = function(node) {\n};\n\nParseTreeListener.prototype.visitErrorNode = function(node) {\n};\n\nParseTreeListener.prototype.enterEveryRule = function(node) {\n};\n\nParseTreeListener.prototype.exitEveryRule = function(node) {\n};\n\nfunction TerminalNodeImpl(symbol) {\n\tTerminalNode.call(this);\n\tthis.parentCtx = null;\n\tthis.symbol = symbol;\n\treturn this;\n}\n\nTerminalNodeImpl.prototype = Object.create(TerminalNode.prototype);\nTerminalNodeImpl.prototype.constructor = TerminalNodeImpl;\n\nTerminalNodeImpl.prototype.getChild = function(i) {\n\treturn null;\n};\n\nTerminalNodeImpl.prototype.getSymbol = function() {\n\treturn this.symbol;\n};\n\nTerminalNodeImpl.prototype.getParent = function() {\n\treturn this.parentCtx;\n};\n\nTerminalNodeImpl.prototype.getPayload = function() {\n\treturn this.symbol;\n};\n\nTerminalNodeImpl.prototype.getSourceInterval = function() {\n\tif (this.symbol === null) {\n\t\treturn INVALID_INTERVAL;\n\t}\n\tvar tokenIndex = this.symbol.tokenIndex;\n\treturn new Interval(tokenIndex, tokenIndex);\n};\n\nTerminalNodeImpl.prototype.getChildCount = function() {\n\treturn 0;\n};\n\nTerminalNodeImpl.prototype.accept = function(visitor) {\n\treturn visitor.visitTerminal(this);\n};\n\nTerminalNodeImpl.prototype.getText = function() {\n\treturn this.symbol.text;\n};\n\nTerminalNodeImpl.prototype.toString = function() {\n\tif (this.symbol.type === Token.EOF) {\n\t\treturn \"\";\n\t} else {\n\t\treturn this.symbol.text;\n\t}\n};\n\n// Represents a token that was consumed during resynchronization\n// rather than during a valid match operation. For example,\n// we will create this kind of a node during single token insertion\n// and deletion as well as during \"consume until error recovery set\"\n// upon no viable alternative exceptions.\n\nfunction ErrorNodeImpl(token) {\n\tTerminalNodeImpl.call(this, token);\n\treturn this;\n}\n\nErrorNodeImpl.prototype = Object.create(TerminalNodeImpl.prototype);\nErrorNodeImpl.prototype.constructor = ErrorNodeImpl;\n\nErrorNodeImpl.prototype.isErrorNode = function() {\n\treturn true;\n};\n\nErrorNodeImpl.prototype.accept = function(visitor) {\n\treturn visitor.visitErrorNode(this);\n};\n\nfunction ParseTreeWalker() {\n\treturn this;\n}\n\nParseTreeWalker.prototype.walk = function(listener, t) {\n\tvar errorNode = t instanceof ErrorNode ||\n\t\t\t(t.isErrorNode !== undefined && t.isErrorNode());\n\tif (errorNode) {\n\t\tlistener.visitErrorNode(t);\n\t} else if (t instanceof TerminalNode) {\n\t\tlistener.visitTerminal(t);\n\t} else {\n\t\tthis.enterRule(listener, t);\n\t\tfor (var i = 0; i < t.getChildCount(); i++) {\n\t\t\tvar child = t.getChild(i);\n\t\t\tthis.walk(listener, child);\n\t\t}\n\t\tthis.exitRule(listener, t);\n\t}\n};\n//\n// The discovery of a rule node, involves sending two events: the generic\n// {@link ParseTreeListener//enterEveryRule} and a\n// {@link RuleContext}-specific event. First we trigger the generic and then\n// the rule specific. We to them in reverse order upon finishing the node.\n//\nParseTreeWalker.prototype.enterRule = function(listener, r) {\n\tvar ctx = r.getRuleContext();\n\tlistener.enterEveryRule(ctx);\n\tctx.enterRule(listener);\n};\n\nParseTreeWalker.prototype.exitRule = function(listener, r) {\n\tvar ctx = r.getRuleContext();\n\tctx.exitRule(listener);\n\tlistener.exitEveryRule(ctx);\n};\n\nParseTreeWalker.DEFAULT = new ParseTreeWalker();\n\nexports.RuleNode = RuleNode;\nexports.ErrorNode = ErrorNode;\nexports.TerminalNode = TerminalNode;\nexports.ErrorNodeImpl = ErrorNodeImpl;\nexports.TerminalNodeImpl = TerminalNodeImpl;\nexports.ParseTreeListener = ParseTreeListener;\nexports.ParseTreeVisitor = ParseTreeVisitor;\nexports.ParseTreeWalker = ParseTreeWalker;\nexports.INVALID_INTERVAL = INVALID_INTERVAL;\n","/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n\n// The root of the ANTLR exception hierarchy. In general, ANTLR tracks just\n// 3 kinds of errors: prediction errors, failed predicate errors, and\n// mismatched input errors. In each case, the parser knows where it is\n// in the input, where it is in the ATN, the rule invocation stack,\n// and what kind of problem occurred.\n\nvar PredicateTransition = require('./../atn/Transition').PredicateTransition;\n\nfunction RecognitionException(params) {\n\tError.call(this);\n\tif (!!Error.captureStackTrace) {\n Error.captureStackTrace(this, RecognitionException);\n\t} else {\n\t\tvar stack = new Error().stack;\n\t}\n\tthis.message = params.message;\n this.recognizer = params.recognizer;\n this.input = params.input;\n this.ctx = params.ctx;\n // The current {@link Token} when an error occurred. Since not all streams\n // support accessing symbols by index, we have to track the {@link Token}\n // instance itself.\n this.offendingToken = null;\n // Get the ATN state number the parser was in at the time the error\n // occurred. For {@link NoViableAltException} and\n // {@link LexerNoViableAltException} exceptions, this is the\n // {@link DecisionState} number. For others, it is the state whose outgoing\n // edge we couldn't match.\n this.offendingState = -1;\n if (this.recognizer!==null) {\n this.offendingState = this.recognizer.state;\n }\n return this;\n}\n\nRecognitionException.prototype = Object.create(Error.prototype);\nRecognitionException.prototype.constructor = RecognitionException;\n\n//

If the state number is not known, this method returns -1.

\n\n//\n// Gets the set of input symbols which could potentially follow the\n// previously matched symbol at the time this exception was thrown.\n//\n//

If the set of expected tokens is not known and could not be computed,\n// this method returns {@code null}.

\n//\n// @return The set of token types that could potentially follow the current\n// state in the ATN, or {@code null} if the information is not available.\n// /\nRecognitionException.prototype.getExpectedTokens = function() {\n if (this.recognizer!==null) {\n return this.recognizer.atn.getExpectedTokens(this.offendingState, this.ctx);\n } else {\n return null;\n }\n};\n\nRecognitionException.prototype.toString = function() {\n return this.message;\n};\n\nfunction LexerNoViableAltException(lexer, input, startIndex, deadEndConfigs) {\n\tRecognitionException.call(this, {message:\"\", recognizer:lexer, input:input, ctx:null});\n this.startIndex = startIndex;\n this.deadEndConfigs = deadEndConfigs;\n return this;\n}\n\nLexerNoViableAltException.prototype = Object.create(RecognitionException.prototype);\nLexerNoViableAltException.prototype.constructor = LexerNoViableAltException;\n\nLexerNoViableAltException.prototype.toString = function() {\n var symbol = \"\";\n if (this.startIndex >= 0 && this.startIndex < this.input.size) {\n symbol = this.input.getText((this.startIndex,this.startIndex));\n }\n return \"LexerNoViableAltException\" + symbol;\n};\n\n// Indicates that the parser could not decide which of two or more paths\n// to take based upon the remaining input. It tracks the starting token\n// of the offending input and also knows where the parser was\n// in the various paths when the error. Reported by reportNoViableAlternative()\n//\nfunction NoViableAltException(recognizer, input, startToken, offendingToken, deadEndConfigs, ctx) {\n\tctx = ctx || recognizer._ctx;\n\toffendingToken = offendingToken || recognizer.getCurrentToken();\n\tstartToken = startToken || recognizer.getCurrentToken();\n\tinput = input || recognizer.getInputStream();\n\tRecognitionException.call(this, {message:\"\", recognizer:recognizer, input:input, ctx:ctx});\n // Which configurations did we try at input.index() that couldn't match\n\t// input.LT(1)?//\n this.deadEndConfigs = deadEndConfigs;\n // The token object at the start index; the input stream might\n // not be buffering tokens so get a reference to it. (At the\n // time the error occurred, of course the stream needs to keep a\n // buffer all of the tokens but later we might not have access to those.)\n this.startToken = startToken;\n this.offendingToken = offendingToken;\n}\n\nNoViableAltException.prototype = Object.create(RecognitionException.prototype);\nNoViableAltException.prototype.constructor = NoViableAltException;\n\n// This signifies any kind of mismatched input exceptions such as\n// when the current input does not match the expected token.\n//\nfunction InputMismatchException(recognizer) {\n\tRecognitionException.call(this, {message:\"\", recognizer:recognizer, input:recognizer.getInputStream(), ctx:recognizer._ctx});\n this.offendingToken = recognizer.getCurrentToken();\n}\n\nInputMismatchException.prototype = Object.create(RecognitionException.prototype);\nInputMismatchException.prototype.constructor = InputMismatchException;\n\n// A semantic predicate failed during validation. Validation of predicates\n// occurs when normally parsing the alternative just like matching a token.\n// Disambiguating predicate evaluation occurs when we test a predicate during\n// prediction.\n\nfunction FailedPredicateException(recognizer, predicate, message) {\n\tRecognitionException.call(this, {message:this.formatMessage(predicate,message || null), recognizer:recognizer,\n input:recognizer.getInputStream(), ctx:recognizer._ctx});\n var s = recognizer._interp.atn.states[recognizer.state];\n var trans = s.transitions[0];\n if (trans instanceof PredicateTransition) {\n this.ruleIndex = trans.ruleIndex;\n this.predicateIndex = trans.predIndex;\n } else {\n this.ruleIndex = 0;\n this.predicateIndex = 0;\n }\n this.predicate = predicate;\n this.offendingToken = recognizer.getCurrentToken();\n return this;\n}\n\nFailedPredicateException.prototype = Object.create(RecognitionException.prototype);\nFailedPredicateException.prototype.constructor = FailedPredicateException;\n\nFailedPredicateException.prototype.formatMessage = function(predicate, message) {\n if (message !==null) {\n return message;\n } else {\n return \"failed predicate: {\" + predicate + \"}?\";\n }\n};\n\nfunction ParseCancellationException() {\n\tError.call(this);\n\tError.captureStackTrace(this, ParseCancellationException);\n\treturn this;\n}\n\nParseCancellationException.prototype = Object.create(Error.prototype);\nParseCancellationException.prototype.constructor = ParseCancellationException;\n\nexports.RecognitionException = RecognitionException;\nexports.NoViableAltException = NoViableAltException;\nexports.LexerNoViableAltException = LexerNoViableAltException;\nexports.InputMismatchException = InputMismatchException;\nexports.FailedPredicateException = FailedPredicateException;\nexports.ParseCancellationException = ParseCancellationException;\n","//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n///\n\nvar RuleContext = require('./RuleContext').RuleContext;\nvar Hash = require('./Utils').Hash;\n\nfunction PredictionContext(cachedHashCode) {\n\tthis.cachedHashCode = cachedHashCode;\n}\n\n// Represents {@code $} in local context prediction, which means wildcard.\n// {@code//+x =//}.\n// /\nPredictionContext.EMPTY = null;\n\n// Represents {@code $} in an array in full context mode, when {@code $}\n// doesn't mean wildcard: {@code $ + x = [$,x]}. Here,\n// {@code $} = {@link //EMPTY_RETURN_STATE}.\n// /\nPredictionContext.EMPTY_RETURN_STATE = 0x7FFFFFFF;\n\nPredictionContext.globalNodeCount = 1;\nPredictionContext.id = PredictionContext.globalNodeCount;\n\n// Stores the computed hash code of this {@link PredictionContext}. The hash\n// code is computed in parts to match the following reference algorithm.\n//\n//
\n// private int referenceHashCode() {\n// int hash = {@link MurmurHash//initialize MurmurHash.initialize}({@link\n// //INITIAL_HASH});\n//\n// for (int i = 0; i < {@link //size()}; i++) {\n// hash = {@link MurmurHash//update MurmurHash.update}(hash, {@link //getParent\n// getParent}(i));\n// }\n//\n// for (int i = 0; i < {@link //size()}; i++) {\n// hash = {@link MurmurHash//update MurmurHash.update}(hash, {@link\n// //getReturnState getReturnState}(i));\n// }\n//\n// hash = {@link MurmurHash//finish MurmurHash.finish}(hash, 2// {@link\n// //size()});\n// return hash;\n// }\n// 
\n// /\n\n// This means only the {@link //EMPTY} context is in set.\nPredictionContext.prototype.isEmpty = function() {\n\treturn this === PredictionContext.EMPTY;\n};\n\nPredictionContext.prototype.hasEmptyPath = function() {\n\treturn this.getReturnState(this.length - 1) === PredictionContext.EMPTY_RETURN_STATE;\n};\n\nPredictionContext.prototype.hashCode = function() {\n\treturn this.cachedHashCode;\n};\n\n\nPredictionContext.prototype.updateHashCode = function(hash) {\n hash.update(this.cachedHashCode);\n};\n/*\nfunction calculateHashString(parent, returnState) {\n\treturn \"\" + parent + returnState;\n}\n*/\n\n// Used to cache {@link PredictionContext} objects. Its used for the shared\n// context cash associated with contexts in DFA states. This cache\n// can be used for both lexers and parsers.\n\nfunction PredictionContextCache() {\n\tthis.cache = {};\n\treturn this;\n}\n\n// Add a context to the cache and return it. If the context already exists,\n// return that one instead and do not add a new context to the cache.\n// Protect shared cache from unsafe thread access.\n//\nPredictionContextCache.prototype.add = function(ctx) {\n\tif (ctx === PredictionContext.EMPTY) {\n\t\treturn PredictionContext.EMPTY;\n\t}\n\tvar existing = this.cache[ctx] || null;\n\tif (existing !== null) {\n\t\treturn existing;\n\t}\n\tthis.cache[ctx] = ctx;\n\treturn ctx;\n};\n\nPredictionContextCache.prototype.get = function(ctx) {\n\treturn this.cache[ctx] || null;\n};\n\nObject.defineProperty(PredictionContextCache.prototype, \"length\", {\n\tget : function() {\n\t\treturn this.cache.length;\n\t}\n});\n\nfunction SingletonPredictionContext(parent, returnState) {\n\tvar hashCode = 0;\n\tif(parent !== null) {\n\t\tvar hash = new Hash();\n\t\thash.update(parent, returnState);\n hashCode = hash.finish();\n\t}\n\tPredictionContext.call(this, hashCode);\n\tthis.parentCtx = parent;\n\tthis.returnState = returnState;\n}\n\nSingletonPredictionContext.prototype = Object.create(PredictionContext.prototype);\nSingletonPredictionContext.prototype.contructor = SingletonPredictionContext;\n\nSingletonPredictionContext.create = function(parent, returnState) {\n\tif (returnState === PredictionContext.EMPTY_RETURN_STATE && parent === null) {\n\t\t// someone can pass in the bits of an array ctx that mean $\n\t\treturn PredictionContext.EMPTY;\n\t} else {\n\t\treturn new SingletonPredictionContext(parent, returnState);\n\t}\n};\n\nObject.defineProperty(SingletonPredictionContext.prototype, \"length\", {\n\tget : function() {\n\t\treturn 1;\n\t}\n});\n\nSingletonPredictionContext.prototype.getParent = function(index) {\n\treturn this.parentCtx;\n};\n\nSingletonPredictionContext.prototype.getReturnState = function(index) {\n\treturn this.returnState;\n};\n\nSingletonPredictionContext.prototype.equals = function(other) {\n\tif (this === other) {\n\t\treturn true;\n\t} else if (!(other instanceof SingletonPredictionContext)) {\n\t\treturn false;\n\t} else if (this.hashCode() !== other.hashCode()) {\n\t\treturn false; // can't be same if hash is different\n\t} else {\n\t\tif(this.returnState !== other.returnState)\n return false;\n else if(this.parentCtx==null)\n return other.parentCtx==null\n\t\telse\n return this.parentCtx.equals(other.parentCtx);\n\t}\n};\n\nSingletonPredictionContext.prototype.toString = function() {\n\tvar up = this.parentCtx === null ? \"\" : this.parentCtx.toString();\n\tif (up.length === 0) {\n\t\tif (this.returnState === PredictionContext.EMPTY_RETURN_STATE) {\n\t\t\treturn \"$\";\n\t\t} else {\n\t\t\treturn \"\" + this.returnState;\n\t\t}\n\t} else {\n\t\treturn \"\" + this.returnState + \" \" + up;\n\t}\n};\n\nfunction EmptyPredictionContext() {\n\tSingletonPredictionContext.call(this, null, PredictionContext.EMPTY_RETURN_STATE);\n\treturn this;\n}\n\nEmptyPredictionContext.prototype = Object.create(SingletonPredictionContext.prototype);\nEmptyPredictionContext.prototype.constructor = EmptyPredictionContext;\n\nEmptyPredictionContext.prototype.isEmpty = function() {\n\treturn true;\n};\n\nEmptyPredictionContext.prototype.getParent = function(index) {\n\treturn null;\n};\n\nEmptyPredictionContext.prototype.getReturnState = function(index) {\n\treturn this.returnState;\n};\n\nEmptyPredictionContext.prototype.equals = function(other) {\n\treturn this === other;\n};\n\nEmptyPredictionContext.prototype.toString = function() {\n\treturn \"$\";\n};\n\nPredictionContext.EMPTY = new EmptyPredictionContext();\n\nfunction ArrayPredictionContext(parents, returnStates) {\n\t// Parent can be null only if full ctx mode and we make an array\n\t// from {@link //EMPTY} and non-empty. We merge {@link //EMPTY} by using\n\t// null parent and\n\t// returnState == {@link //EMPTY_RETURN_STATE}.\n\tvar h = new Hash();\n\th.update(parents, returnStates);\n\tvar hashCode = h.finish();\n\tPredictionContext.call(this, hashCode);\n\tthis.parents = parents;\n\tthis.returnStates = returnStates;\n\treturn this;\n}\n\nArrayPredictionContext.prototype = Object.create(PredictionContext.prototype);\nArrayPredictionContext.prototype.constructor = ArrayPredictionContext;\n\nArrayPredictionContext.prototype.isEmpty = function() {\n\t// since EMPTY_RETURN_STATE can only appear in the last position, we\n\t// don't need to verify that size==1\n\treturn this.returnStates[0] === PredictionContext.EMPTY_RETURN_STATE;\n};\n\nObject.defineProperty(ArrayPredictionContext.prototype, \"length\", {\n\tget : function() {\n\t\treturn this.returnStates.length;\n\t}\n});\n\nArrayPredictionContext.prototype.getParent = function(index) {\n\treturn this.parents[index];\n};\n\nArrayPredictionContext.prototype.getReturnState = function(index) {\n\treturn this.returnStates[index];\n};\n\nArrayPredictionContext.prototype.equals = function(other) {\n\tif (this === other) {\n\t\treturn true;\n\t} else if (!(other instanceof ArrayPredictionContext)) {\n\t\treturn false;\n\t} else if (this.hashCode() !== other.hashCode()) {\n\t\treturn false; // can't be same if hash is different\n\t} else {\n\t\treturn this.returnStates === other.returnStates &&\n\t\t\t\tthis.parents === other.parents;\n\t}\n};\n\nArrayPredictionContext.prototype.toString = function() {\n\tif (this.isEmpty()) {\n\t\treturn \"[]\";\n\t} else {\n\t\tvar s = \"[\";\n\t\tfor (var i = 0; i < this.returnStates.length; i++) {\n\t\t\tif (i > 0) {\n\t\t\t\ts = s + \", \";\n\t\t\t}\n\t\t\tif (this.returnStates[i] === PredictionContext.EMPTY_RETURN_STATE) {\n\t\t\t\ts = s + \"$\";\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ts = s + this.returnStates[i];\n\t\t\tif (this.parents[i] !== null) {\n\t\t\t\ts = s + \" \" + this.parents[i];\n\t\t\t} else {\n\t\t\t\ts = s + \"null\";\n\t\t\t}\n\t\t}\n\t\treturn s + \"]\";\n\t}\n};\n\n// Convert a {@link RuleContext} tree to a {@link PredictionContext} graph.\n// Return {@link //EMPTY} if {@code outerContext} is empty or null.\n// /\nfunction predictionContextFromRuleContext(atn, outerContext) {\n\tif (outerContext === undefined || outerContext === null) {\n\t\touterContext = RuleContext.EMPTY;\n\t}\n\t// if we are in RuleContext of start rule, s, then PredictionContext\n\t// is EMPTY. Nobody called us. (if we are empty, return empty)\n\tif (outerContext.parentCtx === null || outerContext === RuleContext.EMPTY) {\n\t\treturn PredictionContext.EMPTY;\n\t}\n\t// If we have a parent, convert it to a PredictionContext graph\n\tvar parent = predictionContextFromRuleContext(atn, outerContext.parentCtx);\n\tvar state = atn.states[outerContext.invokingState];\n\tvar transition = state.transitions[0];\n\treturn SingletonPredictionContext.create(parent, transition.followState.stateNumber);\n}\n/*\nfunction calculateListsHashString(parents, returnStates) {\n\tvar s = \"\";\n\tparents.map(function(p) {\n\t\ts = s + p;\n\t});\n\treturnStates.map(function(r) {\n\t\ts = s + r;\n\t});\n\treturn s;\n}\n*/\nfunction merge(a, b, rootIsWildcard, mergeCache) {\n\t// share same graph if both same\n\tif (a === b) {\n\t\treturn a;\n\t}\n\tif (a instanceof SingletonPredictionContext && b instanceof SingletonPredictionContext) {\n\t\treturn mergeSingletons(a, b, rootIsWildcard, mergeCache);\n\t}\n\t// At least one of a or b is array\n\t// If one is $ and rootIsWildcard, return $ as// wildcard\n\tif (rootIsWildcard) {\n\t\tif (a instanceof EmptyPredictionContext) {\n\t\t\treturn a;\n\t\t}\n\t\tif (b instanceof EmptyPredictionContext) {\n\t\t\treturn b;\n\t\t}\n\t}\n\t// convert singleton so both are arrays to normalize\n\tif (a instanceof SingletonPredictionContext) {\n\t\ta = new ArrayPredictionContext([a.getParent()], [a.returnState]);\n\t}\n\tif (b instanceof SingletonPredictionContext) {\n\t\tb = new ArrayPredictionContext([b.getParent()], [b.returnState]);\n\t}\n\treturn mergeArrays(a, b, rootIsWildcard, mergeCache);\n}\n\n//\n// Merge two {@link SingletonPredictionContext} instances.\n//\n//

Stack tops equal, parents merge is same; return left graph.
\n//

\n//\n//

Same stack top, parents differ; merge parents giving array node, then\n// remainders of those graphs. A new root node is created to point to the\n// merged parents.
\n//

\n//\n//

Different stack tops pointing to same parent. Make array node for the\n// root where both element in the root point to the same (original)\n// parent.
\n//

\n//\n//

Different stack tops pointing to different parents. Make array node for\n// the root where each element points to the corresponding original\n// parent.
\n//

\n//\n// @param a the first {@link SingletonPredictionContext}\n// @param b the second {@link SingletonPredictionContext}\n// @param rootIsWildcard {@code true} if this is a local-context merge,\n// otherwise false to indicate a full-context merge\n// @param mergeCache\n// /\nfunction mergeSingletons(a, b, rootIsWildcard, mergeCache) {\n\tif (mergeCache !== null) {\n\t\tvar previous = mergeCache.get(a, b);\n\t\tif (previous !== null) {\n\t\t\treturn previous;\n\t\t}\n\t\tprevious = mergeCache.get(b, a);\n\t\tif (previous !== null) {\n\t\t\treturn previous;\n\t\t}\n\t}\n\n\tvar rootMerge = mergeRoot(a, b, rootIsWildcard);\n\tif (rootMerge !== null) {\n\t\tif (mergeCache !== null) {\n\t\t\tmergeCache.set(a, b, rootMerge);\n\t\t}\n\t\treturn rootMerge;\n\t}\n\tif (a.returnState === b.returnState) {\n\t\tvar parent = merge(a.parentCtx, b.parentCtx, rootIsWildcard, mergeCache);\n\t\t// if parent is same as existing a or b parent or reduced to a parent,\n\t\t// return it\n\t\tif (parent === a.parentCtx) {\n\t\t\treturn a; // ax + bx = ax, if a=b\n\t\t}\n\t\tif (parent === b.parentCtx) {\n\t\t\treturn b; // ax + bx = bx, if a=b\n\t\t}\n\t\t// else: ax + ay = a'[x,y]\n\t\t// merge parents x and y, giving array node with x,y then remainders\n\t\t// of those graphs. dup a, a' points at merged array\n\t\t// new joined parent so create new singleton pointing to it, a'\n\t\tvar spc = SingletonPredictionContext.create(parent, a.returnState);\n\t\tif (mergeCache !== null) {\n\t\t\tmergeCache.set(a, b, spc);\n\t\t}\n\t\treturn spc;\n\t} else { // a != b payloads differ\n\t\t// see if we can collapse parents due to $+x parents if local ctx\n\t\tvar singleParent = null;\n\t\tif (a === b || (a.parentCtx !== null && a.parentCtx === b.parentCtx)) { // ax +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// bx =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// [a,b]x\n\t\t\tsingleParent = a.parentCtx;\n\t\t}\n\t\tif (singleParent !== null) { // parents are same\n\t\t\t// sort payloads and use same parent\n\t\t\tvar payloads = [ a.returnState, b.returnState ];\n\t\t\tif (a.returnState > b.returnState) {\n\t\t\t\tpayloads[0] = b.returnState;\n\t\t\t\tpayloads[1] = a.returnState;\n\t\t\t}\n\t\t\tvar parents = [ singleParent, singleParent ];\n\t\t\tvar apc = new ArrayPredictionContext(parents, payloads);\n\t\t\tif (mergeCache !== null) {\n\t\t\t\tmergeCache.set(a, b, apc);\n\t\t\t}\n\t\t\treturn apc;\n\t\t}\n\t\t// parents differ and can't merge them. Just pack together\n\t\t// into array; can't merge.\n\t\t// ax + by = [ax,by]\n\t\tvar payloads = [ a.returnState, b.returnState ];\n\t\tvar parents = [ a.parentCtx, b.parentCtx ];\n\t\tif (a.returnState > b.returnState) { // sort by payload\n\t\t\tpayloads[0] = b.returnState;\n\t\t\tpayloads[1] = a.returnState;\n\t\t\tparents = [ b.parentCtx, a.parentCtx ];\n\t\t}\n\t\tvar a_ = new ArrayPredictionContext(parents, payloads);\n\t\tif (mergeCache !== null) {\n\t\t\tmergeCache.set(a, b, a_);\n\t\t}\n\t\treturn a_;\n\t}\n}\n\n//\n// Handle case where at least one of {@code a} or {@code b} is\n// {@link //EMPTY}. In the following diagrams, the symbol {@code $} is used\n// to represent {@link //EMPTY}.\n//\n//

Local-Context Merges

\n//\n//

These local-context merge operations are used when {@code rootIsWildcard}\n// is true.

\n//\n//

{@link //EMPTY} is superset of any graph; return {@link //EMPTY}.
\n//

\n//\n//

{@link //EMPTY} and anything is {@code //EMPTY}, so merged parent is\n// {@code //EMPTY}; return left graph.
\n//

\n//\n//

Special case of last merge if local context.
\n//

\n//\n//

Full-Context Merges

\n//\n//

These full-context merge operations are used when {@code rootIsWildcard}\n// is false.

\n//\n//

\n//\n//

Must keep all contexts; {@link //EMPTY} in array is a special value (and\n// null parent).
\n//

\n//\n//

\n//\n// @param a the first {@link SingletonPredictionContext}\n// @param b the second {@link SingletonPredictionContext}\n// @param rootIsWildcard {@code true} if this is a local-context merge,\n// otherwise false to indicate a full-context merge\n// /\nfunction mergeRoot(a, b, rootIsWildcard) {\n\tif (rootIsWildcard) {\n\t\tif (a === PredictionContext.EMPTY) {\n\t\t\treturn PredictionContext.EMPTY; // // + b =//\n\t\t}\n\t\tif (b === PredictionContext.EMPTY) {\n\t\t\treturn PredictionContext.EMPTY; // a +// =//\n\t\t}\n\t} else {\n\t\tif (a === PredictionContext.EMPTY && b === PredictionContext.EMPTY) {\n\t\t\treturn PredictionContext.EMPTY; // $ + $ = $\n\t\t} else if (a === PredictionContext.EMPTY) { // $ + x = [$,x]\n\t\t\tvar payloads = [ b.returnState,\n\t\t\t\t\tPredictionContext.EMPTY_RETURN_STATE ];\n\t\t\tvar parents = [ b.parentCtx, null ];\n\t\t\treturn new ArrayPredictionContext(parents, payloads);\n\t\t} else if (b === PredictionContext.EMPTY) { // x + $ = [$,x] ($ is always first if present)\n\t\t\tvar payloads = [ a.returnState, PredictionContext.EMPTY_RETURN_STATE ];\n\t\t\tvar parents = [ a.parentCtx, null ];\n\t\t\treturn new ArrayPredictionContext(parents, payloads);\n\t\t}\n\t}\n\treturn null;\n}\n\n//\n// Merge two {@link ArrayPredictionContext} instances.\n//\n//

Different tops, different parents.
\n//

\n//\n//

Shared top, same parents.
\n//

\n//\n//

Shared top, different parents.
\n//

\n//\n//

Shared top, all shared parents.
\n//

\n//\n//

Equal tops, merge parents and reduce top to\n// {@link SingletonPredictionContext}.
\n//

\n// /\nfunction mergeArrays(a, b, rootIsWildcard, mergeCache) {\n\tif (mergeCache !== null) {\n\t\tvar previous = mergeCache.get(a, b);\n\t\tif (previous !== null) {\n\t\t\treturn previous;\n\t\t}\n\t\tprevious = mergeCache.get(b, a);\n\t\tif (previous !== null) {\n\t\t\treturn previous;\n\t\t}\n\t}\n\t// merge sorted payloads a + b => M\n\tvar i = 0; // walks a\n\tvar j = 0; // walks b\n\tvar k = 0; // walks target M array\n\n\tvar mergedReturnStates = [];\n\tvar mergedParents = [];\n\t// walk and merge to yield mergedParents, mergedReturnStates\n\twhile (i < a.returnStates.length && j < b.returnStates.length) {\n\t\tvar a_parent = a.parents[i];\n\t\tvar b_parent = b.parents[j];\n\t\tif (a.returnStates[i] === b.returnStates[j]) {\n\t\t\t// same payload (stack tops are equal), must yield merged singleton\n\t\t\tvar payload = a.returnStates[i];\n\t\t\t// $+$ = $\n\t\t\tvar bothDollars = payload === PredictionContext.EMPTY_RETURN_STATE &&\n\t\t\t\t\ta_parent === null && b_parent === null;\n\t\t\tvar ax_ax = (a_parent !== null && b_parent !== null && a_parent === b_parent); // ax+ax\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// ->\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// ax\n\t\t\tif (bothDollars || ax_ax) {\n\t\t\t\tmergedParents[k] = a_parent; // choose left\n\t\t\t\tmergedReturnStates[k] = payload;\n\t\t\t} else { // ax+ay -> a'[x,y]\n\t\t\t\tvar mergedParent = merge(a_parent, b_parent, rootIsWildcard, mergeCache);\n\t\t\t\tmergedParents[k] = mergedParent;\n\t\t\t\tmergedReturnStates[k] = payload;\n\t\t\t}\n\t\t\ti += 1; // hop over left one as usual\n\t\t\tj += 1; // but also skip one in right side since we merge\n\t\t} else if (a.returnStates[i] < b.returnStates[j]) { // copy a[i] to M\n\t\t\tmergedParents[k] = a_parent;\n\t\t\tmergedReturnStates[k] = a.returnStates[i];\n\t\t\ti += 1;\n\t\t} else { // b > a, copy b[j] to M\n\t\t\tmergedParents[k] = b_parent;\n\t\t\tmergedReturnStates[k] = b.returnStates[j];\n\t\t\tj += 1;\n\t\t}\n\t\tk += 1;\n\t}\n\t// copy over any payloads remaining in either array\n\tif (i < a.returnStates.length) {\n\t\tfor (var p = i; p < a.returnStates.length; p++) {\n\t\t\tmergedParents[k] = a.parents[p];\n\t\t\tmergedReturnStates[k] = a.returnStates[p];\n\t\t\tk += 1;\n\t\t}\n\t} else {\n\t\tfor (var p = j; p < b.returnStates.length; p++) {\n\t\t\tmergedParents[k] = b.parents[p];\n\t\t\tmergedReturnStates[k] = b.returnStates[p];\n\t\t\tk += 1;\n\t\t}\n\t}\n\t// trim merged if we combined a few that had same stack tops\n\tif (k < mergedParents.length) { // write index < last position; trim\n\t\tif (k === 1) { // for just one merged element, return singleton top\n\t\t\tvar a_ = SingletonPredictionContext.create(mergedParents[0],\n\t\t\t\t\tmergedReturnStates[0]);\n\t\t\tif (mergeCache !== null) {\n\t\t\t\tmergeCache.set(a, b, a_);\n\t\t\t}\n\t\t\treturn a_;\n\t\t}\n\t\tmergedParents = mergedParents.slice(0, k);\n\t\tmergedReturnStates = mergedReturnStates.slice(0, k);\n\t}\n\n\tvar M = new ArrayPredictionContext(mergedParents, mergedReturnStates);\n\n\t// if we created same array as a or b, return that instead\n\t// TODO: track whether this is possible above during merge sort for speed\n\tif (M === a) {\n\t\tif (mergeCache !== null) {\n\t\t\tmergeCache.set(a, b, a);\n\t\t}\n\t\treturn a;\n\t}\n\tif (M === b) {\n\t\tif (mergeCache !== null) {\n\t\t\tmergeCache.set(a, b, b);\n\t\t}\n\t\treturn b;\n\t}\n\tcombineCommonParents(mergedParents);\n\n\tif (mergeCache !== null) {\n\t\tmergeCache.set(a, b, M);\n\t}\n\treturn M;\n}\n\n//\n// Make pass over all M {@code parents}; merge any {@code equals()}\n// ones.\n// /\nfunction combineCommonParents(parents) {\n\tvar uniqueParents = {};\n\n\tfor (var p = 0; p < parents.length; p++) {\n\t\tvar parent = parents[p];\n\t\tif (!(parent in uniqueParents)) {\n\t\t\tuniqueParents[parent] = parent;\n\t\t}\n\t}\n\tfor (var q = 0; q < parents.length; q++) {\n\t\tparents[q] = uniqueParents[parents[q]];\n\t}\n}\n\nfunction getCachedPredictionContext(context, contextCache, visited) {\n\tif (context.isEmpty()) {\n\t\treturn context;\n\t}\n\tvar existing = visited[context] || null;\n\tif (existing !== null) {\n\t\treturn existing;\n\t}\n\texisting = contextCache.get(context);\n\tif (existing !== null) {\n\t\tvisited[context] = existing;\n\t\treturn existing;\n\t}\n\tvar changed = false;\n\tvar parents = [];\n\tfor (var i = 0; i < parents.length; i++) {\n\t\tvar parent = getCachedPredictionContext(context.getParent(i), contextCache, visited);\n\t\tif (changed || parent !== context.getParent(i)) {\n\t\t\tif (!changed) {\n\t\t\t\tparents = [];\n\t\t\t\tfor (var j = 0; j < context.length; j++) {\n\t\t\t\t\tparents[j] = context.getParent(j);\n\t\t\t\t}\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t\tparents[i] = parent;\n\t\t}\n\t}\n\tif (!changed) {\n\t\tcontextCache.add(context);\n\t\tvisited[context] = context;\n\t\treturn context;\n\t}\n\tvar updated = null;\n\tif (parents.length === 0) {\n\t\tupdated = PredictionContext.EMPTY;\n\t} else if (parents.length === 1) {\n\t\tupdated = SingletonPredictionContext.create(parents[0], context\n\t\t\t\t.getReturnState(0));\n\t} else {\n\t\tupdated = new ArrayPredictionContext(parents, context.returnStates);\n\t}\n\tcontextCache.add(updated);\n\tvisited[updated] = updated;\n\tvisited[context] = updated;\n\n\treturn updated;\n}\n\n// ter's recursive version of Sam's getAllNodes()\nfunction getAllContextNodes(context, nodes, visited) {\n\tif (nodes === null) {\n\t\tnodes = [];\n\t\treturn getAllContextNodes(context, nodes, visited);\n\t} else if (visited === null) {\n\t\tvisited = {};\n\t\treturn getAllContextNodes(context, nodes, visited);\n\t} else {\n\t\tif (context === null || visited[context] !== null) {\n\t\t\treturn nodes;\n\t\t}\n\t\tvisited[context] = context;\n\t\tnodes.push(context);\n\t\tfor (var i = 0; i < context.length; i++) {\n\t\t\tgetAllContextNodes(context.getParent(i), nodes, visited);\n\t\t}\n\t\treturn nodes;\n\t}\n}\n\nexports.merge = merge;\nexports.PredictionContext = PredictionContext;\nexports.PredictionContextCache = PredictionContextCache;\nexports.SingletonPredictionContext = SingletonPredictionContext;\nexports.predictionContextFromRuleContext = predictionContextFromRuleContext;\nexports.getCachedPredictionContext = getCachedPredictionContext;\n","/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n\nvar LL1Analyzer = require('./../LL1Analyzer').LL1Analyzer;\nvar IntervalSet = require('./../IntervalSet').IntervalSet;\n\nfunction ATN(grammarType , maxTokenType) {\n\n // Used for runtime deserialization of ATNs from strings///\n // The type of the ATN.\n this.grammarType = grammarType;\n // The maximum value for any symbol recognized by a transition in the ATN.\n this.maxTokenType = maxTokenType;\n this.states = [];\n // Each subrule/rule is a decision point and we must track them so we\n // can go back later and build DFA predictors for them. This includes\n // all the rules, subrules, optional blocks, ()+, ()* etc...\n this.decisionToState = [];\n // Maps from rule index to starting state number.\n this.ruleToStartState = [];\n // Maps from rule index to stop state number.\n this.ruleToStopState = null;\n this.modeNameToStartState = {};\n // For lexer ATNs, this maps the rule index to the resulting token type.\n // For parser ATNs, this maps the rule index to the generated bypass token\n // type if the\n // {@link ATNDeserializationOptions//isGenerateRuleBypassTransitions}\n // deserialization option was specified; otherwise, this is {@code null}.\n this.ruleToTokenType = null;\n // For lexer ATNs, this is an array of {@link LexerAction} objects which may\n // be referenced by action transitions in the ATN.\n this.lexerActions = null;\n this.modeToStartState = [];\n\n return this;\n}\n\n// Compute the set of valid tokens that can occur starting in state {@code s}.\n// If {@code ctx} is null, the set of tokens will not include what can follow\n// the rule surrounding {@code s}. In other words, the set will be\n// restricted to tokens reachable staying within {@code s}'s rule.\nATN.prototype.nextTokensInContext = function(s, ctx) {\n var anal = new LL1Analyzer(this);\n return anal.LOOK(s, null, ctx);\n};\n\n// Compute the set of valid tokens that can occur starting in {@code s} and\n// staying in same rule. {@link Token//EPSILON} is in set if we reach end of\n// rule.\nATN.prototype.nextTokensNoContext = function(s) {\n if (s.nextTokenWithinRule !== null ) {\n return s.nextTokenWithinRule;\n }\n s.nextTokenWithinRule = this.nextTokensInContext(s, null);\n s.nextTokenWithinRule.readOnly = true;\n return s.nextTokenWithinRule;\n};\n\nATN.prototype.nextTokens = function(s, ctx) {\n if ( ctx===undefined ) {\n return this.nextTokensNoContext(s);\n } else {\n return this.nextTokensInContext(s, ctx);\n }\n};\n\nATN.prototype.addState = function( state) {\n if ( state !== null ) {\n state.atn = this;\n state.stateNumber = this.states.length;\n }\n this.states.push(state);\n};\n\nATN.prototype.removeState = function( state) {\n this.states[state.stateNumber] = null; // just free mem, don't shift states in list\n};\n\nATN.prototype.defineDecisionState = function( s) {\n this.decisionToState.push(s);\n s.decision = this.decisionToState.length-1;\n return s.decision;\n};\n\nATN.prototype.getDecisionState = function( decision) {\n if (this.decisionToState.length===0) {\n return null;\n } else {\n return this.decisionToState[decision];\n }\n};\n\n// Computes the set of input symbols which could follow ATN state number\n// {@code stateNumber} in the specified full {@code context}. This method\n// considers the complete parser context, but does not evaluate semantic\n// predicates (i.e. all predicates encountered during the calculation are\n// assumed true). If a path in the ATN exists from the starting state to the\n// {@link RuleStopState} of the outermost context without matching any\n// symbols, {@link Token//EOF} is added to the returned set.\n//\n//

If {@code context} is {@code null}, it is treated as\n// {@link ParserRuleContext//EMPTY}.

\n//\n// @param stateNumber the ATN state number\n// @param context the full parse context\n// @return The set of potentially valid input symbols which could follow the\n// specified state in the specified context.\n// @throws IllegalArgumentException if the ATN does not contain a state with\n// number {@code stateNumber}\nvar Token = require('./../Token').Token;\n\nATN.prototype.getExpectedTokens = function( stateNumber, ctx ) {\n if ( stateNumber < 0 || stateNumber >= this.states.length ) {\n throw(\"Invalid state number.\");\n }\n var s = this.states[stateNumber];\n var following = this.nextTokens(s);\n if (!following.contains(Token.EPSILON)) {\n return following;\n }\n var expected = new IntervalSet();\n expected.addSet(following);\n expected.removeOne(Token.EPSILON);\n while (ctx !== null && ctx.invokingState >= 0 && following.contains(Token.EPSILON)) {\n var invokingState = this.states[ctx.invokingState];\n var rt = invokingState.transitions[0];\n following = this.nextTokens(rt.followState);\n expected.addSet(following);\n expected.removeOne(Token.EPSILON);\n ctx = ctx.parentCtx;\n }\n if (following.contains(Token.EPSILON)) {\n expected.addOne(Token.EOF);\n }\n return expected;\n};\n\nATN.INVALID_ALT_NUMBER = 0;\n\nexports.ATN = ATN;","/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n//\n\n// An ATN transition between any two ATN states. Subclasses define\n// atom, set, epsilon, action, predicate, rule transitions.\n//\n//

This is a one way link. It emanates from a state (usually via a list of\n// transitions) and has a target state.

\n//\n//

Since we never have to change the ATN transitions once we construct it,\n// we can fix these transitions as specific classes. The DFA transitions\n// on the other hand need to update the labels as it adds transitions to\n// the states. We'll use the term Edge for the DFA to distinguish them from\n// ATN transitions.

\n\nvar Token = require('./../Token').Token;\nvar Interval = require('./../IntervalSet').Interval;\nvar IntervalSet = require('./../IntervalSet').IntervalSet;\nvar Predicate = require('./SemanticContext').Predicate;\nvar PrecedencePredicate = require('./SemanticContext').PrecedencePredicate;\n\nfunction Transition (target) {\n // The target of this transition.\n if (target===undefined || target===null) {\n throw \"target cannot be null.\";\n }\n this.target = target;\n // Are we epsilon, action, sempred?\n this.isEpsilon = false;\n this.label = null;\n return this;\n}\n // constants for serialization\nTransition.EPSILON = 1;\nTransition.RANGE = 2;\nTransition.RULE = 3;\nTransition.PREDICATE = 4; // e.g., {isType(input.LT(1))}?\nTransition.ATOM = 5;\nTransition.ACTION = 6;\nTransition.SET = 7; // ~(A|B) or ~atom, wildcard, which convert to next 2\nTransition.NOT_SET = 8;\nTransition.WILDCARD = 9;\nTransition.PRECEDENCE = 10;\n\nTransition.serializationNames = [\n \"INVALID\",\n \"EPSILON\",\n \"RANGE\",\n \"RULE\",\n \"PREDICATE\",\n \"ATOM\",\n \"ACTION\",\n \"SET\",\n \"NOT_SET\",\n \"WILDCARD\",\n \"PRECEDENCE\"\n ];\n\nTransition.serializationTypes = {\n EpsilonTransition: Transition.EPSILON,\n RangeTransition: Transition.RANGE,\n RuleTransition: Transition.RULE,\n PredicateTransition: Transition.PREDICATE,\n AtomTransition: Transition.ATOM,\n ActionTransition: Transition.ACTION,\n SetTransition: Transition.SET,\n NotSetTransition: Transition.NOT_SET,\n WildcardTransition: Transition.WILDCARD,\n PrecedencePredicateTransition: Transition.PRECEDENCE\n };\n\n\n// TODO: make all transitions sets? no, should remove set edges\nfunction AtomTransition(target, label) {\n\tTransition.call(this, target);\n\tthis.label_ = label; // The token type or character value; or, signifies special label.\n this.label = this.makeLabel();\n this.serializationType = Transition.ATOM;\n return this;\n}\n\nAtomTransition.prototype = Object.create(Transition.prototype);\nAtomTransition.prototype.constructor = AtomTransition;\n\nAtomTransition.prototype.makeLabel = function() {\n\tvar s = new IntervalSet();\n s.addOne(this.label_);\n return s;\n};\n\nAtomTransition.prototype.matches = function( symbol, minVocabSymbol, maxVocabSymbol) {\n return this.label_ === symbol;\n};\n\nAtomTransition.prototype.toString = function() {\n\treturn this.label_;\n};\n\nfunction RuleTransition(ruleStart, ruleIndex, precedence, followState) {\n\tTransition.call(this, ruleStart);\n this.ruleIndex = ruleIndex; // ptr to the rule definition object for this rule ref\n this.precedence = precedence;\n this.followState = followState; // what node to begin computations following ref to rule\n this.serializationType = Transition.RULE;\n this.isEpsilon = true;\n return this;\n}\n\nRuleTransition.prototype = Object.create(Transition.prototype);\nRuleTransition.prototype.constructor = RuleTransition;\n\nRuleTransition.prototype.matches = function(symbol, minVocabSymbol, maxVocabSymbol) {\n\treturn false;\n};\n\n\nfunction EpsilonTransition(target, outermostPrecedenceReturn) {\n\tTransition.call(this, target);\n this.serializationType = Transition.EPSILON;\n this.isEpsilon = true;\n this.outermostPrecedenceReturn = outermostPrecedenceReturn;\n return this;\n}\n\nEpsilonTransition.prototype = Object.create(Transition.prototype);\nEpsilonTransition.prototype.constructor = EpsilonTransition;\n\nEpsilonTransition.prototype.matches = function( symbol, minVocabSymbol, maxVocabSymbol) {\n\treturn false;\n};\n\nEpsilonTransition.prototype.toString = function() {\n\treturn \"epsilon\";\n};\n\nfunction RangeTransition(target, start, stop) {\n\tTransition.call(this, target);\n\tthis.serializationType = Transition.RANGE;\n this.start = start;\n this.stop = stop;\n this.label = this.makeLabel();\n return this;\n}\n\nRangeTransition.prototype = Object.create(Transition.prototype);\nRangeTransition.prototype.constructor = RangeTransition;\n\nRangeTransition.prototype.makeLabel = function() {\n var s = new IntervalSet();\n s.addRange(this.start, this.stop);\n return s;\n};\n\nRangeTransition.prototype.matches = function(symbol, minVocabSymbol, maxVocabSymbol) {\n\treturn symbol >= this.start && symbol <= this.stop;\n};\n\nRangeTransition.prototype.toString = function() {\n\treturn \"'\" + String.fromCharCode(this.start) + \"'..'\" + String.fromCharCode(this.stop) + \"'\";\n};\n\nfunction AbstractPredicateTransition(target) {\n\tTransition.call(this, target);\n\treturn this;\n}\n\nAbstractPredicateTransition.prototype = Object.create(Transition.prototype);\nAbstractPredicateTransition.prototype.constructor = AbstractPredicateTransition;\n\nfunction PredicateTransition(target, ruleIndex, predIndex, isCtxDependent) {\n\tAbstractPredicateTransition.call(this, target);\n this.serializationType = Transition.PREDICATE;\n this.ruleIndex = ruleIndex;\n this.predIndex = predIndex;\n this.isCtxDependent = isCtxDependent; // e.g., $i ref in pred\n this.isEpsilon = true;\n return this;\n}\n\nPredicateTransition.prototype = Object.create(AbstractPredicateTransition.prototype);\nPredicateTransition.prototype.constructor = PredicateTransition;\n\nPredicateTransition.prototype.matches = function(symbol, minVocabSymbol, maxVocabSymbol) {\n\treturn false;\n};\n\nPredicateTransition.prototype.getPredicate = function() {\n\treturn new Predicate(this.ruleIndex, this.predIndex, this.isCtxDependent);\n};\n\nPredicateTransition.prototype.toString = function() {\n\treturn \"pred_\" + this.ruleIndex + \":\" + this.predIndex;\n};\n\nfunction ActionTransition(target, ruleIndex, actionIndex, isCtxDependent) {\n\tTransition.call(this, target);\n this.serializationType = Transition.ACTION;\n this.ruleIndex = ruleIndex;\n this.actionIndex = actionIndex===undefined ? -1 : actionIndex;\n this.isCtxDependent = isCtxDependent===undefined ? false : isCtxDependent; // e.g., $i ref in pred\n this.isEpsilon = true;\n return this;\n}\n\nActionTransition.prototype = Object.create(Transition.prototype);\nActionTransition.prototype.constructor = ActionTransition;\n\n\nActionTransition.prototype.matches = function(symbol, minVocabSymbol, maxVocabSymbol) {\n\treturn false;\n};\n\nActionTransition.prototype.toString = function() {\n\treturn \"action_\" + this.ruleIndex + \":\" + this.actionIndex;\n};\n\n\n// A transition containing a set of values.\nfunction SetTransition(target, set) {\n\tTransition.call(this, target);\n\tthis.serializationType = Transition.SET;\n if (set !==undefined && set !==null) {\n this.label = set;\n } else {\n this.label = new IntervalSet();\n this.label.addOne(Token.INVALID_TYPE);\n }\n return this;\n}\n\nSetTransition.prototype = Object.create(Transition.prototype);\nSetTransition.prototype.constructor = SetTransition;\n\nSetTransition.prototype.matches = function(symbol, minVocabSymbol, maxVocabSymbol) {\n\treturn this.label.contains(symbol);\n};\n\n\nSetTransition.prototype.toString = function() {\n\treturn this.label.toString();\n};\n\nfunction NotSetTransition(target, set) {\n\tSetTransition.call(this, target, set);\n\tthis.serializationType = Transition.NOT_SET;\n\treturn this;\n}\n\nNotSetTransition.prototype = Object.create(SetTransition.prototype);\nNotSetTransition.prototype.constructor = NotSetTransition;\n\nNotSetTransition.prototype.matches = function(symbol, minVocabSymbol, maxVocabSymbol) {\n\treturn symbol >= minVocabSymbol && symbol <= maxVocabSymbol &&\n\t\t\t!SetTransition.prototype.matches.call(this, symbol, minVocabSymbol, maxVocabSymbol);\n};\n\nNotSetTransition.prototype.toString = function() {\n\treturn '~' + SetTransition.prototype.toString.call(this);\n};\n\nfunction WildcardTransition(target) {\n\tTransition.call(this, target);\n\tthis.serializationType = Transition.WILDCARD;\n\treturn this;\n}\n\nWildcardTransition.prototype = Object.create(Transition.prototype);\nWildcardTransition.prototype.constructor = WildcardTransition;\n\n\nWildcardTransition.prototype.matches = function(symbol, minVocabSymbol, maxVocabSymbol) {\n\treturn symbol >= minVocabSymbol && symbol <= maxVocabSymbol;\n};\n\nWildcardTransition.prototype.toString = function() {\n\treturn \".\";\n};\n\nfunction PrecedencePredicateTransition(target, precedence) {\n\tAbstractPredicateTransition.call(this, target);\n this.serializationType = Transition.PRECEDENCE;\n this.precedence = precedence;\n this.isEpsilon = true;\n return this;\n}\n\nPrecedencePredicateTransition.prototype = Object.create(AbstractPredicateTransition.prototype);\nPrecedencePredicateTransition.prototype.constructor = PrecedencePredicateTransition;\n\nPrecedencePredicateTransition.prototype.matches = function(symbol, minVocabSymbol, maxVocabSymbol) {\n\treturn false;\n};\n\nPrecedencePredicateTransition.prototype.getPredicate = function() {\n\treturn new PrecedencePredicate(this.precedence);\n};\n\nPrecedencePredicateTransition.prototype.toString = function() {\n\treturn this.precedence + \" >= _p\";\n};\n\nexports.Transition = Transition;\nexports.AtomTransition = AtomTransition;\nexports.SetTransition = SetTransition;\nexports.NotSetTransition = NotSetTransition;\nexports.RuleTransition = RuleTransition;\nexports.ActionTransition = ActionTransition;\nexports.EpsilonTransition = EpsilonTransition;\nexports.RangeTransition = RangeTransition;\nexports.WildcardTransition = WildcardTransition;\nexports.PredicateTransition = PredicateTransition;\nexports.PrecedencePredicateTransition = PrecedencePredicateTransition;\nexports.AbstractPredicateTransition = AbstractPredicateTransition;","//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n\n//\n// Specialized {@link Set}{@code <}{@link ATNConfig}{@code >} that can track\n// info about the set, with support for combining similar configurations using a\n// graph-structured stack.\n///\n\nvar ATN = require('./ATN').ATN;\nvar Utils = require('./../Utils');\nvar Hash = Utils.Hash;\nvar Set = Utils.Set;\nvar SemanticContext = require('./SemanticContext').SemanticContext;\nvar merge = require('./../PredictionContext').merge;\n\nfunction hashATNConfig(c) {\n\treturn c.hashCodeForConfigSet();\n}\n\nfunction equalATNConfigs(a, b) {\n\tif ( a===b ) {\n\t\treturn true;\n\t} else if ( a===null || b===null ) {\n\t\treturn false;\n\t} else\n return a.equalsForConfigSet(b);\n }\n\n\nfunction ATNConfigSet(fullCtx) {\n\t//\n\t// The reason that we need this is because we don't want the hash map to use\n\t// the standard hash code and equals. We need all configurations with the\n\t// same\n\t// {@code (s,i,_,semctx)} to be equal. Unfortunately, this key effectively\n\t// doubles\n\t// the number of objects associated with ATNConfigs. The other solution is\n\t// to\n\t// use a hash table that lets us specify the equals/hashcode operation.\n\t// All configs but hashed by (s, i, _, pi) not including context. Wiped out\n\t// when we go readonly as this set becomes a DFA state.\n\tthis.configLookup = new Set(hashATNConfig, equalATNConfigs);\n\t// Indicates that this configuration set is part of a full context\n\t// LL prediction. It will be used to determine how to merge $. With SLL\n\t// it's a wildcard whereas it is not for LL context merge.\n\tthis.fullCtx = fullCtx === undefined ? true : fullCtx;\n\t// Indicates that the set of configurations is read-only. Do not\n\t// allow any code to manipulate the set; DFA states will point at\n\t// the sets and they must not change. This does not protect the other\n\t// fields; in particular, conflictingAlts is set after\n\t// we've made this readonly.\n\tthis.readOnly = false;\n\t// Track the elements as they are added to the set; supports get(i)///\n\tthis.configs = [];\n\n\t// TODO: these fields make me pretty uncomfortable but nice to pack up info\n\t// together, saves recomputation\n\t// TODO: can we track conflicts as they are added to save scanning configs\n\t// later?\n\tthis.uniqueAlt = 0;\n\tthis.conflictingAlts = null;\n\n\t// Used in parser and lexer. In lexer, it indicates we hit a pred\n\t// while computing a closure operation. Don't make a DFA state from this.\n\tthis.hasSemanticContext = false;\n\tthis.dipsIntoOuterContext = false;\n\n\tthis.cachedHashCode = -1;\n\n\treturn this;\n}\n\n// Adding a new config means merging contexts with existing configs for\n// {@code (s, i, pi, _)}, where {@code s} is the\n// {@link ATNConfig//state}, {@code i} is the {@link ATNConfig//alt}, and\n// {@code pi} is the {@link ATNConfig//semanticContext}. We use\n// {@code (s,i,pi)} as key.\n//\n//

This method updates {@link //dipsIntoOuterContext} and\n// {@link //hasSemanticContext} when necessary.

\n// /\nATNConfigSet.prototype.add = function(config, mergeCache) {\n\tif (mergeCache === undefined) {\n\t\tmergeCache = null;\n\t}\n\tif (this.readOnly) {\n\t\tthrow \"This set is readonly\";\n\t}\n\tif (config.semanticContext !== SemanticContext.NONE) {\n\t\tthis.hasSemanticContext = true;\n\t}\n\tif (config.reachesIntoOuterContext > 0) {\n\t\tthis.dipsIntoOuterContext = true;\n\t}\n\tvar existing = this.configLookup.add(config);\n\tif (existing === config) {\n\t\tthis.cachedHashCode = -1;\n\t\tthis.configs.push(config); // track order here\n\t\treturn true;\n\t}\n\t// a previous (s,i,pi,_), merge with it and save result\n\tvar rootIsWildcard = !this.fullCtx;\n\tvar merged = merge(existing.context, config.context, rootIsWildcard, mergeCache);\n\t// no need to check for existing.context, config.context in cache\n\t// since only way to create new graphs is \"call rule\" and here. We\n\t// cache at both places.\n\texisting.reachesIntoOuterContext = Math.max( existing.reachesIntoOuterContext, config.reachesIntoOuterContext);\n\t// make sure to preserve the precedence filter suppression during the merge\n\tif (config.precedenceFilterSuppressed) {\n\t\texisting.precedenceFilterSuppressed = true;\n\t}\n\texisting.context = merged; // replace context; no need to alt mapping\n\treturn true;\n};\n\nATNConfigSet.prototype.getStates = function() {\n\tvar states = new Set();\n\tfor (var i = 0; i < this.configs.length; i++) {\n\t\tstates.add(this.configs[i].state);\n\t}\n\treturn states;\n};\n\nATNConfigSet.prototype.getPredicates = function() {\n\tvar preds = [];\n\tfor (var i = 0; i < this.configs.length; i++) {\n\t\tvar c = this.configs[i].semanticContext;\n\t\tif (c !== SemanticContext.NONE) {\n\t\t\tpreds.push(c.semanticContext);\n\t\t}\n\t}\n\treturn preds;\n};\n\nObject.defineProperty(ATNConfigSet.prototype, \"items\", {\n\tget : function() {\n\t\treturn this.configs;\n\t}\n});\n\nATNConfigSet.prototype.optimizeConfigs = function(interpreter) {\n\tif (this.readOnly) {\n\t\tthrow \"This set is readonly\";\n\t}\n\tif (this.configLookup.length === 0) {\n\t\treturn;\n\t}\n\tfor (var i = 0; i < this.configs.length; i++) {\n\t\tvar config = this.configs[i];\n\t\tconfig.context = interpreter.getCachedContext(config.context);\n\t}\n};\n\nATNConfigSet.prototype.addAll = function(coll) {\n\tfor (var i = 0; i < coll.length; i++) {\n\t\tthis.add(coll[i]);\n\t}\n\treturn false;\n};\n\nATNConfigSet.prototype.equals = function(other) {\n\treturn this === other ||\n\t\t(other instanceof ATNConfigSet &&\n\t\tUtils.equalArrays(this.configs, other.configs) &&\n\t\tthis.fullCtx === other.fullCtx &&\n\t\tthis.uniqueAlt === other.uniqueAlt &&\n\t\tthis.conflictingAlts === other.conflictingAlts &&\n\t\tthis.hasSemanticContext === other.hasSemanticContext &&\n\t\tthis.dipsIntoOuterContext === other.dipsIntoOuterContext);\n};\n\nATNConfigSet.prototype.hashCode = function() {\n var hash = new Hash();\n this.updateHashCode(hash);\n return hash.finish();\n};\n\n\nATNConfigSet.prototype.updateHashCode = function(hash) {\n\tif (this.readOnly) {\n\t\tif (this.cachedHashCode === -1) {\n var hash = new Hash();\n hash.update(this.configs);\n\t\t\tthis.cachedHashCode = hash.finish();\n\t\t}\n hash.update(this.cachedHashCode);\n\t} else {\n hash.update(this.configs);\n\t}\n};\n\n\nObject.defineProperty(ATNConfigSet.prototype, \"length\", {\n\tget : function() {\n\t\treturn this.configs.length;\n\t}\n});\n\nATNConfigSet.prototype.isEmpty = function() {\n\treturn this.configs.length === 0;\n};\n\nATNConfigSet.prototype.contains = function(item) {\n\tif (this.configLookup === null) {\n\t\tthrow \"This method is not implemented for readonly sets.\";\n\t}\n\treturn this.configLookup.contains(item);\n};\n\nATNConfigSet.prototype.containsFast = function(item) {\n\tif (this.configLookup === null) {\n\t\tthrow \"This method is not implemented for readonly sets.\";\n\t}\n\treturn this.configLookup.containsFast(item);\n};\n\nATNConfigSet.prototype.clear = function() {\n\tif (this.readOnly) {\n\t\tthrow \"This set is readonly\";\n\t}\n\tthis.configs = [];\n\tthis.cachedHashCode = -1;\n\tthis.configLookup = new Set();\n};\n\nATNConfigSet.prototype.setReadonly = function(readOnly) {\n\tthis.readOnly = readOnly;\n\tif (readOnly) {\n\t\tthis.configLookup = null; // can't mod, no need for lookup cache\n\t}\n};\n\nATNConfigSet.prototype.toString = function() {\n\treturn Utils.arrayToString(this.configs) +\n\t\t(this.hasSemanticContext ? \",hasSemanticContext=\" + this.hasSemanticContext : \"\") +\n\t\t(this.uniqueAlt !== ATN.INVALID_ALT_NUMBER ? \",uniqueAlt=\" + this.uniqueAlt : \"\") +\n\t\t(this.conflictingAlts !== null ? \",conflictingAlts=\" + this.conflictingAlts : \"\") +\n\t\t(this.dipsIntoOuterContext ? \",dipsIntoOuterContext\" : \"\");\n};\n\nfunction OrderedATNConfigSet() {\n\tATNConfigSet.call(this);\n\tthis.configLookup = new Set();\n\treturn this;\n}\n\nOrderedATNConfigSet.prototype = Object.create(ATNConfigSet.prototype);\nOrderedATNConfigSet.prototype.constructor = OrderedATNConfigSet;\n\nexports.ATNConfigSet = ATNConfigSet;\nexports.OrderedATNConfigSet = OrderedATNConfigSet;\n","//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n//\n\n// A tree structure used to record the semantic context in which\n// an ATN configuration is valid. It's either a single predicate,\n// a conjunction {@code p1&&p2}, or a sum of products {@code p1||p2}.\n//\n//

I have scoped the {@link AND}, {@link OR}, and {@link Predicate} subclasses of\n// {@link SemanticContext} within the scope of this outer class.

\n//\n\nvar Set = require('./../Utils').Set;\nvar Hash = require('./../Utils').Hash;\n\nfunction SemanticContext() {\n\treturn this;\n}\n\nSemanticContext.prototype.hashCode = function() {\n var hash = new Hash();\n this.updateHashCode(hash);\n return hash.finish();\n};\n\n// For context independent predicates, we evaluate them without a local\n// context (i.e., null context). That way, we can evaluate them without\n// having to create proper rule-specific context during prediction (as\n// opposed to the parser, which creates them naturally). In a practical\n// sense, this avoids a cast exception from RuleContext to myruleContext.\n//\n//

For context dependent predicates, we must pass in a local context so that\n// references such as $arg evaluate properly as _localctx.arg. We only\n// capture context dependent predicates in the context in which we begin\n// prediction, so we passed in the outer context here in case of context\n// dependent predicate evaluation.

\n//\nSemanticContext.prototype.evaluate = function(parser, outerContext) {\n};\n\n//\n// Evaluate the precedence predicates for the context and reduce the result.\n//\n// @param parser The parser instance.\n// @param outerContext The current parser context object.\n// @return The simplified semantic context after precedence predicates are\n// evaluated, which will be one of the following values.\n//
    \n//
  • {@link //NONE}: if the predicate simplifies to {@code true} after\n// precedence predicates are evaluated.
  • \n//
  • {@code null}: if the predicate simplifies to {@code false} after\n// precedence predicates are evaluated.
  • \n//
  • {@code this}: if the semantic context is not changed as a result of\n// precedence predicate evaluation.
  • \n//
  • A non-{@code null} {@link SemanticContext}: the new simplified\n// semantic context after precedence predicates are evaluated.
  • \n//
\n//\nSemanticContext.prototype.evalPrecedence = function(parser, outerContext) {\n\treturn this;\n};\n\nSemanticContext.andContext = function(a, b) {\n\tif (a === null || a === SemanticContext.NONE) {\n\t\treturn b;\n\t}\n\tif (b === null || b === SemanticContext.NONE) {\n\t\treturn a;\n\t}\n\tvar result = new AND(a, b);\n\tif (result.opnds.length === 1) {\n\t\treturn result.opnds[0];\n\t} else {\n\t\treturn result;\n\t}\n};\n\nSemanticContext.orContext = function(a, b) {\n\tif (a === null) {\n\t\treturn b;\n\t}\n\tif (b === null) {\n\t\treturn a;\n\t}\n\tif (a === SemanticContext.NONE || b === SemanticContext.NONE) {\n\t\treturn SemanticContext.NONE;\n\t}\n\tvar result = new OR(a, b);\n\tif (result.opnds.length === 1) {\n\t\treturn result.opnds[0];\n\t} else {\n\t\treturn result;\n\t}\n};\n\nfunction Predicate(ruleIndex, predIndex, isCtxDependent) {\n\tSemanticContext.call(this);\n\tthis.ruleIndex = ruleIndex === undefined ? -1 : ruleIndex;\n\tthis.predIndex = predIndex === undefined ? -1 : predIndex;\n\tthis.isCtxDependent = isCtxDependent === undefined ? false : isCtxDependent; // e.g., $i ref in pred\n\treturn this;\n}\n\nPredicate.prototype = Object.create(SemanticContext.prototype);\nPredicate.prototype.constructor = Predicate;\n\n//The default {@link SemanticContext}, which is semantically equivalent to\n//a predicate of the form {@code {true}?}.\n//\nSemanticContext.NONE = new Predicate();\n\n\nPredicate.prototype.evaluate = function(parser, outerContext) {\n\tvar localctx = this.isCtxDependent ? outerContext : null;\n\treturn parser.sempred(localctx, this.ruleIndex, this.predIndex);\n};\n\nPredicate.prototype.updateHashCode = function(hash) {\n\thash.update(this.ruleIndex, this.predIndex, this.isCtxDependent);\n};\n\nPredicate.prototype.equals = function(other) {\n\tif (this === other) {\n\t\treturn true;\n\t} else if (!(other instanceof Predicate)) {\n\t\treturn false;\n\t} else {\n\t\treturn this.ruleIndex === other.ruleIndex &&\n\t\t\t\tthis.predIndex === other.predIndex &&\n\t\t\t\tthis.isCtxDependent === other.isCtxDependent;\n\t}\n};\n\nPredicate.prototype.toString = function() {\n\treturn \"{\" + this.ruleIndex + \":\" + this.predIndex + \"}?\";\n};\n\nfunction PrecedencePredicate(precedence) {\n\tSemanticContext.call(this);\n\tthis.precedence = precedence === undefined ? 0 : precedence;\n}\n\nPrecedencePredicate.prototype = Object.create(SemanticContext.prototype);\nPrecedencePredicate.prototype.constructor = PrecedencePredicate;\n\nPrecedencePredicate.prototype.evaluate = function(parser, outerContext) {\n\treturn parser.precpred(outerContext, this.precedence);\n};\n\nPrecedencePredicate.prototype.evalPrecedence = function(parser, outerContext) {\n\tif (parser.precpred(outerContext, this.precedence)) {\n\t\treturn SemanticContext.NONE;\n\t} else {\n\t\treturn null;\n\t}\n};\n\nPrecedencePredicate.prototype.compareTo = function(other) {\n\treturn this.precedence - other.precedence;\n};\n\nPrecedencePredicate.prototype.updateHashCode = function(hash) {\n hash.update(31);\n};\n\nPrecedencePredicate.prototype.equals = function(other) {\n\tif (this === other) {\n\t\treturn true;\n\t} else if (!(other instanceof PrecedencePredicate)) {\n\t\treturn false;\n\t} else {\n\t\treturn this.precedence === other.precedence;\n\t}\n};\n\nPrecedencePredicate.prototype.toString = function() {\n\treturn \"{\"+this.precedence+\">=prec}?\";\n};\n\n\n\nPrecedencePredicate.filterPrecedencePredicates = function(set) {\n\tvar result = [];\n\tset.values().map( function(context) {\n\t\tif (context instanceof PrecedencePredicate) {\n\t\t\tresult.push(context);\n\t\t}\n\t});\n\treturn result;\n};\n\n\n// A semantic context which is true whenever none of the contained contexts\n// is false.\n//\nfunction AND(a, b) {\n\tSemanticContext.call(this);\n\tvar operands = new Set();\n\tif (a instanceof AND) {\n\t\ta.opnds.map(function(o) {\n\t\t\toperands.add(o);\n\t\t});\n\t} else {\n\t\toperands.add(a);\n\t}\n\tif (b instanceof AND) {\n\t\tb.opnds.map(function(o) {\n\t\t\toperands.add(o);\n\t\t});\n\t} else {\n\t\toperands.add(b);\n\t}\n\tvar precedencePredicates = PrecedencePredicate.filterPrecedencePredicates(operands);\n\tif (precedencePredicates.length > 0) {\n\t\t// interested in the transition with the lowest precedence\n\t\tvar reduced = null;\n\t\tprecedencePredicates.map( function(p) {\n\t\t\tif(reduced===null || p.precedence\n// The evaluation of predicates by this context is short-circuiting, but\n// unordered.

\n//\nAND.prototype.evaluate = function(parser, outerContext) {\n\tfor (var i = 0; i < this.opnds.length; i++) {\n\t\tif (!this.opnds[i].evaluate(parser, outerContext)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n};\n\nAND.prototype.evalPrecedence = function(parser, outerContext) {\n\tvar differs = false;\n\tvar operands = [];\n\tfor (var i = 0; i < this.opnds.length; i++) {\n\t\tvar context = this.opnds[i];\n\t\tvar evaluated = context.evalPrecedence(parser, outerContext);\n\t\tdiffers |= (evaluated !== context);\n\t\tif (evaluated === null) {\n\t\t\t// The AND context is false if any element is false\n\t\t\treturn null;\n\t\t} else if (evaluated !== SemanticContext.NONE) {\n\t\t\t// Reduce the result by skipping true elements\n\t\t\toperands.push(evaluated);\n\t\t}\n\t}\n\tif (!differs) {\n\t\treturn this;\n\t}\n\tif (operands.length === 0) {\n\t\t// all elements were true, so the AND context is true\n\t\treturn SemanticContext.NONE;\n\t}\n\tvar result = null;\n\toperands.map(function(o) {\n\t\tresult = result === null ? o : SemanticContext.andContext(result, o);\n\t});\n\treturn result;\n};\n\nAND.prototype.toString = function() {\n\tvar s = \"\";\n\tthis.opnds.map(function(o) {\n\t\ts += \"&& \" + o.toString();\n\t});\n\treturn s.length > 3 ? s.slice(3) : s;\n};\n\n//\n// A semantic context which is true whenever at least one of the contained\n// contexts is true.\n//\nfunction OR(a, b) {\n\tSemanticContext.call(this);\n\tvar operands = new Set();\n\tif (a instanceof OR) {\n\t\ta.opnds.map(function(o) {\n\t\t\toperands.add(o);\n\t\t});\n\t} else {\n\t\toperands.add(a);\n\t}\n\tif (b instanceof OR) {\n\t\tb.opnds.map(function(o) {\n\t\t\toperands.add(o);\n\t\t});\n\t} else {\n\t\toperands.add(b);\n\t}\n\n\tvar precedencePredicates = PrecedencePredicate.filterPrecedencePredicates(operands);\n\tif (precedencePredicates.length > 0) {\n\t\t// interested in the transition with the highest precedence\n\t\tvar s = precedencePredicates.sort(function(a, b) {\n\t\t\treturn a.compareTo(b);\n\t\t});\n\t\tvar reduced = s[s.length-1];\n\t\toperands.add(reduced);\n\t}\n\tthis.opnds = operands.values();\n\treturn this;\n}\n\nOR.prototype = Object.create(SemanticContext.prototype);\nOR.prototype.constructor = OR;\n\nOR.prototype.constructor = function(other) {\n\tif (this === other) {\n\t\treturn true;\n\t} else if (!(other instanceof OR)) {\n\t\treturn false;\n\t} else {\n\t\treturn this.opnds === other.opnds;\n\t}\n};\n\nOR.prototype.updateHashCode = function(hash) {\n hash.update(this.opnds, \"OR\");\n};\n\n//

\n// The evaluation of predicates by this context is short-circuiting, but\n// unordered.

\n//\nOR.prototype.evaluate = function(parser, outerContext) {\n\tfor (var i = 0; i < this.opnds.length; i++) {\n\t\tif (this.opnds[i].evaluate(parser, outerContext)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\nOR.prototype.evalPrecedence = function(parser, outerContext) {\n\tvar differs = false;\n\tvar operands = [];\n\tfor (var i = 0; i < this.opnds.length; i++) {\n\t\tvar context = this.opnds[i];\n\t\tvar evaluated = context.evalPrecedence(parser, outerContext);\n\t\tdiffers |= (evaluated !== context);\n\t\tif (evaluated === SemanticContext.NONE) {\n\t\t\t// The OR context is true if any element is true\n\t\t\treturn SemanticContext.NONE;\n\t\t} else if (evaluated !== null) {\n\t\t\t// Reduce the result by skipping false elements\n\t\t\toperands.push(evaluated);\n\t\t}\n\t}\n\tif (!differs) {\n\t\treturn this;\n\t}\n\tif (operands.length === 0) {\n\t\t// all elements were false, so the OR context is false\n\t\treturn null;\n\t}\n\tvar result = null;\n\toperands.map(function(o) {\n\t\treturn result === null ? o : SemanticContext.orContext(result, o);\n\t});\n\treturn result;\n};\n\nOR.prototype.toString = function() {\n\tvar s = \"\";\n\tthis.opnds.map(function(o) {\n\t\ts += \"|| \" + o.toString();\n\t});\n\treturn s.length > 3 ? s.slice(3) : s;\n};\n\nexports.SemanticContext = SemanticContext;\nexports.PrecedencePredicate = PrecedencePredicate;\nexports.Predicate = Predicate;\n","//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n///\n\nvar ATNConfigSet = require('./../atn/ATNConfigSet').ATNConfigSet;\nvar Utils = require('./../Utils');\nvar Hash = Utils.Hash;\nvar Set = Utils.Set;\n\n// Map a predicate to a predicted alternative.///\n\nfunction PredPrediction(pred, alt) {\n\tthis.alt = alt;\n\tthis.pred = pred;\n\treturn this;\n}\n\nPredPrediction.prototype.toString = function() {\n\treturn \"(\" + this.pred + \", \" + this.alt + \")\";\n};\n\n// A DFA state represents a set of possible ATN configurations.\n// As Aho, Sethi, Ullman p. 117 says \"The DFA uses its state\n// to keep track of all possible states the ATN can be in after\n// reading each input symbol. That is to say, after reading\n// input a1a2..an, the DFA is in a state that represents the\n// subset T of the states of the ATN that are reachable from the\n// ATN's start state along some path labeled a1a2..an.\"\n// In conventional NFA→DFA conversion, therefore, the subset T\n// would be a bitset representing the set of states the\n// ATN could be in. We need to track the alt predicted by each\n// state as well, however. More importantly, we need to maintain\n// a stack of states, tracking the closure operations as they\n// jump from rule to rule, emulating rule invocations (method calls).\n// I have to add a stack to simulate the proper lookahead sequences for\n// the underlying LL grammar from which the ATN was derived.\n//\n//

I use a set of ATNConfig objects not simple states. An ATNConfig\n// is both a state (ala normal conversion) and a RuleContext describing\n// the chain of rules (if any) followed to arrive at that state.

\n//\n//

A DFA state may have multiple references to a particular state,\n// but with different ATN contexts (with same or different alts)\n// meaning that state was reached via a different set of rule invocations.

\n// /\n\nfunction DFAState(stateNumber, configs) {\n\tif (stateNumber === null) {\n\t\tstateNumber = -1;\n\t}\n\tif (configs === null) {\n\t\tconfigs = new ATNConfigSet();\n\t}\n\tthis.stateNumber = stateNumber;\n\tthis.configs = configs;\n\t// {@code edges[symbol]} points to target of symbol. Shift up by 1 so (-1)\n\t// {@link Token//EOF} maps to {@code edges[0]}.\n\tthis.edges = null;\n\tthis.isAcceptState = false;\n\t// if accept state, what ttype do we match or alt do we predict?\n\t// This is set to {@link ATN//INVALID_ALT_NUMBER} when {@link\n\t// //predicates}{@code !=null} or\n\t// {@link //requiresFullContext}.\n\tthis.prediction = 0;\n\tthis.lexerActionExecutor = null;\n\t// Indicates that this state was created during SLL prediction that\n\t// discovered a conflict between the configurations in the state. Future\n\t// {@link ParserATNSimulator//execATN} invocations immediately jumped doing\n\t// full context prediction if this field is true.\n\tthis.requiresFullContext = false;\n\t// During SLL parsing, this is a list of predicates associated with the\n\t// ATN configurations of the DFA state. When we have predicates,\n\t// {@link //requiresFullContext} is {@code false} since full context\n\t// prediction evaluates predicates\n\t// on-the-fly. If this is not null, then {@link //prediction} is\n\t// {@link ATN//INVALID_ALT_NUMBER}.\n\t//\n\t//

We only use these for non-{@link //requiresFullContext} but\n\t// conflicting states. That\n\t// means we know from the context (it's $ or we don't dip into outer\n\t// context) that it's an ambiguity not a conflict.

\n\t//\n\t//

This list is computed by {@link\n\t// ParserATNSimulator//predicateDFAState}.

\n\tthis.predicates = null;\n\treturn this;\n}\n\n// Get the set of all alts mentioned by all ATN configurations in this\n// DFA state.\nDFAState.prototype.getAltSet = function() {\n\tvar alts = new Set();\n\tif (this.configs !== null) {\n\t\tfor (var i = 0; i < this.configs.length; i++) {\n\t\t\tvar c = this.configs[i];\n\t\t\talts.add(c.alt);\n\t\t}\n\t}\n\tif (alts.length === 0) {\n\t\treturn null;\n\t} else {\n\t\treturn alts;\n\t}\n};\n\n// Two {@link DFAState} instances are equal if their ATN configuration sets\n// are the same. This method is used to see if a state already exists.\n//\n//

Because the number of alternatives and number of ATN configurations are\n// finite, there is a finite number of DFA states that can be processed.\n// This is necessary to show that the algorithm terminates.

\n//\n//

Cannot test the DFA state numbers here because in\n// {@link ParserATNSimulator//addDFAState} we need to know if any other state\n// exists that has this exact set of ATN configurations. The\n// {@link //stateNumber} is irrelevant.

\nDFAState.prototype.equals = function(other) {\n\t// compare set of ATN configurations in this set with other\n\treturn this === other ||\n\t\t\t(other instanceof DFAState &&\n\t\t\t\tthis.configs.equals(other.configs));\n};\n\nDFAState.prototype.toString = function() {\n\tvar s = \"\" + this.stateNumber + \":\" + this.configs;\n\tif(this.isAcceptState) {\n s = s + \"=>\";\n if (this.predicates !== null)\n s = s + this.predicates;\n else\n s = s + this.prediction;\n }\n\treturn s;\n};\n\nDFAState.prototype.hashCode = function() {\n\tvar hash = new Hash();\n\thash.update(this.configs);\n\tif(this.isAcceptState) {\n if (this.predicates !== null)\n hash.update(this.predicates);\n else\n hash.update(this.prediction);\n }\n return hash.finish();\n};\n\nexports.DFAState = DFAState;\nexports.PredPrediction = PredPrediction;\n","// This file holds utility functions used in implementing the public functions.\n\nvar util = {};\n\n/**\n * Reports and error to the calling environment and stops processing.\n * @param message the error message\n * @param fnName the name of the function raising the error (optional)\n */\nutil.raiseError = function(message, fnName) {\n fnName = fnName ? fnName + \": \" : \"\";\n throw fnName + message;\n};\n\n/**\n * Throws an exception if the collection contains more than one value.\n * @param collection the collection to be checked.\n * @param errorMsgPrefix An optional prefix for the error message to assist in\n * debugging.\n */\nutil.assertAtMostOne = function (collection, errorMsgPrefix) {\n if (collection.length > 1) {\n util.raiseError(\"Was expecting no more than one element but got \" +\n JSON.stringify(collection), errorMsgPrefix);\n }\n};\n\n/**\n * Throws an exception if the data is not one of the expected types.\n * @param data the value to be checked\n * @param types an array of the permitted types\n * @param errorMsgPrefix An optional prefix for the error message to assist in\n * debugging.\n */\nutil.assertType = function(data, types, errorMsgPrefix) {\n if (types.indexOf(typeof data) < 0) {\n let typeList = types.length > 1 ? \"one of \"+types.join(\", \") : types[0];\n util.raiseError(\"Found type '\"+(typeof data)+\"' but was expecting \" +\n typeList, errorMsgPrefix);\n }\n};\n\nutil.isEmpty = function(x){\n return Array.isArray(x) && x.length == 0;\n};\n\nutil.isSome = function(x){\n return x !== null && x !== undefined && !util.isEmpty(x);\n};\n\nutil.isTrue = function(x){\n return x !== null && x !== undefined && (x === true || (x.length == 1 && x[0] === true));\n};\n\nutil.isFalse = function(x){\n return x !== null && x !== undefined && (x === false || (x.length == 1 && x[0] === false));\n};\n\nutil.isCapitalized = function(x){\n return x && (x[0] === x[0].toUpperCase());\n};\n\nutil.flatten = function(x){\n return x.reduce(function(acc, x) {\n if(Array.isArray(x)){\n // todo replace with array modification\n acc = acc.concat(x);\n } else {\n acc.push(x);\n }\n return acc;\n }, []);\n};\n\nutil.arraify = function(x){\n if(Array.isArray(x)){ return x; }\n if(util.isSome(x)){ return [x]; }\n return [];\n};\n\nmodule.exports = util;\n","/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\nexports.atn = require('./atn/index');\nexports.codepointat = require('./polyfills/codepointat');\nexports.dfa = require('./dfa/index');\nexports.fromcodepoint = require('./polyfills/fromcodepoint');\nexports.tree = require('./tree/index');\nexports.error = require('./error/index');\nexports.Token = require('./Token').Token;\nexports.CharStreams = require('./CharStreams').CharStreams;\nexports.CommonToken = require('./Token').CommonToken;\nexports.InputStream = require('./InputStream').InputStream;\nexports.FileStream = require('./FileStream').FileStream;\nexports.CommonTokenStream = require('./CommonTokenStream').CommonTokenStream;\nexports.Lexer = require('./Lexer').Lexer;\nexports.Parser = require('./Parser').Parser;\nvar pc = require('./PredictionContext');\nexports.PredictionContextCache = pc.PredictionContextCache;\nexports.ParserRuleContext = require('./ParserRuleContext').ParserRuleContext;\nexports.Interval = require('./IntervalSet').Interval;\nexports.Utils = require('./Utils');\n","//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n///\n\n// A tuple: (ATN state, predicted alt, syntactic, semantic context).\n// The syntactic context is a graph-structured stack node whose\n// path(s) to the root is the rule invocation(s)\n// chain used to arrive at the state. The semantic context is\n// the tree of semantic predicates encountered before reaching\n// an ATN state.\n///\n\nvar DecisionState = require('./ATNState').DecisionState;\nvar SemanticContext = require('./SemanticContext').SemanticContext;\nvar Hash = require(\"../Utils\").Hash;\n\n\nfunction checkParams(params, isCfg) {\n\tif(params===null) {\n\t\tvar result = { state:null, alt:null, context:null, semanticContext:null };\n\t\tif(isCfg) {\n\t\t\tresult.reachesIntoOuterContext = 0;\n\t\t}\n\t\treturn result;\n\t} else {\n\t\tvar props = {};\n\t\tprops.state = params.state || null;\n\t\tprops.alt = (params.alt === undefined) ? null : params.alt;\n\t\tprops.context = params.context || null;\n\t\tprops.semanticContext = params.semanticContext || null;\n\t\tif(isCfg) {\n\t\t\tprops.reachesIntoOuterContext = params.reachesIntoOuterContext || 0;\n\t\t\tprops.precedenceFilterSuppressed = params.precedenceFilterSuppressed || false;\n\t\t}\n\t\treturn props;\n\t}\n}\n\nfunction ATNConfig(params, config) {\n\tthis.checkContext(params, config);\n\tparams = checkParams(params);\n\tconfig = checkParams(config, true);\n // The ATN state associated with this configuration///\n this.state = params.state!==null ? params.state : config.state;\n // What alt (or lexer rule) is predicted by this configuration///\n this.alt = params.alt!==null ? params.alt : config.alt;\n // The stack of invoking states leading to the rule/states associated\n // with this config. We track only those contexts pushed during\n // execution of the ATN simulator.\n this.context = params.context!==null ? params.context : config.context;\n this.semanticContext = params.semanticContext!==null ? params.semanticContext :\n (config.semanticContext!==null ? config.semanticContext : SemanticContext.NONE);\n // We cannot execute predicates dependent upon local context unless\n // we know for sure we are in the correct context. Because there is\n // no way to do this efficiently, we simply cannot evaluate\n // dependent predicates unless we are in the rule that initially\n // invokes the ATN simulator.\n //\n // closure() tracks the depth of how far we dip into the\n // outer context: depth > 0. Note that it may not be totally\n // accurate depth since I don't ever decrement. TODO: make it a boolean then\n this.reachesIntoOuterContext = config.reachesIntoOuterContext;\n this.precedenceFilterSuppressed = config.precedenceFilterSuppressed;\n return this;\n}\n\nATNConfig.prototype.checkContext = function(params, config) {\n\tif((params.context===null || params.context===undefined) &&\n\t\t\t(config===null || config.context===null || config.context===undefined)) {\n\t\tthis.context = null;\n\t}\n};\n\n\nATNConfig.prototype.hashCode = function() {\n var hash = new Hash();\n this.updateHashCode(hash);\n return hash.finish();\n};\n\n\nATNConfig.prototype.updateHashCode = function(hash) {\n hash.update(this.state.stateNumber, this.alt, this.context, this.semanticContext);\n};\n\n// An ATN configuration is equal to another if both have\n// the same state, they predict the same alternative, and\n// syntactic/semantic contexts are the same.\n\nATNConfig.prototype.equals = function(other) {\n if (this === other) {\n return true;\n } else if (! (other instanceof ATNConfig)) {\n return false;\n } else {\n return this.state.stateNumber===other.state.stateNumber &&\n this.alt===other.alt &&\n (this.context===null ? other.context===null : this.context.equals(other.context)) &&\n this.semanticContext.equals(other.semanticContext) &&\n this.precedenceFilterSuppressed===other.precedenceFilterSuppressed;\n }\n};\n\n\nATNConfig.prototype.hashCodeForConfigSet = function() {\n var hash = new Hash();\n hash.update(this.state.stateNumber, this.alt, this.semanticContext);\n return hash.finish();\n};\n\n\nATNConfig.prototype.equalsForConfigSet = function(other) {\n if (this === other) {\n return true;\n } else if (! (other instanceof ATNConfig)) {\n return false;\n } else {\n return this.state.stateNumber===other.state.stateNumber &&\n this.alt===other.alt &&\n this.semanticContext.equals(other.semanticContext);\n }\n};\n\n\nATNConfig.prototype.toString = function() {\n return \"(\" + this.state + \",\" + this.alt +\n (this.context!==null ? \",[\" + this.context.toString() + \"]\" : \"\") +\n (this.semanticContext !== SemanticContext.NONE ?\n (\",\" + this.semanticContext.toString())\n : \"\") +\n (this.reachesIntoOuterContext>0 ?\n (\",up=\" + this.reachesIntoOuterContext)\n : \"\") + \")\";\n};\n\n\nfunction LexerATNConfig(params, config) {\n\tATNConfig.call(this, params, config);\n\n // This is the backing field for {@link //getLexerActionExecutor}.\n\tvar lexerActionExecutor = params.lexerActionExecutor || null;\n this.lexerActionExecutor = lexerActionExecutor || (config!==null ? config.lexerActionExecutor : null);\n this.passedThroughNonGreedyDecision = config!==null ? this.checkNonGreedyDecision(config, this.state) : false;\n return this;\n}\n\nLexerATNConfig.prototype = Object.create(ATNConfig.prototype);\nLexerATNConfig.prototype.constructor = LexerATNConfig;\n\nLexerATNConfig.prototype.updateHashCode = function(hash) {\n hash.update(this.state.stateNumber, this.alt, this.context, this.semanticContext, this.passedThroughNonGreedyDecision, this.lexerActionExecutor);\n};\n\nLexerATNConfig.prototype.equals = function(other) {\n return this === other ||\n (other instanceof LexerATNConfig &&\n this.passedThroughNonGreedyDecision == other.passedThroughNonGreedyDecision &&\n (this.lexerActionExecutor ? this.lexerActionExecutor.equals(other.lexerActionExecutor) : !other.lexerActionExecutor) &&\n ATNConfig.prototype.equals.call(this, other));\n};\n\nLexerATNConfig.prototype.hashCodeForConfigSet = LexerATNConfig.prototype.hashCode;\n\nLexerATNConfig.prototype.equalsForConfigSet = LexerATNConfig.prototype.equals;\n\n\nLexerATNConfig.prototype.checkNonGreedyDecision = function(source, target) {\n return source.passedThroughNonGreedyDecision ||\n (target instanceof DecisionState) && target.nonGreedy;\n};\n\nexports.ATNConfig = ATNConfig;\nexports.LexerATNConfig = LexerATNConfig;","/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n///\n\n// A rule context is a record of a single rule invocation. It knows\n// which context invoked it, if any. If there is no parent context, then\n// naturally the invoking state is not valid. The parent link\n// provides a chain upwards from the current rule invocation to the root\n// of the invocation tree, forming a stack. We actually carry no\n// information about the rule associated with this context (except\n// when parsing). We keep only the state number of the invoking state from\n// the ATN submachine that invoked this. Contrast this with the s\n// pointer inside ParserRuleContext that tracks the current state\n// being \"executed\" for the current rule.\n//\n// The parent contexts are useful for computing lookahead sets and\n// getting error information.\n//\n// These objects are used during parsing and prediction.\n// For the special case of parsers, we use the subclass\n// ParserRuleContext.\n//\n// @see ParserRuleContext\n///\n\nvar RuleNode = require('./tree/Tree').RuleNode;\nvar INVALID_INTERVAL = require('./tree/Tree').INVALID_INTERVAL;\nvar INVALID_ALT_NUMBER = require('./atn/ATN').INVALID_ALT_NUMBER;\n\nfunction RuleContext(parent, invokingState) {\n\tRuleNode.call(this);\n\t// What context invoked this rule?\n\tthis.parentCtx = parent || null;\n\t// What state invoked the rule associated with this context?\n\t// The \"return address\" is the followState of invokingState\n\t// If parent is null, this should be -1.\n\tthis.invokingState = invokingState || -1;\n\treturn this;\n}\n\nRuleContext.prototype = Object.create(RuleNode.prototype);\nRuleContext.prototype.constructor = RuleContext;\n\nRuleContext.prototype.depth = function() {\n\tvar n = 0;\n\tvar p = this;\n\twhile (p !== null) {\n\t\tp = p.parentCtx;\n\t\tn += 1;\n\t}\n\treturn n;\n};\n\n// A context is empty if there is no invoking state; meaning nobody call\n// current context.\nRuleContext.prototype.isEmpty = function() {\n\treturn this.invokingState === -1;\n};\n\n// satisfy the ParseTree / SyntaxTree interface\n\nRuleContext.prototype.getSourceInterval = function() {\n\treturn INVALID_INTERVAL;\n};\n\nRuleContext.prototype.getRuleContext = function() {\n\treturn this;\n};\n\nRuleContext.prototype.getPayload = function() {\n\treturn this;\n};\n\n// Return the combined text of all child nodes. This method only considers\n// tokens which have been added to the parse tree.\n//

\n// Since tokens on hidden channels (e.g. whitespace or comments) are not\n// added to the parse trees, they will not appear in the output of this\n// method.\n// /\nRuleContext.prototype.getText = function() {\n\tif (this.getChildCount() === 0) {\n\t\treturn \"\";\n\t} else {\n\t\treturn this.children.map(function(child) {\n\t\t\treturn child.getText();\n\t\t}).join(\"\");\n\t}\n};\n\n// For rule associated with this parse tree internal node, return\n// the outer alternative number used to match the input. Default\n// implementation does not compute nor store this alt num. Create\n// a subclass of ParserRuleContext with backing field and set\n// option contextSuperClass.\n// to set it.\nRuleContext.prototype.getAltNumber = function() { return INVALID_ALT_NUMBER; }\n\n// Set the outer alternative number for this context node. Default\n// implementation does nothing to avoid backing field overhead for\n// trees that don't need it. Create\n// a subclass of ParserRuleContext with backing field and set\n// option contextSuperClass.\nRuleContext.prototype.setAltNumber = function(altNumber) { }\n\nRuleContext.prototype.getChild = function(i) {\n\treturn null;\n};\n\nRuleContext.prototype.getChildCount = function() {\n\treturn 0;\n};\n\nRuleContext.prototype.accept = function(visitor) {\n\treturn visitor.visitChildren(this);\n};\n\n//need to manage circular dependencies, so export now\nexports.RuleContext = RuleContext;\nvar Trees = require('./tree/Trees').Trees;\n\n\n// Print out a whole tree, not just a node, in LISP format\n// (root child1 .. childN). Print just a node if this is a leaf.\n//\n\nRuleContext.prototype.toStringTree = function(ruleNames, recog) {\n\treturn Trees.toStringTree(this, ruleNames, recog);\n};\n\nRuleContext.prototype.toString = function(ruleNames, stop) {\n\truleNames = ruleNames || null;\n\tstop = stop || null;\n\tvar p = this;\n\tvar s = \"[\";\n\twhile (p !== null && p !== stop) {\n\t\tif (ruleNames === null) {\n\t\t\tif (!p.isEmpty()) {\n\t\t\t\ts += p.invokingState;\n\t\t\t}\n\t\t} else {\n\t\t\tvar ri = p.ruleIndex;\n\t\t\tvar ruleName = (ri >= 0 && ri < ruleNames.length) ? ruleNames[ri]\n\t\t\t\t\t: \"\" + ri;\n\t\t\ts += ruleName;\n\t\t}\n\t\tif (p.parentCtx !== null && (ruleNames !== null || !p.parentCtx.isEmpty())) {\n\t\t\ts += \" \";\n\t\t}\n\t\tp = p.parentCtx;\n\t}\n\ts += \"]\";\n\treturn s;\n};\n\n","/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n///\n\n// A lexer is recognizer that draws input symbols from a character stream.\n// lexer grammars result in a subclass of this object. A Lexer object\n// uses simplified match() and error recovery mechanisms in the interest of speed.\n\nvar Token = require('./Token').Token;\nvar Recognizer = require('./Recognizer').Recognizer;\nvar CommonTokenFactory = require('./CommonTokenFactory').CommonTokenFactory;\nvar RecognitionException = require('./error/Errors').RecognitionException;\nvar LexerNoViableAltException = require('./error/Errors').LexerNoViableAltException;\n\nfunction TokenSource() {\n\treturn this;\n}\n\nfunction Lexer(input) {\n\tRecognizer.call(this);\n\tthis._input = input;\n\tthis._factory = CommonTokenFactory.DEFAULT;\n\tthis._tokenFactorySourcePair = [ this, input ];\n\n\tthis._interp = null; // child classes must populate this\n\n\t// The goal of all lexer rules/methods is to create a token object.\n\t// this is an instance variable as multiple rules may collaborate to\n\t// create a single token. nextToken will return this object after\n\t// matching lexer rule(s). If you subclass to allow multiple token\n\t// emissions, then set this to the last token to be matched or\n\t// something nonnull so that the auto token emit mechanism will not\n\t// emit another token.\n\tthis._token = null;\n\n\t// What character index in the stream did the current token start at?\n\t// Needed, for example, to get the text for current token. Set at\n\t// the start of nextToken.\n\tthis._tokenStartCharIndex = -1;\n\n\t// The line on which the first character of the token resides///\n\tthis._tokenStartLine = -1;\n\n\t// The character position of first character within the line///\n\tthis._tokenStartColumn = -1;\n\n\t// Once we see EOF on char stream, next token will be EOF.\n\t// If you have DONE : EOF ; then you see DONE EOF.\n\tthis._hitEOF = false;\n\n\t// The channel number for the current token///\n\tthis._channel = Token.DEFAULT_CHANNEL;\n\n\t// The token type for the current token///\n\tthis._type = Token.INVALID_TYPE;\n\n\tthis._modeStack = [];\n\tthis._mode = Lexer.DEFAULT_MODE;\n\n\t// You can set the text for the current token to override what is in\n\t// the input char buffer. Use setText() or can set this instance var.\n\t// /\n\tthis._text = null;\n\n\treturn this;\n}\n\nLexer.prototype = Object.create(Recognizer.prototype);\nLexer.prototype.constructor = Lexer;\n\nLexer.DEFAULT_MODE = 0;\nLexer.MORE = -2;\nLexer.SKIP = -3;\n\nLexer.DEFAULT_TOKEN_CHANNEL = Token.DEFAULT_CHANNEL;\nLexer.HIDDEN = Token.HIDDEN_CHANNEL;\nLexer.MIN_CHAR_VALUE = 0x0000;\nLexer.MAX_CHAR_VALUE = 0x10FFFF;\n\nLexer.prototype.reset = function() {\n\t// wack Lexer state variables\n\tif (this._input !== null) {\n\t\tthis._input.seek(0); // rewind the input\n\t}\n\tthis._token = null;\n\tthis._type = Token.INVALID_TYPE;\n\tthis._channel = Token.DEFAULT_CHANNEL;\n\tthis._tokenStartCharIndex = -1;\n\tthis._tokenStartColumn = -1;\n\tthis._tokenStartLine = -1;\n\tthis._text = null;\n\n\tthis._hitEOF = false;\n\tthis._mode = Lexer.DEFAULT_MODE;\n\tthis._modeStack = [];\n\n\tthis._interp.reset();\n};\n\n// Return a token from this source; i.e., match a token on the char stream.\nLexer.prototype.nextToken = function() {\n\tif (this._input === null) {\n\t\tthrow \"nextToken requires a non-null input stream.\";\n\t}\n\n\t// Mark start location in char stream so unbuffered streams are\n\t// guaranteed at least have text of current token\n\tvar tokenStartMarker = this._input.mark();\n\ttry {\n\t\twhile (true) {\n\t\t\tif (this._hitEOF) {\n\t\t\t\tthis.emitEOF();\n\t\t\t\treturn this._token;\n\t\t\t}\n\t\t\tthis._token = null;\n\t\t\tthis._channel = Token.DEFAULT_CHANNEL;\n\t\t\tthis._tokenStartCharIndex = this._input.index;\n\t\t\tthis._tokenStartColumn = this._interp.column;\n\t\t\tthis._tokenStartLine = this._interp.line;\n\t\t\tthis._text = null;\n\t\t\tvar continueOuter = false;\n\t\t\twhile (true) {\n\t\t\t\tthis._type = Token.INVALID_TYPE;\n\t\t\t\tvar ttype = Lexer.SKIP;\n\t\t\t\ttry {\n\t\t\t\t\tttype = this._interp.match(this._input, this._mode);\n\t\t\t\t} catch (e) {\n\t\t\t\t if(e instanceof RecognitionException) {\n this.notifyListeners(e); // report error\n this.recover(e);\n } else {\n console.log(e.stack);\n throw e;\n }\n\t\t\t\t}\n\t\t\t\tif (this._input.LA(1) === Token.EOF) {\n\t\t\t\t\tthis._hitEOF = true;\n\t\t\t\t}\n\t\t\t\tif (this._type === Token.INVALID_TYPE) {\n\t\t\t\t\tthis._type = ttype;\n\t\t\t\t}\n\t\t\t\tif (this._type === Lexer.SKIP) {\n\t\t\t\t\tcontinueOuter = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (this._type !== Lexer.MORE) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (continueOuter) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (this._token === null) {\n\t\t\t\tthis.emit();\n\t\t\t}\n\t\t\treturn this._token;\n\t\t}\n\t} finally {\n\t\t// make sure we release marker after match or\n\t\t// unbuffered char stream will keep buffering\n\t\tthis._input.release(tokenStartMarker);\n\t}\n};\n\n// Instruct the lexer to skip creating a token for current lexer rule\n// and look for another token. nextToken() knows to keep looking when\n// a lexer rule finishes with token set to SKIP_TOKEN. Recall that\n// if token==null at end of any token rule, it creates one for you\n// and emits it.\n// /\nLexer.prototype.skip = function() {\n\tthis._type = Lexer.SKIP;\n};\n\nLexer.prototype.more = function() {\n\tthis._type = Lexer.MORE;\n};\n\nLexer.prototype.mode = function(m) {\n\tthis._mode = m;\n};\n\nLexer.prototype.pushMode = function(m) {\n\tif (this._interp.debug) {\n\t\tconsole.log(\"pushMode \" + m);\n\t}\n\tthis._modeStack.push(this._mode);\n\tthis.mode(m);\n};\n\nLexer.prototype.popMode = function() {\n\tif (this._modeStack.length === 0) {\n\t\tthrow \"Empty Stack\";\n\t}\n\tif (this._interp.debug) {\n\t\tconsole.log(\"popMode back to \" + this._modeStack.slice(0, -1));\n\t}\n\tthis.mode(this._modeStack.pop());\n\treturn this._mode;\n};\n\n// Set the char stream and reset the lexer\nObject.defineProperty(Lexer.prototype, \"inputStream\", {\n\tget : function() {\n\t\treturn this._input;\n\t},\n\tset : function(input) {\n\t\tthis._input = null;\n\t\tthis._tokenFactorySourcePair = [ this, this._input ];\n\t\tthis.reset();\n\t\tthis._input = input;\n\t\tthis._tokenFactorySourcePair = [ this, this._input ];\n\t}\n});\n\nObject.defineProperty(Lexer.prototype, \"sourceName\", {\n\tget : function sourceName() {\n\t\treturn this._input.sourceName;\n\t}\n});\n\n// By default does not support multiple emits per nextToken invocation\n// for efficiency reasons. Subclass and override this method, nextToken,\n// and getToken (to push tokens into a list and pull from that list\n// rather than a single variable as this implementation does).\n// /\nLexer.prototype.emitToken = function(token) {\n\tthis._token = token;\n};\n\n// The standard method called to automatically emit a token at the\n// outermost lexical rule. The token object should point into the\n// char buffer start..stop. If there is a text override in 'text',\n// use that to set the token's text. Override this method to emit\n// custom Token objects or provide a new factory.\n// /\nLexer.prototype.emit = function() {\n\tvar t = this._factory.create(this._tokenFactorySourcePair, this._type,\n\t\t\tthis._text, this._channel, this._tokenStartCharIndex, this\n\t\t\t\t\t.getCharIndex() - 1, this._tokenStartLine,\n\t\t\tthis._tokenStartColumn);\n\tthis.emitToken(t);\n\treturn t;\n};\n\nLexer.prototype.emitEOF = function() {\n\tvar cpos = this.column;\n\tvar lpos = this.line;\n\tvar eof = this._factory.create(this._tokenFactorySourcePair, Token.EOF,\n\t\t\tnull, Token.DEFAULT_CHANNEL, this._input.index,\n\t\t\tthis._input.index - 1, lpos, cpos);\n\tthis.emitToken(eof);\n\treturn eof;\n};\n\nObject.defineProperty(Lexer.prototype, \"type\", {\n\tget : function() {\n\t\treturn this.type;\n\t},\n\tset : function(type) {\n\t\tthis._type = type;\n\t}\n});\n\nObject.defineProperty(Lexer.prototype, \"line\", {\n\tget : function() {\n\t\treturn this._interp.line;\n\t},\n\tset : function(line) {\n\t\tthis._interp.line = line;\n\t}\n});\n\nObject.defineProperty(Lexer.prototype, \"column\", {\n\tget : function() {\n\t\treturn this._interp.column;\n\t},\n\tset : function(column) {\n\t\tthis._interp.column = column;\n\t}\n});\n\n\n// What is the index of the current character of lookahead?///\nLexer.prototype.getCharIndex = function() {\n\treturn this._input.index;\n};\n\n// Return the text matched so far for the current token or any text override.\n//Set the complete text of this token; it wipes any previous changes to the text.\nObject.defineProperty(Lexer.prototype, \"text\", {\n\tget : function() {\n\t\tif (this._text !== null) {\n\t\t\treturn this._text;\n\t\t} else {\n\t\t\treturn this._interp.getText(this._input);\n\t\t}\n\t},\n\tset : function(text) {\n\t\tthis._text = text;\n\t}\n});\n// Return a list of all Token objects in input char stream.\n// Forces load of all tokens. Does not include EOF token.\n// /\nLexer.prototype.getAllTokens = function() {\n\tvar tokens = [];\n\tvar t = this.nextToken();\n\twhile (t.type !== Token.EOF) {\n\t\ttokens.push(t);\n\t\tt = this.nextToken();\n\t}\n\treturn tokens;\n};\n\nLexer.prototype.notifyListeners = function(e) {\n\tvar start = this._tokenStartCharIndex;\n\tvar stop = this._input.index;\n\tvar text = this._input.getText(start, stop);\n\tvar msg = \"token recognition error at: '\" + this.getErrorDisplay(text) + \"'\";\n\tvar listener = this.getErrorListenerDispatch();\n\tlistener.syntaxError(this, null, this._tokenStartLine,\n\t\t\tthis._tokenStartColumn, msg, e);\n};\n\nLexer.prototype.getErrorDisplay = function(s) {\n\tvar d = [];\n\tfor (var i = 0; i < s.length; i++) {\n\t\td.push(s[i]);\n\t}\n\treturn d.join('');\n};\n\nLexer.prototype.getErrorDisplayForChar = function(c) {\n\tif (c.charCodeAt(0) === Token.EOF) {\n\t\treturn \"\";\n\t} else if (c === '\\n') {\n\t\treturn \"\\\\n\";\n\t} else if (c === '\\t') {\n\t\treturn \"\\\\t\";\n\t} else if (c === '\\r') {\n\t\treturn \"\\\\r\";\n\t} else {\n\t\treturn c;\n\t}\n};\n\nLexer.prototype.getCharErrorDisplay = function(c) {\n\treturn \"'\" + this.getErrorDisplayForChar(c) + \"'\";\n};\n\n// Lexers can normally match any char in it's vocabulary after matching\n// a token, so do the easy thing and just kill a character and hope\n// it all works out. You can instead use the rule invocation stack\n// to do sophisticated error recovery if you are in a fragment rule.\n// /\nLexer.prototype.recover = function(re) {\n\tif (this._input.LA(1) !== Token.EOF) {\n\t\tif (re instanceof LexerNoViableAltException) {\n\t\t\t// skip a char and try again\n\t\t\tthis._interp.consume(this._input);\n\t\t} else {\n\t\t\t// TODO: Do we lose character or line position information?\n\t\t\tthis._input.consume();\n\t\t}\n\t}\n};\n\nexports.Lexer = Lexer;\n","//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n\n// Provides an empty default implementation of {@link ANTLRErrorListener}. The\n// default implementation of each method does nothing, but can be overridden as\n// necessary.\n\nfunction ErrorListener() {\n\treturn this;\n}\n\nErrorListener.prototype.syntaxError = function(recognizer, offendingSymbol, line, column, msg, e) {\n};\n\nErrorListener.prototype.reportAmbiguity = function(recognizer, dfa, startIndex, stopIndex, exact, ambigAlts, configs) {\n};\n\nErrorListener.prototype.reportAttemptingFullContext = function(recognizer, dfa, startIndex, stopIndex, conflictingAlts, configs) {\n};\n\nErrorListener.prototype.reportContextSensitivity = function(recognizer, dfa, startIndex, stopIndex, prediction, configs) {\n};\n\nfunction ConsoleErrorListener() {\n\tErrorListener.call(this);\n\treturn this;\n}\n\nConsoleErrorListener.prototype = Object.create(ErrorListener.prototype);\nConsoleErrorListener.prototype.constructor = ConsoleErrorListener;\n\n//\n// Provides a default instance of {@link ConsoleErrorListener}.\n//\nConsoleErrorListener.INSTANCE = new ConsoleErrorListener();\n\n//\n// {@inheritDoc}\n//\n//

\n// This implementation prints messages to {@link System//err} containing the\n// values of {@code line}, {@code charPositionInLine}, and {@code msg} using\n// the following format.

\n//\n//
\n// line line:charPositionInLine msg\n// 
\n//\nConsoleErrorListener.prototype.syntaxError = function(recognizer, offendingSymbol, line, column, msg, e) {\n console.error(\"line \" + line + \":\" + column + \" \" + msg);\n};\n\nfunction ProxyErrorListener(delegates) {\n\tErrorListener.call(this);\n if (delegates===null) {\n throw \"delegates\";\n }\n this.delegates = delegates;\n\treturn this;\n}\n\nProxyErrorListener.prototype = Object.create(ErrorListener.prototype);\nProxyErrorListener.prototype.constructor = ProxyErrorListener;\n\nProxyErrorListener.prototype.syntaxError = function(recognizer, offendingSymbol, line, column, msg, e) {\n this.delegates.map(function(d) { d.syntaxError(recognizer, offendingSymbol, line, column, msg, e); });\n};\n\nProxyErrorListener.prototype.reportAmbiguity = function(recognizer, dfa, startIndex, stopIndex, exact, ambigAlts, configs) {\n this.delegates.map(function(d) { d.reportAmbiguity(recognizer, dfa, startIndex, stopIndex, exact, ambigAlts, configs); });\n};\n\nProxyErrorListener.prototype.reportAttemptingFullContext = function(recognizer, dfa, startIndex, stopIndex, conflictingAlts, configs) {\n\tthis.delegates.map(function(d) { d.reportAttemptingFullContext(recognizer, dfa, startIndex, stopIndex, conflictingAlts, configs); });\n};\n\nProxyErrorListener.prototype.reportContextSensitivity = function(recognizer, dfa, startIndex, stopIndex, prediction, configs) {\n\tthis.delegates.map(function(d) { d.reportContextSensitivity(recognizer, dfa, startIndex, stopIndex, prediction, configs); });\n};\n\nexports.ErrorListener = ErrorListener;\nexports.ConsoleErrorListener = ConsoleErrorListener;\nexports.ProxyErrorListener = ProxyErrorListener;\n\n","/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n\n// A DFA walker that knows how to dump them to serialized strings.#/\n\n\nfunction DFASerializer(dfa, literalNames, symbolicNames) {\n\tthis.dfa = dfa;\n\tthis.literalNames = literalNames || [];\n\tthis.symbolicNames = symbolicNames || [];\n\treturn this;\n}\n\nDFASerializer.prototype.toString = function() {\n if(this.dfa.s0 === null) {\n return null;\n }\n var buf = \"\";\n var states = this.dfa.sortedStates();\n for(var i=0;i\");\n buf = buf.concat(this.getStateString(t));\n buf = buf.concat('\\n');\n }\n }\n }\n }\n return buf.length===0 ? null : buf;\n};\n\nDFASerializer.prototype.getEdgeLabel = function(i) {\n if (i===0) {\n return \"EOF\";\n } else if(this.literalNames !==null || this.symbolicNames!==null) {\n return this.literalNames[i-1] || this.symbolicNames[i-1];\n } else {\n return String.fromCharCode(i-1);\n }\n};\n\nDFASerializer.prototype.getStateString = function(s) {\n var baseStateStr = ( s.isAcceptState ? \":\" : \"\") + \"s\" + s.stateNumber + ( s.requiresFullContext ? \"^\" : \"\");\n if(s.isAcceptState) {\n if (s.predicates !== null) {\n return baseStateStr + \"=>\" + s.predicates.toString();\n } else {\n return baseStateStr + \"=>\" + s.prediction.toString();\n }\n } else {\n return baseStateStr;\n }\n};\n\nfunction LexerDFASerializer(dfa) {\n\tDFASerializer.call(this, dfa, null);\n\treturn this;\n}\n\nLexerDFASerializer.prototype = Object.create(DFASerializer.prototype);\nLexerDFASerializer.prototype.constructor = LexerDFASerializer;\n\nLexerDFASerializer.prototype.getEdgeLabel = function(i) {\n\treturn \"'\" + String.fromCharCode(i) + \"'\";\n};\n\nexports.DFASerializer = DFASerializer;\nexports.LexerDFASerializer = LexerDFASerializer;\n\n","/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n\n//* A rule invocation record for parsing.\n//\n// Contains all of the information about the current rule not stored in the\n// RuleContext. It handles parse tree children list, Any ATN state\n// tracing, and the default values available for rule indications:\n// start, stop, rule index, current alt number, current\n// ATN state.\n//\n// Subclasses made for each rule and grammar track the parameters,\n// return values, locals, and labels specific to that rule. These\n// are the objects that are returned from rules.\n//\n// Note text is not an actual field of a rule return value; it is computed\n// from start and stop using the input stream's toString() method. I\n// could add a ctor to this so that we can pass in and store the input\n// stream, but I'm not sure we want to do that. It would seem to be undefined\n// to get the .text property anyway if the rule matches tokens from multiple\n// input streams.\n//\n// I do not use getters for fields of objects that are used simply to\n// group values such as this aggregate. The getters/setters are there to\n// satisfy the superclass interface.\n\nvar RuleContext = require('./RuleContext').RuleContext;\nvar Tree = require('./tree/Tree');\nvar INVALID_INTERVAL = Tree.INVALID_INTERVAL;\nvar TerminalNode = Tree.TerminalNode;\nvar TerminalNodeImpl = Tree.TerminalNodeImpl;\nvar ErrorNodeImpl = Tree.ErrorNodeImpl;\nvar Interval = require(\"./IntervalSet\").Interval;\n\nfunction ParserRuleContext(parent, invokingStateNumber) {\n\tparent = parent || null;\n\tinvokingStateNumber = invokingStateNumber || null;\n\tRuleContext.call(this, parent, invokingStateNumber);\n\tthis.ruleIndex = -1;\n // * If we are debugging or building a parse tree for a visitor,\n // we need to track all of the tokens and rule invocations associated\n // with this rule's context. This is empty for parsing w/o tree constr.\n // operation because we don't the need to track the details about\n // how we parse this rule.\n // /\n this.children = null;\n this.start = null;\n this.stop = null;\n // The exception that forced this rule to return. If the rule successfully\n // completed, this is {@code null}.\n this.exception = null;\n}\n\nParserRuleContext.prototype = Object.create(RuleContext.prototype);\nParserRuleContext.prototype.constructor = ParserRuleContext;\n\n// * COPY a ctx (I'm deliberately not using copy constructor)///\nParserRuleContext.prototype.copyFrom = function(ctx) {\n // from RuleContext\n this.parentCtx = ctx.parentCtx;\n this.invokingState = ctx.invokingState;\n this.children = null;\n this.start = ctx.start;\n this.stop = ctx.stop;\n // copy any error nodes to alt label node\n if(ctx.children) {\n this.children = [];\n // reset parent pointer for any error nodes\n \tctx.children.map(function(child) {\n \t\tif (child instanceof ErrorNodeImpl) {\n this.children.push(child);\n child.parentCtx = this;\n }\n\t\t}, this);\n\t}\n};\n\n// Double dispatch methods for listeners\nParserRuleContext.prototype.enterRule = function(listener) {\n};\n\nParserRuleContext.prototype.exitRule = function(listener) {\n};\n\n// * Does not set parent link; other add methods do that///\nParserRuleContext.prototype.addChild = function(child) {\n if (this.children === null) {\n this.children = [];\n }\n this.children.push(child);\n return child;\n};\n\n// * Used by enterOuterAlt to toss out a RuleContext previously added as\n// we entered a rule. If we have // label, we will need to remove\n// generic ruleContext object.\n// /\nParserRuleContext.prototype.removeLastChild = function() {\n if (this.children !== null) {\n this.children.pop();\n }\n};\n\nParserRuleContext.prototype.addTokenNode = function(token) {\n var node = new TerminalNodeImpl(token);\n this.addChild(node);\n node.parentCtx = this;\n return node;\n};\n\nParserRuleContext.prototype.addErrorNode = function(badToken) {\n var node = new ErrorNodeImpl(badToken);\n this.addChild(node);\n node.parentCtx = this;\n return node;\n};\n\nParserRuleContext.prototype.getChild = function(i, type) {\n\ttype = type || null;\n\tif (this.children === null || i < 0 || i >= this.children.length) {\n\t\treturn null;\n\t}\n\tif (type === null) {\n\t\treturn this.children[i];\n\t} else {\n\t\tfor(var j=0; j= this.children.length) {\n\t\treturn null;\n\t}\n\tfor(var j=0; j\";\n\tthis.strdata = data;\n\tthis.decodeToUnicodeCodePoints = decodeToUnicodeCodePoints || false;\n\t_loadString(this);\n\treturn this;\n}\n\nObject.defineProperty(InputStream.prototype, \"index\", {\n\tget : function() {\n\t\treturn this._index;\n\t}\n});\n\nObject.defineProperty(InputStream.prototype, \"size\", {\n\tget : function() {\n\t\treturn this._size;\n\t}\n});\n\n// Reset the stream so that it's in the same state it was\n// when the object was created *except* the data array is not\n// touched.\n//\nInputStream.prototype.reset = function() {\n\tthis._index = 0;\n};\n\nInputStream.prototype.consume = function() {\n\tif (this._index >= this._size) {\n\t\t// assert this.LA(1) == Token.EOF\n\t\tthrow (\"cannot consume EOF\");\n\t}\n\tthis._index += 1;\n};\n\nInputStream.prototype.LA = function(offset) {\n\tif (offset === 0) {\n\t\treturn 0; // undefined\n\t}\n\tif (offset < 0) {\n\t\toffset += 1; // e.g., translate LA(-1) to use offset=0\n\t}\n\tvar pos = this._index + offset - 1;\n\tif (pos < 0 || pos >= this._size) { // invalid\n\t\treturn Token.EOF;\n\t}\n\treturn this.data[pos];\n};\n\nInputStream.prototype.LT = function(offset) {\n\treturn this.LA(offset);\n};\n\n// mark/release do nothing; we have entire buffer\nInputStream.prototype.mark = function() {\n\treturn -1;\n};\n\nInputStream.prototype.release = function(marker) {\n};\n\n// consume() ahead until p==_index; can't just set p=_index as we must\n// update line and column. If we seek backwards, just set p\n//\nInputStream.prototype.seek = function(_index) {\n\tif (_index <= this._index) {\n\t\tthis._index = _index; // just jump; don't update stream state (line,\n\t\t\t\t\t\t\t\t// ...)\n\t\treturn;\n\t}\n\t// seek forward\n\tthis._index = Math.min(_index, this._size);\n};\n\nInputStream.prototype.getText = function(start, stop) {\n\tif (stop >= this._size) {\n\t\tstop = this._size - 1;\n\t}\n\tif (start >= this._size) {\n\t\treturn \"\";\n\t} else {\n\t\tif (this.decodeToUnicodeCodePoints) {\n\t\t\tvar result = \"\";\n\t\t\tfor (var i = start; i <= stop; i++) {\n\t\t\t\tresult += String.fromCodePoint(this.data[i]);\n\t\t\t}\n\t\t\treturn result;\n\t\t} else {\n\t\t\treturn this.strdata.slice(start, stop + 1);\n\t\t}\n\t}\n};\n\nInputStream.prototype.toString = function() {\n\treturn this.strdata;\n};\n\nexports.InputStream = InputStream;\n","const fhirpath = require('fhirpath');\nconst _ = require('lodash');\n// embdedded function to inspect the results of fhir path calls to tell if something\n// returned an object or 'true'. This is used to wrap the filter/ignore/exclude\n// functions to dtermin the truthyness of the fhir path calls\nlet isTrue = (arg) => {\n if (Array.isArray(arg) ){\n return arg.find(i => isTrue(i));\n } else if (typeof arg === 'object'){\n return !_.isEmpty(arg);\n } else if (typeof arg === 'string' && arg === 'false'){\n return false;\n }\n return arg;\n};\n\n// function to build the exec methods for FilterMappers. The exec function modifies\n// the resource. If the value is a string it will try to require the function else {\n// if it is a function it will simply pass back the value of the argument.\n\nlet buildProcessor = (arg) => {\n let processor = null;\n switch (typeof arg) {\n case 'string':\n processor = require(arg);\n break;\n case 'function':\n processor = arg;\n break;\n }\n return processor;\n};\n\n// build a filter for use in the filter/ingnore/exclude operations\n// the filter may be a string or a function. If it is a string it is treated as\n// a fhirpath expression and a filtering function will be built around that expression.\n// if it is a function then it will simply be returned.\nlet buildFilter = (arg, context = {}) => {\n // if string create a filter out of it\n if (Array.isArray(arg)){\n let filters = arg.map( f => buildFilter(f));\n return (resource) => {return filters.find( filter => isTrue(filter(resource)));};\n }\n let filter = null;\n switch (typeof arg) {\n case 'string': {\n let path = fhirpath.compile(arg, context);\n filter = (resource) => isTrue(path(resource));\n break;}\n case 'function':{\n filter = arg;\n break;}\n }\n return filter;\n};\n\n// Build mappers from the arguments that are passed in. If the args are null/undefined\n// return an empty array.\n// if the args are an array return an array of mappers\n// if the args are an object that represent either an aggregate or filter mapper\n// create one and return it\n// if the args are a json object with string: object mappings treate the strings as\n// potential filters and or descriptions of the mapper and return an aggregate or filter\n// mapper depending on the rest of the attributes in the json object.\nlet buildMappers = (args, context = {}) =>{\n if (!args) {return [];}\n // if the args are an array build an array of mappers to return\n if (Array.isArray(args)){\n return args.map(m => buildMappers(m, context));\n }\n // if the args are an object and it has a property called mappers\n // treat it like an aggregate mapper else like a filter mapper\n if (args.mappers){\n return new AggregateMapper(args, context);\n } else if (args.exec){\n return new FilterMapper(args, context);\n } else { // treat this like an object mapping of {\"filter\" : {mapping attributes}}\n let mappers = [];\n for (var filter in args){\n let mapper = args[filter];\n if (typeof mapper === 'string'){\n mappers.push(require(mapper));\n } else if (typeof mapper === 'object' && !mapper.constructor.name === 'Object'){\n mappers.push(mapper);\n } else {\n if (!mapper.filter){ mapper.filter = filter;}\n if (!mapper.description){mapper.description = filter;}\n mappers.push(buildMappers(mapper, context));\n }\n }\n return mappers;\n }\n};\n\n// Class to contain other mappers in a heirachy. In oder for the contained\n// mappers to be executed they the filter would have to match for the containing\n// mapper. This class can contain other aggregate mappers.\nclass AggregateMapper {\n\n constructor(args, context = {}){\n this.args = args;\n this.filterFn = buildFilter(args.filter, context);\n this.defaultFn = buildProcessor(args.default);\n this.ignoreFn = buildFilter(args.ignore, context);\n this.excludeFn = buildFilter(args.exclude, context);\n this.mappers = buildMappers(args.mappers, context);\n }\n\n // if an ignore filter was provided execute it on the resource otherwise\n // return false\n ignore(resource, context){\n return this.ignoreFn ? this.ignoreFn(resource, context) : false;\n }\n\n // if an exclude filter was provided execute it on the resource otherwise return false\n exclude(resource, context){\n return this.excludeFn ? this.excludeFn(resource, context) : false;\n }\n\n // if a default function was provided execute that function on the resource otherwise\n // return the resource as is\n default(resource, context){\n return this.defaultFn ? this.defaultFn(resource, context) : resource;\n }\n\n // if a filter was provided execute that on the resource otherwise\n // return false\n filter(resource, context){\n return (this.filterFn) ? this.filterFn(resource, context) : false;\n }\n\n // This method executes the aggregate filters. There is a set order of operations\n // for this method on a resource or set of resources passed in.\n // ignore the resource if it returns true from the ignore function or does not pass the filter\n // return null if the resource matches the exclude method\n // if the resource matches a mapper that this aggregate mapper contains apply that mapper\n // if the resource does not match a contained mapper run the default function on the resource\n //\n execute(resource, context){\n if (Array.isArray(resource)){\n return resource.map( r => this.execute(r, context)).filter(n => n);\n } else if (resource.resourceType === 'Bundle') {\n resource.entry = resource.entry.map(e => {\n return {\n fullUrl: e.fullUrl,\n resource: this.execute(e.resource, context)\n };\n });\n return resource;\n } else {\n if (this.ignore(resource, context) || !this.filter(resource, context)){return resource;}\n if (this.exclude(resource, context)){return null;}\n let mapper = this.mappers.find(map => map.filter(resource, context));\n if (mapper){\n return mapper.execute(resource, context);\n } else {\n return this.default(resource, context);\n }\n }\n }\n}\n\n// Mapper that does the actual work of modifying a reasource. These are the leaf\n// nodes of aggregate mappers. The class contains a filter that must be matched by the\n// aggregate mapper and an exec function that will modify the resource.\nclass FilterMapper {\n\n constructor(args, context){\n this.args = args;\n this.filterFn = buildFilter(args.filter, context);\n this.execfn = buildProcessor(args.exec);\n }\n\n // if a filter was provided execute that function on the resource otherwise\n // return false\n filter(resource, context){\n return (this.filterFn) ? this.filterFn(resource, context) : false;\n }\n\n execute(resource, context){\n if (Array.isArray(resource)){\n return resource.map( r => this.execute(r, context)).filter(n => n);\n }\n return this.execfn(resource, context);\n }\n}\n\nmodule.exports = {\n AggregateMapper,\n FilterMapper,\n buildFilter,\n buildMappers\n};\n","/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n\nvar Utils = require('./../Utils');\nvar Token = require('./../Token').Token;\nvar RuleNode = require('./Tree').RuleNode;\nvar ErrorNode = require('./Tree').ErrorNode;\nvar TerminalNode = require('./Tree').TerminalNode;\nvar ParserRuleContext = require('./../ParserRuleContext').ParserRuleContext;\nvar RuleContext = require('./../RuleContext').RuleContext;\nvar INVALID_ALT_NUMBER = require('./../atn/ATN').INVALID_ALT_NUMBER;\n\n\n/** A set of utility routines useful for all kinds of ANTLR trees. */\nfunction Trees() {\n}\n\n// Print out a whole tree in LISP form. {@link //getNodeText} is used on the\n// node payloads to get the text for the nodes. Detect\n// parse trees and extract data appropriately.\nTrees.toStringTree = function(tree, ruleNames, recog) {\n\truleNames = ruleNames || null;\n\trecog = recog || null;\n if(recog!==null) {\n ruleNames = recog.ruleNames;\n }\n var s = Trees.getNodeText(tree, ruleNames);\n s = Utils.escapeWhitespace(s, false);\n var c = tree.getChildCount();\n if(c===0) {\n return s;\n }\n var res = \"(\" + s + ' ';\n if(c>0) {\n s = Trees.toStringTree(tree.getChild(0), ruleNames);\n res = res.concat(s);\n }\n for(var i=1;i= idx1;\n};\n\nATNDeserializer.prototype.deserialize = function(data) {\n this.reset(data);\n this.checkVersion();\n this.checkUUID();\n var atn = this.readATN();\n this.readStates(atn);\n this.readRules(atn);\n this.readModes(atn);\n var sets = [];\n // First, deserialize sets with 16-bit arguments <= U+FFFF.\n this.readSets(atn, sets, this.readInt.bind(this));\n // Next, if the ATN was serialized with the Unicode SMP feature,\n // deserialize sets with 32-bit arguments <= U+10FFFF.\n if (this.isFeatureSupported(ADDED_UNICODE_SMP, this.uuid)) {\n this.readSets(atn, sets, this.readInt32.bind(this));\n }\n this.readEdges(atn, sets);\n this.readDecisions(atn);\n this.readLexerActions(atn);\n this.markPrecedenceDecisions(atn);\n this.verifyATN(atn);\n if (this.deserializationOptions.generateRuleBypassTransitions && atn.grammarType === ATNType.PARSER ) {\n this.generateRuleBypassTransitions(atn);\n // re-verify after modification\n this.verifyATN(atn);\n }\n return atn;\n};\n\nATNDeserializer.prototype.reset = function(data) {\n\tvar adjust = function(c) {\n var v = c.charCodeAt(0);\n return v>1 ? v-2 : v + 65533;\n\t};\n var temp = data.split(\"\").map(adjust);\n // don't adjust the first value since that's the version number\n temp[0] = data.charCodeAt(0);\n this.data = temp;\n this.pos = 0;\n};\n\nATNDeserializer.prototype.checkVersion = function() {\n var version = this.readInt();\n if ( version !== SERIALIZED_VERSION ) {\n throw (\"Could not deserialize ATN with version \" + version + \" (expected \" + SERIALIZED_VERSION + \").\");\n }\n};\n\nATNDeserializer.prototype.checkUUID = function() {\n var uuid = this.readUUID();\n if (SUPPORTED_UUIDS.indexOf(uuid)<0) {\n throw (\"Could not deserialize ATN with UUID: \" + uuid +\n \" (expected \" + SERIALIZED_UUID + \" or a legacy UUID).\", uuid, SERIALIZED_UUID);\n }\n this.uuid = uuid;\n};\n\nATNDeserializer.prototype.readATN = function() {\n var grammarType = this.readInt();\n var maxTokenType = this.readInt();\n return new ATN(grammarType, maxTokenType);\n};\n\nATNDeserializer.prototype.readStates = function(atn) {\n\tvar j, pair, stateNumber;\n var loopBackStateNumbers = [];\n var endStateNumbers = [];\n var nstates = this.readInt();\n for(var i=0; i 0) {\n bypassStart.addTransition(ruleToStartState.transitions[count-1]);\n ruleToStartState.transitions = ruleToStartState.transitions.slice(-1);\n }\n // link the new states\n atn.ruleToStartState[idx].addTransition(new EpsilonTransition(bypassStart));\n bypassStop.addTransition(new EpsilonTransition(endState));\n\n var matchState = new BasicState();\n atn.addState(matchState);\n matchState.addTransition(new AtomTransition(bypassStop, atn.ruleToTokenType[idx]));\n bypassStart.addTransition(new EpsilonTransition(matchState));\n};\n\nATNDeserializer.prototype.stateIsEndStateFor = function(state, idx) {\n if ( state.ruleIndex !== idx) {\n return null;\n }\n if (!( state instanceof StarLoopEntryState)) {\n return null;\n }\n var maybeLoopEndState = state.transitions[state.transitions.length - 1].target;\n if (!( maybeLoopEndState instanceof LoopEndState)) {\n return null;\n }\n if (maybeLoopEndState.epsilonOnlyTransitions &&\n (maybeLoopEndState.transitions[0].target instanceof RuleStopState)) {\n return state;\n } else {\n return null;\n }\n};\n\n//\n// Analyze the {@link StarLoopEntryState} states in the specified ATN to set\n// the {@link StarLoopEntryState//isPrecedenceDecision} field to the\n// correct value.\n//\n// @param atn The ATN.\n//\nATNDeserializer.prototype.markPrecedenceDecisions = function(atn) {\n\tfor(var i=0; i= 0);\n } else {\n this.checkCondition(state.transitions.length <= 1 || (state instanceof RuleStopState));\n }\n\t}\n};\n\nATNDeserializer.prototype.checkCondition = function(condition, message) {\n if (!condition) {\n if (message === undefined || message===null) {\n message = \"IllegalState\";\n }\n throw (message);\n }\n};\n\nATNDeserializer.prototype.readInt = function() {\n return this.data[this.pos++];\n};\n\nATNDeserializer.prototype.readInt32 = function() {\n var low = this.readInt();\n var high = this.readInt();\n return low | (high << 16);\n};\n\nATNDeserializer.prototype.readLong = function() {\n var low = this.readInt32();\n var high = this.readInt32();\n return (low & 0x00000000FFFFFFFF) | (high << 32);\n};\n\nfunction createByteToHex() {\n\tvar bth = [];\n\tfor (var i = 0; i < 256; i++) {\n\t\tbth[i] = (i + 0x100).toString(16).substr(1).toUpperCase();\n\t}\n\treturn bth;\n}\n\nvar byteToHex = createByteToHex();\n\nATNDeserializer.prototype.readUUID = function() {\n\tvar bb = [];\n\tfor(var i=7;i>=0;i--) {\n\t\tvar int = this.readInt();\n\t\t/* jshint bitwise: false */\n\t\tbb[(2*i)+1] = int & 0xFF;\n\t\tbb[2*i] = (int >> 8) & 0xFF;\n\t}\n return byteToHex[bb[0]] + byteToHex[bb[1]] +\n byteToHex[bb[2]] + byteToHex[bb[3]] + '-' +\n byteToHex[bb[4]] + byteToHex[bb[5]] + '-' +\n byteToHex[bb[6]] + byteToHex[bb[7]] + '-' +\n byteToHex[bb[8]] + byteToHex[bb[9]] + '-' +\n byteToHex[bb[10]] + byteToHex[bb[11]] +\n byteToHex[bb[12]] + byteToHex[bb[13]] +\n byteToHex[bb[14]] + byteToHex[bb[15]];\n};\n\nATNDeserializer.prototype.edgeFactory = function(atn, type, src, trg, arg1, arg2, arg3, sets) {\n var target = atn.states[trg];\n switch(type) {\n case Transition.EPSILON:\n return new EpsilonTransition(target);\n case Transition.RANGE:\n return arg3 !== 0 ? new RangeTransition(target, Token.EOF, arg2) : new RangeTransition(target, arg1, arg2);\n case Transition.RULE:\n return new RuleTransition(atn.states[arg1], arg2, arg3, target);\n case Transition.PREDICATE:\n return new PredicateTransition(target, arg1, arg2, arg3 !== 0);\n case Transition.PRECEDENCE:\n return new PrecedencePredicateTransition(target, arg1);\n case Transition.ATOM:\n return arg3 !== 0 ? new AtomTransition(target, Token.EOF) : new AtomTransition(target, arg1);\n case Transition.ACTION:\n return new ActionTransition(target, arg1, arg2, arg3 !== 0);\n case Transition.SET:\n return new SetTransition(target, sets[arg1]);\n case Transition.NOT_SET:\n return new NotSetTransition(target, sets[arg1]);\n case Transition.WILDCARD:\n return new WildcardTransition(target);\n default:\n throw \"The specified transition type: \" + type + \" is not valid.\";\n }\n};\n\nATNDeserializer.prototype.stateFactory = function(type, ruleIndex) {\n if (this.stateFactories === null) {\n var sf = [];\n sf[ATNState.INVALID_TYPE] = null;\n sf[ATNState.BASIC] = function() { return new BasicState(); };\n sf[ATNState.RULE_START] = function() { return new RuleStartState(); };\n sf[ATNState.BLOCK_START] = function() { return new BasicBlockStartState(); };\n sf[ATNState.PLUS_BLOCK_START] = function() { return new PlusBlockStartState(); };\n sf[ATNState.STAR_BLOCK_START] = function() { return new StarBlockStartState(); };\n sf[ATNState.TOKEN_START] = function() { return new TokensStartState(); };\n sf[ATNState.RULE_STOP] = function() { return new RuleStopState(); };\n sf[ATNState.BLOCK_END] = function() { return new BlockEndState(); };\n sf[ATNState.STAR_LOOP_BACK] = function() { return new StarLoopbackState(); };\n sf[ATNState.STAR_LOOP_ENTRY] = function() { return new StarLoopEntryState(); };\n sf[ATNState.PLUS_LOOP_BACK] = function() { return new PlusLoopbackState(); };\n sf[ATNState.LOOP_END] = function() { return new LoopEndState(); };\n this.stateFactories = sf;\n }\n if (type>this.stateFactories.length || this.stateFactories[type] === null) {\n throw(\"The specified state type \" + type + \" is not valid.\");\n } else {\n var s = this.stateFactories[type]();\n if (s!==null) {\n s.ruleIndex = ruleIndex;\n return s;\n }\n }\n};\n\nATNDeserializer.prototype.lexerActionFactory = function(type, data1, data2) {\n if (this.actionFactories === null) {\n var af = [];\n af[LexerActionType.CHANNEL] = function(data1, data2) { return new LexerChannelAction(data1); };\n af[LexerActionType.CUSTOM] = function(data1, data2) { return new LexerCustomAction(data1, data2); };\n af[LexerActionType.MODE] = function(data1, data2) { return new LexerModeAction(data1); };\n af[LexerActionType.MORE] = function(data1, data2) { return LexerMoreAction.INSTANCE; };\n af[LexerActionType.POP_MODE] = function(data1, data2) { return LexerPopModeAction.INSTANCE; };\n af[LexerActionType.PUSH_MODE] = function(data1, data2) { return new LexerPushModeAction(data1); };\n af[LexerActionType.SKIP] = function(data1, data2) { return LexerSkipAction.INSTANCE; };\n af[LexerActionType.TYPE] = function(data1, data2) { return new LexerTypeAction(data1); };\n this.actionFactories = af;\n }\n if (type>this.actionFactories.length || this.actionFactories[type] === null) {\n throw(\"The specified lexer action type \" + type + \" is not valid.\");\n } else {\n return this.actionFactories[type](data1, data2);\n }\n};\n\n\nexports.ATNDeserializer = ATNDeserializer;","/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n\nfunction ATNDeserializationOptions(copyFrom) {\n\tif(copyFrom===undefined) {\n\t\tcopyFrom = null;\n\t}\n\tthis.readOnly = false;\n this.verifyATN = copyFrom===null ? true : copyFrom.verifyATN;\n this.generateRuleBypassTransitions = copyFrom===null ? false : copyFrom.generateRuleBypassTransitions;\n\n return this;\n}\n\nATNDeserializationOptions.defaultOptions = new ATNDeserializationOptions();\nATNDeserializationOptions.defaultOptions.readOnly = true;\n\n// def __setattr__(self, key, value):\n// if key!=\"readOnly\" and self.readOnly:\n// raise Exception(\"The object is read only.\")\n// super(type(self), self).__setattr__(key,value)\n\nexports.ATNDeserializationOptions = ATNDeserializationOptions;\n","//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n //\n\nfunction LexerActionType() {\n}\n\nLexerActionType.CHANNEL = 0; //The type of a {@link LexerChannelAction} action.\nLexerActionType.CUSTOM = 1; //The type of a {@link LexerCustomAction} action.\nLexerActionType.MODE = 2; //The type of a {@link LexerModeAction} action.\nLexerActionType.MORE = 3; //The type of a {@link LexerMoreAction} action.\nLexerActionType.POP_MODE = 4; //The type of a {@link LexerPopModeAction} action.\nLexerActionType.PUSH_MODE = 5; //The type of a {@link LexerPushModeAction} action.\nLexerActionType.SKIP = 6; //The type of a {@link LexerSkipAction} action.\nLexerActionType.TYPE = 7; //The type of a {@link LexerTypeAction} action.\n\nfunction LexerAction(action) {\n this.actionType = action;\n this.isPositionDependent = false;\n return this;\n}\n\nLexerAction.prototype.hashCode = function() {\n var hash = new Hash();\n this.updateHashCode(hash);\n return hash.finish()\n};\n\nLexerAction.prototype.updateHashCode = function(hash) {\n hash.update(this.actionType);\n};\n\nLexerAction.prototype.equals = function(other) {\n return this === other;\n};\n\n\n\n//\n// Implements the {@code skip} lexer action by calling {@link Lexer//skip}.\n//\n//

The {@code skip} command does not have any parameters, so this action is\n// implemented as a singleton instance exposed by {@link //INSTANCE}.

\nfunction LexerSkipAction() {\n\tLexerAction.call(this, LexerActionType.SKIP);\n\treturn this;\n}\n\nLexerSkipAction.prototype = Object.create(LexerAction.prototype);\nLexerSkipAction.prototype.constructor = LexerSkipAction;\n\n// Provides a singleton instance of this parameterless lexer action.\nLexerSkipAction.INSTANCE = new LexerSkipAction();\n\nLexerSkipAction.prototype.execute = function(lexer) {\n lexer.skip();\n};\n\nLexerSkipAction.prototype.toString = function() {\n\treturn \"skip\";\n};\n\n// Implements the {@code type} lexer action by calling {@link Lexer//setType}\n// with the assigned type.\nfunction LexerTypeAction(type) {\n\tLexerAction.call(this, LexerActionType.TYPE);\n\tthis.type = type;\n\treturn this;\n}\n\nLexerTypeAction.prototype = Object.create(LexerAction.prototype);\nLexerTypeAction.prototype.constructor = LexerTypeAction;\n\nLexerTypeAction.prototype.execute = function(lexer) {\n lexer.type = this.type;\n};\n\nLexerTypeAction.prototype.updateHashCode = function(hash) {\n hash.update(this.actionType, this.type);\n};\n\n\nLexerTypeAction.prototype.equals = function(other) {\n if(this === other) {\n return true;\n } else if (! (other instanceof LexerTypeAction)) {\n return false;\n } else {\n return this.type === other.type;\n }\n};\n\nLexerTypeAction.prototype.toString = function() {\n return \"type(\" + this.type + \")\";\n};\n\n// Implements the {@code pushMode} lexer action by calling\n// {@link Lexer//pushMode} with the assigned mode.\nfunction LexerPushModeAction(mode) {\n\tLexerAction.call(this, LexerActionType.PUSH_MODE);\n this.mode = mode;\n return this;\n}\n\nLexerPushModeAction.prototype = Object.create(LexerAction.prototype);\nLexerPushModeAction.prototype.constructor = LexerPushModeAction;\n\n//

This action is implemented by calling {@link Lexer//pushMode} with the\n// value provided by {@link //getMode}.

\nLexerPushModeAction.prototype.execute = function(lexer) {\n lexer.pushMode(this.mode);\n};\n\nLexerPushModeAction.prototype.updateHashCode = function(hash) {\n hash.update(this.actionType, this.mode);\n};\n\nLexerPushModeAction.prototype.equals = function(other) {\n if (this === other) {\n return true;\n } else if (! (other instanceof LexerPushModeAction)) {\n return false;\n } else {\n return this.mode === other.mode;\n }\n};\n\nLexerPushModeAction.prototype.toString = function() {\n\treturn \"pushMode(\" + this.mode + \")\";\n};\n\n\n// Implements the {@code popMode} lexer action by calling {@link Lexer//popMode}.\n//\n//

The {@code popMode} command does not have any parameters, so this action is\n// implemented as a singleton instance exposed by {@link //INSTANCE}.

\nfunction LexerPopModeAction() {\n\tLexerAction.call(this,LexerActionType.POP_MODE);\n\treturn this;\n}\n\nLexerPopModeAction.prototype = Object.create(LexerAction.prototype);\nLexerPopModeAction.prototype.constructor = LexerPopModeAction;\n\nLexerPopModeAction.INSTANCE = new LexerPopModeAction();\n\n//

This action is implemented by calling {@link Lexer//popMode}.

\nLexerPopModeAction.prototype.execute = function(lexer) {\n lexer.popMode();\n};\n\nLexerPopModeAction.prototype.toString = function() {\n\treturn \"popMode\";\n};\n\n// Implements the {@code more} lexer action by calling {@link Lexer//more}.\n//\n//

The {@code more} command does not have any parameters, so this action is\n// implemented as a singleton instance exposed by {@link //INSTANCE}.

\nfunction LexerMoreAction() {\n\tLexerAction.call(this, LexerActionType.MORE);\n\treturn this;\n}\n\nLexerMoreAction.prototype = Object.create(LexerAction.prototype);\nLexerMoreAction.prototype.constructor = LexerMoreAction;\n\nLexerMoreAction.INSTANCE = new LexerMoreAction();\n\n//

This action is implemented by calling {@link Lexer//popMode}.

\nLexerMoreAction.prototype.execute = function(lexer) {\n lexer.more();\n};\n\nLexerMoreAction.prototype.toString = function() {\n return \"more\";\n};\n\n\n// Implements the {@code mode} lexer action by calling {@link Lexer//mode} with\n// the assigned mode.\nfunction LexerModeAction(mode) {\n\tLexerAction.call(this, LexerActionType.MODE);\n this.mode = mode;\n return this;\n}\n\nLexerModeAction.prototype = Object.create(LexerAction.prototype);\nLexerModeAction.prototype.constructor = LexerModeAction;\n\n//

This action is implemented by calling {@link Lexer//mode} with the\n// value provided by {@link //getMode}.

\nLexerModeAction.prototype.execute = function(lexer) {\n lexer.mode(this.mode);\n};\n\nLexerModeAction.prototype.updateHashCode = function(hash) {\n hash.update(this.actionType, this.mode);\n};\n\nLexerModeAction.prototype.equals = function(other) {\n if (this === other) {\n return true;\n } else if (! (other instanceof LexerModeAction)) {\n return false;\n } else {\n return this.mode === other.mode;\n }\n};\n\nLexerModeAction.prototype.toString = function() {\n return \"mode(\" + this.mode + \")\";\n};\n\n// Executes a custom lexer action by calling {@link Recognizer//action} with the\n// rule and action indexes assigned to the custom action. The implementation of\n// a custom action is added to the generated code for the lexer in an override\n// of {@link Recognizer//action} when the grammar is compiled.\n//\n//

This class may represent embedded actions created with the {...}\n// syntax in ANTLR 4, as well as actions created for lexer commands where the\n// command argument could not be evaluated when the grammar was compiled.

\n\n\n // Constructs a custom lexer action with the specified rule and action\n // indexes.\n //\n // @param ruleIndex The rule index to use for calls to\n // {@link Recognizer//action}.\n // @param actionIndex The action index to use for calls to\n // {@link Recognizer//action}.\n\nfunction LexerCustomAction(ruleIndex, actionIndex) {\n\tLexerAction.call(this, LexerActionType.CUSTOM);\n this.ruleIndex = ruleIndex;\n this.actionIndex = actionIndex;\n this.isPositionDependent = true;\n return this;\n}\n\nLexerCustomAction.prototype = Object.create(LexerAction.prototype);\nLexerCustomAction.prototype.constructor = LexerCustomAction;\n\n//

Custom actions are implemented by calling {@link Lexer//action} with the\n// appropriate rule and action indexes.

\nLexerCustomAction.prototype.execute = function(lexer) {\n lexer.action(null, this.ruleIndex, this.actionIndex);\n};\n\nLexerCustomAction.prototype.updateHashCode = function(hash) {\n hash.update(this.actionType, this.ruleIndex, this.actionIndex);\n};\n\nLexerCustomAction.prototype.equals = function(other) {\n if (this === other) {\n return true;\n } else if (! (other instanceof LexerCustomAction)) {\n return false;\n } else {\n return this.ruleIndex === other.ruleIndex && this.actionIndex === other.actionIndex;\n }\n};\n\n// Implements the {@code channel} lexer action by calling\n// {@link Lexer//setChannel} with the assigned channel.\n// Constructs a new {@code channel} action with the specified channel value.\n// @param channel The channel value to pass to {@link Lexer//setChannel}.\nfunction LexerChannelAction(channel) {\n\tLexerAction.call(this, LexerActionType.CHANNEL);\n this.channel = channel;\n return this;\n}\n\nLexerChannelAction.prototype = Object.create(LexerAction.prototype);\nLexerChannelAction.prototype.constructor = LexerChannelAction;\n\n//

This action is implemented by calling {@link Lexer//setChannel} with the\n// value provided by {@link //getChannel}.

\nLexerChannelAction.prototype.execute = function(lexer) {\n lexer._channel = this.channel;\n};\n\nLexerChannelAction.prototype.updateHashCode = function(hash) {\n hash.update(this.actionType, this.channel);\n};\n\nLexerChannelAction.prototype.equals = function(other) {\n if (this === other) {\n return true;\n } else if (! (other instanceof LexerChannelAction)) {\n return false;\n } else {\n return this.channel === other.channel;\n }\n};\n\nLexerChannelAction.prototype.toString = function() {\n return \"channel(\" + this.channel + \")\";\n};\n\n// This implementation of {@link LexerAction} is used for tracking input offsets\n// for position-dependent actions within a {@link LexerActionExecutor}.\n//\n//

This action is not serialized as part of the ATN, and is only required for\n// position-dependent lexer actions which appear at a location other than the\n// end of a rule. For more information about DFA optimizations employed for\n// lexer actions, see {@link LexerActionExecutor//append} and\n// {@link LexerActionExecutor//fixOffsetBeforeMatch}.

\n\n// Constructs a new indexed custom action by associating a character offset\n// with a {@link LexerAction}.\n//\n//

Note: This class is only required for lexer actions for which\n// {@link LexerAction//isPositionDependent} returns {@code true}.

\n//\n// @param offset The offset into the input {@link CharStream}, relative to\n// the token start index, at which the specified lexer action should be\n// executed.\n// @param action The lexer action to execute at a particular offset in the\n// input {@link CharStream}.\nfunction LexerIndexedCustomAction(offset, action) {\n\tLexerAction.call(this, action.actionType);\n this.offset = offset;\n this.action = action;\n this.isPositionDependent = true;\n return this;\n}\n\nLexerIndexedCustomAction.prototype = Object.create(LexerAction.prototype);\nLexerIndexedCustomAction.prototype.constructor = LexerIndexedCustomAction;\n\n//

This method calls {@link //execute} on the result of {@link //getAction}\n// using the provided {@code lexer}.

\nLexerIndexedCustomAction.prototype.execute = function(lexer) {\n // assume the input stream position was properly set by the calling code\n this.action.execute(lexer);\n};\n\nLexerIndexedCustomAction.prototype.updateHashCode = function(hash) {\n hash.update(this.actionType, this.offset, this.action);\n};\n\nLexerIndexedCustomAction.prototype.equals = function(other) {\n if (this === other) {\n return true;\n } else if (! (other instanceof LexerIndexedCustomAction)) {\n return false;\n } else {\n return this.offset === other.offset && this.action === other.action;\n }\n};\n\n\nexports.LexerActionType = LexerActionType;\nexports.LexerSkipAction = LexerSkipAction;\nexports.LexerChannelAction = LexerChannelAction;\nexports.LexerCustomAction = LexerCustomAction;\nexports.LexerIndexedCustomAction = LexerIndexedCustomAction;\nexports.LexerMoreAction = LexerMoreAction;\nexports.LexerTypeAction = LexerTypeAction;\nexports.LexerPushModeAction = LexerPushModeAction;\nexports.LexerPopModeAction = LexerPopModeAction;\nexports.LexerModeAction = LexerModeAction;","//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n//\n\nvar Token = require('./Token').Token;\nvar ConsoleErrorListener = require('./error/ErrorListener').ConsoleErrorListener;\nvar ProxyErrorListener = require('./error/ErrorListener').ProxyErrorListener;\n\nfunction Recognizer() {\n this._listeners = [ ConsoleErrorListener.INSTANCE ];\n this._interp = null;\n this._stateNumber = -1;\n return this;\n}\n\nRecognizer.tokenTypeMapCache = {};\nRecognizer.ruleIndexMapCache = {};\n\n\nRecognizer.prototype.checkVersion = function(toolVersion) {\n var runtimeVersion = \"4.7.2\";\n if (runtimeVersion!==toolVersion) {\n console.log(\"ANTLR runtime and generated code versions disagree: \"+runtimeVersion+\"!=\"+toolVersion);\n }\n};\n\nRecognizer.prototype.addErrorListener = function(listener) {\n this._listeners.push(listener);\n};\n\nRecognizer.prototype.removeErrorListeners = function() {\n this._listeners = [];\n};\n\nRecognizer.prototype.getTokenTypeMap = function() {\n var tokenNames = this.getTokenNames();\n if (tokenNames===null) {\n throw(\"The current recognizer does not provide a list of token names.\");\n }\n var result = this.tokenTypeMapCache[tokenNames];\n if(result===undefined) {\n result = tokenNames.reduce(function(o, k, i) { o[k] = i; });\n result.EOF = Token.EOF;\n this.tokenTypeMapCache[tokenNames] = result;\n }\n return result;\n};\n\n// Get a map from rule names to rule indexes.\n//\n//

Used for XPath and tree pattern compilation.

\n//\nRecognizer.prototype.getRuleIndexMap = function() {\n var ruleNames = this.ruleNames;\n if (ruleNames===null) {\n throw(\"The current recognizer does not provide a list of rule names.\");\n }\n var result = this.ruleIndexMapCache[ruleNames];\n if(result===undefined) {\n result = ruleNames.reduce(function(o, k, i) { o[k] = i; });\n this.ruleIndexMapCache[ruleNames] = result;\n }\n return result;\n};\n\nRecognizer.prototype.getTokenType = function(tokenName) {\n var ttype = this.getTokenTypeMap()[tokenName];\n if (ttype !==undefined) {\n return ttype;\n } else {\n return Token.INVALID_TYPE;\n }\n};\n\n\n// What is the error header, normally line/character position information?//\nRecognizer.prototype.getErrorHeader = function(e) {\n var line = e.getOffendingToken().line;\n var column = e.getOffendingToken().column;\n return \"line \" + line + \":\" + column;\n};\n\n\n// How should a token be displayed in an error message? The default\n// is to display just the text, but during development you might\n// want to have a lot of information spit out. Override in that case\n// to use t.toString() (which, for CommonToken, dumps everything about\n// the token). This is better than forcing you to override a method in\n// your token objects because you don't have to go modify your lexer\n// so that it creates a new Java type.\n//\n// @deprecated This method is not called by the ANTLR 4 Runtime. Specific\n// implementations of {@link ANTLRErrorStrategy} may provide a similar\n// feature when necessary. For example, see\n// {@link DefaultErrorStrategy//getTokenErrorDisplay}.\n//\nRecognizer.prototype.getTokenErrorDisplay = function(t) {\n if (t===null) {\n return \"\";\n }\n var s = t.text;\n if (s===null) {\n if (t.type===Token.EOF) {\n s = \"\";\n } else {\n s = \"<\" + t.type + \">\";\n }\n }\n s = s.replace(\"\\n\",\"\\\\n\").replace(\"\\r\",\"\\\\r\").replace(\"\\t\",\"\\\\t\");\n return \"'\" + s + \"'\";\n};\n\nRecognizer.prototype.getErrorListenerDispatch = function() {\n return new ProxyErrorListener(this._listeners);\n};\n\n// subclass needs to override these if there are sempreds or actions\n// that the ATN interp needs to execute\nRecognizer.prototype.sempred = function(localctx, ruleIndex, actionIndex) {\n return true;\n};\n\nRecognizer.prototype.precpred = function(localctx , precedence) {\n return true;\n};\n\n//Indicate that the recognizer has changed internal state that is\n//consistent with the ATN state passed in. This way we always know\n//where we are in the ATN as the parser goes along. The rule\n//context objects form a stack that lets us see the stack of\n//invoking rules. Combine this and we have complete ATN\n//configuration information.\n\nObject.defineProperty(Recognizer.prototype, \"state\", {\n\tget : function() {\n\t\treturn this._stateNumber;\n\t},\n\tset : function(state) {\n\t\tthis._stateNumber = state;\n\t}\n});\n\n\nexports.Recognizer = Recognizer;\n","//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n///\n\nvar DFAState = require('./../dfa/DFAState').DFAState;\nvar ATNConfigSet = require('./ATNConfigSet').ATNConfigSet;\nvar getCachedPredictionContext = require('./../PredictionContext').getCachedPredictionContext;\n\nfunction ATNSimulator(atn, sharedContextCache) {\n\n // The context cache maps all PredictionContext objects that are ==\n // to a single cached copy. This cache is shared across all contexts\n // in all ATNConfigs in all DFA states. We rebuild each ATNConfigSet\n // to use only cached nodes/graphs in addDFAState(). We don't want to\n // fill this during closure() since there are lots of contexts that\n // pop up but are not used ever again. It also greatly slows down closure().\n //\n //

This cache makes a huge difference in memory and a little bit in speed.\n // For the Java grammar on java.*, it dropped the memory requirements\n // at the end from 25M to 16M. We don't store any of the full context\n // graphs in the DFA because they are limited to local context only,\n // but apparently there's a lot of repetition there as well. We optimize\n // the config contexts before storing the config set in the DFA states\n // by literally rebuilding them with cached subgraphs only.

\n //\n //

I tried a cache for use during closure operations, that was\n // whacked after each adaptivePredict(). It cost a little bit\n // more time I think and doesn't save on the overall footprint\n // so it's not worth the complexity.

\n ///\n this.atn = atn;\n this.sharedContextCache = sharedContextCache;\n return this;\n}\n\n// Must distinguish between missing edge and edge we know leads nowhere///\nATNSimulator.ERROR = new DFAState(0x7FFFFFFF, new ATNConfigSet());\n\n\nATNSimulator.prototype.getCachedContext = function(context) {\n if (this.sharedContextCache ===null) {\n return context;\n }\n var visited = {};\n return getCachedPredictionContext(context, this.sharedContextCache, visited);\n};\n\nexports.ATNSimulator = ATNSimulator;\n","//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n//\n//\n// This enumeration defines the prediction modes available in ANTLR 4 along with\n// utility methods for analyzing configuration sets for conflicts and/or\n// ambiguities.\n\nvar Set = require('./../Utils').Set;\nvar Map = require('./../Utils').Map;\nvar BitSet = require('./../Utils').BitSet;\nvar AltDict = require('./../Utils').AltDict;\nvar ATN = require('./ATN').ATN;\nvar RuleStopState = require('./ATNState').RuleStopState;\nvar ATNConfigSet = require('./ATNConfigSet').ATNConfigSet;\nvar ATNConfig = require('./ATNConfig').ATNConfig;\nvar SemanticContext = require('./SemanticContext').SemanticContext;\nvar Hash = require(\"../Utils\").Hash;\nvar hashStuff = require('./../Utils').hashStuff;\nvar equalArrays = require('./../Utils').equalArrays;\n\nfunction PredictionMode() {\n\treturn this;\n}\n\n//\n// The SLL(*) prediction mode. This prediction mode ignores the current\n// parser context when making predictions. This is the fastest prediction\n// mode, and provides correct results for many grammars. This prediction\n// mode is more powerful than the prediction mode provided by ANTLR 3, but\n// may result in syntax errors for grammar and input combinations which are\n// not SLL.\n//\n//

\n// When using this prediction mode, the parser will either return a correct\n// parse tree (i.e. the same parse tree that would be returned with the\n// {@link //LL} prediction mode), or it will report a syntax error. If a\n// syntax error is encountered when using the {@link //SLL} prediction mode,\n// it may be due to either an actual syntax error in the input or indicate\n// that the particular combination of grammar and input requires the more\n// powerful {@link //LL} prediction abilities to complete successfully.

\n//\n//

\n// This prediction mode does not provide any guarantees for prediction\n// behavior for syntactically-incorrect inputs.

\n//\nPredictionMode.SLL = 0;\n//\n// The LL(*) prediction mode. This prediction mode allows the current parser\n// context to be used for resolving SLL conflicts that occur during\n// prediction. This is the fastest prediction mode that guarantees correct\n// parse results for all combinations of grammars with syntactically correct\n// inputs.\n//\n//

\n// When using this prediction mode, the parser will make correct decisions\n// for all syntactically-correct grammar and input combinations. However, in\n// cases where the grammar is truly ambiguous this prediction mode might not\n// report a precise answer for exactly which alternatives are\n// ambiguous.

\n//\n//

\n// This prediction mode does not provide any guarantees for prediction\n// behavior for syntactically-incorrect inputs.

\n//\nPredictionMode.LL = 1;\n//\n// The LL(*) prediction mode with exact ambiguity detection. In addition to\n// the correctness guarantees provided by the {@link //LL} prediction mode,\n// this prediction mode instructs the prediction algorithm to determine the\n// complete and exact set of ambiguous alternatives for every ambiguous\n// decision encountered while parsing.\n//\n//

\n// This prediction mode may be used for diagnosing ambiguities during\n// grammar development. Due to the performance overhead of calculating sets\n// of ambiguous alternatives, this prediction mode should be avoided when\n// the exact results are not necessary.

\n//\n//

\n// This prediction mode does not provide any guarantees for prediction\n// behavior for syntactically-incorrect inputs.

\n//\nPredictionMode.LL_EXACT_AMBIG_DETECTION = 2;\n\n\n//\n// Computes the SLL prediction termination condition.\n//\n//

\n// This method computes the SLL prediction termination condition for both of\n// the following cases.

\n//\n//
    \n//
  • The usual SLL+LL fallback upon SLL conflict
  • \n//
  • Pure SLL without LL fallback
  • \n//
\n//\n//

COMBINED SLL+LL PARSING

\n//\n//

When LL-fallback is enabled upon SLL conflict, correct predictions are\n// ensured regardless of how the termination condition is computed by this\n// method. Due to the substantially higher cost of LL prediction, the\n// prediction should only fall back to LL when the additional lookahead\n// cannot lead to a unique SLL prediction.

\n//\n//

Assuming combined SLL+LL parsing, an SLL configuration set with only\n// conflicting subsets should fall back to full LL, even if the\n// configuration sets don't resolve to the same alternative (e.g.\n// {@code {1,2}} and {@code {3,4}}. If there is at least one non-conflicting\n// configuration, SLL could continue with the hopes that more lookahead will\n// resolve via one of those non-conflicting configurations.

\n//\n//

Here's the prediction termination rule them: SLL (for SLL+LL parsing)\n// stops when it sees only conflicting configuration subsets. In contrast,\n// full LL keeps going when there is uncertainty.

\n//\n//

HEURISTIC

\n//\n//

As a heuristic, we stop prediction when we see any conflicting subset\n// unless we see a state that only has one alternative associated with it.\n// The single-alt-state thing lets prediction continue upon rules like\n// (otherwise, it would admit defeat too soon):

\n//\n//

{@code [12|1|[], 6|2|[], 12|2|[]]. s : (ID | ID ID?) ';' ;}

\n//\n//

When the ATN simulation reaches the state before {@code ';'}, it has a\n// DFA state that looks like: {@code [12|1|[], 6|2|[], 12|2|[]]}. Naturally\n// {@code 12|1|[]} and {@code 12|2|[]} conflict, but we cannot stop\n// processing this node because alternative to has another way to continue,\n// via {@code [6|2|[]]}.

\n//\n//

It also let's us continue for this rule:

\n//\n//

{@code [1|1|[], 1|2|[], 8|3|[]] a : A | A | A B ;}

\n//\n//

After matching input A, we reach the stop state for rule A, state 1.\n// State 8 is the state right before B. Clearly alternatives 1 and 2\n// conflict and no amount of further lookahead will separate the two.\n// However, alternative 3 will be able to continue and so we do not stop\n// working on this state. In the previous example, we're concerned with\n// states associated with the conflicting alternatives. Here alt 3 is not\n// associated with the conflicting configs, but since we can continue\n// looking for input reasonably, don't declare the state done.

\n//\n//

PURE SLL PARSING

\n//\n//

To handle pure SLL parsing, all we have to do is make sure that we\n// combine stack contexts for configurations that differ only by semantic\n// predicate. From there, we can do the usual SLL termination heuristic.

\n//\n//

PREDICATES IN SLL+LL PARSING

\n//\n//

SLL decisions don't evaluate predicates until after they reach DFA stop\n// states because they need to create the DFA cache that works in all\n// semantic situations. In contrast, full LL evaluates predicates collected\n// during start state computation so it can ignore predicates thereafter.\n// This means that SLL termination detection can totally ignore semantic\n// predicates.

\n//\n//

Implementation-wise, {@link ATNConfigSet} combines stack contexts but not\n// semantic predicate contexts so we might see two configurations like the\n// following.

\n//\n//

{@code (s, 1, x, {}), (s, 1, x', {p})}

\n//\n//

Before testing these configurations against others, we have to merge\n// {@code x} and {@code x'} (without modifying the existing configurations).\n// For example, we test {@code (x+x')==x''} when looking for conflicts in\n// the following configurations.

\n//\n//

{@code (s, 1, x, {}), (s, 1, x', {p}), (s, 2, x'', {})}

\n//\n//

If the configuration set has predicates (as indicated by\n// {@link ATNConfigSet//hasSemanticContext}), this algorithm makes a copy of\n// the configurations to strip out all of the predicates so that a standard\n// {@link ATNConfigSet} will merge everything ignoring predicates.

\n//\nPredictionMode.hasSLLConflictTerminatingPrediction = function( mode, configs) {\n // Configs in rule stop states indicate reaching the end of the decision\n // rule (local context) or end of start rule (full context). If all\n // configs meet this condition, then none of the configurations is able\n // to match additional input so we terminate prediction.\n //\n if (PredictionMode.allConfigsInRuleStopStates(configs)) {\n return true;\n }\n // pure SLL mode parsing\n if (mode === PredictionMode.SLL) {\n // Don't bother with combining configs from different semantic\n // contexts if we can fail over to full LL; costs more time\n // since we'll often fail over anyway.\n if (configs.hasSemanticContext) {\n // dup configs, tossing out semantic predicates\n var dup = new ATNConfigSet();\n for(var i=0;iCan we stop looking ahead during ATN simulation or is there some\n// uncertainty as to which alternative we will ultimately pick, after\n// consuming more input? Even if there are partial conflicts, we might know\n// that everything is going to resolve to the same minimum alternative. That\n// means we can stop since no more lookahead will change that fact. On the\n// other hand, there might be multiple conflicts that resolve to different\n// minimums. That means we need more look ahead to decide which of those\n// alternatives we should predict.

\n//\n//

The basic idea is to split the set of configurations {@code C}, into\n// conflicting subsets {@code (s, _, ctx, _)} and singleton subsets with\n// non-conflicting configurations. Two configurations conflict if they have\n// identical {@link ATNConfig//state} and {@link ATNConfig//context} values\n// but different {@link ATNConfig//alt} value, e.g. {@code (s, i, ctx, _)}\n// and {@code (s, j, ctx, _)} for {@code i!=j}.

\n//\n//

Reduce these configuration subsets to the set of possible alternatives.\n// You can compute the alternative subsets in one pass as follows:

\n//\n//

{@code A_s,ctx = {i | (s, i, ctx, _)}} for each configuration in\n// {@code C} holding {@code s} and {@code ctx} fixed.

\n//\n//

Or in pseudo-code, for each configuration {@code c} in {@code C}:

\n//\n//
\n// map[c] U= c.{@link ATNConfig//alt alt} // map hash/equals uses s and x, not\n// alt and not pred\n// 
\n//\n//

The values in {@code map} are the set of {@code A_s,ctx} sets.

\n//\n//

If {@code |A_s,ctx|=1} then there is no conflict associated with\n// {@code s} and {@code ctx}.

\n//\n//

Reduce the subsets to singletons by choosing a minimum of each subset. If\n// the union of these alternative subsets is a singleton, then no amount of\n// more lookahead will help us. We will always pick that alternative. If,\n// however, there is more than one alternative, then we are uncertain which\n// alternative to predict and must continue looking for resolution. We may\n// or may not discover an ambiguity in the future, even if there are no\n// conflicting subsets this round.

\n//\n//

The biggest sin is to terminate early because it means we've made a\n// decision but were uncertain as to the eventual outcome. We haven't used\n// enough lookahead. On the other hand, announcing a conflict too late is no\n// big deal; you will still have the conflict. It's just inefficient. It\n// might even look until the end of file.

\n//\n//

No special consideration for semantic predicates is required because\n// predicates are evaluated on-the-fly for full LL prediction, ensuring that\n// no configuration contains a semantic context during the termination\n// check.

\n//\n//

CONFLICTING CONFIGS

\n//\n//

Two configurations {@code (s, i, x)} and {@code (s, j, x')}, conflict\n// when {@code i!=j} but {@code x=x'}. Because we merge all\n// {@code (s, i, _)} configurations together, that means that there are at\n// most {@code n} configurations associated with state {@code s} for\n// {@code n} possible alternatives in the decision. The merged stacks\n// complicate the comparison of configuration contexts {@code x} and\n// {@code x'}. Sam checks to see if one is a subset of the other by calling\n// merge and checking to see if the merged result is either {@code x} or\n// {@code x'}. If the {@code x} associated with lowest alternative {@code i}\n// is the superset, then {@code i} is the only possible prediction since the\n// others resolve to {@code min(i)} as well. However, if {@code x} is\n// associated with {@code j>i} then at least one stack configuration for\n// {@code j} is not in conflict with alternative {@code i}. The algorithm\n// should keep going, looking for more lookahead due to the uncertainty.

\n//\n//

For simplicity, I'm doing a equality check between {@code x} and\n// {@code x'} that lets the algorithm continue to consume lookahead longer\n// than necessary. The reason I like the equality is of course the\n// simplicity but also because that is the test you need to detect the\n// alternatives that are actually in conflict.

\n//\n//

CONTINUE/STOP RULE

\n//\n//

Continue if union of resolved alternative sets from non-conflicting and\n// conflicting alternative subsets has more than one alternative. We are\n// uncertain about which alternative to predict.

\n//\n//

The complete set of alternatives, {@code [i for (_,i,_)]}, tells us which\n// alternatives are still in the running for the amount of input we've\n// consumed at this point. The conflicting sets let us to strip away\n// configurations that won't lead to more states because we resolve\n// conflicts to the configuration with a minimum alternate for the\n// conflicting set.

\n//\n//

CASES

\n//\n//
    \n//\n//
  • no conflicts and more than 1 alternative in set => continue
  • \n//\n//
  • {@code (s, 1, x)}, {@code (s, 2, x)}, {@code (s, 3, z)},\n// {@code (s', 1, y)}, {@code (s', 2, y)} yields non-conflicting set\n// {@code {3}} U conflicting sets {@code min({1,2})} U {@code min({1,2})} =\n// {@code {1,3}} => continue\n//
  • \n//\n//
  • {@code (s, 1, x)}, {@code (s, 2, x)}, {@code (s', 1, y)},\n// {@code (s', 2, y)}, {@code (s'', 1, z)} yields non-conflicting set\n// {@code {1}} U conflicting sets {@code min({1,2})} U {@code min({1,2})} =\n// {@code {1}} => stop and predict 1
  • \n//\n//
  • {@code (s, 1, x)}, {@code (s, 2, x)}, {@code (s', 1, y)},\n// {@code (s', 2, y)} yields conflicting, reduced sets {@code {1}} U\n// {@code {1}} = {@code {1}} => stop and predict 1, can announce\n// ambiguity {@code {1,2}}
  • \n//\n//
  • {@code (s, 1, x)}, {@code (s, 2, x)}, {@code (s', 2, y)},\n// {@code (s', 3, y)} yields conflicting, reduced sets {@code {1}} U\n// {@code {2}} = {@code {1,2}} => continue
  • \n//\n//
  • {@code (s, 1, x)}, {@code (s, 2, x)}, {@code (s', 3, y)},\n// {@code (s', 4, y)} yields conflicting, reduced sets {@code {1}} U\n// {@code {3}} = {@code {1,3}} => continue
  • \n//\n//
\n//\n//

EXACT AMBIGUITY DETECTION

\n//\n//

If all states report the same conflicting set of alternatives, then we\n// know we have the exact ambiguity set.

\n//\n//

|A_i|>1 and\n// A_i = A_j for all i, j.

\n//\n//

In other words, we continue examining lookahead until all {@code A_i}\n// have more than one alternative and all {@code A_i} are the same. If\n// {@code A={{1,2}, {1,3}}}, then regular LL prediction would terminate\n// because the resolved set is {@code {1}}. To determine what the real\n// ambiguity is, we have to know whether the ambiguity is between one and\n// two or one and three so we keep going. We can only stop prediction when\n// we need exact ambiguity detection when the sets look like\n// {@code A={{1,2}}} or {@code {{1,2},{1,2}}}, etc...

\n//\nPredictionMode.resolvesToJustOneViableAlt = function(altsets) {\n return PredictionMode.getSingleViableAlt(altsets);\n};\n\n//\n// Determines if every alternative subset in {@code altsets} contains more\n// than one alternative.\n//\n// @param altsets a collection of alternative subsets\n// @return {@code true} if every {@link BitSet} in {@code altsets} has\n// {@link BitSet//cardinality cardinality} > 1, otherwise {@code false}\n//\nPredictionMode.allSubsetsConflict = function(altsets) {\n return ! PredictionMode.hasNonConflictingAltSet(altsets);\n};\n//\n// Determines if any single alternative subset in {@code altsets} contains\n// exactly one alternative.\n//\n// @param altsets a collection of alternative subsets\n// @return {@code true} if {@code altsets} contains a {@link BitSet} with\n// {@link BitSet//cardinality cardinality} 1, otherwise {@code false}\n//\nPredictionMode.hasNonConflictingAltSet = function(altsets) {\n\tfor(var i=0;i1) {\n return true;\n }\n\t}\n return false;\n};\n\n//\n// Determines if every alternative subset in {@code altsets} is equivalent.\n//\n// @param altsets a collection of alternative subsets\n// @return {@code true} if every member of {@code altsets} is equal to the\n// others, otherwise {@code false}\n//\nPredictionMode.allSubsetsEqual = function(altsets) {\n var first = null;\n\tfor(var i=0;i\n// map[c] U= c.{@link ATNConfig//alt alt} // map hash/equals uses s and x, not\n// alt and not pred\n// \n\nPredictionMode.getConflictingAltSubsets = function(configs) {\n var configToAlts = new Map();\n configToAlts.hashFunction = function(cfg) { hashStuff(cfg.state.stateNumber, cfg.context); };\n configToAlts.equalsFunction = function(c1, c2) { return c1.state.stateNumber==c2.state.stateNumber && c1.context.equals(c2.context);}\n configs.items.map(function(cfg) {\n var alts = configToAlts.get(cfg);\n if (alts === null) {\n alts = new BitSet();\n configToAlts.put(cfg, alts);\n }\n alts.add(cfg.alt);\n\t});\n return configToAlts.getValues();\n};\n\n//\n// Get a map from state to alt subset from a configuration set. For each\n// configuration {@code c} in {@code configs}:\n//\n//
\n// map[c.{@link ATNConfig//state state}] U= c.{@link ATNConfig//alt alt}\n// 
\n//\nPredictionMode.getStateToAltMap = function(configs) {\n var m = new AltDict();\n configs.items.map(function(c) {\n var alts = m.get(c.state);\n if (alts === null) {\n alts = new BitSet();\n m.put(c.state, alts);\n }\n alts.add(c.alt);\n });\n return m;\n};\n\nPredictionMode.hasStateAssociatedWithOneAlt = function(configs) {\n var values = PredictionMode.getStateToAltMap(configs).values();\n for(var i=0;i= size) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\t// Get the first code unit\n\t\t\tvar first = string.charCodeAt(index);\n\t\t\tvar second;\n\t\t\tif ( // check if it’s the start of a surrogate pair\n\t\t\t\tfirst >= 0xD800 && first <= 0xDBFF && // high surrogate\n\t\t\t\tsize > index + 1 // there is a next code unit\n\t\t\t) {\n\t\t\t\tsecond = string.charCodeAt(index + 1);\n\t\t\t\tif (second >= 0xDC00 && second <= 0xDFFF) { // low surrogate\n\t\t\t\t\t// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n\t\t\t\t\treturn (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn first;\n\t\t};\n\t\tif (defineProperty) {\n\t\t\tdefineProperty(String.prototype, 'codePointAt', {\n\t\t\t\t'value': codePointAt,\n\t\t\t\t'configurable': true,\n\t\t\t\t'writable': true\n\t\t\t});\n\t\t} else {\n\t\t\tString.prototype.codePointAt = codePointAt;\n\t\t}\n\t}());\n}\n","/*! https://mths.be/fromcodepoint v0.2.1 by @mathias */\nif (!String.fromCodePoint) {\n\t(function() {\n\t\tvar defineProperty = (function() {\n\t\t\t// IE 8 only supports `Object.defineProperty` on DOM elements\n\t\t\ttry {\n\t\t\t\tvar object = {};\n\t\t\t\tvar $defineProperty = Object.defineProperty;\n\t\t\t\tvar result = $defineProperty(object, object, object) && $defineProperty;\n\t\t\t} catch(error) {}\n\t\t\treturn result;\n\t\t}());\n\t\tvar stringFromCharCode = String.fromCharCode;\n\t\tvar floor = Math.floor;\n\t\tvar fromCodePoint = function(_) {\n\t\t\tvar MAX_SIZE = 0x4000;\n\t\t\tvar codeUnits = [];\n\t\t\tvar highSurrogate;\n\t\t\tvar lowSurrogate;\n\t\t\tvar index = -1;\n\t\t\tvar length = arguments.length;\n\t\t\tif (!length) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\tvar result = '';\n\t\t\twhile (++index < length) {\n\t\t\t\tvar codePoint = Number(arguments[index]);\n\t\t\t\tif (\n\t\t\t\t\t!isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`\n\t\t\t\t\tcodePoint < 0 || // not a valid Unicode code point\n\t\t\t\t\tcodePoint > 0x10FFFF || // not a valid Unicode code point\n\t\t\t\t\tfloor(codePoint) != codePoint // not an integer\n\t\t\t\t) {\n\t\t\t\t\tthrow RangeError('Invalid code point: ' + codePoint);\n\t\t\t\t}\n\t\t\t\tif (codePoint <= 0xFFFF) { // BMP code point\n\t\t\t\t\tcodeUnits.push(codePoint);\n\t\t\t\t} else { // Astral code point; split in surrogate halves\n\t\t\t\t\t// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n\t\t\t\t\tcodePoint -= 0x10000;\n\t\t\t\t\thighSurrogate = (codePoint >> 10) + 0xD800;\n\t\t\t\t\tlowSurrogate = (codePoint % 0x400) + 0xDC00;\n\t\t\t\t\tcodeUnits.push(highSurrogate, lowSurrogate);\n\t\t\t\t}\n\t\t\t\tif (index + 1 == length || codeUnits.length > MAX_SIZE) {\n\t\t\t\t\tresult += stringFromCharCode.apply(null, codeUnits);\n\t\t\t\t\tcodeUnits.length = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\t\tif (defineProperty) {\n\t\t\tdefineProperty(String, 'fromCodePoint', {\n\t\t\t\t'value': fromCodePoint,\n\t\t\t\t'configurable': true,\n\t\t\t\t'writable': true\n\t\t\t});\n\t\t} else {\n\t\t\tString.fromCodePoint = fromCodePoint;\n\t\t}\n\t}());\n}\n","//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n//\n\nvar Token = require('./../Token').Token;\nvar Errors = require('./Errors');\nvar NoViableAltException = Errors.NoViableAltException;\nvar InputMismatchException = Errors.InputMismatchException;\nvar FailedPredicateException = Errors.FailedPredicateException;\nvar ParseCancellationException = Errors.ParseCancellationException;\nvar ATNState = require('./../atn/ATNState').ATNState;\nvar Interval = require('./../IntervalSet').Interval;\nvar IntervalSet = require('./../IntervalSet').IntervalSet;\n\nfunction ErrorStrategy() {\n\n}\n\nErrorStrategy.prototype.reset = function(recognizer){\n};\n\nErrorStrategy.prototype.recoverInline = function(recognizer){\n};\n\nErrorStrategy.prototype.recover = function(recognizer, e){\n};\n\nErrorStrategy.prototype.sync = function(recognizer){\n};\n\nErrorStrategy.prototype.inErrorRecoveryMode = function(recognizer){\n};\n\nErrorStrategy.prototype.reportError = function(recognizer){\n};\n\n\n\n// This is the default implementation of {@link ANTLRErrorStrategy} used for\n// error reporting and recovery in ANTLR parsers.\n//\nfunction DefaultErrorStrategy() {\n\tErrorStrategy.call(this);\n // Indicates whether the error strategy is currently \"recovering from an\n // error\". This is used to suppress reporting multiple error messages while\n // attempting to recover from a detected syntax error.\n //\n // @see //inErrorRecoveryMode\n //\n this.errorRecoveryMode = false;\n\n // The index into the input stream where the last error occurred.\n // This is used to prevent infinite loops where an error is found\n // but no token is consumed during recovery...another error is found,\n // ad nauseum. This is a failsafe mechanism to guarantee that at least\n // one token/tree node is consumed for two errors.\n //\n this.lastErrorIndex = -1;\n this.lastErrorStates = null;\n return this;\n}\n\nDefaultErrorStrategy.prototype = Object.create(ErrorStrategy.prototype);\nDefaultErrorStrategy.prototype.constructor = DefaultErrorStrategy;\n\n//

The default implementation simply calls {@link //endErrorCondition} to\n// ensure that the handler is not in error recovery mode.

\nDefaultErrorStrategy.prototype.reset = function(recognizer) {\n this.endErrorCondition(recognizer);\n};\n\n//\n// This method is called to enter error recovery mode when a recognition\n// exception is reported.\n//\n// @param recognizer the parser instance\n//\nDefaultErrorStrategy.prototype.beginErrorCondition = function(recognizer) {\n this.errorRecoveryMode = true;\n};\n\nDefaultErrorStrategy.prototype.inErrorRecoveryMode = function(recognizer) {\n return this.errorRecoveryMode;\n};\n\n//\n// This method is called to leave error recovery mode after recovering from\n// a recognition exception.\n//\n// @param recognizer\n//\nDefaultErrorStrategy.prototype.endErrorCondition = function(recognizer) {\n this.errorRecoveryMode = false;\n this.lastErrorStates = null;\n this.lastErrorIndex = -1;\n};\n\n//\n// {@inheritDoc}\n//\n//

The default implementation simply calls {@link //endErrorCondition}.

\n//\nDefaultErrorStrategy.prototype.reportMatch = function(recognizer) {\n this.endErrorCondition(recognizer);\n};\n\n//\n// {@inheritDoc}\n//\n//

The default implementation returns immediately if the handler is already\n// in error recovery mode. Otherwise, it calls {@link //beginErrorCondition}\n// and dispatches the reporting task based on the runtime type of {@code e}\n// according to the following table.

\n//\n//
    \n//
  • {@link NoViableAltException}: Dispatches the call to\n// {@link //reportNoViableAlternative}
  • \n//
  • {@link InputMismatchException}: Dispatches the call to\n// {@link //reportInputMismatch}
  • \n//
  • {@link FailedPredicateException}: Dispatches the call to\n// {@link //reportFailedPredicate}
  • \n//
  • All other types: calls {@link Parser//notifyErrorListeners} to report\n// the exception
  • \n//
\n//\nDefaultErrorStrategy.prototype.reportError = function(recognizer, e) {\n // if we've already reported an error and have not matched a token\n // yet successfully, don't report any errors.\n if(this.inErrorRecoveryMode(recognizer)) {\n return; // don't report spurious errors\n }\n this.beginErrorCondition(recognizer);\n if ( e instanceof NoViableAltException ) {\n this.reportNoViableAlternative(recognizer, e);\n } else if ( e instanceof InputMismatchException ) {\n this.reportInputMismatch(recognizer, e);\n } else if ( e instanceof FailedPredicateException ) {\n this.reportFailedPredicate(recognizer, e);\n } else {\n console.log(\"unknown recognition error type: \" + e.constructor.name);\n console.log(e.stack);\n recognizer.notifyErrorListeners(e.getOffendingToken(), e.getMessage(), e);\n }\n};\n//\n// {@inheritDoc}\n//\n//

The default implementation resynchronizes the parser by consuming tokens\n// until we find one in the resynchronization set--loosely the set of tokens\n// that can follow the current rule.

\n//\nDefaultErrorStrategy.prototype.recover = function(recognizer, e) {\n if (this.lastErrorIndex===recognizer.getInputStream().index &&\n this.lastErrorStates !== null && this.lastErrorStates.indexOf(recognizer.state)>=0) {\n\t\t// uh oh, another error at same token index and previously-visited\n\t\t// state in ATN; must be a case where LT(1) is in the recovery\n\t\t// token set so nothing got consumed. Consume a single token\n\t\t// at least to prevent an infinite loop; this is a failsafe.\n\t\trecognizer.consume();\n }\n this.lastErrorIndex = recognizer._input.index;\n if (this.lastErrorStates === null) {\n this.lastErrorStates = [];\n }\n this.lastErrorStates.push(recognizer.state);\n var followSet = this.getErrorRecoverySet(recognizer);\n this.consumeUntil(recognizer, followSet);\n};\n\n// The default implementation of {@link ANTLRErrorStrategy//sync} makes sure\n// that the current lookahead symbol is consistent with what were expecting\n// at this point in the ATN. You can call this anytime but ANTLR only\n// generates code to check before subrules/loops and each iteration.\n//\n//

Implements Jim Idle's magic sync mechanism in closures and optional\n// subrules. E.g.,

\n//\n//
\n// a : sync ( stuff sync )* ;\n// sync : {consume to what can follow sync} ;\n// 
\n//\n// At the start of a sub rule upon error, {@link //sync} performs single\n// token deletion, if possible. If it can't do that, it bails on the current\n// rule and uses the default error recovery, which consumes until the\n// resynchronization set of the current rule.\n//\n//

If the sub rule is optional ({@code (...)?}, {@code (...)*}, or block\n// with an empty alternative), then the expected set includes what follows\n// the subrule.

\n//\n//

During loop iteration, it consumes until it sees a token that can start a\n// sub rule or what follows loop. Yes, that is pretty aggressive. We opt to\n// stay in the loop as long as possible.

\n//\n//

ORIGINS

\n//\n//

Previous versions of ANTLR did a poor job of their recovery within loops.\n// A single mismatch token or missing token would force the parser to bail\n// out of the entire rules surrounding the loop. So, for rule

\n//\n//
\n// classDef : 'class' ID '{' member* '}'\n// 
\n//\n// input with an extra token between members would force the parser to\n// consume until it found the next class definition rather than the next\n// member definition of the current class.\n//\n//

This functionality cost a little bit of effort because the parser has to\n// compare token set at the start of the loop and at each iteration. If for\n// some reason speed is suffering for you, you can turn off this\n// functionality by simply overriding this method as a blank { }.

\n//\nDefaultErrorStrategy.prototype.sync = function(recognizer) {\n // If already recovering, don't try to sync\n if (this.inErrorRecoveryMode(recognizer)) {\n return;\n }\n var s = recognizer._interp.atn.states[recognizer.state];\n var la = recognizer.getTokenStream().LA(1);\n // try cheaper subset first; might get lucky. seems to shave a wee bit off\n var nextTokens = recognizer.atn.nextTokens(s);\n if (nextTokens.contains(Token.EPSILON) || nextTokens.contains(la)) {\n return;\n }\n switch (s.stateType) {\n case ATNState.BLOCK_START:\n case ATNState.STAR_BLOCK_START:\n case ATNState.PLUS_BLOCK_START:\n case ATNState.STAR_LOOP_ENTRY:\n // report error and recover if possible\n if( this.singleTokenDeletion(recognizer) !== null) {\n return;\n } else {\n throw new InputMismatchException(recognizer);\n }\n break;\n case ATNState.PLUS_LOOP_BACK:\n case ATNState.STAR_LOOP_BACK:\n this.reportUnwantedToken(recognizer);\n var expecting = new IntervalSet();\n expecting.addSet(recognizer.getExpectedTokens());\n var whatFollowsLoopIterationOrRule = expecting.addSet(this.getErrorRecoverySet(recognizer));\n this.consumeUntil(recognizer, whatFollowsLoopIterationOrRule);\n break;\n default:\n // do nothing if we can't identify the exact kind of ATN state\n }\n};\n\n// This is called by {@link //reportError} when the exception is a\n// {@link NoViableAltException}.\n//\n// @see //reportError\n//\n// @param recognizer the parser instance\n// @param e the recognition exception\n//\nDefaultErrorStrategy.prototype.reportNoViableAlternative = function(recognizer, e) {\n var tokens = recognizer.getTokenStream();\n var input;\n if(tokens !== null) {\n if (e.startToken.type===Token.EOF) {\n input = \"\";\n } else {\n input = tokens.getText(new Interval(e.startToken.tokenIndex, e.offendingToken.tokenIndex));\n }\n } else {\n input = \"\";\n }\n var msg = \"no viable alternative at input \" + this.escapeWSAndQuote(input);\n recognizer.notifyErrorListeners(msg, e.offendingToken, e);\n};\n\n//\n// This is called by {@link //reportError} when the exception is an\n// {@link InputMismatchException}.\n//\n// @see //reportError\n//\n// @param recognizer the parser instance\n// @param e the recognition exception\n//\nDefaultErrorStrategy.prototype.reportInputMismatch = function(recognizer, e) {\n var msg = \"mismatched input \" + this.getTokenErrorDisplay(e.offendingToken) +\n \" expecting \" + e.getExpectedTokens().toString(recognizer.literalNames, recognizer.symbolicNames);\n recognizer.notifyErrorListeners(msg, e.offendingToken, e);\n};\n\n//\n// This is called by {@link //reportError} when the exception is a\n// {@link FailedPredicateException}.\n//\n// @see //reportError\n//\n// @param recognizer the parser instance\n// @param e the recognition exception\n//\nDefaultErrorStrategy.prototype.reportFailedPredicate = function(recognizer, e) {\n var ruleName = recognizer.ruleNames[recognizer._ctx.ruleIndex];\n var msg = \"rule \" + ruleName + \" \" + e.message;\n recognizer.notifyErrorListeners(msg, e.offendingToken, e);\n};\n\n// This method is called to report a syntax error which requires the removal\n// of a token from the input stream. At the time this method is called, the\n// erroneous symbol is current {@code LT(1)} symbol and has not yet been\n// removed from the input stream. When this method returns,\n// {@code recognizer} is in error recovery mode.\n//\n//

This method is called when {@link //singleTokenDeletion} identifies\n// single-token deletion as a viable recovery strategy for a mismatched\n// input error.

\n//\n//

The default implementation simply returns if the handler is already in\n// error recovery mode. Otherwise, it calls {@link //beginErrorCondition} to\n// enter error recovery mode, followed by calling\n// {@link Parser//notifyErrorListeners}.

\n//\n// @param recognizer the parser instance\n//\nDefaultErrorStrategy.prototype.reportUnwantedToken = function(recognizer) {\n if (this.inErrorRecoveryMode(recognizer)) {\n return;\n }\n this.beginErrorCondition(recognizer);\n var t = recognizer.getCurrentToken();\n var tokenName = this.getTokenErrorDisplay(t);\n var expecting = this.getExpectedTokens(recognizer);\n var msg = \"extraneous input \" + tokenName + \" expecting \" +\n expecting.toString(recognizer.literalNames, recognizer.symbolicNames);\n recognizer.notifyErrorListeners(msg, t, null);\n};\n// This method is called to report a syntax error which requires the\n// insertion of a missing token into the input stream. At the time this\n// method is called, the missing token has not yet been inserted. When this\n// method returns, {@code recognizer} is in error recovery mode.\n//\n//

This method is called when {@link //singleTokenInsertion} identifies\n// single-token insertion as a viable recovery strategy for a mismatched\n// input error.

\n//\n//

The default implementation simply returns if the handler is already in\n// error recovery mode. Otherwise, it calls {@link //beginErrorCondition} to\n// enter error recovery mode, followed by calling\n// {@link Parser//notifyErrorListeners}.

\n//\n// @param recognizer the parser instance\n//\nDefaultErrorStrategy.prototype.reportMissingToken = function(recognizer) {\n if ( this.inErrorRecoveryMode(recognizer)) {\n return;\n }\n this.beginErrorCondition(recognizer);\n var t = recognizer.getCurrentToken();\n var expecting = this.getExpectedTokens(recognizer);\n var msg = \"missing \" + expecting.toString(recognizer.literalNames, recognizer.symbolicNames) +\n \" at \" + this.getTokenErrorDisplay(t);\n recognizer.notifyErrorListeners(msg, t, null);\n};\n\n//

The default implementation attempts to recover from the mismatched input\n// by using single token insertion and deletion as described below. If the\n// recovery attempt fails, this method throws an\n// {@link InputMismatchException}.

\n//\n//

EXTRA TOKEN (single token deletion)

\n//\n//

{@code LA(1)} is not what we are looking for. If {@code LA(2)} has the\n// right token, however, then assume {@code LA(1)} is some extra spurious\n// token and delete it. Then consume and return the next token (which was\n// the {@code LA(2)} token) as the successful result of the match operation.

\n//\n//

This recovery strategy is implemented by {@link\n// //singleTokenDeletion}.

\n//\n//

MISSING TOKEN (single token insertion)

\n//\n//

If current token (at {@code LA(1)}) is consistent with what could come\n// after the expected {@code LA(1)} token, then assume the token is missing\n// and use the parser's {@link TokenFactory} to create it on the fly. The\n// \"insertion\" is performed by returning the created token as the successful\n// result of the match operation.

\n//\n//

This recovery strategy is implemented by {@link\n// //singleTokenInsertion}.

\n//\n//

EXAMPLE

\n//\n//

For example, Input {@code i=(3;} is clearly missing the {@code ')'}. When\n// the parser returns from the nested call to {@code expr}, it will have\n// call chain:

\n//\n//
\n// stat → expr → atom\n// 
\n//\n// and it will be trying to match the {@code ')'} at this point in the\n// derivation:\n//\n//
\n// => ID '=' '(' INT ')' ('+' atom)* ';'\n// ^\n// 
\n//\n// The attempt to match {@code ')'} will fail when it sees {@code ';'} and\n// call {@link //recoverInline}. To recover, it sees that {@code LA(1)==';'}\n// is in the set of tokens that can follow the {@code ')'} token reference\n// in rule {@code atom}. It can assume that you forgot the {@code ')'}.\n//\nDefaultErrorStrategy.prototype.recoverInline = function(recognizer) {\n // SINGLE TOKEN DELETION\n var matchedSymbol = this.singleTokenDeletion(recognizer);\n if (matchedSymbol !== null) {\n // we have deleted the extra token.\n // now, move past ttype token as if all were ok\n recognizer.consume();\n return matchedSymbol;\n }\n // SINGLE TOKEN INSERTION\n if (this.singleTokenInsertion(recognizer)) {\n return this.getMissingSymbol(recognizer);\n }\n // even that didn't work; must throw the exception\n throw new InputMismatchException(recognizer);\n};\n\n//\n// This method implements the single-token insertion inline error recovery\n// strategy. It is called by {@link //recoverInline} if the single-token\n// deletion strategy fails to recover from the mismatched input. If this\n// method returns {@code true}, {@code recognizer} will be in error recovery\n// mode.\n//\n//

This method determines whether or not single-token insertion is viable by\n// checking if the {@code LA(1)} input symbol could be successfully matched\n// if it were instead the {@code LA(2)} symbol. If this method returns\n// {@code true}, the caller is responsible for creating and inserting a\n// token with the correct type to produce this behavior.

\n//\n// @param recognizer the parser instance\n// @return {@code true} if single-token insertion is a viable recovery\n// strategy for the current mismatched input, otherwise {@code false}\n//\nDefaultErrorStrategy.prototype.singleTokenInsertion = function(recognizer) {\n var currentSymbolType = recognizer.getTokenStream().LA(1);\n // if current token is consistent with what could come after current\n // ATN state, then we know we're missing a token; error recovery\n // is free to conjure up and insert the missing token\n var atn = recognizer._interp.atn;\n var currentState = atn.states[recognizer.state];\n var next = currentState.transitions[0].target;\n var expectingAtLL2 = atn.nextTokens(next, recognizer._ctx);\n if (expectingAtLL2.contains(currentSymbolType) ){\n this.reportMissingToken(recognizer);\n return true;\n } else {\n return false;\n }\n};\n\n// This method implements the single-token deletion inline error recovery\n// strategy. It is called by {@link //recoverInline} to attempt to recover\n// from mismatched input. If this method returns null, the parser and error\n// handler state will not have changed. If this method returns non-null,\n// {@code recognizer} will not be in error recovery mode since the\n// returned token was a successful match.\n//\n//

If the single-token deletion is successful, this method calls\n// {@link //reportUnwantedToken} to report the error, followed by\n// {@link Parser//consume} to actually \"delete\" the extraneous token. Then,\n// before returning {@link //reportMatch} is called to signal a successful\n// match.

\n//\n// @param recognizer the parser instance\n// @return the successfully matched {@link Token} instance if single-token\n// deletion successfully recovers from the mismatched input, otherwise\n// {@code null}\n//\nDefaultErrorStrategy.prototype.singleTokenDeletion = function(recognizer) {\n var nextTokenType = recognizer.getTokenStream().LA(2);\n var expecting = this.getExpectedTokens(recognizer);\n if (expecting.contains(nextTokenType)) {\n this.reportUnwantedToken(recognizer);\n // print(\"recoverFromMismatchedToken deleting \" \\\n // + str(recognizer.getTokenStream().LT(1)) \\\n // + \" since \" + str(recognizer.getTokenStream().LT(2)) \\\n // + \" is what we want\", file=sys.stderr)\n recognizer.consume(); // simply delete extra token\n // we want to return the token we're actually matching\n var matchedSymbol = recognizer.getCurrentToken();\n this.reportMatch(recognizer); // we know current token is correct\n return matchedSymbol;\n } else {\n return null;\n }\n};\n\n// Conjure up a missing token during error recovery.\n//\n// The recognizer attempts to recover from single missing\n// symbols. But, actions might refer to that missing symbol.\n// For example, x=ID {f($x);}. The action clearly assumes\n// that there has been an identifier matched previously and that\n// $x points at that token. If that token is missing, but\n// the next token in the stream is what we want we assume that\n// this token is missing and we keep going. Because we\n// have to return some token to replace the missing token,\n// we have to conjure one up. This method gives the user control\n// over the tokens returned for missing tokens. Mostly,\n// you will want to create something special for identifier\n// tokens. For literals such as '{' and ',', the default\n// action in the parser or tree parser works. It simply creates\n// a CommonToken of the appropriate type. The text will be the token.\n// If you change what tokens must be created by the lexer,\n// override this method to create the appropriate tokens.\n//\nDefaultErrorStrategy.prototype.getMissingSymbol = function(recognizer) {\n var currentSymbol = recognizer.getCurrentToken();\n var expecting = this.getExpectedTokens(recognizer);\n var expectedTokenType = expecting.first(); // get any element\n var tokenText;\n if (expectedTokenType===Token.EOF) {\n tokenText = \"\";\n } else {\n tokenText = \"\";\n }\n var current = currentSymbol;\n var lookback = recognizer.getTokenStream().LT(-1);\n if (current.type===Token.EOF && lookback !== null) {\n current = lookback;\n }\n return recognizer.getTokenFactory().create(current.source,\n expectedTokenType, tokenText, Token.DEFAULT_CHANNEL,\n -1, -1, current.line, current.column);\n};\n\nDefaultErrorStrategy.prototype.getExpectedTokens = function(recognizer) {\n return recognizer.getExpectedTokens();\n};\n\n// How should a token be displayed in an error message? The default\n// is to display just the text, but during development you might\n// want to have a lot of information spit out. Override in that case\n// to use t.toString() (which, for CommonToken, dumps everything about\n// the token). This is better than forcing you to override a method in\n// your token objects because you don't have to go modify your lexer\n// so that it creates a new Java type.\n//\nDefaultErrorStrategy.prototype.getTokenErrorDisplay = function(t) {\n if (t === null) {\n return \"\";\n }\n var s = t.text;\n if (s === null) {\n if (t.type===Token.EOF) {\n s = \"\";\n } else {\n s = \"<\" + t.type + \">\";\n }\n }\n return this.escapeWSAndQuote(s);\n};\n\nDefaultErrorStrategy.prototype.escapeWSAndQuote = function(s) {\n s = s.replace(/\\n/g,\"\\\\n\");\n s = s.replace(/\\r/g,\"\\\\r\");\n s = s.replace(/\\t/g,\"\\\\t\");\n return \"'\" + s + \"'\";\n};\n\n// Compute the error recovery set for the current rule. During\n// rule invocation, the parser pushes the set of tokens that can\n// follow that rule reference on the stack; this amounts to\n// computing FIRST of what follows the rule reference in the\n// enclosing rule. See LinearApproximator.FIRST().\n// This local follow set only includes tokens\n// from within the rule; i.e., the FIRST computation done by\n// ANTLR stops at the end of a rule.\n//\n// EXAMPLE\n//\n// When you find a \"no viable alt exception\", the input is not\n// consistent with any of the alternatives for rule r. The best\n// thing to do is to consume tokens until you see something that\n// can legally follow a call to r//or* any rule that called r.\n// You don't want the exact set of viable next tokens because the\n// input might just be missing a token--you might consume the\n// rest of the input looking for one of the missing tokens.\n//\n// Consider grammar:\n//\n// a : '[' b ']'\n// | '(' b ')'\n// ;\n// b : c '^' INT ;\n// c : ID\n// | INT\n// ;\n//\n// At each rule invocation, the set of tokens that could follow\n// that rule is pushed on a stack. Here are the various\n// context-sensitive follow sets:\n//\n// FOLLOW(b1_in_a) = FIRST(']') = ']'\n// FOLLOW(b2_in_a) = FIRST(')') = ')'\n// FOLLOW(c_in_b) = FIRST('^') = '^'\n//\n// Upon erroneous input \"[]\", the call chain is\n//\n// a -> b -> c\n//\n// and, hence, the follow context stack is:\n//\n// depth follow set start of rule execution\n// 0 a (from main())\n// 1 ']' b\n// 2 '^' c\n//\n// Notice that ')' is not included, because b would have to have\n// been called from a different context in rule a for ')' to be\n// included.\n//\n// For error recovery, we cannot consider FOLLOW(c)\n// (context-sensitive or otherwise). We need the combined set of\n// all context-sensitive FOLLOW sets--the set of all tokens that\n// could follow any reference in the call chain. We need to\n// resync to one of those tokens. Note that FOLLOW(c)='^' and if\n// we resync'd to that token, we'd consume until EOF. We need to\n// sync to context-sensitive FOLLOWs for a, b, and c: {']','^'}.\n// In this case, for input \"[]\", LA(1) is ']' and in the set, so we would\n// not consume anything. After printing an error, rule c would\n// return normally. Rule b would not find the required '^' though.\n// At this point, it gets a mismatched token error and throws an\n// exception (since LA(1) is not in the viable following token\n// set). The rule exception handler tries to recover, but finds\n// the same recovery set and doesn't consume anything. Rule b\n// exits normally returning to rule a. Now it finds the ']' (and\n// with the successful match exits errorRecovery mode).\n//\n// So, you can see that the parser walks up the call chain looking\n// for the token that was a member of the recovery set.\n//\n// Errors are not generated in errorRecovery mode.\n//\n// ANTLR's error recovery mechanism is based upon original ideas:\n//\n// \"Algorithms + Data Structures = Programs\" by Niklaus Wirth\n//\n// and\n//\n// \"A note on error recovery in recursive descent parsers\":\n// http://portal.acm.org/citation.cfm?id=947902.947905\n//\n// Later, Josef Grosch had some good ideas:\n//\n// \"Efficient and Comfortable Error Recovery in Recursive Descent\n// Parsers\":\n// ftp://www.cocolab.com/products/cocktail/doca4.ps/ell.ps.zip\n//\n// Like Grosch I implement context-sensitive FOLLOW sets that are combined\n// at run-time upon error to avoid overhead during parsing.\n//\nDefaultErrorStrategy.prototype.getErrorRecoverySet = function(recognizer) {\n var atn = recognizer._interp.atn;\n var ctx = recognizer._ctx;\n var recoverSet = new IntervalSet();\n while (ctx !== null && ctx.invokingState>=0) {\n // compute what follows who invoked us\n var invokingState = atn.states[ctx.invokingState];\n var rt = invokingState.transitions[0];\n var follow = atn.nextTokens(rt.followState);\n recoverSet.addSet(follow);\n ctx = ctx.parentCtx;\n }\n recoverSet.removeOne(Token.EPSILON);\n return recoverSet;\n};\n\n// Consume tokens until one matches the given token set.//\nDefaultErrorStrategy.prototype.consumeUntil = function(recognizer, set) {\n var ttype = recognizer.getTokenStream().LA(1);\n while( ttype !== Token.EOF && !set.contains(ttype)) {\n recognizer.consume();\n ttype = recognizer.getTokenStream().LA(1);\n }\n};\n\n//\n// This implementation of {@link ANTLRErrorStrategy} responds to syntax errors\n// by immediately canceling the parse operation with a\n// {@link ParseCancellationException}. The implementation ensures that the\n// {@link ParserRuleContext//exception} field is set for all parse tree nodes\n// that were not completed prior to encountering the error.\n//\n//

\n// This error strategy is useful in the following scenarios.

\n//\n//
    \n//
  • Two-stage parsing: This error strategy allows the first\n// stage of two-stage parsing to immediately terminate if an error is\n// encountered, and immediately fall back to the second stage. In addition to\n// avoiding wasted work by attempting to recover from errors here, the empty\n// implementation of {@link BailErrorStrategy//sync} improves the performance of\n// the first stage.
  • \n//
  • Silent validation: When syntax errors are not being\n// reported or logged, and the parse result is simply ignored if errors occur,\n// the {@link BailErrorStrategy} avoids wasting work on recovering from errors\n// when the result will be ignored either way.
  • \n//
\n//\n//

\n// {@code myparser.setErrorHandler(new BailErrorStrategy());}

\n//\n// @see Parser//setErrorHandler(ANTLRErrorStrategy)\n//\nfunction BailErrorStrategy() {\n\tDefaultErrorStrategy.call(this);\n\treturn this;\n}\n\nBailErrorStrategy.prototype = Object.create(DefaultErrorStrategy.prototype);\nBailErrorStrategy.prototype.constructor = BailErrorStrategy;\n\n// Instead of recovering from exception {@code e}, re-throw it wrapped\n// in a {@link ParseCancellationException} so it is not caught by the\n// rule function catches. Use {@link Exception//getCause()} to get the\n// original {@link RecognitionException}.\n//\nBailErrorStrategy.prototype.recover = function(recognizer, e) {\n var context = recognizer._ctx;\n while (context !== null) {\n context.exception = e;\n context = context.parentCtx;\n }\n throw new ParseCancellationException(e);\n};\n\n// Make sure we don't attempt to recover inline; if the parser\n// successfully recovers, it won't throw an exception.\n//\nBailErrorStrategy.prototype.recoverInline = function(recognizer) {\n this.recover(recognizer, new InputMismatchException(recognizer));\n};\n\n// Make sure we don't attempt to recover from problems in subrules.//\nBailErrorStrategy.prototype.sync = function(recognizer) {\n // pass\n};\n\nexports.BailErrorStrategy = BailErrorStrategy;\nexports.DefaultErrorStrategy = DefaultErrorStrategy;\n","// Generated from FHIRPath.g4 by ANTLR 4.7.1\n// jshint ignore: start\nvar antlr4 = require('antlr4/index');\n\n// This class defines a complete listener for a parse tree produced by FHIRPathParser.\nfunction FHIRPathListener() {\n\tantlr4.tree.ParseTreeListener.call(this);\n\treturn this;\n}\n\nFHIRPathListener.prototype = Object.create(antlr4.tree.ParseTreeListener.prototype);\nFHIRPathListener.prototype.constructor = FHIRPathListener;\n\n// Enter a parse tree produced by FHIRPathParser#indexerExpression.\nFHIRPathListener.prototype.enterIndexerExpression = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#indexerExpression.\nFHIRPathListener.prototype.exitIndexerExpression = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#polarityExpression.\nFHIRPathListener.prototype.enterPolarityExpression = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#polarityExpression.\nFHIRPathListener.prototype.exitPolarityExpression = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#additiveExpression.\nFHIRPathListener.prototype.enterAdditiveExpression = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#additiveExpression.\nFHIRPathListener.prototype.exitAdditiveExpression = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#multiplicativeExpression.\nFHIRPathListener.prototype.enterMultiplicativeExpression = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#multiplicativeExpression.\nFHIRPathListener.prototype.exitMultiplicativeExpression = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#unionExpression.\nFHIRPathListener.prototype.enterUnionExpression = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#unionExpression.\nFHIRPathListener.prototype.exitUnionExpression = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#orExpression.\nFHIRPathListener.prototype.enterOrExpression = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#orExpression.\nFHIRPathListener.prototype.exitOrExpression = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#andExpression.\nFHIRPathListener.prototype.enterAndExpression = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#andExpression.\nFHIRPathListener.prototype.exitAndExpression = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#membershipExpression.\nFHIRPathListener.prototype.enterMembershipExpression = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#membershipExpression.\nFHIRPathListener.prototype.exitMembershipExpression = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#inequalityExpression.\nFHIRPathListener.prototype.enterInequalityExpression = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#inequalityExpression.\nFHIRPathListener.prototype.exitInequalityExpression = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#invocationExpression.\nFHIRPathListener.prototype.enterInvocationExpression = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#invocationExpression.\nFHIRPathListener.prototype.exitInvocationExpression = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#equalityExpression.\nFHIRPathListener.prototype.enterEqualityExpression = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#equalityExpression.\nFHIRPathListener.prototype.exitEqualityExpression = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#impliesExpression.\nFHIRPathListener.prototype.enterImpliesExpression = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#impliesExpression.\nFHIRPathListener.prototype.exitImpliesExpression = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#termExpression.\nFHIRPathListener.prototype.enterTermExpression = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#termExpression.\nFHIRPathListener.prototype.exitTermExpression = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#typeExpression.\nFHIRPathListener.prototype.enterTypeExpression = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#typeExpression.\nFHIRPathListener.prototype.exitTypeExpression = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#invocationTerm.\nFHIRPathListener.prototype.enterInvocationTerm = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#invocationTerm.\nFHIRPathListener.prototype.exitInvocationTerm = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#literalTerm.\nFHIRPathListener.prototype.enterLiteralTerm = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#literalTerm.\nFHIRPathListener.prototype.exitLiteralTerm = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#externalConstantTerm.\nFHIRPathListener.prototype.enterExternalConstantTerm = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#externalConstantTerm.\nFHIRPathListener.prototype.exitExternalConstantTerm = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#parenthesizedTerm.\nFHIRPathListener.prototype.enterParenthesizedTerm = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#parenthesizedTerm.\nFHIRPathListener.prototype.exitParenthesizedTerm = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#nullLiteral.\nFHIRPathListener.prototype.enterNullLiteral = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#nullLiteral.\nFHIRPathListener.prototype.exitNullLiteral = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#booleanLiteral.\nFHIRPathListener.prototype.enterBooleanLiteral = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#booleanLiteral.\nFHIRPathListener.prototype.exitBooleanLiteral = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#stringLiteral.\nFHIRPathListener.prototype.enterStringLiteral = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#stringLiteral.\nFHIRPathListener.prototype.exitStringLiteral = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#numberLiteral.\nFHIRPathListener.prototype.enterNumberLiteral = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#numberLiteral.\nFHIRPathListener.prototype.exitNumberLiteral = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#dateTimeLiteral.\nFHIRPathListener.prototype.enterDateTimeLiteral = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#dateTimeLiteral.\nFHIRPathListener.prototype.exitDateTimeLiteral = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#timeLiteral.\nFHIRPathListener.prototype.enterTimeLiteral = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#timeLiteral.\nFHIRPathListener.prototype.exitTimeLiteral = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#quantityLiteral.\nFHIRPathListener.prototype.enterQuantityLiteral = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#quantityLiteral.\nFHIRPathListener.prototype.exitQuantityLiteral = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#externalConstant.\nFHIRPathListener.prototype.enterExternalConstant = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#externalConstant.\nFHIRPathListener.prototype.exitExternalConstant = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#memberInvocation.\nFHIRPathListener.prototype.enterMemberInvocation = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#memberInvocation.\nFHIRPathListener.prototype.exitMemberInvocation = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#functionInvocation.\nFHIRPathListener.prototype.enterFunctionInvocation = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#functionInvocation.\nFHIRPathListener.prototype.exitFunctionInvocation = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#thisInvocation.\nFHIRPathListener.prototype.enterThisInvocation = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#thisInvocation.\nFHIRPathListener.prototype.exitThisInvocation = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#functn.\nFHIRPathListener.prototype.enterFunctn = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#functn.\nFHIRPathListener.prototype.exitFunctn = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#paramList.\nFHIRPathListener.prototype.enterParamList = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#paramList.\nFHIRPathListener.prototype.exitParamList = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#quantity.\nFHIRPathListener.prototype.enterQuantity = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#quantity.\nFHIRPathListener.prototype.exitQuantity = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#unit.\nFHIRPathListener.prototype.enterUnit = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#unit.\nFHIRPathListener.prototype.exitUnit = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#dateTimePrecision.\nFHIRPathListener.prototype.enterDateTimePrecision = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#dateTimePrecision.\nFHIRPathListener.prototype.exitDateTimePrecision = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#pluralDateTimePrecision.\nFHIRPathListener.prototype.enterPluralDateTimePrecision = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#pluralDateTimePrecision.\nFHIRPathListener.prototype.exitPluralDateTimePrecision = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#typeSpecifier.\nFHIRPathListener.prototype.enterTypeSpecifier = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#typeSpecifier.\nFHIRPathListener.prototype.exitTypeSpecifier = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#qualifiedIdentifier.\nFHIRPathListener.prototype.enterQualifiedIdentifier = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#qualifiedIdentifier.\nFHIRPathListener.prototype.exitQualifiedIdentifier = function(ctx) {\n};\n\n\n// Enter a parse tree produced by FHIRPathParser#identifier.\nFHIRPathListener.prototype.enterIdentifier = function(ctx) {\n};\n\n// Exit a parse tree produced by FHIRPathParser#identifier.\nFHIRPathListener.prototype.exitIdentifier = function(ctx) {\n};\n\n\n\nexports.FHIRPathListener = FHIRPathListener;","// This file holds code to hande the FHIRPath Existence functions (5.1 in the\n// specification).\n\nvar util = require(\"./utilities\");\nvar filtering = require(\"./filtering\");\n\nvar engine = {};\nengine.emptyFn = util.isEmpty;\n\nengine.notFn = function(x) {\n return (x.length === 1 && typeof x[0] === 'boolean') ? !x[0] : [];\n};\n\nengine.existsMacro = function(coll, expr) {\n var vec = coll;\n if (expr) {\n return engine.existsMacro(filtering.whereMacro(coll, expr));\n }\n return !util.isEmpty(vec);\n};\n\nengine.allMacro = function(coll, expr) {\n for (let i=0, len=coll.length; i {\n const v = value[key];\n o[key] = sortObjByKey(v);\n return o;\n }, {})\n ) :\n value;\n}\n\n\n/**\n * Returns true if coll1 is a subset of coll2.\n */\nfunction subsetOf(coll1, coll2) {\n let rtn = coll1.length <= coll2.length;\n if (rtn) {\n // This requires a deep-equals comparision of every object in coll1,\n // against each object in coll2.\n // Optimize by building a hashmap of JSON versions of the objects.\n var c2Hash = {};\n for (let p=0, pLen=coll1.length; p 0) {\n let uniqueHash = {};\n for (let i=0, len=x.length; i string.\n var s = \"\" + (+x);\n var match = /(\\d+)(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/.exec(s);\n // NaN or Infinity or integer.\n // We arbitrarily decide that Infinity is integral.\n if (!match) { return 0; }\n // Count the number of digits in the fraction and subtract the\n // exponent to simulate moving the decimal point left by exponent places.\n // 1.234e+2 has 1 fraction digit and '234'.length - 2 == 1\n // 1.234e-2 has 5 fraction digit and '234'.length - -2 == 5\n //var wholeNum = match[1];\n var fraction = match[2];\n var exponent = match[3];\n return Math.max(\n 0, // lower limit.\n (fraction == '0' ? 0 : (fraction || '').length) // fraction length\n - (exponent || 0)); // exponent\n}\n\n\n/**\n * The smallest representable number in FHIRPath.\n */\nconst PRECISION_STEP = 1e-8;\n\n/**\n * Rounds a number to the nearest multiple of PRECISION_STEP.\n */\nfunction roundToMaxPrecision(x) {\n return Math.round(x/PRECISION_STEP)*PRECISION_STEP;\n}\n\n\n/**\n * Rounds a number to the specified number of decimal places.\n * @param x the decimal number to be rounded\n * @param n the (maximum) number of decimal places to preserve. (The result\n * could contain fewer if the decimal digits in x contain zeros).\n */\nfunction roundToDecimalPlaces(x, n) {\n var scale = Math.pow(10, n);\n return Math.round(x*scale)/scale;\n}\n\nvar deepEqual = function (actual, expected, opts) {\n if (!opts) opts = {};\n\n // 7.1. All identical values are equivalent, as determined by ===.\n if (actual === expected) {\n return true;\n }\n\n if (opts.fuzzy) {\n if(isString(actual) && isString(expected)) {\n return normalizeStr(actual) == normalizeStr(expected);\n }\n\n if(Number.isInteger(actual) && Number.isInteger(expected)) {\n return actual === expected;\n }\n\n if(isNumber(actual) && isNumber(expected)) {\n var prec = Math.min(decimalPlaces(actual), decimalPlaces(expected));\n if(prec === 0){\n return Math.round(actual) === Math.round(expected);\n } else {\n // Note: Number.parseFloat(0.00000011).toPrecision(7) === \"1.100000e-7\"\n // It does # of significant digits, not decimal places.\n return roundToDecimalPlaces(actual, prec) ===\n roundToDecimalPlaces(expected, prec);\n }\n }\n }\n else { // !opts.fuzzy\n // If these are numbers, they need to be rounded to the maximum supported\n // precision to remove floating point arithmetic errors (e.g. 0.1+0.1+0.1 should\n // equal 0.3) before comparing.\n if (typeof actual === 'number' && typeof expected === 'number') {\n return roundToMaxPrecision(actual) === roundToMaxPrecision(expected);\n }\n }\n\n if (actual instanceof Date && expected instanceof Date) {\n return actual.getTime() === expected.getTime();\n\n // 7.3. Other pairs that do not both pass typeof value == 'object',\n // equivalence is determined by ==.\n } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {\n return opts.strict ? actual === expected : actual == expected;\n\n // 7.4. For all other Object pairs, including Array objects, equivalence is\n // determined by having the same number of owned properties (as verified\n // with Object.prototype.hasOwnProperty.call), the same set of keys\n // (although not necessarily the same order), equivalent values for every\n // corresponding key, and an identical 'prototype' property. Note: this\n // accounts for both named and indexed properties on Arrays.\n } else {\n return objEquiv(actual, expected, opts);\n }\n};\n\nfunction isUndefinedOrNull(value) {\n return value === null || value === undefined;\n}\n\nfunction objEquiv(a, b, opts) {\n var i, key;\n if (isUndefinedOrNull(a) || isUndefinedOrNull(b))\n return false;\n // an identical 'prototype' property.\n if (a.prototype !== b.prototype) return false;\n //~~~I've managed to break Object.keys through screwy arguments passing.\n // Converting to array solves the problem.\n if(isArguments(a) || isArguments(b)) {\n a = isArguments(a) ? pSlice.call(a) : a;\n b = isArguments(b) ? pSlice.call(b) : b;\n return deepEqual(a, b, opts);\n }\n try {\n var ka = objectKeys(a), kb = objectKeys(b);\n } catch (e) {//happens when one is a string literal and the other isn't\n return false;\n }\n // having the same number of owned properties (keys incorporates\n // hasOwnProperty)\n if (ka.length != kb.length)\n return false;\n //the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n //~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i])\n return false;\n }\n //equivalent values for every corresponding key, and\n //~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!deepEqual(a[key], b[key], opts)) return false;\n }\n return typeof a === typeof b;\n}\n\nmodule.exports = deepEqual;\n\n// The license for node-deep-equal, on which the above code is based, is as\n// follows:\n//\n// This software is released under the MIT license:\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n","/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = 38;","const applyProfile = (resource, profile) => {\n if (profile) {\n resource.meta = resource.meta || {};\n resource.meta.profile = resource.meta.profile || [];\n resource.meta.profile.unshift(profile); // ensure this profile is first in the list\n }\n return resource;\n};\n\nmodule.exports = {applyProfile};\n","const mappers = require('./mapping/mappers');\nconst utils = require('./utils');\nconst exps = require('./mapping/mapper');\nmodule.exports = {...exps, mappers,utils};\n\n","const syntheaToV05 = require('./syntheaToV05');\n\nmodule.exports = {\n syntheaToV05\n};\n","const { buildMappers } = require('../mapper');\nconst {applyProfile} = require('../../utils');\n\nconst DEFAULT_PROFILE = {\n 'Patient': 'http://hl7.org/fhir/us/fhirURL/StructureDefinition/shr-entity-Patient',\n 'Observation': 'http://hl7.org/fhir/us/fhirURL/StructureDefinition/shr-base-Observation', // TODO: see also NonLaboratoryObservation & descendents, LaboratoryObservation, etc????\n 'Encounter': 'http://hl7.org/fhir/us/fhirURL/StructureDefinition/shr-encounter-Encounter',\n 'Condition': 'http://example.com/shr-base-ConditionPresentAssertion',\n 'Procedure': 'http://example.com/shr-procedure-ProcedurePerformed',\n 'Organization': 'http://example.com/shr-entity-Organization',\n 'Practitioner': 'http://example.com/shr-entity-Practitioner',\n\n // 'MedicationRequest': 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-medicationrequest', // TODO: this is a us-core so there's no ES6 object for it... MedicationRequested?\n\n // no mappings for any of these\n // 'DiagnosticReport': '', // note: Panel is based on Observation\n // 'Claim': '',\n // 'ExplanationOfBenefit': '',\n // 'CarePlan': '',\n // 'Goal': '',\n // 'Immunization': '',\n};\n\nconst resourceMapping = {\n filter: () => true,\n default: (resource) => applyProfile(resource, DEFAULT_PROFILE[resource.resourceType]),\n mappers: [\n {\n filter: \"Condition.code.coding.where($this.code = '93761005' or $this.code = '94260004')\",\n exec: (resource) => applyProfile(resource, 'http://hl7.org/fhir/us/fhirURL/StructureDefinition/oncocore-CancerDisorderPresent')\n },\n {\n filter: \"Procedure.code.coding.where($this.code = '703423002')\",\n exec: (resource) => applyProfile(resource, 'http://hl7.org/fhir/us/fhirURL/StructureDefinition/oncocore-RadiationProcedurePerformed')\n }\n ]\n};\n\nmodule.exports = buildMappers(resourceMapping);\n","// This is fhirpath interpreter\n// everything starts at evaluate function,\n// which is passed fhirpath AST and resource.\n//\n// We reduce/eval recursively each node in AST\n// passing the context and current data\n//\n// each AST node has eval function, which should be registered in evalTable\n// and named after node type\n// if node needs to eval father it's children it has to call `doEval` function\n//\n// most of nodes do function or operator invocation at the end\n//\n// For invocation's and operator's there is one lookup table -\n// invocationTable and two helper functions doInvoke and infixInvoke for\n// operators\n// 1. operator or function is looked up in table\n// 2. using signature (in .arity property) unpack parameters\n// 3. check params types\n// 4. do call function\n// 5. wrap result by util.arraify\n//\n// if function is nullable\n// and one of parameters is empty/null - function will not be invoked and empty\n// result returned\n//\n// Not solved problem is overloading functions by types - for example + operator defined\n// for strings and numbers\n// we can make dispatching params type dependent - let see\n\nconst parser = require(\"./parser\");\nconst util = require(\"./utilities\");\n\nlet engine = {}; // the object with all FHIRPath functions and operations\nlet existence = require(\"./existence\");\nlet filtering = require(\"./filtering\");\nlet combining = require(\"./combining\");\nlet misc = require(\"./misc\");\nlet equality = require(\"./equality\");\nlet collections = require(\"./collections\");\nlet math = require(\"./math\");\nlet strings = require(\"./strings\");\nlet navigation= require(\"./navigation\");\nlet datetime = require(\"./datetime\");\nlet logic = require(\"./logic\");\n\n// * fn: handler\n// * arity: is index map with type signature\n// if type is in array (like [Boolean]) - this means\n// function accepts value of this type or empty value {}\n// * nullable - means propagate empty result, i.e. instead\n// calling function if one of params is empty return empty\n\nengine.invocationTable = {\n empty: {fn: existence.emptyFn},\n not: {fn: existence.notFn},\n exists: {fn: existence.existsMacro, arity: {0: [], 1: [\"Expr\"]}},\n all: {fn: existence.allMacro, arity: {1: [\"Expr\"]}},\n allTrue: {fn: existence.allTrueFn},\n anyTrue: {fn: existence.anyTrueFn},\n allFalse: {fn: existence.allFalseFn},\n anyFalse: {fn: existence.anyFalseFn},\n subsetOf: {fn: existence.subsetOfFn, arity: {1: [\"AnyAtRoot\"]}},\n supersetOf: {fn: existence.supersetOfFn, arity: {1: [\"AnyAtRoot\"]}},\n isDistinct: {fn: existence.isDistinctFn},\n distinct: {fn: existence.distinctFn},\n count: {fn: existence.countFn},\n where: {fn: filtering.whereMacro, arity: {1: [\"Expr\"]}},\n select: {fn: filtering.selectMacro, arity: {1: [\"Expr\"]}},\n single: {fn: filtering.singleFn},\n first: {fn: filtering.firstFn},\n last: {fn: filtering.lastFn},\n ofType: {fn: filtering.ofTypeFn, arity: {1: [\"Identifier\"]}},\n tail: {fn: filtering.tailFn},\n take: {fn: filtering.takeFn, arity: {1: [\"Integer\"]}},\n skip: {fn: filtering.skipFn, arity: {1: [\"Integer\"]}},\n combine: {fn: combining.combineFn, arity: {1: [\"AnyAtRoot\"]}},\n iif: {fn: misc.iifMacro, arity: {3: [\"Expr\", \"Expr\", \"Expr\"]}},\n trace: {fn: misc.traceFn, arity: {0: [], 1: [\"String\"]}},\n toInteger: {fn: misc.toInteger},\n toDecimal: {fn: misc.toDecimal},\n toString: {fn: misc.toString},\n\n indexOf: {fn: strings.indexOf, arity: {1: [\"String\"]}},\n substring: {fn: strings.substring, arity: {1: [\"Integer\"], 2: [\"Integer\",\"Integer\"]}},\n startsWith: {fn: strings.startsWith, arity: {1: [\"String\"]}},\n endsWith: {fn: strings.endsWith, arity: {1: [\"String\"]}},\n contains: {fn: strings.containsFn, arity: {1: [\"String\"]}},\n replace: {fn: strings.replace, arity: {2: [\"String\", \"String\"]}},\n matches: {fn: strings.matches, arity: {1: [\"String\"]}},\n replaceMatches: {fn: strings.replaceMatches, arity: {2: [\"String\", \"String\"]}},\n length: {fn: strings.length },\n\n now: {fn: datetime.now },\n today: {fn: datetime.today },\n\n repeat: {fn: filtering.repeatMacro, arity: {1: [\"Expr\"]}},\n children: {fn: navigation.children },\n descendants: {fn: navigation.descendants },\n\n \"|\": {fn: combining.unionOp, arity: {2: [\"Any\", \"Any\"]}},\n \"=\": {fn: equality.equal, arity: {2: [\"Any\", \"Any\"]}, nullable: true},\n \"!=\": {fn: equality.unequal, arity: {2: [\"Any\", \"Any\"]}, nullable: true},\n \"~\": {fn: equality.equival, arity: {2: [\"Any\", \"Any\"]}},\n \"!~\": {fn: equality.unequival, arity: {2: [\"Any\", \"Any\"]}},\n \"<\": {fn: equality.lt, arity: {2: [\"Any\", \"Any\"]}, nullable: true},\n \">\": {fn: equality.gt, arity: {2: [\"Any\", \"Any\"]}, nullable: true},\n \"<=\": {fn: equality.lte, arity: {2: [\"Any\", \"Any\"]}, nullable: true},\n \">=\": {fn: equality.gte, arity: {2: [\"Any\", \"Any\"]}, nullable: true},\n \"containsOp\": {fn: collections.contains, arity: {2: [\"Any\", \"Any\"]}},\n \"inOp\": {fn: collections.in, arity: {2: [\"Any\", \"Any\"]}},\n \"&\": {fn: math.amp, arity: {2: [\"String\", \"String\"]}},\n \"+\": {fn: math.plus, arity: {2: [\"Any\", \"Any\"]}, nullable: true},\n \"-\": {fn: math.minus, arity: {2: [\"Number\", \"Number\"]}, nullable: true},\n \"*\": {fn: math.mul, arity: {2: [\"Number\", \"Number\"]}, nullable: true},\n \"/\": {fn: math.div, arity: {2: [\"Number\", \"Number\"]}, nullable: true},\n \"mod\": {fn: math.mod, arity: {2: [\"Number\", \"Number\"]}, nullable: true},\n \"div\": {fn: math.intdiv, arity: {2: [\"Number\", \"Number\"]}, nullable: true},\n\n \"or\": {fn: logic.orOp, arity: {2: [[\"Boolean\"], [\"Boolean\"]]}},\n \"and\": {fn: logic.andOp, arity: {2: [[\"Boolean\"], [\"Boolean\"]]}},\n \"xor\": {fn: logic.xorOp, arity: {2: [[\"Boolean\"], [\"Boolean\"]]}},\n \"implies\": {fn: logic.impliesOp, arity: {2: [[\"Boolean\"], [\"Boolean\"]]}},\n};\n\nengine.InvocationExpression = function(ctx, parentData, node) {\n return node.children.reduce(function(acc, ch) {\n return engine.doEval(ctx, acc, ch);\n }, parentData);\n};\n\nengine.TermExpression = function(ctx, parentData, node) {\n return engine.doEval(ctx,parentData, node.children[0]);\n};\n\nengine.ExternalConstantTerm = function(ctx, parentData, node) {\n var extConstant = node.children[0];\n var identifier = extConstant.children[0];\n var varName = engine.Identifier(ctx, parentData, identifier)[0];\n var value = ctx.vars[varName];\n // For convenience, we all variable values to be passed in without their array\n // wrapper. However, when evaluating, we need to put the array back in.\n return value === undefined ? [] : value instanceof Array ? value : [value];\n};\n\nengine.LiteralTerm = function(ctx, parentData, node) {\n var term = node.children[0];\n if(term){\n return engine.doEval(ctx, parentData, term);\n } else {\n return [node.text];\n }\n};\n\nengine.StringLiteral = function(ctx, parentData, node) {\n return [node.text.replace(/(^['\"]|['\"]$)/g, \"\")];\n};\n\nengine.BooleanLiteral = function(ctx, parentData, node) {\n if(node.text === \"true\") {\n return [true];\n } else {\n return [false];\n }\n};\n\nengine.NumberLiteral = function(ctx, parentData, node) {\n return [Number(node.text)];\n};\n\nengine.Identifier = function(ctx, parentData, node) {\n return [node.text.replace(/(^\"|\"$)/g, \"\")];\n};\n\nengine.InvocationTerm = function(ctx, parentData, node) {\n return engine.doEval(ctx,parentData, node.children[0]);\n};\n\nengine.MemberInvocation = function(ctx, parentData ,node ) {\n const key = engine.doEval(ctx, parentData, node.children[0])[0];\n\n if (parentData) {\n if(util.isCapitalized(key)) {\n return parentData.filter(function(x) { return x.resourceType === key; });\n } else {\n return parentData.reduce(function(acc, res) {\n var toAdd = res[key];\n if(util.isSome(toAdd)) {\n if(Array.isArray(toAdd)) {\n // replace with array modification\n acc = acc.concat(toAdd);\n } else {\n acc.push(toAdd);\n }\n return acc;\n } else {\n return acc;\n }\n }, []);\n }\n } else {\n return [];\n }\n};\n\nengine.IndexerExpression = function(ctx, parentData, node) {\n const coll_node = node.children[0];\n const idx_node = node.children[1];\n var coll = engine.doEval(ctx, parentData, coll_node);\n var idx = engine.doEval(ctx, parentData, idx_node);\n\n if(util.isEmpty(idx)) {\n return [];\n }\n\n var idxNum = parseInt(idx[0]);\n if(coll && util.isSome(idxNum) && coll.length>idxNum && idxNum>=0) {\n return [coll[idxNum]];\n } else {\n return [];\n }\n};\n\nengine.Functn = function(ctx, parentData, node) {\n return node.children.map(function(x) {\n return engine.doEval(ctx, parentData, x);\n });\n};\n\nengine.realizeParams = function(ctx, parentData, args) {\n if(args && args[0] && args[0].children) {\n return args[0].children.map(function(x) {\n return engine.doEval(ctx, parentData, x);\n });\n } else {\n return [];\n }\n};\n\nconst paramTable = {\n \"Integer\": function(val){\n if(typeof val !== \"number\" || !Number.isInteger(val)){\n throw new Error(\"Expected integer, got: \" + JSON.stringify(val));\n }\n return val;\n },\n \"Boolean\": function(val){\n if(val === true || val === false){\n return val;\n }\n throw new Error(\"Expected boolean, got: \" + JSON.stringify(val));\n },\n \"Number\": function(val){\n if(typeof val !== \"number\"){\n throw new Error(\"Expected number, got: \" + JSON.stringify(val));\n }\n return val;\n },\n \"String\": function(val){\n if(typeof val !== \"string\"){\n throw new Error(\"Expected string, got: \" + JSON.stringify(val));\n }\n return val;\n }\n};\n\nfunction makeParam(ctx, parentData, type, param) {\n // this is hack for $this\n ctx.currentData = parentData;\n if(type === \"Expr\"){\n return function(data) {\n return engine.doEval(ctx, util.arraify(data), param);\n };\n }\n if(type === \"AnyAtRoot\"){\n return engine.doEval(ctx, ctx.dataRoot, param);\n }\n if(type === \"Identifier\"){\n if(param.type == \"TermExpression\"){\n return param.text;\n } else {\n throw new Error(\"Expected identifier node, got \", JSON.stringify(param));\n }\n }\n var res = engine.doEval(ctx, parentData, param);\n if(type === \"Any\") {\n return res;\n }\n if(Array.isArray(type)){\n if(res.length == 0){\n return [];\n } else {\n type = type[0];\n }\n }\n var maker = paramTable[type];\n if(res.length > 1){\n throw new Error(\"Unexpected collection\" + JSON.stringify(res) +\n \"; expected singleton of type \" + type);\n }\n if(res.length == 0){\n return [];\n } else if(maker){\n return maker(res[0]);\n } else {\n console.error(type, param);\n throw new Error(\"IMPL me for \" + type);\n }\n}\n\nfunction doInvoke(ctx, fnName, data, rawParams){\n var invoc = engine.invocationTable[fnName];\n var res;\n if(invoc) {\n if(!invoc.arity){\n if(!rawParams){\n res = invoc.fn.call(ctx, util.arraify(data));\n return util.arraify(res);\n } else {\n throw new Error(fnName + \" expects no params\");\n }\n } else {\n var paramsNumber = rawParams ? rawParams.length : 0;\n var argTypes = invoc.arity[paramsNumber];\n if(argTypes){\n var params = [];\n for(var i = 0; i < paramsNumber; i++){\n var tp = argTypes[i];\n var pr = rawParams[i];\n params.push(makeParam(ctx, data, tp, pr));\n }\n params.unshift(data);\n if(invoc.nullable) {\n if(params.some(isNullable)){\n return [];\n }\n }\n res = invoc.fn.apply(ctx, params);\n return util.arraify(res);\n } else {\n console.log(fnName + \" wrong arity: got \" + paramsNumber );\n return [];\n }\n }\n } else {\n throw new Error(\"Not implemented: \" + fnName);\n }\n}\nfunction isNullable(x) {\n var res = x=== null || x=== undefined || util.isEmpty(x);\n return res;\n}\n\nfunction infixInvoke(ctx, fnName, data, rawParams){\n var invoc = engine.invocationTable[fnName];\n if(invoc && invoc.fn) {\n var paramsNumber = rawParams ? rawParams.length : 0;\n if(paramsNumber != 2) { throw new Error(\"Infix invoke should have arity 2\"); }\n var argTypes = invoc.arity[paramsNumber];\n if(argTypes){\n var params = [];\n for(var i = 0; i < paramsNumber; i++){\n var tp = argTypes[i];\n var pr = rawParams[i];\n params.push(makeParam(ctx, data, tp, pr));\n }\n if(invoc.nullable) {\n if(params.some(isNullable)){\n return [];\n }\n }\n var res = invoc.fn.apply(ctx, params);\n return util.arraify(res);\n } else {\n console.log(fnName + \" wrong arity: got \" + paramsNumber );\n return [];\n }\n } else {\n throw new Error(\"Not impl \" + fnName);\n }\n}\n\nengine.FunctionInvocation = function(ctx, parentData, node) {\n var args = engine.doEval(ctx, parentData, node.children[0]);\n const fnName = args[0];\n args.shift();\n var rawParams = args && args[0] && args[0].children;\n return doInvoke(ctx, fnName, parentData, rawParams);\n};\n\nengine.ParamList = function(ctx, parentData, node) {\n // we do not eval param list because sometimes it should be passed as\n // lambda/macro (for example in case of where(...)\n return node;\n};\n\n\nengine.UnionExpression = function(ctx, parentData, node) {\n return infixInvoke(ctx, '|', parentData, node.children);\n};\n\nengine.ThisInvocation = function(ctx) {\n return util.arraify(ctx.currentData);\n};\n\nengine.OpExpression = function(ctx, parentData, node) {\n var op = node.terminalNodeText[0];\n return infixInvoke(ctx, op, parentData, node.children);\n};\n\nengine.AliasOpExpression = function(map){\n return function(ctx, parentData, node) {\n var op = node.terminalNodeText[0];\n var alias = map[op];\n if(!alias) { throw new Error(\"Do not know how to alias \" + op + \" by \" + JSON.stringify(map)); }\n return infixInvoke(ctx, alias, parentData, node.children);\n };\n};\n\nengine.NullLiteral = function() {\n return [];\n};\n\nengine.ParenthesizedTerm = function(ctx, parentData, node) {\n return engine.doEval(ctx, parentData, node.children[0]);\n};\n\n\nengine.evalTable = { // not every evaluator is listed if they are defined on engine\n BooleanLiteral: engine.BooleanLiteral,\n EqualityExpression: engine.OpExpression,\n FunctionInvocation: engine.FunctionInvocation,\n Functn: engine.Functn,\n Identifier: engine.Identifier,\n IndexerExpression: engine.IndexerExpression,\n InequalityExpression: engine.OpExpression,\n InvocationExpression: engine.InvocationExpression,\n AdditiveExpression: engine.OpExpression,\n MultiplicativeExpression: engine.OpExpression,\n MembershipExpression: engine.AliasOpExpression({\"contains\": \"containsOp\", \"in\": \"inOp\"}),\n NullLiteral: engine.NullLiteral,\n InvocationTerm: engine.InvocationTerm,\n LiteralTerm: engine.LiteralTerm,\n MemberInvocation: engine.MemberInvocation,\n NumberLiteral: engine.NumberLiteral,\n ParamList: engine.ParamList,\n ParenthesizedTerm: engine.ParenthesizedTerm,\n StringLiteral: engine.StringLiteral,\n TermExpression: engine.TermExpression,\n ThisInvocation: engine.ThisInvocation,\n UnionExpression: engine.UnionExpression,\n OrExpression: engine.OpExpression,\n ImpliesExpression: engine.OpExpression,\n AndExpression: engine.OpExpression,\n XorExpression: engine.OpExpression\n};\n\n\nengine.doEval = function(ctx, parentData, node) {\n const evaluator = engine.evalTable[node.type] || engine[node.type];\n if(evaluator){\n return evaluator.call(engine, ctx, parentData, node);\n } else {\n throw new Error(\"No \" + node.type + \" evaluator \");\n }\n};\n\nvar parse = function(path) {\n return parser.parse(path);\n};\n\n\n/**\n * Applies the given parsed FHIRPath expression to the given resource,\n * returning the result of doEval.\n * @param {(object|object[])} resource - FHIR resource, bundle as js object or array of resources\n * @param {string} parsedPath - fhirpath expression, sample 'Patient.name.given'\n * @param {object} context - a hash of variable name/value pairs.\n */\nfunction applyParsedPath(resource, parsedPath, context) {\n let dataRoot = util.arraify(resource);\n // doEval takes a \"ctx\" object, and we store things in that as we parse, so we\n // need to put user-provided variable data in a sub-object, ctx.vars.\n // Set up default standard variables, and allow override from the variables.\n // However, we'll keep our own copy of dataRoot for internal processing.\n let vars = {context: resource, ucum: 'http://unitsofmeasure.org'};\n let ctx = {dataRoot, vars: Object.assign(vars, context)};\n return engine.doEval(ctx, dataRoot, parsedPath.children[0]);\n}\n\n/**\n * Evaluates the \"path\" FHIRPath expression on the given resource, using data\n * from \"context\" for variables mentioned in the \"path\" expression.\n * @param {(object|object[])} resource - FHIR resource, bundle as js object or array of resources\n * @param {string} path - fhirpath expression, sample 'Patient.name.given'\n * @param {object} context - a hash of variable name/value pairs.\n */\nvar evaluate = function(resource, path, context) {\n const node = parser.parse(path);\n return applyParsedPath(resource, node, context);\n};\n\n/**\n * Returns a function that takes a resource and returns the result of\n * evaluating the given FHIRPath expression on that resource. The advantage\n * of this function over \"evaluate\" is that if you have multiple resources,\n * the given FHIRPath expression will only be parsed once.\n * @param path the FHIRPath expression to be parsed.\n * @param {object} context - a hash of variable name/value pairs.\n */\nvar compile = function(path, context) {\n const node = parse(path);\n return function(resource) {\n return applyParsedPath(resource, node, context);\n };\n};\n\nmodule.exports = {\n parse: parse,\n compile: compile,\n evaluate: evaluate\n};\n","const antlr4 = require(\"antlr4\");\nconst Lexer = require(\"./generated/FHIRPathLexer\").FHIRPathLexer;\nconst Parser = require(\"./generated/FHIRPathParser\").FHIRPathParser;\nconst Listener = require(\"./generated/FHIRPathListener\").FHIRPathListener;\n\n\nvar ErrorListener = function(errors) {\n antlr4.error.ErrorListener.call(this);\n this.errors = errors;\n return this;\n};\n\nErrorListener.prototype = Object.create(antlr4.error.ErrorListener.prototype);\nErrorListener.prototype.constructor = ErrorListener;\nErrorListener.prototype.syntaxError = function(rec, sym, line, col, msg, e) {\n this.errors.push([rec, sym, line, col, msg, e]);\n};\n\nvar parse = function(path){\n var chars = new antlr4.InputStream(path);\n var lexer = new Lexer(chars);\n\n var tokens = new antlr4.CommonTokenStream(lexer);\n\n\n var parser = new Parser(tokens);\n parser.buildParseTrees = true;\n var errors = [];\n var listener = new ErrorListener(errors);\n\n lexer.removeErrorListeners();\n lexer.addErrorListener(listener);\n parser.removeErrorListeners();\n parser.addErrorListener(listener);\n\n var tree = parser.expression();\n\n function PathListener() {\n Listener.call(this); // inherit default listener\n return this;\n }\n // inherit default listener\n PathListener.prototype = Object.create(Listener.prototype);\n PathListener.prototype.constructor = PathListener;\n\n var ast = {};\n var node;\n var parentStack = [ast];\n for (let p of Object.keys(Listener.prototype)) {\n if (p.startsWith(\"enter\")) {\n PathListener.prototype[p] = function(ctx) {\n let parentNode = parentStack[parentStack.length - 1];\n let nodeType = p.slice(5); // remove \"enter\"\n node = {type: nodeType};\n node.text = ctx.getText();\n if (!parentNode.children)\n parentNode.children = [];\n parentNode.children.push(node);\n parentStack.push(node);\n // Also collect this node's terminal nodes, if any. Terminal nodes are\n // not walked with the rest of the tree, but include things like \"+\" and\n // \"-\", which we need.\n node.terminalNodeText = [];\n for (let c of ctx.children) {\n // Test for node type \"TerminalNodeImpl\". Minimized code no longer\n // has the original function names, so we can't rely on\n // c.constructor.name. It appears the TerminalNodeImpl is the only\n // node with a \"symbol\" property, so test for that.\n if (c.symbol)\n node.terminalNodeText.push(c.getText());\n }\n };\n }\n else if (p.startsWith(\"exit\")) {\n PathListener.prototype[p] = function() {\n parentStack.pop();\n };\n }\n }\n\n var printer = new PathListener();\n antlr4.tree.ParseTreeWalker.DEFAULT.walk(printer, tree);\n\n if (errors.length > 0) {\n let errMsgs = [];\n for (let i=0, len=errors.length; ii leads to a semantic predicate before matching a symbol, the\n// element at index i of the result will be {@code null}.\n//\n// @param s the ATN state\n// @return the expected symbols for each outgoing transition of {@code s}.\n///\nLL1Analyzer.prototype.getDecisionLookahead = function(s) {\n if (s === null) {\n return null;\n }\n var count = s.transitions.length;\n var look = [];\n for(var alt=0; alt< count; alt++) {\n look[alt] = new IntervalSet();\n var lookBusy = new Set();\n var seeThruPreds = false; // fail to get lookahead upon pred\n this._LOOK(s.transition(alt).target, null, PredictionContext.EMPTY,\n look[alt], lookBusy, new BitSet(), seeThruPreds, false);\n // Wipe out lookahead for this alternative if we found nothing\n // or we had a predicate when we !seeThruPreds\n if (look[alt].length===0 || look[alt].contains(LL1Analyzer.HIT_PRED)) {\n look[alt] = null;\n }\n }\n return look;\n};\n\n//*\n// Compute set of tokens that can follow {@code s} in the ATN in the\n// specified {@code ctx}.\n//\n//

If {@code ctx} is {@code null} and the end of the rule containing\n// {@code s} is reached, {@link Token//EPSILON} is added to the result set.\n// If {@code ctx} is not {@code null} and the end of the outermost rule is\n// reached, {@link Token//EOF} is added to the result set.

\n//\n// @param s the ATN state\n// @param stopState the ATN state to stop at. This can be a\n// {@link BlockEndState} to detect epsilon paths through a closure.\n// @param ctx the complete parser context, or {@code null} if the context\n// should be ignored\n//\n// @return The set of tokens that can follow {@code s} in the ATN in the\n// specified {@code ctx}.\n///\nLL1Analyzer.prototype.LOOK = function(s, stopState, ctx) {\n var r = new IntervalSet();\n var seeThruPreds = true; // ignore preds; get all lookahead\n\tctx = ctx || null;\n var lookContext = ctx!==null ? predictionContextFromRuleContext(s.atn, ctx) : null;\n this._LOOK(s, stopState, lookContext, r, new Set(), new BitSet(), seeThruPreds, true);\n return r;\n};\n\n//*\n// Compute set of tokens that can follow {@code s} in the ATN in the\n// specified {@code ctx}.\n//\n//

If {@code ctx} is {@code null} and {@code stopState} or the end of the\n// rule containing {@code s} is reached, {@link Token//EPSILON} is added to\n// the result set. If {@code ctx} is not {@code null} and {@code addEOF} is\n// {@code true} and {@code stopState} or the end of the outermost rule is\n// reached, {@link Token//EOF} is added to the result set.

\n//\n// @param s the ATN state.\n// @param stopState the ATN state to stop at. This can be a\n// {@link BlockEndState} to detect epsilon paths through a closure.\n// @param ctx The outer context, or {@code null} if the outer context should\n// not be used.\n// @param look The result lookahead set.\n// @param lookBusy A set used for preventing epsilon closures in the ATN\n// from causing a stack overflow. Outside code should pass\n// {@code new Set} for this argument.\n// @param calledRuleStack A set used for preventing left recursion in the\n// ATN from causing a stack overflow. Outside code should pass\n// {@code new BitSet()} for this argument.\n// @param seeThruPreds {@code true} to true semantic predicates as\n// implicitly {@code true} and \"see through them\", otherwise {@code false}\n// to treat semantic predicates as opaque and add {@link //HIT_PRED} to the\n// result if one is encountered.\n// @param addEOF Add {@link Token//EOF} to the result if the end of the\n// outermost context is reached. This parameter has no effect if {@code ctx}\n// is {@code null}.\n///\nLL1Analyzer.prototype._LOOK = function(s, stopState , ctx, look, lookBusy, calledRuleStack, seeThruPreds, addEOF) {\n var c = new ATNConfig({state:s, alt:0, context: ctx}, null);\n if (lookBusy.contains(c)) {\n return;\n }\n lookBusy.add(c);\n if (s === stopState) {\n if (ctx ===null) {\n look.addOne(Token.EPSILON);\n return;\n } else if (ctx.isEmpty() && addEOF) {\n look.addOne(Token.EOF);\n return;\n }\n }\n if (s instanceof RuleStopState ) {\n if (ctx ===null) {\n look.addOne(Token.EPSILON);\n return;\n } else if (ctx.isEmpty() && addEOF) {\n look.addOne(Token.EOF);\n return;\n }\n if (ctx !== PredictionContext.EMPTY) {\n // run thru all possible stack tops in ctx\n for(var i=0; iWe track these variables separately for the DFA and ATN simulation\n// because the DFA simulation often has to fail over to the ATN\n// simulation. If the ATN simulation fails, we need the DFA to fall\n// back to its previously accepted state, if any. If the ATN succeeds,\n// then the ATN does the accept and the DFA simulator that invoked it\n// can simply return the predicted token type.

\n///\n\nvar Token = require('./../Token').Token;\nvar Lexer = require('./../Lexer').Lexer;\nvar ATN = require('./ATN').ATN;\nvar ATNSimulator = require('./ATNSimulator').ATNSimulator;\nvar DFAState = require('./../dfa/DFAState').DFAState;\nvar ATNConfigSet = require('./ATNConfigSet').ATNConfigSet;\nvar OrderedATNConfigSet = require('./ATNConfigSet').OrderedATNConfigSet;\nvar PredictionContext = require('./../PredictionContext').PredictionContext;\nvar SingletonPredictionContext = require('./../PredictionContext').SingletonPredictionContext;\nvar RuleStopState = require('./ATNState').RuleStopState;\nvar LexerATNConfig = require('./ATNConfig').LexerATNConfig;\nvar Transition = require('./Transition').Transition;\nvar LexerActionExecutor = require('./LexerActionExecutor').LexerActionExecutor;\nvar LexerNoViableAltException = require('./../error/Errors').LexerNoViableAltException;\n\nfunction resetSimState(sim) {\n\tsim.index = -1;\n\tsim.line = 0;\n\tsim.column = -1;\n\tsim.dfaState = null;\n}\n\nfunction SimState() {\n\tresetSimState(this);\n\treturn this;\n}\n\nSimState.prototype.reset = function() {\n\tresetSimState(this);\n};\n\nfunction LexerATNSimulator(recog, atn, decisionToDFA, sharedContextCache) {\n\tATNSimulator.call(this, atn, sharedContextCache);\n\tthis.decisionToDFA = decisionToDFA;\n\tthis.recog = recog;\n\t// The current token's starting index into the character stream.\n\t// Shared across DFA to ATN simulation in case the ATN fails and the\n\t// DFA did not have a previous accept state. In this case, we use the\n\t// ATN-generated exception object.\n\tthis.startIndex = -1;\n\t// line number 1..n within the input///\n\tthis.line = 1;\n\t// The index of the character relative to the beginning of the line\n\t// 0..n-1///\n\tthis.column = 0;\n\tthis.mode = Lexer.DEFAULT_MODE;\n\t// Used during DFA/ATN exec to record the most recent accept configuration\n\t// info\n\tthis.prevAccept = new SimState();\n\t// done\n\treturn this;\n}\n\nLexerATNSimulator.prototype = Object.create(ATNSimulator.prototype);\nLexerATNSimulator.prototype.constructor = LexerATNSimulator;\n\nLexerATNSimulator.debug = false;\nLexerATNSimulator.dfa_debug = false;\n\nLexerATNSimulator.MIN_DFA_EDGE = 0;\nLexerATNSimulator.MAX_DFA_EDGE = 127; // forces unicode to stay in ATN\n\nLexerATNSimulator.match_calls = 0;\n\nLexerATNSimulator.prototype.copyState = function(simulator) {\n\tthis.column = simulator.column;\n\tthis.line = simulator.line;\n\tthis.mode = simulator.mode;\n\tthis.startIndex = simulator.startIndex;\n};\n\nLexerATNSimulator.prototype.match = function(input, mode) {\n\tthis.match_calls += 1;\n\tthis.mode = mode;\n\tvar mark = input.mark();\n\ttry {\n\t\tthis.startIndex = input.index;\n\t\tthis.prevAccept.reset();\n\t\tvar dfa = this.decisionToDFA[mode];\n\t\tif (dfa.s0 === null) {\n\t\t\treturn this.matchATN(input);\n\t\t} else {\n\t\t\treturn this.execATN(input, dfa.s0);\n\t\t}\n\t} finally {\n\t\tinput.release(mark);\n\t}\n};\n\nLexerATNSimulator.prototype.reset = function() {\n\tthis.prevAccept.reset();\n\tthis.startIndex = -1;\n\tthis.line = 1;\n\tthis.column = 0;\n\tthis.mode = Lexer.DEFAULT_MODE;\n};\n\nLexerATNSimulator.prototype.matchATN = function(input) {\n\tvar startState = this.atn.modeToStartState[this.mode];\n\n\tif (LexerATNSimulator.debug) {\n\t\tconsole.log(\"matchATN mode \" + this.mode + \" start: \" + startState);\n\t}\n\tvar old_mode = this.mode;\n\tvar s0_closure = this.computeStartState(input, startState);\n\tvar suppressEdge = s0_closure.hasSemanticContext;\n\ts0_closure.hasSemanticContext = false;\n\n\tvar next = this.addDFAState(s0_closure);\n\tif (!suppressEdge) {\n\t\tthis.decisionToDFA[this.mode].s0 = next;\n\t}\n\n\tvar predict = this.execATN(input, next);\n\n\tif (LexerATNSimulator.debug) {\n\t\tconsole.log(\"DFA after matchATN: \" + this.decisionToDFA[old_mode].toLexerString());\n\t}\n\treturn predict;\n};\n\nLexerATNSimulator.prototype.execATN = function(input, ds0) {\n\tif (LexerATNSimulator.debug) {\n\t\tconsole.log(\"start state closure=\" + ds0.configs);\n\t}\n\tif (ds0.isAcceptState) {\n\t\t// allow zero-length tokens\n\t\tthis.captureSimState(this.prevAccept, input, ds0);\n\t}\n\tvar t = input.LA(1);\n\tvar s = ds0; // s is current/from DFA state\n\n\twhile (true) { // while more work\n\t\tif (LexerATNSimulator.debug) {\n\t\t\tconsole.log(\"execATN loop starting closure: \" + s.configs);\n\t\t}\n\n\t\t// As we move src->trg, src->trg, we keep track of the previous trg to\n\t\t// avoid looking up the DFA state again, which is expensive.\n\t\t// If the previous target was already part of the DFA, we might\n\t\t// be able to avoid doing a reach operation upon t. If s!=null,\n\t\t// it means that semantic predicates didn't prevent us from\n\t\t// creating a DFA state. Once we know s!=null, we check to see if\n\t\t// the DFA state has an edge already for t. If so, we can just reuse\n\t\t// it's configuration set; there's no point in re-computing it.\n\t\t// This is kind of like doing DFA simulation within the ATN\n\t\t// simulation because DFA simulation is really just a way to avoid\n\t\t// computing reach/closure sets. Technically, once we know that\n\t\t// we have a previously added DFA state, we could jump over to\n\t\t// the DFA simulator. But, that would mean popping back and forth\n\t\t// a lot and making things more complicated algorithmically.\n\t\t// This optimization makes a lot of sense for loops within DFA.\n\t\t// A character will take us back to an existing DFA state\n\t\t// that already has lots of edges out of it. e.g., .* in comments.\n\t\t// print(\"Target for:\" + str(s) + \" and:\" + str(t))\n\t\tvar target = this.getExistingTargetState(s, t);\n\t\t// print(\"Existing:\" + str(target))\n\t\tif (target === null) {\n\t\t\ttarget = this.computeTargetState(input, s, t);\n\t\t\t// print(\"Computed:\" + str(target))\n\t\t}\n\t\tif (target === ATNSimulator.ERROR) {\n\t\t\tbreak;\n\t\t}\n\t\t// If this is a consumable input element, make sure to consume before\n\t\t// capturing the accept state so the input index, line, and char\n\t\t// position accurately reflect the state of the interpreter at the\n\t\t// end of the token.\n\t\tif (t !== Token.EOF) {\n\t\t\tthis.consume(input);\n\t\t}\n\t\tif (target.isAcceptState) {\n\t\t\tthis.captureSimState(this.prevAccept, input, target);\n\t\t\tif (t === Token.EOF) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tt = input.LA(1);\n\t\ts = target; // flip; current DFA target becomes new src/from state\n\t}\n\treturn this.failOrAccept(this.prevAccept, input, s.configs, t);\n};\n\n// Get an existing target state for an edge in the DFA. If the target state\n// for the edge has not yet been computed or is otherwise not available,\n// this method returns {@code null}.\n//\n// @param s The current DFA state\n// @param t The next input symbol\n// @return The existing target DFA state for the given input symbol\n// {@code t}, or {@code null} if the target state for this edge is not\n// already cached\nLexerATNSimulator.prototype.getExistingTargetState = function(s, t) {\n\tif (s.edges === null || t < LexerATNSimulator.MIN_DFA_EDGE || t > LexerATNSimulator.MAX_DFA_EDGE) {\n\t\treturn null;\n\t}\n\n\tvar target = s.edges[t - LexerATNSimulator.MIN_DFA_EDGE];\n\tif(target===undefined) {\n\t\ttarget = null;\n\t}\n\tif (LexerATNSimulator.debug && target !== null) {\n\t\tconsole.log(\"reuse state \" + s.stateNumber + \" edge to \" + target.stateNumber);\n\t}\n\treturn target;\n};\n\n// Compute a target state for an edge in the DFA, and attempt to add the\n// computed state and corresponding edge to the DFA.\n//\n// @param input The input stream\n// @param s The current DFA state\n// @param t The next input symbol\n//\n// @return The computed target DFA state for the given input symbol\n// {@code t}. If {@code t} does not lead to a valid DFA state, this method\n// returns {@link //ERROR}.\nLexerATNSimulator.prototype.computeTargetState = function(input, s, t) {\n\tvar reach = new OrderedATNConfigSet();\n\t// if we don't find an existing DFA state\n\t// Fill reach starting from closure, following t transitions\n\tthis.getReachableConfigSet(input, s.configs, reach, t);\n\n\tif (reach.items.length === 0) { // we got nowhere on t from s\n\t\tif (!reach.hasSemanticContext) {\n\t\t\t// we got nowhere on t, don't throw out this knowledge; it'd\n\t\t\t// cause a failover from DFA later.\n\t\t\tthis.addDFAEdge(s, t, ATNSimulator.ERROR);\n\t\t}\n\t\t// stop when we can't match any more char\n\t\treturn ATNSimulator.ERROR;\n\t}\n\t// Add an edge from s to target DFA found/created for reach\n\treturn this.addDFAEdge(s, t, null, reach);\n};\n\nLexerATNSimulator.prototype.failOrAccept = function(prevAccept, input, reach, t) {\n\tif (this.prevAccept.dfaState !== null) {\n\t\tvar lexerActionExecutor = prevAccept.dfaState.lexerActionExecutor;\n\t\tthis.accept(input, lexerActionExecutor, this.startIndex,\n\t\t\t\tprevAccept.index, prevAccept.line, prevAccept.column);\n\t\treturn prevAccept.dfaState.prediction;\n\t} else {\n\t\t// if no accept and EOF is first char, return EOF\n\t\tif (t === Token.EOF && input.index === this.startIndex) {\n\t\t\treturn Token.EOF;\n\t\t}\n\t\tthrow new LexerNoViableAltException(this.recog, input, this.startIndex, reach);\n\t}\n};\n\n// Given a starting configuration set, figure out all ATN configurations\n// we can reach upon input {@code t}. Parameter {@code reach} is a return\n// parameter.\nLexerATNSimulator.prototype.getReachableConfigSet = function(input, closure,\n\t\treach, t) {\n\t// this is used to skip processing for configs which have a lower priority\n\t// than a config that already reached an accept state for the same rule\n\tvar skipAlt = ATN.INVALID_ALT_NUMBER;\n\tfor (var i = 0; i < closure.items.length; i++) {\n\t\tvar cfg = closure.items[i];\n\t\tvar currentAltReachedAcceptState = (cfg.alt === skipAlt);\n\t\tif (currentAltReachedAcceptState && cfg.passedThroughNonGreedyDecision) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (LexerATNSimulator.debug) {\n\t\t\tconsole.log(\"testing %s at %s\\n\", this.getTokenName(t), cfg\n\t\t\t\t\t.toString(this.recog, true));\n\t\t}\n\t\tfor (var j = 0; j < cfg.state.transitions.length; j++) {\n\t\t\tvar trans = cfg.state.transitions[j]; // for each transition\n\t\t\tvar target = this.getReachableTarget(trans, t);\n\t\t\tif (target !== null) {\n\t\t\t\tvar lexerActionExecutor = cfg.lexerActionExecutor;\n\t\t\t\tif (lexerActionExecutor !== null) {\n\t\t\t\t\tlexerActionExecutor = lexerActionExecutor.fixOffsetBeforeMatch(input.index - this.startIndex);\n\t\t\t\t}\n\t\t\t\tvar treatEofAsEpsilon = (t === Token.EOF);\n\t\t\t\tvar config = new LexerATNConfig({state:target, lexerActionExecutor:lexerActionExecutor}, cfg);\n\t\t\t\tif (this.closure(input, config, reach,\n\t\t\t\t\t\tcurrentAltReachedAcceptState, true, treatEofAsEpsilon)) {\n\t\t\t\t\t// any remaining configs for this alt have a lower priority\n\t\t\t\t\t// than the one that just reached an accept state.\n\t\t\t\t\tskipAlt = cfg.alt;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nLexerATNSimulator.prototype.accept = function(input, lexerActionExecutor,\n\t\tstartIndex, index, line, charPos) {\n\tif (LexerATNSimulator.debug) {\n\t\tconsole.log(\"ACTION %s\\n\", lexerActionExecutor);\n\t}\n\t// seek to after last char in token\n\tinput.seek(index);\n\tthis.line = line;\n\tthis.column = charPos;\n\tif (lexerActionExecutor !== null && this.recog !== null) {\n\t\tlexerActionExecutor.execute(this.recog, input, startIndex);\n\t}\n};\n\nLexerATNSimulator.prototype.getReachableTarget = function(trans, t) {\n\tif (trans.matches(t, 0, Lexer.MAX_CHAR_VALUE)) {\n\t\treturn trans.target;\n\t} else {\n\t\treturn null;\n\t}\n};\n\nLexerATNSimulator.prototype.computeStartState = function(input, p) {\n\tvar initialContext = PredictionContext.EMPTY;\n\tvar configs = new OrderedATNConfigSet();\n\tfor (var i = 0; i < p.transitions.length; i++) {\n\t\tvar target = p.transitions[i].target;\n var cfg = new LexerATNConfig({state:target, alt:i+1, context:initialContext}, null);\n\t\tthis.closure(input, cfg, configs, false, false, false);\n\t}\n\treturn configs;\n};\n\n// Since the alternatives within any lexer decision are ordered by\n// preference, this method stops pursuing the closure as soon as an accept\n// state is reached. After the first accept state is reached by depth-first\n// search from {@code config}, all other (potentially reachable) states for\n// this rule would have a lower priority.\n//\n// @return {@code true} if an accept state is reached, otherwise\n// {@code false}.\nLexerATNSimulator.prototype.closure = function(input, config, configs,\n\t\tcurrentAltReachedAcceptState, speculative, treatEofAsEpsilon) {\n\tvar cfg = null;\n\tif (LexerATNSimulator.debug) {\n\t\tconsole.log(\"closure(\" + config.toString(this.recog, true) + \")\");\n\t}\n\tif (config.state instanceof RuleStopState) {\n\t\tif (LexerATNSimulator.debug) {\n\t\t\tif (this.recog !== null) {\n\t\t\t\tconsole.log(\"closure at %s rule stop %s\\n\", this.recog.ruleNames[config.state.ruleIndex], config);\n\t\t\t} else {\n\t\t\t\tconsole.log(\"closure at rule stop %s\\n\", config);\n\t\t\t}\n\t\t}\n\t\tif (config.context === null || config.context.hasEmptyPath()) {\n\t\t\tif (config.context === null || config.context.isEmpty()) {\n\t\t\t\tconfigs.add(config);\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\tconfigs.add(new LexerATNConfig({ state:config.state, context:PredictionContext.EMPTY}, config));\n\t\t\t\tcurrentAltReachedAcceptState = true;\n\t\t\t}\n\t\t}\n\t\tif (config.context !== null && !config.context.isEmpty()) {\n\t\t\tfor (var i = 0; i < config.context.length; i++) {\n\t\t\t\tif (config.context.getReturnState(i) !== PredictionContext.EMPTY_RETURN_STATE) {\n\t\t\t\t\tvar newContext = config.context.getParent(i); // \"pop\" return state\n\t\t\t\t\tvar returnState = this.atn.states[config.context.getReturnState(i)];\n\t\t\t\t\tcfg = new LexerATNConfig({ state:returnState, context:newContext }, config);\n\t\t\t\t\tcurrentAltReachedAcceptState = this.closure(input, cfg,\n\t\t\t\t\t\t\tconfigs, currentAltReachedAcceptState, speculative,\n\t\t\t\t\t\t\ttreatEofAsEpsilon);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn currentAltReachedAcceptState;\n\t}\n\t// optimization\n\tif (!config.state.epsilonOnlyTransitions) {\n\t\tif (!currentAltReachedAcceptState || !config.passedThroughNonGreedyDecision) {\n\t\t\tconfigs.add(config);\n\t\t}\n\t}\n\tfor (var j = 0; j < config.state.transitions.length; j++) {\n\t\tvar trans = config.state.transitions[j];\n\t\tcfg = this.getEpsilonTarget(input, config, trans, configs, speculative, treatEofAsEpsilon);\n\t\tif (cfg !== null) {\n\t\t\tcurrentAltReachedAcceptState = this.closure(input, cfg, configs,\n\t\t\t\t\tcurrentAltReachedAcceptState, speculative, treatEofAsEpsilon);\n\t\t}\n\t}\n\treturn currentAltReachedAcceptState;\n};\n\n// side-effect: can alter configs.hasSemanticContext\nLexerATNSimulator.prototype.getEpsilonTarget = function(input, config, trans,\n\t\tconfigs, speculative, treatEofAsEpsilon) {\n\tvar cfg = null;\n\tif (trans.serializationType === Transition.RULE) {\n\t\tvar newContext = SingletonPredictionContext.create(config.context, trans.followState.stateNumber);\n\t\tcfg = new LexerATNConfig( { state:trans.target, context:newContext}, config);\n\t} else if (trans.serializationType === Transition.PRECEDENCE) {\n\t\tthrow \"Precedence predicates are not supported in lexers.\";\n\t} else if (trans.serializationType === Transition.PREDICATE) {\n\t\t// Track traversing semantic predicates. If we traverse,\n\t\t// we cannot add a DFA state for this \"reach\" computation\n\t\t// because the DFA would not test the predicate again in the\n\t\t// future. Rather than creating collections of semantic predicates\n\t\t// like v3 and testing them on prediction, v4 will test them on the\n\t\t// fly all the time using the ATN not the DFA. This is slower but\n\t\t// semantically it's not used that often. One of the key elements to\n\t\t// this predicate mechanism is not adding DFA states that see\n\t\t// predicates immediately afterwards in the ATN. For example,\n\n\t\t// a : ID {p1}? | ID {p2}? ;\n\n\t\t// should create the start state for rule 'a' (to save start state\n\t\t// competition), but should not create target of ID state. The\n\t\t// collection of ATN states the following ID references includes\n\t\t// states reached by traversing predicates. Since this is when we\n\t\t// test them, we cannot cash the DFA state target of ID.\n\n\t\tif (LexerATNSimulator.debug) {\n\t\t\tconsole.log(\"EVAL rule \" + trans.ruleIndex + \":\" + trans.predIndex);\n\t\t}\n\t\tconfigs.hasSemanticContext = true;\n\t\tif (this.evaluatePredicate(input, trans.ruleIndex, trans.predIndex, speculative)) {\n\t\t\tcfg = new LexerATNConfig({ state:trans.target}, config);\n\t\t}\n\t} else if (trans.serializationType === Transition.ACTION) {\n\t\tif (config.context === null || config.context.hasEmptyPath()) {\n\t\t\t// execute actions anywhere in the start rule for a token.\n\t\t\t//\n\t\t\t// TODO: if the entry rule is invoked recursively, some\n\t\t\t// actions may be executed during the recursive call. The\n\t\t\t// problem can appear when hasEmptyPath() is true but\n\t\t\t// isEmpty() is false. In this case, the config needs to be\n\t\t\t// split into two contexts - one with just the empty path\n\t\t\t// and another with everything but the empty path.\n\t\t\t// Unfortunately, the current algorithm does not allow\n\t\t\t// getEpsilonTarget to return two configurations, so\n\t\t\t// additional modifications are needed before we can support\n\t\t\t// the split operation.\n\t\t\tvar lexerActionExecutor = LexerActionExecutor.append(config.lexerActionExecutor,\n\t\t\t\t\tthis.atn.lexerActions[trans.actionIndex]);\n\t\t\tcfg = new LexerATNConfig({ state:trans.target, lexerActionExecutor:lexerActionExecutor }, config);\n\t\t} else {\n\t\t\t// ignore actions in referenced rules\n\t\t\tcfg = new LexerATNConfig( { state:trans.target}, config);\n\t\t}\n\t} else if (trans.serializationType === Transition.EPSILON) {\n\t\tcfg = new LexerATNConfig({ state:trans.target}, config);\n\t} else if (trans.serializationType === Transition.ATOM ||\n\t\t\t\ttrans.serializationType === Transition.RANGE ||\n\t\t\t\ttrans.serializationType === Transition.SET) {\n\t\tif (treatEofAsEpsilon) {\n\t\t\tif (trans.matches(Token.EOF, 0, Lexer.MAX_CHAR_VALUE)) {\n\t\t\t\tcfg = new LexerATNConfig( { state:trans.target }, config);\n\t\t\t}\n\t\t}\n\t}\n\treturn cfg;\n};\n\n// Evaluate a predicate specified in the lexer.\n//\n//

If {@code speculative} is {@code true}, this method was called before\n// {@link //consume} for the matched character. This method should call\n// {@link //consume} before evaluating the predicate to ensure position\n// sensitive values, including {@link Lexer//getText}, {@link Lexer//getLine},\n// and {@link Lexer//getcolumn}, properly reflect the current\n// lexer state. This method should restore {@code input} and the simulator\n// to the original state before returning (i.e. undo the actions made by the\n// call to {@link //consume}.

\n//\n// @param input The input stream.\n// @param ruleIndex The rule containing the predicate.\n// @param predIndex The index of the predicate within the rule.\n// @param speculative {@code true} if the current index in {@code input} is\n// one character before the predicate's location.\n//\n// @return {@code true} if the specified predicate evaluates to\n// {@code true}.\n// /\nLexerATNSimulator.prototype.evaluatePredicate = function(input, ruleIndex,\n\t\tpredIndex, speculative) {\n\t// assume true if no recognizer was provided\n\tif (this.recog === null) {\n\t\treturn true;\n\t}\n\tif (!speculative) {\n\t\treturn this.recog.sempred(null, ruleIndex, predIndex);\n\t}\n\tvar savedcolumn = this.column;\n\tvar savedLine = this.line;\n\tvar index = input.index;\n\tvar marker = input.mark();\n\ttry {\n\t\tthis.consume(input);\n\t\treturn this.recog.sempred(null, ruleIndex, predIndex);\n\t} finally {\n\t\tthis.column = savedcolumn;\n\t\tthis.line = savedLine;\n\t\tinput.seek(index);\n\t\tinput.release(marker);\n\t}\n};\n\nLexerATNSimulator.prototype.captureSimState = function(settings, input, dfaState) {\n\tsettings.index = input.index;\n\tsettings.line = this.line;\n\tsettings.column = this.column;\n\tsettings.dfaState = dfaState;\n};\n\nLexerATNSimulator.prototype.addDFAEdge = function(from_, tk, to, cfgs) {\n\tif (to === undefined) {\n\t\tto = null;\n\t}\n\tif (cfgs === undefined) {\n\t\tcfgs = null;\n\t}\n\tif (to === null && cfgs !== null) {\n\t\t// leading to this call, ATNConfigSet.hasSemanticContext is used as a\n\t\t// marker indicating dynamic predicate evaluation makes this edge\n\t\t// dependent on the specific input sequence, so the static edge in the\n\t\t// DFA should be omitted. The target DFAState is still created since\n\t\t// execATN has the ability to resynchronize with the DFA state cache\n\t\t// following the predicate evaluation step.\n\t\t//\n\t\t// TJP notes: next time through the DFA, we see a pred again and eval.\n\t\t// If that gets us to a previously created (but dangling) DFA\n\t\t// state, we can continue in pure DFA mode from there.\n\t\t// /\n\t\tvar suppressEdge = cfgs.hasSemanticContext;\n\t\tcfgs.hasSemanticContext = false;\n\n\t\tto = this.addDFAState(cfgs);\n\n\t\tif (suppressEdge) {\n\t\t\treturn to;\n\t\t}\n\t}\n\t// add the edge\n\tif (tk < LexerATNSimulator.MIN_DFA_EDGE || tk > LexerATNSimulator.MAX_DFA_EDGE) {\n\t\t// Only track edges within the DFA bounds\n\t\treturn to;\n\t}\n\tif (LexerATNSimulator.debug) {\n\t\tconsole.log(\"EDGE \" + from_ + \" -> \" + to + \" upon \" + tk);\n\t}\n\tif (from_.edges === null) {\n\t\t// make room for tokens 1..n and -1 masquerading as index 0\n\t\tfrom_.edges = [];\n\t}\n\tfrom_.edges[tk - LexerATNSimulator.MIN_DFA_EDGE] = to; // connect\n\n\treturn to;\n};\n\n// Add a new DFA state if there isn't one with this set of\n// configurations already. This method also detects the first\n// configuration containing an ATN rule stop state. Later, when\n// traversing the DFA, we will know which rule to accept.\nLexerATNSimulator.prototype.addDFAState = function(configs) {\n\tvar proposed = new DFAState(null, configs);\n\tvar firstConfigWithRuleStopState = null;\n\tfor (var i = 0; i < configs.items.length; i++) {\n\t\tvar cfg = configs.items[i];\n\t\tif (cfg.state instanceof RuleStopState) {\n\t\t\tfirstConfigWithRuleStopState = cfg;\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (firstConfigWithRuleStopState !== null) {\n\t\tproposed.isAcceptState = true;\n\t\tproposed.lexerActionExecutor = firstConfigWithRuleStopState.lexerActionExecutor;\n\t\tproposed.prediction = this.atn.ruleToTokenType[firstConfigWithRuleStopState.state.ruleIndex];\n\t}\n\tvar dfa = this.decisionToDFA[this.mode];\n\tvar existing = dfa.states.get(proposed);\n\tif (existing!==null) {\n\t\treturn existing;\n\t}\n\tvar newState = proposed;\n\tnewState.stateNumber = dfa.states.length;\n\tconfigs.setReadonly(true);\n\tnewState.configs = configs;\n\tdfa.states.add(newState);\n\treturn newState;\n};\n\nLexerATNSimulator.prototype.getDFA = function(mode) {\n\treturn this.decisionToDFA[mode];\n};\n\n// Get the text matched so far for the current token.\nLexerATNSimulator.prototype.getText = function(input) {\n\t// index is first lookahead char, don't include.\n\treturn input.getText(this.startIndex, input.index - 1);\n};\n\nLexerATNSimulator.prototype.consume = function(input) {\n\tvar curChar = input.LA(1);\n\tif (curChar === \"\\n\".charCodeAt(0)) {\n\t\tthis.line += 1;\n\t\tthis.column = 0;\n\t} else {\n\t\tthis.column += 1;\n\t}\n\tinput.consume();\n};\n\nLexerATNSimulator.prototype.getTokenName = function(tt) {\n\tif (tt === -1) {\n\t\treturn \"EOF\";\n\t} else {\n\t\treturn \"'\" + String.fromCharCode(tt) + \"'\";\n\t}\n};\n\nexports.LexerATNSimulator = LexerATNSimulator;\n","//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n//\n\n//\n// This default implementation of {@link TokenFactory} creates\n// {@link CommonToken} objects.\n//\n\nvar CommonToken = require('./Token').CommonToken;\n\nfunction TokenFactory() {\n\treturn this;\n}\n\nfunction CommonTokenFactory(copyText) {\n\tTokenFactory.call(this);\n // Indicates whether {@link CommonToken//setText} should be called after\n // constructing tokens to explicitly set the text. This is useful for cases\n // where the input stream might not be able to provide arbitrary substrings\n // of text from the input after the lexer creates a token (e.g. the\n // implementation of {@link CharStream//getText} in\n // {@link UnbufferedCharStream} throws an\n // {@link UnsupportedOperationException}). Explicitly setting the token text\n // allows {@link Token//getText} to be called at any time regardless of the\n // input stream implementation.\n //\n //

\n // The default value is {@code false} to avoid the performance and memory\n // overhead of copying text for every token unless explicitly requested.

\n //\n this.copyText = copyText===undefined ? false : copyText;\n\treturn this;\n}\n\nCommonTokenFactory.prototype = Object.create(TokenFactory.prototype);\nCommonTokenFactory.prototype.constructor = CommonTokenFactory;\n\n//\n// The default {@link CommonTokenFactory} instance.\n//\n//

\n// This token factory does not explicitly copy token text when constructing\n// tokens.

\n//\nCommonTokenFactory.DEFAULT = new CommonTokenFactory();\n\nCommonTokenFactory.prototype.create = function(source, type, text, channel, start, stop, line, column) {\n var t = new CommonToken(source, type, channel, start, stop);\n t.line = line;\n t.column = column;\n if (text !==null) {\n t.text = text;\n } else if (this.copyText && source[1] !==null) {\n t.text = source[1].getText(start,stop);\n }\n return t;\n};\n\nCommonTokenFactory.prototype.createThin = function(type, text) {\n var t = new CommonToken(null, type);\n t.text = text;\n return t;\n};\n\nexports.CommonTokenFactory = CommonTokenFactory;\n","//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n///\n\n// Represents an executor for a sequence of lexer actions which traversed during\n// the matching operation of a lexer rule (token).\n//\n//

The executor tracks position information for position-dependent lexer actions\n// efficiently, ensuring that actions appearing only at the end of the rule do\n// not cause bloating of the {@link DFA} created for the lexer.

\n\nvar hashStuff = require(\"../Utils\").hashStuff;\nvar LexerIndexedCustomAction = require('./LexerAction').LexerIndexedCustomAction;\n\nfunction LexerActionExecutor(lexerActions) {\n\tthis.lexerActions = lexerActions === null ? [] : lexerActions;\n\t// Caches the result of {@link //hashCode} since the hash code is an element\n\t// of the performance-critical {@link LexerATNConfig//hashCode} operation.\n\tthis.cachedHashCode = hashStuff(lexerActions); // \"\".join([str(la) for la in\n\t// lexerActions]))\n\treturn this;\n}\n\n// Creates a {@link LexerActionExecutor} which executes the actions for\n// the input {@code lexerActionExecutor} followed by a specified\n// {@code lexerAction}.\n//\n// @param lexerActionExecutor The executor for actions already traversed by\n// the lexer while matching a token within a particular\n// {@link LexerATNConfig}. If this is {@code null}, the method behaves as\n// though it were an empty executor.\n// @param lexerAction The lexer action to execute after the actions\n// specified in {@code lexerActionExecutor}.\n//\n// @return A {@link LexerActionExecutor} for executing the combine actions\n// of {@code lexerActionExecutor} and {@code lexerAction}.\nLexerActionExecutor.append = function(lexerActionExecutor, lexerAction) {\n\tif (lexerActionExecutor === null) {\n\t\treturn new LexerActionExecutor([ lexerAction ]);\n\t}\n\tvar lexerActions = lexerActionExecutor.lexerActions.concat([ lexerAction ]);\n\treturn new LexerActionExecutor(lexerActions);\n};\n\n// Creates a {@link LexerActionExecutor} which encodes the current offset\n// for position-dependent lexer actions.\n//\n//

Normally, when the executor encounters lexer actions where\n// {@link LexerAction//isPositionDependent} returns {@code true}, it calls\n// {@link IntStream//seek} on the input {@link CharStream} to set the input\n// position to the end of the current token. This behavior provides\n// for efficient DFA representation of lexer actions which appear at the end\n// of a lexer rule, even when the lexer rule matches a variable number of\n// characters.

\n//\n//

Prior to traversing a match transition in the ATN, the current offset\n// from the token start index is assigned to all position-dependent lexer\n// actions which have not already been assigned a fixed offset. By storing\n// the offsets relative to the token start index, the DFA representation of\n// lexer actions which appear in the middle of tokens remains efficient due\n// to sharing among tokens of the same length, regardless of their absolute\n// position in the input stream.

\n//\n//

If the current executor already has offsets assigned to all\n// position-dependent lexer actions, the method returns {@code this}.

\n//\n// @param offset The current offset to assign to all position-dependent\n// lexer actions which do not already have offsets assigned.\n//\n// @return A {@link LexerActionExecutor} which stores input stream offsets\n// for all position-dependent lexer actions.\n// /\nLexerActionExecutor.prototype.fixOffsetBeforeMatch = function(offset) {\n\tvar updatedLexerActions = null;\n\tfor (var i = 0; i < this.lexerActions.length; i++) {\n\t\tif (this.lexerActions[i].isPositionDependent &&\n\t\t\t\t!(this.lexerActions[i] instanceof LexerIndexedCustomAction)) {\n\t\t\tif (updatedLexerActions === null) {\n\t\t\t\tupdatedLexerActions = this.lexerActions.concat([]);\n\t\t\t}\n\t\t\tupdatedLexerActions[i] = new LexerIndexedCustomAction(offset,\n\t\t\t\t\tthis.lexerActions[i]);\n\t\t}\n\t}\n\tif (updatedLexerActions === null) {\n\t\treturn this;\n\t} else {\n\t\treturn new LexerActionExecutor(updatedLexerActions);\n\t}\n};\n\n// Execute the actions encapsulated by this executor within the context of a\n// particular {@link Lexer}.\n//\n//

This method calls {@link IntStream//seek} to set the position of the\n// {@code input} {@link CharStream} prior to calling\n// {@link LexerAction//execute} on a position-dependent action. Before the\n// method returns, the input position will be restored to the same position\n// it was in when the method was invoked.

\n//\n// @param lexer The lexer instance.\n// @param input The input stream which is the source for the current token.\n// When this method is called, the current {@link IntStream//index} for\n// {@code input} should be the start of the following token, i.e. 1\n// character past the end of the current token.\n// @param startIndex The token start index. This value may be passed to\n// {@link IntStream//seek} to set the {@code input} position to the beginning\n// of the token.\n// /\nLexerActionExecutor.prototype.execute = function(lexer, input, startIndex) {\n\tvar requiresSeek = false;\n\tvar stopIndex = input.index;\n\ttry {\n\t\tfor (var i = 0; i < this.lexerActions.length; i++) {\n\t\t\tvar lexerAction = this.lexerActions[i];\n\t\t\tif (lexerAction instanceof LexerIndexedCustomAction) {\n\t\t\t\tvar offset = lexerAction.offset;\n\t\t\t\tinput.seek(startIndex + offset);\n\t\t\t\tlexerAction = lexerAction.action;\n\t\t\t\trequiresSeek = (startIndex + offset) !== stopIndex;\n\t\t\t} else if (lexerAction.isPositionDependent) {\n\t\t\t\tinput.seek(stopIndex);\n\t\t\t\trequiresSeek = false;\n\t\t\t}\n\t\t\tlexerAction.execute(lexer);\n\t\t}\n\t} finally {\n\t\tif (requiresSeek) {\n\t\t\tinput.seek(stopIndex);\n\t\t}\n\t}\n};\n\nLexerActionExecutor.prototype.hashCode = function() {\n\treturn this.cachedHashCode;\n};\n\nLexerActionExecutor.prototype.updateHashCode = function(hash) {\n hash.update(this.cachedHashCode);\n};\n\n\nLexerActionExecutor.prototype.equals = function(other) {\n\tif (this === other) {\n\t\treturn true;\n\t} else if (!(other instanceof LexerActionExecutor)) {\n\t\treturn false;\n\t} else if (this.cachedHashCode != other.cachedHashCode) {\n\t\treturn false;\n\t} else if (this.lexerActions.length != other.lexerActions.length) {\n\t\treturn false;\n\t} else {\n\t\tvar numActions = this.lexerActions.length\n\t\tfor (var idx = 0; idx < numActions; ++idx) {\n\t\t\tif (!this.lexerActions[idx].equals(other.lexerActions[idx])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n};\n\nexports.LexerActionExecutor = LexerActionExecutor;\n","//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n//\n\n//\n// The embodiment of the adaptive LL(*), ALL(*), parsing strategy.\n//\n//

\n// The basic complexity of the adaptive strategy makes it harder to understand.\n// We begin with ATN simulation to build paths in a DFA. Subsequent prediction\n// requests go through the DFA first. If they reach a state without an edge for\n// the current symbol, the algorithm fails over to the ATN simulation to\n// complete the DFA path for the current input (until it finds a conflict state\n// or uniquely predicting state).

\n//\n//

\n// All of that is done without using the outer context because we want to create\n// a DFA that is not dependent upon the rule invocation stack when we do a\n// prediction. One DFA works in all contexts. We avoid using context not\n// necessarily because it's slower, although it can be, but because of the DFA\n// caching problem. The closure routine only considers the rule invocation stack\n// created during prediction beginning in the decision rule. For example, if\n// prediction occurs without invoking another rule's ATN, there are no context\n// stacks in the configurations. When lack of context leads to a conflict, we\n// don't know if it's an ambiguity or a weakness in the strong LL(*) parsing\n// strategy (versus full LL(*)).

\n//\n//

\n// When SLL yields a configuration set with conflict, we rewind the input and\n// retry the ATN simulation, this time using full outer context without adding\n// to the DFA. Configuration context stacks will be the full invocation stacks\n// from the start rule. If we get a conflict using full context, then we can\n// definitively say we have a true ambiguity for that input sequence. If we\n// don't get a conflict, it implies that the decision is sensitive to the outer\n// context. (It is not context-sensitive in the sense of context-sensitive\n// grammars.)

\n//\n//

\n// The next time we reach this DFA state with an SLL conflict, through DFA\n// simulation, we will again retry the ATN simulation using full context mode.\n// This is slow because we can't save the results and have to \"interpret\" the\n// ATN each time we get that input.

\n//\n//

\n// CACHING FULL CONTEXT PREDICTIONS

\n//\n//

\n// We could cache results from full context to predicted alternative easily and\n// that saves a lot of time but doesn't work in presence of predicates. The set\n// of visible predicates from the ATN start state changes depending on the\n// context, because closure can fall off the end of a rule. I tried to cache\n// tuples (stack context, semantic context, predicted alt) but it was slower\n// than interpreting and much more complicated. Also required a huge amount of\n// memory. The goal is not to create the world's fastest parser anyway. I'd like\n// to keep this algorithm simple. By launching multiple threads, we can improve\n// the speed of parsing across a large number of files.

\n//\n//

\n// There is no strict ordering between the amount of input used by SLL vs LL,\n// which makes it really hard to build a cache for full context. Let's say that\n// we have input A B C that leads to an SLL conflict with full context X. That\n// implies that using X we might only use A B but we could also use A B C D to\n// resolve conflict. Input A B C D could predict alternative 1 in one position\n// in the input and A B C E could predict alternative 2 in another position in\n// input. The conflicting SLL configurations could still be non-unique in the\n// full context prediction, which would lead us to requiring more input than the\n// original A B C.\tTo make a\tprediction cache work, we have to track\tthe exact\n// input\tused during the previous prediction. That amounts to a cache that maps\n// X to a specific DFA for that context.

\n//\n//

\n// Something should be done for left-recursive expression predictions. They are\n// likely LL(1) + pred eval. Easier to do the whole SLL unless error and retry\n// with full LL thing Sam does.

\n//\n//

\n// AVOIDING FULL CONTEXT PREDICTION

\n//\n//

\n// We avoid doing full context retry when the outer context is empty, we did not\n// dip into the outer context by falling off the end of the decision state rule,\n// or when we force SLL mode.

\n//\n//

\n// As an example of the not dip into outer context case, consider as super\n// constructor calls versus function calls. One grammar might look like\n// this:

\n//\n//
\n// ctorBody\n//   : '{' superCall? stat* '}'\n//   ;\n// 
\n//\n//

\n// Or, you might see something like

\n//\n//
\n// stat\n//   : superCall ';'\n//   | expression ';'\n//   | ...\n//   ;\n// 
\n//\n//

\n// In both cases I believe that no closure operations will dip into the outer\n// context. In the first case ctorBody in the worst case will stop at the '}'.\n// In the 2nd case it should stop at the ';'. Both cases should stay within the\n// entry rule and not dip into the outer context.

\n//\n//

\n// PREDICATES

\n//\n//

\n// Predicates are always evaluated if present in either SLL or LL both. SLL and\n// LL simulation deals with predicates differently. SLL collects predicates as\n// it performs closure operations like ANTLR v3 did. It delays predicate\n// evaluation until it reaches and accept state. This allows us to cache the SLL\n// ATN simulation whereas, if we had evaluated predicates on-the-fly during\n// closure, the DFA state configuration sets would be different and we couldn't\n// build up a suitable DFA.

\n//\n//

\n// When building a DFA accept state during ATN simulation, we evaluate any\n// predicates and return the sole semantically valid alternative. If there is\n// more than 1 alternative, we report an ambiguity. If there are 0 alternatives,\n// we throw an exception. Alternatives without predicates act like they have\n// true predicates. The simple way to think about it is to strip away all\n// alternatives with false predicates and choose the minimum alternative that\n// remains.

\n//\n//

\n// When we start in the DFA and reach an accept state that's predicated, we test\n// those and return the minimum semantically viable alternative. If no\n// alternatives are viable, we throw an exception.

\n//\n//

\n// During full LL ATN simulation, closure always evaluates predicates and\n// on-the-fly. This is crucial to reducing the configuration set size during\n// closure. It hits a landmine when parsing with the Java grammar, for example,\n// without this on-the-fly evaluation.

\n//\n//

\n// SHARING DFA

\n//\n//

\n// All instances of the same parser share the same decision DFAs through a\n// static field. Each instance gets its own ATN simulator but they share the\n// same {@link //decisionToDFA} field. They also share a\n// {@link PredictionContextCache} object that makes sure that all\n// {@link PredictionContext} objects are shared among the DFA states. This makes\n// a big size difference.

\n//\n//

\n// THREAD SAFETY

\n//\n//

\n// The {@link ParserATNSimulator} locks on the {@link //decisionToDFA} field when\n// it adds a new DFA object to that array. {@link //addDFAEdge}\n// locks on the DFA for the current decision when setting the\n// {@link DFAState//edges} field. {@link //addDFAState} locks on\n// the DFA for the current decision when looking up a DFA state to see if it\n// already exists. We must make sure that all requests to add DFA states that\n// are equivalent result in the same shared DFA object. This is because lots of\n// threads will be trying to update the DFA at once. The\n// {@link //addDFAState} method also locks inside the DFA lock\n// but this time on the shared context cache when it rebuilds the\n// configurations' {@link PredictionContext} objects using cached\n// subgraphs/nodes. No other locking occurs, even during DFA simulation. This is\n// safe as long as we can guarantee that all threads referencing\n// {@code s.edge[t]} get the same physical target {@link DFAState}, or\n// {@code null}. Once into the DFA, the DFA simulation does not reference the\n// {@link DFA//states} map. It follows the {@link DFAState//edges} field to new\n// targets. The DFA simulator will either find {@link DFAState//edges} to be\n// {@code null}, to be non-{@code null} and {@code dfa.edges[t]} null, or\n// {@code dfa.edges[t]} to be non-null. The\n// {@link //addDFAEdge} method could be racing to set the field\n// but in either case the DFA simulator works; if {@code null}, and requests ATN\n// simulation. It could also race trying to get {@code dfa.edges[t]}, but either\n// way it will work because it's not doing a test and set operation.

\n//\n//

\n// Starting with SLL then failing to combined SLL/LL (Two-Stage\n// Parsing)

\n//\n//

\n// Sam pointed out that if SLL does not give a syntax error, then there is no\n// point in doing full LL, which is slower. We only have to try LL if we get a\n// syntax error. For maximum speed, Sam starts the parser set to pure SLL\n// mode with the {@link BailErrorStrategy}:

\n//\n//
\n// parser.{@link Parser//getInterpreter() getInterpreter()}.{@link //setPredictionMode setPredictionMode}{@code (}{@link PredictionMode//SLL}{@code )};\n// parser.{@link Parser//setErrorHandler setErrorHandler}(new {@link BailErrorStrategy}());\n// 
\n//\n//

\n// If it does not get a syntax error, then we're done. If it does get a syntax\n// error, we need to retry with the combined SLL/LL strategy.

\n//\n//

\n// The reason this works is as follows. If there are no SLL conflicts, then the\n// grammar is SLL (at least for that input set). If there is an SLL conflict,\n// the full LL analysis must yield a set of viable alternatives which is a\n// subset of the alternatives reported by SLL. If the LL set is a singleton,\n// then the grammar is LL but not SLL. If the LL set is the same size as the SLL\n// set, the decision is SLL. If the LL set has size > 1, then that decision\n// is truly ambiguous on the current input. If the LL set is smaller, then the\n// SLL conflict resolution might choose an alternative that the full LL would\n// rule out as a possibility based upon better context information. If that's\n// the case, then the SLL parse will definitely get an error because the full LL\n// analysis says it's not viable. If SLL conflict resolution chooses an\n// alternative within the LL set, them both SLL and LL would choose the same\n// alternative because they both choose the minimum of multiple conflicting\n// alternatives.

\n//\n//

\n// Let's say we have a set of SLL conflicting alternatives {@code {1, 2, 3}} and\n// a smaller LL set called s. If s is {@code {2, 3}}, then SLL\n// parsing will get an error because SLL will pursue alternative 1. If\n// s is {@code {1, 2}} or {@code {1, 3}} then both SLL and LL will\n// choose the same alternative because alternative one is the minimum of either\n// set. If s is {@code {2}} or {@code {3}} then SLL will get a syntax\n// error. If s is {@code {1}} then SLL will succeed.

\n//\n//

\n// Of course, if the input is invalid, then we will get an error for sure in\n// both SLL and LL parsing. Erroneous input will therefore require 2 passes over\n// the input.

\n//\n\nvar Utils = require('./../Utils');\nvar Set = Utils.Set;\nvar BitSet = Utils.BitSet;\nvar DoubleDict = Utils.DoubleDict;\nvar ATN = require('./ATN').ATN;\nvar ATNState = require('./ATNState').ATNState;\nvar ATNConfig = require('./ATNConfig').ATNConfig;\nvar ATNConfigSet = require('./ATNConfigSet').ATNConfigSet;\nvar Token = require('./../Token').Token;\nvar DFAState = require('./../dfa/DFAState').DFAState;\nvar PredPrediction = require('./../dfa/DFAState').PredPrediction;\nvar ATNSimulator = require('./ATNSimulator').ATNSimulator;\nvar PredictionMode = require('./PredictionMode').PredictionMode;\nvar RuleContext = require('./../RuleContext').RuleContext;\nvar ParserRuleContext = require('./../ParserRuleContext').ParserRuleContext;\nvar SemanticContext = require('./SemanticContext').SemanticContext;\nvar StarLoopEntryState = require('./ATNState').StarLoopEntryState;\nvar RuleStopState = require('./ATNState').RuleStopState;\nvar PredictionContext = require('./../PredictionContext').PredictionContext;\nvar Interval = require('./../IntervalSet').Interval;\nvar Transitions = require('./Transition');\nvar Transition = Transitions.Transition;\nvar SetTransition = Transitions.SetTransition;\nvar NotSetTransition = Transitions.NotSetTransition;\nvar RuleTransition = Transitions.RuleTransition;\nvar ActionTransition = Transitions.ActionTransition;\nvar NoViableAltException = require('./../error/Errors').NoViableAltException;\n\nvar SingletonPredictionContext = require('./../PredictionContext').SingletonPredictionContext;\nvar predictionContextFromRuleContext = require('./../PredictionContext').predictionContextFromRuleContext;\n\nfunction ParserATNSimulator(parser, atn, decisionToDFA, sharedContextCache) {\n\tATNSimulator.call(this, atn, sharedContextCache);\n this.parser = parser;\n this.decisionToDFA = decisionToDFA;\n // SLL, LL, or LL + exact ambig detection?//\n this.predictionMode = PredictionMode.LL;\n // LAME globals to avoid parameters!!!!! I need these down deep in predTransition\n this._input = null;\n this._startIndex = 0;\n this._outerContext = null;\n this._dfa = null;\n // Each prediction operation uses a cache for merge of prediction contexts.\n // Don't keep around as it wastes huge amounts of memory. DoubleKeyMap\n // isn't synchronized but we're ok since two threads shouldn't reuse same\n // parser/atnsim object because it can only handle one input at a time.\n // This maps graphs a and b to merged result c. (a,b)→c. We can avoid\n // the merge if we ever see a and b again. Note that (b,a)→c should\n // also be examined during cache lookup.\n //\n this.mergeCache = null;\n return this;\n}\n\nParserATNSimulator.prototype = Object.create(ATNSimulator.prototype);\nParserATNSimulator.prototype.constructor = ParserATNSimulator;\n\nParserATNSimulator.prototype.debug = false;\nParserATNSimulator.prototype.debug_closure = false;\nParserATNSimulator.prototype.debug_add = false;\nParserATNSimulator.prototype.debug_list_atn_decisions = false;\nParserATNSimulator.prototype.dfa_debug = false;\nParserATNSimulator.prototype.retry_debug = false;\n\n\nParserATNSimulator.prototype.reset = function() {\n};\n\nParserATNSimulator.prototype.adaptivePredict = function(input, decision, outerContext) {\n if (this.debug || this.debug_list_atn_decisions) {\n console.log(\"adaptivePredict decision \" + decision +\n \" exec LA(1)==\" + this.getLookaheadName(input) +\n \" line \" + input.LT(1).line + \":\" +\n input.LT(1).column);\n }\n this._input = input;\n this._startIndex = input.index;\n this._outerContext = outerContext;\n\n var dfa = this.decisionToDFA[decision];\n this._dfa = dfa;\n var m = input.mark();\n var index = input.index;\n\n // Now we are certain to have a specific decision's DFA\n // But, do we still need an initial state?\n try {\n var s0;\n if (dfa.precedenceDfa) {\n // the start state for a precedence DFA depends on the current\n // parser precedence, and is provided by a DFA method.\n s0 = dfa.getPrecedenceStartState(this.parser.getPrecedence());\n } else {\n // the start state for a \"regular\" DFA is just s0\n s0 = dfa.s0;\n }\n if (s0===null) {\n if (outerContext===null) {\n outerContext = RuleContext.EMPTY;\n }\n if (this.debug || this.debug_list_atn_decisions) {\n console.log(\"predictATN decision \" + dfa.decision +\n \" exec LA(1)==\" + this.getLookaheadName(input) +\n \", outerContext=\" + outerContext.toString(this.parser.ruleNames));\n }\n\n var fullCtx = false;\n var s0_closure = this.computeStartState(dfa.atnStartState, RuleContext.EMPTY, fullCtx);\n\n if( dfa.precedenceDfa) {\n // If this is a precedence DFA, we use applyPrecedenceFilter\n // to convert the computed start state to a precedence start\n // state. We then use DFA.setPrecedenceStartState to set the\n // appropriate start state for the precedence level rather\n // than simply setting DFA.s0.\n //\n dfa.s0.configs = s0_closure; // not used for prediction but useful to know start configs anyway\n s0_closure = this.applyPrecedenceFilter(s0_closure);\n s0 = this.addDFAState(dfa, new DFAState(null, s0_closure));\n dfa.setPrecedenceStartState(this.parser.getPrecedence(), s0);\n } else {\n s0 = this.addDFAState(dfa, new DFAState(null, s0_closure));\n dfa.s0 = s0;\n }\n }\n var alt = this.execATN(dfa, s0, input, index, outerContext);\n if (this.debug) {\n console.log(\"DFA after predictATN: \" + dfa.toString(this.parser.literalNames));\n }\n return alt;\n } finally {\n this._dfa = null;\n this.mergeCache = null; // wack cache after each prediction\n input.seek(index);\n input.release(m);\n }\n};\n// Performs ATN simulation to compute a predicted alternative based\n// upon the remaining input, but also updates the DFA cache to avoid\n// having to traverse the ATN again for the same input sequence.\n\n// There are some key conditions we're looking for after computing a new\n// set of ATN configs (proposed DFA state):\n // if the set is empty, there is no viable alternative for current symbol\n // does the state uniquely predict an alternative?\n // does the state have a conflict that would prevent us from\n // putting it on the work list?\n\n// We also have some key operations to do:\n // add an edge from previous DFA state to potentially new DFA state, D,\n // upon current symbol but only if adding to work list, which means in all\n // cases except no viable alternative (and possibly non-greedy decisions?)\n // collecting predicates and adding semantic context to DFA accept states\n // adding rule context to context-sensitive DFA accept states\n // consuming an input symbol\n // reporting a conflict\n // reporting an ambiguity\n // reporting a context sensitivity\n // reporting insufficient predicates\n\n// cover these cases:\n// dead end\n// single alt\n// single alt + preds\n// conflict\n// conflict + preds\n//\nParserATNSimulator.prototype.execATN = function(dfa, s0, input, startIndex, outerContext ) {\n if (this.debug || this.debug_list_atn_decisions) {\n console.log(\"execATN decision \" + dfa.decision +\n \" exec LA(1)==\" + this.getLookaheadName(input) +\n \" line \" + input.LT(1).line + \":\" + input.LT(1).column);\n }\n var alt;\n var previousD = s0;\n\n if (this.debug) {\n console.log(\"s0 = \" + s0);\n }\n var t = input.LA(1);\n while(true) { // while more work\n var D = this.getExistingTargetState(previousD, t);\n if(D===null) {\n D = this.computeTargetState(dfa, previousD, t);\n }\n if(D===ATNSimulator.ERROR) {\n // if any configs in previous dipped into outer context, that\n // means that input up to t actually finished entry rule\n // at least for SLL decision. Full LL doesn't dip into outer\n // so don't need special case.\n // We will get an error no matter what so delay until after\n // decision; better error message. Also, no reachable target\n // ATN states in SLL implies LL will also get nowhere.\n // If conflict in states that dip out, choose min since we\n // will get error no matter what.\n var e = this.noViableAlt(input, outerContext, previousD.configs, startIndex);\n input.seek(startIndex);\n alt = this.getSynValidOrSemInvalidAltThatFinishedDecisionEntryRule(previousD.configs, outerContext);\n if(alt!==ATN.INVALID_ALT_NUMBER) {\n return alt;\n } else {\n throw e;\n }\n }\n if(D.requiresFullContext && this.predictionMode !== PredictionMode.SLL) {\n // IF PREDS, MIGHT RESOLVE TO SINGLE ALT => SLL (or syntax error)\n var conflictingAlts = null;\n if (D.predicates!==null) {\n if (this.debug) {\n console.log(\"DFA state has preds in DFA sim LL failover\");\n }\n var conflictIndex = input.index;\n if(conflictIndex !== startIndex) {\n input.seek(startIndex);\n }\n conflictingAlts = this.evalSemanticContext(D.predicates, outerContext, true);\n if (conflictingAlts.length===1) {\n if(this.debug) {\n console.log(\"Full LL avoided\");\n }\n return conflictingAlts.minValue();\n }\n if (conflictIndex !== startIndex) {\n // restore the index so reporting the fallback to full\n // context occurs with the index at the correct spot\n input.seek(conflictIndex);\n }\n }\n if (this.dfa_debug) {\n console.log(\"ctx sensitive state \" + outerContext +\" in \" + D);\n }\n var fullCtx = true;\n var s0_closure = this.computeStartState(dfa.atnStartState, outerContext, fullCtx);\n this.reportAttemptingFullContext(dfa, conflictingAlts, D.configs, startIndex, input.index);\n alt = this.execATNWithFullContext(dfa, D, s0_closure, input, startIndex, outerContext);\n return alt;\n }\n if (D.isAcceptState) {\n if (D.predicates===null) {\n return D.prediction;\n }\n var stopIndex = input.index;\n input.seek(startIndex);\n var alts = this.evalSemanticContext(D.predicates, outerContext, true);\n if (alts.length===0) {\n throw this.noViableAlt(input, outerContext, D.configs, startIndex);\n } else if (alts.length===1) {\n return alts.minValue();\n } else {\n // report ambiguity after predicate evaluation to make sure the correct set of ambig alts is reported.\n this.reportAmbiguity(dfa, D, startIndex, stopIndex, false, alts, D.configs);\n return alts.minValue();\n }\n }\n previousD = D;\n\n if (t !== Token.EOF) {\n input.consume();\n t = input.LA(1);\n }\n }\n};\n//\n// Get an existing target state for an edge in the DFA. If the target state\n// for the edge has not yet been computed or is otherwise not available,\n// this method returns {@code null}.\n//\n// @param previousD The current DFA state\n// @param t The next input symbol\n// @return The existing target DFA state for the given input symbol\n// {@code t}, or {@code null} if the target state for this edge is not\n// already cached\n//\nParserATNSimulator.prototype.getExistingTargetState = function(previousD, t) {\n var edges = previousD.edges;\n if (edges===null) {\n return null;\n } else {\n return edges[t + 1] || null;\n }\n};\n//\n// Compute a target state for an edge in the DFA, and attempt to add the\n// computed state and corresponding edge to the DFA.\n//\n// @param dfa The DFA\n// @param previousD The current DFA state\n// @param t The next input symbol\n//\n// @return The computed target DFA state for the given input symbol\n// {@code t}. If {@code t} does not lead to a valid DFA state, this method\n// returns {@link //ERROR}.\n//\nParserATNSimulator.prototype.computeTargetState = function(dfa, previousD, t) {\n var reach = this.computeReachSet(previousD.configs, t, false);\n if(reach===null) {\n this.addDFAEdge(dfa, previousD, t, ATNSimulator.ERROR);\n return ATNSimulator.ERROR;\n }\n // create new target state; we'll add to DFA after it's complete\n var D = new DFAState(null, reach);\n\n var predictedAlt = this.getUniqueAlt(reach);\n\n if (this.debug) {\n var altSubSets = PredictionMode.getConflictingAltSubsets(reach);\n console.log(\"SLL altSubSets=\" + Utils.arrayToString(altSubSets) +\n \", previous=\" + previousD.configs +\n \", configs=\" + reach +\n \", predict=\" + predictedAlt +\n \", allSubsetsConflict=\" +\n PredictionMode.allSubsetsConflict(altSubSets) + \", conflictingAlts=\" +\n this.getConflictingAlts(reach));\n }\n if (predictedAlt!==ATN.INVALID_ALT_NUMBER) {\n // NO CONFLICT, UNIQUELY PREDICTED ALT\n D.isAcceptState = true;\n D.configs.uniqueAlt = predictedAlt;\n D.prediction = predictedAlt;\n } else if (PredictionMode.hasSLLConflictTerminatingPrediction(this.predictionMode, reach)) {\n // MORE THAN ONE VIABLE ALTERNATIVE\n D.configs.conflictingAlts = this.getConflictingAlts(reach);\n D.requiresFullContext = true;\n // in SLL-only mode, we will stop at this state and return the minimum alt\n D.isAcceptState = true;\n D.prediction = D.configs.conflictingAlts.minValue();\n }\n if (D.isAcceptState && D.configs.hasSemanticContext) {\n this.predicateDFAState(D, this.atn.getDecisionState(dfa.decision));\n if( D.predicates!==null) {\n D.prediction = ATN.INVALID_ALT_NUMBER;\n }\n }\n // all adds to dfa are done after we've created full D state\n D = this.addDFAEdge(dfa, previousD, t, D);\n return D;\n};\n\nParserATNSimulator.prototype.predicateDFAState = function(dfaState, decisionState) {\n // We need to test all predicates, even in DFA states that\n // uniquely predict alternative.\n var nalts = decisionState.transitions.length;\n // Update DFA so reach becomes accept state with (predicate,alt)\n // pairs if preds found for conflicting alts\n var altsToCollectPredsFrom = this.getConflictingAltsOrUniqueAlt(dfaState.configs);\n var altToPred = this.getPredsForAmbigAlts(altsToCollectPredsFrom, dfaState.configs, nalts);\n if (altToPred!==null) {\n dfaState.predicates = this.getPredicatePredictions(altsToCollectPredsFrom, altToPred);\n dfaState.prediction = ATN.INVALID_ALT_NUMBER; // make sure we use preds\n } else {\n // There are preds in configs but they might go away\n // when OR'd together like {p}? || NONE == NONE. If neither\n // alt has preds, resolve to min alt\n dfaState.prediction = altsToCollectPredsFrom.minValue();\n }\n};\n\n// comes back with reach.uniqueAlt set to a valid alt\nParserATNSimulator.prototype.execATNWithFullContext = function(dfa, D, // how far we got before failing over\n s0,\n input,\n startIndex,\n outerContext) {\n if (this.debug || this.debug_list_atn_decisions) {\n console.log(\"execATNWithFullContext \"+s0);\n }\n var fullCtx = true;\n var foundExactAmbig = false;\n var reach = null;\n var previous = s0;\n input.seek(startIndex);\n var t = input.LA(1);\n var predictedAlt = -1;\n while (true) { // while more work\n reach = this.computeReachSet(previous, t, fullCtx);\n if (reach===null) {\n // if any configs in previous dipped into outer context, that\n // means that input up to t actually finished entry rule\n // at least for LL decision. Full LL doesn't dip into outer\n // so don't need special case.\n // We will get an error no matter what so delay until after\n // decision; better error message. Also, no reachable target\n // ATN states in SLL implies LL will also get nowhere.\n // If conflict in states that dip out, choose min since we\n // will get error no matter what.\n var e = this.noViableAlt(input, outerContext, previous, startIndex);\n input.seek(startIndex);\n var alt = this.getSynValidOrSemInvalidAltThatFinishedDecisionEntryRule(previous, outerContext);\n if(alt!==ATN.INVALID_ALT_NUMBER) {\n return alt;\n } else {\n throw e;\n }\n }\n var altSubSets = PredictionMode.getConflictingAltSubsets(reach);\n if(this.debug) {\n console.log(\"LL altSubSets=\" + altSubSets + \", predict=\" +\n PredictionMode.getUniqueAlt(altSubSets) + \", resolvesToJustOneViableAlt=\" +\n PredictionMode.resolvesToJustOneViableAlt(altSubSets));\n }\n reach.uniqueAlt = this.getUniqueAlt(reach);\n // unique prediction?\n if(reach.uniqueAlt!==ATN.INVALID_ALT_NUMBER) {\n predictedAlt = reach.uniqueAlt;\n break;\n } else if (this.predictionMode !== PredictionMode.LL_EXACT_AMBIG_DETECTION) {\n predictedAlt = PredictionMode.resolvesToJustOneViableAlt(altSubSets);\n if(predictedAlt !== ATN.INVALID_ALT_NUMBER) {\n break;\n }\n } else {\n // In exact ambiguity mode, we never try to terminate early.\n // Just keeps scarfing until we know what the conflict is\n if (PredictionMode.allSubsetsConflict(altSubSets) && PredictionMode.allSubsetsEqual(altSubSets)) {\n foundExactAmbig = true;\n predictedAlt = PredictionMode.getSingleViableAlt(altSubSets);\n break;\n }\n // else there are multiple non-conflicting subsets or\n // we're not sure what the ambiguity is yet.\n // So, keep going.\n }\n previous = reach;\n if( t !== Token.EOF) {\n input.consume();\n t = input.LA(1);\n }\n }\n // If the configuration set uniquely predicts an alternative,\n // without conflict, then we know that it's a full LL decision\n // not SLL.\n if (reach.uniqueAlt !== ATN.INVALID_ALT_NUMBER ) {\n this.reportContextSensitivity(dfa, predictedAlt, reach, startIndex, input.index);\n return predictedAlt;\n }\n // We do not check predicates here because we have checked them\n // on-the-fly when doing full context prediction.\n\n //\n // In non-exact ambiguity detection mode, we might\tactually be able to\n // detect an exact ambiguity, but I'm not going to spend the cycles\n // needed to check. We only emit ambiguity warnings in exact ambiguity\n // mode.\n //\n // For example, we might know that we have conflicting configurations.\n // But, that does not mean that there is no way forward without a\n // conflict. It's possible to have nonconflicting alt subsets as in:\n\n // altSubSets=[{1, 2}, {1, 2}, {1}, {1, 2}]\n\n // from\n //\n // [(17,1,[5 $]), (13,1,[5 10 $]), (21,1,[5 10 $]), (11,1,[$]),\n // (13,2,[5 10 $]), (21,2,[5 10 $]), (11,2,[$])]\n //\n // In this case, (17,1,[5 $]) indicates there is some next sequence that\n // would resolve this without conflict to alternative 1. Any other viable\n // next sequence, however, is associated with a conflict. We stop\n // looking for input because no amount of further lookahead will alter\n // the fact that we should predict alternative 1. We just can't say for\n // sure that there is an ambiguity without looking further.\n\n this.reportAmbiguity(dfa, D, startIndex, input.index, foundExactAmbig, null, reach);\n\n return predictedAlt;\n};\n\nParserATNSimulator.prototype.computeReachSet = function(closure, t, fullCtx) {\n if (this.debug) {\n console.log(\"in computeReachSet, starting closure: \" + closure);\n }\n if( this.mergeCache===null) {\n this.mergeCache = new DoubleDict();\n }\n var intermediate = new ATNConfigSet(fullCtx);\n\n // Configurations already in a rule stop state indicate reaching the end\n // of the decision rule (local context) or end of the start rule (full\n // context). Once reached, these configurations are never updated by a\n // closure operation, so they are handled separately for the performance\n // advantage of having a smaller intermediate set when calling closure.\n //\n // For full-context reach operations, separate handling is required to\n // ensure that the alternative matching the longest overall sequence is\n // chosen when multiple such configurations can match the input.\n\n var skippedStopStates = null;\n\n // First figure out where we can reach on input t\n for (var i=0; iWhen {@code lookToEndOfRule} is true, this method uses\n// {@link ATN//nextTokens} for each configuration in {@code configs} which is\n// not already in a rule stop state to see if a rule stop state is reachable\n// from the configuration via epsilon-only transitions.

\n//\n// @param configs the configuration set to update\n// @param lookToEndOfRule when true, this method checks for rule stop states\n// reachable by epsilon-only transitions from each configuration in\n// {@code configs}.\n//\n// @return {@code configs} if all configurations in {@code configs} are in a\n// rule stop state, otherwise return a new configuration set containing only\n// the configurations from {@code configs} which are in a rule stop state\n//\nParserATNSimulator.prototype.removeAllConfigsNotInRuleStopState = function(configs, lookToEndOfRule) {\n if (PredictionMode.allConfigsInRuleStopStates(configs)) {\n return configs;\n }\n var result = new ATNConfigSet(configs.fullCtx);\n for(var i=0; i\n//
  • Evaluate the precedence predicates for each configuration using\n// {@link SemanticContext//evalPrecedence}.
  • \n//
  • Remove all configurations which predict an alternative greater than\n// 1, for which another configuration that predicts alternative 1 is in the\n// same ATN state with the same prediction context. This transformation is\n// valid for the following reasons:\n//
      \n//
    • The closure block cannot contain any epsilon transitions which bypass\n// the body of the closure, so all states reachable via alternative 1 are\n// part of the precedence alternatives of the transformed left-recursive\n// rule.
    • \n//
    • The \"primary\" portion of a left recursive rule cannot contain an\n// epsilon transition, so the only way an alternative other than 1 can exist\n// in a state that is also reachable via alternative 1 is by nesting calls\n// to the left-recursive rule, with the outer calls not being at the\n// preferred precedence level.
    • \n//
    \n//
  • \n// \n//\n//

    \n// The prediction context must be considered by this filter to address\n// situations like the following.\n//

    \n// \n//
    \n// grammar TA;\n// prog: statement* EOF;\n// statement: letterA | statement letterA 'b' ;\n// letterA: 'a';\n// 
    \n//
    \n//

    \n// If the above grammar, the ATN state immediately before the token\n// reference {@code 'a'} in {@code letterA} is reachable from the left edge\n// of both the primary and closure blocks of the left-recursive rule\n// {@code statement}. The prediction context associated with each of these\n// configurations distinguishes between them, and prevents the alternative\n// which stepped out to {@code prog} (and then back in to {@code statement}\n// from being eliminated by the filter.\n//

    \n//\n// @param configs The configuration set computed by\n// {@link //computeStartState} as the start state for the DFA.\n// @return The transformed configuration set representing the start state\n// for a precedence DFA at a particular precedence level (determined by\n// calling {@link Parser//getPrecedence}).\n//\nParserATNSimulator.prototype.applyPrecedenceFilter = function(configs) {\n\tvar config;\n\tvar statesFromAlt1 = [];\n var configSet = new ATNConfigSet(configs.fullCtx);\n for(var i=0; i1\n // (basically a graph subtraction algorithm).\n\t\tif (!config.precedenceFilterSuppressed) {\n var context = statesFromAlt1[config.state.stateNumber] || null;\n if (context!==null && context.equals(config.context)) {\n // eliminated\n continue;\n }\n\t\t}\n configSet.add(config, this.mergeCache);\n }\n return configSet;\n};\n\nParserATNSimulator.prototype.getReachableTarget = function(trans, ttype) {\n if (trans.matches(ttype, 0, this.atn.maxTokenType)) {\n return trans.target;\n } else {\n return null;\n }\n};\n\nParserATNSimulator.prototype.getPredsForAmbigAlts = function(ambigAlts, configs, nalts) {\n // REACH=[1|1|[]|0:0, 1|2|[]|0:1]\n // altToPred starts as an array of all null contexts. The entry at index i\n // corresponds to alternative i. altToPred[i] may have one of three values:\n // 1. null: no ATNConfig c is found such that c.alt==i\n // 2. SemanticContext.NONE: At least one ATNConfig c exists such that\n // c.alt==i and c.semanticContext==SemanticContext.NONE. In other words,\n // alt i has at least one unpredicated config.\n // 3. Non-NONE Semantic Context: There exists at least one, and for all\n // ATNConfig c such that c.alt==i, c.semanticContext!=SemanticContext.NONE.\n //\n // From this, it is clear that NONE||anything==NONE.\n //\n var altToPred = [];\n for(var i=0;i\n// The default implementation of this method uses the following\n// algorithm to identify an ATN configuration which successfully parsed the\n// decision entry rule. Choosing such an alternative ensures that the\n// {@link ParserRuleContext} returned by the calling rule will be complete\n// and valid, and the syntax error will be reported later at a more\n// localized location.

    \n//\n//
      \n//
    • If a syntactically valid path or paths reach the end of the decision rule and\n// they are semantically valid if predicated, return the min associated alt.
    • \n//
    • Else, if a semantically invalid but syntactically valid path exist\n// or paths exist, return the minimum associated alt.\n//
    • \n//
    • Otherwise, return {@link ATN//INVALID_ALT_NUMBER}.
    • \n//
    \n//\n//

    \n// In some scenarios, the algorithm described above could predict an\n// alternative which will result in a {@link FailedPredicateException} in\n// the parser. Specifically, this could occur if the only configuration\n// capable of successfully parsing to the end of the decision rule is\n// blocked by a semantic predicate. By choosing this alternative within\n// {@link //adaptivePredict} instead of throwing a\n// {@link NoViableAltException}, the resulting\n// {@link FailedPredicateException} in the parser will identify the specific\n// predicate which is preventing the parser from successfully parsing the\n// decision rule, which helps developers identify and correct logic errors\n// in semantic predicates.\n//

    \n//\n// @param configs The ATN configurations which were valid immediately before\n// the {@link //ERROR} state was reached\n// @param outerContext The is the \\gamma_0 initial parser context from the paper\n// or the parser stack at the instant before prediction commences.\n//\n// @return The value to return from {@link //adaptivePredict}, or\n// {@link ATN//INVALID_ALT_NUMBER} if a suitable alternative was not\n// identified and {@link //adaptivePredict} should report an error instead.\n//\nParserATNSimulator.prototype.getSynValidOrSemInvalidAltThatFinishedDecisionEntryRule = function(configs, outerContext) {\n var cfgs = this.splitAccordingToSemanticValidity(configs, outerContext);\n var semValidConfigs = cfgs[0];\n var semInvalidConfigs = cfgs[1];\n var alt = this.getAltThatFinishedDecisionEntryRule(semValidConfigs);\n if (alt!==ATN.INVALID_ALT_NUMBER) { // semantically/syntactically viable path exists\n return alt;\n }\n // Is there a syntactically valid path with a failed pred?\n if (semInvalidConfigs.items.length>0) {\n alt = this.getAltThatFinishedDecisionEntryRule(semInvalidConfigs);\n if (alt!==ATN.INVALID_ALT_NUMBER) { // syntactically viable path exists\n return alt;\n }\n }\n return ATN.INVALID_ALT_NUMBER;\n};\n\nParserATNSimulator.prototype.getAltThatFinishedDecisionEntryRule = function(configs) {\n var alts = [];\n for(var i=0;i0 || ((c.state instanceof RuleStopState) && c.context.hasEmptyPath())) {\n if(alts.indexOf(c.alt)<0) {\n alts.push(c.alt);\n }\n }\n }\n if (alts.length===0) {\n return ATN.INVALID_ALT_NUMBER;\n } else {\n return Math.min.apply(null, alts);\n }\n};\n// Walk the list of configurations and split them according to\n// those that have preds evaluating to true/false. If no pred, assume\n// true pred and include in succeeded set. Returns Pair of sets.\n//\n// Create a new set so as not to alter the incoming parameter.\n//\n// Assumption: the input stream has been restored to the starting point\n// prediction, which is where predicates need to evaluate.\n//\nParserATNSimulator.prototype.splitAccordingToSemanticValidity = function( configs, outerContext) {\n var succeeded = new ATNConfigSet(configs.fullCtx);\n var failed = new ATNConfigSet(configs.fullCtx);\n for(var i=0;i50) {\n throw \"problem\";\n }\n }\n if (config.state instanceof RuleStopState) {\n // We hit rule end. If we have context info, use it\n // run thru all possible stack tops in ctx\n if (! config.context.isEmpty()) {\n for ( var i =0; i 0.\n\t\t\t\tif (this._dfa !== null && this._dfa.precedenceDfa) {\n\t\t\t\t\tif (t.outermostPrecedenceReturn === this._dfa.atnStartState.ruleIndex) {\n\t\t\t\t\t\tc.precedenceFilterSuppressed = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n c.reachesIntoOuterContext += 1;\n if (closureBusy.add(c)!==c) {\n // avoid infinite recursion for right-recursive rules\n continue;\n }\n configs.dipsIntoOuterContext = true; // TODO: can remove? only care when we add to set per middle of this method\n newDepth -= 1;\n if (this.debug) {\n console.log(\"dips into outer ctx: \" + c);\n }\n } else {\n if (!t.isEpsilon && closureBusy.add(c)!==c){\n // avoid infinite recursion for EOF* and EOF+\n continue;\n }\n if (t instanceof RuleTransition) {\n // latch when newDepth goes negative - once we step out of the entry context we can't return\n if (newDepth >= 0) {\n newDepth += 1;\n }\n }\n }\n this.closureCheckingStopState(c, configs, closureBusy, continueCollecting, fullCtx, newDepth, treatEofAsEpsilon);\n }\n }\n};\n\n\nParserATNSimulator.prototype.canDropLoopEntryEdgeInLeftRecursiveRule = function(config) {\n // return False\n var p = config.state;\n // First check to see if we are in StarLoopEntryState generated during\n // left-recursion elimination. For efficiency, also check if\n // the context has an empty stack case. If so, it would mean\n // global FOLLOW so we can't perform optimization\n // Are we the special loop entry/exit state? or SLL wildcard\n if(p.stateType != ATNState.STAR_LOOP_ENTRY)\n return false;\n if(p.stateType != ATNState.STAR_LOOP_ENTRY || !p.isPrecedenceDecision ||\n config.context.isEmpty() || config.context.hasEmptyPath())\n return false;\n\n // Require all return states to return back to the same rule that p is in.\n var numCtxs = config.context.length;\n for(var i=0; i=0) {\n return this.parser.ruleNames[index];\n } else {\n return \"\";\n }\n};\n\nParserATNSimulator.prototype.getEpsilonTarget = function(config, t, collectPredicates, inContext, fullCtx, treatEofAsEpsilon) {\n switch(t.serializationType) {\n case Transition.RULE:\n return this.ruleTransition(config, t);\n case Transition.PRECEDENCE:\n return this.precedenceTransition(config, t, collectPredicates, inContext, fullCtx);\n case Transition.PREDICATE:\n return this.predTransition(config, t, collectPredicates, inContext, fullCtx);\n case Transition.ACTION:\n return this.actionTransition(config, t);\n case Transition.EPSILON:\n return new ATNConfig({state:t.target}, config);\n case Transition.ATOM:\n case Transition.RANGE:\n case Transition.SET:\n // EOF transitions act like epsilon transitions after the first EOF\n // transition is traversed\n if (treatEofAsEpsilon) {\n if (t.matches(Token.EOF, 0, 1)) {\n return new ATNConfig({state: t.target}, config);\n }\n }\n return null;\n default:\n \treturn null;\n }\n};\n\nParserATNSimulator.prototype.actionTransition = function(config, t) {\n if (this.debug) {\n var index = t.actionIndex==-1 ? 65535 : t.actionIndex;\n console.log(\"ACTION edge \" + t.ruleIndex + \":\" + index);\n }\n return new ATNConfig({state:t.target}, config);\n};\n\nParserATNSimulator.prototype.precedenceTransition = function(config, pt, collectPredicates, inContext, fullCtx) {\n if (this.debug) {\n console.log(\"PRED (collectPredicates=\" + collectPredicates + \") \" +\n pt.precedence + \">=_p, ctx dependent=true\");\n if (this.parser!==null) {\n \tconsole.log(\"context surrounding pred is \" + Utils.arrayToString(this.parser.getRuleInvocationStack()));\n }\n }\n var c = null;\n if (collectPredicates && inContext) {\n if (fullCtx) {\n // In full context mode, we can evaluate predicates on-the-fly\n // during closure, which dramatically reduces the size of\n // the config sets. It also obviates the need to test predicates\n // later during conflict resolution.\n var currentPosition = this._input.index;\n this._input.seek(this._startIndex);\n var predSucceeds = pt.getPredicate().evaluate(this.parser, this._outerContext);\n this._input.seek(currentPosition);\n if (predSucceeds) {\n c = new ATNConfig({state:pt.target}, config); // no pred context\n }\n } else {\n var newSemCtx = SemanticContext.andContext(config.semanticContext, pt.getPredicate());\n c = new ATNConfig({state:pt.target, semanticContext:newSemCtx}, config);\n }\n } else {\n c = new ATNConfig({state:pt.target}, config);\n }\n if (this.debug) {\n console.log(\"config from pred transition=\" + c);\n }\n return c;\n};\n\nParserATNSimulator.prototype.predTransition = function(config, pt, collectPredicates, inContext, fullCtx) {\n if (this.debug) {\n console.log(\"PRED (collectPredicates=\" + collectPredicates + \") \" + pt.ruleIndex +\n \":\" + pt.predIndex + \", ctx dependent=\" + pt.isCtxDependent);\n if (this.parser!==null) {\n console.log(\"context surrounding pred is \" + Utils.arrayToString(this.parser.getRuleInvocationStack()));\n }\n }\n var c = null;\n if (collectPredicates && ((pt.isCtxDependent && inContext) || ! pt.isCtxDependent)) {\n if (fullCtx) {\n // In full context mode, we can evaluate predicates on-the-fly\n // during closure, which dramatically reduces the size of\n // the config sets. It also obviates the need to test predicates\n // later during conflict resolution.\n var currentPosition = this._input.index;\n this._input.seek(this._startIndex);\n var predSucceeds = pt.getPredicate().evaluate(this.parser, this._outerContext);\n this._input.seek(currentPosition);\n if (predSucceeds) {\n c = new ATNConfig({state:pt.target}, config); // no pred context\n }\n } else {\n var newSemCtx = SemanticContext.andContext(config.semanticContext, pt.getPredicate());\n c = new ATNConfig({state:pt.target, semanticContext:newSemCtx}, config);\n }\n } else {\n c = new ATNConfig({state:pt.target}, config);\n }\n if (this.debug) {\n console.log(\"config from pred transition=\" + c);\n }\n return c;\n};\n\nParserATNSimulator.prototype.ruleTransition = function(config, t) {\n if (this.debug) {\n console.log(\"CALL rule \" + this.getRuleName(t.target.ruleIndex) + \", ctx=\" + config.context);\n }\n var returnState = t.followState;\n var newContext = SingletonPredictionContext.create(config.context, returnState.stateNumber);\n return new ATNConfig({state:t.target, context:newContext}, config );\n};\n\nParserATNSimulator.prototype.getConflictingAlts = function(configs) {\n var altsets = PredictionMode.getConflictingAltSubsets(configs);\n return PredictionMode.getAlts(altsets);\n};\n\n // Sam pointed out a problem with the previous definition, v3, of\n // ambiguous states. If we have another state associated with conflicting\n // alternatives, we should keep going. For example, the following grammar\n //\n // s : (ID | ID ID?) ';' ;\n //\n // When the ATN simulation reaches the state before ';', it has a DFA\n // state that looks like: [12|1|[], 6|2|[], 12|2|[]]. Naturally\n // 12|1|[] and 12|2|[] conflict, but we cannot stop processing this node\n // because alternative to has another way to continue, via [6|2|[]].\n // The key is that we have a single state that has config's only associated\n // with a single alternative, 2, and crucially the state transitions\n // among the configurations are all non-epsilon transitions. That means\n // we don't consider any conflicts that include alternative 2. So, we\n // ignore the conflict between alts 1 and 2. We ignore a set of\n // conflicting alts when there is an intersection with an alternative\n // associated with a single alt state in the state→config-list map.\n //\n // It's also the case that we might have two conflicting configurations but\n // also a 3rd nonconflicting configuration for a different alternative:\n // [1|1|[], 1|2|[], 8|3|[]]. This can come about from grammar:\n //\n // a : A | A | A B ;\n //\n // After matching input A, we reach the stop state for rule A, state 1.\n // State 8 is the state right before B. Clearly alternatives 1 and 2\n // conflict and no amount of further lookahead will separate the two.\n // However, alternative 3 will be able to continue and so we do not\n // stop working on this state. In the previous example, we're concerned\n // with states associated with the conflicting alternatives. Here alt\n // 3 is not associated with the conflicting configs, but since we can continue\n // looking for input reasonably, I don't declare the state done. We\n // ignore a set of conflicting alts when we have an alternative\n // that we still need to pursue.\n//\n\nParserATNSimulator.prototype.getConflictingAltsOrUniqueAlt = function(configs) {\n var conflictingAlts = null;\n if (configs.uniqueAlt!== ATN.INVALID_ALT_NUMBER) {\n conflictingAlts = new BitSet();\n conflictingAlts.add(configs.uniqueAlt);\n } else {\n conflictingAlts = configs.conflictingAlts;\n }\n return conflictingAlts;\n};\n\nParserATNSimulator.prototype.getTokenName = function( t) {\n if (t===Token.EOF) {\n return \"EOF\";\n }\n if( this.parser!==null && this.parser.literalNames!==null) {\n if (t >= this.parser.literalNames.length && t >= this.parser.symbolicNames.length) {\n console.log(\"\" + t + \" ttype out of range: \" + this.parser.literalNames);\n console.log(\"\" + this.parser.getInputStream().getTokens());\n } else {\n var name = this.parser.literalNames[t] || this.parser.symbolicNames[t];\n return name + \"<\" + t + \">\";\n }\n }\n return \"\" + t;\n};\n\nParserATNSimulator.prototype.getLookaheadName = function(input) {\n return this.getTokenName(input.LA(1));\n};\n\n// Used for debugging in adaptivePredict around execATN but I cut\n// it out for clarity now that alg. works well. We can leave this\n// \"dead\" code for a bit.\n//\nParserATNSimulator.prototype.dumpDeadEndConfigs = function(nvae) {\n console.log(\"dead end configs: \");\n var decs = nvae.getDeadEndConfigs();\n for(var i=0; i0) {\n var t = c.state.transitions[0];\n if (t instanceof AtomTransition) {\n trans = \"Atom \"+ this.getTokenName(t.label);\n } else if (t instanceof SetTransition) {\n var neg = (t instanceof NotSetTransition);\n trans = (neg ? \"~\" : \"\") + \"Set \" + t.set;\n }\n }\n console.error(c.toString(this.parser, true) + \":\" + trans);\n }\n};\n\nParserATNSimulator.prototype.noViableAlt = function(input, outerContext, configs, startIndex) {\n return new NoViableAltException(this.parser, input, input.get(startIndex), input.LT(1), configs, outerContext);\n};\n\nParserATNSimulator.prototype.getUniqueAlt = function(configs) {\n var alt = ATN.INVALID_ALT_NUMBER;\n for(var i=0;iIf {@code to} is {@code null}, this method returns {@code null}.\n// Otherwise, this method returns the {@link DFAState} returned by calling\n// {@link //addDFAState} for the {@code to} state.

    \n//\n// @param dfa The DFA\n// @param from The source state for the edge\n// @param t The input symbol\n// @param to The target state for the edge\n//\n// @return If {@code to} is {@code null}, this method returns {@code null};\n// otherwise this method returns the result of calling {@link //addDFAState}\n// on {@code to}\n//\nParserATNSimulator.prototype.addDFAEdge = function(dfa, from_, t, to) {\n if( this.debug) {\n console.log(\"EDGE \" + from_ + \" -> \" + to + \" upon \" + this.getTokenName(t));\n }\n if (to===null) {\n return null;\n }\n to = this.addDFAState(dfa, to); // used existing if possible not incoming\n if (from_===null || t < -1 || t > this.atn.maxTokenType) {\n return to;\n }\n if (from_.edges===null) {\n from_.edges = [];\n }\n from_.edges[t+1] = to; // connect\n\n if (this.debug) {\n var literalNames = this.parser===null ? null : this.parser.literalNames;\n var symbolicNames = this.parser===null ? null : this.parser.symbolicNames;\n console.log(\"DFA=\\n\" + dfa.toString(literalNames, symbolicNames));\n }\n return to;\n};\n//\n// Add state {@code D} to the DFA if it is not already present, and return\n// the actual instance stored in the DFA. If a state equivalent to {@code D}\n// is already in the DFA, the existing state is returned. Otherwise this\n// method returns {@code D} after adding it to the DFA.\n//\n//

    If {@code D} is {@link //ERROR}, this method returns {@link //ERROR} and\n// does not change the DFA.

    \n//\n// @param dfa The dfa\n// @param D The DFA state to add\n// @return The state stored in the DFA. This will be either the existing\n// state if {@code D} is already in the DFA, or {@code D} itself if the\n// state was not already present.\n//\nParserATNSimulator.prototype.addDFAState = function(dfa, D) {\n if (D == ATNSimulator.ERROR) {\n return D;\n }\n var existing = dfa.states.get(D);\n if(existing!==null) {\n return existing;\n }\n D.stateNumber = dfa.states.length;\n if (! D.configs.readOnly) {\n D.configs.optimizeConfigs(this);\n D.configs.setReadonly(true);\n }\n dfa.states.add(D);\n if (this.debug) {\n console.log(\"adding new DFA state: \" + D);\n }\n return D;\n};\n\nParserATNSimulator.prototype.reportAttemptingFullContext = function(dfa, conflictingAlts, configs, startIndex, stopIndex) {\n if (this.debug || this.retry_debug) {\n var interval = new Interval(startIndex, stopIndex + 1);\n console.log(\"reportAttemptingFullContext decision=\" + dfa.decision + \":\" + configs +\n \", input=\" + this.parser.getTokenStream().getText(interval));\n }\n if (this.parser!==null) {\n this.parser.getErrorListenerDispatch().reportAttemptingFullContext(this.parser, dfa, startIndex, stopIndex, conflictingAlts, configs);\n }\n};\n\nParserATNSimulator.prototype.reportContextSensitivity = function(dfa, prediction, configs, startIndex, stopIndex) {\n if (this.debug || this.retry_debug) {\n var interval = new Interval(startIndex, stopIndex + 1);\n console.log(\"reportContextSensitivity decision=\" + dfa.decision + \":\" + configs +\n \", input=\" + this.parser.getTokenStream().getText(interval));\n }\n if (this.parser!==null) {\n this.parser.getErrorListenerDispatch().reportContextSensitivity(this.parser, dfa, startIndex, stopIndex, prediction, configs);\n }\n};\n\n// If context sensitive parsing, we know it's ambiguity not conflict//\nParserATNSimulator.prototype.reportAmbiguity = function(dfa, D, startIndex, stopIndex,\n exact, ambigAlts, configs ) {\n if (this.debug || this.retry_debug) {\n var interval = new Interval(startIndex, stopIndex + 1);\n console.log(\"reportAmbiguity \" + ambigAlts + \":\" + configs +\n \", input=\" + this.parser.getTokenStream().getText(interval));\n }\n if (this.parser!==null) {\n this.parser.getErrorListenerDispatch().reportAmbiguity(this.parser, dfa, startIndex, stopIndex, exact, ambigAlts, configs);\n }\n};\n\nexports.ParserATNSimulator = ParserATNSimulator;","/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n\nexports.DFA = require('./DFA').DFA;\nexports.DFASerializer = require('./DFASerializer').DFASerializer;\nexports.LexerDFASerializer = require('./DFASerializer').LexerDFASerializer;\nexports.PredPrediction = require('./DFAState').PredPrediction;\n","//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n\nvar Set = require(\"../Utils\").Set;\nvar DFAState = require('./DFAState').DFAState;\nvar StarLoopEntryState = require('../atn/ATNState').StarLoopEntryState;\nvar ATNConfigSet = require('./../atn/ATNConfigSet').ATNConfigSet;\nvar DFASerializer = require('./DFASerializer').DFASerializer;\nvar LexerDFASerializer = require('./DFASerializer').LexerDFASerializer;\n\n\n\nfunction DFA(atnStartState, decision) {\n\tif (decision === undefined) {\n\t\tdecision = 0;\n\t}\n\t// From which ATN state did we create this DFA?\n\tthis.atnStartState = atnStartState;\n\tthis.decision = decision;\n\t// A set of all DFA states. Use {@link Map} so we can get old state back\n\t// ({@link Set} only allows you to see if it's there).\n\tthis._states = new Set();\n\tthis.s0 = null;\n\t// {@code true} if this DFA is for a precedence decision; otherwise,\n\t// {@code false}. This is the backing field for {@link //isPrecedenceDfa},\n\t// {@link //setPrecedenceDfa}.\n\tthis.precedenceDfa = false;\n if (atnStartState instanceof StarLoopEntryState)\n {\n if (atnStartState.isPrecedenceDecision) {\n this.precedenceDfa = true;\n var precedenceState = new DFAState(null, new ATNConfigSet());\n precedenceState.edges = [];\n precedenceState.isAcceptState = false;\n precedenceState.requiresFullContext = false;\n this.s0 = precedenceState;\n }\n }\n\treturn this;\n}\n\n// Get the start state for a specific precedence value.\n//\n// @param precedence The current precedence.\n// @return The start state corresponding to the specified precedence, or\n// {@code null} if no start state exists for the specified precedence.\n//\n// @throws IllegalStateException if this is not a precedence DFA.\n// @see //isPrecedenceDfa()\n\nDFA.prototype.getPrecedenceStartState = function(precedence) {\n\tif (!(this.precedenceDfa)) {\n\t\tthrow (\"Only precedence DFAs may contain a precedence start state.\");\n\t}\n\t// s0.edges is never null for a precedence DFA\n\tif (precedence < 0 || precedence >= this.s0.edges.length) {\n\t\treturn null;\n\t}\n\treturn this.s0.edges[precedence] || null;\n};\n\n// Set the start state for a specific precedence value.\n//\n// @param precedence The current precedence.\n// @param startState The start state corresponding to the specified\n// precedence.\n//\n// @throws IllegalStateException if this is not a precedence DFA.\n// @see //isPrecedenceDfa()\n//\nDFA.prototype.setPrecedenceStartState = function(precedence, startState) {\n\tif (!(this.precedenceDfa)) {\n\t\tthrow (\"Only precedence DFAs may contain a precedence start state.\");\n\t}\n\tif (precedence < 0) {\n\t\treturn;\n\t}\n\n\t// synchronization on s0 here is ok. when the DFA is turned into a\n\t// precedence DFA, s0 will be initialized once and not updated again\n\t// s0.edges is never null for a precedence DFA\n\tthis.s0.edges[precedence] = startState;\n};\n\n//\n// Sets whether this is a precedence DFA. If the specified value differs\n// from the current DFA configuration, the following actions are taken;\n// otherwise no changes are made to the current DFA.\n//\n//
      \n//
    • The {@link //states} map is cleared
    • \n//
    • If {@code precedenceDfa} is {@code false}, the initial state\n// {@link //s0} is set to {@code null}; otherwise, it is initialized to a new\n// {@link DFAState} with an empty outgoing {@link DFAState//edges} array to\n// store the start states for individual precedence values.
    • \n//
    • The {@link //precedenceDfa} field is updated
    • \n//
    \n//\n// @param precedenceDfa {@code true} if this is a precedence DFA; otherwise,\n// {@code false}\n\nDFA.prototype.setPrecedenceDfa = function(precedenceDfa) {\n\tif (this.precedenceDfa!==precedenceDfa) {\n\t\tthis._states = new DFAStatesSet();\n\t\tif (precedenceDfa) {\n\t\t\tvar precedenceState = new DFAState(null, new ATNConfigSet());\n\t\t\tprecedenceState.edges = [];\n\t\t\tprecedenceState.isAcceptState = false;\n\t\t\tprecedenceState.requiresFullContext = false;\n\t\t\tthis.s0 = precedenceState;\n\t\t} else {\n\t\t\tthis.s0 = null;\n\t\t}\n\t\tthis.precedenceDfa = precedenceDfa;\n\t}\n};\n\nObject.defineProperty(DFA.prototype, \"states\", {\n\tget : function() {\n\t\treturn this._states;\n\t}\n});\n\n// Return a list of all states in this DFA, ordered by state number.\nDFA.prototype.sortedStates = function() {\n\tvar list = this._states.values();\n\treturn list.sort(function(a, b) {\n\t\treturn a.stateNumber - b.stateNumber;\n\t});\n};\n\nDFA.prototype.toString = function(literalNames, symbolicNames) {\n\tliteralNames = literalNames || null;\n\tsymbolicNames = symbolicNames || null;\n\tif (this.s0 === null) {\n\t\treturn \"\";\n\t}\n\tvar serializer = new DFASerializer(this, literalNames, symbolicNames);\n\treturn serializer.toString();\n};\n\nDFA.prototype.toLexerString = function() {\n\tif (this.s0 === null) {\n\t\treturn \"\";\n\t}\n\tvar serializer = new LexerDFASerializer(this);\n\treturn serializer.toString();\n};\n\nexports.DFA = DFA;\n","/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n\nvar Tree = require('./Tree');\nexports.Trees = require('./Trees').Trees;\nexports.RuleNode = Tree.RuleNode;\nexports.ParseTreeListener = Tree.ParseTreeListener;\nexports.ParseTreeVisitor = Tree.ParseTreeVisitor;\nexports.ParseTreeWalker = Tree.ParseTreeWalker;\n","/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n\nexports.RecognitionException = require('./Errors').RecognitionException;\nexports.NoViableAltException = require('./Errors').NoViableAltException;\nexports.LexerNoViableAltException = require('./Errors').LexerNoViableAltException;\nexports.InputMismatchException = require('./Errors').InputMismatchException;\nexports.FailedPredicateException = require('./Errors').FailedPredicateException;\nexports.DiagnosticErrorListener = require('./DiagnosticErrorListener').DiagnosticErrorListener;\nexports.BailErrorStrategy = require('./ErrorStrategy').BailErrorStrategy;\nexports.ErrorListener = require('./ErrorListener').ErrorListener;\n","//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n//\n\n//\n// This implementation of {@link ANTLRErrorListener} can be used to identify\n// certain potential correctness and performance problems in grammars. \"Reports\"\n// are made by calling {@link Parser//notifyErrorListeners} with the appropriate\n// message.\n//\n//
      \n//
    • Ambiguities: These are cases where more than one path through the\n// grammar can match the input.
    • \n//
    • Weak context sensitivity: These are cases where full-context\n// prediction resolved an SLL conflict to a unique alternative which equaled the\n// minimum alternative of the SLL conflict.
    • \n//
    • Strong (forced) context sensitivity: These are cases where the\n// full-context prediction resolved an SLL conflict to a unique alternative,\n// and the minimum alternative of the SLL conflict was found to not be\n// a truly viable alternative. Two-stage parsing cannot be used for inputs where\n// this situation occurs.
    • \n//
    \n\nvar BitSet = require('./../Utils').BitSet;\nvar ErrorListener = require('./ErrorListener').ErrorListener;\nvar Interval = require('./../IntervalSet').Interval;\n\nfunction DiagnosticErrorListener(exactOnly) {\n\tErrorListener.call(this);\n\texactOnly = exactOnly || true;\n\t// whether all ambiguities or only exact ambiguities are reported.\n\tthis.exactOnly = exactOnly;\n\treturn this;\n}\n\nDiagnosticErrorListener.prototype = Object.create(ErrorListener.prototype);\nDiagnosticErrorListener.prototype.constructor = DiagnosticErrorListener;\n\nDiagnosticErrorListener.prototype.reportAmbiguity = function(recognizer, dfa,\n\t\tstartIndex, stopIndex, exact, ambigAlts, configs) {\n\tif (this.exactOnly && !exact) {\n\t\treturn;\n\t}\n\tvar msg = \"reportAmbiguity d=\" +\n\t\t\tthis.getDecisionDescription(recognizer, dfa) +\n\t\t\t\": ambigAlts=\" +\n\t\t\tthis.getConflictingAlts(ambigAlts, configs) +\n\t\t\t\", input='\" +\n\t\t\trecognizer.getTokenStream().getText(new Interval(startIndex, stopIndex)) + \"'\";\n\trecognizer.notifyErrorListeners(msg);\n};\n\nDiagnosticErrorListener.prototype.reportAttemptingFullContext = function(\n\t\trecognizer, dfa, startIndex, stopIndex, conflictingAlts, configs) {\n\tvar msg = \"reportAttemptingFullContext d=\" +\n\t\t\tthis.getDecisionDescription(recognizer, dfa) +\n\t\t\t\", input='\" +\n\t\t\trecognizer.getTokenStream().getText(new Interval(startIndex, stopIndex)) + \"'\";\n\trecognizer.notifyErrorListeners(msg);\n};\n\nDiagnosticErrorListener.prototype.reportContextSensitivity = function(\n\t\trecognizer, dfa, startIndex, stopIndex, prediction, configs) {\n\tvar msg = \"reportContextSensitivity d=\" +\n\t\t\tthis.getDecisionDescription(recognizer, dfa) +\n\t\t\t\", input='\" +\n\t\t\trecognizer.getTokenStream().getText(new Interval(startIndex, stopIndex)) + \"'\";\n\trecognizer.notifyErrorListeners(msg);\n};\n\nDiagnosticErrorListener.prototype.getDecisionDescription = function(recognizer, dfa) {\n\tvar decision = dfa.decision;\n\tvar ruleIndex = dfa.atnStartState.ruleIndex;\n\n\tvar ruleNames = recognizer.ruleNames;\n\tif (ruleIndex < 0 || ruleIndex >= ruleNames.length) {\n\t\treturn \"\" + decision;\n\t}\n\tvar ruleName = ruleNames[ruleIndex] || null;\n\tif (ruleName === null || ruleName.length === 0) {\n\t\treturn \"\" + decision;\n\t}\n\treturn \"\" + decision + \" (\" + ruleName + \")\";\n};\n\n//\n// Computes the set of conflicting or ambiguous alternatives from a\n// configuration set, if that information was not already provided by the\n// parser.\n//\n// @param reportedAlts The set of conflicting or ambiguous alternatives, as\n// reported by the parser.\n// @param configs The conflicting or ambiguous configuration set.\n// @return Returns {@code reportedAlts} if it is not {@code null}, otherwise\n// returns the set of alternatives represented in {@code configs}.\n//\nDiagnosticErrorListener.prototype.getConflictingAlts = function(reportedAlts, configs) {\n\tif (reportedAlts !== null) {\n\t\treturn reportedAlts;\n\t}\n\tvar result = new BitSet();\n\tfor (var i = 0; i < configs.items.length; i++) {\n\t\tresult.add(configs.items[i].alt);\n\t}\n\treturn \"{\" + result.values().join(\", \") + \"}\";\n};\n\nexports.DiagnosticErrorListener = DiagnosticErrorListener;","//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n//\n\nvar InputStream = require('./InputStream').InputStream;\n\nvar isNodeJs = typeof window === 'undefined' && typeof importScripts === 'undefined';\nvar fs = isNodeJs ? require(\"fs\") : null;\n\n// Utility functions to create InputStreams from various sources.\n//\n// All returned InputStreams support the full range of Unicode\n// up to U+10FFFF (the default behavior of InputStream only supports\n// code points up to U+FFFF).\nvar CharStreams = {\n // Creates an InputStream from a string.\n fromString: function(str) {\n return new InputStream(str, true);\n },\n\n // Asynchronously creates an InputStream from a blob given the\n // encoding of the bytes in that blob (defaults to 'utf8' if\n // encoding is null).\n //\n // Invokes onLoad(result) on success, onError(error) on\n // failure.\n fromBlob: function(blob, encoding, onLoad, onError) {\n var reader = FileReader();\n reader.onload = function(e) {\n var is = new InputStream(e.target.result, true);\n onLoad(is);\n };\n reader.onerror = onError;\n reader.readAsText(blob, encoding);\n },\n\n // Creates an InputStream from a Buffer given the\n // encoding of the bytes in that buffer (defaults to 'utf8' if\n // encoding is null).\n fromBuffer: function(buffer, encoding) {\n return new InputStream(buffer.toString(encoding), true);\n },\n\n // Asynchronously creates an InputStream from a file on disk given\n // the encoding of the bytes in that file (defaults to 'utf8' if\n // encoding is null).\n //\n // Invokes callback(error, result) on completion.\n fromPath: function(path, encoding, callback) {\n fs.readFile(path, encoding, function(err, data) {\n var is = null;\n if (data !== null) {\n is = new InputStream(data, true);\n }\n callback(err, is);\n });\n },\n\n // Synchronously creates an InputStream given a path to a file\n // on disk and the encoding of the bytes in that file (defaults to\n // 'utf8' if encoding is null).\n fromPathSync: function(path, encoding) {\n var data = fs.readFileSync(path, encoding);\n return new InputStream(data, true);\n }\n};\n\nexports.CharStreams = CharStreams;\n","//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n//\n\n//\n// This is an InputStream that is loaded from a file all at once\n// when you construct the object.\n//\nvar InputStream = require('./InputStream').InputStream;\nvar isNodeJs = typeof window === 'undefined' && typeof importScripts === 'undefined';\nvar fs = isNodeJs ? require(\"fs\") : null;\n\nfunction FileStream(fileName, decodeToUnicodeCodePoints) {\n\tvar data = fs.readFileSync(fileName, \"utf8\");\n\tInputStream.call(this, data, decodeToUnicodeCodePoints);\n\tthis.fileName = fileName;\n\treturn this;\n}\n\nFileStream.prototype = Object.create(InputStream.prototype);\nFileStream.prototype.constructor = FileStream;\n\nexports.FileStream = FileStream;\n","//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n///\n\n//\n// This class extends {@link BufferedTokenStream} with functionality to filter\n// token streams to tokens on a particular channel (tokens where\n// {@link Token//getChannel} returns a particular value).\n//\n//

    \n// This token stream provides access to all tokens by index or when calling\n// methods like {@link //getText}. The channel filtering is only used for code\n// accessing tokens via the lookahead methods {@link //LA}, {@link //LT}, and\n// {@link //LB}.

    \n//\n//

    \n// By default, tokens are placed on the default channel\n// ({@link Token//DEFAULT_CHANNEL}), but may be reassigned by using the\n// {@code ->channel(HIDDEN)} lexer command, or by using an embedded action to\n// call {@link Lexer//setChannel}.\n//

    \n//\n//

    \n// Note: lexer rules which use the {@code ->skip} lexer command or call\n// {@link Lexer//skip} do not produce tokens at all, so input text matched by\n// such a rule will not be available as part of the token stream, regardless of\n// channel.

    \n///\n\nvar Token = require('./Token').Token;\nvar BufferedTokenStream = require('./BufferedTokenStream').BufferedTokenStream;\n\nfunction CommonTokenStream(lexer, channel) {\n\tBufferedTokenStream.call(this, lexer);\n this.channel = channel===undefined ? Token.DEFAULT_CHANNEL : channel;\n return this;\n}\n\nCommonTokenStream.prototype = Object.create(BufferedTokenStream.prototype);\nCommonTokenStream.prototype.constructor = CommonTokenStream;\n\nCommonTokenStream.prototype.adjustSeekIndex = function(i) {\n return this.nextTokenOnChannel(i, this.channel);\n};\n\nCommonTokenStream.prototype.LB = function(k) {\n if (k===0 || this.index-k<0) {\n return null;\n }\n var i = this.index;\n var n = 1;\n // find k good tokens looking backwards\n while (n <= k) {\n // skip off-channel tokens\n i = this.previousTokenOnChannel(i - 1, this.channel);\n n += 1;\n }\n if (i < 0) {\n return null;\n }\n return this.tokens[i];\n};\n\nCommonTokenStream.prototype.LT = function(k) {\n this.lazyInit();\n if (k === 0) {\n return null;\n }\n if (k < 0) {\n return this.LB(-k);\n }\n var i = this.index;\n var n = 1; // we know tokens[pos] is a good one\n // find k good tokens\n while (n < k) {\n // skip off-channel tokens, but make sure to not look past EOF\n if (this.sync(i + 1)) {\n i = this.nextTokenOnChannel(i + 1, this.channel);\n }\n n += 1;\n }\n return this.tokens[i];\n};\n\n// Count EOF just once.///\nCommonTokenStream.prototype.getNumberOfOnChannelTokens = function() {\n var n = 0;\n this.fill();\n for (var i =0; i< this.tokens.length;i++) {\n var t = this.tokens[i];\n if( t.channel===this.channel) {\n n += 1;\n }\n if( t.type===Token.EOF) {\n break;\n }\n }\n return n;\n};\n\nexports.CommonTokenStream = CommonTokenStream;","//\n/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n\n// This implementation of {@link TokenStream} loads tokens from a\n// {@link TokenSource} on-demand, and places the tokens in a buffer to provide\n// access to any previous token by index.\n//\n//

    \n// This token stream ignores the value of {@link Token//getChannel}. If your\n// parser requires the token stream filter tokens to only those on a particular\n// channel, such as {@link Token//DEFAULT_CHANNEL} or\n// {@link Token//HIDDEN_CHANNEL}, use a filtering token stream such a\n// {@link CommonTokenStream}.

    \n\nvar Token = require('./Token').Token;\nvar Lexer = require('./Lexer').Lexer;\nvar Interval = require('./IntervalSet').Interval;\n\n// this is just to keep meaningful parameter types to Parser\nfunction TokenStream() {\n\treturn this;\n}\n\nfunction BufferedTokenStream(tokenSource) {\n\n\tTokenStream.call(this);\n\t// The {@link TokenSource} from which tokens for this stream are fetched.\n\tthis.tokenSource = tokenSource;\n\n\t// A collection of all tokens fetched from the token source. The list is\n\t// considered a complete view of the input once {@link //fetchedEOF} is set\n\t// to {@code true}.\n\tthis.tokens = [];\n\n\t// The index into {@link //tokens} of the current token (next token to\n\t// {@link //consume}). {@link //tokens}{@code [}{@link //p}{@code ]} should\n\t// be\n\t// {@link //LT LT(1)}.\n\t//\n\t//

    This field is set to -1 when the stream is first constructed or when\n\t// {@link //setTokenSource} is called, indicating that the first token has\n\t// not yet been fetched from the token source. For additional information,\n\t// see the documentation of {@link IntStream} for a description of\n\t// Initializing Methods.

    \n\tthis.index = -1;\n\n\t// Indicates whether the {@link Token//EOF} token has been fetched from\n\t// {@link //tokenSource} and added to {@link //tokens}. This field improves\n\t// performance for the following cases:\n\t//\n\t//
      \n\t//
    • {@link //consume}: The lookahead check in {@link //consume} to\n\t// prevent\n\t// consuming the EOF symbol is optimized by checking the values of\n\t// {@link //fetchedEOF} and {@link //p} instead of calling {@link\n\t// //LA}.
    • \n\t//
    • {@link //fetch}: The check to prevent adding multiple EOF symbols\n\t// into\n\t// {@link //tokens} is trivial with this field.
    • \n\t//
        \n\tthis.fetchedEOF = false;\n\treturn this;\n}\n\nBufferedTokenStream.prototype = Object.create(TokenStream.prototype);\nBufferedTokenStream.prototype.constructor = BufferedTokenStream;\n\nBufferedTokenStream.prototype.mark = function() {\n\treturn 0;\n};\n\nBufferedTokenStream.prototype.release = function(marker) {\n\t// no resources to release\n};\n\nBufferedTokenStream.prototype.reset = function() {\n\tthis.seek(0);\n};\n\nBufferedTokenStream.prototype.seek = function(index) {\n\tthis.lazyInit();\n\tthis.index = this.adjustSeekIndex(index);\n};\n\nBufferedTokenStream.prototype.get = function(index) {\n\tthis.lazyInit();\n\treturn this.tokens[index];\n};\n\nBufferedTokenStream.prototype.consume = function() {\n\tvar skipEofCheck = false;\n\tif (this.index >= 0) {\n\t\tif (this.fetchedEOF) {\n\t\t\t// the last token in tokens is EOF. skip check if p indexes any\n\t\t\t// fetched token except the last.\n\t\t\tskipEofCheck = this.index < this.tokens.length - 1;\n\t\t} else {\n\t\t\t// no EOF token in tokens. skip check if p indexes a fetched token.\n\t\t\tskipEofCheck = this.index < this.tokens.length;\n\t\t}\n\t} else {\n\t\t// not yet initialized\n\t\tskipEofCheck = false;\n\t}\n\tif (!skipEofCheck && this.LA(1) === Token.EOF) {\n\t\tthrow \"cannot consume EOF\";\n\t}\n\tif (this.sync(this.index + 1)) {\n\t\tthis.index = this.adjustSeekIndex(this.index + 1);\n\t}\n};\n\n// Make sure index {@code i} in tokens has a token.\n//\n// @return {@code true} if a token is located at index {@code i}, otherwise\n// {@code false}.\n// @see //get(int i)\n// /\nBufferedTokenStream.prototype.sync = function(i) {\n\tvar n = i - this.tokens.length + 1; // how many more elements we need?\n\tif (n > 0) {\n\t\tvar fetched = this.fetch(n);\n\t\treturn fetched >= n;\n\t}\n\treturn true;\n};\n\n// Add {@code n} elements to buffer.\n//\n// @return The actual number of elements added to the buffer.\n// /\nBufferedTokenStream.prototype.fetch = function(n) {\n\tif (this.fetchedEOF) {\n\t\treturn 0;\n\t}\n\tfor (var i = 0; i < n; i++) {\n\t\tvar t = this.tokenSource.nextToken();\n\t\tt.tokenIndex = this.tokens.length;\n\t\tthis.tokens.push(t);\n\t\tif (t.type === Token.EOF) {\n\t\t\tthis.fetchedEOF = true;\n\t\t\treturn i + 1;\n\t\t}\n\t}\n\treturn n;\n};\n\n// Get all tokens from start..stop inclusively///\nBufferedTokenStream.prototype.getTokens = function(start, stop, types) {\n\tif (types === undefined) {\n\t\ttypes = null;\n\t}\n\tif (start < 0 || stop < 0) {\n\t\treturn null;\n\t}\n\tthis.lazyInit();\n\tvar subset = [];\n\tif (stop >= this.tokens.length) {\n\t\tstop = this.tokens.length - 1;\n\t}\n\tfor (var i = start; i < stop; i++) {\n\t\tvar t = this.tokens[i];\n\t\tif (t.type === Token.EOF) {\n\t\t\tbreak;\n\t\t}\n\t\tif (types === null || types.contains(t.type)) {\n\t\t\tsubset.push(t);\n\t\t}\n\t}\n\treturn subset;\n};\n\nBufferedTokenStream.prototype.LA = function(i) {\n\treturn this.LT(i).type;\n};\n\nBufferedTokenStream.prototype.LB = function(k) {\n\tif (this.index - k < 0) {\n\t\treturn null;\n\t}\n\treturn this.tokens[this.index - k];\n};\n\nBufferedTokenStream.prototype.LT = function(k) {\n\tthis.lazyInit();\n\tif (k === 0) {\n\t\treturn null;\n\t}\n\tif (k < 0) {\n\t\treturn this.LB(-k);\n\t}\n\tvar i = this.index + k - 1;\n\tthis.sync(i);\n\tif (i >= this.tokens.length) { // return EOF token\n\t\t// EOF must be last token\n\t\treturn this.tokens[this.tokens.length - 1];\n\t}\n\treturn this.tokens[i];\n};\n\n// Allowed derived classes to modify the behavior of operations which change\n// the current stream position by adjusting the target token index of a seek\n// operation. The default implementation simply returns {@code i}. If an\n// exception is thrown in this method, the current stream index should not be\n// changed.\n//\n//

        For example, {@link CommonTokenStream} overrides this method to ensure\n// that\n// the seek target is always an on-channel token.

        \n//\n// @param i The target token index.\n// @return The adjusted target token index.\n\nBufferedTokenStream.prototype.adjustSeekIndex = function(i) {\n\treturn i;\n};\n\nBufferedTokenStream.prototype.lazyInit = function() {\n\tif (this.index === -1) {\n\t\tthis.setup();\n\t}\n};\n\nBufferedTokenStream.prototype.setup = function() {\n\tthis.sync(0);\n\tthis.index = this.adjustSeekIndex(0);\n};\n\n// Reset this token stream by setting its token source.///\nBufferedTokenStream.prototype.setTokenSource = function(tokenSource) {\n\tthis.tokenSource = tokenSource;\n\tthis.tokens = [];\n\tthis.index = -1;\n\tthis.fetchedEOF = false;\n};\n\n\n// Given a starting index, return the index of the next token on channel.\n// Return i if tokens[i] is on channel. Return -1 if there are no tokens\n// on channel between i and EOF.\n// /\nBufferedTokenStream.prototype.nextTokenOnChannel = function(i, channel) {\n\tthis.sync(i);\n\tif (i >= this.tokens.length) {\n\t\treturn -1;\n\t}\n\tvar token = this.tokens[i];\n\twhile (token.channel !== this.channel) {\n\t\tif (token.type === Token.EOF) {\n\t\t\treturn -1;\n\t\t}\n\t\ti += 1;\n\t\tthis.sync(i);\n\t\ttoken = this.tokens[i];\n\t}\n\treturn i;\n};\n\n// Given a starting index, return the index of the previous token on channel.\n// Return i if tokens[i] is on channel. Return -1 if there are no tokens\n// on channel between i and 0.\nBufferedTokenStream.prototype.previousTokenOnChannel = function(i, channel) {\n\twhile (i >= 0 && this.tokens[i].channel !== channel) {\n\t\ti -= 1;\n\t}\n\treturn i;\n};\n\n// Collect all tokens on specified channel to the right of\n// the current token up until we see a token on DEFAULT_TOKEN_CHANNEL or\n// EOF. If channel is -1, find any non default channel token.\nBufferedTokenStream.prototype.getHiddenTokensToRight = function(tokenIndex,\n\t\tchannel) {\n\tif (channel === undefined) {\n\t\tchannel = -1;\n\t}\n\tthis.lazyInit();\n\tif (tokenIndex < 0 || tokenIndex >= this.tokens.length) {\n\t\tthrow \"\" + tokenIndex + \" not in 0..\" + this.tokens.length - 1;\n\t}\n\tvar nextOnChannel = this.nextTokenOnChannel(tokenIndex + 1, Lexer.DEFAULT_TOKEN_CHANNEL);\n\tvar from_ = tokenIndex + 1;\n\t// if none onchannel to right, nextOnChannel=-1 so set to = last token\n\tvar to = nextOnChannel === -1 ? this.tokens.length - 1 : nextOnChannel;\n\treturn this.filterForChannel(from_, to, channel);\n};\n\n// Collect all tokens on specified channel to the left of\n// the current token up until we see a token on DEFAULT_TOKEN_CHANNEL.\n// If channel is -1, find any non default channel token.\nBufferedTokenStream.prototype.getHiddenTokensToLeft = function(tokenIndex,\n\t\tchannel) {\n\tif (channel === undefined) {\n\t\tchannel = -1;\n\t}\n\tthis.lazyInit();\n\tif (tokenIndex < 0 || tokenIndex >= this.tokens.length) {\n\t\tthrow \"\" + tokenIndex + \" not in 0..\" + this.tokens.length - 1;\n\t}\n\tvar prevOnChannel = this.previousTokenOnChannel(tokenIndex - 1, Lexer.DEFAULT_TOKEN_CHANNEL);\n\tif (prevOnChannel === tokenIndex - 1) {\n\t\treturn null;\n\t}\n\t// if none on channel to left, prevOnChannel=-1 then from=0\n\tvar from_ = prevOnChannel + 1;\n\tvar to = tokenIndex - 1;\n\treturn this.filterForChannel(from_, to, channel);\n};\n\nBufferedTokenStream.prototype.filterForChannel = function(left, right, channel) {\n\tvar hidden = [];\n\tfor (var i = left; i < right + 1; i++) {\n\t\tvar t = this.tokens[i];\n\t\tif (channel === -1) {\n\t\t\tif (t.channel !== Lexer.DEFAULT_TOKEN_CHANNEL) {\n\t\t\t\thidden.push(t);\n\t\t\t}\n\t\t} else if (t.channel === channel) {\n\t\t\thidden.push(t);\n\t\t}\n\t}\n\tif (hidden.length === 0) {\n\t\treturn null;\n\t}\n\treturn hidden;\n};\n\nBufferedTokenStream.prototype.getSourceName = function() {\n\treturn this.tokenSource.getSourceName();\n};\n\n// Get the text of all tokens in this buffer.///\nBufferedTokenStream.prototype.getText = function(interval) {\n\tthis.lazyInit();\n\tthis.fill();\n\tif (interval === undefined || interval === null) {\n\t\tinterval = new Interval(0, this.tokens.length - 1);\n\t}\n\tvar start = interval.start;\n\tif (start instanceof Token) {\n\t\tstart = start.tokenIndex;\n\t}\n\tvar stop = interval.stop;\n\tif (stop instanceof Token) {\n\t\tstop = stop.tokenIndex;\n\t}\n\tif (start === null || stop === null || start < 0 || stop < 0) {\n\t\treturn \"\";\n\t}\n\tif (stop >= this.tokens.length) {\n\t\tstop = this.tokens.length - 1;\n\t}\n\tvar s = \"\";\n\tfor (var i = start; i < stop + 1; i++) {\n\t\tvar t = this.tokens[i];\n\t\tif (t.type === Token.EOF) {\n\t\t\tbreak;\n\t\t}\n\t\ts = s + t.text;\n\t}\n\treturn s;\n};\n\n// Get all tokens from lexer until EOF///\nBufferedTokenStream.prototype.fill = function() {\n\tthis.lazyInit();\n\twhile (this.fetch(1000) === 1000) {\n\t\tcontinue;\n\t}\n};\n\nexports.BufferedTokenStream = BufferedTokenStream;\n","/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.\n * Use of this file is governed by the BSD 3-clause license that\n * can be found in the LICENSE.txt file in the project root.\n */\n\nvar Token = require('./Token').Token;\nvar ParseTreeListener = require('./tree/Tree').ParseTreeListener;\nvar Recognizer = require('./Recognizer').Recognizer;\nvar DefaultErrorStrategy = require('./error/ErrorStrategy').DefaultErrorStrategy;\nvar ATNDeserializer = require('./atn/ATNDeserializer').ATNDeserializer;\nvar ATNDeserializationOptions = require('./atn/ATNDeserializationOptions').ATNDeserializationOptions;\nvar TerminalNode = require('./tree/Tree').TerminalNode;\nvar ErrorNode = require('./tree/Tree').ErrorNode;\n\nfunction TraceListener(parser) {\n\tParseTreeListener.call(this);\n this.parser = parser;\n\treturn this;\n}\n\nTraceListener.prototype = Object.create(ParseTreeListener.prototype);\nTraceListener.prototype.constructor = TraceListener;\n\nTraceListener.prototype.enterEveryRule = function(ctx) {\n\tconsole.log(\"enter \" + this.parser.ruleNames[ctx.ruleIndex] + \", LT(1)=\" + this.parser._input.LT(1).text);\n};\n\nTraceListener.prototype.visitTerminal = function( node) {\n\tconsole.log(\"consume \" + node.symbol + \" rule \" + this.parser.ruleNames[this.parser._ctx.ruleIndex]);\n};\n\nTraceListener.prototype.exitEveryRule = function(ctx) {\n\tconsole.log(\"exit \" + this.parser.ruleNames[ctx.ruleIndex] + \", LT(1)=\" + this.parser._input.LT(1).text);\n};\n\n// this is all the parsing support code essentially; most of it is error\n// recovery stuff.//\nfunction Parser(input) {\n\tRecognizer.call(this);\n\t// The input stream.\n\tthis._input = null;\n\t// The error handling strategy for the parser. The default value is a new\n\t// instance of {@link DefaultErrorStrategy}.\n\tthis._errHandler = new DefaultErrorStrategy();\n\tthis._precedenceStack = [];\n\tthis._precedenceStack.push(0);\n\t// The {@link ParserRuleContext} object for the currently executing rule.\n\t// this is always non-null during the parsing process.\n\tthis._ctx = null;\n\t// Specifies whether or not the parser should construct a parse tree during\n\t// the parsing process. The default value is {@code true}.\n\tthis.buildParseTrees = true;\n\t// When {@link //setTrace}{@code (true)} is called, a reference to the\n\t// {@link TraceListener} is stored here so it can be easily removed in a\n\t// later call to {@link //setTrace}{@code (false)}. The listener itself is\n\t// implemented as a parser listener so this field is not directly used by\n\t// other parser methods.\n\tthis._tracer = null;\n\t// The list of {@link ParseTreeListener} listeners registered to receive\n\t// events during the parse.\n\tthis._parseListeners = null;\n\t// The number of syntax errors reported during parsing. this value is\n\t// incremented each time {@link //notifyErrorListeners} is called.\n\tthis._syntaxErrors = 0;\n\tthis.setInputStream(input);\n\treturn this;\n}\n\nParser.prototype = Object.create(Recognizer.prototype);\nParser.prototype.contructor = Parser;\n\n// this field maps from the serialized ATN string to the deserialized {@link\n// ATN} with\n// bypass alternatives.\n//\n// @see ATNDeserializationOptions//isGenerateRuleBypassTransitions()\n//\nParser.bypassAltsAtnCache = {};\n\n// reset the parser's state//\nParser.prototype.reset = function() {\n\tif (this._input !== null) {\n\t\tthis._input.seek(0);\n\t}\n\tthis._errHandler.reset(this);\n\tthis._ctx = null;\n\tthis._syntaxErrors = 0;\n\tthis.setTrace(false);\n\tthis._precedenceStack = [];\n\tthis._precedenceStack.push(0);\n\tif (this._interp !== null) {\n\t\tthis._interp.reset();\n\t}\n};\n\n// Match current input symbol against {@code ttype}. If the symbol type\n// matches, {@link ANTLRErrorStrategy//reportMatch} and {@link //consume} are\n// called to complete the match process.\n//\n//

        If the symbol type does not match,\n// {@link ANTLRErrorStrategy//recoverInline} is called on the current error\n// strategy to attempt recovery. If {@link //getBuildParseTree} is\n// {@code true} and the token index of the symbol returned by\n// {@link ANTLRErrorStrategy//recoverInline} is -1, the symbol is added to\n// the parse tree by calling {@link ParserRuleContext//addErrorNode}.

        \n//\n// @param ttype the token type to match\n// @return the matched symbol\n// @throws RecognitionException if the current input symbol did not match\n// {@code ttype} and the error strategy could not recover from the\n// mismatched symbol\n\nParser.prototype.match = function(ttype) {\n\tvar t = this.getCurrentToken();\n\tif (t.type === ttype) {\n\t\tthis._errHandler.reportMatch(this);\n\t\tthis.consume();\n\t} else {\n\t\tt = this._errHandler.recoverInline(this);\n\t\tif (this.buildParseTrees && t.tokenIndex === -1) {\n\t\t\t// we must have conjured up a new token during single token\n\t\t\t// insertion\n\t\t\t// if it's not the current symbol\n\t\t\tthis._ctx.addErrorNode(t);\n\t\t}\n\t}\n\treturn t;\n};\n// Match current input symbol as a wildcard. If the symbol type matches\n// (i.e. has a value greater than 0), {@link ANTLRErrorStrategy//reportMatch}\n// and {@link //consume} are called to complete the match process.\n//\n//

        If the symbol type does not match,\n// {@link ANTLRErrorStrategy//recoverInline} is called on the current error\n// strategy to attempt recovery. If {@link //getBuildParseTree} is\n// {@code true} and the token index of the symbol returned by\n// {@link ANTLRErrorStrategy//recoverInline} is -1, the symbol is added to\n// the parse tree by calling {@link ParserRuleContext//addErrorNode}.

        \n//\n// @return the matched symbol\n// @throws RecognitionException if the current input symbol did not match\n// a wildcard and the error strategy could not recover from the mismatched\n// symbol\n\nParser.prototype.matchWildcard = function() {\n\tvar t = this.getCurrentToken();\n\tif (t.type > 0) {\n\t\tthis._errHandler.reportMatch(this);\n\t\tthis.consume();\n\t} else {\n\t\tt = this._errHandler.recoverInline(this);\n\t\tif (this._buildParseTrees && t.tokenIndex === -1) {\n\t\t\t// we must have conjured up a new token during single token\n\t\t\t// insertion\n\t\t\t// if it's not the current symbol\n\t\t\tthis._ctx.addErrorNode(t);\n\t\t}\n\t}\n\treturn t;\n};\n\nParser.prototype.getParseListeners = function() {\n\treturn this._parseListeners || [];\n};\n\n// Registers {@code listener} to receive events during the parsing process.\n//\n//

        To support output-preserving grammar transformations (including but not\n// limited to left-recursion removal, automated left-factoring, and\n// optimized code generation), calls to listener methods during the parse\n// may differ substantially from calls made by\n// {@link ParseTreeWalker//DEFAULT} used after the parse is complete. In\n// particular, rule entry and exit events may occur in a different order\n// during the parse than after the parser. In addition, calls to certain\n// rule entry methods may be omitted.

        \n//\n//

        With the following specific exceptions, calls to listener events are\n// deterministic, i.e. for identical input the calls to listener\n// methods will be the same.

        \n//\n//
          \n//
        • Alterations to the grammar used to generate code may change the\n// behavior of the listener calls.
        • \n//
        • Alterations to the command line options passed to ANTLR 4 when\n// generating the parser may change the behavior of the listener calls.
        • \n//
        • Changing the version of the ANTLR Tool used to generate the parser\n// may change the behavior of the listener calls.
        • \n//
        \n//\n// @param listener the listener to add\n//\n// @throws NullPointerException if {@code} listener is {@code null}\n//\nParser.prototype.addParseListener = function(listener) {\n\tif (listener === null) {\n\t\tthrow \"listener\";\n\t}\n\tif (this._parseListeners === null) {\n\t\tthis._parseListeners = [];\n\t}\n\tthis._parseListeners.push(listener);\n};\n\n//\n// Remove {@code listener} from the list of parse listeners.\n//\n//

        If {@code listener} is {@code null} or has not been added as a parse\n// listener, this method does nothing.

        \n// @param listener the listener to remove\n//\nParser.prototype.removeParseListener = function(listener) {\n\tif (this._parseListeners !== null) {\n\t\tvar idx = this._parseListeners.indexOf(listener);\n\t\tif (idx >= 0) {\n\t\t\tthis._parseListeners.splice(idx, 1);\n\t\t}\n\t\tif (this._parseListeners.length === 0) {\n\t\t\tthis._parseListeners = null;\n\t\t}\n\t}\n};\n\n// Remove all parse listeners.\nParser.prototype.removeParseListeners = function() {\n\tthis._parseListeners = null;\n};\n\n// Notify any parse listeners of an enter rule event.\nParser.prototype.triggerEnterRuleEvent = function() {\n\tif (this._parseListeners !== null) {\n var ctx = this._ctx;\n\t\tthis._parseListeners.map(function(listener) {\n\t\t\tlistener.enterEveryRule(ctx);\n\t\t\tctx.enterRule(listener);\n\t\t});\n\t}\n};\n\n//\n// Notify any parse listeners of an exit rule event.\n//\n// @see //addParseListener\n//\nParser.prototype.triggerExitRuleEvent = function() {\n\tif (this._parseListeners !== null) {\n\t\t// reverse order walk of listeners\n var ctx = this._ctx;\n\t\tthis._parseListeners.slice(0).reverse().map(function(listener) {\n\t\t\tctx.exitRule(listener);\n\t\t\tlistener.exitEveryRule(ctx);\n\t\t});\n\t}\n};\n\nParser.prototype.getTokenFactory = function() {\n\treturn this._input.tokenSource._factory;\n};\n\n// Tell our token source and error strategy about a new way to create tokens.//\nParser.prototype.setTokenFactory = function(factory) {\n\tthis._input.tokenSource._factory = factory;\n};\n\n// The ATN with bypass alternatives is expensive to create so we create it\n// lazily.\n//\n// @throws UnsupportedOperationException if the current parser does not\n// implement the {@link //getSerializedATN()} method.\n//\nParser.prototype.getATNWithBypassAlts = function() {\n\tvar serializedAtn = this.getSerializedATN();\n\tif (serializedAtn === null) {\n\t\tthrow \"The current parser does not support an ATN with bypass alternatives.\";\n\t}\n\tvar result = this.bypassAltsAtnCache[serializedAtn];\n\tif (result === null) {\n\t\tvar deserializationOptions = new ATNDeserializationOptions();\n\t\tdeserializationOptions.generateRuleBypassTransitions = true;\n\t\tresult = new ATNDeserializer(deserializationOptions)\n\t\t\t\t.deserialize(serializedAtn);\n\t\tthis.bypassAltsAtnCache[serializedAtn] = result;\n\t}\n\treturn result;\n};\n\n// The preferred method of getting a tree pattern. For example, here's a\n// sample use:\n//\n//
        \n// ParseTree t = parser.expr();\n// ParseTreePattern p = parser.compileParseTreePattern(\"<ID>+0\",\n// MyParser.RULE_expr);\n// ParseTreeMatch m = p.match(t);\n// String id = m.get(\"ID\");\n// 
        \n\nvar Lexer = require('./Lexer').Lexer;\n\nParser.prototype.compileParseTreePattern = function(pattern, patternRuleIndex, lexer) {\n\tlexer = lexer || null;\n\tif (lexer === null) {\n\t\tif (this.getTokenStream() !== null) {\n\t\t\tvar tokenSource = this.getTokenStream().tokenSource;\n\t\t\tif (tokenSource instanceof Lexer) {\n\t\t\t\tlexer = tokenSource;\n\t\t\t}\n\t\t}\n\t}\n\tif (lexer === null) {\n\t\tthrow \"Parser can't discover a lexer to use\";\n\t}\n\tvar m = new ParseTreePatternMatcher(lexer, this);\n\treturn m.compile(pattern, patternRuleIndex);\n};\n\nParser.prototype.getInputStream = function() {\n\treturn this.getTokenStream();\n};\n\nParser.prototype.setInputStream = function(input) {\n\tthis.setTokenStream(input);\n};\n\nParser.prototype.getTokenStream = function() {\n\treturn this._input;\n};\n\n// Set the token stream and reset the parser.//\nParser.prototype.setTokenStream = function(input) {\n\tthis._input = null;\n\tthis.reset();\n\tthis._input = input;\n};\n\n// Match needs to return the current input symbol, which gets put\n// into the label for the associated token ref; e.g., x=ID.\n//\nParser.prototype.getCurrentToken = function() {\n\treturn this._input.LT(1);\n};\n\nParser.prototype.notifyErrorListeners = function(msg, offendingToken, err) {\n\toffendingToken = offendingToken || null;\n\terr = err || null;\n\tif (offendingToken === null) {\n\t\toffendingToken = this.getCurrentToken();\n\t}\n\tthis._syntaxErrors += 1;\n\tvar line = offendingToken.line;\n\tvar column = offendingToken.column;\n\tvar listener = this.getErrorListenerDispatch();\n\tlistener.syntaxError(this, offendingToken, line, column, msg, err);\n};\n\n//\n// Consume and return the {@linkplain //getCurrentToken current symbol}.\n//\n//

        E.g., given the following input with {@code A} being the current\n// lookahead symbol, this function moves the cursor to {@code B} and returns\n// {@code A}.

        \n//\n//
        \n// A B\n// ^\n// 
        \n//\n// If the parser is not in error recovery mode, the consumed symbol is added\n// to the parse tree using {@link ParserRuleContext//addChild(Token)}, and\n// {@link ParseTreeListener//visitTerminal} is called on any parse listeners.\n// If the parser is in error recovery mode, the consumed symbol is\n// added to the parse tree using\n// {@link ParserRuleContext//addErrorNode(Token)}, and\n// {@link ParseTreeListener//visitErrorNode} is called on any parse\n// listeners.\n//\nParser.prototype.consume = function() {\n\tvar o = this.getCurrentToken();\n\tif (o.type !== Token.EOF) {\n\t\tthis.getInputStream().consume();\n\t}\n\tvar hasListener = this._parseListeners !== null && this._parseListeners.length > 0;\n\tif (this.buildParseTrees || hasListener) {\n\t\tvar node;\n\t\tif (this._errHandler.inErrorRecoveryMode(this)) {\n\t\t\tnode = this._ctx.addErrorNode(o);\n\t\t} else {\n\t\t\tnode = this._ctx.addTokenNode(o);\n\t\t}\n node.invokingState = this.state;\n\t\tif (hasListener) {\n\t\t\tthis._parseListeners.map(function(listener) {\n\t\t\t\tif (node instanceof ErrorNode || (node.isErrorNode !== undefined && node.isErrorNode())) {\n\t\t\t\t\tlistener.visitErrorNode(node);\n\t\t\t\t} else if (node instanceof TerminalNode) {\n\t\t\t\t\tlistener.visitTerminal(node);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn o;\n};\n\nParser.prototype.addContextToParseTree = function() {\n\t// add current context to parent if we have a parent\n\tif (this._ctx.parentCtx !== null) {\n\t\tthis._ctx.parentCtx.addChild(this._ctx);\n\t}\n};\n\n// Always called by generated parsers upon entry to a rule. Access field\n// {@link //_ctx} get the current context.\n\nParser.prototype.enterRule = function(localctx, state, ruleIndex) {\n\tthis.state = state;\n\tthis._ctx = localctx;\n\tthis._ctx.start = this._input.LT(1);\n\tif (this.buildParseTrees) {\n\t\tthis.addContextToParseTree();\n\t}\n\tif (this._parseListeners !== null) {\n\t\tthis.triggerEnterRuleEvent();\n\t}\n};\n\nParser.prototype.exitRule = function() {\n\tthis._ctx.stop = this._input.LT(-1);\n\t// trigger event on _ctx, before it reverts to parent\n\tif (this._parseListeners !== null) {\n\t\tthis.triggerExitRuleEvent();\n\t}\n\tthis.state = this._ctx.invokingState;\n\tthis._ctx = this._ctx.parentCtx;\n};\n\nParser.prototype.enterOuterAlt = function(localctx, altNum) {\n \tlocalctx.setAltNumber(altNum);\n\t// if we have new localctx, make sure we replace existing ctx\n\t// that is previous child of parse tree\n\tif (this.buildParseTrees && this._ctx !== localctx) {\n\t\tif (this._ctx.parentCtx !== null) {\n\t\t\tthis._ctx.parentCtx.removeLastChild();\n\t\t\tthis._ctx.parentCtx.addChild(localctx);\n\t\t}\n\t}\n\tthis._ctx = localctx;\n};\n\n// Get the precedence level for the top-most precedence rule.\n//\n// @return The precedence level for the top-most precedence rule, or -1 if\n// the parser context is not nested within a precedence rule.\n\nParser.prototype.getPrecedence = function() {\n\tif (this._precedenceStack.length === 0) {\n\t\treturn -1;\n\t} else {\n\t\treturn this._precedenceStack[this._precedenceStack.length-1];\n\t}\n};\n\nParser.prototype.enterRecursionRule = function(localctx, state, ruleIndex,\n\t\tprecedence) {\n\tthis.state = state;\n\tthis._precedenceStack.push(precedence);\n\tthis._ctx = localctx;\n\tthis._ctx.start = this._input.LT(1);\n\tif (this._parseListeners !== null) {\n\t\tthis.triggerEnterRuleEvent(); // simulates rule entry for\n\t\t\t\t\t\t\t\t\t\t// left-recursive rules\n\t}\n};\n\n//\n// Like {@link //enterRule} but for recursive rules.\n\nParser.prototype.pushNewRecursionContext = function(localctx, state, ruleIndex) {\n\tvar previous = this._ctx;\n\tprevious.parentCtx = localctx;\n\tprevious.invokingState = state;\n\tprevious.stop = this._input.LT(-1);\n\n\tthis._ctx = localctx;\n\tthis._ctx.start = previous.start;\n\tif (this.buildParseTrees) {\n\t\tthis._ctx.addChild(previous);\n\t}\n\tif (this._parseListeners !== null) {\n\t\tthis.triggerEnterRuleEvent(); // simulates rule entry for\n\t\t\t\t\t\t\t\t\t\t// left-recursive rules\n\t}\n};\n\nParser.prototype.unrollRecursionContexts = function(parentCtx) {\n\tthis._precedenceStack.pop();\n\tthis._ctx.stop = this._input.LT(-1);\n\tvar retCtx = this._ctx; // save current ctx (return value)\n\t// unroll so _ctx is as it was before call to recursive method\n\tif (this._parseListeners !== null) {\n\t\twhile (this._ctx !== parentCtx) {\n\t\t\tthis.triggerExitRuleEvent();\n\t\t\tthis._ctx = this._ctx.parentCtx;\n\t\t}\n\t} else {\n\t\tthis._ctx = parentCtx;\n\t}\n\t// hook into tree\n\tretCtx.parentCtx = parentCtx;\n\tif (this.buildParseTrees && parentCtx !== null) {\n\t\t// add return ctx into invoking rule's tree\n\t\tparentCtx.addChild(retCtx);\n\t}\n};\n\nParser.prototype.getInvokingContext = function(ruleIndex) {\n\tvar ctx = this._ctx;\n\twhile (ctx !== null) {\n\t\tif (ctx.ruleIndex === ruleIndex) {\n\t\t\treturn ctx;\n\t\t}\n\t\tctx = ctx.parentCtx;\n\t}\n\treturn null;\n};\n\nParser.prototype.precpred = function(localctx, precedence) {\n\treturn precedence >= this._precedenceStack[this._precedenceStack.length-1];\n};\n\nParser.prototype.inContext = function(context) {\n\t// TODO: useful in parser?\n\treturn false;\n};\n\n//\n// Checks whether or not {@code symbol} can follow the current state in the\n// ATN. The behavior of this method is equivalent to the following, but is\n// implemented such that the complete context-sensitive follow set does not\n// need to be explicitly constructed.\n//\n//
        \n// return getExpectedTokens().contains(symbol);\n// 
        \n//\n// @param symbol the symbol type to check\n// @return {@code true} if {@code symbol} can follow the current state in\n// the ATN, otherwise {@code false}.\n\nParser.prototype.isExpectedToken = function(symbol) {\n\tvar atn = this._interp.atn;\n\tvar ctx = this._ctx;\n\tvar s = atn.states[this.state];\n\tvar following = atn.nextTokens(s);\n\tif (following.contains(symbol)) {\n\t\treturn true;\n\t}\n\tif (!following.contains(Token.EPSILON)) {\n\t\treturn false;\n\t}\n\twhile (ctx !== null && ctx.invokingState >= 0 && following.contains(Token.EPSILON)) {\n\t\tvar invokingState = atn.states[ctx.invokingState];\n\t\tvar rt = invokingState.transitions[0];\n\t\tfollowing = atn.nextTokens(rt.followState);\n\t\tif (following.contains(symbol)) {\n\t\t\treturn true;\n\t\t}\n\t\tctx = ctx.parentCtx;\n\t}\n\tif (following.contains(Token.EPSILON) && symbol === Token.EOF) {\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n// Computes the set of input symbols which could follow the current parser\n// state and context, as given by {@link //getState} and {@link //getContext},\n// respectively.\n//\n// @see ATN//getExpectedTokens(int, RuleContext)\n//\nParser.prototype.getExpectedTokens = function() {\n\treturn this._interp.atn.getExpectedTokens(this.state, this._ctx);\n};\n\nParser.prototype.getExpectedTokensWithinCurrentRule = function() {\n\tvar atn = this._interp.atn;\n\tvar s = atn.states[this.state];\n\treturn atn.nextTokens(s);\n};\n\n// Get a rule's index (i.e., {@code RULE_ruleName} field) or -1 if not found.//\nParser.prototype.getRuleIndex = function(ruleName) {\n\tvar ruleIndex = this.getRuleIndexMap()[ruleName];\n\tif (ruleIndex !== null) {\n\t\treturn ruleIndex;\n\t} else {\n\t\treturn -1;\n\t}\n};\n\n// Return List<String> of the rule names in your parser instance\n// leading up to a call to the current rule. You could override if\n// you want more details such as the file/line info of where\n// in the ATN a rule is invoked.\n//\n// this is very useful for error messages.\n//\nParser.prototype.getRuleInvocationStack = function(p) {\n\tp = p || null;\n\tif (p === null) {\n\t\tp = this._ctx;\n\t}\n\tvar stack = [];\n\twhile (p !== null) {\n\t\t// compute what follows who invoked us\n\t\tvar ruleIndex = p.ruleIndex;\n\t\tif (ruleIndex < 0) {\n\t\t\tstack.push(\"n/a\");\n\t\t} else {\n\t\t\tstack.push(this.ruleNames[ruleIndex]);\n\t\t}\n\t\tp = p.parentCtx;\n\t}\n\treturn stack;\n};\n\n// For debugging and other purposes.//\nParser.prototype.getDFAStrings = function() {\n\treturn this._interp.decisionToDFA.toString();\n};\n// For debugging and other purposes.//\nParser.prototype.dumpDFA = function() {\n\tvar seenOne = false;\n\tfor (var i = 0; i < this._interp.decisionToDFA.length; i++) {\n\t\tvar dfa = this._interp.decisionToDFA[i];\n\t\tif (dfa.states.length > 0) {\n\t\t\tif (seenOne) {\n\t\t\t\tconsole.log();\n\t\t\t}\n\t\t\tthis.printer.println(\"Decision \" + dfa.decision + \":\");\n\t\t\tthis.printer.print(dfa.toString(this.literalNames, this.symbolicNames));\n\t\t\tseenOne = true;\n\t\t}\n\t}\n};\n\n/*\n\"\t\t\tprinter = function() {\\r\\n\" +\n\"\t\t\t\tthis.println = function(s) { document.getElementById('output') += s + '\\\\n'; }\\r\\n\" +\n\"\t\t\t\tthis.print = function(s) { document.getElementById('output') += s; }\\r\\n\" +\n\"\t\t\t};\\r\\n\" +\n*/\n\nParser.prototype.getSourceName = function() {\n\treturn this._input.sourceName;\n};\n\n// During a parse is sometimes useful to listen in on the rule entry and exit\n// events as well as token matches. this is for quick and dirty debugging.\n//\nParser.prototype.setTrace = function(trace) {\n\tif (!trace) {\n\t\tthis.removeParseListener(this._tracer);\n\t\tthis._tracer = null;\n\t} else {\n\t\tif (this._tracer !== null) {\n\t\t\tthis.removeParseListener(this._tracer);\n\t\t}\n\t\tthis._tracer = new TraceListener(this);\n\t\tthis.addParseListener(this._tracer);\n\t}\n};\n\nexports.Parser = Parser;","// Generated from FHIRPath.g4 by ANTLR 4.7.1\n// jshint ignore: start\nvar antlr4 = require('antlr4/index');\n\n\nvar serializedATN = [\"\\u0003\\u608b\\ua72a\\u8133\\ub9ed\\u417c\\u3be7\\u7786\\u5964\",\n \"\\u0002?\\u01f1\\b\\u0001\\u0004\\u0002\\t\\u0002\\u0004\\u0003\\t\\u0003\\u0004\",\n \"\\u0004\\t\\u0004\\u0004\\u0005\\t\\u0005\\u0004\\u0006\\t\\u0006\\u0004\\u0007\\t\",\n \"\\u0007\\u0004\\b\\t\\b\\u0004\\t\\t\\t\\u0004\\n\\t\\n\\u0004\\u000b\\t\\u000b\\u0004\",\n \"\\f\\t\\f\\u0004\\r\\t\\r\\u0004\\u000e\\t\\u000e\\u0004\\u000f\\t\\u000f\\u0004\\u0010\",\n \"\\t\\u0010\\u0004\\u0011\\t\\u0011\\u0004\\u0012\\t\\u0012\\u0004\\u0013\\t\\u0013\",\n \"\\u0004\\u0014\\t\\u0014\\u0004\\u0015\\t\\u0015\\u0004\\u0016\\t\\u0016\\u0004\\u0017\",\n \"\\t\\u0017\\u0004\\u0018\\t\\u0018\\u0004\\u0019\\t\\u0019\\u0004\\u001a\\t\\u001a\",\n \"\\u0004\\u001b\\t\\u001b\\u0004\\u001c\\t\\u001c\\u0004\\u001d\\t\\u001d\\u0004\\u001e\",\n \"\\t\\u001e\\u0004\\u001f\\t\\u001f\\u0004 \\t \\u0004!\\t!\\u0004\\\"\\t\\\"\\u0004#\",\n \"\\t#\\u0004$\\t$\\u0004%\\t%\\u0004&\\t&\\u0004\\'\\t\\'\\u0004(\\t(\\u0004)\\t)\\u0004\",\n \"*\\t*\\u0004+\\t+\\u0004,\\t,\\u0004-\\t-\\u0004.\\t.\\u0004/\\t/\\u00040\\t0\\u0004\",\n \"1\\t1\\u00042\\t2\\u00043\\t3\\u00044\\t4\\u00045\\t5\\u00046\\t6\\u00047\\t7\\u0004\",\n \"8\\t8\\u00049\\t9\\u0004:\\t:\\u0004;\\t;\\u0004<\\t<\\u0004=\\t=\\u0004>\\t>\\u0004\",\n \"?\\t?\\u0004@\\t@\\u0004A\\tA\\u0004B\\tB\\u0003\\u0002\\u0003\\u0002\\u0003\\u0003\",\n \"\\u0003\\u0003\\u0003\\u0004\\u0003\\u0004\\u0003\\u0005\\u0003\\u0005\\u0003\\u0006\",\n \"\\u0003\\u0006\\u0003\\u0007\\u0003\\u0007\\u0003\\b\\u0003\\b\\u0003\\t\\u0003\\t\",\n \"\\u0003\\t\\u0003\\t\\u0003\\n\\u0003\\n\\u0003\\n\\u0003\\n\\u0003\\u000b\\u0003\\u000b\",\n \"\\u0003\\f\\u0003\\f\\u0003\\r\\u0003\\r\\u0003\\r\\u0003\\u000e\\u0003\\u000e\\u0003\",\n \"\\u000f\\u0003\\u000f\\u0003\\u0010\\u0003\\u0010\\u0003\\u0010\\u0003\\u0011\\u0003\",\n \"\\u0011\\u0003\\u0011\\u0003\\u0012\\u0003\\u0012\\u0003\\u0012\\u0003\\u0013\\u0003\",\n \"\\u0013\\u0003\\u0014\\u0003\\u0014\\u0003\\u0015\\u0003\\u0015\\u0003\\u0015\\u0003\",\n \"\\u0016\\u0003\\u0016\\u0003\\u0016\\u0003\\u0017\\u0003\\u0017\\u0003\\u0017\\u0003\",\n \"\\u0018\\u0003\\u0018\\u0003\\u0018\\u0003\\u0018\\u0003\\u0018\\u0003\\u0018\\u0003\",\n \"\\u0018\\u0003\\u0018\\u0003\\u0018\\u0003\\u0019\\u0003\\u0019\\u0003\\u0019\\u0003\",\n \"\\u0019\\u0003\\u001a\\u0003\\u001a\\u0003\\u001a\\u0003\\u001b\\u0003\\u001b\\u0003\",\n \"\\u001b\\u0003\\u001b\\u0003\\u001c\\u0003\\u001c\\u0003\\u001c\\u0003\\u001c\\u0003\",\n \"\\u001c\\u0003\\u001c\\u0003\\u001c\\u0003\\u001c\\u0003\\u001d\\u0003\\u001d\\u0003\",\n \"\\u001e\\u0003\\u001e\\u0003\\u001f\\u0003\\u001f\\u0003 \\u0003 \\u0003!\\u0003\",\n \"!\\u0003!\\u0003!\\u0003!\\u0003\\\"\\u0003\\\"\\u0003\\\"\\u0003\\\"\\u0003\\\"\\u0003\",\n \"\\\"\\u0003#\\u0003#\\u0003$\\u0003$\\u0003$\\u0003$\\u0003$\\u0003$\\u0003%\\u0003\",\n \"%\\u0003&\\u0003&\\u0003&\\u0003&\\u0003&\\u0003\\'\\u0003\\'\\u0003\\'\\u0003\\'\",\n \"\\u0003\\'\\u0003\\'\\u0003(\\u0003(\\u0003(\\u0003(\\u0003(\\u0003)\\u0003)\\u0003\",\n \")\\u0003)\\u0003*\\u0003*\\u0003*\\u0003*\\u0003*\\u0003+\\u0003+\\u0003+\\u0003\",\n \"+\\u0003+\\u0003+\\u0003+\\u0003,\\u0003,\\u0003,\\u0003,\\u0003,\\u0003,\\u0003\",\n \",\\u0003-\\u0003-\\u0003-\\u0003-\\u0003-\\u0003-\\u0003-\\u0003-\\u0003-\\u0003\",\n \"-\\u0003-\\u0003-\\u0003.\\u0003.\\u0003.\\u0003.\\u0003.\\u0003.\\u0003/\\u0003\",\n \"/\\u0003/\\u0003/\\u0003/\\u0003/\\u0003/\\u00030\\u00030\\u00030\\u00030\\u0003\",\n \"0\\u00030\\u00031\\u00031\\u00031\\u00031\\u00031\\u00032\\u00032\\u00032\\u0003\",\n \"2\\u00032\\u00032\\u00033\\u00033\\u00033\\u00033\\u00033\\u00033\\u00033\\u0003\",\n \"3\\u00034\\u00034\\u00034\\u00034\\u00034\\u00034\\u00034\\u00034\\u00035\\u0003\",\n \"5\\u00035\\u00035\\u00035\\u00035\\u00035\\u00035\\u00035\\u00035\\u00035\\u0003\",\n \"5\\u00035\\u00036\\u00036\\u00036\\u00036\\u00036\\u00036\\u00036\\u00036\\u0003\",\n \"6\\u00036\\u00036\\u00036\\u00036\\u00056\\u0171\\n6\\u00056\\u0173\\n6\\u0005\",\n \"6\\u0175\\n6\\u00036\\u00056\\u0178\\n6\\u00037\\u00037\\u00037\\u00037\\u0003\",\n \"8\\u00038\\u00038\\u00038\\u00038\\u00038\\u00038\\u00038\\u00038\\u00038\\u0006\",\n \"8\\u0188\\n8\\r8\\u000e8\\u0189\\u00058\\u018c\\n8\\u00058\\u018e\\n8\\u00058\\u0190\",\n \"\\n8\\u00038\\u00038\\u00038\\u00038\\u00038\\u00038\\u00038\\u00058\\u0199\\n\",\n \"8\\u00039\\u00059\\u019c\\n9\\u00039\\u00079\\u019f\\n9\\f9\\u000e9\\u01a2\\u000b\",\n \"9\\u0003:\\u0003:\\u0003:\\u0007:\\u01a7\\n:\\f:\\u000e:\\u01aa\\u000b:\\u0003\",\n \":\\u0003:\\u0003;\\u0003;\\u0003;\\u0007;\\u01b1\\n;\\f;\\u000e;\\u01b4\\u000b\",\n \";\\u0003;\\u0003;\\u0003<\\u0006<\\u01b9\\n<\\r<\\u000e<\\u01ba\\u0003<\\u0003\",\n \"<\\u0006<\\u01bf\\n<\\r<\\u000e<\\u01c0\\u0005<\\u01c3\\n<\\u0003=\\u0006=\\u01c6\",\n \"\\n=\\r=\\u000e=\\u01c7\\u0003=\\u0003=\\u0003>\\u0003>\\u0003>\\u0003>\\u0007\",\n \">\\u01d0\\n>\\f>\\u000e>\\u01d3\\u000b>\\u0003>\\u0003>\\u0003>\\u0003>\\u0003\",\n \">\\u0003?\\u0003?\\u0003?\\u0003?\\u0007?\\u01de\\n?\\f?\\u000e?\\u01e1\\u000b\",\n \"?\\u0003?\\u0003?\\u0003@\\u0003@\\u0003@\\u0005@\\u01e8\\n@\\u0003A\\u0003A\\u0003\",\n \"A\\u0003A\\u0003A\\u0003A\\u0003B\\u0003B\\u0003\\u01d1\\u0002C\\u0003\\u0003\",\n \"\\u0005\\u0004\\u0007\\u0005\\t\\u0006\\u000b\\u0007\\r\\b\\u000f\\t\\u0011\\n\\u0013\",\n \"\\u000b\\u0015\\f\\u0017\\r\\u0019\\u000e\\u001b\\u000f\\u001d\\u0010\\u001f\\u0011\",\n \"!\\u0012#\\u0013%\\u0014\\'\\u0015)\\u0016+\\u0017-\\u0018/\\u00191\\u001a3\\u001b\",\n \"5\\u001c7\\u001d9\\u001e;\\u001f= ?!A\\\"C#E$G%I&K\\'M(O)Q*S+U,W-Y.[/]0_1a\",\n \"2c3e4g5i6k7m8o\\u0002q9s:u;w}?\\u007f\\u0002\\u0081\\u0002\\u0083\\u0002\",\n \"\\u0003\\u0002\\f\\u0003\\u00022;\\u0004\\u0002--//\\u0005\\u0002C\\\\aac|\\u0006\",\n \"\\u00022;C\\\\aac|\\u0004\\u0002$$^^\\u0003\\u0002))\\u0005\\u0002\\u000b\\f\\u000f\",\n \"\\u000f\\\"\\\"\\u0004\\u0002\\f\\f\\u000f\\u000f\\n\\u0002$$))11^^hhppttvv\\u0005\",\n \"\\u00022;CHch\\u0002\\u0202\\u0002\\u0003\\u0003\\u0002\\u0002\\u0002\\u0002\\u0005\",\n \"\\u0003\\u0002\\u0002\\u0002\\u0002\\u0007\\u0003\\u0002\\u0002\\u0002\\u0002\\t\",\n \"\\u0003\\u0002\\u0002\\u0002\\u0002\\u000b\\u0003\\u0002\\u0002\\u0002\\u0002\\r\",\n \"\\u0003\\u0002\\u0002\\u0002\\u0002\\u000f\\u0003\\u0002\\u0002\\u0002\\u0002\\u0011\",\n \"\\u0003\\u0002\\u0002\\u0002\\u0002\\u0013\\u0003\\u0002\\u0002\\u0002\\u0002\\u0015\",\n \"\\u0003\\u0002\\u0002\\u0002\\u0002\\u0017\\u0003\\u0002\\u0002\\u0002\\u0002\\u0019\",\n \"\\u0003\\u0002\\u0002\\u0002\\u0002\\u001b\\u0003\\u0002\\u0002\\u0002\\u0002\\u001d\",\n \"\\u0003\\u0002\\u0002\\u0002\\u0002\\u001f\\u0003\\u0002\\u0002\\u0002\\u0002!\",\n \"\\u0003\\u0002\\u0002\\u0002\\u0002#\\u0003\\u0002\\u0002\\u0002\\u0002%\\u0003\",\n \"\\u0002\\u0002\\u0002\\u0002\\'\\u0003\\u0002\\u0002\\u0002\\u0002)\\u0003\\u0002\",\n \"\\u0002\\u0002\\u0002+\\u0003\\u0002\\u0002\\u0002\\u0002-\\u0003\\u0002\\u0002\",\n \"\\u0002\\u0002/\\u0003\\u0002\\u0002\\u0002\\u00021\\u0003\\u0002\\u0002\\u0002\",\n \"\\u00023\\u0003\\u0002\\u0002\\u0002\\u00025\\u0003\\u0002\\u0002\\u0002\\u0002\",\n \"7\\u0003\\u0002\\u0002\\u0002\\u00029\\u0003\\u0002\\u0002\\u0002\\u0002;\\u0003\",\n \"\\u0002\\u0002\\u0002\\u0002=\\u0003\\u0002\\u0002\\u0002\\u0002?\\u0003\\u0002\",\n \"\\u0002\\u0002\\u0002A\\u0003\\u0002\\u0002\\u0002\\u0002C\\u0003\\u0002\\u0002\",\n \"\\u0002\\u0002E\\u0003\\u0002\\u0002\\u0002\\u0002G\\u0003\\u0002\\u0002\\u0002\",\n \"\\u0002I\\u0003\\u0002\\u0002\\u0002\\u0002K\\u0003\\u0002\\u0002\\u0002\\u0002\",\n \"M\\u0003\\u0002\\u0002\\u0002\\u0002O\\u0003\\u0002\\u0002\\u0002\\u0002Q\\u0003\",\n \"\\u0002\\u0002\\u0002\\u0002S\\u0003\\u0002\\u0002\\u0002\\u0002U\\u0003\\u0002\",\n \"\\u0002\\u0002\\u0002W\\u0003\\u0002\\u0002\\u0002\\u0002Y\\u0003\\u0002\\u0002\",\n \"\\u0002\\u0002[\\u0003\\u0002\\u0002\\u0002\\u0002]\\u0003\\u0002\\u0002\\u0002\",\n \"\\u0002_\\u0003\\u0002\\u0002\\u0002\\u0002a\\u0003\\u0002\\u0002\\u0002\\u0002\",\n \"c\\u0003\\u0002\\u0002\\u0002\\u0002e\\u0003\\u0002\\u0002\\u0002\\u0002g\\u0003\",\n \"\\u0002\\u0002\\u0002\\u0002i\\u0003\\u0002\\u0002\\u0002\\u0002k\\u0003\\u0002\",\n \"\\u0002\\u0002\\u0002m\\u0003\\u0002\\u0002\\u0002\\u0002q\\u0003\\u0002\\u0002\",\n \"\\u0002\\u0002s\\u0003\\u0002\\u0002\\u0002\\u0002u\\u0003\\u0002\\u0002\\u0002\",\n \"\\u0002w\\u0003\\u0002\\u0002\\u0002\\u0002y\\u0003\\u0002\\u0002\\u0002\\u0002\",\n \"{\\u0003\\u0002\\u0002\\u0002\\u0002}\\u0003\\u0002\\u0002\\u0002\\u0003\\u0085\",\n \"\\u0003\\u0002\\u0002\\u0002\\u0005\\u0087\\u0003\\u0002\\u0002\\u0002\\u0007\\u0089\",\n \"\\u0003\\u0002\\u0002\\u0002\\t\\u008b\\u0003\\u0002\\u0002\\u0002\\u000b\\u008d\",\n \"\\u0003\\u0002\\u0002\\u0002\\r\\u008f\\u0003\\u0002\\u0002\\u0002\\u000f\\u0091\",\n \"\\u0003\\u0002\\u0002\\u0002\\u0011\\u0093\\u0003\\u0002\\u0002\\u0002\\u0013\\u0097\",\n \"\\u0003\\u0002\\u0002\\u0002\\u0015\\u009b\\u0003\\u0002\\u0002\\u0002\\u0017\\u009d\",\n \"\\u0003\\u0002\\u0002\\u0002\\u0019\\u009f\\u0003\\u0002\\u0002\\u0002\\u001b\\u00a2\",\n \"\\u0003\\u0002\\u0002\\u0002\\u001d\\u00a4\\u0003\\u0002\\u0002\\u0002\\u001f\\u00a6\",\n \"\\u0003\\u0002\\u0002\\u0002!\\u00a9\\u0003\\u0002\\u0002\\u0002#\\u00ac\\u0003\",\n \"\\u0002\\u0002\\u0002%\\u00af\\u0003\\u0002\\u0002\\u0002\\'\\u00b1\\u0003\\u0002\",\n \"\\u0002\\u0002)\\u00b3\\u0003\\u0002\\u0002\\u0002+\\u00b6\\u0003\\u0002\\u0002\",\n \"\\u0002-\\u00b9\\u0003\\u0002\\u0002\\u0002/\\u00bc\\u0003\\u0002\\u0002\\u0002\",\n \"1\\u00c5\\u0003\\u0002\\u0002\\u00023\\u00c9\\u0003\\u0002\\u0002\\u00025\\u00cc\",\n \"\\u0003\\u0002\\u0002\\u00027\\u00d0\\u0003\\u0002\\u0002\\u00029\\u00d8\\u0003\",\n \"\\u0002\\u0002\\u0002;\\u00da\\u0003\\u0002\\u0002\\u0002=\\u00dc\\u0003\\u0002\",\n \"\\u0002\\u0002?\\u00de\\u0003\\u0002\\u0002\\u0002A\\u00e0\\u0003\\u0002\\u0002\",\n \"\\u0002C\\u00e5\\u0003\\u0002\\u0002\\u0002E\\u00eb\\u0003\\u0002\\u0002\\u0002\",\n \"G\\u00ed\\u0003\\u0002\\u0002\\u0002I\\u00f3\\u0003\\u0002\\u0002\\u0002K\\u00f5\",\n \"\\u0003\\u0002\\u0002\\u0002M\\u00fa\\u0003\\u0002\\u0002\\u0002O\\u0100\\u0003\",\n \"\\u0002\\u0002\\u0002Q\\u0105\\u0003\\u0002\\u0002\\u0002S\\u0109\\u0003\\u0002\",\n \"\\u0002\\u0002U\\u010e\\u0003\\u0002\\u0002\\u0002W\\u0115\\u0003\\u0002\\u0002\",\n \"\\u0002Y\\u011c\\u0003\\u0002\\u0002\\u0002[\\u0128\\u0003\\u0002\\u0002\\u0002\",\n \"]\\u012e\\u0003\\u0002\\u0002\\u0002_\\u0135\\u0003\\u0002\\u0002\\u0002a\\u013b\",\n \"\\u0003\\u0002\\u0002\\u0002c\\u0140\\u0003\\u0002\\u0002\\u0002e\\u0146\\u0003\",\n \"\\u0002\\u0002\\u0002g\\u014e\\u0003\\u0002\\u0002\\u0002i\\u0156\\u0003\\u0002\",\n \"\\u0002\\u0002k\\u0163\\u0003\\u0002\\u0002\\u0002m\\u0179\\u0003\\u0002\\u0002\",\n \"\\u0002o\\u017d\\u0003\\u0002\\u0002\\u0002q\\u019b\\u0003\\u0002\\u0002\\u0002\",\n \"s\\u01a3\\u0003\\u0002\\u0002\\u0002u\\u01ad\\u0003\\u0002\\u0002\\u0002w\\u01b8\",\n \"\\u0003\\u0002\\u0002\\u0002y\\u01c5\\u0003\\u0002\\u0002\\u0002{\\u01cb\\u0003\",\n \"\\u0002\\u0002\\u0002}\\u01d9\\u0003\\u0002\\u0002\\u0002\\u007f\\u01e4\\u0003\",\n \"\\u0002\\u0002\\u0002\\u0081\\u01e9\\u0003\\u0002\\u0002\\u0002\\u0083\\u01ef\\u0003\",\n \"\\u0002\\u0002\\u0002\\u0085\\u0086\\u00070\\u0002\\u0002\\u0086\\u0004\\u0003\",\n \"\\u0002\\u0002\\u0002\\u0087\\u0088\\u0007]\\u0002\\u0002\\u0088\\u0006\\u0003\",\n \"\\u0002\\u0002\\u0002\\u0089\\u008a\\u0007_\\u0002\\u0002\\u008a\\b\\u0003\\u0002\",\n \"\\u0002\\u0002\\u008b\\u008c\\u0007-\\u0002\\u0002\\u008c\\n\\u0003\\u0002\\u0002\",\n \"\\u0002\\u008d\\u008e\\u0007/\\u0002\\u0002\\u008e\\f\\u0003\\u0002\\u0002\\u0002\",\n \"\\u008f\\u0090\\u0007,\\u0002\\u0002\\u0090\\u000e\\u0003\\u0002\\u0002\\u0002\",\n \"\\u0091\\u0092\\u00071\\u0002\\u0002\\u0092\\u0010\\u0003\\u0002\\u0002\\u0002\",\n \"\\u0093\\u0094\\u0007f\\u0002\\u0002\\u0094\\u0095\\u0007k\\u0002\\u0002\\u0095\",\n \"\\u0096\\u0007x\\u0002\\u0002\\u0096\\u0012\\u0003\\u0002\\u0002\\u0002\\u0097\",\n \"\\u0098\\u0007o\\u0002\\u0002\\u0098\\u0099\\u0007q\\u0002\\u0002\\u0099\\u009a\",\n \"\\u0007f\\u0002\\u0002\\u009a\\u0014\\u0003\\u0002\\u0002\\u0002\\u009b\\u009c\",\n \"\\u0007(\\u0002\\u0002\\u009c\\u0016\\u0003\\u0002\\u0002\\u0002\\u009d\\u009e\",\n \"\\u0007~\\u0002\\u0002\\u009e\\u0018\\u0003\\u0002\\u0002\\u0002\\u009f\\u00a0\",\n \"\\u0007>\\u0002\\u0002\\u00a0\\u00a1\\u0007?\\u0002\\u0002\\u00a1\\u001a\\u0003\",\n \"\\u0002\\u0002\\u0002\\u00a2\\u00a3\\u0007>\\u0002\\u0002\\u00a3\\u001c\\u0003\",\n \"\\u0002\\u0002\\u0002\\u00a4\\u00a5\\u0007@\\u0002\\u0002\\u00a5\\u001e\\u0003\",\n \"\\u0002\\u0002\\u0002\\u00a6\\u00a7\\u0007@\\u0002\\u0002\\u00a7\\u00a8\\u0007\",\n \"?\\u0002\\u0002\\u00a8 \\u0003\\u0002\\u0002\\u0002\\u00a9\\u00aa\\u0007k\\u0002\",\n \"\\u0002\\u00aa\\u00ab\\u0007u\\u0002\\u0002\\u00ab\\\"\\u0003\\u0002\\u0002\\u0002\",\n \"\\u00ac\\u00ad\\u0007c\\u0002\\u0002\\u00ad\\u00ae\\u0007u\\u0002\\u0002\\u00ae\",\n \"$\\u0003\\u0002\\u0002\\u0002\\u00af\\u00b0\\u0007?\\u0002\\u0002\\u00b0&\\u0003\",\n \"\\u0002\\u0002\\u0002\\u00b1\\u00b2\\u0007\\u0080\\u0002\\u0002\\u00b2(\\u0003\",\n \"\\u0002\\u0002\\u0002\\u00b3\\u00b4\\u0007#\\u0002\\u0002\\u00b4\\u00b5\\u0007\",\n \"?\\u0002\\u0002\\u00b5*\\u0003\\u0002\\u0002\\u0002\\u00b6\\u00b7\\u0007#\\u0002\",\n \"\\u0002\\u00b7\\u00b8\\u0007\\u0080\\u0002\\u0002\\u00b8,\\u0003\\u0002\\u0002\",\n \"\\u0002\\u00b9\\u00ba\\u0007k\\u0002\\u0002\\u00ba\\u00bb\\u0007p\\u0002\\u0002\",\n \"\\u00bb.\\u0003\\u0002\\u0002\\u0002\\u00bc\\u00bd\\u0007e\\u0002\\u0002\\u00bd\",\n \"\\u00be\\u0007q\\u0002\\u0002\\u00be\\u00bf\\u0007p\\u0002\\u0002\\u00bf\\u00c0\",\n \"\\u0007v\\u0002\\u0002\\u00c0\\u00c1\\u0007c\\u0002\\u0002\\u00c1\\u00c2\\u0007\",\n \"k\\u0002\\u0002\\u00c2\\u00c3\\u0007p\\u0002\\u0002\\u00c3\\u00c4\\u0007u\\u0002\",\n \"\\u0002\\u00c40\\u0003\\u0002\\u0002\\u0002\\u00c5\\u00c6\\u0007c\\u0002\\u0002\",\n \"\\u00c6\\u00c7\\u0007p\\u0002\\u0002\\u00c7\\u00c8\\u0007f\\u0002\\u0002\\u00c8\",\n \"2\\u0003\\u0002\\u0002\\u0002\\u00c9\\u00ca\\u0007q\\u0002\\u0002\\u00ca\\u00cb\",\n \"\\u0007t\\u0002\\u0002\\u00cb4\\u0003\\u0002\\u0002\\u0002\\u00cc\\u00cd\\u0007\",\n \"z\\u0002\\u0002\\u00cd\\u00ce\\u0007q\\u0002\\u0002\\u00ce\\u00cf\\u0007t\\u0002\",\n \"\\u0002\\u00cf6\\u0003\\u0002\\u0002\\u0002\\u00d0\\u00d1\\u0007k\\u0002\\u0002\",\n \"\\u00d1\\u00d2\\u0007o\\u0002\\u0002\\u00d2\\u00d3\\u0007r\\u0002\\u0002\\u00d3\",\n \"\\u00d4\\u0007n\\u0002\\u0002\\u00d4\\u00d5\\u0007k\\u0002\\u0002\\u00d5\\u00d6\",\n \"\\u0007g\\u0002\\u0002\\u00d6\\u00d7\\u0007u\\u0002\\u0002\\u00d78\\u0003\\u0002\",\n \"\\u0002\\u0002\\u00d8\\u00d9\\u0007*\\u0002\\u0002\\u00d9:\\u0003\\u0002\\u0002\",\n \"\\u0002\\u00da\\u00db\\u0007+\\u0002\\u0002\\u00db<\\u0003\\u0002\\u0002\\u0002\",\n \"\\u00dc\\u00dd\\u0007}\\u0002\\u0002\\u00dd>\\u0003\\u0002\\u0002\\u0002\\u00de\",\n \"\\u00df\\u0007\\u007f\\u0002\\u0002\\u00df@\\u0003\\u0002\\u0002\\u0002\\u00e0\",\n \"\\u00e1\\u0007v\\u0002\\u0002\\u00e1\\u00e2\\u0007t\\u0002\\u0002\\u00e2\\u00e3\",\n \"\\u0007w\\u0002\\u0002\\u00e3\\u00e4\\u0007g\\u0002\\u0002\\u00e4B\\u0003\\u0002\",\n \"\\u0002\\u0002\\u00e5\\u00e6\\u0007h\\u0002\\u0002\\u00e6\\u00e7\\u0007c\\u0002\",\n \"\\u0002\\u00e7\\u00e8\\u0007n\\u0002\\u0002\\u00e8\\u00e9\\u0007u\\u0002\\u0002\",\n \"\\u00e9\\u00ea\\u0007g\\u0002\\u0002\\u00eaD\\u0003\\u0002\\u0002\\u0002\\u00eb\",\n \"\\u00ec\\u0007\\'\\u0002\\u0002\\u00ecF\\u0003\\u0002\\u0002\\u0002\\u00ed\\u00ee\",\n \"\\u0007&\\u0002\\u0002\\u00ee\\u00ef\\u0007v\\u0002\\u0002\\u00ef\\u00f0\\u0007\",\n \"j\\u0002\\u0002\\u00f0\\u00f1\\u0007k\\u0002\\u0002\\u00f1\\u00f2\\u0007u\\u0002\",\n \"\\u0002\\u00f2H\\u0003\\u0002\\u0002\\u0002\\u00f3\\u00f4\\u0007.\\u0002\\u0002\",\n \"\\u00f4J\\u0003\\u0002\\u0002\\u0002\\u00f5\\u00f6\\u0007{\\u0002\\u0002\\u00f6\",\n \"\\u00f7\\u0007g\\u0002\\u0002\\u00f7\\u00f8\\u0007c\\u0002\\u0002\\u00f8\\u00f9\",\n \"\\u0007t\\u0002\\u0002\\u00f9L\\u0003\\u0002\\u0002\\u0002\\u00fa\\u00fb\\u0007\",\n \"o\\u0002\\u0002\\u00fb\\u00fc\\u0007q\\u0002\\u0002\\u00fc\\u00fd\\u0007p\\u0002\",\n \"\\u0002\\u00fd\\u00fe\\u0007v\\u0002\\u0002\\u00fe\\u00ff\\u0007j\\u0002\\u0002\",\n \"\\u00ffN\\u0003\\u0002\\u0002\\u0002\\u0100\\u0101\\u0007y\\u0002\\u0002\\u0101\",\n \"\\u0102\\u0007g\\u0002\\u0002\\u0102\\u0103\\u0007g\\u0002\\u0002\\u0103\\u0104\",\n \"\\u0007m\\u0002\\u0002\\u0104P\\u0003\\u0002\\u0002\\u0002\\u0105\\u0106\\u0007\",\n \"f\\u0002\\u0002\\u0106\\u0107\\u0007c\\u0002\\u0002\\u0107\\u0108\\u0007{\\u0002\",\n \"\\u0002\\u0108R\\u0003\\u0002\\u0002\\u0002\\u0109\\u010a\\u0007j\\u0002\\u0002\",\n \"\\u010a\\u010b\\u0007q\\u0002\\u0002\\u010b\\u010c\\u0007w\\u0002\\u0002\\u010c\",\n \"\\u010d\\u0007t\\u0002\\u0002\\u010dT\\u0003\\u0002\\u0002\\u0002\\u010e\\u010f\",\n \"\\u0007o\\u0002\\u0002\\u010f\\u0110\\u0007k\\u0002\\u0002\\u0110\\u0111\\u0007\",\n \"p\\u0002\\u0002\\u0111\\u0112\\u0007w\\u0002\\u0002\\u0112\\u0113\\u0007v\\u0002\",\n \"\\u0002\\u0113\\u0114\\u0007g\\u0002\\u0002\\u0114V\\u0003\\u0002\\u0002\\u0002\",\n \"\\u0115\\u0116\\u0007u\\u0002\\u0002\\u0116\\u0117\\u0007g\\u0002\\u0002\\u0117\",\n \"\\u0118\\u0007e\\u0002\\u0002\\u0118\\u0119\\u0007q\\u0002\\u0002\\u0119\\u011a\",\n \"\\u0007p\\u0002\\u0002\\u011a\\u011b\\u0007f\\u0002\\u0002\\u011bX\\u0003\\u0002\",\n \"\\u0002\\u0002\\u011c\\u011d\\u0007o\\u0002\\u0002\\u011d\\u011e\\u0007k\\u0002\",\n \"\\u0002\\u011e\\u011f\\u0007n\\u0002\\u0002\\u011f\\u0120\\u0007n\\u0002\\u0002\",\n \"\\u0120\\u0121\\u0007k\\u0002\\u0002\\u0121\\u0122\\u0007u\\u0002\\u0002\\u0122\",\n \"\\u0123\\u0007g\\u0002\\u0002\\u0123\\u0124\\u0007e\\u0002\\u0002\\u0124\\u0125\",\n \"\\u0007q\\u0002\\u0002\\u0125\\u0126\\u0007p\\u0002\\u0002\\u0126\\u0127\\u0007\",\n \"f\\u0002\\u0002\\u0127Z\\u0003\\u0002\\u0002\\u0002\\u0128\\u0129\\u0007{\\u0002\",\n \"\\u0002\\u0129\\u012a\\u0007g\\u0002\\u0002\\u012a\\u012b\\u0007c\\u0002\\u0002\",\n \"\\u012b\\u012c\\u0007t\\u0002\\u0002\\u012c\\u012d\\u0007u\\u0002\\u0002\\u012d\",\n \"\\\\\\u0003\\u0002\\u0002\\u0002\\u012e\\u012f\\u0007o\\u0002\\u0002\\u012f\\u0130\",\n \"\\u0007q\\u0002\\u0002\\u0130\\u0131\\u0007p\\u0002\\u0002\\u0131\\u0132\\u0007\",\n \"v\\u0002\\u0002\\u0132\\u0133\\u0007j\\u0002\\u0002\\u0133\\u0134\\u0007u\\u0002\",\n \"\\u0002\\u0134^\\u0003\\u0002\\u0002\\u0002\\u0135\\u0136\\u0007y\\u0002\\u0002\",\n \"\\u0136\\u0137\\u0007g\\u0002\\u0002\\u0137\\u0138\\u0007g\\u0002\\u0002\\u0138\",\n \"\\u0139\\u0007m\\u0002\\u0002\\u0139\\u013a\\u0007u\\u0002\\u0002\\u013a`\\u0003\",\n \"\\u0002\\u0002\\u0002\\u013b\\u013c\\u0007f\\u0002\\u0002\\u013c\\u013d\\u0007\",\n \"c\\u0002\\u0002\\u013d\\u013e\\u0007{\\u0002\\u0002\\u013e\\u013f\\u0007u\\u0002\",\n \"\\u0002\\u013fb\\u0003\\u0002\\u0002\\u0002\\u0140\\u0141\\u0007j\\u0002\\u0002\",\n \"\\u0141\\u0142\\u0007q\\u0002\\u0002\\u0142\\u0143\\u0007w\\u0002\\u0002\\u0143\",\n \"\\u0144\\u0007t\\u0002\\u0002\\u0144\\u0145\\u0007u\\u0002\\u0002\\u0145d\\u0003\",\n \"\\u0002\\u0002\\u0002\\u0146\\u0147\\u0007o\\u0002\\u0002\\u0147\\u0148\\u0007\",\n \"k\\u0002\\u0002\\u0148\\u0149\\u0007p\\u0002\\u0002\\u0149\\u014a\\u0007w\\u0002\",\n \"\\u0002\\u014a\\u014b\\u0007v\\u0002\\u0002\\u014b\\u014c\\u0007g\\u0002\\u0002\",\n \"\\u014c\\u014d\\u0007u\\u0002\\u0002\\u014df\\u0003\\u0002\\u0002\\u0002\\u014e\",\n \"\\u014f\\u0007u\\u0002\\u0002\\u014f\\u0150\\u0007g\\u0002\\u0002\\u0150\\u0151\",\n \"\\u0007e\\u0002\\u0002\\u0151\\u0152\\u0007q\\u0002\\u0002\\u0152\\u0153\\u0007\",\n \"p\\u0002\\u0002\\u0153\\u0154\\u0007f\\u0002\\u0002\\u0154\\u0155\\u0007u\\u0002\",\n \"\\u0002\\u0155h\\u0003\\u0002\\u0002\\u0002\\u0156\\u0157\\u0007o\\u0002\\u0002\",\n \"\\u0157\\u0158\\u0007k\\u0002\\u0002\\u0158\\u0159\\u0007n\\u0002\\u0002\\u0159\",\n \"\\u015a\\u0007n\\u0002\\u0002\\u015a\\u015b\\u0007k\\u0002\\u0002\\u015b\\u015c\",\n \"\\u0007u\\u0002\\u0002\\u015c\\u015d\\u0007g\\u0002\\u0002\\u015d\\u015e\\u0007\",\n \"e\\u0002\\u0002\\u015e\\u015f\\u0007q\\u0002\\u0002\\u015f\\u0160\\u0007p\\u0002\",\n \"\\u0002\\u0160\\u0161\\u0007f\\u0002\\u0002\\u0161\\u0162\\u0007u\\u0002\\u0002\",\n \"\\u0162j\\u0003\\u0002\\u0002\\u0002\\u0163\\u0164\\u0007B\\u0002\\u0002\\u0164\",\n \"\\u0165\\t\\u0002\\u0002\\u0002\\u0165\\u0166\\t\\u0002\\u0002\\u0002\\u0166\\u0167\",\n \"\\t\\u0002\\u0002\\u0002\\u0167\\u0174\\t\\u0002\\u0002\\u0002\\u0168\\u0169\\u0007\",\n \"/\\u0002\\u0002\\u0169\\u016a\\t\\u0002\\u0002\\u0002\\u016a\\u0172\\t\\u0002\\u0002\",\n \"\\u0002\\u016b\\u016c\\u0007/\\u0002\\u0002\\u016c\\u016d\\t\\u0002\\u0002\\u0002\",\n \"\\u016d\\u0170\\t\\u0002\\u0002\\u0002\\u016e\\u016f\\u0007V\\u0002\\u0002\\u016f\",\n \"\\u0171\\u0005o8\\u0002\\u0170\\u016e\\u0003\\u0002\\u0002\\u0002\\u0170\\u0171\",\n \"\\u0003\\u0002\\u0002\\u0002\\u0171\\u0173\\u0003\\u0002\\u0002\\u0002\\u0172\\u016b\",\n \"\\u0003\\u0002\\u0002\\u0002\\u0172\\u0173\\u0003\\u0002\\u0002\\u0002\\u0173\\u0175\",\n \"\\u0003\\u0002\\u0002\\u0002\\u0174\\u0168\\u0003\\u0002\\u0002\\u0002\\u0174\\u0175\",\n \"\\u0003\\u0002\\u0002\\u0002\\u0175\\u0177\\u0003\\u0002\\u0002\\u0002\\u0176\\u0178\",\n \"\\u0007\\\\\\u0002\\u0002\\u0177\\u0176\\u0003\\u0002\\u0002\\u0002\\u0177\\u0178\",\n \"\\u0003\\u0002\\u0002\\u0002\\u0178l\\u0003\\u0002\\u0002\\u0002\\u0179\\u017a\",\n \"\\u0007B\\u0002\\u0002\\u017a\\u017b\\u0007V\\u0002\\u0002\\u017b\\u017c\\u0005\",\n \"o8\\u0002\\u017cn\\u0003\\u0002\\u0002\\u0002\\u017d\\u017e\\t\\u0002\\u0002\\u0002\",\n \"\\u017e\\u018f\\t\\u0002\\u0002\\u0002\\u017f\\u0180\\u0007<\\u0002\\u0002\\u0180\",\n \"\\u0181\\t\\u0002\\u0002\\u0002\\u0181\\u018d\\t\\u0002\\u0002\\u0002\\u0182\\u0183\",\n \"\\u0007<\\u0002\\u0002\\u0183\\u0184\\t\\u0002\\u0002\\u0002\\u0184\\u018b\\t\\u0002\",\n \"\\u0002\\u0002\\u0185\\u0187\\u00070\\u0002\\u0002\\u0186\\u0188\\t\\u0002\\u0002\",\n \"\\u0002\\u0187\\u0186\\u0003\\u0002\\u0002\\u0002\\u0188\\u0189\\u0003\\u0002\\u0002\",\n \"\\u0002\\u0189\\u0187\\u0003\\u0002\\u0002\\u0002\\u0189\\u018a\\u0003\\u0002\\u0002\",\n \"\\u0002\\u018a\\u018c\\u0003\\u0002\\u0002\\u0002\\u018b\\u0185\\u0003\\u0002\\u0002\",\n \"\\u0002\\u018b\\u018c\\u0003\\u0002\\u0002\\u0002\\u018c\\u018e\\u0003\\u0002\\u0002\",\n \"\\u0002\\u018d\\u0182\\u0003\\u0002\\u0002\\u0002\\u018d\\u018e\\u0003\\u0002\\u0002\",\n \"\\u0002\\u018e\\u0190\\u0003\\u0002\\u0002\\u0002\\u018f\\u017f\\u0003\\u0002\\u0002\",\n \"\\u0002\\u018f\\u0190\\u0003\\u0002\\u0002\\u0002\\u0190\\u0198\\u0003\\u0002\\u0002\",\n \"\\u0002\\u0191\\u0199\\u0007\\\\\\u0002\\u0002\\u0192\\u0193\\t\\u0003\\u0002\\u0002\",\n \"\\u0193\\u0194\\t\\u0002\\u0002\\u0002\\u0194\\u0195\\t\\u0002\\u0002\\u0002\\u0195\",\n \"\\u0196\\u0007<\\u0002\\u0002\\u0196\\u0197\\t\\u0002\\u0002\\u0002\\u0197\\u0199\",\n \"\\t\\u0002\\u0002\\u0002\\u0198\\u0191\\u0003\\u0002\\u0002\\u0002\\u0198\\u0192\",\n \"\\u0003\\u0002\\u0002\\u0002\\u0198\\u0199\\u0003\\u0002\\u0002\\u0002\\u0199p\",\n \"\\u0003\\u0002\\u0002\\u0002\\u019a\\u019c\\t\\u0004\\u0002\\u0002\\u019b\\u019a\",\n \"\\u0003\\u0002\\u0002\\u0002\\u019c\\u01a0\\u0003\\u0002\\u0002\\u0002\\u019d\\u019f\",\n \"\\t\\u0005\\u0002\\u0002\\u019e\\u019d\\u0003\\u0002\\u0002\\u0002\\u019f\\u01a2\",\n \"\\u0003\\u0002\\u0002\\u0002\\u01a0\\u019e\\u0003\\u0002\\u0002\\u0002\\u01a0\\u01a1\",\n \"\\u0003\\u0002\\u0002\\u0002\\u01a1r\\u0003\\u0002\\u0002\\u0002\\u01a2\\u01a0\",\n \"\\u0003\\u0002\\u0002\\u0002\\u01a3\\u01a8\\u0007$\\u0002\\u0002\\u01a4\\u01a7\",\n \"\\u0005\\u007f@\\u0002\\u01a5\\u01a7\\n\\u0006\\u0002\\u0002\\u01a6\\u01a4\\u0003\",\n \"\\u0002\\u0002\\u0002\\u01a6\\u01a5\\u0003\\u0002\\u0002\\u0002\\u01a7\\u01aa\\u0003\",\n \"\\u0002\\u0002\\u0002\\u01a8\\u01a6\\u0003\\u0002\\u0002\\u0002\\u01a8\\u01a9\\u0003\",\n \"\\u0002\\u0002\\u0002\\u01a9\\u01ab\\u0003\\u0002\\u0002\\u0002\\u01aa\\u01a8\\u0003\",\n \"\\u0002\\u0002\\u0002\\u01ab\\u01ac\\u0007$\\u0002\\u0002\\u01act\\u0003\\u0002\",\n \"\\u0002\\u0002\\u01ad\\u01b2\\u0007)\\u0002\\u0002\\u01ae\\u01b1\\u0005\\u007f\",\n \"@\\u0002\\u01af\\u01b1\\n\\u0007\\u0002\\u0002\\u01b0\\u01ae\\u0003\\u0002\\u0002\",\n \"\\u0002\\u01b0\\u01af\\u0003\\u0002\\u0002\\u0002\\u01b1\\u01b4\\u0003\\u0002\\u0002\",\n \"\\u0002\\u01b2\\u01b0\\u0003\\u0002\\u0002\\u0002\\u01b2\\u01b3\\u0003\\u0002\\u0002\",\n \"\\u0002\\u01b3\\u01b5\\u0003\\u0002\\u0002\\u0002\\u01b4\\u01b2\\u0003\\u0002\\u0002\",\n \"\\u0002\\u01b5\\u01b6\\u0007)\\u0002\\u0002\\u01b6v\\u0003\\u0002\\u0002\\u0002\",\n \"\\u01b7\\u01b9\\t\\u0002\\u0002\\u0002\\u01b8\\u01b7\\u0003\\u0002\\u0002\\u0002\",\n \"\\u01b9\\u01ba\\u0003\\u0002\\u0002\\u0002\\u01ba\\u01b8\\u0003\\u0002\\u0002\\u0002\",\n \"\\u01ba\\u01bb\\u0003\\u0002\\u0002\\u0002\\u01bb\\u01c2\\u0003\\u0002\\u0002\\u0002\",\n \"\\u01bc\\u01be\\u00070\\u0002\\u0002\\u01bd\\u01bf\\t\\u0002\\u0002\\u0002\\u01be\",\n \"\\u01bd\\u0003\\u0002\\u0002\\u0002\\u01bf\\u01c0\\u0003\\u0002\\u0002\\u0002\\u01c0\",\n \"\\u01be\\u0003\\u0002\\u0002\\u0002\\u01c0\\u01c1\\u0003\\u0002\\u0002\\u0002\\u01c1\",\n \"\\u01c3\\u0003\\u0002\\u0002\\u0002\\u01c2\\u01bc\\u0003\\u0002\\u0002\\u0002\\u01c2\",\n \"\\u01c3\\u0003\\u0002\\u0002\\u0002\\u01c3x\\u0003\\u0002\\u0002\\u0002\\u01c4\",\n \"\\u01c6\\t\\b\\u0002\\u0002\\u01c5\\u01c4\\u0003\\u0002\\u0002\\u0002\\u01c6\\u01c7\",\n \"\\u0003\\u0002\\u0002\\u0002\\u01c7\\u01c5\\u0003\\u0002\\u0002\\u0002\\u01c7\\u01c8\",\n \"\\u0003\\u0002\\u0002\\u0002\\u01c8\\u01c9\\u0003\\u0002\\u0002\\u0002\\u01c9\\u01ca\",\n \"\\b=\\u0002\\u0002\\u01caz\\u0003\\u0002\\u0002\\u0002\\u01cb\\u01cc\\u00071\\u0002\",\n \"\\u0002\\u01cc\\u01cd\\u0007,\\u0002\\u0002\\u01cd\\u01d1\\u0003\\u0002\\u0002\",\n \"\\u0002\\u01ce\\u01d0\\u000b\\u0002\\u0002\\u0002\\u01cf\\u01ce\\u0003\\u0002\\u0002\",\n \"\\u0002\\u01d0\\u01d3\\u0003\\u0002\\u0002\\u0002\\u01d1\\u01d2\\u0003\\u0002\\u0002\",\n \"\\u0002\\u01d1\\u01cf\\u0003\\u0002\\u0002\\u0002\\u01d2\\u01d4\\u0003\\u0002\\u0002\",\n \"\\u0002\\u01d3\\u01d1\\u0003\\u0002\\u0002\\u0002\\u01d4\\u01d5\\u0007,\\u0002\",\n \"\\u0002\\u01d5\\u01d6\\u00071\\u0002\\u0002\\u01d6\\u01d7\\u0003\\u0002\\u0002\",\n \"\\u0002\\u01d7\\u01d8\\b>\\u0002\\u0002\\u01d8|\\u0003\\u0002\\u0002\\u0002\\u01d9\",\n \"\\u01da\\u00071\\u0002\\u0002\\u01da\\u01db\\u00071\\u0002\\u0002\\u01db\\u01df\",\n \"\\u0003\\u0002\\u0002\\u0002\\u01dc\\u01de\\n\\t\\u0002\\u0002\\u01dd\\u01dc\\u0003\",\n \"\\u0002\\u0002\\u0002\\u01de\\u01e1\\u0003\\u0002\\u0002\\u0002\\u01df\\u01dd\\u0003\",\n \"\\u0002\\u0002\\u0002\\u01df\\u01e0\\u0003\\u0002\\u0002\\u0002\\u01e0\\u01e2\\u0003\",\n \"\\u0002\\u0002\\u0002\\u01e1\\u01df\\u0003\\u0002\\u0002\\u0002\\u01e2\\u01e3\\b\",\n \"?\\u0002\\u0002\\u01e3~\\u0003\\u0002\\u0002\\u0002\\u01e4\\u01e7\\u0007^\\u0002\",\n \"\\u0002\\u01e5\\u01e8\\t\\n\\u0002\\u0002\\u01e6\\u01e8\\u0005\\u0081A\\u0002\\u01e7\",\n \"\\u01e5\\u0003\\u0002\\u0002\\u0002\\u01e7\\u01e6\\u0003\\u0002\\u0002\\u0002\\u01e8\",\n \"\\u0080\\u0003\\u0002\\u0002\\u0002\\u01e9\\u01ea\\u0007w\\u0002\\u0002\\u01ea\",\n \"\\u01eb\\u0005\\u0083B\\u0002\\u01eb\\u01ec\\u0005\\u0083B\\u0002\\u01ec\\u01ed\",\n \"\\u0005\\u0083B\\u0002\\u01ed\\u01ee\\u0005\\u0083B\\u0002\\u01ee\\u0082\\u0003\",\n \"\\u0002\\u0002\\u0002\\u01ef\\u01f0\\t\\u000b\\u0002\\u0002\\u01f0\\u0084\\u0003\",\n \"\\u0002\\u0002\\u0002\\u001a\\u0002\\u0170\\u0172\\u0174\\u0177\\u0189\\u018b\\u018d\",\n \"\\u018f\\u0198\\u019b\\u019e\\u01a0\\u01a6\\u01a8\\u01b0\\u01b2\\u01ba\\u01c0\\u01c2\",\n \"\\u01c7\\u01d1\\u01df\\u01e7\\u0003\\u0002\\u0003\\u0002\"].join(\"\");\n\n\nvar atn = new antlr4.atn.ATNDeserializer().deserialize(serializedATN);\n\nvar decisionsToDFA = atn.decisionToState.map( function(ds, index) { return new antlr4.dfa.DFA(ds, index); });\n\nfunction FHIRPathLexer(input) {\n\tantlr4.Lexer.call(this, input);\n this._interp = new antlr4.atn.LexerATNSimulator(this, atn, decisionsToDFA, new antlr4.PredictionContextCache());\n return this;\n}\n\nFHIRPathLexer.prototype = Object.create(antlr4.Lexer.prototype);\nFHIRPathLexer.prototype.constructor = FHIRPathLexer;\n\nObject.defineProperty(FHIRPathLexer.prototype, \"atn\", {\n get : function() {\n return atn;\n }\n});\n\nFHIRPathLexer.EOF = antlr4.Token.EOF;\nFHIRPathLexer.T__0 = 1;\nFHIRPathLexer.T__1 = 2;\nFHIRPathLexer.T__2 = 3;\nFHIRPathLexer.T__3 = 4;\nFHIRPathLexer.T__4 = 5;\nFHIRPathLexer.T__5 = 6;\nFHIRPathLexer.T__6 = 7;\nFHIRPathLexer.T__7 = 8;\nFHIRPathLexer.T__8 = 9;\nFHIRPathLexer.T__9 = 10;\nFHIRPathLexer.T__10 = 11;\nFHIRPathLexer.T__11 = 12;\nFHIRPathLexer.T__12 = 13;\nFHIRPathLexer.T__13 = 14;\nFHIRPathLexer.T__14 = 15;\nFHIRPathLexer.T__15 = 16;\nFHIRPathLexer.T__16 = 17;\nFHIRPathLexer.T__17 = 18;\nFHIRPathLexer.T__18 = 19;\nFHIRPathLexer.T__19 = 20;\nFHIRPathLexer.T__20 = 21;\nFHIRPathLexer.T__21 = 22;\nFHIRPathLexer.T__22 = 23;\nFHIRPathLexer.T__23 = 24;\nFHIRPathLexer.T__24 = 25;\nFHIRPathLexer.T__25 = 26;\nFHIRPathLexer.T__26 = 27;\nFHIRPathLexer.T__27 = 28;\nFHIRPathLexer.T__28 = 29;\nFHIRPathLexer.T__29 = 30;\nFHIRPathLexer.T__30 = 31;\nFHIRPathLexer.T__31 = 32;\nFHIRPathLexer.T__32 = 33;\nFHIRPathLexer.T__33 = 34;\nFHIRPathLexer.T__34 = 35;\nFHIRPathLexer.T__35 = 36;\nFHIRPathLexer.T__36 = 37;\nFHIRPathLexer.T__37 = 38;\nFHIRPathLexer.T__38 = 39;\nFHIRPathLexer.T__39 = 40;\nFHIRPathLexer.T__40 = 41;\nFHIRPathLexer.T__41 = 42;\nFHIRPathLexer.T__42 = 43;\nFHIRPathLexer.T__43 = 44;\nFHIRPathLexer.T__44 = 45;\nFHIRPathLexer.T__45 = 46;\nFHIRPathLexer.T__46 = 47;\nFHIRPathLexer.T__47 = 48;\nFHIRPathLexer.T__48 = 49;\nFHIRPathLexer.T__49 = 50;\nFHIRPathLexer.T__50 = 51;\nFHIRPathLexer.T__51 = 52;\nFHIRPathLexer.DATETIME = 53;\nFHIRPathLexer.TIME = 54;\nFHIRPathLexer.IDENTIFIER = 55;\nFHIRPathLexer.QUOTEDIDENTIFIER = 56;\nFHIRPathLexer.STRING = 57;\nFHIRPathLexer.NUMBER = 58;\nFHIRPathLexer.WS = 59;\nFHIRPathLexer.COMMENT = 60;\nFHIRPathLexer.LINE_COMMENT = 61;\n\nFHIRPathLexer.prototype.channelNames = [ \"DEFAULT_TOKEN_CHANNEL\", \"HIDDEN\" ];\n\nFHIRPathLexer.prototype.modeNames = [ \"DEFAULT_MODE\" ];\n\nFHIRPathLexer.prototype.literalNames = [ null, \"'.'\", \"'['\", \"']'\", \"'+'\", \n \"'-'\", \"'*'\", \"'/'\", \"'div'\", \"'mod'\", \n \"'&'\", \"'|'\", \"'<='\", \"'<'\", \"'>'\", \n \"'>='\", \"'is'\", \"'as'\", \"'='\", \n \"'~'\", \"'!='\", \"'!~'\", \"'in'\", \n \"'contains'\", \"'and'\", \"'or'\", \n \"'xor'\", \"'implies'\", \"'('\", \"')'\", \n \"'{'\", \"'}'\", \"'true'\", \"'false'\", \n \"'%'\", \"'$this'\", \"','\", \"'year'\", \n \"'month'\", \"'week'\", \"'day'\", \"'hour'\", \n \"'minute'\", \"'second'\", \"'millisecond'\", \n \"'years'\", \"'months'\", \"'weeks'\", \n \"'days'\", \"'hours'\", \"'minutes'\", \n \"'seconds'\", \"'milliseconds'\" ];\n\nFHIRPathLexer.prototype.symbolicNames = [ null, null, null, null, null, \n null, null, null, null, null, \n null, null, null, null, null, \n null, null, null, null, null, \n null, null, null, null, null, \n null, null, null, null, null, \n null, null, null, null, null, \n null, null, null, null, null, \n null, null, null, null, null, \n null, null, null, null, null, \n null, null, null, \"DATETIME\", \n \"TIME\", \"IDENTIFIER\", \"QUOTEDIDENTIFIER\", \n \"STRING\", \"NUMBER\", \"WS\", \"COMMENT\", \n \"LINE_COMMENT\" ];\n\nFHIRPathLexer.prototype.ruleNames = [ \"T__0\", \"T__1\", \"T__2\", \"T__3\", \"T__4\", \n \"T__5\", \"T__6\", \"T__7\", \"T__8\", \"T__9\", \n \"T__10\", \"T__11\", \"T__12\", \"T__13\", \n \"T__14\", \"T__15\", \"T__16\", \"T__17\", \n \"T__18\", \"T__19\", \"T__20\", \"T__21\", \n \"T__22\", \"T__23\", \"T__24\", \"T__25\", \n \"T__26\", \"T__27\", \"T__28\", \"T__29\", \n \"T__30\", \"T__31\", \"T__32\", \"T__33\", \n \"T__34\", \"T__35\", \"T__36\", \"T__37\", \n \"T__38\", \"T__39\", \"T__40\", \"T__41\", \n \"T__42\", \"T__43\", \"T__44\", \"T__45\", \n \"T__46\", \"T__47\", \"T__48\", \"T__49\", \n \"T__50\", \"T__51\", \"DATETIME\", \"TIME\", \n \"TIMEFORMAT\", \"IDENTIFIER\", \"QUOTEDIDENTIFIER\", \n \"STRING\", \"NUMBER\", \"WS\", \"COMMENT\", \n \"LINE_COMMENT\", \"ESC\", \"UNICODE\", \n \"HEX\" ];\n\nFHIRPathLexer.prototype.grammarFileName = \"FHIRPath.g4\";\n\n\n\nexports.FHIRPathLexer = FHIRPathLexer;\n\n","// Generated from FHIRPath.g4 by ANTLR 4.7.1\n// jshint ignore: start\nvar antlr4 = require('antlr4/index');\nvar FHIRPathListener = require('./FHIRPathListener').FHIRPathListener;\nvar grammarFileName = \"FHIRPath.g4\";\n\nvar serializedATN = [\"\\u0003\\u608b\\ua72a\\u8133\\ub9ed\\u417c\\u3be7\\u7786\\u5964\",\n \"\\u0003?\\u0093\\u0004\\u0002\\t\\u0002\\u0004\\u0003\\t\\u0003\\u0004\\u0004\\t\",\n \"\\u0004\\u0004\\u0005\\t\\u0005\\u0004\\u0006\\t\\u0006\\u0004\\u0007\\t\\u0007\\u0004\",\n \"\\b\\t\\b\\u0004\\t\\t\\t\\u0004\\n\\t\\n\\u0004\\u000b\\t\\u000b\\u0004\\f\\t\\f\\u0004\",\n \"\\r\\t\\r\\u0004\\u000e\\t\\u000e\\u0004\\u000f\\t\\u000f\\u0003\\u0002\\u0003\\u0002\",\n \"\\u0003\\u0002\\u0003\\u0002\\u0005\\u0002#\\n\\u0002\\u0003\\u0002\\u0003\\u0002\",\n \"\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\",\n \"\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\",\n \"\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\",\n \"\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\",\n \"\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\",\n \"\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\\u0003\\u0002\",\n \"\\u0007\\u0002K\\n\\u0002\\f\\u0002\\u000e\\u0002N\\u000b\\u0002\\u0003\\u0003\\u0003\",\n \"\\u0003\\u0003\\u0003\\u0003\\u0003\\u0003\\u0003\\u0003\\u0003\\u0003\\u0003\\u0005\",\n \"\\u0003W\\n\\u0003\\u0003\\u0004\\u0003\\u0004\\u0003\\u0004\\u0003\\u0004\\u0003\",\n \"\\u0004\\u0003\\u0004\\u0003\\u0004\\u0003\\u0004\\u0005\\u0004a\\n\\u0004\\u0003\",\n \"\\u0005\\u0003\\u0005\\u0003\\u0005\\u0003\\u0006\\u0003\\u0006\\u0003\\u0006\\u0005\",\n \"\\u0006i\\n\\u0006\\u0003\\u0007\\u0003\\u0007\\u0003\\u0007\\u0005\\u0007n\\n\\u0007\",\n \"\\u0003\\u0007\\u0003\\u0007\\u0003\\b\\u0003\\b\\u0003\\b\\u0007\\bu\\n\\b\\f\\b\\u000e\",\n \"\\bx\\u000b\\b\\u0003\\t\\u0003\\t\\u0005\\t|\\n\\t\\u0003\\n\\u0003\\n\\u0003\\n\\u0005\",\n \"\\n\\u0081\\n\\n\\u0003\\u000b\\u0003\\u000b\\u0003\\f\\u0003\\f\\u0003\\r\\u0003\\r\",\n \"\\u0003\\u000e\\u0003\\u000e\\u0003\\u000e\\u0007\\u000e\\u008c\\n\\u000e\\f\\u000e\",\n \"\\u000e\\u000e\\u008f\\u000b\\u000e\\u0003\\u000f\\u0003\\u000f\\u0003\\u000f\\u0002\",\n \"\\u0003\\u0002\\u0010\\u0002\\u0004\\u0006\\b\\n\\f\\u000e\\u0010\\u0012\\u0014\\u0016\",\n \"\\u0018\\u001a\\u001c\\u0002\\u000e\\u0003\\u0002\\u0006\\u0007\\u0003\\u0002\\b\",\n \"\\u000b\\u0004\\u0002\\u0006\\u0007\\f\\f\\u0003\\u0002\\u000e\\u0011\\u0003\\u0002\",\n \"\\u0014\\u0017\\u0003\\u0002\\u0018\\u0019\\u0003\\u0002\\u001b\\u001c\\u0003\\u0002\",\n \"\\u0012\\u0013\\u0003\\u0002\\\"#\\u0003\\u0002\\'.\\u0003\\u0002/6\\u0005\\u0002\",\n \"\\u0012\\u0013\\u0019\\u00199:\\u0002\\u00a2\\u0002\\\"\\u0003\\u0002\\u0002\\u0002\",\n \"\\u0004V\\u0003\\u0002\\u0002\\u0002\\u0006`\\u0003\\u0002\\u0002\\u0002\\bb\\u0003\",\n \"\\u0002\\u0002\\u0002\\nh\\u0003\\u0002\\u0002\\u0002\\fj\\u0003\\u0002\\u0002\\u0002\",\n \"\\u000eq\\u0003\\u0002\\u0002\\u0002\\u0010y\\u0003\\u0002\\u0002\\u0002\\u0012\",\n \"\\u0080\\u0003\\u0002\\u0002\\u0002\\u0014\\u0082\\u0003\\u0002\\u0002\\u0002\\u0016\",\n \"\\u0084\\u0003\\u0002\\u0002\\u0002\\u0018\\u0086\\u0003\\u0002\\u0002\\u0002\\u001a\",\n \"\\u0088\\u0003\\u0002\\u0002\\u0002\\u001c\\u0090\\u0003\\u0002\\u0002\\u0002\\u001e\",\n \"\\u001f\\b\\u0002\\u0001\\u0002\\u001f#\\u0005\\u0004\\u0003\\u0002 !\\t\\u0002\",\n \"\\u0002\\u0002!#\\u0005\\u0002\\u0002\\r\\\"\\u001e\\u0003\\u0002\\u0002\\u0002\\\"\",\n \" \\u0003\\u0002\\u0002\\u0002#L\\u0003\\u0002\\u0002\\u0002$%\\f\\f\\u0002\\u0002\",\n \"%&\\t\\u0003\\u0002\\u0002&K\\u0005\\u0002\\u0002\\r\\'(\\f\\u000b\\u0002\\u0002\",\n \"()\\t\\u0004\\u0002\\u0002)K\\u0005\\u0002\\u0002\\f*+\\f\\n\\u0002\\u0002+,\\u0007\",\n \"\\r\\u0002\\u0002,K\\u0005\\u0002\\u0002\\u000b-.\\f\\t\\u0002\\u0002./\\t\\u0005\",\n \"\\u0002\\u0002/K\\u0005\\u0002\\u0002\\n01\\f\\u0007\\u0002\\u000212\\t\\u0006\\u0002\",\n \"\\u00022K\\u0005\\u0002\\u0002\\b34\\f\\u0006\\u0002\\u000245\\t\\u0007\\u0002\\u0002\",\n \"5K\\u0005\\u0002\\u0002\\u000767\\f\\u0005\\u0002\\u000278\\u0007\\u001a\\u0002\",\n \"\\u00028K\\u0005\\u0002\\u0002\\u00069:\\f\\u0004\\u0002\\u0002:;\\t\\b\\u0002\\u0002\",\n \";K\\u0005\\u0002\\u0002\\u0005<=\\f\\u0003\\u0002\\u0002=>\\u0007\\u001d\\u0002\",\n \"\\u0002>K\\u0005\\u0002\\u0002\\u0004?@\\f\\u000f\\u0002\\u0002@A\\u0007\\u0003\",\n \"\\u0002\\u0002AK\\u0005\\n\\u0006\\u0002BC\\f\\u000e\\u0002\\u0002CD\\u0007\\u0004\",\n \"\\u0002\\u0002DE\\u0005\\u0002\\u0002\\u0002EF\\u0007\\u0005\\u0002\\u0002FK\\u0003\",\n \"\\u0002\\u0002\\u0002GH\\f\\b\\u0002\\u0002HI\\t\\t\\u0002\\u0002IK\\u0005\\u0018\",\n \"\\r\\u0002J$\\u0003\\u0002\\u0002\\u0002J\\'\\u0003\\u0002\\u0002\\u0002J*\\u0003\",\n \"\\u0002\\u0002\\u0002J-\\u0003\\u0002\\u0002\\u0002J0\\u0003\\u0002\\u0002\\u0002\",\n \"J3\\u0003\\u0002\\u0002\\u0002J6\\u0003\\u0002\\u0002\\u0002J9\\u0003\\u0002\\u0002\",\n \"\\u0002J<\\u0003\\u0002\\u0002\\u0002J?\\u0003\\u0002\\u0002\\u0002JB\\u0003\\u0002\",\n \"\\u0002\\u0002JG\\u0003\\u0002\\u0002\\u0002KN\\u0003\\u0002\\u0002\\u0002LJ\\u0003\",\n \"\\u0002\\u0002\\u0002LM\\u0003\\u0002\\u0002\\u0002M\\u0003\\u0003\\u0002\\u0002\",\n \"\\u0002NL\\u0003\\u0002\\u0002\\u0002OW\\u0005\\n\\u0006\\u0002PW\\u0005\\u0006\",\n \"\\u0004\\u0002QW\\u0005\\b\\u0005\\u0002RS\\u0007\\u001e\\u0002\\u0002ST\\u0005\",\n \"\\u0002\\u0002\\u0002TU\\u0007\\u001f\\u0002\\u0002UW\\u0003\\u0002\\u0002\\u0002\",\n \"VO\\u0003\\u0002\\u0002\\u0002VP\\u0003\\u0002\\u0002\\u0002VQ\\u0003\\u0002\\u0002\",\n \"\\u0002VR\\u0003\\u0002\\u0002\\u0002W\\u0005\\u0003\\u0002\\u0002\\u0002XY\\u0007\",\n \" \\u0002\\u0002Ya\\u0007!\\u0002\\u0002Za\\t\\n\\u0002\\u0002[a\\u0007;\\u0002\",\n \"\\u0002\\\\a\\u0007<\\u0002\\u0002]a\\u00077\\u0002\\u0002^a\\u00078\\u0002\\u0002\",\n \"_a\\u0005\\u0010\\t\\u0002`X\\u0003\\u0002\\u0002\\u0002`Z\\u0003\\u0002\\u0002\",\n \"\\u0002`[\\u0003\\u0002\\u0002\\u0002`\\\\\\u0003\\u0002\\u0002\\u0002`]\\u0003\",\n \"\\u0002\\u0002\\u0002`^\\u0003\\u0002\\u0002\\u0002`_\\u0003\\u0002\\u0002\\u0002\",\n \"a\\u0007\\u0003\\u0002\\u0002\\u0002bc\\u0007$\\u0002\\u0002cd\\u0005\\u001c\\u000f\",\n \"\\u0002d\\t\\u0003\\u0002\\u0002\\u0002ei\\u0005\\u001c\\u000f\\u0002fi\\u0005\",\n \"\\f\\u0007\\u0002gi\\u0007%\\u0002\\u0002he\\u0003\\u0002\\u0002\\u0002hf\\u0003\",\n \"\\u0002\\u0002\\u0002hg\\u0003\\u0002\\u0002\\u0002i\\u000b\\u0003\\u0002\\u0002\",\n \"\\u0002jk\\u0005\\u001c\\u000f\\u0002km\\u0007\\u001e\\u0002\\u0002ln\\u0005\\u000e\",\n \"\\b\\u0002ml\\u0003\\u0002\\u0002\\u0002mn\\u0003\\u0002\\u0002\\u0002no\\u0003\",\n \"\\u0002\\u0002\\u0002op\\u0007\\u001f\\u0002\\u0002p\\r\\u0003\\u0002\\u0002\\u0002\",\n \"qv\\u0005\\u0002\\u0002\\u0002rs\\u0007&\\u0002\\u0002su\\u0005\\u0002\\u0002\",\n \"\\u0002tr\\u0003\\u0002\\u0002\\u0002ux\\u0003\\u0002\\u0002\\u0002vt\\u0003\\u0002\",\n \"\\u0002\\u0002vw\\u0003\\u0002\\u0002\\u0002w\\u000f\\u0003\\u0002\\u0002\\u0002\",\n \"xv\\u0003\\u0002\\u0002\\u0002y{\\u0007<\\u0002\\u0002z|\\u0005\\u0012\\n\\u0002\",\n \"{z\\u0003\\u0002\\u0002\\u0002{|\\u0003\\u0002\\u0002\\u0002|\\u0011\\u0003\\u0002\",\n \"\\u0002\\u0002}\\u0081\\u0005\\u0014\\u000b\\u0002~\\u0081\\u0005\\u0016\\f\\u0002\",\n \"\\u007f\\u0081\\u0007;\\u0002\\u0002\\u0080}\\u0003\\u0002\\u0002\\u0002\\u0080\",\n \"~\\u0003\\u0002\\u0002\\u0002\\u0080\\u007f\\u0003\\u0002\\u0002\\u0002\\u0081\",\n \"\\u0013\\u0003\\u0002\\u0002\\u0002\\u0082\\u0083\\t\\u000b\\u0002\\u0002\\u0083\",\n \"\\u0015\\u0003\\u0002\\u0002\\u0002\\u0084\\u0085\\t\\f\\u0002\\u0002\\u0085\\u0017\",\n \"\\u0003\\u0002\\u0002\\u0002\\u0086\\u0087\\u0005\\u001a\\u000e\\u0002\\u0087\\u0019\",\n \"\\u0003\\u0002\\u0002\\u0002\\u0088\\u008d\\u0005\\u001c\\u000f\\u0002\\u0089\\u008a\",\n \"\\u0007\\u0003\\u0002\\u0002\\u008a\\u008c\\u0005\\u001c\\u000f\\u0002\\u008b\\u0089\",\n \"\\u0003\\u0002\\u0002\\u0002\\u008c\\u008f\\u0003\\u0002\\u0002\\u0002\\u008d\\u008b\",\n \"\\u0003\\u0002\\u0002\\u0002\\u008d\\u008e\\u0003\\u0002\\u0002\\u0002\\u008e\\u001b\",\n \"\\u0003\\u0002\\u0002\\u0002\\u008f\\u008d\\u0003\\u0002\\u0002\\u0002\\u0090\\u0091\",\n \"\\t\\r\\u0002\\u0002\\u0091\\u001d\\u0003\\u0002\\u0002\\u0002\\r\\\"JLV`hmv{\\u0080\",\n \"\\u008d\"].join(\"\");\n\n\nvar atn = new antlr4.atn.ATNDeserializer().deserialize(serializedATN);\n\nvar decisionsToDFA = atn.decisionToState.map( function(ds, index) { return new antlr4.dfa.DFA(ds, index); });\n\nvar sharedContextCache = new antlr4.PredictionContextCache();\n\nvar literalNames = [ null, \"'.'\", \"'['\", \"']'\", \"'+'\", \"'-'\", \"'*'\", \"'/'\", \n \"'div'\", \"'mod'\", \"'&'\", \"'|'\", \"'<='\", \"'<'\", \"'>'\", \n \"'>='\", \"'is'\", \"'as'\", \"'='\", \"'~'\", \"'!='\", \"'!~'\", \n \"'in'\", \"'contains'\", \"'and'\", \"'or'\", \"'xor'\", \"'implies'\", \n \"'('\", \"')'\", \"'{'\", \"'}'\", \"'true'\", \"'false'\", \"'%'\", \n \"'$this'\", \"','\", \"'year'\", \"'month'\", \"'week'\", \"'day'\", \n \"'hour'\", \"'minute'\", \"'second'\", \"'millisecond'\", \n \"'years'\", \"'months'\", \"'weeks'\", \"'days'\", \"'hours'\", \n \"'minutes'\", \"'seconds'\", \"'milliseconds'\" ];\n\nvar symbolicNames = [ null, null, null, null, null, null, null, null, null, \n null, null, null, null, null, null, null, null, null, \n null, null, null, null, null, null, null, null, null, \n null, null, null, null, null, null, null, null, null, \n null, null, null, null, null, null, null, null, null, \n null, null, null, null, null, null, null, null, \"DATETIME\", \n \"TIME\", \"IDENTIFIER\", \"QUOTEDIDENTIFIER\", \"STRING\", \n \"NUMBER\", \"WS\", \"COMMENT\", \"LINE_COMMENT\" ];\n\nvar ruleNames = [ \"expression\", \"term\", \"literal\", \"externalConstant\", \n \"invocation\", \"functn\", \"paramList\", \"quantity\", \"unit\", \n \"dateTimePrecision\", \"pluralDateTimePrecision\", \"typeSpecifier\", \n \"qualifiedIdentifier\", \"identifier\" ];\n\nfunction FHIRPathParser (input) {\n\tantlr4.Parser.call(this, input);\n this._interp = new antlr4.atn.ParserATNSimulator(this, atn, decisionsToDFA, sharedContextCache);\n this.ruleNames = ruleNames;\n this.literalNames = literalNames;\n this.symbolicNames = symbolicNames;\n return this;\n}\n\nFHIRPathParser.prototype = Object.create(antlr4.Parser.prototype);\nFHIRPathParser.prototype.constructor = FHIRPathParser;\n\nObject.defineProperty(FHIRPathParser.prototype, \"atn\", {\n\tget : function() {\n\t\treturn atn;\n\t}\n});\n\nFHIRPathParser.EOF = antlr4.Token.EOF;\nFHIRPathParser.T__0 = 1;\nFHIRPathParser.T__1 = 2;\nFHIRPathParser.T__2 = 3;\nFHIRPathParser.T__3 = 4;\nFHIRPathParser.T__4 = 5;\nFHIRPathParser.T__5 = 6;\nFHIRPathParser.T__6 = 7;\nFHIRPathParser.T__7 = 8;\nFHIRPathParser.T__8 = 9;\nFHIRPathParser.T__9 = 10;\nFHIRPathParser.T__10 = 11;\nFHIRPathParser.T__11 = 12;\nFHIRPathParser.T__12 = 13;\nFHIRPathParser.T__13 = 14;\nFHIRPathParser.T__14 = 15;\nFHIRPathParser.T__15 = 16;\nFHIRPathParser.T__16 = 17;\nFHIRPathParser.T__17 = 18;\nFHIRPathParser.T__18 = 19;\nFHIRPathParser.T__19 = 20;\nFHIRPathParser.T__20 = 21;\nFHIRPathParser.T__21 = 22;\nFHIRPathParser.T__22 = 23;\nFHIRPathParser.T__23 = 24;\nFHIRPathParser.T__24 = 25;\nFHIRPathParser.T__25 = 26;\nFHIRPathParser.T__26 = 27;\nFHIRPathParser.T__27 = 28;\nFHIRPathParser.T__28 = 29;\nFHIRPathParser.T__29 = 30;\nFHIRPathParser.T__30 = 31;\nFHIRPathParser.T__31 = 32;\nFHIRPathParser.T__32 = 33;\nFHIRPathParser.T__33 = 34;\nFHIRPathParser.T__34 = 35;\nFHIRPathParser.T__35 = 36;\nFHIRPathParser.T__36 = 37;\nFHIRPathParser.T__37 = 38;\nFHIRPathParser.T__38 = 39;\nFHIRPathParser.T__39 = 40;\nFHIRPathParser.T__40 = 41;\nFHIRPathParser.T__41 = 42;\nFHIRPathParser.T__42 = 43;\nFHIRPathParser.T__43 = 44;\nFHIRPathParser.T__44 = 45;\nFHIRPathParser.T__45 = 46;\nFHIRPathParser.T__46 = 47;\nFHIRPathParser.T__47 = 48;\nFHIRPathParser.T__48 = 49;\nFHIRPathParser.T__49 = 50;\nFHIRPathParser.T__50 = 51;\nFHIRPathParser.T__51 = 52;\nFHIRPathParser.DATETIME = 53;\nFHIRPathParser.TIME = 54;\nFHIRPathParser.IDENTIFIER = 55;\nFHIRPathParser.QUOTEDIDENTIFIER = 56;\nFHIRPathParser.STRING = 57;\nFHIRPathParser.NUMBER = 58;\nFHIRPathParser.WS = 59;\nFHIRPathParser.COMMENT = 60;\nFHIRPathParser.LINE_COMMENT = 61;\n\nFHIRPathParser.RULE_expression = 0;\nFHIRPathParser.RULE_term = 1;\nFHIRPathParser.RULE_literal = 2;\nFHIRPathParser.RULE_externalConstant = 3;\nFHIRPathParser.RULE_invocation = 4;\nFHIRPathParser.RULE_functn = 5;\nFHIRPathParser.RULE_paramList = 6;\nFHIRPathParser.RULE_quantity = 7;\nFHIRPathParser.RULE_unit = 8;\nFHIRPathParser.RULE_dateTimePrecision = 9;\nFHIRPathParser.RULE_pluralDateTimePrecision = 10;\nFHIRPathParser.RULE_typeSpecifier = 11;\nFHIRPathParser.RULE_qualifiedIdentifier = 12;\nFHIRPathParser.RULE_identifier = 13;\n\nfunction ExpressionContext(parser, parent, invokingState) {\n\tif(parent===undefined) {\n\t parent = null;\n\t}\n\tif(invokingState===undefined || invokingState===null) {\n\t\tinvokingState = -1;\n\t}\n\tantlr4.ParserRuleContext.call(this, parent, invokingState);\n this.parser = parser;\n this.ruleIndex = FHIRPathParser.RULE_expression;\n return this;\n}\n\nExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);\nExpressionContext.prototype.constructor = ExpressionContext;\n\n\n \nExpressionContext.prototype.copyFrom = function(ctx) {\n antlr4.ParserRuleContext.prototype.copyFrom.call(this, ctx);\n};\n\nfunction IndexerExpressionContext(parser, ctx) {\n\tExpressionContext.call(this, parser);\n ExpressionContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nIndexerExpressionContext.prototype = Object.create(ExpressionContext.prototype);\nIndexerExpressionContext.prototype.constructor = IndexerExpressionContext;\n\nFHIRPathParser.IndexerExpressionContext = IndexerExpressionContext;\n\nIndexerExpressionContext.prototype.expression = function(i) {\n if(i===undefined) {\n i = null;\n }\n if(i===null) {\n return this.getTypedRuleContexts(ExpressionContext);\n } else {\n return this.getTypedRuleContext(ExpressionContext,i);\n }\n};\nIndexerExpressionContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterIndexerExpression(this);\n\t}\n};\n\nIndexerExpressionContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitIndexerExpression(this);\n\t}\n};\n\n\nfunction PolarityExpressionContext(parser, ctx) {\n\tExpressionContext.call(this, parser);\n ExpressionContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nPolarityExpressionContext.prototype = Object.create(ExpressionContext.prototype);\nPolarityExpressionContext.prototype.constructor = PolarityExpressionContext;\n\nFHIRPathParser.PolarityExpressionContext = PolarityExpressionContext;\n\nPolarityExpressionContext.prototype.expression = function() {\n return this.getTypedRuleContext(ExpressionContext,0);\n};\nPolarityExpressionContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterPolarityExpression(this);\n\t}\n};\n\nPolarityExpressionContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitPolarityExpression(this);\n\t}\n};\n\n\nfunction AdditiveExpressionContext(parser, ctx) {\n\tExpressionContext.call(this, parser);\n ExpressionContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nAdditiveExpressionContext.prototype = Object.create(ExpressionContext.prototype);\nAdditiveExpressionContext.prototype.constructor = AdditiveExpressionContext;\n\nFHIRPathParser.AdditiveExpressionContext = AdditiveExpressionContext;\n\nAdditiveExpressionContext.prototype.expression = function(i) {\n if(i===undefined) {\n i = null;\n }\n if(i===null) {\n return this.getTypedRuleContexts(ExpressionContext);\n } else {\n return this.getTypedRuleContext(ExpressionContext,i);\n }\n};\nAdditiveExpressionContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterAdditiveExpression(this);\n\t}\n};\n\nAdditiveExpressionContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitAdditiveExpression(this);\n\t}\n};\n\n\nfunction MultiplicativeExpressionContext(parser, ctx) {\n\tExpressionContext.call(this, parser);\n ExpressionContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nMultiplicativeExpressionContext.prototype = Object.create(ExpressionContext.prototype);\nMultiplicativeExpressionContext.prototype.constructor = MultiplicativeExpressionContext;\n\nFHIRPathParser.MultiplicativeExpressionContext = MultiplicativeExpressionContext;\n\nMultiplicativeExpressionContext.prototype.expression = function(i) {\n if(i===undefined) {\n i = null;\n }\n if(i===null) {\n return this.getTypedRuleContexts(ExpressionContext);\n } else {\n return this.getTypedRuleContext(ExpressionContext,i);\n }\n};\nMultiplicativeExpressionContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterMultiplicativeExpression(this);\n\t}\n};\n\nMultiplicativeExpressionContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitMultiplicativeExpression(this);\n\t}\n};\n\n\nfunction UnionExpressionContext(parser, ctx) {\n\tExpressionContext.call(this, parser);\n ExpressionContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nUnionExpressionContext.prototype = Object.create(ExpressionContext.prototype);\nUnionExpressionContext.prototype.constructor = UnionExpressionContext;\n\nFHIRPathParser.UnionExpressionContext = UnionExpressionContext;\n\nUnionExpressionContext.prototype.expression = function(i) {\n if(i===undefined) {\n i = null;\n }\n if(i===null) {\n return this.getTypedRuleContexts(ExpressionContext);\n } else {\n return this.getTypedRuleContext(ExpressionContext,i);\n }\n};\nUnionExpressionContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterUnionExpression(this);\n\t}\n};\n\nUnionExpressionContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitUnionExpression(this);\n\t}\n};\n\n\nfunction OrExpressionContext(parser, ctx) {\n\tExpressionContext.call(this, parser);\n ExpressionContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nOrExpressionContext.prototype = Object.create(ExpressionContext.prototype);\nOrExpressionContext.prototype.constructor = OrExpressionContext;\n\nFHIRPathParser.OrExpressionContext = OrExpressionContext;\n\nOrExpressionContext.prototype.expression = function(i) {\n if(i===undefined) {\n i = null;\n }\n if(i===null) {\n return this.getTypedRuleContexts(ExpressionContext);\n } else {\n return this.getTypedRuleContext(ExpressionContext,i);\n }\n};\nOrExpressionContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterOrExpression(this);\n\t}\n};\n\nOrExpressionContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitOrExpression(this);\n\t}\n};\n\n\nfunction AndExpressionContext(parser, ctx) {\n\tExpressionContext.call(this, parser);\n ExpressionContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nAndExpressionContext.prototype = Object.create(ExpressionContext.prototype);\nAndExpressionContext.prototype.constructor = AndExpressionContext;\n\nFHIRPathParser.AndExpressionContext = AndExpressionContext;\n\nAndExpressionContext.prototype.expression = function(i) {\n if(i===undefined) {\n i = null;\n }\n if(i===null) {\n return this.getTypedRuleContexts(ExpressionContext);\n } else {\n return this.getTypedRuleContext(ExpressionContext,i);\n }\n};\nAndExpressionContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterAndExpression(this);\n\t}\n};\n\nAndExpressionContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitAndExpression(this);\n\t}\n};\n\n\nfunction MembershipExpressionContext(parser, ctx) {\n\tExpressionContext.call(this, parser);\n ExpressionContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nMembershipExpressionContext.prototype = Object.create(ExpressionContext.prototype);\nMembershipExpressionContext.prototype.constructor = MembershipExpressionContext;\n\nFHIRPathParser.MembershipExpressionContext = MembershipExpressionContext;\n\nMembershipExpressionContext.prototype.expression = function(i) {\n if(i===undefined) {\n i = null;\n }\n if(i===null) {\n return this.getTypedRuleContexts(ExpressionContext);\n } else {\n return this.getTypedRuleContext(ExpressionContext,i);\n }\n};\nMembershipExpressionContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterMembershipExpression(this);\n\t}\n};\n\nMembershipExpressionContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitMembershipExpression(this);\n\t}\n};\n\n\nfunction InequalityExpressionContext(parser, ctx) {\n\tExpressionContext.call(this, parser);\n ExpressionContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nInequalityExpressionContext.prototype = Object.create(ExpressionContext.prototype);\nInequalityExpressionContext.prototype.constructor = InequalityExpressionContext;\n\nFHIRPathParser.InequalityExpressionContext = InequalityExpressionContext;\n\nInequalityExpressionContext.prototype.expression = function(i) {\n if(i===undefined) {\n i = null;\n }\n if(i===null) {\n return this.getTypedRuleContexts(ExpressionContext);\n } else {\n return this.getTypedRuleContext(ExpressionContext,i);\n }\n};\nInequalityExpressionContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterInequalityExpression(this);\n\t}\n};\n\nInequalityExpressionContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitInequalityExpression(this);\n\t}\n};\n\n\nfunction InvocationExpressionContext(parser, ctx) {\n\tExpressionContext.call(this, parser);\n ExpressionContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nInvocationExpressionContext.prototype = Object.create(ExpressionContext.prototype);\nInvocationExpressionContext.prototype.constructor = InvocationExpressionContext;\n\nFHIRPathParser.InvocationExpressionContext = InvocationExpressionContext;\n\nInvocationExpressionContext.prototype.expression = function() {\n return this.getTypedRuleContext(ExpressionContext,0);\n};\n\nInvocationExpressionContext.prototype.invocation = function() {\n return this.getTypedRuleContext(InvocationContext,0);\n};\nInvocationExpressionContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterInvocationExpression(this);\n\t}\n};\n\nInvocationExpressionContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitInvocationExpression(this);\n\t}\n};\n\n\nfunction EqualityExpressionContext(parser, ctx) {\n\tExpressionContext.call(this, parser);\n ExpressionContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nEqualityExpressionContext.prototype = Object.create(ExpressionContext.prototype);\nEqualityExpressionContext.prototype.constructor = EqualityExpressionContext;\n\nFHIRPathParser.EqualityExpressionContext = EqualityExpressionContext;\n\nEqualityExpressionContext.prototype.expression = function(i) {\n if(i===undefined) {\n i = null;\n }\n if(i===null) {\n return this.getTypedRuleContexts(ExpressionContext);\n } else {\n return this.getTypedRuleContext(ExpressionContext,i);\n }\n};\nEqualityExpressionContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterEqualityExpression(this);\n\t}\n};\n\nEqualityExpressionContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitEqualityExpression(this);\n\t}\n};\n\n\nfunction ImpliesExpressionContext(parser, ctx) {\n\tExpressionContext.call(this, parser);\n ExpressionContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nImpliesExpressionContext.prototype = Object.create(ExpressionContext.prototype);\nImpliesExpressionContext.prototype.constructor = ImpliesExpressionContext;\n\nFHIRPathParser.ImpliesExpressionContext = ImpliesExpressionContext;\n\nImpliesExpressionContext.prototype.expression = function(i) {\n if(i===undefined) {\n i = null;\n }\n if(i===null) {\n return this.getTypedRuleContexts(ExpressionContext);\n } else {\n return this.getTypedRuleContext(ExpressionContext,i);\n }\n};\nImpliesExpressionContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterImpliesExpression(this);\n\t}\n};\n\nImpliesExpressionContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitImpliesExpression(this);\n\t}\n};\n\n\nfunction TermExpressionContext(parser, ctx) {\n\tExpressionContext.call(this, parser);\n ExpressionContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nTermExpressionContext.prototype = Object.create(ExpressionContext.prototype);\nTermExpressionContext.prototype.constructor = TermExpressionContext;\n\nFHIRPathParser.TermExpressionContext = TermExpressionContext;\n\nTermExpressionContext.prototype.term = function() {\n return this.getTypedRuleContext(TermContext,0);\n};\nTermExpressionContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterTermExpression(this);\n\t}\n};\n\nTermExpressionContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitTermExpression(this);\n\t}\n};\n\n\nfunction TypeExpressionContext(parser, ctx) {\n\tExpressionContext.call(this, parser);\n ExpressionContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nTypeExpressionContext.prototype = Object.create(ExpressionContext.prototype);\nTypeExpressionContext.prototype.constructor = TypeExpressionContext;\n\nFHIRPathParser.TypeExpressionContext = TypeExpressionContext;\n\nTypeExpressionContext.prototype.expression = function() {\n return this.getTypedRuleContext(ExpressionContext,0);\n};\n\nTypeExpressionContext.prototype.typeSpecifier = function() {\n return this.getTypedRuleContext(TypeSpecifierContext,0);\n};\nTypeExpressionContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterTypeExpression(this);\n\t}\n};\n\nTypeExpressionContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitTypeExpression(this);\n\t}\n};\n\n\n\nFHIRPathParser.prototype.expression = function(_p) {\n\tif(_p===undefined) {\n\t _p = 0;\n\t}\n var _parentctx = this._ctx;\n var _parentState = this.state;\n var localctx = new ExpressionContext(this, this._ctx, _parentState);\n var _prevctx = localctx;\n var _startState = 0;\n this.enterRecursionRule(localctx, 0, FHIRPathParser.RULE_expression, _p);\n var _la = 0; // Token type\n try {\n this.enterOuterAlt(localctx, 1);\n this.state = 32;\n this._errHandler.sync(this);\n switch(this._input.LA(1)) {\n case FHIRPathParser.T__15:\n case FHIRPathParser.T__16:\n case FHIRPathParser.T__22:\n case FHIRPathParser.T__27:\n case FHIRPathParser.T__29:\n case FHIRPathParser.T__31:\n case FHIRPathParser.T__32:\n case FHIRPathParser.T__33:\n case FHIRPathParser.T__34:\n case FHIRPathParser.DATETIME:\n case FHIRPathParser.TIME:\n case FHIRPathParser.IDENTIFIER:\n case FHIRPathParser.QUOTEDIDENTIFIER:\n case FHIRPathParser.STRING:\n case FHIRPathParser.NUMBER:\n localctx = new TermExpressionContext(this, localctx);\n this._ctx = localctx;\n _prevctx = localctx;\n\n this.state = 29;\n this.term();\n break;\n case FHIRPathParser.T__3:\n case FHIRPathParser.T__4:\n localctx = new PolarityExpressionContext(this, localctx);\n this._ctx = localctx;\n _prevctx = localctx;\n this.state = 30;\n _la = this._input.LA(1);\n if(!(_la===FHIRPathParser.T__3 || _la===FHIRPathParser.T__4)) {\n this._errHandler.recoverInline(this);\n }\n else {\n \tthis._errHandler.reportMatch(this);\n this.consume();\n }\n this.state = 31;\n this.expression(11);\n break;\n default:\n throw new antlr4.error.NoViableAltException(this);\n }\n this._ctx.stop = this._input.LT(-1);\n this.state = 74;\n this._errHandler.sync(this);\n var _alt = this._interp.adaptivePredict(this._input,2,this._ctx)\n while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {\n if(_alt===1) {\n if(this._parseListeners!==null) {\n this.triggerExitRuleEvent();\n }\n _prevctx = localctx;\n this.state = 72;\n this._errHandler.sync(this);\n var la_ = this._interp.adaptivePredict(this._input,1,this._ctx);\n switch(la_) {\n case 1:\n localctx = new MultiplicativeExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));\n this.pushNewRecursionContext(localctx, _startState, FHIRPathParser.RULE_expression);\n this.state = 34;\n if (!( this.precpred(this._ctx, 10))) {\n throw new antlr4.error.FailedPredicateException(this, \"this.precpred(this._ctx, 10)\");\n }\n this.state = 35;\n _la = this._input.LA(1);\n if(!((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << FHIRPathParser.T__5) | (1 << FHIRPathParser.T__6) | (1 << FHIRPathParser.T__7) | (1 << FHIRPathParser.T__8))) !== 0))) {\n this._errHandler.recoverInline(this);\n }\n else {\n \tthis._errHandler.reportMatch(this);\n this.consume();\n }\n this.state = 36;\n this.expression(11);\n break;\n\n case 2:\n localctx = new AdditiveExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));\n this.pushNewRecursionContext(localctx, _startState, FHIRPathParser.RULE_expression);\n this.state = 37;\n if (!( this.precpred(this._ctx, 9))) {\n throw new antlr4.error.FailedPredicateException(this, \"this.precpred(this._ctx, 9)\");\n }\n this.state = 38;\n _la = this._input.LA(1);\n if(!((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << FHIRPathParser.T__3) | (1 << FHIRPathParser.T__4) | (1 << FHIRPathParser.T__9))) !== 0))) {\n this._errHandler.recoverInline(this);\n }\n else {\n \tthis._errHandler.reportMatch(this);\n this.consume();\n }\n this.state = 39;\n this.expression(10);\n break;\n\n case 3:\n localctx = new UnionExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));\n this.pushNewRecursionContext(localctx, _startState, FHIRPathParser.RULE_expression);\n this.state = 40;\n if (!( this.precpred(this._ctx, 8))) {\n throw new antlr4.error.FailedPredicateException(this, \"this.precpred(this._ctx, 8)\");\n }\n this.state = 41;\n this.match(FHIRPathParser.T__10);\n this.state = 42;\n this.expression(9);\n break;\n\n case 4:\n localctx = new InequalityExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));\n this.pushNewRecursionContext(localctx, _startState, FHIRPathParser.RULE_expression);\n this.state = 43;\n if (!( this.precpred(this._ctx, 7))) {\n throw new antlr4.error.FailedPredicateException(this, \"this.precpred(this._ctx, 7)\");\n }\n this.state = 44;\n _la = this._input.LA(1);\n if(!((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << FHIRPathParser.T__11) | (1 << FHIRPathParser.T__12) | (1 << FHIRPathParser.T__13) | (1 << FHIRPathParser.T__14))) !== 0))) {\n this._errHandler.recoverInline(this);\n }\n else {\n \tthis._errHandler.reportMatch(this);\n this.consume();\n }\n this.state = 45;\n this.expression(8);\n break;\n\n case 5:\n localctx = new EqualityExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));\n this.pushNewRecursionContext(localctx, _startState, FHIRPathParser.RULE_expression);\n this.state = 46;\n if (!( this.precpred(this._ctx, 5))) {\n throw new antlr4.error.FailedPredicateException(this, \"this.precpred(this._ctx, 5)\");\n }\n this.state = 47;\n _la = this._input.LA(1);\n if(!((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << FHIRPathParser.T__17) | (1 << FHIRPathParser.T__18) | (1 << FHIRPathParser.T__19) | (1 << FHIRPathParser.T__20))) !== 0))) {\n this._errHandler.recoverInline(this);\n }\n else {\n \tthis._errHandler.reportMatch(this);\n this.consume();\n }\n this.state = 48;\n this.expression(6);\n break;\n\n case 6:\n localctx = new MembershipExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));\n this.pushNewRecursionContext(localctx, _startState, FHIRPathParser.RULE_expression);\n this.state = 49;\n if (!( this.precpred(this._ctx, 4))) {\n throw new antlr4.error.FailedPredicateException(this, \"this.precpred(this._ctx, 4)\");\n }\n this.state = 50;\n _la = this._input.LA(1);\n if(!(_la===FHIRPathParser.T__21 || _la===FHIRPathParser.T__22)) {\n this._errHandler.recoverInline(this);\n }\n else {\n \tthis._errHandler.reportMatch(this);\n this.consume();\n }\n this.state = 51;\n this.expression(5);\n break;\n\n case 7:\n localctx = new AndExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));\n this.pushNewRecursionContext(localctx, _startState, FHIRPathParser.RULE_expression);\n this.state = 52;\n if (!( this.precpred(this._ctx, 3))) {\n throw new antlr4.error.FailedPredicateException(this, \"this.precpred(this._ctx, 3)\");\n }\n this.state = 53;\n this.match(FHIRPathParser.T__23);\n this.state = 54;\n this.expression(4);\n break;\n\n case 8:\n localctx = new OrExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));\n this.pushNewRecursionContext(localctx, _startState, FHIRPathParser.RULE_expression);\n this.state = 55;\n if (!( this.precpred(this._ctx, 2))) {\n throw new antlr4.error.FailedPredicateException(this, \"this.precpred(this._ctx, 2)\");\n }\n this.state = 56;\n _la = this._input.LA(1);\n if(!(_la===FHIRPathParser.T__24 || _la===FHIRPathParser.T__25)) {\n this._errHandler.recoverInline(this);\n }\n else {\n \tthis._errHandler.reportMatch(this);\n this.consume();\n }\n this.state = 57;\n this.expression(3);\n break;\n\n case 9:\n localctx = new ImpliesExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));\n this.pushNewRecursionContext(localctx, _startState, FHIRPathParser.RULE_expression);\n this.state = 58;\n if (!( this.precpred(this._ctx, 1))) {\n throw new antlr4.error.FailedPredicateException(this, \"this.precpred(this._ctx, 1)\");\n }\n this.state = 59;\n this.match(FHIRPathParser.T__26);\n this.state = 60;\n this.expression(2);\n break;\n\n case 10:\n localctx = new InvocationExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));\n this.pushNewRecursionContext(localctx, _startState, FHIRPathParser.RULE_expression);\n this.state = 61;\n if (!( this.precpred(this._ctx, 13))) {\n throw new antlr4.error.FailedPredicateException(this, \"this.precpred(this._ctx, 13)\");\n }\n this.state = 62;\n this.match(FHIRPathParser.T__0);\n this.state = 63;\n this.invocation();\n break;\n\n case 11:\n localctx = new IndexerExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));\n this.pushNewRecursionContext(localctx, _startState, FHIRPathParser.RULE_expression);\n this.state = 64;\n if (!( this.precpred(this._ctx, 12))) {\n throw new antlr4.error.FailedPredicateException(this, \"this.precpred(this._ctx, 12)\");\n }\n this.state = 65;\n this.match(FHIRPathParser.T__1);\n this.state = 66;\n this.expression(0);\n this.state = 67;\n this.match(FHIRPathParser.T__2);\n break;\n\n case 12:\n localctx = new TypeExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));\n this.pushNewRecursionContext(localctx, _startState, FHIRPathParser.RULE_expression);\n this.state = 69;\n if (!( this.precpred(this._ctx, 6))) {\n throw new antlr4.error.FailedPredicateException(this, \"this.precpred(this._ctx, 6)\");\n }\n this.state = 70;\n _la = this._input.LA(1);\n if(!(_la===FHIRPathParser.T__15 || _la===FHIRPathParser.T__16)) {\n this._errHandler.recoverInline(this);\n }\n else {\n \tthis._errHandler.reportMatch(this);\n this.consume();\n }\n this.state = 71;\n this.typeSpecifier();\n break;\n\n } \n }\n this.state = 76;\n this._errHandler.sync(this);\n _alt = this._interp.adaptivePredict(this._input,2,this._ctx);\n }\n\n } catch( error) {\n if(error instanceof antlr4.error.RecognitionException) {\n\t localctx.exception = error;\n\t this._errHandler.reportError(this, error);\n\t this._errHandler.recover(this, error);\n\t } else {\n\t \tthrow error;\n\t }\n } finally {\n this.unrollRecursionContexts(_parentctx)\n }\n return localctx;\n};\n\nfunction TermContext(parser, parent, invokingState) {\n\tif(parent===undefined) {\n\t parent = null;\n\t}\n\tif(invokingState===undefined || invokingState===null) {\n\t\tinvokingState = -1;\n\t}\n\tantlr4.ParserRuleContext.call(this, parent, invokingState);\n this.parser = parser;\n this.ruleIndex = FHIRPathParser.RULE_term;\n return this;\n}\n\nTermContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);\nTermContext.prototype.constructor = TermContext;\n\n\n \nTermContext.prototype.copyFrom = function(ctx) {\n antlr4.ParserRuleContext.prototype.copyFrom.call(this, ctx);\n};\n\n\nfunction ExternalConstantTermContext(parser, ctx) {\n\tTermContext.call(this, parser);\n TermContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nExternalConstantTermContext.prototype = Object.create(TermContext.prototype);\nExternalConstantTermContext.prototype.constructor = ExternalConstantTermContext;\n\nFHIRPathParser.ExternalConstantTermContext = ExternalConstantTermContext;\n\nExternalConstantTermContext.prototype.externalConstant = function() {\n return this.getTypedRuleContext(ExternalConstantContext,0);\n};\nExternalConstantTermContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterExternalConstantTerm(this);\n\t}\n};\n\nExternalConstantTermContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitExternalConstantTerm(this);\n\t}\n};\n\n\nfunction LiteralTermContext(parser, ctx) {\n\tTermContext.call(this, parser);\n TermContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nLiteralTermContext.prototype = Object.create(TermContext.prototype);\nLiteralTermContext.prototype.constructor = LiteralTermContext;\n\nFHIRPathParser.LiteralTermContext = LiteralTermContext;\n\nLiteralTermContext.prototype.literal = function() {\n return this.getTypedRuleContext(LiteralContext,0);\n};\nLiteralTermContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterLiteralTerm(this);\n\t}\n};\n\nLiteralTermContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitLiteralTerm(this);\n\t}\n};\n\n\nfunction ParenthesizedTermContext(parser, ctx) {\n\tTermContext.call(this, parser);\n TermContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nParenthesizedTermContext.prototype = Object.create(TermContext.prototype);\nParenthesizedTermContext.prototype.constructor = ParenthesizedTermContext;\n\nFHIRPathParser.ParenthesizedTermContext = ParenthesizedTermContext;\n\nParenthesizedTermContext.prototype.expression = function() {\n return this.getTypedRuleContext(ExpressionContext,0);\n};\nParenthesizedTermContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterParenthesizedTerm(this);\n\t}\n};\n\nParenthesizedTermContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitParenthesizedTerm(this);\n\t}\n};\n\n\nfunction InvocationTermContext(parser, ctx) {\n\tTermContext.call(this, parser);\n TermContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nInvocationTermContext.prototype = Object.create(TermContext.prototype);\nInvocationTermContext.prototype.constructor = InvocationTermContext;\n\nFHIRPathParser.InvocationTermContext = InvocationTermContext;\n\nInvocationTermContext.prototype.invocation = function() {\n return this.getTypedRuleContext(InvocationContext,0);\n};\nInvocationTermContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterInvocationTerm(this);\n\t}\n};\n\nInvocationTermContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitInvocationTerm(this);\n\t}\n};\n\n\n\nFHIRPathParser.TermContext = TermContext;\n\nFHIRPathParser.prototype.term = function() {\n\n var localctx = new TermContext(this, this._ctx, this.state);\n this.enterRule(localctx, 2, FHIRPathParser.RULE_term);\n try {\n this.state = 84;\n this._errHandler.sync(this);\n switch(this._input.LA(1)) {\n case FHIRPathParser.T__15:\n case FHIRPathParser.T__16:\n case FHIRPathParser.T__22:\n case FHIRPathParser.T__34:\n case FHIRPathParser.IDENTIFIER:\n case FHIRPathParser.QUOTEDIDENTIFIER:\n localctx = new InvocationTermContext(this, localctx);\n this.enterOuterAlt(localctx, 1);\n this.state = 77;\n this.invocation();\n break;\n case FHIRPathParser.T__29:\n case FHIRPathParser.T__31:\n case FHIRPathParser.T__32:\n case FHIRPathParser.DATETIME:\n case FHIRPathParser.TIME:\n case FHIRPathParser.STRING:\n case FHIRPathParser.NUMBER:\n localctx = new LiteralTermContext(this, localctx);\n this.enterOuterAlt(localctx, 2);\n this.state = 78;\n this.literal();\n break;\n case FHIRPathParser.T__33:\n localctx = new ExternalConstantTermContext(this, localctx);\n this.enterOuterAlt(localctx, 3);\n this.state = 79;\n this.externalConstant();\n break;\n case FHIRPathParser.T__27:\n localctx = new ParenthesizedTermContext(this, localctx);\n this.enterOuterAlt(localctx, 4);\n this.state = 80;\n this.match(FHIRPathParser.T__27);\n this.state = 81;\n this.expression(0);\n this.state = 82;\n this.match(FHIRPathParser.T__28);\n break;\n default:\n throw new antlr4.error.NoViableAltException(this);\n }\n } catch (re) {\n \tif(re instanceof antlr4.error.RecognitionException) {\n\t localctx.exception = re;\n\t this._errHandler.reportError(this, re);\n\t this._errHandler.recover(this, re);\n\t } else {\n\t \tthrow re;\n\t }\n } finally {\n this.exitRule();\n }\n return localctx;\n};\n\nfunction LiteralContext(parser, parent, invokingState) {\n\tif(parent===undefined) {\n\t parent = null;\n\t}\n\tif(invokingState===undefined || invokingState===null) {\n\t\tinvokingState = -1;\n\t}\n\tantlr4.ParserRuleContext.call(this, parent, invokingState);\n this.parser = parser;\n this.ruleIndex = FHIRPathParser.RULE_literal;\n return this;\n}\n\nLiteralContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);\nLiteralContext.prototype.constructor = LiteralContext;\n\n\n \nLiteralContext.prototype.copyFrom = function(ctx) {\n antlr4.ParserRuleContext.prototype.copyFrom.call(this, ctx);\n};\n\n\nfunction TimeLiteralContext(parser, ctx) {\n\tLiteralContext.call(this, parser);\n LiteralContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nTimeLiteralContext.prototype = Object.create(LiteralContext.prototype);\nTimeLiteralContext.prototype.constructor = TimeLiteralContext;\n\nFHIRPathParser.TimeLiteralContext = TimeLiteralContext;\n\nTimeLiteralContext.prototype.TIME = function() {\n return this.getToken(FHIRPathParser.TIME, 0);\n};\nTimeLiteralContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterTimeLiteral(this);\n\t}\n};\n\nTimeLiteralContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitTimeLiteral(this);\n\t}\n};\n\n\nfunction NullLiteralContext(parser, ctx) {\n\tLiteralContext.call(this, parser);\n LiteralContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nNullLiteralContext.prototype = Object.create(LiteralContext.prototype);\nNullLiteralContext.prototype.constructor = NullLiteralContext;\n\nFHIRPathParser.NullLiteralContext = NullLiteralContext;\n\nNullLiteralContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterNullLiteral(this);\n\t}\n};\n\nNullLiteralContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitNullLiteral(this);\n\t}\n};\n\n\nfunction DateTimeLiteralContext(parser, ctx) {\n\tLiteralContext.call(this, parser);\n LiteralContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nDateTimeLiteralContext.prototype = Object.create(LiteralContext.prototype);\nDateTimeLiteralContext.prototype.constructor = DateTimeLiteralContext;\n\nFHIRPathParser.DateTimeLiteralContext = DateTimeLiteralContext;\n\nDateTimeLiteralContext.prototype.DATETIME = function() {\n return this.getToken(FHIRPathParser.DATETIME, 0);\n};\nDateTimeLiteralContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterDateTimeLiteral(this);\n\t}\n};\n\nDateTimeLiteralContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitDateTimeLiteral(this);\n\t}\n};\n\n\nfunction StringLiteralContext(parser, ctx) {\n\tLiteralContext.call(this, parser);\n LiteralContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nStringLiteralContext.prototype = Object.create(LiteralContext.prototype);\nStringLiteralContext.prototype.constructor = StringLiteralContext;\n\nFHIRPathParser.StringLiteralContext = StringLiteralContext;\n\nStringLiteralContext.prototype.STRING = function() {\n return this.getToken(FHIRPathParser.STRING, 0);\n};\nStringLiteralContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterStringLiteral(this);\n\t}\n};\n\nStringLiteralContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitStringLiteral(this);\n\t}\n};\n\n\nfunction BooleanLiteralContext(parser, ctx) {\n\tLiteralContext.call(this, parser);\n LiteralContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nBooleanLiteralContext.prototype = Object.create(LiteralContext.prototype);\nBooleanLiteralContext.prototype.constructor = BooleanLiteralContext;\n\nFHIRPathParser.BooleanLiteralContext = BooleanLiteralContext;\n\nBooleanLiteralContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterBooleanLiteral(this);\n\t}\n};\n\nBooleanLiteralContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitBooleanLiteral(this);\n\t}\n};\n\n\nfunction NumberLiteralContext(parser, ctx) {\n\tLiteralContext.call(this, parser);\n LiteralContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nNumberLiteralContext.prototype = Object.create(LiteralContext.prototype);\nNumberLiteralContext.prototype.constructor = NumberLiteralContext;\n\nFHIRPathParser.NumberLiteralContext = NumberLiteralContext;\n\nNumberLiteralContext.prototype.NUMBER = function() {\n return this.getToken(FHIRPathParser.NUMBER, 0);\n};\nNumberLiteralContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterNumberLiteral(this);\n\t}\n};\n\nNumberLiteralContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitNumberLiteral(this);\n\t}\n};\n\n\nfunction QuantityLiteralContext(parser, ctx) {\n\tLiteralContext.call(this, parser);\n LiteralContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nQuantityLiteralContext.prototype = Object.create(LiteralContext.prototype);\nQuantityLiteralContext.prototype.constructor = QuantityLiteralContext;\n\nFHIRPathParser.QuantityLiteralContext = QuantityLiteralContext;\n\nQuantityLiteralContext.prototype.quantity = function() {\n return this.getTypedRuleContext(QuantityContext,0);\n};\nQuantityLiteralContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterQuantityLiteral(this);\n\t}\n};\n\nQuantityLiteralContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitQuantityLiteral(this);\n\t}\n};\n\n\n\nFHIRPathParser.LiteralContext = LiteralContext;\n\nFHIRPathParser.prototype.literal = function() {\n\n var localctx = new LiteralContext(this, this._ctx, this.state);\n this.enterRule(localctx, 4, FHIRPathParser.RULE_literal);\n var _la = 0; // Token type\n try {\n this.state = 94;\n this._errHandler.sync(this);\n var la_ = this._interp.adaptivePredict(this._input,4,this._ctx);\n switch(la_) {\n case 1:\n localctx = new NullLiteralContext(this, localctx);\n this.enterOuterAlt(localctx, 1);\n this.state = 86;\n this.match(FHIRPathParser.T__29);\n this.state = 87;\n this.match(FHIRPathParser.T__30);\n break;\n\n case 2:\n localctx = new BooleanLiteralContext(this, localctx);\n this.enterOuterAlt(localctx, 2);\n this.state = 88;\n _la = this._input.LA(1);\n if(!(_la===FHIRPathParser.T__31 || _la===FHIRPathParser.T__32)) {\n this._errHandler.recoverInline(this);\n }\n else {\n \tthis._errHandler.reportMatch(this);\n this.consume();\n }\n break;\n\n case 3:\n localctx = new StringLiteralContext(this, localctx);\n this.enterOuterAlt(localctx, 3);\n this.state = 89;\n this.match(FHIRPathParser.STRING);\n break;\n\n case 4:\n localctx = new NumberLiteralContext(this, localctx);\n this.enterOuterAlt(localctx, 4);\n this.state = 90;\n this.match(FHIRPathParser.NUMBER);\n break;\n\n case 5:\n localctx = new DateTimeLiteralContext(this, localctx);\n this.enterOuterAlt(localctx, 5);\n this.state = 91;\n this.match(FHIRPathParser.DATETIME);\n break;\n\n case 6:\n localctx = new TimeLiteralContext(this, localctx);\n this.enterOuterAlt(localctx, 6);\n this.state = 92;\n this.match(FHIRPathParser.TIME);\n break;\n\n case 7:\n localctx = new QuantityLiteralContext(this, localctx);\n this.enterOuterAlt(localctx, 7);\n this.state = 93;\n this.quantity();\n break;\n\n }\n } catch (re) {\n \tif(re instanceof antlr4.error.RecognitionException) {\n\t localctx.exception = re;\n\t this._errHandler.reportError(this, re);\n\t this._errHandler.recover(this, re);\n\t } else {\n\t \tthrow re;\n\t }\n } finally {\n this.exitRule();\n }\n return localctx;\n};\n\nfunction ExternalConstantContext(parser, parent, invokingState) {\n\tif(parent===undefined) {\n\t parent = null;\n\t}\n\tif(invokingState===undefined || invokingState===null) {\n\t\tinvokingState = -1;\n\t}\n\tantlr4.ParserRuleContext.call(this, parent, invokingState);\n this.parser = parser;\n this.ruleIndex = FHIRPathParser.RULE_externalConstant;\n return this;\n}\n\nExternalConstantContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);\nExternalConstantContext.prototype.constructor = ExternalConstantContext;\n\nExternalConstantContext.prototype.identifier = function() {\n return this.getTypedRuleContext(IdentifierContext,0);\n};\n\nExternalConstantContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterExternalConstant(this);\n\t}\n};\n\nExternalConstantContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitExternalConstant(this);\n\t}\n};\n\n\n\n\nFHIRPathParser.ExternalConstantContext = ExternalConstantContext;\n\nFHIRPathParser.prototype.externalConstant = function() {\n\n var localctx = new ExternalConstantContext(this, this._ctx, this.state);\n this.enterRule(localctx, 6, FHIRPathParser.RULE_externalConstant);\n try {\n this.enterOuterAlt(localctx, 1);\n this.state = 96;\n this.match(FHIRPathParser.T__33);\n this.state = 97;\n this.identifier();\n } catch (re) {\n \tif(re instanceof antlr4.error.RecognitionException) {\n\t localctx.exception = re;\n\t this._errHandler.reportError(this, re);\n\t this._errHandler.recover(this, re);\n\t } else {\n\t \tthrow re;\n\t }\n } finally {\n this.exitRule();\n }\n return localctx;\n};\n\nfunction InvocationContext(parser, parent, invokingState) {\n\tif(parent===undefined) {\n\t parent = null;\n\t}\n\tif(invokingState===undefined || invokingState===null) {\n\t\tinvokingState = -1;\n\t}\n\tantlr4.ParserRuleContext.call(this, parent, invokingState);\n this.parser = parser;\n this.ruleIndex = FHIRPathParser.RULE_invocation;\n return this;\n}\n\nInvocationContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);\nInvocationContext.prototype.constructor = InvocationContext;\n\n\n \nInvocationContext.prototype.copyFrom = function(ctx) {\n antlr4.ParserRuleContext.prototype.copyFrom.call(this, ctx);\n};\n\n\nfunction ThisInvocationContext(parser, ctx) {\n\tInvocationContext.call(this, parser);\n InvocationContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nThisInvocationContext.prototype = Object.create(InvocationContext.prototype);\nThisInvocationContext.prototype.constructor = ThisInvocationContext;\n\nFHIRPathParser.ThisInvocationContext = ThisInvocationContext;\n\nThisInvocationContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterThisInvocation(this);\n\t}\n};\n\nThisInvocationContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitThisInvocation(this);\n\t}\n};\n\n\nfunction FunctionInvocationContext(parser, ctx) {\n\tInvocationContext.call(this, parser);\n InvocationContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nFunctionInvocationContext.prototype = Object.create(InvocationContext.prototype);\nFunctionInvocationContext.prototype.constructor = FunctionInvocationContext;\n\nFHIRPathParser.FunctionInvocationContext = FunctionInvocationContext;\n\nFunctionInvocationContext.prototype.functn = function() {\n return this.getTypedRuleContext(FunctnContext,0);\n};\nFunctionInvocationContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterFunctionInvocation(this);\n\t}\n};\n\nFunctionInvocationContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitFunctionInvocation(this);\n\t}\n};\n\n\nfunction MemberInvocationContext(parser, ctx) {\n\tInvocationContext.call(this, parser);\n InvocationContext.prototype.copyFrom.call(this, ctx);\n return this;\n}\n\nMemberInvocationContext.prototype = Object.create(InvocationContext.prototype);\nMemberInvocationContext.prototype.constructor = MemberInvocationContext;\n\nFHIRPathParser.MemberInvocationContext = MemberInvocationContext;\n\nMemberInvocationContext.prototype.identifier = function() {\n return this.getTypedRuleContext(IdentifierContext,0);\n};\nMemberInvocationContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterMemberInvocation(this);\n\t}\n};\n\nMemberInvocationContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitMemberInvocation(this);\n\t}\n};\n\n\n\nFHIRPathParser.InvocationContext = InvocationContext;\n\nFHIRPathParser.prototype.invocation = function() {\n\n var localctx = new InvocationContext(this, this._ctx, this.state);\n this.enterRule(localctx, 8, FHIRPathParser.RULE_invocation);\n try {\n this.state = 102;\n this._errHandler.sync(this);\n var la_ = this._interp.adaptivePredict(this._input,5,this._ctx);\n switch(la_) {\n case 1:\n localctx = new MemberInvocationContext(this, localctx);\n this.enterOuterAlt(localctx, 1);\n this.state = 99;\n this.identifier();\n break;\n\n case 2:\n localctx = new FunctionInvocationContext(this, localctx);\n this.enterOuterAlt(localctx, 2);\n this.state = 100;\n this.functn();\n break;\n\n case 3:\n localctx = new ThisInvocationContext(this, localctx);\n this.enterOuterAlt(localctx, 3);\n this.state = 101;\n this.match(FHIRPathParser.T__34);\n break;\n\n }\n } catch (re) {\n \tif(re instanceof antlr4.error.RecognitionException) {\n\t localctx.exception = re;\n\t this._errHandler.reportError(this, re);\n\t this._errHandler.recover(this, re);\n\t } else {\n\t \tthrow re;\n\t }\n } finally {\n this.exitRule();\n }\n return localctx;\n};\n\nfunction FunctnContext(parser, parent, invokingState) {\n\tif(parent===undefined) {\n\t parent = null;\n\t}\n\tif(invokingState===undefined || invokingState===null) {\n\t\tinvokingState = -1;\n\t}\n\tantlr4.ParserRuleContext.call(this, parent, invokingState);\n this.parser = parser;\n this.ruleIndex = FHIRPathParser.RULE_functn;\n return this;\n}\n\nFunctnContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);\nFunctnContext.prototype.constructor = FunctnContext;\n\nFunctnContext.prototype.identifier = function() {\n return this.getTypedRuleContext(IdentifierContext,0);\n};\n\nFunctnContext.prototype.paramList = function() {\n return this.getTypedRuleContext(ParamListContext,0);\n};\n\nFunctnContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterFunctn(this);\n\t}\n};\n\nFunctnContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitFunctn(this);\n\t}\n};\n\n\n\n\nFHIRPathParser.FunctnContext = FunctnContext;\n\nFHIRPathParser.prototype.functn = function() {\n\n var localctx = new FunctnContext(this, this._ctx, this.state);\n this.enterRule(localctx, 10, FHIRPathParser.RULE_functn);\n var _la = 0; // Token type\n try {\n this.enterOuterAlt(localctx, 1);\n this.state = 104;\n this.identifier();\n this.state = 105;\n this.match(FHIRPathParser.T__27);\n this.state = 107;\n this._errHandler.sync(this);\n _la = this._input.LA(1);\n if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << FHIRPathParser.T__3) | (1 << FHIRPathParser.T__4) | (1 << FHIRPathParser.T__15) | (1 << FHIRPathParser.T__16) | (1 << FHIRPathParser.T__22) | (1 << FHIRPathParser.T__27) | (1 << FHIRPathParser.T__29))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (FHIRPathParser.T__31 - 32)) | (1 << (FHIRPathParser.T__32 - 32)) | (1 << (FHIRPathParser.T__33 - 32)) | (1 << (FHIRPathParser.T__34 - 32)) | (1 << (FHIRPathParser.DATETIME - 32)) | (1 << (FHIRPathParser.TIME - 32)) | (1 << (FHIRPathParser.IDENTIFIER - 32)) | (1 << (FHIRPathParser.QUOTEDIDENTIFIER - 32)) | (1 << (FHIRPathParser.STRING - 32)) | (1 << (FHIRPathParser.NUMBER - 32)))) !== 0)) {\n this.state = 106;\n this.paramList();\n }\n\n this.state = 109;\n this.match(FHIRPathParser.T__28);\n } catch (re) {\n \tif(re instanceof antlr4.error.RecognitionException) {\n\t localctx.exception = re;\n\t this._errHandler.reportError(this, re);\n\t this._errHandler.recover(this, re);\n\t } else {\n\t \tthrow re;\n\t }\n } finally {\n this.exitRule();\n }\n return localctx;\n};\n\nfunction ParamListContext(parser, parent, invokingState) {\n\tif(parent===undefined) {\n\t parent = null;\n\t}\n\tif(invokingState===undefined || invokingState===null) {\n\t\tinvokingState = -1;\n\t}\n\tantlr4.ParserRuleContext.call(this, parent, invokingState);\n this.parser = parser;\n this.ruleIndex = FHIRPathParser.RULE_paramList;\n return this;\n}\n\nParamListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);\nParamListContext.prototype.constructor = ParamListContext;\n\nParamListContext.prototype.expression = function(i) {\n if(i===undefined) {\n i = null;\n }\n if(i===null) {\n return this.getTypedRuleContexts(ExpressionContext);\n } else {\n return this.getTypedRuleContext(ExpressionContext,i);\n }\n};\n\nParamListContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterParamList(this);\n\t}\n};\n\nParamListContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitParamList(this);\n\t}\n};\n\n\n\n\nFHIRPathParser.ParamListContext = ParamListContext;\n\nFHIRPathParser.prototype.paramList = function() {\n\n var localctx = new ParamListContext(this, this._ctx, this.state);\n this.enterRule(localctx, 12, FHIRPathParser.RULE_paramList);\n var _la = 0; // Token type\n try {\n this.enterOuterAlt(localctx, 1);\n this.state = 111;\n this.expression(0);\n this.state = 116;\n this._errHandler.sync(this);\n _la = this._input.LA(1);\n while(_la===FHIRPathParser.T__35) {\n this.state = 112;\n this.match(FHIRPathParser.T__35);\n this.state = 113;\n this.expression(0);\n this.state = 118;\n this._errHandler.sync(this);\n _la = this._input.LA(1);\n }\n } catch (re) {\n \tif(re instanceof antlr4.error.RecognitionException) {\n\t localctx.exception = re;\n\t this._errHandler.reportError(this, re);\n\t this._errHandler.recover(this, re);\n\t } else {\n\t \tthrow re;\n\t }\n } finally {\n this.exitRule();\n }\n return localctx;\n};\n\nfunction QuantityContext(parser, parent, invokingState) {\n\tif(parent===undefined) {\n\t parent = null;\n\t}\n\tif(invokingState===undefined || invokingState===null) {\n\t\tinvokingState = -1;\n\t}\n\tantlr4.ParserRuleContext.call(this, parent, invokingState);\n this.parser = parser;\n this.ruleIndex = FHIRPathParser.RULE_quantity;\n return this;\n}\n\nQuantityContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);\nQuantityContext.prototype.constructor = QuantityContext;\n\nQuantityContext.prototype.NUMBER = function() {\n return this.getToken(FHIRPathParser.NUMBER, 0);\n};\n\nQuantityContext.prototype.unit = function() {\n return this.getTypedRuleContext(UnitContext,0);\n};\n\nQuantityContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterQuantity(this);\n\t}\n};\n\nQuantityContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitQuantity(this);\n\t}\n};\n\n\n\n\nFHIRPathParser.QuantityContext = QuantityContext;\n\nFHIRPathParser.prototype.quantity = function() {\n\n var localctx = new QuantityContext(this, this._ctx, this.state);\n this.enterRule(localctx, 14, FHIRPathParser.RULE_quantity);\n try {\n this.enterOuterAlt(localctx, 1);\n this.state = 119;\n this.match(FHIRPathParser.NUMBER);\n this.state = 121;\n this._errHandler.sync(this);\n var la_ = this._interp.adaptivePredict(this._input,8,this._ctx);\n if(la_===1) {\n this.state = 120;\n this.unit();\n\n }\n } catch (re) {\n \tif(re instanceof antlr4.error.RecognitionException) {\n\t localctx.exception = re;\n\t this._errHandler.reportError(this, re);\n\t this._errHandler.recover(this, re);\n\t } else {\n\t \tthrow re;\n\t }\n } finally {\n this.exitRule();\n }\n return localctx;\n};\n\nfunction UnitContext(parser, parent, invokingState) {\n\tif(parent===undefined) {\n\t parent = null;\n\t}\n\tif(invokingState===undefined || invokingState===null) {\n\t\tinvokingState = -1;\n\t}\n\tantlr4.ParserRuleContext.call(this, parent, invokingState);\n this.parser = parser;\n this.ruleIndex = FHIRPathParser.RULE_unit;\n return this;\n}\n\nUnitContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);\nUnitContext.prototype.constructor = UnitContext;\n\nUnitContext.prototype.dateTimePrecision = function() {\n return this.getTypedRuleContext(DateTimePrecisionContext,0);\n};\n\nUnitContext.prototype.pluralDateTimePrecision = function() {\n return this.getTypedRuleContext(PluralDateTimePrecisionContext,0);\n};\n\nUnitContext.prototype.STRING = function() {\n return this.getToken(FHIRPathParser.STRING, 0);\n};\n\nUnitContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterUnit(this);\n\t}\n};\n\nUnitContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitUnit(this);\n\t}\n};\n\n\n\n\nFHIRPathParser.UnitContext = UnitContext;\n\nFHIRPathParser.prototype.unit = function() {\n\n var localctx = new UnitContext(this, this._ctx, this.state);\n this.enterRule(localctx, 16, FHIRPathParser.RULE_unit);\n try {\n this.state = 126;\n this._errHandler.sync(this);\n switch(this._input.LA(1)) {\n case FHIRPathParser.T__36:\n case FHIRPathParser.T__37:\n case FHIRPathParser.T__38:\n case FHIRPathParser.T__39:\n case FHIRPathParser.T__40:\n case FHIRPathParser.T__41:\n case FHIRPathParser.T__42:\n case FHIRPathParser.T__43:\n this.enterOuterAlt(localctx, 1);\n this.state = 123;\n this.dateTimePrecision();\n break;\n case FHIRPathParser.T__44:\n case FHIRPathParser.T__45:\n case FHIRPathParser.T__46:\n case FHIRPathParser.T__47:\n case FHIRPathParser.T__48:\n case FHIRPathParser.T__49:\n case FHIRPathParser.T__50:\n case FHIRPathParser.T__51:\n this.enterOuterAlt(localctx, 2);\n this.state = 124;\n this.pluralDateTimePrecision();\n break;\n case FHIRPathParser.STRING:\n this.enterOuterAlt(localctx, 3);\n this.state = 125;\n this.match(FHIRPathParser.STRING);\n break;\n default:\n throw new antlr4.error.NoViableAltException(this);\n }\n } catch (re) {\n \tif(re instanceof antlr4.error.RecognitionException) {\n\t localctx.exception = re;\n\t this._errHandler.reportError(this, re);\n\t this._errHandler.recover(this, re);\n\t } else {\n\t \tthrow re;\n\t }\n } finally {\n this.exitRule();\n }\n return localctx;\n};\n\nfunction DateTimePrecisionContext(parser, parent, invokingState) {\n\tif(parent===undefined) {\n\t parent = null;\n\t}\n\tif(invokingState===undefined || invokingState===null) {\n\t\tinvokingState = -1;\n\t}\n\tantlr4.ParserRuleContext.call(this, parent, invokingState);\n this.parser = parser;\n this.ruleIndex = FHIRPathParser.RULE_dateTimePrecision;\n return this;\n}\n\nDateTimePrecisionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);\nDateTimePrecisionContext.prototype.constructor = DateTimePrecisionContext;\n\n\nDateTimePrecisionContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterDateTimePrecision(this);\n\t}\n};\n\nDateTimePrecisionContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitDateTimePrecision(this);\n\t}\n};\n\n\n\n\nFHIRPathParser.DateTimePrecisionContext = DateTimePrecisionContext;\n\nFHIRPathParser.prototype.dateTimePrecision = function() {\n\n var localctx = new DateTimePrecisionContext(this, this._ctx, this.state);\n this.enterRule(localctx, 18, FHIRPathParser.RULE_dateTimePrecision);\n var _la = 0; // Token type\n try {\n this.enterOuterAlt(localctx, 1);\n this.state = 128;\n _la = this._input.LA(1);\n if(!(((((_la - 37)) & ~0x1f) == 0 && ((1 << (_la - 37)) & ((1 << (FHIRPathParser.T__36 - 37)) | (1 << (FHIRPathParser.T__37 - 37)) | (1 << (FHIRPathParser.T__38 - 37)) | (1 << (FHIRPathParser.T__39 - 37)) | (1 << (FHIRPathParser.T__40 - 37)) | (1 << (FHIRPathParser.T__41 - 37)) | (1 << (FHIRPathParser.T__42 - 37)) | (1 << (FHIRPathParser.T__43 - 37)))) !== 0))) {\n this._errHandler.recoverInline(this);\n }\n else {\n \tthis._errHandler.reportMatch(this);\n this.consume();\n }\n } catch (re) {\n \tif(re instanceof antlr4.error.RecognitionException) {\n\t localctx.exception = re;\n\t this._errHandler.reportError(this, re);\n\t this._errHandler.recover(this, re);\n\t } else {\n\t \tthrow re;\n\t }\n } finally {\n this.exitRule();\n }\n return localctx;\n};\n\nfunction PluralDateTimePrecisionContext(parser, parent, invokingState) {\n\tif(parent===undefined) {\n\t parent = null;\n\t}\n\tif(invokingState===undefined || invokingState===null) {\n\t\tinvokingState = -1;\n\t}\n\tantlr4.ParserRuleContext.call(this, parent, invokingState);\n this.parser = parser;\n this.ruleIndex = FHIRPathParser.RULE_pluralDateTimePrecision;\n return this;\n}\n\nPluralDateTimePrecisionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);\nPluralDateTimePrecisionContext.prototype.constructor = PluralDateTimePrecisionContext;\n\n\nPluralDateTimePrecisionContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterPluralDateTimePrecision(this);\n\t}\n};\n\nPluralDateTimePrecisionContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitPluralDateTimePrecision(this);\n\t}\n};\n\n\n\n\nFHIRPathParser.PluralDateTimePrecisionContext = PluralDateTimePrecisionContext;\n\nFHIRPathParser.prototype.pluralDateTimePrecision = function() {\n\n var localctx = new PluralDateTimePrecisionContext(this, this._ctx, this.state);\n this.enterRule(localctx, 20, FHIRPathParser.RULE_pluralDateTimePrecision);\n var _la = 0; // Token type\n try {\n this.enterOuterAlt(localctx, 1);\n this.state = 130;\n _la = this._input.LA(1);\n if(!(((((_la - 45)) & ~0x1f) == 0 && ((1 << (_la - 45)) & ((1 << (FHIRPathParser.T__44 - 45)) | (1 << (FHIRPathParser.T__45 - 45)) | (1 << (FHIRPathParser.T__46 - 45)) | (1 << (FHIRPathParser.T__47 - 45)) | (1 << (FHIRPathParser.T__48 - 45)) | (1 << (FHIRPathParser.T__49 - 45)) | (1 << (FHIRPathParser.T__50 - 45)) | (1 << (FHIRPathParser.T__51 - 45)))) !== 0))) {\n this._errHandler.recoverInline(this);\n }\n else {\n \tthis._errHandler.reportMatch(this);\n this.consume();\n }\n } catch (re) {\n \tif(re instanceof antlr4.error.RecognitionException) {\n\t localctx.exception = re;\n\t this._errHandler.reportError(this, re);\n\t this._errHandler.recover(this, re);\n\t } else {\n\t \tthrow re;\n\t }\n } finally {\n this.exitRule();\n }\n return localctx;\n};\n\nfunction TypeSpecifierContext(parser, parent, invokingState) {\n\tif(parent===undefined) {\n\t parent = null;\n\t}\n\tif(invokingState===undefined || invokingState===null) {\n\t\tinvokingState = -1;\n\t}\n\tantlr4.ParserRuleContext.call(this, parent, invokingState);\n this.parser = parser;\n this.ruleIndex = FHIRPathParser.RULE_typeSpecifier;\n return this;\n}\n\nTypeSpecifierContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);\nTypeSpecifierContext.prototype.constructor = TypeSpecifierContext;\n\nTypeSpecifierContext.prototype.qualifiedIdentifier = function() {\n return this.getTypedRuleContext(QualifiedIdentifierContext,0);\n};\n\nTypeSpecifierContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterTypeSpecifier(this);\n\t}\n};\n\nTypeSpecifierContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitTypeSpecifier(this);\n\t}\n};\n\n\n\n\nFHIRPathParser.TypeSpecifierContext = TypeSpecifierContext;\n\nFHIRPathParser.prototype.typeSpecifier = function() {\n\n var localctx = new TypeSpecifierContext(this, this._ctx, this.state);\n this.enterRule(localctx, 22, FHIRPathParser.RULE_typeSpecifier);\n try {\n this.enterOuterAlt(localctx, 1);\n this.state = 132;\n this.qualifiedIdentifier();\n } catch (re) {\n \tif(re instanceof antlr4.error.RecognitionException) {\n\t localctx.exception = re;\n\t this._errHandler.reportError(this, re);\n\t this._errHandler.recover(this, re);\n\t } else {\n\t \tthrow re;\n\t }\n } finally {\n this.exitRule();\n }\n return localctx;\n};\n\nfunction QualifiedIdentifierContext(parser, parent, invokingState) {\n\tif(parent===undefined) {\n\t parent = null;\n\t}\n\tif(invokingState===undefined || invokingState===null) {\n\t\tinvokingState = -1;\n\t}\n\tantlr4.ParserRuleContext.call(this, parent, invokingState);\n this.parser = parser;\n this.ruleIndex = FHIRPathParser.RULE_qualifiedIdentifier;\n return this;\n}\n\nQualifiedIdentifierContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);\nQualifiedIdentifierContext.prototype.constructor = QualifiedIdentifierContext;\n\nQualifiedIdentifierContext.prototype.identifier = function(i) {\n if(i===undefined) {\n i = null;\n }\n if(i===null) {\n return this.getTypedRuleContexts(IdentifierContext);\n } else {\n return this.getTypedRuleContext(IdentifierContext,i);\n }\n};\n\nQualifiedIdentifierContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterQualifiedIdentifier(this);\n\t}\n};\n\nQualifiedIdentifierContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitQualifiedIdentifier(this);\n\t}\n};\n\n\n\n\nFHIRPathParser.QualifiedIdentifierContext = QualifiedIdentifierContext;\n\nFHIRPathParser.prototype.qualifiedIdentifier = function() {\n\n var localctx = new QualifiedIdentifierContext(this, this._ctx, this.state);\n this.enterRule(localctx, 24, FHIRPathParser.RULE_qualifiedIdentifier);\n try {\n this.enterOuterAlt(localctx, 1);\n this.state = 134;\n this.identifier();\n this.state = 139;\n this._errHandler.sync(this);\n var _alt = this._interp.adaptivePredict(this._input,10,this._ctx)\n while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {\n if(_alt===1) {\n this.state = 135;\n this.match(FHIRPathParser.T__0);\n this.state = 136;\n this.identifier(); \n }\n this.state = 141;\n this._errHandler.sync(this);\n _alt = this._interp.adaptivePredict(this._input,10,this._ctx);\n }\n\n } catch (re) {\n \tif(re instanceof antlr4.error.RecognitionException) {\n\t localctx.exception = re;\n\t this._errHandler.reportError(this, re);\n\t this._errHandler.recover(this, re);\n\t } else {\n\t \tthrow re;\n\t }\n } finally {\n this.exitRule();\n }\n return localctx;\n};\n\nfunction IdentifierContext(parser, parent, invokingState) {\n\tif(parent===undefined) {\n\t parent = null;\n\t}\n\tif(invokingState===undefined || invokingState===null) {\n\t\tinvokingState = -1;\n\t}\n\tantlr4.ParserRuleContext.call(this, parent, invokingState);\n this.parser = parser;\n this.ruleIndex = FHIRPathParser.RULE_identifier;\n return this;\n}\n\nIdentifierContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);\nIdentifierContext.prototype.constructor = IdentifierContext;\n\nIdentifierContext.prototype.IDENTIFIER = function() {\n return this.getToken(FHIRPathParser.IDENTIFIER, 0);\n};\n\nIdentifierContext.prototype.QUOTEDIDENTIFIER = function() {\n return this.getToken(FHIRPathParser.QUOTEDIDENTIFIER, 0);\n};\n\nIdentifierContext.prototype.enterRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.enterIdentifier(this);\n\t}\n};\n\nIdentifierContext.prototype.exitRule = function(listener) {\n if(listener instanceof FHIRPathListener ) {\n listener.exitIdentifier(this);\n\t}\n};\n\n\n\n\nFHIRPathParser.IdentifierContext = IdentifierContext;\n\nFHIRPathParser.prototype.identifier = function() {\n\n var localctx = new IdentifierContext(this, this._ctx, this.state);\n this.enterRule(localctx, 26, FHIRPathParser.RULE_identifier);\n var _la = 0; // Token type\n try {\n this.enterOuterAlt(localctx, 1);\n this.state = 142;\n _la = this._input.LA(1);\n if(!((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << FHIRPathParser.T__15) | (1 << FHIRPathParser.T__16) | (1 << FHIRPathParser.T__22))) !== 0) || _la===FHIRPathParser.IDENTIFIER || _la===FHIRPathParser.QUOTEDIDENTIFIER)) {\n this._errHandler.recoverInline(this);\n }\n else {\n \tthis._errHandler.reportMatch(this);\n this.consume();\n }\n } catch (re) {\n \tif(re instanceof antlr4.error.RecognitionException) {\n\t localctx.exception = re;\n\t this._errHandler.reportError(this, re);\n\t this._errHandler.recover(this, re);\n\t } else {\n\t \tthrow re;\n\t }\n } finally {\n this.exitRule();\n }\n return localctx;\n};\n\n\nFHIRPathParser.prototype.sempred = function(localctx, ruleIndex, predIndex) {\n\tswitch(ruleIndex) {\n\tcase 0:\n\t\t\treturn this.expression_sempred(localctx, predIndex);\n default:\n throw \"No predicate with index:\" + ruleIndex;\n }\n};\n\nFHIRPathParser.prototype.expression_sempred = function(localctx, predIndex) {\n\tswitch(predIndex) {\n\t\tcase 0:\n\t\t\treturn this.precpred(this._ctx, 10);\n\t\tcase 1:\n\t\t\treturn this.precpred(this._ctx, 9);\n\t\tcase 2:\n\t\t\treturn this.precpred(this._ctx, 8);\n\t\tcase 3:\n\t\t\treturn this.precpred(this._ctx, 7);\n\t\tcase 4:\n\t\t\treturn this.precpred(this._ctx, 5);\n\t\tcase 5:\n\t\t\treturn this.precpred(this._ctx, 4);\n\t\tcase 6:\n\t\t\treturn this.precpred(this._ctx, 3);\n\t\tcase 7:\n\t\t\treturn this.precpred(this._ctx, 2);\n\t\tcase 8:\n\t\t\treturn this.precpred(this._ctx, 1);\n\t\tcase 9:\n\t\t\treturn this.precpred(this._ctx, 13);\n\t\tcase 10:\n\t\t\treturn this.precpred(this._ctx, 12);\n\t\tcase 11:\n\t\t\treturn this.precpred(this._ctx, 6);\n\t\tdefault:\n\t\t\tthrow \"No predicate with index:\" + predIndex;\n\t}\n};\n\n\nexports.FHIRPathParser = FHIRPathParser;\n","// This file holds code to hande the FHIRPath Combining functions.\n\nvar combineFns = {};\nvar existence = require('./existence');\n\ncombineFns.unionOp = function(coll1, coll2){\n return existence.distinctFn(coll1.concat(coll2));\n};\n\ncombineFns.combineFn = function(coll1, coll2){\n return coll1.concat(coll2);\n};\n\n\nmodule.exports = combineFns;\n","\n// This file holds code to hande the FHIRPath Existence functions (5.1 in the\n// specification).\n\nvar util = require(\"./utilities\");\n\nvar engine = {};\n\nengine.iifMacro = function(data, cond, ok, fail) {\n if(util.isTrue(cond(data))) {\n return ok(data);\n } else {\n return fail(data);\n }\n};\n\nengine.traceFn = function(x, label) {\n console.log(\"TRACE:[\" + (label || \"\") + \"]\", JSON.stringify(x, null, \" \"));\n return x;\n};\n\nvar intRegex = /^[+-]?\\d+$/;\nengine.toInteger = function(coll){\n if(coll.length != 1) { return []; }\n var v = coll[0];\n if(v === false) {return 0;}\n if(v === true) {return 1;}\n if(typeof v === \"number\") {\n if(Number.isInteger(v)) {\n return v;\n } else {\n return [];\n }\n }\n if(typeof v === \"string\") {\n if(intRegex.test(v)){\n return parseInt(v);\n } else {\n throw new Error(\"Could not convert to ineger: \" + v);\n }\n }\n return [];\n};\n\nvar numRegex = /^[+-]?\\d+(\\.\\d+)?$/;\nengine.toDecimal = function(coll){\n if(coll.length != 1) { return []; }\n var v = coll[0];\n if(v === false) {return 0;}\n if(v === true) {return 1.0;}\n if(typeof v === \"number\") {\n return v;\n }\n if(typeof v === \"string\") {\n if(numRegex.test(v)){\n return Number.parseFloat(v);\n } else {\n throw new Error(\"Could not convert to decimal: \" + v);\n }\n }\n return [];\n};\n\nengine.toString = function(coll){\n if(coll.length != 1) { return []; }\n var v = coll[0];\n return v.toString();\n};\n\nmodule.exports = engine;\n","// This file holds code to hande the FHIRPath Math functions.\n\nvar util = require(\"./utilities\");\nvar deepEqual = require('./deep-equal');\n\nvar engine = {};\n\nfunction equality(x,y){\n if(util.isEmpty(x) || util.isEmpty(y)) { return []; }\n return deepEqual(x, y);\n}\n\nfunction equivalence(x,y){\n if(util.isEmpty(x) && util.isEmpty(y)) { return [true]; }\n if(util.isEmpty(x) || util.isEmpty(y)) { return []; }\n return deepEqual(x, y, {fuzzy: true});\n}\n\nengine.equal = function(a, b){\n return equality(a, b);\n};\n\nengine.unequal = function(a, b){\n return !equality(a, b);\n};\nengine.equival = function(a, b){\n return equivalence(a, b);\n};\n\nengine.unequival = function(a, b){\n return !equivalence(a, b);\n};\n\nfunction typecheck(a, b){\n util.assertAtMostOne(a, \"Singleton was expected\");\n util.assertAtMostOne(b, \"Singleton was expected\");\n a = a[0];\n b = b[0];\n let lType = typeof a;\n let rType = typeof b;\n if (lType != rType) {\n util.raiseError('Type of \"'+a+'\" did not match type of \"'+b+'\"', 'InequalityExpression');\n }\n}\n\nengine.lt = function(a, b){\n if (!a.length || !b.length) return [];\n typecheck(a,b);\n return a[0] < b[0];\n\n};\n\nengine.gt = function(a, b){\n if (!a.length || !b.length) return [];\n typecheck(a,b);\n return a[0] > b[0];\n\n};\n\nengine.lte = function(a, b){\n if (!a.length || !b.length) return [];\n typecheck(a,b);\n return a[0] <= b[0];\n};\n\nengine.gte = function(a, b){\n if (!a.length || !b.length) return [];\n typecheck(a,b);\n return a[0] >= b[0];\n};\n\n\nmodule.exports = engine;\n","// This file holds code to hande the FHIRPath Math functions.\n\nvar deepEqual = require('./deep-equal');\n\nvar engine = {};\n\n\n// b is assumed to have one element and it tests whether b[0] is in a\nfunction containsImpl(a,b){\n if(b.length == 0) { return true; }\n for(var i = 0; i < a.length; i++){\n if(deepEqual(a[i], b[0])) { return true; }\n }\n return false;\n}\n\nengine.contains = function(a, b){\n if(b.length == 0) { return []; }\n if(a.length == 0) { return false; }\n if(b.length > 1) {\n throw new Error(\"Expected singleton on right side of contains, got \" + JSON.stringify(b));\n }\n return containsImpl(a,b);\n};\n\nengine.in = function(a, b){\n if(a.length == 0) { return []; }\n if(b.length == 0) { return false; }\n if(a.length > 1) {\n throw new Error(\"Expected singleton on right side of in, got \" + JSON.stringify(b));\n }\n return containsImpl(b,a);\n};\n\nmodule.exports = engine;\n","// This file holds code to hande the FHIRPath Math functions.\n\n/**\n * Adds the math functions to the given FHIRPath engine.\n */\n\nvar engine = {};\n\nengine.amp = function(x, y){\n return (x || \"\") + (y || \"\");\n};\n\n//HACK: for only polymorphic function\nengine.plus = function(xs, ys){\n if(xs.length == 1 && ys.length == 1) {\n var x = xs[0];\n var y = ys[0];\n if(typeof x == \"string\" && typeof y == \"string\") {\n return x + y;\n }\n if(typeof x == \"number\" && typeof y == \"number\") {\n return x + y;\n }\n }\n throw new Error(\"Can not \" + JSON.stringify(xs) + \" + \" + JSON.stringify(ys));\n};\n\nengine.minus = function(x, y){\n return x - y;\n};\n\n\nengine.mul = function(x, y){\n return x * y;\n};\n\nengine.div = function(x, y){\n return x / y;\n};\n\nengine.intdiv = function(x, y){\n return Math.floor(x / y);\n};\n\nengine.mod = function(x, y){\n return x % y;\n};\n\n\nmodule.exports = engine;\n","var engine = {};\n\nfunction ensureStringSingleton(x){\n if(x.length == 1 && typeof x[0] === \"string\") {\n return x[0];\n }\n throw new Error('Expected string, but got ' + JSON.stringify(x));\n}\n\nengine.indexOf = function(coll, substr){\n var str = ensureStringSingleton(coll);\n return str.indexOf(substr);\n};\n\nengine.substring = function(coll, start, length){\n var str = ensureStringSingleton(coll);\n return str.substring(start, start + length);\n};\n\nengine.startsWith = function(coll, prefix){\n var str = ensureStringSingleton(coll);\n return str.startsWith(prefix);\n};\n\nengine.endsWith = function(coll, postfix){\n var str = ensureStringSingleton(coll);\n return str.endsWith(postfix);\n};\n\nengine.containsFn = function(coll, substr){\n var str = ensureStringSingleton(coll);\n return str.includes(substr);\n};\n\n\nengine.matches = function(coll, regex){\n var str = ensureStringSingleton(coll);\n var reg = new RegExp(regex);\n return reg.test(str);\n\n};\n\nengine.replace = function(coll, regex, repl){\n var str = ensureStringSingleton(coll);\n return str.replace(regex, repl);\n};\n\nengine.replaceMatches = function(coll, regex, repl){\n var str = ensureStringSingleton(coll);\n var reg = new RegExp(regex);\n return str.replace(reg, repl);\n};\n\nengine.length = function(coll){\n var str = ensureStringSingleton(coll);\n return str.length;\n};\n\nmodule.exports = engine;\n","\nvar engine = {};\n\nengine.children = function(coll){\n return coll.reduce(function(acc, x){\n if(typeof x === 'object'){\n for (var prop in x) {\n if(x.hasOwnProperty(prop)) {\n var v = x[prop];\n if(Array.isArray(v)){\n acc.push.apply(acc, v);\n } else {\n acc.push(v);\n }\n }\n }\n return acc;\n } else {\n return acc;\n }\n }, []);\n};\n\nengine.descendants = function(coll){\n var ch = engine.children(coll);\n var res = [];\n while(ch.length > 0){\n res.push.apply(res, ch);\n ch = engine.children(ch);\n }\n return res;\n};\n\nmodule.exports = engine;\n","var engine = {};\n\n\nengine.now = function(){\n};\n\nengine.today = function(){\n};\n\nmodule.exports = engine;\n","var engine = {};\n\nengine.orOp = function(a, b) {\n if(Array.isArray(b)){\n if(a === true){\n return true;\n } else if (a === false) {\n return [];\n } else if (Array.isArray(a)) {\n return [];\n }\n }\n if(Array.isArray(a)){\n if(b === true ){\n return true;\n } else {\n return [];\n }\n }\n return a || b;\n};\n\nengine.andOp = function(a, b) {\n if(Array.isArray(b)){\n if(a === true){\n return [];\n } else if (a === false) {\n return false;\n } else if (Array.isArray(a)) {\n return [];\n }\n }\n if(Array.isArray(a)){\n if(b === true ){\n return [];\n } else {\n return false;\n }\n }\n return a && b;\n};\n\nengine.xorOp = function(a, b) {\n // If a or b are arrays, they must be the empty set.\n // In that case, the result is always the empty set.\n if (Array.isArray(a) || Array.isArray(b))\n return [];\n return ( a && !b ) || ( !a && b );\n};\n\nengine.impliesOp = function(a, b) {\n if(Array.isArray(b)){\n if(a === true){\n return [];\n } else if (a === false) {\n return true;\n } else if (Array.isArray(a)) {\n return [];\n }\n }\n if(Array.isArray(a)){\n if(b === true ){\n return true;\n } else {\n return [];\n }\n }\n if(a === false) { return true; }\n return (a && b);\n};\n\n\nmodule.exports = engine;\n","/**\n * @license\n * Lodash \n * Copyright OpenJS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.15';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading and trailing whitespace. */\n var reTrim = /^\\s+|\\s+$/g,\n reTrimStart = /^\\s+/,\n reTrimEnd = /\\s+$/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n var index = -1;\n iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n value = iteratee(value);\n\n var low = 0,\n high = array == null ? 0 : array.length,\n valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '

        ' + func(text) + '

        ';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '

        fred, barney, & pebbles

        '\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<%- value %>');\n * compiled({ 'value': ' +
        diff --git a/public/mapper.js b/public/mapper.js new file mode 100644 index 0000000000..e69de29bb2 From 4f14825514c2733b0780ce800cadcd91e362b281 Mon Sep 17 00:00:00 2001 From: Dylan Date: Wed, 21 Aug 2019 11:21:45 -0400 Subject: [PATCH 8/9] add babel-polyfill as external --- config-overrides.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/config-overrides.js b/config-overrides.js index 11d9dcf546..f54ad88e07 100644 --- a/config-overrides.js +++ b/config-overrides.js @@ -10,7 +10,8 @@ const { module.exports = override( useEslintRc(), addWebpackExternals({ - 'fhir-mapper': "Mapper" + 'fhir-mapper': "Mapper", + 'babel-polyfill': "_babelPolyfill" }), addWebpackPlugin(new CopyWebpackPlugin([ { context:'node_modules/fhir-mapper/dist/', from: 'app.bundle.js*', to: 'static/js/fhir-mapper' } From bf3203fbbe9bd516ef3c6b110cf80a1a44fb153f Mon Sep 17 00:00:00 2001 From: Dylan Date: Wed, 21 Aug 2019 16:35:17 -0400 Subject: [PATCH 9/9] bump fhir-mapper version --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index c3d9921763..14a46416df 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "downshift": "^1.31.16", "elasticlunr": "https://github.com/mgramigna/elasticlunr.js", "es6-shim": "0.35.3", - "fhir-mapper": "^2.0.0", + "fhir-mapper": "^2.0.1", "fhirclient": "^0.1.12", "flat": "^4.1.0", "flux_notes_treatment_options_rest_client": "^1.1.2", diff --git a/yarn.lock b/yarn.lock index dda8bb2a13..971c1eb60d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4732,10 +4732,10 @@ fbjs@^0.8.1, fbjs@^0.8.16, fbjs@^0.8.6, fbjs@^0.8.9: setimmediate "^1.0.5" ua-parser-js "^0.7.18" -fhir-mapper@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fhir-mapper/-/fhir-mapper-2.0.0.tgz#8720c013b6eeba8c957fd7cae7957a9a152e0679" - integrity sha512-zgqSgNOzGYI7V9fkZFl00+NlaT27yRiDR+utvso2iVpZYnJ/sv2vCwpcCeMJfOow9qWFOAl6oAisNLKbYxqY3g== +fhir-mapper@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fhir-mapper/-/fhir-mapper-2.0.1.tgz#412d7888065ba4225187d369e6e4e6e4fd81f5a0" + integrity sha512-BPuK6OZT/EkbliucYHRLAfbpWOLesDvs5QHCvDZpQ/qYhSpCNi8euP8GnxlM8Zjwh+MdUFoDsTn10RzOY2Meww== dependencies: fhirpath "^0.10.3" lodash "^4.17.13"